summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Userland/DevTools/HackStudio/CMakeLists.txt1
-rw-r--r--Userland/DevTools/HackStudio/CodeDocument.cpp3
-rw-r--r--Userland/DevTools/HackStudio/CodeDocument.h8
-rw-r--r--Userland/DevTools/HackStudio/Editor.cpp46
-rw-r--r--Userland/DevTools/HackStudio/HackStudioWidget.cpp2
-rw-r--r--Userland/DevTools/HackStudio/Language.cpp93
-rw-r--r--Userland/DevTools/HackStudio/Language.h32
-rw-r--r--Userland/DevTools/HackStudio/LanguageClient.cpp2
-rw-r--r--Userland/DevTools/HackStudio/LanguageClient.h8
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);