Beispiel #1
0
        private static string RemoveMethods(string code, IEnumerable <MethodVisitorResult> methods)
        {
            var document = new StringBuilderDocument(code);

            using (var script = new DocumentScript(
                       document,
                       FormattingOptionsFactory.CreateAllman(),
                       new TextEditorOptions()))
            {
                foreach (var method in methods)
                {
                    var offset = script.GetCurrentOffset(method.MethodDefinition.GetRegion().Begin);
                    script.Replace(method.MethodDefinition, new MethodDeclaration());
                    script.Replace(offset, new MethodDeclaration().GetText().Trim().Length, "");
                }
            }
            return(document.Text);
        }
Beispiel #2
0
        private static string RemoveClasses(string code, IEnumerable <TypeDeclaration> classes)
        {
            var document = new StringBuilderDocument(code);

            using (
                var script = new DocumentScript(
                    document,
                    FormattingOptionsFactory.CreateAllman(),
                    new TextEditorOptions()))
            {
                foreach (var @class in classes)
                {
                    var offset = script.GetCurrentOffset(@class.GetRegion().Begin);
                    script.Replace(@class, new TypeDeclaration());
                    script.Replace(offset, new TypeDeclaration().GetText().Trim().Length, "");
                }
            }
            return(document.Text);
        }
        void UpdateField(IField oldField, CodeMemberField newField)
        {
            DomRegion      region = oldField.Region;
            DocumentScript script = GetScript(region.FileName);

            int    offset    = script.GetCurrentOffset(region.Begin);
            int    endOffset = script.GetCurrentOffset(region.End);
            string code      = GenerateField(newField);

            script.Replace(offset, endOffset - offset, code);
        }
        void SaveInitializeComponents(CodeMemberMethod codeMethod)
        {
            var            bodyRegion = initializeComponents.BodyRegion;
            DocumentScript script     = GetScript(bodyRegion.FileName);

            string newline     = DocumentUtilities.GetLineTerminator(script.OriginalDocument, bodyRegion.BeginLine);
            string indentation = DocumentUtilities.GetIndentation(script.OriginalDocument, bodyRegion.BeginLine);
            string code        = "{" + newline + GenerateInitializeComponents(codeMethod, indentation, newline) + indentation + "}";

            int startOffset = script.GetCurrentOffset(bodyRegion.Begin);
            int endOffset   = script.GetCurrentOffset(bodyRegion.End);

            script.Replace(startOffset, endOffset - startOffset, code);
        }
        public static string ReplaceStringLiteralsWithVariables(string text, IEnumerable <string> macros, Func <int, int, string, string, string> onReplace)
        {
            var setting = new CompilerSettings();

            foreach (var macro in macros)
            {
                setting.ConditionalSymbols.Add(macro);
            }

            var tree = SyntaxTree.Parse(text, string.Empty, setting);

            tree.Freeze();

            var doc = new StringBuilderDocument(text);

            using (var editor = new DocumentScript(doc, FormattingOptionsFactory.CreateAllman(), TextEditorOptions.Default)) {
                var originDoc = editor.OriginalDocument;

                foreach (var node in tree.Descendants.OfType <PrimitiveExpression>().Where(e => e.Value is string))
                {
                    var line   = originDoc.GetLineByNumber(node.StartLocation.Line);
                    var result = onReplace(node.StartLocation.Line, node.StartLocation.Column, originDoc.GetText(line), node.Value as string);
                    if (result != null)
                    {
                        var        names = result.Split('.');
                        Expression exp   = new IdentifierExpression(names.First());
                        foreach (var name in names.Skip(1))
                        {
                            exp = exp.Member(name);
                        }

                        editor.Replace(node, exp);
                    }
                }
            }

            return(doc.Text);
        }