Skip to content

Commit

Permalink
Fixes for SpartanJ/ecode#365 (needs more testing).
Browse files Browse the repository at this point in the history
Fix in syntax highlighting regex detection.
  • Loading branch information
SpartanJ committed Dec 4, 2024
1 parent 8374128 commit be6469d
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 28 deletions.
20 changes: 15 additions & 5 deletions include/eepp/ui/doc/textrange.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -222,11 +222,21 @@ class EE_API TextRanges : public std::vector<TextRange> {
if ( !mIsSorted )
sort();

auto it = std::unique( begin(), end(),
[]( const TextRange& a, const TextRange& b ) { return a == b; } );

bool merged = it != end();
erase( it, end() );
auto itUnique = std::unique(
begin(), end(), []( const TextRange& a, const TextRange& b ) { return a == b; } );

bool merged = itUnique != end();
erase( itUnique, end() );

auto it = begin();
while ( it != end() ) {
auto next = std::next( it );
while ( next != end() && it != end() && next->contains( *it ) ) {
erase( it );
it = std::prev( next );
}
it = next;
}

return merged;
}
Expand Down
2 changes: 1 addition & 1 deletion src/eepp/ui/doc/languages/javascript.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ void addJavaScript() {
{ { "\"", "\"", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "`", "`", "\\" }, "string" },
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\].*%f[/]",
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\%\"].*%f[/]",
"/[igmsuyd\n]?[igmsuyd\n]?[igmsuyd\n]?", "\\" },
"string" },
{ { "0x[%da-fA-F]+" }, "number" },
Expand Down
42 changes: 29 additions & 13 deletions src/eepp/ui/doc/textdocument.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1305,25 +1305,41 @@ size_t TextDocument::remove( const size_t& cursorIdx, TextRange range,
mLines.emplace_back( String( "\n" ) );

if ( mSelection.size() > 1 ) {
auto ranNorm( originalRange.normalized() );
Int64 lineRem = ranNorm.end().line() - ranNorm.start().line();
size_t curIdx = 0;

Int64 colRem = ranNorm.start().line() == ranNorm.end().line()
? ranNorm.end().column() - ranNorm.start().column()
: ranNorm.end().column();

for ( auto& sel : mSelection ) {
if ( curIdx == cursorIdx ) {
curIdx++;
continue;
}

auto selNorm( sel.normalized() );
auto ranNorm( originalRange.normalized() );

if ( selNorm.start().line() < ranNorm.end().line() )
if ( selNorm.start().line() < ranNorm.end().line() ) {
curIdx++;
continue;
Int64 lineRem = ranNorm.end().line() - ranNorm.start().line();
Int64 colRem = 0;
if ( selNorm.end().line() == ranNorm.end().line() &&
ranNorm.end().column() < selNorm.start().column() ) {
colRem = ranNorm.start().line() == ranNorm.end().line()
? ranNorm.end().column() - ranNorm.start().column()
: ranNorm.end().column();
}
sel.start().setLine( sel.start().line() - lineRem );
sel.start().setColumn( sel.start().column() - colRem );
sel.end().setLine( sel.end().line() - lineRem );
sel.end().setColumn( sel.end().column() - colRem );

if ( lineRem != 0 ) {
sel.start().setLine( sel.start().line() - lineRem );
sel.end().setLine( sel.end().line() - lineRem );

sel.start().setColumn( ranNorm.start().column() + sel.start().column() - colRem );
sel.end().setColumn( ranNorm.start().column() + sel.end().column() - colRem );
} else if ( selNorm.end().line() == ranNorm.end().line() &&
ranNorm.end().column() <= selNorm.start().column() ) {
sel.start().setColumn( sel.start().column() - colRem );
sel.end().setColumn( sel.end().column() - colRem );
}

sel = sanitizeRange( sel );
curIdx++;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ void addJSX() {
{ { "\"", "\"", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "`", "`", "\\" }, "string" },
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\].*%f[/]",
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\%\"].*%f[/]",
"/[igmsuyd\n]?[igmsuyd\n]?[igmsuyd\n]?", "\\" },
"string" },
{ { "%f[^<]![%a_][%w%_%-]*" }, "keyword2" },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ void addTypeScript() {
{ { "\"", "\"", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "`", "`", "\\" }, "string" },
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\].*%f[/]",
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\%\"].*%f[/]",
"/[igmsuyd\n]?[igmsuyd\n]?[igmsuyd\n]?", "\\" },
"string" },
{ { "0x[%da-fA-F]+" }, "number" },
Expand Down Expand Up @@ -82,7 +82,7 @@ void addTypeScript() {
{ { "\"", "\"", "\\" }, "string" },
{ { "'", "'", "\\" }, "string" },
{ { "`", "`", "\\" }, "string" },
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\].*%f[/]",
{ { "/[%+%-%*%^%!%=%&%|%?%:%;%,%(%[%{%<%>%\\%\"].*%f[/]",
"/[igmsuyd\n]?[igmsuyd\n]?[igmsuyd\n]?", "\\" },
"string" },
{ { "%f[^<]![%a_][%w%_%-]*" }, "keyword2" },
Expand Down
12 changes: 6 additions & 6 deletions src/tools/ecode/plugins/lsp/lspclientservermanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -306,7 +306,7 @@ void LSPClientServerManager::updateDirty() {
{
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( !server.second->hasDocuments() &&
if ( server.second && !server.second->hasDocuments() &&
mLSPsToClose.find( server.first ) == mLSPsToClose.end() )
mLSPsToClose.insert( { server.first, std::make_unique<Clock>() } );
}
Expand Down Expand Up @@ -514,7 +514,7 @@ LSPClientServerManager::getLSPClientServers( const std::shared_ptr<TextDocument>
std::vector<LSPClientServer*> servers;
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( server.second->hasDocument( doc.get() ) )
if ( server.second && server.second->hasDocument( doc.get() ) )
servers.push_back( server.second.get() );
}
return servers;
Expand All @@ -524,7 +524,7 @@ std::vector<LSPClientServer*> LSPClientServerManager::getLSPClientServers( const
std::vector<LSPClientServer*> servers;
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( server.second->hasDocument( uri ) )
if ( server.second && server.second->hasDocument( uri ) )
servers.push_back( server.second.get() );
}
return servers;
Expand All @@ -538,7 +538,7 @@ LSPClientServer*
LSPClientServerManager::getOneLSPClientServer( const std::shared_ptr<TextDocument>& doc ) {
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( server.second->hasDocument( doc.get() ) )
if ( server.second && server.second->hasDocument( doc.get() ) )
return server.second.get();
}
return nullptr;
Expand All @@ -547,7 +547,7 @@ LSPClientServerManager::getOneLSPClientServer( const std::shared_ptr<TextDocumen
LSPClientServer* LSPClientServerManager::getOneLSPClientServer( const URI& uri ) {
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( server.second->hasDocument( uri ) )
if ( server.second && server.second->hasDocument( uri ) )
return server.second.get();
}
return nullptr;
Expand All @@ -556,7 +556,7 @@ LSPClientServer* LSPClientServerManager::getOneLSPClientServer( const URI& uri )
LSPClientServer* LSPClientServerManager::getOneLSPClientServer( const std::string& language ) {
Lock l( mClientsMutex );
for ( auto& server : mClients ) {
if ( server.second->supportsLanguage( language ) )
if ( server.second && server.second->supportsLanguage( language ) )
return server.second.get();
}
return nullptr;
Expand Down

0 comments on commit be6469d

Please sign in to comment.