mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 23:47:45 +00:00
LibCpp: Make C++ AST (mostly) const-correct
I cheated and used const_cast to avoid dealing with the strange pattern where we sometimes do a delayed reparenting of an AST node.
This commit is contained in:
parent
eb4a69c377
commit
70d7fb6a03
6 changed files with 277 additions and 277 deletions
|
@ -331,7 +331,7 @@ Vector<CppComprehensionEngine::Symbol> CppComprehensionEngine::properties_of_typ
|
|||
return properties;
|
||||
}
|
||||
|
||||
CppComprehensionEngine::Symbol CppComprehensionEngine::Symbol::create(StringView name, Vector<StringView> const& scope, NonnullRefPtr<Cpp::Declaration> declaration, IsLocal is_local)
|
||||
CppComprehensionEngine::Symbol CppComprehensionEngine::Symbol::create(StringView name, Vector<StringView> const& scope, NonnullRefPtr<Cpp::Declaration const> declaration, IsLocal is_local)
|
||||
{
|
||||
return { { name, scope }, move(declaration), is_local == IsLocal::Yes };
|
||||
}
|
||||
|
@ -416,7 +416,7 @@ Optional<CodeComprehension::ProjectLocation> CppComprehensionEngine::find_declar
|
|||
return find_preprocessor_definition(document, identifier_position);
|
||||
}
|
||||
|
||||
RefPtr<Cpp::Declaration> CppComprehensionEngine::find_declaration_of(DocumentData const& document, const GUI::TextPosition& identifier_position)
|
||||
RefPtr<Cpp::Declaration const> CppComprehensionEngine::find_declaration_of(DocumentData const& document, const GUI::TextPosition& identifier_position)
|
||||
{
|
||||
auto node = document.parser().node_at(Cpp::Position { identifier_position.line(), identifier_position.column() });
|
||||
if (!node) {
|
||||
|
@ -509,7 +509,7 @@ static Optional<TargetDeclaration> get_target_declaration(ASTNode const& node, D
|
|||
|
||||
return TargetDeclaration { TargetDeclaration::Type::Variable, name };
|
||||
}
|
||||
RefPtr<Cpp::Declaration> CppComprehensionEngine::find_declaration_of(DocumentData const& document_data, ASTNode const& node) const
|
||||
RefPtr<Cpp::Declaration const> CppComprehensionEngine::find_declaration_of(DocumentData const& document_data, ASTNode const& node) const
|
||||
{
|
||||
dbgln_if(CPP_LANGUAGE_SERVER_DEBUG, "find_declaration_of: {} ({})", document_data.parser().text_of_node(node), node.class_name());
|
||||
|
||||
|
@ -669,15 +669,15 @@ Vector<StringView> CppComprehensionEngine::scope_of_node(ASTNode const& node) co
|
|||
if (!parent->is_declaration())
|
||||
return parent_scope;
|
||||
|
||||
auto& parent_decl = static_cast<Cpp::Declaration&>(*parent);
|
||||
auto& parent_decl = static_cast<Cpp::Declaration const&>(*parent);
|
||||
|
||||
StringView containing_scope;
|
||||
if (parent_decl.is_namespace())
|
||||
containing_scope = static_cast<NamespaceDeclaration&>(parent_decl).full_name();
|
||||
containing_scope = static_cast<NamespaceDeclaration const&>(parent_decl).full_name();
|
||||
if (parent_decl.is_struct_or_class())
|
||||
containing_scope = static_cast<StructOrClassDeclaration&>(parent_decl).full_name();
|
||||
containing_scope = static_cast<StructOrClassDeclaration const&>(parent_decl).full_name();
|
||||
if (parent_decl.is_function())
|
||||
containing_scope = static_cast<FunctionDeclaration&>(parent_decl).full_name();
|
||||
containing_scope = static_cast<FunctionDeclaration const&>(parent_decl).full_name();
|
||||
|
||||
parent_scope.append(containing_scope);
|
||||
return parent_scope;
|
||||
|
@ -751,9 +751,9 @@ Optional<Vector<CodeComprehension::AutocompleteResultEntry>> CppComprehensionEng
|
|||
return options;
|
||||
}
|
||||
|
||||
RefPtr<Cpp::Declaration> CppComprehensionEngine::find_declaration_of(CppComprehensionEngine::DocumentData const& document, CppComprehensionEngine::SymbolName const& target_symbol_name) const
|
||||
RefPtr<Cpp::Declaration const> CppComprehensionEngine::find_declaration_of(CppComprehensionEngine::DocumentData const& document, CppComprehensionEngine::SymbolName const& target_symbol_name) const
|
||||
{
|
||||
RefPtr<Cpp::Declaration> target_declaration;
|
||||
RefPtr<Cpp::Declaration const> target_declaration;
|
||||
for_each_available_symbol(document, [&](Symbol const& symbol) {
|
||||
if (symbol.name == target_symbol_name) {
|
||||
target_declaration = symbol.declaration;
|
||||
|
@ -834,7 +834,7 @@ Optional<CodeComprehensionEngine::FunctionParamsHint> CppComprehensionEngine::ge
|
|||
|
||||
dbgln_if(CPP_LANGUAGE_SERVER_DEBUG, "node type: {}", node->class_name());
|
||||
|
||||
FunctionCall* call_node { nullptr };
|
||||
FunctionCall const* call_node { nullptr };
|
||||
|
||||
if (node->is_function_call()) {
|
||||
call_node = verify_cast<FunctionCall>(node.ptr());
|
||||
|
@ -880,7 +880,7 @@ Optional<CodeComprehensionEngine::FunctionParamsHint> CppComprehensionEngine::ge
|
|||
|
||||
Optional<CppComprehensionEngine::FunctionParamsHint> CppComprehensionEngine::get_function_params_hint(
|
||||
DocumentData const& document,
|
||||
FunctionCall& call_node,
|
||||
FunctionCall const& call_node,
|
||||
size_t argument_index)
|
||||
{
|
||||
Identifier const* callee = nullptr;
|
||||
|
|
|
@ -47,7 +47,7 @@ private:
|
|||
|
||||
struct Symbol {
|
||||
SymbolName name;
|
||||
NonnullRefPtr<Cpp::Declaration> declaration;
|
||||
NonnullRefPtr<Cpp::Declaration const> declaration;
|
||||
|
||||
// Local symbols are symbols that should not appear in a global symbol search.
|
||||
// For example, a variable that is declared inside a function will have is_local = true.
|
||||
|
@ -57,7 +57,7 @@ private:
|
|||
No,
|
||||
Yes
|
||||
};
|
||||
static Symbol create(StringView name, Vector<StringView> const& scope, NonnullRefPtr<Cpp::Declaration>, IsLocal is_local);
|
||||
static Symbol create(StringView name, Vector<StringView> const& scope, NonnullRefPtr<Cpp::Declaration const>, IsLocal is_local);
|
||||
};
|
||||
|
||||
friend Traits<SymbolName>;
|
||||
|
@ -101,9 +101,9 @@ private:
|
|||
DeprecatedString type_of_property(DocumentData const&, Identifier const&) const;
|
||||
DeprecatedString type_of_variable(Identifier const&) const;
|
||||
bool is_property(ASTNode const&) const;
|
||||
RefPtr<Cpp::Declaration> find_declaration_of(DocumentData const&, ASTNode const&) const;
|
||||
RefPtr<Cpp::Declaration> find_declaration_of(DocumentData const&, SymbolName const&) const;
|
||||
RefPtr<Cpp::Declaration> find_declaration_of(DocumentData const&, const GUI::TextPosition& identifier_position);
|
||||
RefPtr<Cpp::Declaration const> find_declaration_of(DocumentData const&, ASTNode const&) const;
|
||||
RefPtr<Cpp::Declaration const> find_declaration_of(DocumentData const&, SymbolName const&) const;
|
||||
RefPtr<Cpp::Declaration const> find_declaration_of(DocumentData const&, const GUI::TextPosition& identifier_position);
|
||||
|
||||
enum class RecurseIntoScopes {
|
||||
No,
|
||||
|
@ -134,7 +134,7 @@ private:
|
|||
Optional<Vector<CodeComprehension::AutocompleteResultEntry>> try_autocomplete_name(DocumentData const&, ASTNode const&, Optional<Token> containing_token) const;
|
||||
Optional<Vector<CodeComprehension::AutocompleteResultEntry>> try_autocomplete_include(DocumentData const&, Token include_path_token, Cpp::Position const& cursor_position) const;
|
||||
static bool is_symbol_available(Symbol const&, Vector<StringView> const& current_scope, Vector<StringView> const& reference_scope);
|
||||
Optional<FunctionParamsHint> get_function_params_hint(DocumentData const&, FunctionCall&, size_t argument_index);
|
||||
Optional<FunctionParamsHint> get_function_params_hint(DocumentData const&, FunctionCall const&, size_t argument_index);
|
||||
|
||||
template<typename Func>
|
||||
void for_each_available_symbol(DocumentData const&, Func) const;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue