"매 source 의 every token (whitespace, comment 포함) 까지 보존하는 lossless tree". AST 가 semantic-only 인 반면 CST 는 매 source 의 round-trip 가능. 매 modern tooling — tree-sitter, rowan (rust-analyzer), Roslyn — 매 CST 위에서 매 IDE feature, refactoring, formatter 를 매 build.
constParser=require('tree-sitter');constTS=require('tree-sitter-typescript').typescript;constparser=newParser();parser.setLanguage(TS);consttree=parser.parse('const x: number = 1;');// Walk
constcursor=tree.walk();do{console.log(cursor.nodeType,cursor.startIndex,cursor.endIndex);}while(cursor.gotoNextSibling()||cursor.gotoFirstChild());
tree-sitter query (S-expression)
; Find all function declarations(function_declarationname:(identifier)@func.nameparameters:(formal_parameters)@func.params); Find unused imports(import_statementsource:(string)@import.source)@import