Add keypattern rule helper
This way, pattern rules (e.g. golang's comment) can be easily given the same precedence as keyword rules.
This commit is contained in:
parent
174f306e2a
commit
3cd031af38
3 changed files with 11 additions and 7 deletions
|
|
@ -161,9 +161,6 @@ namespace tree_sitter_examples {
|
|||
{ "type_name", sym("_identifier") },
|
||||
{ "_identifier", pattern("\\a[\\w_]*") },
|
||||
{ "number", pattern("\\d+(\\.\\d+)?") },
|
||||
|
||||
// TODO - make it clear how this number relates to the
|
||||
// precedence used by the `keyword` helper.
|
||||
{ "comment", token(prec(1000, pattern("//[^\n]*"))) },
|
||||
{ "comment", keypattern("//[^\n]*") },
|
||||
}).ubiquitous_tokens({ "comment" });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ namespace tree_sitter {
|
|||
rule_ptr pattern(const std::string &value);
|
||||
rule_ptr str(const std::string &value);
|
||||
rule_ptr keyword(const std::string &value);
|
||||
rule_ptr keypattern(const std::string &value);
|
||||
rule_ptr err(const rule_ptr &rule);
|
||||
rule_ptr prec(int precedence, rule_ptr rule);
|
||||
rule_ptr token(rule_ptr rule);
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ namespace tree_sitter {
|
|||
using std::map;
|
||||
|
||||
namespace rules {
|
||||
static const int KEYWORD_PRECEDENCE = 100;
|
||||
|
||||
static rule_ptr metadata(rule_ptr rule, map<MetadataKey, int> values) {
|
||||
return std::make_shared<Metadata>(rule, values);
|
||||
}
|
||||
|
|
@ -56,7 +58,11 @@ namespace tree_sitter {
|
|||
}
|
||||
|
||||
rule_ptr keyword(const string &value) {
|
||||
return metadata(make_shared<String>(value), { { PRECEDENCE, 100}, { IS_TOKEN, 1 } });
|
||||
return token(prec(KEYWORD_PRECEDENCE, str(value)));
|
||||
}
|
||||
|
||||
rule_ptr keypattern(const string &value) {
|
||||
return token(prec(KEYWORD_PRECEDENCE, pattern(value)));
|
||||
}
|
||||
|
||||
rule_ptr err(const rule_ptr &rule) {
|
||||
|
|
@ -64,11 +70,11 @@ namespace tree_sitter {
|
|||
}
|
||||
|
||||
rule_ptr prec(int precedence, rule_ptr rule) {
|
||||
return metadata(rule, { { PRECEDENCE, precedence } });
|
||||
return metadata(rule, {{ PRECEDENCE, precedence }});
|
||||
}
|
||||
|
||||
rule_ptr token(rule_ptr rule) {
|
||||
return metadata(rule, { { IS_TOKEN, 1 } });
|
||||
return metadata(rule, {{ IS_TOKEN, 1 }});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue