fix: ast bug
This commit is contained in:
parent
174d484d93
commit
57f182380e
|
|
@ -1,3 +1,4 @@
|
||||||
|
#include <iostream>
|
||||||
#include "./deserializer.hpp"
|
#include "./deserializer.hpp"
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
@ -486,15 +487,7 @@ namespace lsp::language::ast
|
||||||
auto result = ParseUsesClause(node, source);
|
auto result = ParseUsesClause(node, source);
|
||||||
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
|
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> {
|
{ "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);
|
|
||||||
} },
|
|
||||||
{ "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> {
|
|
||||||
auto result = ParseExternalMethod(node, source);
|
auto result = ParseExternalMethod(node, source);
|
||||||
return result.IsOk() ? Result<ASTNode>::Ok(std::move(result).Unwrap()) : Result<ASTNode>::Err(result.error, result.severity);
|
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)
|
Result<FunctionDefinition> ParseFunctionDefinition(TSNode node, const std::string& source)
|
||||||
{
|
{
|
||||||
std::string node_type = std::string(ts::Type(node));
|
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");
|
return Result<FunctionDefinition>::Err("Not a function definition");
|
||||||
|
|
||||||
FunctionDefinition def;
|
FunctionDefinition def;
|
||||||
|
|
@ -535,8 +528,7 @@ namespace lsp::language::ast
|
||||||
{
|
{
|
||||||
auto block_result = detail::ParseBlock(body_node, source);
|
auto block_result = detail::ParseBlock(body_node, source);
|
||||||
if (block_result.IsErr())
|
if (block_result.IsErr())
|
||||||
return Result<FunctionDefinition>::Err("Failed to extract body: " + block_result.error,
|
return Result<FunctionDefinition>::Err("Failed to extract body: " + block_result.error, block_result.severity);
|
||||||
block_result.severity);
|
|
||||||
def.body = std::move(block_result).Unwrap();
|
def.body = std::move(block_result).Unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -639,8 +631,7 @@ namespace lsp::language::ast
|
||||||
{
|
{
|
||||||
auto block_result = detail::ParseBlock(body_node, source);
|
auto block_result = detail::ParseBlock(body_node, source);
|
||||||
if (block_result.IsErr())
|
if (block_result.IsErr())
|
||||||
return Result<Method>::Err("Failed to extract body: " + block_result.error,
|
return Result<Method>::Err("Failed to extract body: " + block_result.error, block_result.severity);
|
||||||
block_result.severity);
|
|
||||||
method.body = std::move(block_result).Unwrap();
|
method.body = std::move(block_result).Unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -651,6 +642,12 @@ namespace lsp::language::ast
|
||||||
{
|
{
|
||||||
std::string node_type = std::string(ts::Type(node));
|
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_modifier = (node_type == "modifier_method");
|
||||||
bool is_operator = (node_type == "operator_method");
|
bool is_operator = (node_type == "operator_method");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue