Skip to content

Commit 5f353b7

Browse files
authored
Merge pull request github#17727 from github/aibaars/modifiers
Rust: add extraction of all sorts of modifier tokens
2 parents 1398575 + 32e9881 commit 5f353b7

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1209
-120
lines changed

rust/ast-generator/src/main.rs

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use std::{fs, path::PathBuf};
33

44
pub mod codegen;
55
mod flags;
6-
use codegen::grammar::ast_src::{AstNodeSrc, AstSrc};
6+
use codegen::grammar::ast_src::{AstNodeSrc, AstSrc, Field};
77
use std::collections::{BTreeMap, BTreeSet};
88
use std::env;
99
use ungrammar::Grammar;
@@ -94,7 +94,13 @@ fn write_schema(
9494
}
9595

9696
empty = false;
97-
if field.tp == "string" {
97+
if field.tp == "predicate" {
98+
writeln!(
99+
buf,
100+
" {}: predicate",
101+
property_name(&node.name, &field.name),
102+
)?;
103+
} else if field.tp == "string" {
98104
writeln!(
99105
buf,
100106
" {}: optional[string]",
@@ -131,6 +137,21 @@ struct FieldInfo {
131137
}
132138
fn get_fields(node: &AstNodeSrc) -> Vec<FieldInfo> {
133139
let mut result = Vec::new();
140+
let predicates = [
141+
"async", "auto", "const", "default", "gen", "move", "mut", "raw", "ref", "static", "try",
142+
"unsafe",
143+
];
144+
for field in &node.fields {
145+
if let Field::Token(name) = field {
146+
if predicates.contains(&name.as_str()) {
147+
result.push(FieldInfo {
148+
name: format!("is_{name}"),
149+
tp: "predicate".to_string(),
150+
is_many: false,
151+
});
152+
}
153+
}
154+
}
134155

135156
match node.name.as_str() {
136157
"Name" | "NameRef" | "Lifetime" => {
@@ -480,7 +501,14 @@ impl Translator {{
480501
let type_name = &field.tp;
481502
let struct_field_name = &field.name;
482503
let class_field_name = property_name(&node.name, &field.name);
483-
if field.tp == "string" {
504+
if field.tp == "predicate" {
505+
writeln!(
506+
buf,
507+
" let {} = node.{}_token().is_some();",
508+
class_field_name,
509+
&struct_field_name[3..],
510+
)?;
511+
} else if field.tp == "string" {
484512
writeln!(
485513
buf,
486514
" let {} = node.try_get_text();",

rust/extractor/src/generated/.generated.list

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)