You've already forked bsl_console
mirror of
https://github.com/salexdv/bsl_console.git
synced 2025-09-16 09:06:17 +02:00
Добавлены скрипты для отладки подсветки синтаксиса BSL кода. Создан файл debug_syntax.js для тестирования токенизации незавершенного и завершенного кода. Также добавлен тестовый скрипт test_debug.js для проверки токенизации процедур. Обновлен index.html для подключения нового скрипта отладки.
This commit is contained in:
51
debug_syntax.js
Normal file
51
debug_syntax.js
Normal file
@@ -0,0 +1,51 @@
|
||||
// Скрипт для отладки подсветки синтаксиса BSL кода
|
||||
// Добавьте его в ваш HTML после загрузки основных скриптов
|
||||
|
||||
(function() {
|
||||
// Проверяем, загружен ли monaco
|
||||
if (typeof monaco === 'undefined') {
|
||||
console.error('Monaco еще не загружен!');
|
||||
return;
|
||||
}
|
||||
|
||||
// Функция для сравнения токенизации с разными вариантами завершения функции
|
||||
function compareTokenization() {
|
||||
// Код без конца функции
|
||||
const incompleteCode = `
|
||||
Функция ТестоваяФункция()
|
||||
Перем а;
|
||||
а = 10;
|
||||
Возврат а;
|
||||
`;
|
||||
|
||||
// Код с завершенной функцией
|
||||
const completeCode = incompleteCode + `КонецФункции`;
|
||||
|
||||
console.log('=== ТЕСТ ТОКЕНИЗАЦИИ ===');
|
||||
console.log('1. Токенизация незавершенного кода:');
|
||||
const tokensIncomplete = debugTokenization(incompleteCode, 'bsl');
|
||||
|
||||
console.log('2. Токенизация завершенного кода:');
|
||||
const tokensComplete = debugTokenization(completeCode, 'bsl');
|
||||
|
||||
// Анализируем последнюю строку с КонецФункции
|
||||
if (tokensComplete && tokensComplete.length > 0) {
|
||||
const lastLineTokens = tokensComplete[tokensComplete.length - 1];
|
||||
console.log('Токены последней строки (КонецФункции):', lastLineTokens);
|
||||
|
||||
// Проверяем, правильно ли токенизируется слово "КонецФункции"
|
||||
if (lastLineTokens && lastLineTokens.length > 0) {
|
||||
const keywordToken = lastLineTokens[0];
|
||||
console.log('Тип токена "КонецФункции":', keywordToken.type);
|
||||
|
||||
if (keywordToken.type !== 'keyword.bsl') {
|
||||
console.error('ПРОБЛЕМА: "КонецФункции" не распознается как ключевое слово!');
|
||||
console.log('Это может быть причиной поломки подсветки синтаксиса.');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Запускаем тест при загрузке страницы
|
||||
setTimeout(compareTokenization, 1000); // Даем время на инициализацию
|
||||
})();
|
@@ -1,5 +1,39 @@
|
||||
define([], function () {
|
||||
|
||||
// Функция для отладки токенизации
|
||||
function debugTokenization(content, languageId) {
|
||||
console.log("[DEBUG] Отладка токенизации для языка:", languageId);
|
||||
try {
|
||||
const tokens = monaco.editor.tokenize(content, languageId);
|
||||
console.log("[DEBUG] Получены токены:", tokens.length, "строк");
|
||||
for (let i = 0; i < Math.min(tokens.length, 3); i++) {
|
||||
console.log(`[DEBUG] Пример токенов строки ${i}:`, JSON.stringify(tokens[i].slice(0, 3)));
|
||||
}
|
||||
return tokens;
|
||||
} catch (error) {
|
||||
console.error("[DEBUG] Ошибка при токенизации:", error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Функция для отладки API методов
|
||||
function debugMonacoVersion() {
|
||||
console.log("[DEBUG] Версия Monaco Editor:", monaco.version);
|
||||
console.log("[DEBUG] Проверка наличия API методов:");
|
||||
try {
|
||||
const model = editor.getModel();
|
||||
if (model) {
|
||||
console.log("[DEBUG] model.getWordUntilPosition:", typeof model.getWordUntilPosition === 'function' ? "доступен" : "недоступен");
|
||||
console.log("[DEBUG] model.getWordAtPosition:", typeof model.getWordAtPosition === 'function' ? "доступен" : "недоступен");
|
||||
console.log("[DEBUG] model.findMatchingBracketUp:", typeof model.findMatchingBracketUp === 'function' ? "доступен" : "недоступен");
|
||||
} else {
|
||||
console.log("[DEBUG] Модель недоступна для проверки API методов");
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("[DEBUG] Ошибка при проверке API методов Monaco:", error);
|
||||
}
|
||||
}
|
||||
|
||||
function deepCopyArray(sourceArray, destinationArray) {
|
||||
|
||||
sourceArray.forEach(value => {
|
||||
@@ -432,7 +466,7 @@ define([], function () {
|
||||
{token: 'query'},
|
||||
{token: 'query'}
|
||||
]],
|
||||
[/([a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]+)(\.)([a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]+)/, 'query'],
|
||||
[/([a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]+)(\.)([a-zA-Z\u0410-\u044F_0-9]+)/, 'query'],
|
||||
[/[a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]*/, {
|
||||
cases: {
|
||||
'@queryWords': 'query.keyword',
|
||||
@@ -653,11 +687,26 @@ define([], function () {
|
||||
completionProvider: {
|
||||
triggerCharacters: ['.', '"', ' ', '&'],
|
||||
provideCompletionItems: function (model, position, context, token) {
|
||||
resetSuggestWidgetDisplay();
|
||||
let bsl = new bslHelper(model, position);
|
||||
let completion = bsl.getCompletion(context, token);
|
||||
bsl.onProvideCompletion(context, completion);
|
||||
return completion;
|
||||
try {
|
||||
console.log("[DEBUG] provideCompletionItems в bsl_language.js вызвана", { position, context, token });
|
||||
resetSuggestWidgetDisplay();
|
||||
|
||||
// Создаем экземпляр bslHelper и проверяем, что создание прошло успешно
|
||||
let bsl = new bslHelper(model, position);
|
||||
console.log("[DEBUG] bslHelper создан успешно");
|
||||
|
||||
// Вызываем метод получения подсказок и передаем context и token
|
||||
let completion = bsl.getCompletion(context, token);
|
||||
console.log("[DEBUG] getCompletion выполнен", completion);
|
||||
|
||||
bsl.onProvideCompletion(context, completion);
|
||||
console.log("[DEBUG] onProvideCompletion выполнен успешно");
|
||||
|
||||
return completion;
|
||||
} catch (error) {
|
||||
console.log("[DEBUG] Ошибка в provideCompletionItems:", error);
|
||||
return { suggestions: [] };
|
||||
}
|
||||
},
|
||||
resolveCompletionItem: function (model, position, item) {
|
||||
let bsl = new bslHelper(model, position);
|
||||
|
103
src/index.html
103
src/index.html
@@ -1,52 +1,53 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>BSL-editor</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<link href="./decorations.css" rel="stylesheet">
|
||||
<link href="./tree/tree.css" rel="stylesheet">
|
||||
<link href="./tingle.css" rel="stylesheet">
|
||||
<script src="./tingle.js"></script>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
}
|
||||
#container {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="container"></div>
|
||||
<div id="display">
|
||||
<div id="display-header">
|
||||
<div id="display-title"></div>
|
||||
<div id="display-close"></div>
|
||||
</div>
|
||||
<div id="variables-display">
|
||||
<div id="variables-tree"></div>
|
||||
</div>
|
||||
</div>
|
||||
<button id="event-button"></button>
|
||||
|
||||
<script>
|
||||
function getCode() {
|
||||
return '';
|
||||
}
|
||||
</script>
|
||||
<script src="./vs/loader.js"></script>
|
||||
<script src="./parsers.js"></script>
|
||||
<script src="./finder.js"></script>
|
||||
<script src="./bsl_helper.js"></script>
|
||||
<script src="./init.js"></script>
|
||||
<script src="./tree/tree.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>BSL-editor</title>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
|
||||
<link href="./decorations.css" rel="stylesheet">
|
||||
<link href="./tree/tree.css" rel="stylesheet">
|
||||
<link href="./tingle.css" rel="stylesheet">
|
||||
<script src="./tingle.js"></script>
|
||||
<style>
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
margin: 0px;
|
||||
}
|
||||
#container {
|
||||
height: 100%;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
<div id="container"></div>
|
||||
<div id="display">
|
||||
<div id="display-header">
|
||||
<div id="display-title"></div>
|
||||
<div id="display-close"></div>
|
||||
</div>
|
||||
<div id="variables-display">
|
||||
<div id="variables-tree"></div>
|
||||
</div>
|
||||
</div>
|
||||
<button id="event-button"></button>
|
||||
|
||||
<script>
|
||||
function getCode() {
|
||||
return '';
|
||||
}
|
||||
</script>
|
||||
<script src="./vs/loader.js"></script>
|
||||
<script src="./parsers.js"></script>
|
||||
<script src="./finder.js"></script>
|
||||
<script src="./bsl_helper.js"></script>
|
||||
<script src="./init.js"></script>
|
||||
<script src="./tree/tree.js"></script>
|
||||
<script src="../debug_syntax.js"></script>
|
||||
|
||||
</body>
|
||||
|
||||
</html>
|
21
test_debug.js
Normal file
21
test_debug.js
Normal file
@@ -0,0 +1,21 @@
|
||||
// Тестовый скрипт для отладки проблем с подсветкой синтаксиса
|
||||
document.addEventListener("DOMContentLoaded", function() {
|
||||
// Используем существующую функцию отладки токенизации
|
||||
const testCode = `
|
||||
Процедура ТестоваяПроцедура()
|
||||
// Тестовый код
|
||||
Если Истина Тогда
|
||||
Сообщить("Тест");
|
||||
КонецЕсли;
|
||||
КонецПроцедуры
|
||||
`;
|
||||
|
||||
// Отладка токенизации
|
||||
const tokens = debugTokenization(testCode, 'bsl');
|
||||
console.log("Токены тестовой процедуры:", tokens);
|
||||
|
||||
// Проверим конкретно токенизацию конца функции
|
||||
const endFuncTest = `КонецПроцедуры`;
|
||||
const endFuncTokens = debugTokenization(endFuncTest, 'bsl');
|
||||
console.log("Токены конца процедуры:", endFuncTokens);
|
||||
});
|
Reference in New Issue
Block a user