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)); }
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); }
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)); }
public virtual TResult VisitToken(InternalSyntaxToken token) { return(this.DefaultVisit(token)); }