Handle named nodes aliased as anonymous nodes

Fixes #401
This commit is contained in:
Max Brunsfeld 2019-08-29 14:28:44 -07:00
parent b3ab2e07a2
commit 0955c5b3d7
6 changed files with 90 additions and 10 deletions

View file

@ -108,11 +108,12 @@ static inline bool ts_node__is_relevant(TSNode self, bool include_anonymous) {
if (include_anonymous) {
return ts_subtree_visible(tree) || ts_node__alias(&self);
} else {
return
(ts_subtree_visible(tree) &&
ts_subtree_named(tree)) ||
(ts_node__alias(&self) &&
ts_language_symbol_metadata(self.tree->language, ts_node__alias(&self)).named);
TSSymbol alias = ts_node__alias(&self);
if (alias) {
return ts_language_symbol_metadata(self.tree->language, alias).named;
} else {
return ts_subtree_visible(tree) && ts_subtree_named(tree);
}
}
}
@ -440,8 +441,9 @@ bool ts_node_is_extra(TSNode self) {
}
bool ts_node_is_named(TSNode self) {
return ts_node__alias(&self)
? ts_language_symbol_metadata(self.tree->language, ts_node__alias(&self)).named
TSSymbol alias = ts_node__alias(&self);
return alias
? ts_language_symbol_metadata(self.tree->language, alias).named
: ts_subtree_named(ts_node__subtree(self));
}

View file

@ -817,9 +817,12 @@ static size_t ts_subtree__write_to_string(
bool is_root = field_name == ROOT_FIELD;
bool is_visible =
include_all ||
alias_is_named ||
ts_subtree_missing(self) ||
(ts_subtree_visible(self) && ts_subtree_named(self));
(
alias_symbol
? alias_is_named
: ts_subtree_visible(self) && ts_subtree_named(self)
);
if (is_visible) {
if (!is_root) {