Ejemplo n.º 1
0
        private TokenNodeType GetTokenType(FSharpToken token)
        {
            // todo: next or current state?
            var state = FSharpLineTokenizer.ColorStateOfLexState(myNextTokenAndState.Item2);

            if (state == FSharpTokenizerColorState.VerbatimString)
            {
                return(FSharpTokenType.VERBATIM_STRING);
            }
            if (state == FSharpTokenizerColorState.TripleQuoteString)
            {
                return(FSharpTokenType.TRIPLE_QUOTE_STRING);
            }

            return(token.GetTokenType());
        }
Ejemplo n.º 2
0
        public static TokenNodeType GetTokenType(this FSharpToken token)
        {
            var tokenTag = token.Token.Tag;

            if (ourTokenTypesByTags.TryGetValue(tokenTag, out var tokenType))
            {
                return(tokenType);
            }

            if (tokenTag == Parser.token.Tags.PLUS_MINUS_OP)
            {
                var plusToken = (Parser.token.PLUS_MINUS_OP)token.Token;
                if (plusToken.Item == "+")
                {
                    return(FSharpTokenType.PLUS);
                }
            }

            var tokenInfo = token.TokenInfo;

            if (tokenInfo.Item1 == FSharpTokenColorKind.PreprocessorKeyword)
            {
                return(FSharpTokenType.OTHER_KEYWORD);
            }

            switch (tokenInfo.Item2)
            {
            case FSharpTokenCharKind.Keyword:
                return(FSharpTokenType.OTHER_KEYWORD);

            case FSharpTokenCharKind.Identifier:
                return(FSharpTokenType.IDENTIFIER);

            case FSharpTokenCharKind.String:
                if (tokenTag == Parser.token.Tags.CHAR)
                {
                    return(FSharpTokenType.CHAR);
                }
                return(FSharpTokenType.STRING);

            case FSharpTokenCharKind.Literal:
                return(FSharpTokenType.LITERAL);

            case FSharpTokenCharKind.Operator:
                return(FSharpTokenType.OPERATOR);

            case FSharpTokenCharKind.LineComment:
                return(FSharpTokenType.LINE_COMMENT);

            case FSharpTokenCharKind.Comment:
                return(FSharpTokenType.COMMENT);

            case FSharpTokenCharKind.WhiteSpace:
                return(FSharpTokenType.WHITESPACE);

            case FSharpTokenCharKind.Delimiter:
                if (tokenTag == LQuoteTag)
                {
                    return(token.FullMatchedLength == 2
              ? FSharpTokenType.LQUOTE_TYPED
              : FSharpTokenType.LQUOTE_UNTYPED);
                }

                if (tokenTag == RQuoteTag)
                {
                    return(token.FullMatchedLength == 2
              ? FSharpTokenType.RQUOTE_TYPED
              : FSharpTokenType.RQUOTE_UNTYPED);
                }

                return(FSharpTokenType.TEXT);

            default:
                return(FSharpTokenType.TEXT);
            }
        }