diff options
author | Sam Atkins <atkinssj@serenityos.org> | 2023-03-08 20:59:05 +0000 |
---|---|---|
committer | Sam Atkins <atkinssj@gmail.com> | 2023-03-11 13:22:57 +0000 |
commit | 08c1effc04c08735621394b571da508fce91bd7b (patch) | |
tree | 21d1a7fb3fce225c6a9a2dd161f9f755c0af3d34 /Userland/DevTools | |
parent | ffce6cc9779c301bd91297dfc03f5578cf2a150a (diff) | |
download | serenity-08c1effc04c08735621394b571da508fce91bd7b.zip |
HackStudio: Use Syntax::Language instead of our own one
The one behavior difference here is that the statusbar used to display
"Unknown" for unknown file types, and "Markdown" for md, but we now
display "Plain Text" for all file types without syntax highlighters.
Diffstat (limited to 'Userland/DevTools')
-rw-r--r-- | Userland/DevTools/HackStudio/CMakeLists.txt | 1 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/CodeDocument.cpp | 3 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/CodeDocument.h | 8 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/Editor.cpp | 46 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/HackStudioWidget.cpp | 2 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/Language.cpp | 93 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/Language.h | 32 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/LanguageClient.cpp | 2 | ||||
-rw-r--r-- | Userland/DevTools/HackStudio/LanguageClient.h | 8 |
9 files changed, 35 insertions, 160 deletions
diff --git a/Userland/DevTools/HackStudio/CMakeLists.txt b/Userland/DevTools/HackStudio/CMakeLists.txt index e012b3a412..ecd3c084a2 100644 --- a/Userland/DevTools/HackStudio/CMakeLists.txt +++ b/Userland/DevTools/HackStudio/CMakeLists.txt @@ -34,7 +34,6 @@ set(SOURCES Git/GitWidget.cpp GMLPreviewWidget.cpp HackStudioWidget.cpp - Language.cpp LanguageClient.cpp Locator.cpp Project.cpp diff --git a/Userland/DevTools/HackStudio/CodeDocument.cpp b/Userland/DevTools/HackStudio/CodeDocument.cpp index 152df3e1f0..f37b259e1e 100644 --- a/Userland/DevTools/HackStudio/CodeDocument.cpp +++ b/Userland/DevTools/HackStudio/CodeDocument.cpp @@ -24,8 +24,7 @@ CodeDocument::CodeDocument(DeprecatedString const& file_path, Client* client) , m_file_path(file_path) { auto lexical_path = LexicalPath(file_path); - m_language = language_from_file(lexical_path); - m_language_name = language_name_from_file(lexical_path); + m_language = Syntax::language_from_filename(lexical_path); } CodeDocument::CodeDocument(Client* client) diff --git a/Userland/DevTools/HackStudio/CodeDocument.h b/Userland/DevTools/HackStudio/CodeDocument.h index 08489c2fe4..4db89d1751 100644 --- a/Userland/DevTools/HackStudio/CodeDocument.h +++ b/Userland/DevTools/HackStudio/CodeDocument.h @@ -7,9 +7,9 @@ #pragma once -#include "Language.h" #include <AK/LexicalPath.h> #include <LibGUI/TextDocument.h> +#include <LibSyntax/Language.h> namespace HackStudio { @@ -25,8 +25,7 @@ public: void set_execution_position(size_t line) { m_execution_position = line; } void clear_execution_position() { m_execution_position.clear(); } DeprecatedString const& file_path() const { return m_file_path; } - DeprecatedString const& language_name() const { return m_language_name; }; - Language language() const { return m_language; } + Optional<Syntax::Language> const& language() const { return m_language; } virtual bool is_code_document() const override final { return true; } @@ -35,8 +34,7 @@ private: explicit CodeDocument(Client* client = nullptr); DeprecatedString m_file_path; - DeprecatedString m_language_name; - Language m_language { Language::Unknown }; + Optional<Syntax::Language> m_language; Vector<size_t> m_breakpoint_lines; Optional<size_t> m_execution_position; }; diff --git a/Userland/DevTools/HackStudio/Editor.cpp b/Userland/DevTools/HackStudio/Editor.cpp index af2f5b351b..3db73b6b16 100644 --- a/Userland/DevTools/HackStudio/Editor.cpp +++ b/Userland/DevTools/HackStudio/Editor.cpp @@ -9,7 +9,6 @@ #include "Debugger/Debugger.h" #include "EditorWrapper.h" #include "HackStudio.h" -#include "Language.h" #include <AK/ByteBuffer.h> #include <AK/Debug.h> #include <AK/JsonParser.h> @@ -36,6 +35,7 @@ #include <LibJS/SyntaxHighlighter.h> #include <LibMarkdown/Document.h> #include <LibSQL/AST/SyntaxHighlighter.h> +#include <LibSyntax/Language.h> #include <LibWeb/CSS/SyntaxHighlighter/SyntaxHighlighter.h> #include <LibWeb/DOM/Text.h> #include <LibWeb/HTML/HTMLHeadElement.h> @@ -629,44 +629,50 @@ void Editor::set_cursor(const GUI::TextPosition& a_position) void Editor::set_syntax_highlighter_for(CodeDocument const& document) { - switch (document.language()) { - case Language::Cpp: + if (!document.language().has_value()) { + set_syntax_highlighter({}); + force_rehighlight(); + return; + } + + switch (document.language().value()) { + case Syntax::Language::Cpp: if (m_use_semantic_syntax_highlighting) { set_syntax_highlighter(make<Cpp::SemanticSyntaxHighlighter>()); on_token_info_timer_tick(); m_tokens_info_timer->restart(); - } else + } else { set_syntax_highlighter(make<Cpp::SyntaxHighlighter>()); - + } break; - case Language::CMake: + case Syntax::Language::CMake: set_syntax_highlighter(make<CMake::SyntaxHighlighter>()); break; - case Language::CMakeCache: + case Syntax::Language::CMakeCache: set_syntax_highlighter(make<CMake::Cache::SyntaxHighlighter>()); break; - case Language::CSS: + case Syntax::Language::CSS: set_syntax_highlighter(make<Web::CSS::SyntaxHighlighter>()); break; - case Language::GitCommit: + case Syntax::Language::GitCommit: set_syntax_highlighter(make<GUI::GitCommitSyntaxHighlighter>()); break; - case Language::GML: + case Syntax::Language::GML: set_syntax_highlighter(make<GUI::GML::SyntaxHighlighter>()); break; - case Language::HTML: + case Syntax::Language::HTML: set_syntax_highlighter(make<Web::HTML::SyntaxHighlighter>()); break; - case Language::JavaScript: + case Syntax::Language::JavaScript: set_syntax_highlighter(make<JS::SyntaxHighlighter>()); break; - case Language::Ini: + case Syntax::Language::INI: set_syntax_highlighter(make<GUI::IniSyntaxHighlighter>()); break; - case Language::Shell: + case Syntax::Language::Shell: set_syntax_highlighter(make<Shell::SyntaxHighlighter>()); break; - case Language::SQL: + case Syntax::Language::SQL: set_syntax_highlighter(make<SQL::AST::SyntaxHighlighter>()); break; default: @@ -678,11 +684,9 @@ void Editor::set_syntax_highlighter_for(CodeDocument const& document) void Editor::set_autocomplete_provider_for(CodeDocument const& document) { - switch (document.language()) { - case Language::GML: + if (document.language() == Syntax::Language::GML) { set_autocomplete_provider(make<GUI::GML::AutocompleteProvider>()); - break; - default: + } else { set_autocomplete_provider({}); } } @@ -692,10 +696,10 @@ void Editor::set_language_client_for(CodeDocument const& document) if (m_language_client && m_language_client->language() == document.language()) return; - if (document.language() == Language::Cpp) + if (document.language() == Syntax::Language::Cpp) m_language_client = get_language_client<LanguageClients::Cpp::ConnectionToServer>(project().root_path()); - if (document.language() == Language::Shell) + if (document.language() == Syntax::Language::Shell) m_language_client = get_language_client<LanguageClients::Shell::ConnectionToServer>(project().root_path()); if (m_language_client) { diff --git a/Userland/DevTools/HackStudio/HackStudioWidget.cpp b/Userland/DevTools/HackStudio/HackStudioWidget.cpp index e30c23ed73..4e7bf9ca81 100644 --- a/Userland/DevTools/HackStudio/HackStudioWidget.cpp +++ b/Userland/DevTools/HackStudio/HackStudioWidget.cpp @@ -1614,7 +1614,7 @@ void HackStudioWidget::update_statusbar() } m_statusbar->set_text(0, builder.to_deprecated_string()); - m_statusbar->set_text(1, current_editor_wrapper().editor().code_document().language_name()); + m_statusbar->set_text(1, Syntax::language_to_string(current_editor_wrapper().editor().code_document().language().value_or(Syntax::Language::PlainText))); m_statusbar->set_text(2, DeprecatedString::formatted("Ln {}, Col {}", current_editor().cursor().line() + 1, current_editor().cursor().column())); } diff --git a/Userland/DevTools/HackStudio/Language.cpp b/Userland/DevTools/HackStudio/Language.cpp deleted file mode 100644 index d3a3081f24..0000000000 --- a/Userland/DevTools/HackStudio/Language.cpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "Language.h" - -namespace HackStudio { - -Language language_from_file(LexicalPath const& file) -{ - if (file.title() == "COMMIT_EDITMSG") - return Language::GitCommit; - - auto extension = file.extension(); - VERIFY(!extension.starts_with('.')); - if (extension == "c" || extension == "cc" || extension == "cxx" || extension == "cpp" || extension == "c++" - || extension == "h" || extension == "hh" || extension == "hxx" || extension == "hpp" || extension == "h++") - return Language::Cpp; - if (extension == "cmake" || (extension == "txt" && file.title() == "CMakeLists")) - return Language::CMake; - if (extension == "txt" && file.title() == "CMakeCache") - return Language::CMakeCache; - if (extension == "js" || extension == "mjs" || extension == "json") - return Language::JavaScript; - if (extension == "html" || extension == "htm") - return Language::HTML; - if (extension == "css") - return Language::CSS; - if (extension == "gml") - return Language::GML; - if (extension == "ini" || extension == "af") - return Language::Ini; - if (extension == "sh" || extension == "bash") - return Language::Shell; - if (extension == "sql") - return Language::SQL; - - return Language::Unknown; -} - -Language language_from_name(DeprecatedString const& name) -{ - if (name == "Cpp") - return Language::Cpp; - if (name == "Javascript") - return Language::JavaScript; - if (name == "Shell") - return Language::Shell; - if (name == "GitCommit") - return Language::GitCommit; - - return Language::Unknown; -} - -DeprecatedString language_name_from_file(LexicalPath const& file) -{ - if (file.title() == "COMMIT_EDITMSG") - return "GitCommit"; - - auto extension = file.extension(); - VERIFY(!extension.starts_with('.')); - if (extension == "c" || extension == "cc" || extension == "cxx" || extension == "cpp" || extension == "c++" - || extension == "h" || extension == "hh" || extension == "hxx" || extension == "hpp" || extension == "h++") - return "C++"; - if (extension == "cmake" || (extension == "txt" && file.title() == "CMakeLists")) - return "CMake"; - if (extension == "txt" && file.title() == "CMakeCache") - return "CMakeCache"; - if (extension == "js" || extension == "mjs" || extension == "json") - return "JavaScript"; - if (extension == "gml") - return "GML"; - if (extension == "ini") - return "Ini"; - if (extension == "sh" || extension == "bash") - return "Shell"; - if (extension == "md") - return "Markdown"; - if (extension == "html" || extension == "htm") - return "HTML"; - if (extension == "css") - return "CSS"; - if (extension == "sql") - return "SQL"; - if (extension == "txt") - return "Plaintext"; - - return "Unknown"; -} - -} diff --git a/Userland/DevTools/HackStudio/Language.h b/Userland/DevTools/HackStudio/Language.h deleted file mode 100644 index d7c68d6049..0000000000 --- a/Userland/DevTools/HackStudio/Language.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (c) 2020, the SerenityOS developers. - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include <AK/DeprecatedString.h> -#include <AK/LexicalPath.h> - -namespace HackStudio { -enum class Language { - Unknown, - CMake, - CMakeCache, - Cpp, - CSS, - JavaScript, - HTML, - GitCommit, - GML, - Ini, - Shell, - SQL, -}; - -Language language_from_file(LexicalPath const&); -Language language_from_name(DeprecatedString const&); -DeprecatedString language_name_from_file(LexicalPath const&); - -} diff --git a/Userland/DevTools/HackStudio/LanguageClient.cpp b/Userland/DevTools/HackStudio/LanguageClient.cpp index 499ea5edfa..f9b3b3e14c 100644 --- a/Userland/DevTools/HackStudio/LanguageClient.cpp +++ b/Userland/DevTools/HackStudio/LanguageClient.cpp @@ -226,7 +226,7 @@ void ConnectionToServerWrapper::show_crash_notification() const } ConnectionToServerWrapper::ConnectionToServerWrapper(DeprecatedString const& language_name, Function<NonnullRefPtr<ConnectionToServer>()> connection_creator) - : m_language(language_from_name(language_name)) + : m_language(Syntax::language_from_name(language_name).value()) , m_connection_creator(move(connection_creator)) { create_connection(); diff --git a/Userland/DevTools/HackStudio/LanguageClient.h b/Userland/DevTools/HackStudio/LanguageClient.h index e918bd4351..a1d5fa15ed 100644 --- a/Userland/DevTools/HackStudio/LanguageClient.h +++ b/Userland/DevTools/HackStudio/LanguageClient.h @@ -7,7 +7,6 @@ #pragma once #include "AutoCompleteResponse.h" -#include "Language.h" #include <AK/Forward.h> #include <AK/LexicalPath.h> #include <AK/Types.h> @@ -16,6 +15,7 @@ #include <LibCore/ElapsedTimer.h> #include <LibCpp/Preprocessor.h> #include <LibIPC/ConnectionToServer.h> +#include <LibSyntax/Language.h> #include <DevTools/HackStudio/LanguageServers/LanguageClientEndpoint.h> #include <DevTools/HackStudio/LanguageServers/LanguageServerEndpoint.h> @@ -69,7 +69,7 @@ public: template<typename LanguageServerType> static ConnectionToServerWrapper& get_or_create(DeprecatedString const& project_path); - Language language() const { return m_language; } + Syntax::Language language() const { return m_language; } ConnectionToServer* connection(); void on_crash(); void try_respawn_connection(); @@ -83,7 +83,7 @@ private: void show_crash_notification() const; void show_frequent_crashes_notification() const; - Language m_language; + Syntax::Language m_language; Function<NonnullRefPtr<ConnectionToServer>()> m_connection_creator; RefPtr<ConnectionToServer> m_connection; @@ -125,7 +125,7 @@ public: m_connection_wrapper.set_active_client(*m_previous_client); } - Language language() const { return m_connection_wrapper.language(); } + Syntax::Language language() const { return m_connection_wrapper.language(); } void set_active_client(); bool is_active_client() const; virtual void open_file(DeprecatedString const& path, int fd); |