breakdownTopOfStack025ParityProbe method
Direct stack-decomposition probe for Tree-sitter 0.25.10's private
ts_parser__breakdown_top_of_stack helper.
Implementation
Map<String, Object?> breakdownTopOfStack025ParityProbe(String source) {
if (source != '{}') {
throw ArgumentError.value(source, 'source', 'must be the empty object');
}
GeneratedTreeSitterNode leaf(int symbol, int start, int end) =>
GeneratedTreeSitterNode(
symbol: symbol,
type: language.symbols[symbol].name,
startByte: start,
endByte: end,
startPoint: TreeSitterTablePoint(0, start),
endPoint: TreeSitterTablePoint(0, end),
named: language.symbols[symbol].named,
visible: language.symbols[symbol].visible,
extra: false,
);
final parent = GeneratedTreeSitterNode(
symbol: 17,
type: language.symbols[17].name,
startByte: 0,
endByte: 2,
startPoint: const TreeSitterTablePoint(0, 0),
endPoint: const TreeSitterTablePoint(0, 2),
named: language.symbols[17].named,
visible: language.symbols[17].visible,
extra: false,
children: [leaf(1, 0, 1), leaf(3, 1, 2)],
);
final beforeState = language.nextState(1, parent.symbol);
final stack = _ParseStack(
frames: _FrameStack.of([
_Frame(1, null, extra: false),
_Frame(beforeState, parent, extra: false, pending: true),
]),
position: parent.endByte,
point: parent.endPoint,
dynamicPrecedence: parent.dynamicPrecedence,
errorCost: 0,
recoverySteps: 0,
recovering: false,
zeroWidthExternalTokens: <String>{},
scannerState: Uint8List(0),
);
final brokenDown = _breakdownTopOfStack(stack);
final nodes =
brokenDown?.frames
.map((frame) => frame.node)
.whereType<GeneratedTreeSitterNode>()
.toList(growable: false) ??
const <GeneratedTreeSitterNode>[];
return <String, Object?>{
'result': brokenDown != null,
'before_state': beforeState,
'after_state': brokenDown?.frames.last.state ?? beforeState,
'child_count': nodes.length,
'symbols': [
for (var index = 0; index < 3; index++)
index < nodes.length ? nodes[index].symbol : 0,
],
};
}