Add GetTagHelperSpans
This is a code dump from the editor
This commit is contained in:
parent
fdd08ceab2
commit
ca6f988bd9
|
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) .NET Foundation. All rights reserved.
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.Composition;
|
using System.ComponentModel.Composition;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
|
@ -14,6 +15,11 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
|
||||||
{
|
{
|
||||||
public override IReadOnlyList<ClassifiedSpan> GetClassifiedSpans(RazorSyntaxTree syntaxTree)
|
public override IReadOnlyList<ClassifiedSpan> GetClassifiedSpans(RazorSyntaxTree syntaxTree)
|
||||||
{
|
{
|
||||||
|
if (syntaxTree == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(syntaxTree));
|
||||||
|
}
|
||||||
|
|
||||||
var spans = Flatten(syntaxTree);
|
var spans = Flatten(syntaxTree);
|
||||||
|
|
||||||
var result = new ClassifiedSpan[spans.Count];
|
var result = new ClassifiedSpan[spans.Count];
|
||||||
|
|
@ -80,5 +86,54 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override IReadOnlyList<TagHelperSpan> GetTagHelperSpans(RazorSyntaxTree syntaxTree)
|
||||||
|
{
|
||||||
|
if (syntaxTree == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(syntaxTree));
|
||||||
|
}
|
||||||
|
|
||||||
|
var results = new List<TagHelperSpan>();
|
||||||
|
|
||||||
|
List<Block> toProcess = new List<Block>();
|
||||||
|
List<Block> blockChildren = new List<Block>();
|
||||||
|
toProcess.Add(syntaxTree.Root);
|
||||||
|
|
||||||
|
for (var i = 0; i < toProcess.Count; i++)
|
||||||
|
{
|
||||||
|
var blockNode = toProcess[i];
|
||||||
|
TagHelperBlock tagHelperNode = blockNode as TagHelperBlock;
|
||||||
|
if (tagHelperNode != null)
|
||||||
|
{
|
||||||
|
results.Add(new TagHelperSpan(
|
||||||
|
new SourceSpan(
|
||||||
|
tagHelperNode.Start.FilePath ?? syntaxTree.Source.FileName,
|
||||||
|
tagHelperNode.Start.AbsoluteIndex,
|
||||||
|
tagHelperNode.Start.LineIndex,
|
||||||
|
tagHelperNode.Start.CharacterIndex,
|
||||||
|
tagHelperNode.Length),
|
||||||
|
tagHelperNode.Binding));
|
||||||
|
}
|
||||||
|
|
||||||
|
// collect all child blocks and inject into toProcess as a single InsertRange
|
||||||
|
foreach (SyntaxTreeNode curNode in blockNode.Children)
|
||||||
|
{
|
||||||
|
Block curBlock = curNode as Block;
|
||||||
|
if (curBlock != null)
|
||||||
|
{
|
||||||
|
blockChildren.Add(curBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (blockChildren.Count > 0)
|
||||||
|
{
|
||||||
|
toProcess.InsertRange(i + 1, blockChildren);
|
||||||
|
blockChildren.Clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,5 +9,7 @@ namespace Microsoft.VisualStudio.LanguageServices.Razor
|
||||||
public abstract class RazorSyntaxFactsService
|
public abstract class RazorSyntaxFactsService
|
||||||
{
|
{
|
||||||
public abstract IReadOnlyList<ClassifiedSpan> GetClassifiedSpans(RazorSyntaxTree syntaxTree);
|
public abstract IReadOnlyList<ClassifiedSpan> GetClassifiedSpans(RazorSyntaxTree syntaxTree);
|
||||||
|
|
||||||
|
public abstract IReadOnlyList<TagHelperSpan> GetTagHelperSpans(RazorSyntaxTree syntaxTree);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
// Copyright (c) .NET Foundation. All rights reserved.
|
||||||
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using Microsoft.AspNetCore.Razor.Evolution;
|
||||||
|
using Microsoft.AspNetCore.Razor.Evolution.Legacy;
|
||||||
|
|
||||||
|
namespace Microsoft.VisualStudio.LanguageServices.Razor
|
||||||
|
{
|
||||||
|
public struct TagHelperSpan
|
||||||
|
{
|
||||||
|
public TagHelperSpan(SourceSpan span, TagHelperBinding binding)
|
||||||
|
{
|
||||||
|
if (binding == null)
|
||||||
|
{
|
||||||
|
throw new ArgumentNullException(nameof(binding));
|
||||||
|
}
|
||||||
|
|
||||||
|
Span = span;
|
||||||
|
Binding = binding;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TagHelperBinding Binding { get; }
|
||||||
|
|
||||||
|
public IEnumerable<TagHelperDescriptor> TagHelpers => Binding.Descriptors;
|
||||||
|
|
||||||
|
public SourceSpan Span { get; }
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue