mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 09:08:12 +00:00
LibCodeComprehension: Re-organize code comprehension related code
This moves all code comprehension-related code to a new library, LibCodeComprehension. This also moves some types related to code comprehension tasks (such as autocomplete, find declaration) out of LibGUI and into LibCodeComprehension.
This commit is contained in:
parent
a2c34554cd
commit
b35293d945
65 changed files with 685 additions and 491 deletions
|
@ -15,7 +15,7 @@ namespace Cpp {
|
|||
|
||||
void SemanticSyntaxHighlighter::rehighlight(Palette const& palette)
|
||||
{
|
||||
Vector<GUI::AutocompleteProvider::TokenInfo> new_tokens_info;
|
||||
Vector<CodeComprehension::TokenInfo> new_tokens_info;
|
||||
auto text = m_client->get_text();
|
||||
{
|
||||
Threading::MutexLocker locker(m_lock);
|
||||
|
@ -39,7 +39,7 @@ void SemanticSyntaxHighlighter::rehighlight(Palette const& palette)
|
|||
// An improvement over this could be only including the tokens that are in edited text ranges in the diff.
|
||||
auto diff_hunks = Diff::from_text(previous.view(), current.view());
|
||||
for (auto& token : current_tokens) {
|
||||
new_tokens_info.append(GUI::AutocompleteProvider::TokenInfo { GUI::AutocompleteProvider::TokenInfo::SemanticType::Unknown,
|
||||
new_tokens_info.append(CodeComprehension::TokenInfo { CodeComprehension::TokenInfo::SemanticType::Unknown,
|
||||
token.start().line, token.start().column, token.end().line, token.end().column });
|
||||
}
|
||||
size_t previous_token_index = 0;
|
||||
|
@ -67,47 +67,47 @@ void SemanticSyntaxHighlighter::rehighlight(Palette const& palette)
|
|||
update_spans(new_tokens_info, palette);
|
||||
}
|
||||
|
||||
static Syntax::TextStyle style_for_token_type(Gfx::Palette const& palette, GUI::AutocompleteProvider::TokenInfo::SemanticType type)
|
||||
static Syntax::TextStyle style_for_token_type(Gfx::Palette const& palette, CodeComprehension::TokenInfo::SemanticType type)
|
||||
{
|
||||
switch (type) {
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Unknown:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Unknown:
|
||||
return { palette.base_text(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Keyword:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Keyword:
|
||||
return { palette.syntax_keyword(), true };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Type:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Type:
|
||||
return { palette.syntax_type(), true };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Identifier:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Identifier:
|
||||
return { palette.syntax_identifier(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::String:
|
||||
case CodeComprehension::TokenInfo::SemanticType::String:
|
||||
return { palette.syntax_string(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Number:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Number:
|
||||
return { palette.syntax_number(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::IncludePath:
|
||||
case CodeComprehension::TokenInfo::SemanticType::IncludePath:
|
||||
return { palette.syntax_preprocessor_value(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::PreprocessorStatement:
|
||||
case CodeComprehension::TokenInfo::SemanticType::PreprocessorStatement:
|
||||
return { palette.syntax_preprocessor_statement(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Comment:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Comment:
|
||||
return { palette.syntax_comment(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Function:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Function:
|
||||
return { palette.syntax_function(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Variable:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Variable:
|
||||
return { palette.syntax_variable(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::CustomType:
|
||||
case CodeComprehension::TokenInfo::SemanticType::CustomType:
|
||||
return { palette.syntax_custom_type(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Namespace:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Namespace:
|
||||
return { palette.syntax_namespace(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Member:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Member:
|
||||
return { palette.syntax_member(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::Parameter:
|
||||
case CodeComprehension::TokenInfo::SemanticType::Parameter:
|
||||
return { palette.syntax_parameter(), false };
|
||||
case GUI::AutocompleteProvider::TokenInfo::SemanticType::PreprocessorMacro:
|
||||
case CodeComprehension::TokenInfo::SemanticType::PreprocessorMacro:
|
||||
return { palette.syntax_preprocessor_value(), false };
|
||||
default:
|
||||
VERIFY_NOT_REACHED();
|
||||
return { palette.base_text(), false };
|
||||
}
|
||||
}
|
||||
void SemanticSyntaxHighlighter::update_spans(Vector<GUI::AutocompleteProvider::TokenInfo> const& tokens_info, Gfx::Palette const& pallete)
|
||||
void SemanticSyntaxHighlighter::update_spans(Vector<CodeComprehension::TokenInfo> const& tokens_info, Gfx::Palette const& pallete)
|
||||
{
|
||||
Vector<GUI::TextDocumentSpan> spans;
|
||||
for (auto& token : tokens_info) {
|
||||
|
@ -118,7 +118,7 @@ void SemanticSyntaxHighlighter::update_spans(Vector<GUI::AutocompleteProvider::T
|
|||
auto style = style_for_token_type(pallete, token.type);
|
||||
span.attributes.color = style.color;
|
||||
span.attributes.bold = style.bold;
|
||||
span.is_skippable = token.type == GUI::AutocompleteProvider::TokenInfo::SemanticType::Whitespace;
|
||||
span.is_skippable = token.type == CodeComprehension::TokenInfo::SemanticType::Whitespace;
|
||||
span.data = static_cast<u64>(token.type);
|
||||
spans.append(span);
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ void SemanticSyntaxHighlighter::update_spans(Vector<GUI::AutocompleteProvider::T
|
|||
m_client->do_update();
|
||||
}
|
||||
|
||||
void SemanticSyntaxHighlighter::update_tokens_info(Vector<GUI::AutocompleteProvider::TokenInfo> tokens_info)
|
||||
void SemanticSyntaxHighlighter::update_tokens_info(Vector<CodeComprehension::TokenInfo> tokens_info)
|
||||
{
|
||||
{
|
||||
Threading::MutexLocker locker(m_lock);
|
||||
|
@ -145,22 +145,21 @@ void SemanticSyntaxHighlighter::update_tokens_info(Vector<GUI::AutocompleteProvi
|
|||
|
||||
bool SemanticSyntaxHighlighter::is_identifier(u64 token_type) const
|
||||
{
|
||||
using GUI::AutocompleteProvider;
|
||||
auto type = static_cast<AutocompleteProvider::TokenInfo::SemanticType>(token_type);
|
||||
auto type = static_cast<CodeComprehension::TokenInfo::SemanticType>(token_type);
|
||||
|
||||
return type == AutocompleteProvider::TokenInfo::SemanticType::Identifier
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::Function
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::Variable
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::CustomType
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::Namespace
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::Member
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::Parameter
|
||||
|| type == AutocompleteProvider::TokenInfo::SemanticType::PreprocessorMacro;
|
||||
return type == CodeComprehension::TokenInfo::SemanticType::Identifier
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::Function
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::Variable
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::CustomType
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::Namespace
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::Member
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::Parameter
|
||||
|| type == CodeComprehension::TokenInfo::SemanticType::PreprocessorMacro;
|
||||
}
|
||||
|
||||
bool SemanticSyntaxHighlighter::is_navigatable(u64 token_type) const
|
||||
{
|
||||
return static_cast<GUI::AutocompleteProvider::TokenInfo::SemanticType>(token_type) == GUI::AutocompleteProvider::TokenInfo::SemanticType::IncludePath;
|
||||
return static_cast<CodeComprehension::TokenInfo::SemanticType>(token_type) == CodeComprehension::TokenInfo::SemanticType::IncludePath;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue