public void LiteralToken(SyntaxTokenBuilder builder, string input, int position, int length, string stringValue, bool quoted = false, bool missing = false) { builder.InitializeWith(quoted ? SyntaxKind.QuotedLiteralToken : SyntaxKind.LiteralToken, new TextSpan(input, position, length), stringValue, missing); }
public void IdentifierToken(SyntaxTokenBuilder builder, string input, int position, int length, string stringValue, bool missing = false) { builder.InitializeWith(SyntaxKind.IdentifierToken, new TextSpan(input, position, length), stringValue, missing); }
private OptionSyntax ScanOption(ElementsCursor <SyntaxToken> cursor, List <SyntaxError> errors, SyntaxToken nameMarker, SyntaxToken name, IReadOnlyList <string> commandName) { SyntaxToken valueMarker = null; ValueSyntax value = null; if (!HasMoreTokens(cursor)) { return(new OptionSyntax(nameMarker, name, valueMarker, value)); } var token = cursor.Peek(); if (IsOptionValueMarker(token)) { valueMarker = token; cursor.MoveNext(); token = cursor.Peek(); } else { if (!HasSpaceAfterOrEnd(name, token)) { var builder = new SyntaxTokenBuilder(name); builder.TrailingTrivia = _syntaxFactory.WhitespaceTriviaAfter(name, length: 0, missing: true); name = builder.Build(); errors.Add(_syntaxFactory.MissingWhitespaceError(name.TrailingTrivia.Span)); } _semanticModel.TryGetOptionType(commandName, name.StringValue, out Type valueType); if (IsFlag(valueType)) { // Flag can have a value only if a value marker is specified // because it have value 'true' by default. return(new OptionSyntax(nameMarker, name, valueMarker, value)); } } bool missingValue = valueMarker != null && (!HasMoreTokens(cursor) || (valueMarker.HasTrailingTrivia && IsOptionNameOrEndOfOptions(token, cursor.Peek(1)))); if (missingValue) { SyntaxToken valueToken = null; var builder = new SyntaxTokenBuilder(); var span = valueMarker.Span; _syntaxFactory.LiteralToken(builder, span.Source, span.End, 0, null, missing: true); if (valueMarker.HasTrailingTrivia) { // Place trailing trivia after missing option value builder.TrailingTrivia = valueMarker.TrailingTrivia; valueToken = builder.Build(); // and remove it from value marker. builder.InitializeWith(valueMarker); builder.TrailingTrivia = null; valueMarker = builder.Build(); } else { valueToken = builder.Build(); } errors.Add(_syntaxFactory.MissingOptionValueError(valueToken.Span)); value = new ValueSyntax(valueToken); return(new OptionSyntax(nameMarker, name, valueMarker, value)); } bool isValue = (valueMarker != null && !valueMarker.HasTrailingTrivia) || !IsOptionNameOrEndOfOptions(token, cursor.Peek(1)); if (isValue) { value = ScanValue(cursor, errors); } return(new OptionSyntax(nameMarker, name, valueMarker, value)); }
public void ColonToken(SyntaxTokenBuilder builder, string input, int position, bool missing = false) { builder.InitializeWith(SyntaxKind.ColonToken, new TextSpan(input, position, 1), ":", missing); }
public void DashDashToken(SyntaxTokenBuilder builder, string input, int position, bool missing = false) { builder.InitializeWith(SyntaxKind.DashDashToken, new TextSpan(input, position, 2), "--", missing); }
public void EndOfInputToken(SyntaxTokenBuilder builder, string input, int position, bool missing = false) { builder.InitializeWith(SyntaxKind.EndOfInputToken, new TextSpan(input, position, 0), "<eoi>", missing); }