mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 22:02:55 +01:00
Track the start of a signature more accurately (#6760)
This change ensures that a function signature always starts with an `IdentifierNameMaybeBeforeSignature` node (renamed from `IdentifierNameBeforeParams`), even in the case of function declarations like `fn F -> T` that have no parameter list. As a consequence, this ensures that we push new entries onto `pattern_block_stack` and `full_pattern_stack` when we start processing the function signature.
This commit is contained in:
@@ -17,16 +17,16 @@
|
||||
|
||||
namespace Carbon::LanguageServer {
|
||||
|
||||
// Returns the token of first child of kind IdentifierNameBeforeParams or
|
||||
// IdentifierNameNotBeforeParams.
|
||||
// Returns the token of first child of kind IdentifierNameMaybeBeforeSignature
|
||||
// or IdentifierNameNotBeforeSignature.
|
||||
static auto GetSymbolIdentifier(const Parse::TreeAndSubtrees& tree_and_subtrees,
|
||||
Parse::NodeId node)
|
||||
-> std::optional<Lex::TokenIndex> {
|
||||
const auto& tokens = tree_and_subtrees.tree().tokens();
|
||||
for (auto child : tree_and_subtrees.children(node)) {
|
||||
switch (tree_and_subtrees.tree().node_kind(child)) {
|
||||
case Parse::NodeKind::IdentifierNameBeforeParams:
|
||||
case Parse::NodeKind::IdentifierNameNotBeforeParams: {
|
||||
case Parse::NodeKind::IdentifierNameMaybeBeforeSignature:
|
||||
case Parse::NodeKind::IdentifierNameNotBeforeSignature: {
|
||||
auto token = tree_and_subtrees.tree().node_token(child);
|
||||
if (tokens.GetKind(token) == Lex::TokenKind::Identifier) {
|
||||
return token;
|
||||
|
||||
Reference in New Issue
Block a user