sync tree-sitter grammar and AST

This commit is contained in:
csh
2025-12-20 11:25:33 +08:00
parent 7c13d70d3a
commit b27dafb657
15 changed files with 2034665 additions and 2001901 deletions
@@ -10,3 +10,8 @@ function abc();
begin
a := 1;
end
type abce = class
public
const a = 0;
end;
@@ -20,7 +20,7 @@ cat >"$CONFIG_DIR/tree-sitter/config.json" <<EOF
"path": "$GRAMMAR_ROOT"
}
],
"parser-directories": ["$PARSER_PARENT"]
"parser-directories": ["$GRAMMAR_ROOT", "$PARSER_PARENT"]
}
EOF
export XDG_CONFIG_HOME="$CONFIG_DIR"
@@ -31,15 +31,26 @@ tree-sitter() {
if [ "$1" = "parse" ]; then
shift
local tmp_input=""
local caller_dir=""
caller_dir="$(pwd)"
# 如果从 stdin 读入代码,则先落盘到临时文件
if [ $# -eq 0 ] && [ ! -t 0 ]; then
tmp_input=$(mktemp)
tmp_input=$(mktemp --suffix=.tsf)
cat >"$tmp_input"
set -- "$tmp_input"
fi
command tree-sitter parse --config-path "$CONFIG_DIR/tree-sitter/config.json" --scope source.tsf "$@"
local parse_args=()
for arg in "$@"; do
if [ -e "$arg" ] && [ "${arg#/}" = "$arg" ]; then
parse_args+=("$caller_dir/$arg")
else
parse_args+=("$arg")
fi
done
(cd "$GRAMMAR_ROOT" && command tree-sitter parse "${parse_args[@]}")
local status=$?
if [ -n "$tmp_input" ]; then
rm -f "$tmp_input"
@@ -776,6 +787,32 @@ else
echo " ❌ repeat循环解析失败"
fi
echo "12.8 测试goto/label语句"
cat > temp_goto_label_test.tsf << 'EOF'
function test();
begin
for i := 0 to 10 do
begin
if i = 5 then
begin
goto finded;
end;
end;
label finded;
x := i;
end
EOF
tree-sitter parse temp_goto_label_test.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ goto/label语句解析正常"
else
echo " ❌ goto/label语句解析失败"
echo " 详细错误:"
tree-sitter parse temp_goto_label_test.tsf
fi
echo -e "\n步骤13: 测试特殊查询语法"
echo "13.1 测试vselect查询"
@@ -875,7 +912,25 @@ else
tree-sitter parse temp_class_tags.tsf
fi
echo "14.5 测试方法声明(类内实现)"
echo "14.5 测试const成员变量"
cat > temp_class_const_member.tsf << 'EOF'
type TestConstMember = class
public
const mA = 1;
static const mB = mA + 10;
end;
EOF
tree-sitter parse temp_class_const_member.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ const成员变量解析正常"
else
echo " ❌ const成员变量解析失败"
echo " 详细错误:"
tree-sitter parse temp_class_const_member.tsf
fi
echo "14.6 测试方法声明(类内实现)"
cat > temp_class_methods.tsf << 'EOF'
type TestClass = class
public
@@ -906,7 +961,7 @@ else
tree-sitter parse temp_class_methods.tsf
fi
echo "14.6 测试方法修饰符"
echo "14.7 测试方法修饰符"
cat > temp_class_modifiers.tsf << 'EOF'
type TestClass = class
public
@@ -925,7 +980,7 @@ else
tree-sitter parse temp_class_modifiers.tsf
fi
echo "14.7 测试类外方法实现"
echo "14.8 测试类外方法实现"
cat > temp_class_external.tsf << 'EOF'
type TestClass = class
public
@@ -1384,6 +1439,68 @@ else
echo " ❌ raise函数调用解析失败"
fi
echo "19.8 测试exit语句"
echo 'function test(); begin exit; x := 1; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ exit语句解析正常"
else
echo " ❌ exit语句解析失败"
echo " 详细错误:"
echo 'function test(); begin exit; x := 1; end;' | tree-sitter parse
fi
echo "19.9 测试debugreturn语句"
echo 'function test(); begin debugreturn 123; end;' | tree-sitter parse > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ debugreturn语句解析正常"
else
echo " ❌ debugreturn语句解析失败"
echo " 详细错误:"
echo 'function test(); begin debugreturn 123; end;' | tree-sitter parse
fi
echo "19.10 测试try...except语句"
cat > temp_try_except_test.tsf << 'EOF'
function test();
begin
try
x := StrToInt(s);
except
x := 0;
end;
end
EOF
tree-sitter parse temp_try_except_test.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ try...except语句解析正常"
else
echo " ❌ try...except语句解析失败"
echo " 详细错误:"
tree-sitter parse temp_try_except_test.tsf
fi
echo "19.11 测试try...finally语句"
cat > temp_try_finally_test.tsf << 'EOF'
function test();
begin
try
x := 1;
finally
y := 2;
end;
end
EOF
tree-sitter parse temp_try_finally_test.tsf > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo " ✅ try...finally语句解析正常"
else
echo " ❌ try...finally语句解析失败"
echo " 详细错误:"
tree-sitter parse temp_try_finally_test.tsf
fi
# 🆕 新增步骤20:测试$连接符(万能连接符)
echo -e "\n步骤20: 测试\$连接符(万能连接符)"