Skip to content
| Marketplace
Sign in
Visual Studio Code>Programming Languages>Xenon DSL Syntax HighlighterNew to Visual Studio Code? Get it now.
Xenon DSL Syntax Highlighter

Xenon DSL Syntax Highlighter

Yasuo-Higano

|
2 installs
| (0) | Free
Xenon DSL Syntax Highlighter
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Xenon DSL Syntax Highlighter

VSCode向けXenon言語のシンタックスハイライト拡張機能です。.xenonファイルの構文を色分けして表示します。

機能

この拡張機能は以下の機能を提供します:

  • .xenonファイルの構文ハイライト
  • キーワード、コメント、文字列、数値などの色分け表示
  • コードの可読性向上

サポートされている構文要素

  • キーワード: type, enum, interface, class, functionなど
  • データ型: string, number, boolean, any, void
  • コメント: # で始まる行コメント
  • 文字列: 一重引用符(')と二重引用符(")で囲まれた文字列
  • 数値: 整数と小数
  • アノテーション: @で始まる識別子
  • 演算子: 代入演算子(=, :=, -=など)

インストール方法

VSIXからのインストール

  1. このリポジトリからVSIX拡張機能パッケージをダウンロード
  2. VSCodeを開き、拡張機能ビュー(Ctrl+Shift+X)を表示
  3. 拡張機能ビューの「...」メニューから「VSIXからのインストール...」を選択
  4. ダウンロードしたVSIXファイルを選択してインストール

開発環境からのインストール

  1. このリポジトリをクローン
  2. npm installを実行して依存関係をインストール
  3. npm run compileでコンパイル
  4. F5キーを押して拡張機能をデバッグモードで実行

🧬 Xenon DSL 仕様書 ver 0.5.0

概要

Xenon は、関数呼び出し風の記法を用いて構造化データを簡潔に定義するDSLです。 # を用いたセクションラベルでリストを定義します。


📥 インポート

他のXenonファイルをインポートする機能を提供します。 ファイルは相対パスまたは絶対パスで指定します。

%import("path/to/file.xenon")
  • インポート文はファイルの先頭に記述する必要があります
  • 複数のインポートを行う場合は複数行に記述します
  • インポートしたファイルの型定義や値をそのまま利用できます
  • 循環参照は避けてください(A→B→Aのような参照関係)
// 複数ファイルのインポート例
%import("common/types.xenon")
%import("common/constants.xenon")

// インポートした型を使用
User(name: "Alice", role: Admin)

🏷 キーワード(予約語)

以下の語は識別子として使用できません:

deftype, defenum, defunion, list, map, true, false, null

💬 コメント

  • 行頭に // を記述(前に空白があってもOK)
// コメントです
deftype User(name: string)

ブロックコメント

/* / /* / /* / /* ****/

  • 連続する*の個数が一致する必要があります。
  • コメントはプリプロセッサーで処理されるため、pegjsでは処理する必要はありません。

🔤 型定義

列挙型(Enum)

defenum Role = Admin | User | Guest
  • 列挙値は縦書きや区切り文字(|)で区切ることができます

共用型(Union)

defunion Item = Text | Image | Audio
  • 共用型も列挙型と同様に縦書きや区切り文字で表現可能です

通常型(Type)

deftype User(name: string, age: int?)
  • ? を付けることで nullable 型
  • デフォルト値の指定も可能:
deftype User(name: string = "anonymous", age: int = 0)
  • フィールドの区切りには,または改行が使えます:
deftype User(
  id: int, 
  name: string = "unnamed", 
  role: Role = User
)

🧩 型システム

プリミティブ型

  • int, float, bool, string, binary, DateTime, Timestamp

Nullable型

  • 例:int?, string?

ジェネリック型

  • list<int> - リスト型
  • map<string, string> - マップ型(キーと値の型を指定)
deftype Request(
  url: string, 
  method: string = "GET", 
  headers: map<string, string> = {}
)

🏷 セクションラベル構文

セクション記法(#)でリストを定義

# Users
User(name: "Alice", age: 30)
User(name: "Bob", age: 25)

## Admins
User(name: "Carol", age: 40)
  • #, ##, ### による階層を表現可能
  • セクションの中は宣言のリスト
  • セクションはネストでき、パスとして参照可能(例: Users.Admins)

セクション階層例

# Definitions
Info(name: "xenon", version: "0.1.0")

## Members
User(id: 1, name: "Alice")
User(id: 2, name: "Bob", role: Admin)

## Plugins
Plugin(name: "PluginA", version: "1.0.0")
  • この例では Definitions セクションの下に Members と Plugins サブセクションがあります

🧾 リテラル

整数 / 浮動小数点数

42
0xdeadbeef
3.1415

真偽値 / Null

true
false
null

文字列リテラル

"abc"        // 二重引用符
'abc'        // 単一引用符
"""
複数行の
テキスト
"""          // 三重二重引用符(複数行)
'''
複数行の
テキスト
'''          // 三重単一引用符(複数行)
  • 単一引用符と二重引用符ではエスケープが必要:

    • \" - 二重引用符内の引用符
    • \' - 単一引用符内の引用符
    • \\ - バックスラッシュ
    • \n - 改行
    • \r - キャリッジリターン
    • \t - タブ
    • \b - バックスペース
    • \f - フォームフィード
  • 三重引用符では複数行テキストとエスケープなしに特殊文字を含められます

日時型リテラル

// DateTime型 - ISO8601形式の日時文字列
DateTime("2025-05-17T12:34:56+09:00")

// Timestamp型 - UNIXタイムスタンプ(浮動小数点数)
Timestamp(1715958000.0)
  • DateTime型はISO8601形式の文字列を使用して日時を表現します
  • Timestamp型はUNIXエポック(1970年1月1日UTC)からの経過秒数を浮動小数点数で表現します

バイナリリテラル

バイナリデータは << と >> で囲まれたデータで表現します。複数の異なるエンコーディングのデータを混在させることができます。

// 基本的なバイナリリテラル
<<1, 2, 3, 4, 5>>  // 数値の配列

// 混合エンコーディングのバイナリリテラル
<<
  1, 2, 3,                // 数値(バイト)
  "UTF8文字列",            // UTF-8文字列
  "0123ABCDEF"/hex,      // 16進数エンコーディング
  "BASE32DATA"/base32,   // Base32エンコーディング
  "BASE64DATA"/base64    // Base64エンコーディング
>>
  • サポートされるエンコーディング形式:
    • /utf8 または指定なし - UTF-8文字列(デフォルト)
    • /hex - 16進数エンコード
    • /base32 - Base32エンコード
    • /base64 - Base64エンコード
  • 整数値は0-255の範囲の単一バイト値として扱われます
  • バイナリデータは複数行で記述可能で、カンマで区切ります
  • 各要素の前後の空白は無視されます

リスト / マップ

[1, 2, 3]
{
  "key": "value", 
  "count": 42
}
  • リストとマップは複数行で記述可能:
[
  "item1",
  "item2"
]

{
  "Content-Type": "application/json",
  "Authorization": "Bearer TOKEN"
}

✨ 複数行表現

全ての要素は複数行で記述可能です:

deftype Plugin(
  name: string, 
  version: string, 
  depends: list<string> = []
)

User(
  id: 2, 
  name: "Bob", 
  role: Admin
)

✨ 位置パラメーター

値を宣言する際に、パラメーター名を省略して位置のみで引数を指定できます:

// 型定義
deftype Point(x: int, y: int)
deftype DateTime(datetime: string, timezone: string = "UTC")

// 名前付きパラメーター
Point(x: 10, y: 20)
DateTime(datetime: "2025-05-17T12:34:56+09:00", timezone: "Tokyo/Japan")

// 位置パラメーター
Point(10, 20)
DateTime("2025-05-17T12:34:56+09:00")

// 位置パラメーターと名前付きパラメーターの混在
DateTime("2025-05-17T12:34:56+09:00", timezone: "Tokyo/Japan")
  • 位置パラメーターは型定義で宣言されたフィールドの順序に従います
  • 位置パラメーターと名前付きパラメーターを混在させる場合、位置パラメーターが先、名前付きパラメーターが後に来る必要があります
  • 位置パラメーターで指定したフィールドを名前付きパラメーターで再度指定することはできません
  • 位置パラメーターを使用する場合、必須フィールドへの値の指定は必須です
  • 位置パラメーターはオプションのフィールドを飛ばすことができません(順序通りに指定する必要があります)

✨ アノテーション

deftype User(
  @id id: int,
  @range(0, 150) age: int = 30
)

使用例:

  • @id, @range, @default, @readonly, @deprecated("理由") など

✅ 文法の特徴

項目 内容
宣言 TypeName(key: value, ...)
階層表現 セクションラベルで可能
AST変換 容易(JSON・Prolog・YAMLなど)
インデント制御 不要(@@INDENT@@などは廃止)
パーサー構築 PEG.js / peggy / Ohm-js に最適化

例:完全な定義

defenum Role = Admin | User

deftype Info(
  name: string,
  version: string,
  metas: map<string, string> = {}
)

deftype User(
  id: int,
  name: string = "unnamed",
  role: Role = User
)

deftype BinaryData(
  name: string,
  data: binary = <<1, 2, 3>>
)

deftype LogEntry(
  id: int,
  message: string,
  created: DateTime,
  received: Timestamp
)

# Definitions
Info(name: "xenon", version: "0.1.0", metas: {
  "description": "Xenon is a tool for building and managing plugins.",
  "author": "John Doe",
  "license": "MIT"
})

## Members
User(id: 1, name: "Alice")
User(
  id: 2, 
  name: "Bob", 
  role: Admin
)

## Binary Examples
BinaryData(
  name: "mixed", 
  data: <<
    1, 2, 3, 
    "文字列データ", 
    "0123456789ABCDEF"/hex,
    "BASE64ENCODED"/base64
  >>
)

# Logs
LogEntry(
  id: 1,
  message: "起動",
  created: DateTime("2025-05-17T12:34:56+09:00"),
  received: Timestamp(1715958000.0)
)

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2025 Microsoft