Added eC syntax highlighting (SpartanJ/ecode#485).

Fixed health feature.
This commit is contained in:
Martín Lucas Golini
2025-05-29 00:45:48 -03:00
parent eacb3a0f5b
commit da829b1dd2
5 changed files with 267 additions and 72 deletions
@@ -0,0 +1,175 @@
#include <eepp/ui/doc/languages/ec.hpp>
#include <eepp/ui/doc/syntaxdefinitionmanager.hpp>
namespace EE { namespace UI { namespace Doc { namespace Language {
SyntaxDefinition& addeC() {
return SyntaxDefinitionManager::instance()
->add(
{ "eC",
{ "%.ec$", "%.eh$" },
{
{ { "//.-\n" }, "comment" },
{ { "/%*", "%*/" }, "comment" },
{ { "(#%s*include)%s+([<%\"][%w%d%.%\\%/%_%-]+[>%\"])" },
{ "keyword", "keyword", "literal" } },
{ { "\"", "[\"\n]", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "(class|struct)\\s+([A-Za-z]\\w*)\\s*:\\s*([A-Za-z]\\w*)" },
{ "keyword", "keyword", "keyword2", "keyword2" },
"",
SyntaxPatternMatchType::RegEx },
{ { "(class|struct)\\s+([A-Za-z]\\w*)" },
{ "keyword", "keyword", "keyword2" },
"",
SyntaxPatternMatchType::RegEx },
{ { "c_number_parser" }, "number", "", SyntaxPatternMatchType::Parser },
{ { "[%+%-=/%*%^%%<>!~|&]" }, "operator" },
{ { "(if|for|while|switch)\\s*(?=\\()" },
{ "normal", "keyword", "keyword" },
"",
SyntaxPatternMatchType::RegEx },
{ { "[%a_][%w_]*%f[(]" }, "function" },
{ { "#[%a_][%w_]*" }, "symbol" },
{ { "[%a_][%w_]*" }, "symbol" },
},
{
{ "elseif", "keyword" },
{ "int", "keyword2" },
{ "then", "keyword" },
{ "unsigned", "keyword2" },
{ "continue", "keyword" },
{ "default", "keyword" },
{ "volatile", "keyword" },
{ "switch", "keyword" },
{ "char", "keyword2" },
{ "double", "keyword2" },
{ "auto", "keyword" },
{ "bool", "keyword2" },
{ "return", "keyword" },
{ "extern", "keyword" },
{ "NULL", "literal" },
{ "long", "keyword2" },
{ "void", "keyword" },
{ "union", "keyword" },
{ "short", "keyword2" },
{ "static", "keyword" },
{ "inline", "keyword" },
{ "false", "literal" },
{ "for", "keyword" },
{ "goto", "keyword" },
{ "while", "keyword" },
{ "const", "keyword" },
{ "int32_t", "keyword2" },
{ "int16_t", "keyword2" },
{ "uint16_t", "keyword2" },
{ "typedef", "keyword" },
{ "true", "literal" },
{ "else", "keyword" },
{ "uint32_t", "keyword2" },
{ "enum", "keyword" },
{ "int8_t", "keyword2" },
{ "int64_t", "keyword2" },
{ "float", "keyword2" },
{ "struct", "keyword" },
{ "break", "keyword" },
{ "uint8_t", "keyword2" },
{ "uint64_t", "keyword2" },
{ "case", "keyword" },
{ "if", "keyword" },
{ "do", "keyword" },
{ "#if", "keyword" },
{ "#ifdef", "keyword" },
{ "#ifndef", "keyword" },
{ "#elif", "keyword" },
{ "#else", "keyword" },
{ "#endif", "keyword" },
{ "#define", "keyword" },
{ "#undef", "keyword" },
{ "#include", "keyword" },
{ "#line", "keyword" },
{ "#error", "keyword" },
{ "#pragma", "keyword" },
{ "#warning ", "keyword" },
{ "#elifdef ", "keyword" },
{ "#elifndef ", "keyword" },
{ "class", "keyword" },
{ "private", "keyword" },
{ "public", "keyword" },
{ "property", "keyword" },
{ "import", "keyword" },
{ "delete", "keyword" },
{ "new", "keyword" },
{ "new0", "keyword" },
{ "renew", "keyword" },
{ "renew0", "keyword" },
{ "define", "keyword" },
{ "get", "keyword" },
{ "set", "keyword" },
{ "remote", "keyword" },
{ "dllexport", "keyword" },
{ "dllimport", "keyword" },
{ "stdcall", "keyword" },
{ "subclass", "keyword" },
{ "__on_register_module", "keyword" },
{ "namespace", "keyword" },
{ "using", "keyword" },
{ "typed_object", "keyword" },
{ "any_object", "keyword" },
{ "incref", "keyword" },
{ "register", "keyword" },
{ "watch", "keyword" },
{ "stopwatching", "keyword" },
{ "firewatchers", "keyword" },
{ "watchable", "keyword" },
{ "class_designer", "keyword" },
{ "class_fixed", "keyword" },
{ "class_no_expansion", "keyword" },
{ "isset", "keyword" },
{ "class_default_property", "keyword" },
{ "property_category", "keyword" },
{ "class_data", "keyword" },
{ "class_property", "keyword" },
{ "virtual", "keyword" },
{ "thisclass", "keyword" },
{ "unichar", "keyword" },
{ "dbtable", "keyword" },
{ "dbindex", "keyword" },
{ "database_open", "keyword" },
{ "dbfield", "keyword" },
{ "uint", "keyword2" },
{ "uint32", "keyword2" },
{ "uint16", "keyword2" },
{ "uint64", "keyword2" },
{ "bool", "keyword2" },
{ "byte", "keyword2" },
{ "int64", "keyword2" },
{ "uintptr", "keyword2" },
{ "intptr", "keyword2" },
{ "intsize", "keyword2" },
{ "uintsize", "keyword2" },
{ "string", "keyword2" },
{ "unichar", "keyword2" },
{ "this", "keyword" },
{ "false", "keyword" },
{ "null", "literal" },
{ "value", "literal" },
},
"//",
{}
} )
.setFoldRangeType( FoldRangeType::Braces )
.setFoldBraces( { { '{', '}' } } );
}
}}}} // namespace EE::UI::Doc::Language
@@ -0,0 +1,12 @@
#ifndef EE_UI_DOC_eC
#define EE_UI_DOC_eC
#include <eepp/ui/doc/syntaxdefinition.hpp>
namespace EE { namespace UI { namespace Doc { namespace Language {
extern SyntaxDefinition& addeC();
}}}} // namespace EE::UI::Doc::Language
#endif
@@ -20,6 +20,7 @@
#include <eepp/ui/doc/languages/d.hpp>
#include <eepp/ui/doc/languages/dart.hpp>
#include <eepp/ui/doc/languages/difffile.hpp>
#include <eepp/ui/doc/languages/ec.hpp>
#include <eepp/ui/doc/languages/elena.hpp>
#include <eepp/ui/doc/languages/elixir.hpp>
#include <eepp/ui/doc/languages/elm.hpp>
@@ -227,6 +228,12 @@ void LanguagesSyntaxHighlighting::load() {
"csharp",
} );
sdm->addPreDefinition( {
"eC",
[]() -> SyntaxDefinition& { return addeC(); },
{ "%.ec$", "%.eh$" },
} );
sdm->addPreDefinition( {
"OpenSCAD",
[]() -> SyntaxDefinition& { return addOpenSCAD(); },
+56 -62
View File
@@ -1786,73 +1786,67 @@ std::map<KeyBindings::Shortcut, std::string> App::getDefaultKeybindings() {
std::map<KeyBindings::Shortcut, std::string> App::getLocalKeybindings() {
return {
{ { KEY_RETURN, KEYMOD_LALT | KEYMOD_LCTRL }, "fullscreen-toggle" },
{ { KEY_F3, KEYMOD_NONE }, "repeat-find" }, { { KEY_F3, KEYMOD_SHIFT }, "find-prev" },
{ { KEY_F12, KEYMOD_NONE }, "console-toggle" },
{ { KEY_F, KeyMod::getDefaultModifier() }, "find-replace" },
{ { KEY_Q, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "close-app" },
{ { KEY_O, KeyMod::getDefaultModifier() }, "open-file" },
{ { KEY_W, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "download-file-web" },
{ { KEY_O, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-folder" },
{ { KEY_F11, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "debug-widget-tree-view" },
{ { KEY_K, KeyMod::getDefaultModifier() }, "open-locatebar" },
{ { KEY_P, KeyMod::getDefaultModifier() }, "open-command-palette" },
{ { KEY_F, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-global-search" },
{ { KEY_L, KeyMod::getDefaultModifier() }, "go-to-line" },
{ { KEY_F3, KEYMOD_NONE }, "repeat-find" },
{ { KEY_F3, KEYMOD_SHIFT }, "find-prev" },
{ { KEY_F12, KEYMOD_NONE }, "console-toggle" },
{ { KEY_F, KeyMod::getDefaultModifier() }, "find-replace" },
{ { KEY_Q, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "close-app" },
{ { KEY_O, KeyMod::getDefaultModifier() }, "open-file" },
{ { KEY_W, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "download-file-web" },
{ { KEY_O, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-folder" },
{ { KEY_F11, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "debug-widget-tree-view" },
{ { KEY_K, KeyMod::getDefaultModifier() }, "open-locatebar" },
{ { KEY_P, KeyMod::getDefaultModifier() }, "open-command-palette" },
{ { KEY_F, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-global-search" },
{ { KEY_L, KeyMod::getDefaultModifier() }, "go-to-line" },
#if EE_PLATFORM == EE_PLATFORM_MACOS
{ { KEY_M, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "menu-toggle" },
{ { KEY_M, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "menu-toggle" },
#else
{ { KEY_M, KeyMod::getDefaultModifier() }, "menu-toggle" },
{ { KEY_M, KeyMod::getDefaultModifier() }, "menu-toggle" },
#endif
{ { KEY_S, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "save-all" },
{ { KEY_F9, KEYMOD_LALT }, "switch-side-panel" },
{ { KEY_J, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-left" },
{ { KEY_L, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-right" },
{ { KEY_I, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-top" },
{ { KEY_K, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-bottom" },
{ { KEY_S, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-swap" },
{ { KEY_T, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"reopen-closed-tab" },
{ { KEY_1, KEYMOD_LALT }, "toggle-status-locate-bar" },
{ { KEY_2, KEYMOD_LALT }, "toggle-status-global-search-bar" },
{ { KEY_3, KEYMOD_LALT }, "toggle-status-terminal" },
{ { KEY_4, KEYMOD_LALT }, "toggle-status-build-output" },
{ { KEY_5, KEYMOD_LALT }, "toggle-status-app-output" },
{ { KEY_B, KeyMod::getDefaultModifier() | KEYMOD_SHIFT },
"project-build-start-cancel" },
{ { KEY_C, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "project-build-cancel" },
{ { KEY_R, KeyMod::getDefaultModifier() }, "project-build-and-run" },
{ { KEY_O, KEYMOD_LALT | KEYMOD_SHIFT }, "show-open-documents" },
{ { KEY_K, KeyMod::getDefaultModifier() | KEYMOD_SHIFT },
"open-workspace-symbol-search" },
{ { KEY_P, KeyMod::getDefaultModifier() | KEYMOD_SHIFT },
"open-document-symbol-search" },
{ { KEY_N, KEYMOD_SHIFT | KEYMOD_LALT }, "create-new-window" },
{ { KEY_S, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "save-all" },
{ { KEY_F9, KEYMOD_LALT }, "switch-side-panel" },
{ { KEY_J, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-left" },
{ { KEY_L, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-right" },
{ { KEY_I, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-top" },
{ { KEY_K, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-bottom" },
{ { KEY_S, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"terminal-split-swap" },
{ { KEY_T, KeyMod::getDefaultModifier() | KEYMOD_LALT | KEYMOD_SHIFT },
"reopen-closed-tab" },
{ { KEY_1, KEYMOD_LALT }, "toggle-status-locate-bar" },
{ { KEY_2, KEYMOD_LALT }, "toggle-status-global-search-bar" },
{ { KEY_3, KEYMOD_LALT }, "toggle-status-terminal" },
{ { KEY_4, KEYMOD_LALT }, "toggle-status-build-output" },
{ { KEY_5, KEYMOD_LALT }, "toggle-status-app-output" },
{ { KEY_B, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "project-build-start-cancel" },
{ { KEY_C, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "project-build-cancel" },
{ { KEY_R, KeyMod::getDefaultModifier() }, "project-build-and-run" },
{ { KEY_O, KEYMOD_LALT | KEYMOD_SHIFT }, "show-open-documents" },
{ { KEY_K, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-workspace-symbol-search" },
{ { KEY_P, KeyMod::getDefaultModifier() | KEYMOD_SHIFT }, "open-document-symbol-search" },
{ { KEY_N, KEYMOD_SHIFT | KEYMOD_LALT }, "create-new-window" },
};
}
// Old keybindings will be rebinded to the new keybindings when they are still set to the old
// keybindind
std::map<std::string, std::string> App::getMigrateKeybindings() {
return {
{ "fullscreen-toggle", "alt+return" }, { "switch-to-tab-1", "alt+1" },
{ "switch-to-tab-2", "alt+2" }, { "switch-to-tab-3", "alt+3" },
{ "switch-to-tab-4", "alt+4" }, { "switch-to-tab-5", "alt+5" },
{ "switch-to-tab-6", "alt+6" }, { "switch-to-tab-7", "alt+7" },
{ "switch-to-tab-8", "alt+8" }, { "switch-to-tab-9", "alt+9" },
{ "switch-to-last-tab", "alt+0" },
return { { "fullscreen-toggle", "alt+return" }, { "switch-to-tab-1", "alt+1" },
{ "switch-to-tab-2", "alt+2" }, { "switch-to-tab-3", "alt+3" },
{ "switch-to-tab-4", "alt+4" }, { "switch-to-tab-5", "alt+5" },
{ "switch-to-tab-6", "alt+6" }, { "switch-to-tab-7", "alt+7" },
{ "switch-to-tab-8", "alt+8" }, { "switch-to-tab-9", "alt+9" },
{ "switch-to-last-tab", "alt+0" },
#if EE_PLATFORM == EE_PLATFORM_MACOS
{ "menu-toggle", "mod+shift+m" },
{ "menu-toggle", "mod+shift+m" },
#endif
{ "lock-toggle", "mod+shift+l" }, { "debug-widget-tree-view", "f11" },
{ "project-build-and-run", "f5" }, {
"project-build-start", "mod+shift+b"
}
};
{ "lock-toggle", "mod+shift+l" }, { "debug-widget-tree-view", "f11" },
{ "project-build-and-run", "f5" }, { "project-build-start", "mod+shift+b" } };
}
std::vector<std::string> App::getUnlockedCommands() {
@@ -3497,10 +3491,9 @@ void App::init( const LogLevel& logLevel, std::string file, const Float& pidelDe
mConfig.windowState.pixelDensity =
pidelDensity > 0
? pidelDensity
: ( mConfig.windowState.pixelDensity > 0
? mConfig.windowState.pixelDensity
: currentDisplay->getPixelDensity() > 2 ? currentDisplay->getPixelDensity() / 2
: currentDisplay->getPixelDensity() );
: ( mConfig.windowState.pixelDensity > 0 ? mConfig.windowState.pixelDensity
: currentDisplay->getPixelDensity() > 2 ? currentDisplay->getPixelDensity() / 2
: currentDisplay->getPixelDensity() );
#else
mConfig.windowState.pixelDensity =
pidelDensity > 0
@@ -4269,7 +4262,8 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) {
benchmarkMode.Get(), css.Get(), file.Get(), verbose.Get(),
disableFileLogs.Get(), openClean.Get(), portable.Get(), language.Get(),
incognito.Get(),
health || ( exportLangPath && !exportLangPath.Get().empty() ) );
health || ( healthLang && !healthLang.Get().empty() ) ||
( exportLangPath && !exportLangPath.Get().empty() ) );
if ( exportLangPath && !exportLangPath.Get().empty() ) {
Sys::windowAttachConsole();
@@ -4277,7 +4271,7 @@ EE_MAIN_FUNC int main( int argc, char* argv[] ) {
return EXIT_SUCCESS;
}
if ( health ) {
if ( health || ( healthLang && !healthLang.Get().empty() ) ) {
Sys::windowAttachConsole();
Language::LanguagesSyntaxHighlighting::load();
SyntaxDefinitionManager::instance()->loadFromFolder( appInstance->getLanguagesPath() );
+17 -10
View File
@@ -42,6 +42,16 @@ std::vector<FeaturesHealth::LangHealth> FeaturesHealth::getHealth( PluginManager
bool ownsDebugger = false;
const auto& definitions = SyntaxDefinitionManager::instance()->getDefinitions();
const auto& preDefinitions = SyntaxDefinitionManager::instance()->getPreDefinitions();
std::set<std::string> languages;
for ( const auto& def : definitions )
if ( def.isVisible() )
languages.insert( def.getLSPName() );
for ( const auto& pdef : preDefinitions )
languages.insert( pdef.getLSPName() );
LinterPlugin* linter = static_cast<LinterPlugin*>( pluginManager->get( "linter" ) );
@@ -71,19 +81,16 @@ std::vector<FeaturesHealth::LangHealth> FeaturesHealth::getHealth( PluginManager
debugger = static_cast<DebuggerPlugin*>( DebuggerPlugin::NewSync( pluginManager ) );
}
for ( const auto& def : definitions ) {
if ( !def.isVisible() )
continue;
if ( !langFilter.empty() && langFilter != def.getLSPName() )
for ( const auto& name : languages ) {
if ( !langFilter.empty() && langFilter != name )
continue;
FeaturesHealth::LangHealth lang;
lang.lang = def.getLSPName();
lang.lang = name;
lang.syntaxHighlighting = true;
if ( linter ) {
Linter found = linter->getLinterForLang( def.getLSPName() );
Linter found = linter->getLinterForLang( lang.lang );
if ( !found.command.empty() ) {
lang.linter.name =
found.isNative ? "native" : String::split( found.command, ' ' )[0];
@@ -94,7 +101,7 @@ std::vector<FeaturesHealth::LangHealth> FeaturesHealth::getHealth( PluginManager
}
if ( formatter ) {
FormatterPlugin::Formatter found = formatter->getFormatterForLang( def.getLSPName() );
FormatterPlugin::Formatter found = formatter->getFormatterForLang( lang.lang );
if ( !found.command.empty() ) {
lang.formatter.name = found.type == FormatterPlugin::FormatterType::Native
? "native"
@@ -107,7 +114,7 @@ std::vector<FeaturesHealth::LangHealth> FeaturesHealth::getHealth( PluginManager
}
if ( lsp ) {
LSPDefinition found = lsp->getClientManager().getLSPForLang( def.getLSPName() );
LSPDefinition found = lsp->getClientManager().getLSPForLang( lang.lang );
if ( !found.command.empty() ) {
lang.lsp.name = found.name;
lang.lsp.url = found.url;
@@ -117,7 +124,7 @@ std::vector<FeaturesHealth::LangHealth> FeaturesHealth::getHealth( PluginManager
}
if ( debugger ) {
std::vector<DapTool> found = debugger->getDebuggersForLang( def.getLSPName() );
std::vector<DapTool> found = debugger->getDebuggersForLang( lang.lang );
for ( const auto& dbg : found ) {
FeatureStatus fdbg;
fdbg.name = dbg.name;