Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Websoft Code NavigatorNew to Visual Studio Code? Get it now.
Websoft Code Navigator

Websoft Code Navigator

Websoft

|
7 installs
| (0) | Free
VS Code extension for Websoft symbols
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Websoft Code Navigator

Languages / Языки: English · Русский

Smart indexing, autocomplete, navigation, and live error checking for Websoft platform sources (.xml, .xmd, .js, .bs) in spxml folders — including first-class support for XQuery(...) and XQueryExpr(...) queries.


English

Websoft 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 XQuery("...") string dialect and the fluent XQueryExpr(...) builder.

Highlights

  • 🔎 Scoped autocomplete for namespaces, objects, and members (websoft., websoft.hcm.core_hr., …).
  • 🧭 Go to Declaration / Definition, Document & Workspace Symbols (Outline).
  • 🧩 .NET type-aware autocomplete for objects exposed to the script language.
  • 🗄️ XQuery & XQueryExpr assistance — catalog, field, and type suggestions.
  • 🚦 Live diagnostics — unknown variables, aliases, catalogs, and fields are underlined.

Symbol indexing & navigation

  • Indexes only files under paths containing /spxml/.
  • Understands namespaces from folders like name@namespace (e.g. core_hr@websoft.hcm).
  • Builds object scopes from parent XML/XMD tags; remaps component.xml / component.js to namespace.module, and spxml/libs/*.js to namespace.module.filename.
  • Supports optional chaining (?. behaves like .) and excludes nested functions from the index.
  • Provides Document Symbols, Workspace Symbols, Go to Declaration / Definition, hover, and signature help.

XQuery string autocomplete — XQuery("...")

While typing inside a raw XQuery("...") (single- or multi-line template) statement:

  • Catalogs are suggested right after a for/join ... $var in binding.

    xq = XQuery("for $elem in ")            // ← suggests catalogs (e.g. websoft.platform.security.users)
    
  • Fields are suggested right after a $var/, filtered to the catalog bound to that variable — for every variable and every join in the statement:

    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) type constants are suggested for the type argument, preselecting the constant that matches the compared field's type:

    XQuery(`... where $elem/name = ${XQueryLiteral(123, TypeString)} ...`)  // name is a string → TypeString
    

Table & column suggestions in XQueryExpr(...) string arguments

  • Table names for the first argument of XQueryExpr, Table, InnerJoin, LeftJoin, RightJoin. Only catalog object types (SPXML-FORM CATALOG="1") are offered; the table name comes from the xmd wrapper element (e.g. <users>), independent of the file name (which may carry a wtv_ prefix), giving keys like websoft.platform.security.users.
  • Column names for the field arguments of On*, Where*, GroupBy, OrderBy, Return, filtered to the catalog bound to the referenced alias.
  • Type constants (TypeInteger, TypeReal, TypeBool, TypeDate, TypeString) for the TypeId argument of Where*/On*, preselecting the one matching the column's type (or inferred from the literal value when the column type is unknown).

Precise go-to-definition for catalogs & fields

Ctrl/Cmd-click (or Go to Definition) on a catalog or field inside XQuery(...) / XQueryExpr(...) navigates to the exact catalog or the exact field of the catalog bound to the referenced variable/alias — not the first same-named symbol in the index.

Live diagnostics (error underlining)

Mistakes are underlined as you type, in every clause (in, where, on, return, joins, …):

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.json manifests (schema kind: "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.json and .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 Index
  • Websoft Code Navigator: Show Index Stats
  • Websoft 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

  1. Install the extension and open a workspace containing Websoft spxml sources.
  2. The index builds automatically on startup; use Rebuild Index after large changes.
  3. Start typing an XQuery(...) or XQueryExpr(...) — 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 Строгий режим парсера (зарезервировано).

Начало работы

  1. Установите расширение и откройте рабочую область с исходниками Websoft spxml.
  2. Индекс строится автоматически при запуске; используйте Rebuild Index после крупных изменений.
  3. Начните вводить XQuery(...) или XQueryExpr(...) — подсказки и диагностика появятся сразу.

Откройте канал вывода Websoft Code Navigator, чтобы видеть журналы загрузки/перестроения/изменения индекса.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft