Example #1
0
            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);
            }
Example #2
0
        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);
        }