1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-23 18:45:07 +00:00
serenity/Userland/Applications/Spreadsheet/CellSyntaxHighlighter.cpp
davidot 4ef1e8f226 Spreadsheet: No longer use vm.exception() to signal exception state
Instead, use the completions which are returned directly. This means we
no longer have to worry about the global VM state when running code.
2022-02-08 09:12:42 +00:00

63 lines
1.7 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,
},
(u64)-1,
false);
if (m_cell && m_cell->thrown_value().has_value()) {
if (auto value = m_cell->thrown_value().value(); value.is_object() && is<JS::Error>(value.as_object())) {
auto& error = static_cast<JS::Error const&>(value.as_object());
auto& traceback = error.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 } };
m_client->spans().prepend(
GUI::TextDocumentSpan {
text_range,
Gfx::TextAttributes {
Color::Black,
Color::Red,
false,
false,
},
(u64)-1,
false });
}
}
m_client->do_update();
}
CellSyntaxHighlighter::~CellSyntaxHighlighter()
{
}
}