Пример #1
0
        private static void CheckUsingDeclaration(SyntaxNodeAnalysisContext context, UsingDirectiveSyntax usingDirective)
        {
            if (!usingDirective.Parent.IsKind(SyntaxKind.NamespaceDeclaration))
            {
                // Usings outside of a namespace are always qualified.
                return;
            }

            if (!usingDirective.StaticKeyword.IsKind(SyntaxKind.None))
            {
                // using static types is not considered.
                return;
            }

            if (usingDirective.HasNamespaceAliasQualifier())
            {
                // global qualified namespaces are OK.
                return;
            }

            var symbol = context.SemanticModel.GetSymbolInfo(usingDirective.Name, context.CancellationToken).Symbol;

            if (symbol == null)
            {
                // if there is no symbol, do not proceed.
                return;
            }

            if (symbol is INamedTypeSymbol typeSymbol &&
                typeSymbol.IsTupleType())
            {
                symbol = typeSymbol.TupleUnderlyingType();
            }

            string symbolString = symbol.ToQualifiedString(usingDirective.Name);

            string usingString = UsingDirectiveSyntaxToCanonicalString(usingDirective);

            if ((symbolString != usingString) && !usingDirective.StartsWithAlias(context.SemanticModel, context.CancellationToken))
            {
                switch (symbol.Kind)
                {
                case SymbolKind.Namespace:
                    context.ReportDiagnostic(Diagnostic.Create(DescriptorNamespace, usingDirective.GetLocation(), symbolString));
                    break;

                case SymbolKind.NamedType:
                    var containingNamespace = ((NamespaceDeclarationSyntax)usingDirective.Parent).Name.ToString();
                    if (containingNamespace != symbol.ContainingNamespace.ToString())
                    {
                        context.ReportDiagnostic(Diagnostic.Create(DescriptorType, usingDirective.GetLocation(), symbolString));
                    }

                    break;
                }
            }
        }
Пример #2
0
            private bool IsSeparatedSystemUsing(UsingDirectiveSyntax syntax)
            {
                if (!this.separateSystemDirectives ||
                    syntax.HasNamespaceAliasQualifier())
                {
                    return(false);
                }

                return(this.StartsWithSystemUsingDirectiveIdentifier(syntax.Name));
            }
            private bool IsSeparatedSystemUsing(UsingDirectiveSyntax syntax)
            {
                if (!this.separateSystemDirectives)
                {
                    return(false);
                }

                return(syntax.Alias == null &&
                       syntax.IsSystemUsingDirective() &&
                       !syntax.HasNamespaceAliasQualifier() &&
                       syntax.StaticKeyword.IsKind(SyntaxKind.None));
            }
Пример #4
0
            private bool IsSeparatedSystemUsing(UsingDirectiveSyntax syntax)
            {
                if (!this.separateSystemDirectives ||
                    (syntax.Alias != null) ||
                    syntax.StaticKeyword.IsKind(SyntaxKind.StaticKeyword) ||
                    syntax.HasNamespaceAliasQualifier())
                {
                    return(false);
                }

                if (!(this.semanticModel.GetSymbolInfo(syntax.Name).Symbol is INamespaceSymbol namespaceSymbol))
                {
                    return(false);
                }

                var namespaceTypeName = namespaceSymbol.ToDisplayString(FullNamespaceDisplayFormat);
                var firstPart         = namespaceTypeName.Split('.')[0];

                return(string.Equals(SystemUsingDirectiveIdentifier, firstPart, StringComparison.Ordinal));
            }
            private bool IsSeparatedSystemUsing(UsingDirectiveSyntax syntax)
            {
                if (!this.separateSystemDirectives)
                {
                    return false;
                }

                return syntax.Alias == null
                    && syntax.IsSystemUsingDirective()
                    && !syntax.HasNamespaceAliasQualifier()
                    && syntax.StaticKeyword.IsKind(SyntaxKind.None);
            }