diff options
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); |