Websoft Code NavigatorSmart indexing, autocomplete, navigation, and live error checking for Websoft platform
sources ( EnglishWebsoft Code Navigator indexes your Websoft sources and turns VS Code into a query-aware editor: it
understands namespaces, catalogs (tables), and fields, and offers scoped autocomplete, go-to-definition,
and real-time diagnostics for both the Highlights
Symbol indexing & navigation
XQuery string autocomplete —
|
| Problem | Example |
|---|---|
| Unknown XQuery variable | where $elems/login when only $elem is declared |
| Unknown XQueryExpr alias | .OnEquals("c","f","x","g") when x is never declared |
| Unknown catalog (table) | for $e in websoft.hcm.missing / XQueryExpr("ns.missing", …) |
| Unknown field (column) | $elem/nofield / .Return("c","nofield") |
To keep noise low, a field is not re-flagged when its variable/alias or catalog is already unknown, and incomplete statements (while typing) are not flagged.
.NET type autocomplete (exposed objects)
Some components expose .NET objects to the script language via an entry function (e.g.
websoft.xqueryexpr.XQueryExpr(...)). The extension provides type-aware member autocomplete —
including chained builder calls, terminal result properties, and locally-assigned variables
(xq.WhereEqual(...).LeftJoin(...).Transpile().QueryText). It works by:
- Discovering
*.dotnet-index.jsonmanifests (schemakind: "dotnet-types") shipped beside components. - Reading a
/** @returns {Fully.Qualified.TypeName} */JSDoc on the entry function to link the JS entry point to its .NET return type.
When inference cannot determine the type, annotate the variable explicitly (it overrides inference):
/** @type {Websoft.XQuery.XQueryExpr} */
xqExpr = SomeFactory();
// xqExpr. ← now autocompletes XQueryExpr members
@type is also accepted inline (/** @type {T} */ x = ...) or as a trailing comment (x = ...; // @type {T}).
Manifests are reloaded automatically when they change on disk.
Persistent index & usage stats
- Workspace index persisted per workspace root:
.index/index.jsonand.index/changes/index-change-*.json. - Per-user autocomplete usage stats:
%USERPROFILE%\.websoft-nav\completion-stats.json. - Frequently used functions rank higher in completion lists.
Commands
Websoft Code Navigator: Rebuild IndexWebsoft Code Navigator: Show Index StatsWebsoft Code Navigator: Toggle Autocomplete
Configuration
| Setting | Default | Description |
|---|---|---|
websoftNav.includeGlobs |
["**/*.{js,bs,xml,xmd}"] |
Glob patterns included in indexing. |
websoftNav.excludeGlobs |
["**/{node_modules,.git,dist,out}/**"] |
Glob patterns excluded from indexing. |
websoftNav.maxFileSizeKb |
1024 |
Maximum indexed file size (KB). |
websoftNav.autocomplete.enabled |
true |
Enable inline autocomplete. |
websoftNav.parser.strict |
false |
Strict parser mode (reserved). |
Getting started
- Install the extension and open a workspace containing Websoft
spxmlsources. - The index builds automatically on startup; use Rebuild Index after large changes.
- Start typing an
XQuery(...)orXQueryExpr(...)— suggestions and diagnostics appear immediately.
Open the Websoft Code Navigator output channel to see index load/rebuild/change logs.
Русский
Websoft Code Navigator индексирует исходники платформы Websoft и превращает VS Code в редактор с
пониманием запросов: он знает пространства имён, каталоги (таблицы) и поля, предоставляя контекстное
автодополнение, переход к определению и диагностику в реальном времени как для строкового диалекта
XQuery("..."), так и для «текучего» построителя XQueryExpr(...).
Ключевые возможности
- 🔎 Контекстное автодополнение пространств имён, объектов и членов (
websoft.,websoft.hcm.core_hr., …). - 🧭 Переход к объявлению / определению, символы документа и рабочей области (Outline).
- 🧩 Автодополнение с учётом типов .NET для объектов, доступных языку сценариев.
- 🗄️ Помощь по XQuery и XQueryExpr — подсказки каталогов, полей и типов.
- 🚦 Диагностика в реальном времени — неизвестные переменные, псевдонимы, каталоги и поля подчёркиваются.
Индексация символов и навигация
- Индексирует только файлы по путям, содержащим
/spxml/. - Определяет пространства имён из папок вида
name@namespace(например,core_hr@websoft.hcm). - Строит области объектов из родительских тегов XML/XMD; сопоставляет
component.xml/component.jsсnamespace.module, аspxml/libs/*.js— сnamespace.module.filename. - Поддерживает опциональную цепочку (
?.работает как.) и исключает вложенные функции из индекса. - Предоставляет символы документа и рабочей области, переход к объявлению/определению, всплывающие подсказки и подсказки сигнатур.
Автодополнение строк XQuery — XQuery("...")
При вводе внутри строкового XQuery("...") (одно- или многострочный шаблон):
Каталоги предлагаются сразу после привязки
for/join ... $var in.xq = XQuery("for $elem in ") // ← предлагает каталоги (например, websoft.platform.security.users)Поля предлагаются сразу после
$var/, отфильтрованные по каталогу, привязанному к этой переменной — для каждой переменной и каждого соединения в запросе:XQuery("for $elem in websoft.platform.security.users ljoin $site in websoft.site on $elem/code = $site/code where $elem/login = 'user1' return $elem/id, $site/id")Константы типа для
XQueryLiteral(value, Type)предлагаются для аргумента типа, при этом предварительно выбирается константа, соответствующая типу сравниваемого поля:XQuery(`... where $elem/name = ${XQueryLiteral(123, TypeString)} ...`) // name — строка → TypeString
Подсказки таблиц и столбцов в строковых аргументах XQueryExpr(...)
- Имена таблиц для первого аргумента
XQueryExpr,Table,InnerJoin,LeftJoin,RightJoin. Предлагаются только объекты-каталоги (SPXML-FORM CATALOG="1"); имя таблицы берётся из тега-обёртки xmd (например,<users>), независимо от имени файла (которое может иметь префиксwtv_), давая ключи видаwebsoft.platform.security.users. - Имена столбцов для аргументов-полей
On*,Where*,GroupBy,OrderBy,Return, отфильтрованные по каталогу, привязанному к указанному псевдониму. - Константы типа (
TypeInteger,TypeReal,TypeBool,TypeDate,TypeString) для аргументаTypeIdвWhere*/On*, с предварительным выбором соответствующей типу столбца (или выведенной из литерального значения, если тип столбца неизвестен).
Точный переход к определению каталогов и полей
Ctrl/Cmd-клик (или Перейти к определению) по каталогу или полю внутри XQuery(...) /
XQueryExpr(...) переходит к точному каталогу или точному полю каталога, привязанного к указанной
переменной/псевдониму — а не к первому одноимённому символу в индексе.
Диагностика в реальном времени (подчёркивание ошибок)
Ошибки подчёркиваются по мере ввода, в любом предложении (in, where, on, return, соединения, …):
| Проблема | Пример |
|---|---|
| Неизвестная переменная XQuery | where $elems/login, когда объявлена только $elem |
| Неизвестный псевдоним XQueryExpr | .OnEquals("c","f","x","g"), когда x нигде не объявлен |
| Неизвестный каталог (таблица) | for $e in websoft.hcm.missing / XQueryExpr("ns.missing", …) |
| Неизвестное поле (столбец) | $elem/nofield / .Return("c","nofield") |
Чтобы снизить шум, поле не помечается повторно, если его переменная/псевдоним или каталог уже неизвестны, а незавершённые (в процессе ввода) конструкции не помечаются.
Автодополнение типов .NET (доступные объекты)
Некоторые компоненты предоставляют объекты .NET языку сценариев через функцию-точку входа (например,
websoft.xqueryexpr.XQueryExpr(...)). Расширение предоставляет автодополнение членов с учётом типов —
включая цепочки вызовов построителя, финальные свойства результата и локально присвоенные переменные
(xq.WhereEqual(...).LeftJoin(...).Transpile().QueryText). Это работает за счёт:
- Обнаружения манифестов
*.dotnet-index.json(схемаkind: "dotnet-types") рядом с компонентами. - Чтения JSDoc
/** @returns {Fully.Qualified.TypeName} */у функции-точки входа для связи точки входа JS с её типом возврата .NET.
Если тип не удаётся вывести, аннотируйте переменную явно (это переопределяет вывод):
/** @type {Websoft.XQuery.XQueryExpr} */
xqExpr = SomeFactory();
// xqExpr. ← теперь автодополняет члены XQueryExpr
@type также принимается встроенно (/** @type {T} */ x = ...) или в виде завершающего комментария
(x = ...; // @type {T}). Манифесты перезагружаются автоматически при изменении на диске.
Постоянный индекс и статистика использования
- Индекс рабочей области сохраняется в корне каждой рабочей области:
.index/index.jsonи.index/changes/index-change-*.json. - Статистика автодополнения по пользователю:
%USERPROFILE%\.websoft-nav\completion-stats.json. - Часто используемые функции ранжируются выше в списках автодополнения.
Команды
Websoft Code Navigator: Rebuild Index— перестроить индексWebsoft Code Navigator: Show Index Stats— показать статистику индексаWebsoft Code Navigator: Toggle Autocomplete— включить/выключить автодополнение
Настройки
| Параметр | По умолчанию | Описание |
|---|---|---|
websoftNav.includeGlobs |
["**/*.{js,bs,xml,xmd}"] |
Шаблоны включения в индексацию. |
websoftNav.excludeGlobs |
["**/{node_modules,.git,dist,out}/**"] |
Шаблоны исключения из индексации. |
websoftNav.maxFileSizeKb |
1024 |
Максимальный размер индексируемого файла (КБ). |
websoftNav.autocomplete.enabled |
true |
Включить встроенное автодополнение. |
websoftNav.parser.strict |
false |
Строгий режим парсера (зарезервировано). |
Начало работы
- Установите расширение и откройте рабочую область с исходниками Websoft
spxml. - Индекс строится автоматически при запуске; используйте Rebuild Index после крупных изменений.
- Начните вводить
XQuery(...)илиXQueryExpr(...)— подсказки и диагностика появятся сразу.
Откройте канал вывода Websoft Code Navigator, чтобы видеть журналы загрузки/перестроения/изменения индекса.