@rsconcept/rstool 0.8.2 → 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.
Files changed (2) hide show
  1. package/docs/DIAGNOSTICS.md +126 -69
  2. package/package.json +1 -1
@@ -1,74 +1,131 @@
1
1
  # Диагностика
2
2
 
3
- Читай, когда `analyzeExpression` или `addOrUpdateConstituenta` вернули `diagnostics`.
4
-
5
- ## `DiagnosticRecord`
6
-
7
- - `code` — числовой `RSErrorCode`.
8
- - `params` аргументы сообщения.
9
- - `from`, `to` — диапазон в `definitionFormal`.
10
- - `constituentId` — есть в диагностике сессии из `listDiagnostics`.
11
-
12
- Источник истины: `@rsconcept/domain/src/rslang/error.ts`. Для короткого вида UI/логов используй `getRSErrorPrefix(code)`.
13
-
14
- ## Классы кодов
15
-
16
- - `0x8400` — parser: синтаксис и скобки.
17
- - `0x8800` — semantic: типизации, области видимости, структура.
18
- - `0x8100`runtime/evaluation: вычисление модели.
19
- - `0x2800` warning: обычно не блокирует выражение.
20
- - `0x88Cx` — правила схемы и `cstType`.
21
-
22
- ## Частые parser-коды
23
-
24
- - `0x8400 unknownSyntax` — неопределенная синтаксическая ошибка.
25
- - `0x8409 bracketMismatch` неверная закрывающая скобка (`params`: ожидаемая, фактическая).
26
- - `0x840A doubleParenthesis` лишняя пара скобок.
27
- - `0x840B missingOpenBracket` непарная закрывающая скобка (`params`: сама скобка).
28
- - `0x840C missingCloseBracket` непарная открывающая скобка (`params`: сама скобка).
29
- - `0x8415 expectedLocal` нужна локальная переменная.
30
- - `0x8416 expectedType` тип выражения не соответствует ожидаемому.
31
-
32
- ## Локальные переменные
33
-
34
- - `0x8801 localUndeclared` — свяжи переменную квантором или параметром.
35
- - `0x8802 localShadowing` — переименуй внутреннюю переменную.
36
- - `0x8815 localOutOfScope` — перенеси использование внутрь области видимости.
37
- - `0x2801 localDoubleDeclare` warning; объявление задублировано.
38
- - `0x2802 localNotUsed` — warning; переменная не используется.
39
-
40
- ## Типизации и структура
41
-
42
- - `0x8803 typesNotEqual` / `0x8825 typesNotCompatible` операнды несовместимы для оператора (`params`: тип A, тип B, оператор).
43
- - `0x8804 globalNotTyped` — сначала добавь и проанализируй поставщика.
44
- - `0x8805 invalidDecart`, `0x8806 invalidBoolean`, `0x8810 invalidReduce` неверная ступень для операции.
45
- - `0x8807 invalidTypeOperation` аргумент оператора (`∪`, `∈`, `D{}`, `:∈` и т.д.) должен быть множеством (`params`: оператор, тип).
46
- - `0x8808 invalidCard` `card(...)` не над множеством.
47
- - `0x8809 invalidDebool` — нет гарантии синглетона.
48
- - `0x880B globalFuncWithoutArgs` — терм-функция или предикат-функция вызвана без указания аргументов.
49
- - `0x8811 invalidProjectionTuple`, `0x8812 invalidProjectionSet` — неверная проекция.
50
- - `0x8813 invalidEnumeration` элементы перечисления разных ступеней.
51
- - `0x8816 invalidElementPredicate` — `ξ ∈ S` с несовместимыми ступенями (`params`: тип элемента, оператор, тип множества).
52
- - `0x8818 invalidArgsArity`, `0x8819 invalidArgumentType` неверный вызов функции.
53
- - `0x8821 radicalUsage` радикал вне домена параметра.
54
- - `0x8822 invalidFilterArgumentType`, `0x8823 invalidFilterArity`, `0x882B invalidFilterParameterType` неверный `Fi` (`params` для параметра: тип параметра, ожидаемый тип компонента аргумента, оператор).
55
- - `0x8824 arithmeticNotSupported`, `0x8826 orderingNotSupported` — тип не поддерживает оператор (`params`: тип, оператор); для арифметики/порядка нужна ступень `Z` или `C#`.
56
- - `0x8827 expectedLogic` — нужна логическая формула.
57
- - `0x8828 expectedSetexpr` нужно теоретико-множественное выражение, а не логика.
58
- - `0x882A invalidQuantifierDomain` — в кванторной декларации `∀`/`∃` область должна быть множеством (`params`: оператор, тип).
59
-
60
- ## Схема и вычисление
61
-
62
- - `0x8861 cstEmptyDerived` у выводимой конституенты пустая формула.
63
- - `0x8862 definitionNotAllowed` у `basic`/`constant` непустая формула.
64
- - `0x8840 globalNoValue` / `0x8103 calcGlobalMissing` — нет значения в модели.
65
- - `0x8841 invalidPropertyUsage` `Property` использован как вычислимое значение.
66
- - `0x8101 setOverflow`, `0x8102 booleanBaseLimit`, `0x8104 iterationsLimit` — выражение слишком дорого вычислять.
67
- - `0x8100 calcUnknownError` — непредвиденная ошибка вычисления.
68
- - `0x8105 calcInvalidDebool` `debool` получил не синглетон.
69
- - `0x8106 iterateInfinity`, `0x8107 calculationNotSupported` конструкция не исполнима в конечной модели.
70
- - `0x8108 calcInvalidData` несовместимые значения в runtime (`params`: значение A, значение B, оператор).
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. |
71
128
 
72
129
  ## Цикл исправления
73
130
 
74
- Пошаговый цикл — в `../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.2",
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",