Skip to content

Commit

Permalink
Merge branch 'develop'
Browse files Browse the repository at this point in the history
  • Loading branch information
nixel2007 committed Apr 13, 2019
2 parents 3ceedd5 + 2b8c6f0 commit 258407b
Show file tree
Hide file tree
Showing 133 changed files with 2,659 additions and 332 deletions.
31 changes: 17 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@

Реализация протокола [language server protocol](https://microsoft.github.io/language-server-protocol/) для языка 1C (BSL) - языка 1С:Предприятие 8 и [OneScript](http://oscript.io).

Сайт проекта - https://1c-syntax.github.io/bsl-language-server

[English version](docs/en/index.md)

## Возможности

* Форматирование файла
Expand All @@ -20,29 +24,28 @@
Запуск jar-файлов осуществляется через `java -jar path/to/file.jar`.

```sh
java -jar bsl-language-server.jar" --help
usage: BSL language server [-a] [-d <arg>] [-h] [-r <arg>] [-s <arg>]
-a,--analyze Run analysis and get diagnostic info
-d,--diagnosticLanguage <arg> Language of diagnostic messages. Possible
values: en, ru. Default is en.
-h,--help Show help.
-r,--reporter <arg> Reporter key
-s,--srcDir <arg> Source directory
java -jar bsl-language-server.jar --help

usage: BSL language server [-a] [-c <arg>] [-h] [-o <arg>] [-r <arg>] [-s <arg>]
-a,--analyze Run analysis and get diagnostic info
-c,--configuration <arg> Path to language server configuration file
-h,--help Show help.
-o,--outputDir <arg> Output report directory
-r,--reporter <arg> Reporter key
-s,--srcDir <arg> Source directory
```

При запуске BSL Language Server в обычном режиме будет запущен сам Language Server, взаимодействующий по протоколу [LSP]([language server protocol](https://microsoft.github.io/language-server-protocol/)). Для взаимодействия используются stdin и stdout.
При запуске BSL Language Server в обычном режиме будет запущен сам Language Server, взаимодействующий по протоколу [LSP](https://microsoft.github.io/language-server-protocol/). Для взаимодействия используются stdin и stdout.

По умолчанию тексты диагностик выдаются на английском языке. Для переключения языка сообщений от движка диагностик используется параметр `--diagnosticLanguage` (сокращенно `-d`), за которым следует код языка:
По умолчанию тексты диагностик выдаются на русском языке. Для переключения языка сообщений от движка диагностик необходимо настроить параметр `diagnosticLanguage` в конфигурационном файле или вызвав событие `workspace/didChangeConfiguration`:

```sh
java -jar bsl-language-server.jar --diagnosticLanguage ru
```
## Запуск в режиме анализатора

Для запуска в режиме анализа используется параметр `--analyze` (сокращенно `-a`). Для указания каталога расположения анализируемых исходников используется параметр `--srcDir` (сокращенно `-s`), за которым следует путь (относительный или абсолютный) к каталогу исходников.

Для формирования отчета об анализе требуется указать один или "репортеров". Для указания репортера используется параметр `--reporter` (сокращенно `-r`), за которым следует ключ репортера. Допустимо указывать несколько репортеров.

Список и описания репортеров доступны [на сайте проекта](https://1c-syntax.github.io/bsl-language-server/).
Список и описания репортеров, диагностик, конфигурационного файла доступны [на сайте проекта](https://1c-syntax.github.io/bsl-language-server/).

Пример строки запуска анализа:

Expand Down
17 changes: 15 additions & 2 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

import org.apache.tools.ant.filters.EscapeUnicode
import java.net.URI
import java.util.*
Expand Down Expand Up @@ -31,6 +30,8 @@ dependencies {
// https://mvnrepository.com/artifact/commons-io/commons-io
compile("commons-io", "commons-io", "2.6")
compile("org.apache.commons", "commons-lang3", "3.8.1")
// https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils
compile("commons-beanutils", "commons-beanutils", "1.9.3")

compile("com.fasterxml.jackson.core", "jackson-databind", "2.9.8")
compile("com.fasterxml.jackson.datatype", "jackson-datatype-jsr310", "2.9.8")
Expand All @@ -44,7 +45,11 @@ dependencies {
compile("org.slf4j", "slf4j-api", "1.8.0-beta4")
compile("org.slf4j", "slf4j-simple", "1.8.0-beta4")

compile("com.github.1c-syntax", "bsl-parser", "0.7.1")
compile("org.reflections", "reflections", "0.9.11")

compile("com.github.1c-syntax", "bsl-parser", "6419ab078b")

compileOnly("org.projectlombok", "lombok", lombok.version)

testImplementation("org.junit.jupiter", "junit-jupiter-api", "5.4.0")
testRuntime("org.junit.jupiter", "junit-jupiter-engine", "5.4.0")
Expand All @@ -54,6 +59,11 @@ dependencies {
testImplementation("com.ginsberg", "junit5-system-exit", "1.0.0")
}

java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
options.compilerArgs.add("-Xlint:unchecked")
Expand Down Expand Up @@ -94,6 +104,9 @@ tasks.jacocoTestReport {

tasks.processResources {
filteringCharset = "UTF-8"
from("docs/diagnostics") {
into("org/github/_1c_syntax/bsl/languageserver/diagnostics")
}
}

// native2ascii gradle replacement
Expand Down
17 changes: 17 additions & 0 deletions docs/diagnostics/IfElseDuplicatedCodeBlock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Повторяющиеся блоки кода в синтаксической конструкции Если...Тогда...ИначеЕсли...

Синтаксическая конструкция **Если...Тогда...ИначеЕсли...** не должна иметь одинаковых блоков кода.

Например:

```bsl
Если п = 0 Тогда
т = 0;
ИначеЕсли п = 1 Тогда
т = 1;
ИначеЕсли п = 2 Тогда
т = 1;
Иначе
т = -1;
КонецЕсли;
```
6 changes: 5 additions & 1 deletion docs/diagnostics/LineLength.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,8 @@

При длине строки более 120 символов следует использовать переносы. Строки длиннее 120 символов делать не рекомендуется, за исключением тех случаев, когда перенос невозможен (например, в коде определена длинная строковая константа, которая выводится без переносов в окно сообщений с помощью объекта СообщениеПользователю).

Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:-2145783191:hdoc)
Источник: [Стандарт: Тексты модулей](https://its.1c.ru/db/v8std#content:-2145783191:hdoc)

## Параметры

* `maxLineLength` - `Число` - максимальная длина строки в символах. По умолчанию - 120.
6 changes: 5 additions & 1 deletion docs/diagnostics/MethodSize.md
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# Ограничение на размер метода
# Ограничение на размер метода

## Параметры

* `maxMethodSize` - `Число` - максимальная длина метода в строках. По умолчанию - 200.
6 changes: 5 additions & 1 deletion docs/diagnostics/NumberOfOptionalParams.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Не рекомендуется объявлять в функциях много параметров (нужно ориентироваться на количество не более семи параметров),
при этом не должно быть много параметров со значениями по умолчанию (нужно ориентироваться на количество не более трех
таких параметров. В противном случае, читаемость вызывающего кода сильно снижается.
таких параметров). В противном случае, читаемость вызывающего кода сильно снижается.
Например, можно легко ошибиться в количестве запятых при передаче необязательных параметров.

При необходимости передавать в функцию большое число параметров рекомендуется группировать однотипные параметры в один или несколько составных параметров типа Структура.
Expand All @@ -27,3 +27,7 @@ Cгруппировать параметры, описывающие значе
```

Источник: [Стандарт: Параметры процедур и функций](https://its.1c.ru/db/v8std#content:2149184289:hdoc)

## Параметры

* `maxOptionalParamsCount` - `Число` - Допустимое количество необязательных параметров метода. По умолчанию - 3.
4 changes: 4 additions & 0 deletions docs/diagnostics/NumberOfParams.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,7 @@ Cгруппировать параметры, описывающие значе
```

Источник: [Стандарт: Параметры процедур и функций](https://its.1c.ru/db/v8std#content:2149184289:hdoc)

## Параметры

* `maxParamsCount` - `Число` - Допустимое количество параметров метода. По умолчанию - 7.
3 changes: 3 additions & 0 deletions docs/diagnostics/ProcedureReturnsValue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Процедура не может возвращать значение

Диагностика отлавливает процедуры, где есть "Возврат" со значением.
81 changes: 81 additions & 0 deletions docs/en/diagnostics/CanonicalSpellingKeywords.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Canonical Keyword Writing

A built-in language constructs, keywords must be writte canonically.

**Keywords**

RU | EN
--- | ---
ВызватьИсключение | Raise
Выполнить | Execute
ДобавитьОбработчик | AddHandler
Для | For
Если | If
Знач | Val
И | AND, and
Из | In
ИЛИ, Или | OR, Or
Иначе | Else
ИначеЕсли | ElsIf
Исключение | Except
Истина | True
Каждого, каждого | Each, each
КонецЕсли | EndIf
КонецПопытки | EndTry
КонецПроцедуры | EndProcedure
КонецФункции | EndFunction
КонецЦикла | EndDo
НЕ, Не | NOT, Not
Неопределено | Undefined
Перейти | Goto
Перем | Var
По | For
Пока | WHile
Попытка | Try
Процедура | Procedure
Прервать | Break
Продолжить | Continue
Тогда | Then
Цикл | Do
УдалитьОбработчик | RemoveHandler
Функция | Function
Экспорт | Export

**Preprocessor Instructions**

RU | EN
--- | ---
ВебКлиент | WebClient
ВнешнееСоединение | ExternalConnection
Если | If
И | AND, And
ИЛИ, Или | OR, Or
Иначе | Else
ИначеЕсли | ИначеЕсли
КонецЕсли | EndIf
КонецОбласти | EndRegion
Клиент | Client
МобильноеПриложениеКлиент | MobileAppClient
МобильноеПриложениеСервер | MobileAppServer
МобильныйКлиент | MobileClient
НаКлиенте | AtClient
НаСервере | AtServer
НЕ, Не | NOT, Not
Область | Region
Сервер | Server
Тогда | Then
ТолстыйКлиентОбычноеПриложение | ThickClientOrdinaryApplication
ТолстыйКлиентУправляемоеПриложение | ThickClientManagedApplication
ТонкийКлиент | ThinClient

**Compilation directives**

RU | EN
--- | ---
НаКлиенте | AtClient
НаСервере | AtServer
НаСервереБезКонтекста | AtServerNoContext
НаКлиентеНаСервереБезКонтекста | AtClientAtServerNoContext
НаКлиентеНаСервере | AtClientAtServer

Источник: [Standart: Modules texts(RU)](https://its.1c.ru/db/v8std/content/2149184090/hdoc)
1 change: 1 addition & 0 deletions docs/en/diagnostics/EmptyCodeBlock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Empty code block
1 change: 1 addition & 0 deletions docs/en/diagnostics/EmptyStatement.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Empty statement
1 change: 1 addition & 0 deletions docs/en/diagnostics/FunctionShouldHaveReturn.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# The function should have return
17 changes: 17 additions & 0 deletions docs/en/diagnostics/IfElseDuplicatedCodeBlock.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Duplicated code blocks in If...Then...ElseIf... statements

**If...Then...ElseIf...** statement should not have duplicated code blocks.

Example:

```bsl
If p = 0 Then
t = 0;
ElseIf p = 1 Then
t = 1;
ElseIf p = 2 Then
t = 1;
Else
t = -1;
EndIf;
```
17 changes: 17 additions & 0 deletions docs/en/diagnostics/IfElseDuplicatedCondition.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Duplicated conditions in If...Then...ElseIf... statements

**If...Then...ElseIf...** statement should not have duplicated conditions.

Example:

```bsl
If p = 0 Then
t = 0;
ElseIf p = 1 Then
t = 1;
ElseIf p = 1 Then
t = 2;
Else
t = -1;
EndIf;
```
17 changes: 17 additions & 0 deletions docs/en/diagnostics/IfElseIfEndsWithElse.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Else...The...ElseIf... statement should end with Else branch.

**If...Then...ElseIf...** statement should end with **Else** branch.

Example:

```bsl
If x % 15 = 0 Then
Result = "FizzBuzz";
ElseIf x % 3 = 0 Then
Result = "Fizz";
ElseIf x % 5 = 0 Then
Result = "Buzz";
Else
Result = x;
EndIf;
```
9 changes: 9 additions & 0 deletions docs/en/diagnostics/LineLength.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Line Length limit

If the line length is grater than 120 characters you should you line break. It is not recommended to have lines longer than 120 characters, except when line break is impossible (example, in code we have a string constant which is displayed without line breaks in message window using object MessageToUser).

Source: [Standart: Modules texts(RU)](https://its.1c.ru/db/v8std#content:-2145783191:hdoc)

## Parameters

- `maxLineLength` - `Integer` - max line length in characters. By default set to 120.
8 changes: 8 additions & 0 deletions docs/en/diagnostics/OneStatementPerLine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# One statement per line

Code should follow principles "one statement per line". Several statements are acceptable in case of same-type assignment operators.
For example:

НачальныйИндекс = 0; Индекс = 0; Результат = 0;

Reference: [Standard: Modules texts(RU)](https://its.1c.ru/db/v8std#content:-2145783191:hdoc)
11 changes: 11 additions & 0 deletions docs/en/diagnostics/OrderOfParams.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Order of Parameters in method

1. Optional parameters (parameters with default values) should follow mandatory parameters (the ones without default values).

Example:

```
Функция КурсВалютыНаДату(Валюта, Дата = Неопределено) Экспорт
```

Reference: [Standard: Parameters of procedures and functions (RU)](https://its.1c.ru/db/v8std#content:2149184289:hdoc)
3 changes: 3 additions & 0 deletions docs/en/diagnostics/ProcedureReturnsValue.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Procedure should not return Value

The diagnostics finds procedures with returning Values.
3 changes: 3 additions & 0 deletions docs/en/diagnostics/SelfAssign.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Variable is assigned to itself.

It is meaningless to assign a variable to itself and usually points to an error.
1 change: 1 addition & 0 deletions docs/en/diagnostics/SemicolonPresence.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Statement should end with semicolon symbol ";"
1 change: 1 addition & 0 deletions docs/en/diagnostics/UnknownPreprocessorSymbol.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# Unknown preprocessor symbol
34 changes: 34 additions & 0 deletions docs/en/diagnostics/UsingCancelParameter.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Using parameter «Cancel»

1. In event handlers of object's modules, record sets, forms and etc. using parameter "Cancel" (ПриЗаписи, ОбработкаПроверкиЗаполнения, ТоварыПередНачаломДобавления and etc.) it should not be assigned value "false".
This is due to the fact, that in code of event handlers the parameter "Cancel" can be set in several consecutive checks (or in several subscriptions on the same event).In this case, by the time the next check is performed, the parameter "Cancel" can already be set to True, and you can set it to False by mistake.In addition when modifying configuration the number of such checks can increase.

#### Incorrect:

```
Процедура ОбработкаПроверкиЗаполнения(Cancel, ПроверяемыеРеквизиты)
...
Cancel = ЕстьОшибкиЗаполнения();
...
КонецПроцедуры
```

#### Correct:

```
Процедура ОбработкаПроверкиЗаполнения(Cancel, ПроверяемыеРеквизиты)
...
Если ЕстьОшибкиЗаполнения() Тогда
Cancel = True;
КонецЕсли;
...
КонецПроцедуры
```

or

```
Cancel = Cancel Или ЕстьОшибкиЗаполнения();
```

Reference: [Standart: Modules texts(RU)](https://its.1c.ru/db/v8std#content:2149184335:hdoc)
6 changes: 6 additions & 0 deletions docs/en/diagnostics/YoLetterUsage.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Using Russian character "yo" ("ё") in code

In code it is prohibited to use character "yo" ("ё").
Exception is interface texts, displayed to user in messages, forms and help, where it is applicable.

Reference: [Standard: Modules texts(RU)](https://its.1c.ru/db/v8std#content:2149184105:hdoc)
Loading

0 comments on commit 258407b

Please sign in to comment.