public override void VisitMarkupMinimizedTagHelperDirectiveAttribute(MarkupMinimizedTagHelperDirectiveAttributeSyntax node) { if (node.TagHelperAttributeInfo.Bound) { var transition = new SyntaxResult(node.Transition, SyntaxKind.Transition, _razorCodeDocument); _syntaxNodes.Add(transition); var directiveAttribute = new SyntaxResult(node.Name, SyntaxKind.MarkupMinimizedTagHelperDirectiveAttribute, _razorCodeDocument); _syntaxNodes.Add(directiveAttribute); if (node.Colon != null) { var colon = new SyntaxResult(node.Colon, SyntaxKind.Colon, _razorCodeDocument); _syntaxNodes.Add(colon); } if (node.ParameterName != null) { var parameterName = new SyntaxResult(node.ParameterName, SyntaxKind.MarkupMinimizedTagHelperDirectiveAttribute, _razorCodeDocument); _syntaxNodes.Add(parameterName); } } base.VisitMarkupMinimizedTagHelperDirectiveAttribute(node); }
public override void VisitMarkupTagHelperEndTag(MarkupTagHelperEndTagSyntax node) { if (ClassifyTagName((MarkupTagHelperElementSyntax)node.Parent)) { var result = new SyntaxResult(node.Name, SyntaxKind.MarkupTagHelperEndTag, _razorCodeDocument); _syntaxNodes.Add(result); } base.VisitMarkupTagHelperEndTag(node); }
public override void VisitMarkupTagHelperAttribute(MarkupTagHelperAttributeSyntax node) { if (node.TagHelperAttributeInfo.Bound) { var result = new SyntaxResult(node.Name, SyntaxKind.MarkupTagHelperAttribute, _razorCodeDocument); _syntaxNodes.Add(result); } base.VisitMarkupTagHelperAttribute(node); }
public ActionResult <Result> Post([FromBody] Dto dto) { if (dto == null || string.IsNullOrEmpty(dto.Text)) { return(BadRequest()); } string add = dto.Text.Last().Equals('\n') ? " " : "\n"; OuterLexemes lex = _manager.LexicalAnalyzer(dto.Text + add); SyntaxResult syn = _manager.SyntaxAnalyzer(lex); if (!syn.Success) { return(new Result { OuterLexemes = lex, SyntaxResult = syn, ReferenceNumber = Guid.NewGuid() }); } PolishResult polishResult = _polishManager.Run(lex); Guid referenceNumber = Guid.NewGuid(); _cache.Set(referenceNumber, new ExecutionPoint { PolishResult = polishResult }); return(new Result { OuterLexemes = lex, SyntaxResult = syn, // todo Use AutoMapper PolishResult = new PolishResultDto { ReversePolishNotation = string.Join(" ", polishResult.ReversePolishNotation.Select(pn => pn.Token)), Trace = polishResult.Trace.Select(t => new PolishTraceDto { Input = t.Input, Stack = string.Join(" | ", t.Stack.Select(pn => pn.Token)), ReversePolishNotation = string.Join(" ", t.ReversePolishNotation.Select(pn => pn.Token)) }) }, ReferenceNumber = referenceNumber }); }
/** * In short, each token takes 5 integers to represent, so a specific token `i` in the file consists of the following array indices: * - at index `5*i` - `deltaLine`: token line number, relative to the previous token * - at index `5*i+1` - `deltaStart`: token start character, relative to the previous token (relative to 0 or the previous token's start if they are on the same line) * - at index `5*i+2` - `length`: the length of the token. A token cannot be multiline. * - at index `5*i+3` - `tokenType`: will be looked up in `SemanticTokensLegend.tokenTypes` * - at index `5*i+4` - `tokenModifiers`: each set bit will be looked up in `SemanticTokensLegend.tokenModifiers` **/ private static IEnumerable <uint> GetData( SyntaxResult currentNode, SyntaxResult?previousNode, RazorCodeDocument razorCodeDocument) { var previousRange = previousNode?.Range; var currentRange = currentNode.Range; // deltaLine var previousLineIndex = previousNode == null ? 0 : previousRange.Start.Line; yield return((uint)(currentRange.Start.Line - previousLineIndex)); // deltaStart if (previousRange != null && previousRange?.Start.Line == currentRange.Start.Line) { yield return((uint)(currentRange.Start.Character - previousRange.Start.Character)); } else { yield return((uint)currentRange.Start.Character); } // length var endIndex = currentNode.Range.End.GetAbsoluteIndex(razorCodeDocument.GetSourceText()); var startIndex = currentNode.Range.Start.GetAbsoluteIndex(razorCodeDocument.GetSourceText()); var length = endIndex - startIndex; Debug.Assert(length > 0); yield return((uint)length); // tokenType yield return(GetTokenTypeData(currentNode.Kind)); // tokenModifiers // We don't currently have any need for tokenModifiers yield return(0); }