Перейти к содержанию

Большой тест

BSL

// SYNTAX TEST "source.bsl"
#Область ИмяОбласти
// <- keyword.other.section.bsl
// ^ keyword.other.section.bsl
//       ^ entity.name.section.bsl

Перем А Экспорт;
// <- storage.type.var.bsl
//    ^ variable.bsl
//      ^ storage.modifier.bsl

Перем А, Б;
//     ^ keyword.operator.bsl
//       ^ variable.bsl

Перем А Экспорт, Б;
//    ^ variable.bsl
//       ^ storage.modifier.bsl
//             ^ keyword.operator.bsl
//               ^ variable.bsl

Перем А, Б Экспорт;
//    ^ variable.bsl
//     ^ keyword.operator.bsl
//       ^ variable.bsl
//         ^ storage.modifier.bsl

Перем А Экспорт, Б Экспорт;
//    ^ variable.bsl
//       ^ storage.modifier.bsl
//             ^ keyword.operator.bsl
//               ^ variable.bsl
//                 ^ storage.modifier.bsl

#Если Сервер Тогда
// <- keyword.other.preprocessor.bsl
//    ^^^^^^ keyword.other.preprocessor.bsl

// Комментарий процедуры
// <- comment.line.double-slash.bsl
&НаСервере
// <- storage.modifier.directive.bsl
// ^ storage.modifier.directive.bsl
Процедура ИмяПроцедуры(
// <- storage.type.bsl
//        ^ entity.name.function.bsl
//                    ^ punctuation.bracket.begin.bsl
    Знач ПараметрСКонстантой,
//  ^ storage.modifier.bsl
//       ^ variable.parameter.bsl
//                          ^ keyword.operator.bsl
    ОбычныйПараметр,
//  ^ variable.parameter.bsl
    ПараметрСНекорректнымЗначением = Нелегальщина,
//                                  ^ not:invalid.illegal.bsl
//                                   ^ invalid.illegal.bsl
    ПараметрСНекорректнымЗначением =НелегальщинаБезПробела,
//                                  ^ invalid.illegal.bsl
//                                                        ^ keyword.operator.bsl
    ПараметрСДефолтнымЧисловымЗначением = 0) Экспорт
//                                      ^ keyword.operator.assignment.bsl
//                                        ^ constant.numeric.bsl
//                                         ^ punctuation.bracket.end.bsl
//                                           ^ storage.modifier.bsl
    Б = "текст с экраннированной "" кавычкой" + "и конкатенаций""";
//       ^ string.quoted.double.bsl
//                               ^^ constant.character.escape.bsl
//                                 ^ not:constant.character.escape.bsl
//                                              ^ string.quoted.double.bsl
//                                                             ^^ constant.character.escape.bsl
//                                                               ^ not:constant.character.escape.bsl
//                                                                ^ keyword.operator.bsl

    В = "многострочная
//      ^ string.quoted.double.bsl
    |строка
//  ^ string.quoted.double.bsl
    //|это комментарий
//      ^ comment.line.double-slash.bsl
    |// а это нет
//      ^ string.quoted.double.bsl
    |";
//   ^ string.quoted.double.bsl
//    ^ keyword.operator.bsl

    Г = "";
//      ^^ string.quoted.double.bsl

    ТекстЗапроса =
    "ВЫБРАТЬ
//  ^^ string.quoted.double.bsl
//   ^ keyword.control.sdbl
    |   Таблица.Поле КАК Поле,
    |   МАКСИМУМ(Таблица.Поле2) КАК Поле2
    |ИЗ
    |   Таблица КАК Таблица
    |ГДЕ
    |   Таблица.Поле = 0
    |   И Таблица.Поле <> ""Строка""
    |   И ВЫРАЗИТЬ(Таблица.Поле КАК СТРОКА) <> """"
    |   И Таблица.Поле <> ""Строка с экраннированной """" кавычкой""
    //|Закомментированная строка
//  ^ string.quoted.double.bsl comment.line.double-slash.bsl
    |// Закомметированная строка внутри запроса с кавычками ""ТЕКСТ""
//  ^ string.quoted.double.bsl
//  ^ not:comment.line.double-slash.sdbl
//   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.double-slash.sdbl
    |СГРУППИРОВАТЬ ПО
    |   Поле
    //|//АВТОУПОРЯДОЧИВАНИЕ";
//  ^^^^^^^^^^^^^^^^^^^^^^^^^ comment.line.double-slash.bsl
    |//АВТОУПОРЯДОЧИВАНИЕ";
//  ^^^^^^^^^^^^^^^^^^^^^^ string.quoted.double.bsl
//  ^ not:comment.line.double-slash.sdbl
//   ^^^^^^^^^^^^^^^^^^^^ comment.line.double-slash.sdbl
//                       ^ not:comment.line.double-slash.sdbl
//                        ^ keyword.operator.bsl

    // Проверка на корректность обработки FirstLineMatch и #include: source.sdbl
    СтрокаСоСловомВыбрать = "Some selected text";
//                                ^^^^^^ not:keyword.control.sdbl

    Число = 0.0 * 100;
//  ^ not:support.function.bsl
//          ^^^ constant.numeric.bsl
//              ^ keyword.operator.arithmetic.bsl

    Дата = '00010101000000';
//         ^^^^^^^^^^^^^^^^ constant.other.date.bsl
    КороткаяДата = '00010101';
//                 ^^^^^^^^^^ constant.other.date.bsl
    ДатаСРазделителями = '0001-01-01T00:00:00';
//                       ^^^^^^^^^^^^^^^^^^^^^ constant.other.date.bsl
    КороткаяДатаСРазделителями = '0001/01/01';
//                               ^^^^^^^^^^^^ constant.other.date.bsl
    СтрокаСДатойВнутри = "Литерал типа Дата: '00010101'";
//                                          ^^^^^^^^^^^^ string.quoted.double.bsl
//                                           ^^^^^^^^^^ not:constant.other.date.bsl

    Если А = 0 И НЕ Число <= 0 Тогда
//  ^ keyword.control.conditional.bsl
//         ^ keyword.operator.comparison.bsl
//           ^ constant.numeric.bsl
//             ^ keyword.operator.logical.bsl
//               ^^ keyword.operator.logical.bsl
//                        ^^ keyword.operator.comparison.bsl
//                             ^ keyword.control.conditional.bsl

        ОбычныйПараметр = Истина;
//                        ^ constant.language.bsl
    Иначе
//  ^ keyword.control.conditional.bsl
        ОбычныйПараметр = Ложь
    КонецЕсли;
//  ^ keyword.control.conditional.bsl

    Пока ЗначениеЗаполнено(Б) Цикл
//  ^ keyword.control.repeat.bsl
//       ^ support.function.bsl
//                        ^ punctuation.bracket.begin.bsl
//                         ^ not:punctuation.bracket.begin.bsl
//                          ^ punctuation.bracket.end.bsl
        Прервать;
//      ^ keyword.control.bsl
    КонецЦикла;
//  ^ keyword.control.repeat.bsl

    НевстроеннаяПроцедура();
//  ^ not:support.function.bsl

    НовыйОбъект = Новый ТаблицаЗначений;
//                ^^^^^ support.function.bsl
//                     ^ not:support.function.bsl
    НовыйОбъектСкобка = Новый("ТаблицаЗначений");
//                      ^^^^^ support.function.bsl
//                           ^ not:support.function.bsl

    ПрефиксЗначениеЗаполненоПостфикс = "";
//  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not:support.function.bsl

    // Проверка на корректность обработки начала и конца слова
    Объект.Сообщить().Если().Цикл().Новый;
//         ^^^^^^^^                 ^^^^^ not:support.function.bsl
//                    ^^^^ not:keyword.control.conditional.bsl
//                           ^^^^ not:keyword.control.repeat.bsl

    // Проверка подсветки глобальных свойств с точкой
    Справочники.ИмяСправочника.СоздатьЭлемент();
//  ^ support.class.bsl
    А = ХранилищеПользовательскихНастроекДинамическихСписков.Сохранить();
//      ^ support.variable.bsl

    А = 0;
//  ^ variable.assignment.bsl
//    ^ keyword.operator.assignment.bsl

    Б = А = 0;
//  ^ variable.assignment.bsl
//    ^ keyword.operator.assignment.bsl
//        ^ keyword.operator.comparison.bsl

    Если А = Б Тогда
//       ^ not:variable.assignment.bsl
//         ^ keyword.operator.comparison.bsl
    ИначеЕсли ЗначениеЗаполнено(А) = ЗначениеЗаполнено(Б) Тогда
//            ^ not:variable.assignment.bsl
//                                 ^ keyword.operator.comparison.bsl
    КонецЕсли;

    // TODO:
//     ^^^^ storage.type.class.todo

    Если А И
//       ^ not:variable.assignment.bsl
        Б = В Тогда
//      ^ not:variable.assignment.bsl       
        Б = 0;
//      ^ variable.assignment.bsl
    КонецЕсли;

КонецПроцедуры
// <- storage.type.bsl

Процедура НевстроеннаяПроцедура()
    Возврат;
//  ^ keyword.control.bsl
КонецПроцедуры

