Skip to content
Jip Claassens edited this page Jun 2, 2026 · 2 revisions

GeoDMS Language Support

Editor extensions for GeoDMS .dms files, available for VS Code and Visual Studio 2022/2026.

Features

  • Syntax highlighting for .dms files
  • IntelliSense completions for operators and keywords
  • Signature help (parameter hints) when typing function calls, including overloads
  • Operator list sourced from GeoDMS operator CSV
  • Signatures sourced from the GeoDMS wiki

Architecture

The project has two separate extensions that share a common language server:

GeoDMS_Languages/
├── data/
│   └── Operator_v20_0_0.csv        # Operator list from GeoDMS release
├── scripts/
│   ├── gen-catalog.mjs             # CSV → server/src/operators.ts
│   └── gen-signatures.mjs          # Wiki → server/src/wiki-signatures.ts
├── server/
│   └── src/
│       ├── server.ts               # LSP server (completions + signatures)
│       ├── completions.ts
│       ├── signatures.ts
│       ├── operators.ts            # Generated — do not edit
│       └── wiki-signatures.ts      # Generated — do not edit
├── vscode/                         # VS Code extension
│   ├── syntaxes/geodms.tmLanguage.json
│   ├── language-configuration.json
│   └── package.json
└── visualstudio/                   # Visual Studio extension (C#)
    └── GeoDMSLanguage/

VS Code extension bundles the LSP server (TypeScript/Node) directly into the .vsix.

Visual Studio extension is a C# VSIX that wraps the same server via Microsoft.VisualStudio.LanguageServer.Client.


Development Setup

Prerequisites

Tool Version Purpose
Node.js ≥ 18 Build VS Code extension + LSP server
npm ≥ 9 Package management
TypeScript via npm Compile server
Visual Studio 2022/2026 with VSSDK workload Build VS extension
GeoDMS wiki (local clone) Generate signatures

Clone and install

git clone https://github.com/<your-org>/GeoDMS_Languages.git
cd GeoDMS_Languages
cd vscode && npm install

Generate language data (do this before first build)

# From repo root — generates server/src/operators.ts and wiki-signatures.ts
cd vscode
npm run gen

gen-catalog.mjs reads data/Operator_v20_0_0.csv.
gen-signatures.mjs reads the local GeoDMS wiki (default: C:/projdir/_archief/geodms.wiki).
Pass a custom path: node scripts/gen-signatures.mjs D:/path/to/geodms.wiki

Build VS Code extension

cd vscode
npm run compile          # development build
npm run vscode:prepublish  # minified production build
npx vsce package         # creates geodms-language-x.x.x_vscode.vsix

Build Visual Studio extension

  1. Open visualstudio/GeoDMSLanguage.sln in Visual Studio 2022 or 2026
  2. Build → Release
  3. Output: visualstudio/out/geodms-language-x.x.x-vs.vsix

Updating Operators and Signatures

Do this when a new GeoDMS version is released.

1. Update the operator CSV

  1. Get Operator_vXX_X_X.csv from the new GeoDMS release
  2. Replace data/Operator_v20_0_0.csv with the new file
  3. Update the filename reference if the version changed (currently hardcoded in scripts/gen-catalog.mjs line 1 comment only — the script reads whatever CSV is passed or the default path)

If you rename the CSV file, update the path in scripts/gen-catalog.mjs:

const csv = readFileSync(join(__dirname, '../data/Operator_vXX_X_X.csv'), 'utf-8');

2. Pull latest GeoDMS wiki

cd C:/projdir/_archief/geodms.wiki   # or wherever your wiki clone is
git pull

3. Regenerate

cd vscode
npm run gen

Check server/src/operators.ts and server/src/wiki-signatures.ts for expected operator counts.

4. Rebuild and repackage

npm run compile
npx vsce package

Rebuild the Visual Studio extension in Visual Studio (Release build).

5. Bump version and release

Update version in vscode/package.json and <ExtensionVersion> in visualstudio/GeoDMSLanguage/GeoDMSLanguage.csproj, then create a new GitHub release with both .vsix files attached.


Release Checklist

  • Pull latest GeoDMS wiki
  • Replace operator CSV if new version available
  • Run npm run gen in vscode/
  • Run npm run compile + npx vsce package in vscode/
  • Build Visual Studio extension in Release mode
  • Bump version in package.json and .csproj
  • Commit changes
  • Create GitHub release with tag vX.X.X
  • Attach both .vsix files to release