From 08c1effc04c08735621394b571da508fce91bd7b Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 8 Mar 2023 20:59:05 +0000 Subject: [PATCH] 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. --- Userland/DevTools/HackStudio/CMakeLists.txt | 1 - Userland/DevTools/HackStudio/CodeDocument.cpp | 3 +- Userland/DevTools/HackStudio/CodeDocument.h | 8 +- Userland/DevTools/HackStudio/Editor.cpp | 46 ++++----- .../DevTools/HackStudio/HackStudioWidget.cpp | 2 +- Userland/DevTools/HackStudio/Language.cpp | 93 ------------------- Userland/DevTools/HackStudio/Language.h | 32 ------- .../DevTools/HackStudio/LanguageClient.cpp | 2 +- Userland/DevTools/HackStudio/LanguageClient.h | 8 +- 9 files changed, 35 insertions(+), 160 deletions(-) delete mode 100644 Userland/DevTools/HackStudio/Language.cpp delete mode 100644 Userland/DevTools/HackStudio/Language.h 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 #include +#include 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 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 m_language; Vector m_breakpoint_lines; Optional 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 #include #include @@ -36,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -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()); on_token_info_timer_tick(); m_tokens_info_timer->restart(); - } else + } else { set_syntax_highlighter(make()); - + } break; - case Language::CMake: + case Syntax::Language::CMake: set_syntax_highlighter(make()); break; - case Language::CMakeCache: + case Syntax::Language::CMakeCache: set_syntax_highlighter(make()); break; - case Language::CSS: + case Syntax::Language::CSS: set_syntax_highlighter(make()); break; - case Language::GitCommit: + case Syntax::Language::GitCommit: set_syntax_highlighter(make()); break; - case Language::GML: + case Syntax::Language::GML: set_syntax_highlighter(make()); break; - case Language::HTML: + case Syntax::Language::HTML: set_syntax_highlighter(make()); break; - case Language::JavaScript: + case Syntax::Language::JavaScript: set_syntax_highlighter(make()); break; - case Language::Ini: + case Syntax::Language::INI: set_syntax_highlighter(make()); break; - case Language::Shell: + case Syntax::Language::Shell: set_syntax_highlighter(make()); break; - case Language::SQL: + case Syntax::Language::SQL: set_syntax_highlighter(make()); 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()); - 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(project().root_path()); - if (document.language() == Language::Shell) + if (document.language() == Syntax::Language::Shell) m_language_client = get_language_client(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 -#include - -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()> 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 #include #include @@ -16,6 +15,7 @@ #include #include #include +#include #include #include @@ -69,7 +69,7 @@ public: template 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()> m_connection_creator; RefPtr 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);