✨ sync tree-sitter grammar and AST
This commit is contained in:
@@ -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: 测试\$连接符(万能连接符)"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user