提交 d3445d79 编写于 作者: P Petr Houska

Add GetStartNodeExcludingAttributes helper.

上级 77366a4b
......@@ -1795,8 +1795,7 @@ public bool IsOnTypeHeader(SyntaxNode root, int position)
return false;
}
var start = typeDecl.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart ??
typeDecl.SpanStart;
var start = GetStartOfNodeExcludingAttributes(typeDecl);
var end = typeDecl.GetTypeParameterList()?.GetLastToken().FullSpan.End ??
typeDecl.Identifier.FullSpan.End;
......@@ -1810,9 +1809,7 @@ public bool IsInPropertyDeclarationHeader(SyntaxNode node)
{
return false;
}
var start = propertyDeclaration.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart ??
propertyDeclaration.SpanStart;
var start = GetStartOfNodeExcludingAttributes(propertyDeclaration);
var end = propertyDeclaration.Identifier.FullSpan.End;
return node.Span.Start >= start && node.Span.End <= end;
......@@ -1826,8 +1823,7 @@ public bool IsInParameterHeader(SyntaxNode node)
return false;
}
var start = propertyDeclaration.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart ??
propertyDeclaration.SpanStart;
var start = GetStartOfNodeExcludingAttributes(propertyDeclaration);
var end = propertyDeclaration.Identifier.FullSpan.End;
return node.Span.Start >= start && node.Span.End <= end;
......@@ -1973,6 +1969,6 @@ public void GetPartsOfCastExpression(SyntaxNode node, out SyntaxNode type, out S
public SyntaxNode GetContainingParameter(SyntaxNode node) => node.GetAncestorOrThis<ParameterSyntax>();
public SyntaxList<SyntaxNode> GetAttributeLists(SyntaxNode node) => CSharpSyntaxGenerator.GetAttributeLists(node);
public override SyntaxList<SyntaxNode> GetAttributeLists(SyntaxNode node) => CSharpSyntaxGenerator.GetAttributeLists(node);
}
}
......@@ -487,5 +487,16 @@ public bool SpansPreprocessorDirective(IEnumerable<SyntaxToken> tokens)
private bool SpansPreprocessorDirective(SyntaxTriviaList list)
=> list.Any(t => IsPreprocessorDirective(t));
protected int GetStartOfNodeExcludingAttributes(SyntaxNode node)
{
var attributeLists = GetAttributeLists(node);
var start = attributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart ??
node.SpanStart;
return start;
}
public abstract SyntaxList<SyntaxNode> GetAttributeLists(SyntaxNode node);
}
}
......@@ -1746,8 +1746,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return Nothing
End If
Dim start = If(statement.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart,
statement.SpanStart)
Dim start = GetStartOfNodeExcludingAttributes(statement)
Dim _end = If(statement.TypeParameterList?.GetLastToken().FullSpan.End,
statement.Identifier.FullSpan.End)
......@@ -1761,20 +1760,20 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return False
End If
Dim start = If(propertyDeclaration.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart, propertyDeclaration.SpanStart)
Dim start = GetStartOfNodeExcludingAttributes(propertyDeclaration)
Dim [end] = If(propertyDeclaration.AsClause?.FullSpan.[End], propertyDeclaration.Identifier.FullSpan.End)
Return node.Span.Start >= start AndAlso node.Span.[End] <= [end]
End Function
Public Function IsInParameterHeader(node As SyntaxNode) As Boolean Implements ISyntaxFactsService.IsInParameterHeader
Dim propertyDeclaration = node.GetAncestor(Of ParameterSyntax)()
Dim parameter = node.GetAncestor(Of ParameterSyntax)()
If propertyDeclaration Is Nothing Then
If parameter Is Nothing Then
Return False
End If
Dim start = If(propertyDeclaration.AttributeLists.LastOrDefault()?.GetLastToken().GetNextToken().SpanStart, propertyDeclaration.SpanStart)
Dim [end] = If(propertyDeclaration.AsClause?.FullSpan.[End], propertyDeclaration.Identifier.FullSpan.End)
Dim start = GetStartOfNodeExcludingAttributes(parameter)
Dim [end] = If(parameter.AsClause?.FullSpan.[End], parameter.Identifier.FullSpan.End)
Return node.Span.Start >= start AndAlso node.Span.[End] <= [end]
End Function
......@@ -1977,7 +1976,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return node.GetAncestorOrThis(Of ParameterSyntax)
End Function
Public Function GetAttributeLists(node As SyntaxNode) As SyntaxList(Of SyntaxNode) Implements ISyntaxFactsService.GetAttributeLists
Public Overrides Function GetAttributeLists(node As SyntaxNode) As SyntaxList(Of SyntaxNode) Implements ISyntaxFactsService.GetAttributeLists
Return VisualBasicSyntaxGenerator.GetAttributeLists(node)
End Function
End Class
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册