@rsconcept/rstool 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/DIAGNOSTICS.md +126 -82
- package/package.json +3 -3
package/docs/DIAGNOSTICS.md
CHANGED
|
@@ -1,87 +1,131 @@
|
|
|
1
1
|
# Диагностика
|
|
2
2
|
|
|
3
|
-
Читай, когда `analyzeExpression
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- `
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- `
|
|
17
|
-
- `
|
|
18
|
-
- `
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
3
|
+
Читай, когда `analyzeExpression`, `addOrUpdateConstituenta`, `listDiagnostics` или `evaluate*`
|
|
4
|
+
вернули диагностику. Источник истины по кодам — `@rsconcept/domain/src/rslang/error.ts`.
|
|
5
|
+
|
|
6
|
+
## Где лежит диагностика
|
|
7
|
+
|
|
8
|
+
У rstool два представления одной и той же ошибки.
|
|
9
|
+
|
|
10
|
+
- **Плоское** `RSToolErrorDescription` — в `AnalysisResult.diagnostics` (из `analyzeExpression`
|
|
11
|
+
и `addOrUpdateConstituenta(...).analysis`) и в `EvaluationResult.diagnostics`:
|
|
12
|
+
- `code` — числовой `RSErrorCode`.
|
|
13
|
+
- `from`, `to` — полуинтервал `[from, to)` в `definitionFormal` (или в выражении вычисления).
|
|
14
|
+
- `params?` — позиционный массив строк-аргументов сообщения (см. таблицы ниже).
|
|
15
|
+
- **Обёрнутое** `DiagnosticRecord` — только из `listDiagnostics`:
|
|
16
|
+
- `sessionId`, `expression` — исходное выражение.
|
|
17
|
+
- `error` — то же `RSToolErrorDescription` (`code`/`from`/`to`/`params`) **вложено**, читай `record.error.code`.
|
|
18
|
+
- `constituentId?` — id конституенты. У диагностик от `addOrUpdateConstituenta` он есть;
|
|
19
|
+
у черновиков `analyzeExpression` он `undefined`. Фильтруй `listDiagnostics(sessionId, { constituentId })`.
|
|
20
|
+
|
|
21
|
+
## Класс и префикс кода
|
|
22
|
+
|
|
23
|
+
Класс выводится по битовым маскам кода (порядок проверки важен — см. `inferErrorClass`):
|
|
24
|
+
|
|
25
|
+
| Маска | Класс | Префикс `getRSErrorPrefix` |
|
|
26
|
+
| :------- | :--------- | :------------------------- |
|
|
27
|
+
| `0x0100` | EVALUATION | `E` + hex |
|
|
28
|
+
| `0x0200` | LEXER | `L` + hex |
|
|
29
|
+
| `0x0400` | PARSER | `P` + hex |
|
|
30
|
+
| `0x0800` | SEMANTIC | `S` + hex |
|
|
31
|
+
| иначе | UNKNOWN | `U` + hex |
|
|
32
|
+
|
|
33
|
+
- Диапазоны: `0x84xx` — parser (синтаксис, скобки), `0x88xx` — semantic (типизация, область
|
|
34
|
+
видимости, структура, схема, отсутствие значения), `0x81xx` — evaluation (вычисление КМ),
|
|
35
|
+
`0x28xx` — предупреждения (класс UNKNOWN, префикс `U`).
|
|
36
|
+
|
|
37
|
+
## Parser (`0x84xx`, префикс `P`)
|
|
38
|
+
|
|
39
|
+
| Код | Имя | `params` | Исправление |
|
|
40
|
+
| :------- | :-------------------- | :------------------- | :------------------------------------------------------------------------------- |
|
|
41
|
+
| `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы. |
|
|
42
|
+
| `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`. |
|
|
43
|
+
| `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`. |
|
|
44
|
+
| `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую. |
|
|
45
|
+
| `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую. |
|
|
46
|
+
| `0x8415` | `expectedLocal` | — | Ожидалось имя локальной переменной. |
|
|
47
|
+
| `0x8416` | `expectedType` | — | Тип выражения не соответствует `cstType` конституенты. |
|
|
48
|
+
| `0x8417` | `invalidFilterSyntax` | — | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`. |
|
|
49
|
+
|
|
50
|
+
## Предупреждения (`0x28xx`, префикс `U`, не блокируют)
|
|
51
|
+
|
|
52
|
+
| Код | Имя | `params` | Исправление |
|
|
53
|
+
| :------- | :------------------- | :------- | :--------------------------------------------------------------------- |
|
|
54
|
+
| `0x2801` | `localDoubleDeclare` | `[name]` | Объявление `name` задублировано — можно игнорировать или убрать дубль. |
|
|
55
|
+
| `0x2802` | `localNotUsed` | `[name]` | Переменная `name` не используется. |
|
|
56
|
+
|
|
57
|
+
## Локальные переменные и область видимости (`0x88xx`, префикс `S`)
|
|
58
|
+
|
|
59
|
+
| Код | Имя | `params` | Исправление |
|
|
60
|
+
| :------- | :---------------- | :------- | :--------------------------------------------------------- |
|
|
61
|
+
| `0x8801` | `localUndeclared` | `[name]` | Свяжи `name` квантором или объяви параметром. |
|
|
62
|
+
| `0x8802` | `localShadowing` | `[name]` | Переименуй внутреннюю переменную `name`. |
|
|
63
|
+
| `0x8815` | `localOutOfScope` | `[name]` | Перенеси использование `name` внутрь её области видимости. |
|
|
64
|
+
|
|
65
|
+
## Типизация и структура (`0x88xx`, префикс `S`)
|
|
66
|
+
|
|
67
|
+
| Код | Имя | `params` | Исправление |
|
|
68
|
+
| :------- | :------------------------------ | :------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
|
|
69
|
+
| `0x8803` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` ≠ `b`). |
|
|
70
|
+
| `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
|
|
71
|
+
| `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
|
|
72
|
+
| `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
|
|
73
|
+
| `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
|
|
74
|
+
| `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
|
|
75
|
+
| `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
|
|
76
|
+
| `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
|
|
77
|
+
| `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
|
|
78
|
+
| `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
|
|
79
|
+
| `0x8811` | `invalidProjectionTuple` | `[from, to]` | Проекция `Pr` только над кортежем. |
|
|
80
|
+
| `0x8812` | `invalidProjectionSet` | `[projection, type]` | Неверная проекция `projection` над типом `type`. |
|
|
81
|
+
| `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` ≠ `b`). |
|
|
82
|
+
| `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа ≠ размерности `×` (напр. `∀(a,b)∈X1`). |
|
|
83
|
+
| `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` — тип элемента, `c` — тип множества. |
|
|
84
|
+
| `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` (напр. `X1∪∅`). |
|
|
85
|
+
| `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` ≠ `actual`). |
|
|
86
|
+
| `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
|
|
87
|
+
| `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
|
|
88
|
+
| `0x8821` | `radicalUsage` | `[name]` | Радикал `name` допустим только внутри аргумента функции. |
|
|
89
|
+
| `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
|
|
90
|
+
| `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
|
|
91
|
+
| `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
|
|
92
|
+
| `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
|
|
93
|
+
| `0x8829` | `invalidArgumentCortegeDeclare` | — | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
|
|
94
|
+
| `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
|
|
95
|
+
|
|
96
|
+
## Фильтр `Fi` (`0x882x`, префикс `S`)
|
|
97
|
+
|
|
98
|
+
| Код | Имя | `params` | Исправление |
|
|
99
|
+
| :------- | :---------------------------- | :----------------------------------- | :------------------------------------------------------------------------------------ |
|
|
100
|
+
| `0x8822` | `invalidFilterArgumentType` | `[operator, actual, expected]` | Аргумент `Fi` имеет тип `actual`, ожидался `expected` (обычно `ℬ(…)`). |
|
|
101
|
+
| `0x8823` | `invalidFilterArity` | `[indexCount, paramCount, operator]` | Число индексов `indexCount` ≠ числу параметров `paramCount` у `operator`. |
|
|
102
|
+
| `0x882B` | `invalidFilterParameterType` | `[param, expected, operator]` | Тип параметра `param` не совпадает с компонентом аргумента `expected` для `operator`. |
|
|
103
|
+
| `0x882C` | `invalidFilterIndex` | `[operator, actual, index, arity]` | Индекс проекции `index` превышает арность кортежа `arity` аргумента `actual`. |
|
|
104
|
+
| `0x882D` | `invalidFilterBooleanEchelon` | `[operator, actual, expected]` | У параметра `Fi` недостаёт ступени ℬ: тип `actual`, `bool(actual)` дал бы `expected`. |
|
|
105
|
+
|
|
106
|
+
## Значение и схема (`0x88xx`, префикс `S`)
|
|
107
|
+
|
|
108
|
+
| Код | Имя | `params` | Исправление |
|
|
109
|
+
| :------- | :--------------------- | :------- | :----------------------------------------------------------- |
|
|
110
|
+
| `0x8840` | `globalNoValue` | `[name]` | Идентификатор `name` невычислим в модели. |
|
|
111
|
+
| `0x8841` | `invalidPropertyUsage` | — | `Property` - множество использовано как вычислимое значение. |
|
|
112
|
+
| `0x8861` | `cstEmptyDerived` | — | У выводимой конституенты пустая формула. |
|
|
113
|
+
| `0x8862` | `definitionNotAllowed` | — | У `basic`/`constant` определение не допускается. |
|
|
114
|
+
|
|
115
|
+
## Вычисление КМ (`0x81xx`, префикс `E`)
|
|
116
|
+
|
|
117
|
+
| Код | Имя | `params` | Исправление |
|
|
118
|
+
| :------- | :------------------------ | :----------------- | :--------------------------------------------------------------------- |
|
|
119
|
+
| `0x8100` | `calcUnknownError` | — | Непредвиденная ошибка вычисления. |
|
|
120
|
+
| `0x8101` | `setOverflow` | `[limit]` | Превышен предел числа элементов `limit`: упрости выражение или данные. |
|
|
121
|
+
| `0x8102` | `booleanBaseLimit` | `[limit]` | Превышен предел базы степенного множества `limit`. |
|
|
122
|
+
| `0x8103` | `calcGlobalMissing` | `[name]` | Нет значения для `name`: задай `setConstituentaValue(s)`. |
|
|
123
|
+
| `0x8104` | `iterationsLimit` | `[limit]` | Превышен предел итераций `limit`. |
|
|
124
|
+
| `0x8105` | `calcInvalidDebool` | — | `debool` получил не синглетон. |
|
|
125
|
+
| `0x8106` | `iterateInfinity` | — | Итерация по бесконечному множеству. |
|
|
126
|
+
| `0x8107` | `calculationNotSupported` | — | Объявление функции не подразумевает вычисления. |
|
|
127
|
+
| `0x8108` | `calcInvalidData` | `[a, b, operator]` | Несовместимые значения `a` и `b` для `operator` в runtime. |
|
|
84
128
|
|
|
85
129
|
## Цикл исправления
|
|
86
130
|
|
|
87
|
-
Пошаговый цикл — в `../skills/rstool-helper/GUIDE.md`, раздел «Цикл диагностик». Здесь — справочник
|
|
131
|
+
Пошаговый цикл — в `../skills/rstool-helper/GUIDE.md`, раздел «Цикл диагностик». Здесь — справочник кодов.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.3",
|
|
4
4
|
"description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract and stdio wrapper.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "IRBorisov",
|
|
@@ -70,10 +70,10 @@
|
|
|
70
70
|
"prepublishOnly": "npm run build"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@rsconcept/domain": "^1.4.
|
|
73
|
+
"@rsconcept/domain": "^1.4.5"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
|
-
"@types/node": "^
|
|
76
|
+
"@types/node": "^26.0.1",
|
|
77
77
|
"tsdown": "^0.22.3",
|
|
78
78
|
"tsx": "^4.22.4",
|
|
79
79
|
"typescript": "^6.0.3",
|