# sugar-validator

Консольный инструмент для валидации файлов в формате sugar.xml.

## Использование

### Установка и запуск

```
npm install @kontur.candy/sugar-validator
```
или
```
yarn add @kontur.candy/sugar-validator
```

а затем

```
npx sugar-validator forms/110302/sugar/index.sugar.xml
```
или 
```
yarn sugar-validator forms/110302/sugar/index.sugar.xml
```

Также возможна глобальная установка

### Аргументы командной строки

```
sugar-validator [options...] fileGlobs
```

`fileGlobs` - один или несколько шаблонов или имём файлов, разделённых пробелом. Шаблоны поддерживают синтаксис [glob](https://www.npmjs.com/package/glob#glob-primer).   

Допустимые опции:
* `--reporter, -r` - Формат вывода сообщений валидатора. Поддерживаеются форматы `text` и `teamcity`.
* `--help, -h` - Выводит справку. 

## Правила валидаций

### `valid-element`
Проверяет, что элемент является допустимым элементом языка.

Пример вывода:
```
valid-element (2, 6)
  Неизвестное имя элемента: 'inputaa'
```
 
### `valid-attribute`
Проверяет, что используемый атрибут является допустимым для данного тэга.

Пример вывода:
```
valid-attribute (41, 116)
  Элемент type не может имееть атрибута 'requireDescription'
```

### `valid-attribute-type`
Проверяет соответствие значения атрибута его типу. Поддерживаемые типы: (`Number`, `Color`, `Boolean`) 

Пример вывода:

```
valid-attribute-type (89, 52)
  Значение '#9ZZB9B' атрибута color не может быть преобразовано к допустимым типам (Color).
```

### `valid-path`
Для атрибутов типа `Path` проверяет наличие в схеме данных. Валидатор пытается найти схему по пути
`..\schemas\[gfv].rng.xml` относительно файла с сахаром.

Пример вывода:

```
valid-path (457, 37)
  Элемент или атрибут '/Файл/Документ/ЕНВД/СумНалПУ/СумСВУм346.32.2_disabled' не найден в схеме данных
```

### `required-attribute`
Проверяет наличие обязательных атрибутов у элементов сахара.

Пример вывода:

```
required-attribute (243, 15)
  Элемент input должен содержать обязательный атрибут 'path'
```

### `valid-syntax`

Проверяет корректность синтаксиса в файле с сахаром.

Пример вывода:
```
valid-syntax (47, 8)
  Expected [a-zA-Z0-9\-_] but "Н" found.
``` 

### `valid-type`

Проверяет, что в атрибутах с типом, валидный UserDefined-тип или один из встроенных типов.

Пример вывода:
```
valid-type (47, 8)
  Type 'kpppEnvd' не существует.
``` 

### `no-unused-types`

Проверяет, что UserDefined-тип используется хотябы один раз.

Пример вывода:
```
valid-type (47, 8)
  Тип 'C(8)' не используется
``` 

### `code-style`

Проверяет, что документ отформатирован и выводит соответствующее исправление

Пример вывода:
```
code-style (2, 5)
  Insert '··'
``` 
