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; } } }
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)); }
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); }