private static bool IsNamespaceName(NameSyntax name) { while (name.Parent is NameSyntax) { name = (NameSyntax)name.Parent; } return name.IsParentKind(SyntaxKind.NamespaceDeclaration); }
private static bool IsQualifiedNameInUsingDirective(SemanticModel model, NameSyntax name, TypeSyntax reducedName) { while (name.IsLeftSideOfQualifiedName()) { name = (NameSyntax)name.Parent; } if (name.IsParentKind(SyntaxKind.UsingDirective) && ((UsingDirectiveSyntax)name.Parent).Alias == null) { // We're a qualified name in a using. We don't want to reduce this name as people like // fully qualified names in usings so they can properly tell what the name is resolving // to. // However, if this name is actually referencing the special Script class, then we do // want to allow that to be reduced. return !IsInScriptClass(model, name); } return false; }
private bool TryClassifySymbol( NameSyntax name, ISymbol symbol, SemanticModel semanticModel, CancellationToken cancellationToken, out ClassifiedSpan classifiedSpan) { if (symbol != null) { // see through using aliases if (symbol.Kind == SymbolKind.Alias) { symbol = (symbol as IAliasSymbol).Target; } else if (symbol.IsConstructor() && name.IsParentKind(SyntaxKind.Attribute)) { symbol = symbol.ContainingType; } } if (name.IsVar && IsInVarContext(name)) { var alias = semanticModel.GetAliasInfo(name, cancellationToken); if (alias == null || alias.Name != "var") { if (!IsSymbolCalledVar(symbol)) { // We bound to a symbol. If we bound to a symbol called "var" then we want to // classify this appropriately as a type. Otherwise, we want to classify this as // a keyword. classifiedSpan = new ClassifiedSpan(name.Span, ClassificationTypeNames.Keyword); return true; } } } if (symbol != null) { // Use .Equals since we can't rely on object identity for constructed types. if (symbol is ITypeSymbol) { var classification = GetClassificationForType((ITypeSymbol)symbol); if (classification != null) { var token = name.GetNameToken(); classifiedSpan = new ClassifiedSpan(token.Span, classification); return true; } } } classifiedSpan = default(ClassifiedSpan); return false; }