selectChildren025ParityProbe method
Direct decision probe for Tree-sitter 0.25.10's private
ts_parser__select_children helper.
Implementation
Map<String, Object?> selectChildren025ParityProbe() {
const zero = TreeSitterTablePoint(0, 0);
const one = TreeSitterTablePoint(0, 1);
GeneratedTreeSitterNode leaf() => GeneratedTreeSitterNode(
symbol: 1,
type: language.symbols[1].name,
startByte: 0,
endByte: 1,
startPoint: zero,
endPoint: one,
named: language.symbols[1].named,
visible: language.symbols[1].visible,
extra: false,
);
GeneratedTreeSitterNode child({int errorSpan = 0, int precedence = 0}) {
final error = errorSpan > 0;
return GeneratedTreeSitterNode(
symbol: error ? _treeSitterBuiltinErrorSymbol : 16,
type: error ? 'ERROR' : language.symbols[16].name,
startByte: 0,
endByte: error ? errorSpan : 1,
startPoint: zero,
endPoint: TreeSitterTablePoint(0, error ? errorSpan : 1),
named: true,
visible: true,
extra: false,
dynamicPrecedence: precedence,
children: [leaf()],
);
}
GeneratedTreeSitterNode parent(List<GeneratedTreeSitterNode> children) =>
GeneratedTreeSitterNode(
symbol: 16,
type: language.symbols[16].name,
startByte: 0,
endByte: children.isEmpty ? 0 : children.last.endByte,
startPoint: zero,
endPoint: children.isEmpty ? zero : children.last.endPoint,
named: true,
visible: true,
extra: false,
dynamicPrecedence: children.fold<int>(
0,
(total, child) => total + child.dynamicPrecedence,
),
children: children,
);
bool selectRight(
GeneratedTreeSitterNode left,
GeneratedTreeSitterNode right,
) {
_Frame frame(GeneratedTreeSitterNode node) =>
_Frame(1, node, extra: false);
return _compareReducedCandidates(
(reduced: frame(right), trailingExtras: const <_Frame>[]),
(reduced: frame(left), trailingExtras: const <_Frame>[]),
) >
0;
}
return <String, Object?>{
'right_lower_error': selectRight(
parent([child(errorSpan: 10)]),
parent([child(errorSpan: 1)]),
),
'left_lower_error': selectRight(
parent([child(errorSpan: 1)]),
parent([child(errorSpan: 10)]),
),
'right_higher_precedence': selectRight(
parent([child(precedence: 1)]),
parent([child(precedence: 2)]),
),
'left_higher_precedence': selectRight(
parent([child(precedence: 2)]),
parent([child(precedence: 1)]),
),
'equal_positive_error': selectRight(
parent([child(errorSpan: 1)]),
parent([child(errorSpan: 1)]),
),
'right_fewer_children': selectRight(
parent([leaf(), leaf()]),
parent([leaf()]),
),
'equal_clean_tree': selectRight(parent([leaf()]), parent([leaf()])),
};
}