ladybird/Userland/Applications/Spreadsheet/CellSyntaxHighlighter.cpp
Linus Groh 97d49cb92b LibJS: Consolidate exception function names and source ranges
Instead of storing the function names (in a badly named Vector<String>)
and source ranges separately, consolidate them into a new struct:
TracebackFrame. This makes it both easier to use now and easier to
extend in the future.
Unlike before we now keep each call frame's current node source range
in the traceback frame next to the function name, meaning we can display
line and column numbers outside of the VM and after the call stack is
emptied.
2021-04-24 20:11:04 +02:00

60 lines
1.5 KiB
C++

/*
* Copyright (c) 2020, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include "CellSyntaxHighlighter.h"
#include <LibGUI/TextEditor.h>
#include <LibGfx/Palette.h>
#include <LibJS/Lexer.h>
namespace Spreadsheet {
void CellSyntaxHighlighter::rehighlight(const Palette& palette)
{
auto text = m_client->get_text();
m_client->spans().clear();
if (!text.starts_with('=')) {
m_client->do_update();
return;
}
JS::SyntaxHighlighter::rehighlight(palette);
// Highlight the '='
m_client->spans().empend(
GUI::TextRange { { 0, 0 }, { 0, 1 } },
Gfx::TextAttributes {
palette.syntax_keyword(),
Optional<Color> {},
false,
false,
},
nullptr,
false);
if (m_cell && m_cell->exception()) {
auto& traceback = m_cell->exception()->traceback();
auto& range = traceback.first().source_range;
GUI::TextRange text_range { { range.start.line - 1, range.start.column }, { range.end.line - 1, range.end.column - 1 } };
m_client->spans().prepend(
GUI::TextDocumentSpan {
text_range,
Gfx::TextAttributes {
Color::Black,
Color::Red,
false,
false,
},
nullptr,
false });
}
m_client->do_update();
}
CellSyntaxHighlighter::~CellSyntaxHighlighter()
{
}
}