&Перед("ПередЗаписью")
// <- storage.type.annotation.bsl
// ^^^ storage.type.annotation.bsl
//     ^^^^^^^^^^^^^^ string.quoted.double.bsl
Процедура Расш1_ПередЗаписью()

КонецПроцедуры

#КонецЕсли
// <- keyword.other.preprocessor.bsl
// ^ keyword.other.preprocessor.bsl

#КонецОбласти
// <- keyword.other.section.bsl
// ^ keyword.other.section.bsl

~Метка:
Перейти ~Метка;

Рез = Ждать Об; // Об имеет тип Обещание

Асинх Функция КопироватьФайлыАсинх(ИсхКаталог, ЦелКаталог)

Асинх Функция КопироватьФайлыАсинх(Знач ИсхКаталог, Знач ЦелКаталог)

Асинх Процедура П()

    Попытка
        Ждать НеNull(Null); 
    Исключение
        // Исключение из НеNull() будет перехвачено здесь
        Сообщить("Передали Null"); 
    КонецПопытки

КонецПроцедуры

Файлы = Ждать НайтиФайлыАсинх(ИсхКаталог, "*", Ложь); //2

СтрШаблон("Товар: %1, %2 не найден!", Номенклатура, Характеристика);
СтрШаблон("Скидка составила %1%%", 10);

SDBL

// SYNTAX TEST "source.sdbl"
ВЫБРАТЬ
// <- keyword.control.sdbl
// Комментарий запроса
// <- comment.line.double-slash.sdbl
    "Многострочная
//  ^ string.quoted.double.sdbl
    // это Комментарий
//  ^ comment.line.double-slash.sdbl
    с экранированной "" кавычкой
//                   ^^ constant.character.escape.sdbl
    строка" КАК Поле,
//  ^^^^^^^ string.quoted.double.sdbl
//  ^ string.quoted.double.sdbl
//          ^^^ keyword.control.sdbl
//              ^ not:keyword.control.sdbl
//                  ^ keyword.operator.sdbl
    Неопределено КАК Поле2,
//  ^ constant.language.sdbl
    0.0 КАК ДробноеЧисло,
//  ^^^ constant.numeric.sdbl
    0 КАК ЦелоеЧисло,
//  ^ constant.numeric.sdbl
    ВЫБОР КОГДА НЕ 0 = 0 * 1 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК Условие,
//  ^^^^^ keyword.control.conditional.sdbl
//        ^^^^^ keyword.control.conditional.sdbl
//              ^^ keyword.operator.logical.sdbl
//                   ^ keyword.operator.comparison.sdbl
//                       ^ keyword.operator.arithmetic.sdbl
//                           ^^^^^ keyword.control.conditional.sdbl
//                                        ^^^^^ keyword.control.conditional.sdbl
//                                                   ^^^^^ keyword.control.conditional.sdbl
    ГОД(ДАТАВРЕМЯ(1, 1, 1)) КАК Функция,
//  ^^^ support.function.sdbl
//     ^ not:support.function.sdbl
//      ^ support.function.sdbl
    ВЫРАЗИТЬ(0 КАК Число) КАК Выражение,
//  ^ keyword.control.sdbl
//                 ^^^^^ support.type.sdbl
    ВЫБОР КОГДА Неопределено ССЫЛКА Справочник.Справочник1 ТОГДА ИСТИНА КОНЕЦ КАК Ссылка,
//                           ^^^^^^ keyword.operator.logical.sdbl
//                                                                                ^^^^^^ not:keyword.operator.logical.sdbl
    ВЫБОР КОГДА Справочник.Справочник2 Есть NULL ТОГДА 0 ИНАЧЕ Справочник.Количество КОНЕЦ КАК Количество,
//                                     ^^^^^^^^^ keyword.operator.logical.sdbl
    ВЫБОР КОГДА Справочник.Справочник2 Есть НЕ NULL ТОГДА Справочник.Количество ИНАЧЕ 0 КОНЕЦ КАК Количество1,
//                                     ^^^^^^^^^^^^ keyword.operator.logical.sdbl
    ВЫБОР КОГДА Справочник.Справочник2 Is NULL ТОГДА 0 ИНАЧЕ Справочник.Количество КОНЕЦ КАК kolvo,
//                                     ^^^^^^^ keyword.operator.logical.sdbl
    ВЫБОР КОГДА Справочник.Справочник2 Is NOT NULL ТОГДА Справочник.Количество ИНАЧЕ 0 КОНЕЦ КАК kolvo1,
//                                     ^^^^^^^^^^^ keyword.operator.logical.sdbl   

    &Параметр КАК Параметр
//  ^^^^^^^^^ variable.parameter.sdbl