public void SaveOptions(CodeAnalysisOptions options)
 {
     using (var optionsFile = File.Open(Path.Combine(this.basePath, FileConfigName), FileMode.OpenOrCreate, FileAccess.Write))
     {
         var bytes = Encoding.UTF8.GetBytes(FileConfigurationOptions.GetDefaultJson(options));
         optionsFile.Write(bytes, 0, bytes.Length);
         optionsFile.Flush();
     }
 }
Exemplo n.º 2
0
        public static string GetContainingContext(CSharpSyntaxNode node, CodeAnalysisOptions displayInfo)
        {
            string ancestorContext = GetAncestorContext(node, displayInfo);

            string classModuleContext = GetClassModuleContext(node, displayInfo);

            string methodContext = GetMethodContext(node, displayInfo);

            string sourceContext = GetSourceContext(node, displayInfo);

            return(ancestorContext + classModuleContext + methodContext + sourceContext);
        }
Exemplo n.º 3
0
        private static string GetMethodContext(CSharpSyntaxNode node, CodeAnalysisOptions displayInfo)
        {
            string methodContext = "";

            if (displayInfo.DisplayMethodName)
            {
                methodContext += string.Format(" Method:({0, -35})", Helpers.CS.GetContainingMethodName(node));
            }
            else if (displayInfo.DisplayContainingMethodBlock)
            {
                methodContext += string.Format(" MethodBlock:({0})", Helpers.CS.GetContainingMethodBlock(node));
            }

            return(methodContext);
        }
Exemplo n.º 4
0
        private static string GetClassModuleContext(CSharpSyntaxNode node, CodeAnalysisOptions displayInfo)
        {
            string classModuleContext = "";

            if (displayInfo.DisplayClassOrModuleName)
            {
                var inClassBlock = node.Ancestors()
                                   .Where(x => x.IsKind(SyntaxKind.ClassDeclaration))
                                   .Cast <ClassDeclarationSyntax>().ToList();

                //var inModuleBlock = node.Ancestors()
                //    .Where(x => x.IsKind(SyntaxKind.ModuleBlock))
                //    .Cast<ModuleBlockSyntax>().ToList();

                string typeName   = "unknown";
                string className  = "unknown";
                string moduleName = "unknown";

                if (inClassBlock.Count > 0)
                {
                    typeName = "Class";

                    className = node.Ancestors()
                                .Where(x => x.IsKind(SyntaxKind.ClassDeclaration))
                                .Cast <ClassDeclarationSyntax>().First().Identifier.ToString();
                }

                //if (inModuleBlock.Count > 0)
                //{
                //    typeName = "Module";

                //    moduleName = node.Ancestors()
                //        .Where(x => x.IsKind(SyntaxKind.ModuleBlock))
                //        .Cast<ModuleBlockSyntax>().First().ModuleStatement.Identifier.ToString();
                //}

                classModuleContext = String.Format("{0, 8}{1,6}:({2,-25})",
                                                   classModuleContext,
                                                   typeName,
                                                   typeName == "Class" ? className : moduleName);
            }

            return(classModuleContext);
        }
Exemplo n.º 5
0
        public static CodeAnalysisOptions FromRoot(IConfigurationRoot provider)
        {
            var options = new CodeAnalysisOptions
            {
                ExtractAssembler = new ExtractAssemblerOptions
                {
                    ImplementDtoConvert   = provider.GetValue("ExtractAssembler:ImplementDtoConvert", CodeAnalysisOptions.Default.ExtractAssembler.ImplementDtoConvert),
                    ImplementModelConvert = provider.GetValue("ExtractAssembler:ImplementModelConvert", CodeAnalysisOptions.Default.ExtractAssembler.ImplementModelConvert)
                },
                ExtractDto = new ExtractDtoOptions
                {
                    DefaultNamespace = provider.GetValue("ExtractDto:DefaultNamespace", CodeAnalysisOptions.Default.ExtractDto.DefaultNamespace),
                    Folders          = provider.GetValue("ExtractDto:Folders", CodeAnalysisOptions.Default.ExtractDto.Folders),
                    ImplementMethods = provider.GetValue("ExtractDto:ImplementMethods", CodeAnalysisOptions.Default.ExtractDto.ImplementMethods),
                    Project          = provider.GetValue("ExtractDto:Project", CodeAnalysisOptions.Default.ExtractDto.Project)
                }
            };

            return(options);
        }
