static void Update(object sender, ConfigUpdatedEventArgs e) { if (e.UpdatedFeature.MatchFlags(Features.SyntaxHighlight) == false) { return; } var o = (sender as Config).SpecialHighlightOptions; AllBraces = o.HasAnyFlag(SpecialHighlightOptions.AllBraces); AllParentheses = o.HasAnyFlag(SpecialHighlightOptions.AllParentheses); var sp = o.MatchFlags(SpecialHighlightOptions.SpecialPunctuation); if (sp) { KeywordBraceTags = TransientKeywordTagHolder.BoldBraces.Clone(); MemberBraceTags = TransientMemberTagHolder.BoldBraces.Clone(); MemberDeclarationBraceTags = TransientMemberTagHolder.BoldDeclarationBraces.Clone(); } else { KeywordBraceTags = TransientKeywordTagHolder.Default.Clone(); MemberBraceTags = TransientMemberTagHolder.Default.Clone(); MemberDeclarationBraceTags = TransientMemberTagHolder.DeclarationBraces.Clone(); } if (o.MatchFlags(SpecialHighlightOptions.BranchBrace) == false) { KeywordBraceTags.Branching = sp ? ClassificationTagHelper.BoldBraceTag : null; } if (o.MatchFlags(SpecialHighlightOptions.CastBrace) == false) { KeywordBraceTags.TypeCast = sp ? ClassificationTagHelper.BoldBraceTag : null; } if (o.MatchFlags(SpecialHighlightOptions.LoopBrace) == false) { KeywordBraceTags.Loop = sp ? ClassificationTagHelper.BoldBraceTag : null; } if (o.MatchFlags(SpecialHighlightOptions.ResourceBrace) == false) { KeywordBraceTags.Resource = sp ? ClassificationTagHelper.BoldBraceTag : null; } if (o.MatchFlags(SpecialHighlightOptions.ParameterBrace) == false) { MemberBraceTags.Constructor = sp ? ClassificationTagHelper.BoldBraceTag : null; MemberBraceTags.Method = sp ? ClassificationTagHelper.BoldBraceTag : null; } if (o.MatchFlags(SpecialHighlightOptions.DeclarationBrace) == false) { MemberDeclarationBraceTags.Class = MemberDeclarationBraceTags.Constructor = MemberDeclarationBraceTags.Delegate = MemberDeclarationBraceTags.Enum = MemberDeclarationBraceTags.Event = MemberDeclarationBraceTags.Field = MemberDeclarationBraceTags.Interface = MemberDeclarationBraceTags.Method = MemberDeclarationBraceTags.Namespace = MemberDeclarationBraceTags.Property = MemberDeclarationBraceTags.Struct = sp ? ClassificationTagHelper.BoldDeclarationBraceTag : ClassificationTagHelper.DeclarationBraceTag; } LocalFunctionDeclaration = o.MatchFlags(SpecialHighlightOptions.LocalFunctionDeclaration); NonPrivateField = o.MatchFlags(SpecialHighlightOptions.NonPrivateField); }
static ClassificationTag ClassifySyntaxNode(SyntaxNode node, TransientMemberTagHolder tag, TransientKeywordTagHolder keyword) { switch (node.Kind()) { case SyntaxKind.MethodDeclaration: case SyntaxKind.AnonymousMethodExpression: case SyntaxKind.SimpleLambdaExpression: case SyntaxKind.ParenthesizedLambdaExpression: case SyntaxKind.LocalFunctionStatement: case SyntaxKind.ConversionOperatorDeclaration: case SyntaxKind.OperatorDeclaration: return(tag.Method); case SyntaxKind.InvocationExpression: return(((((InvocationExpressionSyntax)node).Expression as IdentifierNameSyntax)?.Identifier.ValueText == "nameof") ? null : tag.Method); case SyntaxKind.ConstructorDeclaration: case SyntaxKind.BaseConstructorInitializer: case SyntaxKind.AnonymousObjectCreationExpression: case SyntaxKind.ObjectInitializerExpression: case SyntaxKind.ObjectCreationExpression: case SyntaxKind.ComplexElementInitializerExpression: case SyntaxKind.CollectionInitializerExpression: case SyntaxKind.ArrayInitializerExpression: case SyntaxKind.ThisConstructorInitializer: case SyntaxKind.DestructorDeclaration: return(tag.Constructor); case SyntaxKind.IndexerDeclaration: case SyntaxKind.PropertyDeclaration: return(tag.Property); case SyntaxKind.ClassDeclaration: return(tag.Class); case SyntaxKind.InterfaceDeclaration: return(tag.Interface); case SyntaxKind.EnumDeclaration: return(tag.Enum); case SyntaxKind.StructDeclaration: return(tag.Struct); case SyntaxKind.Attribute: return(_Classifications.AttributeName); case SyntaxKind.EventDeclaration: return(tag.Event); case SyntaxKind.DelegateDeclaration: return(tag.Delegate); case SyntaxKind.NamespaceDeclaration: return(tag.Namespace); case SyntaxKind.IfStatement: case SyntaxKind.ElseClause: case SyntaxKind.SwitchStatement: case SyntaxKind.SwitchSection: case (SyntaxKind)9025: // switch expression case (SyntaxKind)9020: // recursive pattern return(keyword.Branching); case SyntaxKind.ForStatement: case SyntaxKind.ForEachStatement: case SyntaxKind.ForEachVariableStatement: case SyntaxKind.WhileStatement: case SyntaxKind.DoStatement: return(keyword.Loop); case SyntaxKind.UsingStatement: case SyntaxKind.LockStatement: case SyntaxKind.FixedStatement: case SyntaxKind.UnsafeStatement: case SyntaxKind.TryStatement: case SyntaxKind.CatchClause: case SyntaxKind.CatchFilterClause: case SyntaxKind.FinallyClause: return(keyword.Resource); case SyntaxKind.CheckedStatement: case SyntaxKind.UncheckedStatement: return(keyword.TypeCast); } return(null); }