diff --git a/src/bsl_helper.js b/src/bsl_helper.js index d67667c..3226078 100644 --- a/src/bsl_helper.js +++ b/src/bsl_helper.js @@ -2503,13 +2503,18 @@ class bslHelper { let result = ''; const startWords = [ - 'если', 'для', 'пока', 'функция', 'процедура', - 'if', 'for', 'while', 'function', 'procedure' + 'если', 'для', 'пока', 'функция', 'процедура', 'попытка', + 'if', 'for', 'while', 'function', 'procedure', 'try' ]; const stopWords = [ - 'конецесли', 'конеццикла', 'конецфункции', 'конецпроцедуры', - 'endif', 'enddo', 'endfunction', 'endprocedure' + 'конецесли', 'конеццикла', 'конецфункции', 'конецпроцедуры', 'конецпопытки', + 'endif', 'enddo', 'endfunction', 'endprocedure', 'endtry' + ]; + + const complexWords = [ + 'исключение', 'иначе', 'иначеесли', + 'except', 'else', 'elseif' ]; const strings = model.getValue().split('\n'); @@ -2540,7 +2545,10 @@ class bslHelper { if (startWords.includes(word)) offset++; - if (stopWords.includes(word)) + if (stopWords.includes(word)) + offset = Math.max(0, offset - 1); + + if (complexWords.includes(word)) offset = Math.max(0, offset - 1); word_i++; @@ -2550,6 +2558,8 @@ class bslHelper { let strOffset = 0 < delta ? offset - 1 : offset; result = result + '\t'.repeat(strOffset) + original.trim() + '\n'; + if (words.length && complexWords.includes(words[0].toLowerCase())) + offset++; }); diff --git a/src/test.html b/src/test.html index 1d183fa..e69e365 100644 --- a/src/test.html +++ b/src/test.html @@ -85,6 +85,29 @@ '\t', '\tРезультат = Запрос.', '\t', + '', + '// Начало проверки форматирования для попытки и условия', + 'Попытка', + ' Док = Документы.АвансовыйОтчет.НайтиПоНомеру(1);', + 'Исключение', + 'Сообщить("Ошибка");', + 'КонецПопытки;', + '', + 'Если Истина Тогда', + 'Если Истина Тогда', + ' Док = Документы.АвансовыйОтчет.НайтиПоНомеру(1);', + 'ИначеЕсли Ложь Тогда', + 'Док = Документы.РасходнаяНакладная.НайтиПоНомеру(1);', + 'КонецЕсли;', + 'Иначе', + 'Если Истина Тогда', + 'Док = Документы.РасходнаяНакладная.НайтиПоНомеру(1);', + 'Иначе', + 'Док = Документы.ПриходнаяНакладная.НайтиПоНомеру(1);', + 'КонецЕсли;', + 'КонецЕсли;', + '// Конец проверки форматирования для попытки и условия', + '', 'КонецФункции', ].join('\n');; }