Exemplo n.º 6
0
        private static string GetSourceContext(CSharpSyntaxNode node, CodeAnalysisOptions displayInfo)
        {
            string sourceContext = "";

            if (displayInfo.DisplaySourceLocation)
            {
                var location   = node.GetLocation();
                var sourceSpan = location.SourceSpan;
                var lineSpan   = location.GetLineSpan();

                //// NB.  Lines start at 0.  Add one so when we look in Visual Studio it makes sense.

                //var startLine = location.GetLineSpan().StartLinePosition.Line + 1;
                //var endLine = location.GetLineSpan().EndLinePosition.Line + 1;

                sourceContext = string.Format("SourceSpan: {0} LineSpan: {1}",
                                              sourceSpan.ToString(),
                                              lineSpan.ToString());
            }

            return(sourceContext);
        }
        private NameSyntax GetNewNamespaceName(CodeAnalysisOptions options, Document document)
        {
            string newNamespaceName = string.Empty;

            if (string.IsNullOrEmpty(options.ExtractDto.DefaultNamespace))
            {
                newNamespaceName = document.Project.Name;
            }
            else
            {
                newNamespaceName = options.ExtractDto.DefaultNamespace;
            }

            if (options.ExtractDto.Folders != null && options.ExtractDto.Folders.Any())
            {
                newNamespaceName += "." + string.Join(".", options.ExtractDto.Folders);
            }
            else
            {
                newNamespaceName += "." + string.Join(".", document.Folders);
            }

            return(SyntaxFactory.ParseName(newNamespaceName));
        }
Exemplo n.º 8
0
        public sealed override async Task ComputeRefactoringsAsync(CodeRefactoringContext context, CodeAnalysisOptions options)
        {
            var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);

            var node = root.FindNode(context.Span);

            var namespaceDeclaration = this.GetNameSpaceDeclaration(node);

            if (namespaceDeclaration != null)
            {
                context.RegisterRefactoring(new FixNamespaceCodeAction(context.Document, namespaceDeclaration));
            }
        }
        public async override Task ComputeRefactoringsAsync(CodeRefactoringContext context, CodeAnalysisOptions options)
        {
            var root = await context.Document.GetSyntaxRootAsync(context.CancellationToken).ConfigureAwait(false);

            var node = root.FindNode(context.Span);

            var decl = node as TypeDeclarationSyntax;

            if (decl != null)
            {
                context.RegisterRefactoring(CreateUnitTestsCodeAction.Create(context, decl));
            }
        }
Exemplo n.º 10
0
        private static string GetAncestorContext(CSharpSyntaxNode node, CodeAnalysisOptions displayInfo)
        {
            string ancestorContext = "";

            if (displayInfo.DisplayContainingBlock)
            {
                ancestorContext += GetContainingBlock(node).Kind().ToString();
            }

            if (displayInfo.InTryBlock)
            {
                var inTryBlock = node.Ancestors()
                                 .Where(x => x.IsKind(SyntaxKind.TryStatement))
                                 .Cast <TryStatementSyntax>().ToList();

                if (inTryBlock.Count > 0)
                {
                    ancestorContext += "T ";
                }
            }

            if (displayInfo.InWhileBlock)
            {
                var inDoWhileBlock = node.Ancestors()
                                     .Where(x => x.IsKind(SyntaxKind.WhileStatement))
                                     .Cast <WhileStatementSyntax>().ToList();

                if (inDoWhileBlock.Count > 0)
                {
                    ancestorContext += "W ";
                }
            }

            if (displayInfo.InForBlock)
            {
                var inForBlock = node.Ancestors()
                                 .Where(x => x.IsKind(SyntaxKind.ForStatement))
                                 .Cast <ForStatementSyntax>().ToList();

                if (inForBlock.Count > 0)
                {
                    ancestorContext += "F ";
                }
            }

            if (displayInfo.InIfBlock)
            {
                var inMultiLineIfBlock = node.Ancestors()
                                         .Where(x => x.IsKind(SyntaxKind.IfStatement))
                                         .Cast <IfStatementSyntax>().ToList();

                if (inMultiLineIfBlock.Count > 0)
                {
                    ancestorContext += "I ";
                }
            }

            if (ancestorContext.Length > 0)
            {
                ancestorContext = string.Format("{0,8}", ancestorContext);
            }

            return(ancestorContext);
        }
 public ExtractDtoCodeAction(CodeAnalysisOptions options, Document document, TypeDeclarationSyntax typeDeclaration)
 {
     this.document        = document;
     this.options         = options;
     this.typeDeclaration = typeDeclaration;
 }
 public abstract Task ComputeRefactoringsAsync(CodeRefactoringContext context, CodeAnalysisOptions options);
Exemplo n.º 13
0
 public static string GetDefaultJson(CodeAnalysisOptions options)
 {
     return(JsonConvert.SerializeObject(options, Formatting.Indented));
 }