fix: ast bug

This commit is contained in:
csh 2025-10-15 22:59:51 +08:00
parent 174d484d93
commit 57f182380e
1 changed files with 11 additions and 14 deletions

View File

@ -1,3 +1,4 @@
#include <iostream>
#include "./deserializer.hpp"
extern "C" {
@ -486,15 +487,7 @@ namespace lsp::language::ast
auto result = ParseUsesClause(node, source);
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
} },
{ "modifier_method", [](TSNode node, const std::string& source) -> Result<ASTNode> {
auto result = ParseExternalMethod(node, source);
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
} },
{ "operator_method", [](TSNode node, const std::string& source) -> Result<ASTNode> {
auto result = ParseExternalMethod(node, source);
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
} },
{ "normal_method", [](TSNode node, const std::string& source) -> Result<ASTNode> {
{ "external_method_statement", [](TSNode node, const std::string& source) -> Result<ASTNode> {
auto result = ParseExternalMethod(node, source);
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
} },
@ -512,7 +505,7 @@ namespace lsp::language::ast
Result<FunctionDefinition> ParseFunctionDefinition(TSNode node, const std::string& source)
{
std::string node_type = std::string(ts::Type(node));
if (node_type != "function_definition_statement" || node_type != "function_definition_statement_with_overload")
if (node_type != "function_definition_statement" && node_type != "function_definition_statement_with_overload")
return Result<FunctionDefinition>::Err("Not a function definition");
FunctionDefinition def;
@ -535,8 +528,7 @@ namespace lsp::language::ast
{
auto block_result = detail::ParseBlock(body_node, source);
if (block_result.IsErr())
return Result<FunctionDefinition>::Err("Failed to extract body: " + block_result.error,
block_result.severity);
return Result<FunctionDefinition>::Err("Failed to extract body: " + block_result.error, block_result.severity);
def.body = std::move(block_result).Unwrap();
}
@ -639,8 +631,7 @@ namespace lsp::language::ast
{
auto block_result = detail::ParseBlock(body_node, source);
if (block_result.IsErr())
return Result<Method>::Err("Failed to extract body: " + block_result.error,
block_result.severity);
return Result<Method>::Err("Failed to extract body: " + block_result.error, block_result.severity);
method.body = std::move(block_result).Unwrap();
}
@ -651,6 +642,12 @@ namespace lsp::language::ast
{
std::string node_type = std::string(ts::Type(node));
if (node_type == "external_method_statement")
{
auto result = ParseExternalMethod(ts::Children(node)[0], source);
return result.IsOk() ? Result<ExternalMethod>::Ok(std::move(result).Unwrap()) : Result<ExternalMethod>::Err(result.error, result.severity);
}
// 检查节点类型
bool is_modifier = (node_type == "modifier_method");
bool is_operator = (node_type == "operator_method");