Exemple #1
0
        protected InternalSyntaxToken VisitErrorNode(IErrorNode node)
        {
            int                 type   = node.Symbol.Type;
            SyntaxKind          kind   = type.FromAntlr4(_syntaxFacts.SyntaxKindType);
            InternalSyntaxToken result = this.factory.MissingToken(kind);

            return(this.AddDiagnostic(result, node.Symbol.TokenIndex));
        }
Exemple #2
0
        private InternalSyntaxToken AddDiagnostic(InternalSyntaxToken token, int tokenIndex)
        {
            string errorMessage;

            if (this.Antlr4Errors.TryGetValue(tokenIndex, out errorMessage))
            {
                SyntaxDiagnosticInfo diagnosticInfo = this.MakeError(token.GetLeadingTriviaWidth(), token.Width, Antlr4RoslynErrorCode.ERR_SyntaxError, errorMessage);
                return((InternalSyntaxToken)token.WithDiagnostics(new DiagnosticInfo[] { diagnosticInfo }));
            }
            return(token);
        }
Exemple #3
0
        protected GreenNode VisitTerminal(IToken token, SyntaxKind expectedKind, ref IToken previousTokenOrTrivia)
        {
            if (token == null)
            {
                if ((object)expectedKind == null)
                {
                    return(null);
                }
                else
                {
                    var missing = this.factory.MissingToken(expectedKind);
                    return(missing); // TODO:MetaDslx is adding diagnostics necessary? this.AddDiagnostic(result, token.TokenIndex);
                }
            }
            InternalSyntaxToken result       = null;
            bool addTrivia                   = true;
            bool updatePreviousTokenOrTrivia = true;

            if (token.Type >= 0)
            {
                int        type = token.Type;
                SyntaxKind kind = type.FromAntlr4(_syntaxFacts.SyntaxKindType);
                Debug.Assert((object)expectedKind == null || kind == expectedKind);
                if (token.StartIndex < 0 || token.StopIndex < token.StartIndex)
                {
                    result = this.factory.MissingToken(kind);
                    return(this.AddDiagnostic(result, token.TokenIndex));
                }
                if (this.Language.SyntaxFacts.IsFixedToken(kind))
                {
                    result = this.factory.Token(kind);
                }
                else
                {
                    string    text          = token.Text;
                    GreenNode leadingTrivia = this.GetLeadingTrivia(token, previousTokenOrTrivia);
                    previousTokenOrTrivia = token;
                    GreenNode trailingTrivia = this.GetTrailingTrivia(token, ref previousTokenOrTrivia);
                    var       value          = this.Language.SyntaxFacts.ExtractValue(text);
                    result    = this.factory.Token(leadingTrivia, kind, text, value, trailingTrivia);
                    addTrivia = false;
                    updatePreviousTokenOrTrivia = false;
                }
            }
            else
            {
                result = this.factory.EndOfFile;
            }
            if (result == null)
            {
                return(null);
            }
            if (addTrivia)
            {
                GreenNode leadingTrivia = this.GetLeadingTrivia(token, previousTokenOrTrivia);
                if (leadingTrivia != null)
                {
                    result = (InternalSyntaxToken)result.WithLeadingTrivia(leadingTrivia);
                }
                previousTokenOrTrivia = token;
                GreenNode trailingTrivia = this.GetTrailingTrivia(token, ref previousTokenOrTrivia);
                if (trailingTrivia != null)
                {
                    result = (InternalSyntaxToken)result.WithTrailingTrivia(trailingTrivia);
                }
                updatePreviousTokenOrTrivia = false;
            }
            if (updatePreviousTokenOrTrivia)
            {
                previousTokenOrTrivia = token;
            }
            return(this.AddDiagnostic(result, token.TokenIndex));
        }
Exemple #4
0
 public virtual TResult VisitToken(InternalSyntaxToken token)
 {
     return(this.DefaultVisit(token));
 }