From 9c19ddfa9ac080220ddac58698b906ebb20889b3 Mon Sep 17 00:00:00 2001 From: jadewilson Date: Wed, 21 Jan 2026 10:38:50 +0000 Subject: [PATCH 1/7] refactor: reorganize to feature-based structure BREAKING CHANGE: Repository structure completely reorganized Old structure: - crates/syster-base, crates/syster-cli, crates/syster-lsp - editors/vscode-lsp, editors/vscode-modeller, editors/vscode-viewer - packages/diagram-core, packages/diagram-ui New structure: - core/ (syster-base) - cli/ (syster-cli) - lsp/server/ (syster-lsp) - lsp/vscode/ (vscode-lsp extension) - modeller/core/ (diagram-core) - modeller/ui/ (diagram-ui) - modeller/vscode/ (vscode-modeller extension) - viewer/vscode/ (vscode-viewer extension) Benefits: - Feature grouping: related components are together - Clearer organization: LSP server + extension in same folder - No more awkward nesting (crates/syster-lsp/crates/syster-lsp) Updated: - Cargo.toml workspace configuration - package.json workspaces - devcontainer.json paths - README.md documentation - copilot-instructions.md --- .devcontainer/devcontainer.json | 4 +- .github/copilot-instructions.md | 17 +- .gitmodules | 42 +- Cargo.lock | 856 +++++++++++++++++++++++++++++++- Cargo.toml | 17 +- README.md | 87 ++-- bun.lock | 278 +++++++++++ cli | 1 + core | 1 + crates/syster-base | 1 - crates/syster-cli | 1 - crates/syster-lsp | 1 - editors/vscode-lsp | 1 - editors/vscode-modeller | 1 - editors/vscode-viewer | 1 - lsp/server | 1 + lsp/vscode | 1 + modeller/core | 1 + modeller/ui | 1 + modeller/vscode | 1 + package.json | 17 +- packages/diagram-core | 1 - packages/diagram-ui | 1 - viewer/vscode | 1 + 24 files changed, 1227 insertions(+), 107 deletions(-) create mode 100644 bun.lock create mode 160000 cli create mode 160000 core delete mode 160000 crates/syster-base delete mode 160000 crates/syster-cli delete mode 160000 crates/syster-lsp delete mode 160000 editors/vscode-lsp delete mode 160000 editors/vscode-modeller delete mode 160000 editors/vscode-viewer create mode 160000 lsp/server create mode 160000 lsp/vscode create mode 160000 modeller/core create mode 160000 modeller/ui create mode 160000 modeller/vscode delete mode 160000 packages/diagram-core delete mode 160000 packages/diagram-ui create mode 160000 viewer/vscode diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 087f0615..c82bf03c 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -31,8 +31,8 @@ } } }, - "initializeCommand": "git submodule update --init --recursive", - "postCreateCommand": "rustc --version && cargo --version && git submodule update --init --recursive && cd editors/vscode-lsp && npm install && cd ../.. && ([ -d packages/diagram-core ] && cd packages/diagram-core && bun install || true) && ([ -d packages/diagram-ui ] && cd packages/diagram-ui && bun install || true)", + "initializeCommand": "git submodule deinit -f --all 2>/dev/null || true && git submodule update --init --recursive", + "postCreateCommand": "rustc --version && cargo --version && bun install && cd lsp/vscode && npm install", "forwardPorts": [3000, 5173], "remoteUser": "vscode" } diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 0004a5f9..d0bd3a38 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -24,11 +24,18 @@ Syster is a comprehensive Rust-based parser and tooling suite for SysML v2 (Syst ``` syster/ -├── crates/ -│ ├── syster-base/ # Core library (parser, AST, semantic analysis) -│ ├── syster-cli/ # Command-line tool -│ └── syster-lsp/ # Language Server Protocol implementation -├── editors/vscode/ # VS Code extension +├── core/ # syster-base: parser, AST, semantic analysis +├── cli/ # syster-cli: command-line tool +├── lsp/ +│ ├── server/ # syster-lsp: Language Server Protocol implementation +│ └── vscode/ # VS Code LSP extension +├── modeller/ +│ ├── core/ # diagram-core: TypeScript diagram utilities +│ ├── ui/ # diagram-ui: React diagram components +│ └── vscode/ # VS Code modeller extension +├── viewer/ +│ └── vscode/ # VS Code viewer extension +├── pipelines/ # CI/CD pipeline definitions ├── docs/ # Documentation └── .github/ # GitHub configuration and instructions ``` diff --git a/.gitmodules b/.gitmodules index ed2bf4c9..3c0099bf 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,27 +1,27 @@ -[submodule "crates/syster-base"] - path = crates/syster-base +[submodule "pipelines"] + path = pipelines + url = https://github.com/jade-codes/syster-pipelines.git +[submodule "core"] + path = core url = https://github.com/jade-codes/syster-base.git -[submodule "crates/syster-cli"] - path = crates/syster-cli +[submodule "cli"] + path = cli url = https://github.com/jade-codes/syster-cli.git -[submodule "crates/syster-lsp"] - path = crates/syster-lsp +[submodule "lsp/server"] + path = lsp/server url = https://github.com/jade-codes/syster-lsp.git -[submodule "packages/diagram-core"] - path = packages/diagram-core +[submodule "lsp/vscode"] + path = lsp/vscode + url = https://github.com/jade-codes/syster-vscode-lsp.git +[submodule "modeller/core"] + path = modeller/core url = https://github.com/jade-codes/syster-diagram-core.git -[submodule "packages/diagram-ui"] - path = packages/diagram-ui +[submodule "modeller/ui"] + path = modeller/ui url = https://github.com/jade-codes/syster-diagram-ui.git -[submodule "editors/vscode-viewer"] - path = editors/vscode-viewer - url = https://github.com/jade-codes/syster-vscode-viewer.git -[submodule "editors/vscode-modeller"] - path = editors/vscode-modeller +[submodule "modeller/vscode"] + path = modeller/vscode url = https://github.com/jade-codes/syster-vscode-modeller.git -[submodule "pipelines"] - path = pipelines - url = https://github.com/jade-codes/syster-pipelines.git -[submodule "editors/vscode-lsp"] - path = editors/vscode-lsp - url = https://github.com/jade-codes/syster-vscode-lsp.git +[submodule "viewer/vscode"] + path = viewer/vscode + url = https://github.com/jade-codes/syster-vscode-viewer.git diff --git a/Cargo.lock b/Cargo.lock index 04bbadad..bf76b3ee 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,7 +47,7 @@ version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" dependencies = [ - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -58,7 +58,7 @@ checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" dependencies = [ "anstyle", "once_cell_polyfill", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -67,12 +67,38 @@ version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" +[[package]] +name = "async-lsp" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c1c85c4bb41706ad1f8338e39fa725a24bc642be41140a38d818c93b9ae91f5" +dependencies = [ + "futures", + "lsp-types", + "pin-project-lite", + "rustix", + "serde", + "serde_json", + "thiserror", + "tokio", + "tower-layer", + "tower-service", + "tracing", + "waitpid-any", +] + [[package]] name = "beef" version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + [[package]] name = "bitflags" version = "2.10.0" @@ -206,6 +232,17 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "either" version = "1.15.0" @@ -225,7 +262,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -240,6 +277,15 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "form_urlencoded" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" +dependencies = [ + "percent-encoding", +] + [[package]] name = "from-pest" version = "0.3.4" @@ -251,12 +297,54 @@ dependencies = [ "void", ] +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + [[package]] name = "futures-core" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + [[package]] name = "futures-macro" version = "0.3.31" @@ -292,9 +380,13 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" dependencies = [ + "futures-channel", "futures-core", + "futures-io", "futures-macro", + "futures-sink", "futures-task", + "memchr", "pin-project-lite", "pin-utils", "slab", @@ -346,6 +438,108 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "icu_collections" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" +dependencies = [ + "displaydoc", + "potential_utf", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locale_core" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_normalizer" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" +dependencies = [ + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" + +[[package]] +name = "icu_properties" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" +dependencies = [ + "icu_collections", + "icu_locale_core", + "icu_properties_data", + "icu_provider", + "zerotrie", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "2.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" + +[[package]] +name = "icu_provider" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" +dependencies = [ + "displaydoc", + "icu_locale_core", + "writeable", + "yoke", + "zerofrom", + "zerotrie", + "zerovec", +] + +[[package]] +name = "idna" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + [[package]] name = "indexmap" version = "2.13.0" @@ -371,6 +565,12 @@ dependencies = [ "either", ] +[[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + [[package]] name = "lazy_static" version = "1.5.0" @@ -389,6 +589,21 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" +[[package]] +name = "litemap" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" + +[[package]] +name = "lock_api" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" +dependencies = [ + "scopeguard", +] + [[package]] name = "log" version = "0.4.29" @@ -429,12 +644,45 @@ dependencies = [ "logos-codegen", ] +[[package]] +name = "lsp-types" +version = "0.95.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e34d33a8e9b006cd3fc4fe69a921affa097bae4bb65f76271f4644f9a334365" +dependencies = [ + "bitflags 1.3.2", + "serde", + "serde_json", + "serde_repr", + "url", +] + [[package]] name = "memchr" version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" +[[package]] +name = "mio" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" +dependencies = [ + "libc", + "wasi", + "windows-sys 0.61.2", +] + +[[package]] +name = "nu-ansi-term" +version = "0.50.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" +dependencies = [ + "windows-sys 0.61.2", +] + [[package]] name = "once_cell" version = "1.21.3" @@ -447,6 +695,35 @@ version = "1.70.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" +[[package]] +name = "parking_lot" +version = "0.12.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-link", +] + +[[package]] +name = "percent-encoding" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" + [[package]] name = "pest" version = "2.8.5" @@ -514,6 +791,15 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "potential_utf" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" +dependencies = [ + "zerovec", +] + [[package]] name = "proc-macro-crate" version = "3.4.0" @@ -567,6 +853,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" +dependencies = [ + "bitflags 2.10.0", +] + [[package]] name = "regex" version = "1.12.2" @@ -665,19 +960,35 @@ version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" dependencies = [ - "bitflags", + "bitflags 2.10.0", "errno", "libc", "linux-raw-sys", - "windows-sys", + "windows-sys 0.61.2", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +[[package]] +name = "serde" +version = "1.0.228" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" +dependencies = [ + "serde_core", + "serde_derive", +] + [[package]] name = "serde_core" version = "1.0.228" @@ -698,6 +1009,30 @@ dependencies = [ "syn", ] +[[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] +name = "serde_repr" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "sha2" version = "0.10.9" @@ -709,12 +1044,53 @@ dependencies = [ "digest", ] +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signal-hook-registry" +version = "1.4.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" +dependencies = [ + "errno", + "libc", +] + [[package]] name = "slab" version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" +[[package]] +name = "smallvec" +version = "1.15.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" + +[[package]] +name = "socket2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" +dependencies = [ + "libc", + "windows-sys 0.60.2", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" + [[package]] name = "strsim" version = "0.11.1" @@ -732,33 +1108,63 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "synstructure" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "syster-base" version = "0.1.8-alpha" +source = "git+https://github.com/jade-codes/syster-base.git#fc453b6b5e07f089c5771cd5586d67660e089917" +dependencies = [ + "from-pest", + "pest", + "pest-ast", + "pest_derive", + "rayon", + "rowan", + "unicode-ident", +] + +[[package]] +name = "syster-base" +version = "0.1.11-alpha" dependencies = [ "from-pest", "logos", + "once_cell", "pest", "pest-ast", "pest_derive", "rayon", "rowan", "rstest", + "tempfile", "tokio-util", "unicode-ident", ] [[package]] name = "syster-base" -version = "0.1.8-alpha" -source = "git+https://github.com/jade-codes/syster-base.git#fc453b6b5e07f089c5771cd5586d67660e089917" +version = "0.1.11-alpha" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be02b0ce10658fd650983b4ed9871906c4e46338ca148600d399354b8e60a98" dependencies = [ "from-pest", + "logos", "pest", "pest-ast", "pest_derive", "rayon", "rowan", + "tokio-util", "unicode-ident", ] @@ -768,10 +1174,27 @@ version = "0.1.8-alpha" dependencies = [ "anyhow", "clap", - "syster-base 0.1.8-alpha (git+https://github.com/jade-codes/syster-base.git)", + "syster-base 0.1.8-alpha", "tempfile", ] +[[package]] +name = "syster-lsp" +version = "0.1.10-alpha" +dependencies = [ + "async-lsp", + "futures", + "percent-encoding", + "serde", + "serde_json", + "syster-base 0.1.11-alpha (registry+https://github.com/rust-lang/crates.io-index)", + "tokio", + "tokio-util", + "tower", + "tracing", + "tracing-subscriber", +] + [[package]] name = "tempfile" version = "3.24.0" @@ -782,7 +1205,7 @@ dependencies = [ "getrandom", "once_cell", "rustix", - "windows-sys", + "windows-sys 0.61.2", ] [[package]] @@ -791,13 +1214,71 @@ version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" +[[package]] +name = "thiserror" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "2.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "thread_local" +version = "1.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "tinystr" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" +dependencies = [ + "displaydoc", + "zerovec", +] + [[package]] name = "tokio" version = "1.49.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" dependencies = [ + "bytes", + "libc", + "mio", + "parking_lot", "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.61.2", +] + +[[package]] +name = "tokio-macros" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] @@ -808,6 +1289,7 @@ checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" dependencies = [ "bytes", "futures-core", + "futures-io", "futures-sink", "pin-project-lite", "tokio", @@ -843,6 +1325,85 @@ dependencies = [ "winnow", ] +[[package]] +name = "tower" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" +dependencies = [ + "tower-layer", + "tower-service", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "tracing-core" +version = "0.1.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" +dependencies = [ + "nu-ansi-term", + "sharded-slab", + "smallvec", + "thread_local", + "tracing-core", + "tracing-log", +] + [[package]] name = "typenum" version = "1.19.0" @@ -861,12 +1422,37 @@ version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" +[[package]] +name = "url" +version = "2.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", + "serde", + "serde_derive", +] + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + [[package]] name = "utf8parse" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" +[[package]] +name = "valuable" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" + [[package]] name = "version_check" version = "0.9.5" @@ -879,6 +1465,22 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +[[package]] +name = "waitpid-any" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18aa3ce681e189f125c4c1e1388c03285e2fd434ef52c7203084012ac29c5e4a" +dependencies = [ + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "wasi" +version = "0.11.1+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" + [[package]] name = "wasip2" version = "1.0.1+wasi-0.2.4" @@ -894,6 +1496,24 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -903,6 +1523,135 @@ dependencies = [ "windows-link", ] +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm 0.52.6", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "winnow" version = "0.7.14" @@ -917,3 +1666,92 @@ name = "wit-bindgen" version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "writeable" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" + +[[package]] +name = "yoke" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" +dependencies = [ + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerofrom" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "synstructure", +] + +[[package]] +name = "zerotrie" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", +] + +[[package]] +name = "zerovec" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "zmij" +version = "1.0.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65" diff --git a/Cargo.toml b/Cargo.toml index b30703e0..fefcefc9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,19 +1,14 @@ # Syster Meta-Repository -# This workspace aggregates all Syster Rust crates via git submodules. -# Each crate lives in its own repository for independent development and versioning. -# -# Note: Each crate is an independent project with its own Cargo.toml. -# Build each crate separately: -# cd crates/syster-base && cargo build -# cd crates/syster-cli && cargo build -# cd crates/syster-lsp && cargo build +# Feature-based organization with independent submodules +# Each submodule has its own Cargo.toml with git dependencies +# Build from each directory: cd core && cargo build [workspace] members = [] exclude = [ - "crates/syster-base", - "crates/syster-cli", - "crates/syster-lsp", + "core", # syster-base: parser, AST, semantic analysis + "cli", # syster-cli: command-line tool + "lsp/server", # syster-lsp: language server ] resolver = "2" diff --git a/README.md b/README.md index 953c1fd2..a50e4450 100644 --- a/README.md +++ b/README.md @@ -4,38 +4,39 @@ A Rust-based parser and tooling for SysML v2 (Systems Modeling Language) and KerML (Kernel Modeling Language). -## Meta-Repository Structure +## Repository Structure -This is a **meta-repository** that aggregates all Syster components via Git submodules. Each component lives in its own repository for independent development and versioning. +Feature-based organization with independent submodules for versioning flexibility. -### Rust Crates - -| Component | Repository | Description | -|-----------|------------|-------------| -| **syster-base** | [jade-codes/syster-base](https://github.com/jade-codes/syster-base) | Core library with parser, AST, and semantic analysis | -| **syster-cli** | [jade-codes/syster-cli](https://github.com/jade-codes/syster-cli) | Command-line tool for analyzing SysML/KerML files | -| **syster-lsp** | [jade-codes/syster-lsp](https://github.com/jade-codes/syster-lsp) | Language Server Protocol implementation with VS Code extension | - -### TypeScript Packages - -| Component | Repository | Description | -|-----------|------------|-------------| -| **@syster/diagram-core** | [jade-codes/syster-diagram-core](https://github.com/jade-codes/syster-diagram-core) | Core diagram types and layout algorithms | -| **@syster/diagram-ui** | [jade-codes/syster-diagram-ui](https://github.com/jade-codes/syster-diagram-ui) | React Flow UI components for diagrams | - -### VS Code Extensions - -| Extension | Repository | Description | -|-----------|------------|-------------| -| **sysml-language-support** | [jade-codes/syster-vscode-lsp](https://github.com/jade-codes/syster-vscode-lsp) | Main language support extension (LSP client) | -| **syster-viewer** | [jade-codes/syster-vscode-viewer](https://github.com/jade-codes/syster-vscode-viewer) | Diagram viewer extension | -| **syster-modeller** | [jade-codes/syster-vscode-modeller](https://github.com/jade-codes/syster-vscode-modeller) | Diagram modeller extension | +``` +syster/ +├── core/ # Parser, AST, semantic analysis +├── cli/ # Command-line tool +├── lsp/ +│ ├── server/ # Language Server Protocol implementation +│ └── vscode/ # VS Code LSP extension +├── modeller/ +│ ├── core/ # Diagram types and layout (TypeScript) +│ ├── ui/ # React Flow components (TypeScript) +│ └── vscode/ # VS Code modeller extension +├── viewer/ +│ └── vscode/ # VS Code viewer extension +└── pipelines/ # CI/CD pipeline templates +``` -### Infrastructure +### Components -| Component | Repository | Description | -|-----------|------------|-------------| -| **syster-pipelines** | [jade-codes/syster-pipelines](https://github.com/jade-codes/syster-pipelines) | CI/CD pipeline templates | +| Feature | Path | Repository | Description | +|---------|------|------------|-------------| +| **Core** | `core/` | [syster-base](https://github.com/jade-codes/syster-base) | Parser, AST, semantic analysis | +| **CLI** | `cli/` | [syster-cli](https://github.com/jade-codes/syster-cli) | Command-line tool | +| **LSP Server** | `lsp/server/` | [syster-lsp](https://github.com/jade-codes/syster-lsp) | Language Server Protocol | +| **LSP Extension** | `lsp/vscode/` | [syster-vscode-lsp](https://github.com/jade-codes/syster-vscode-lsp) | VS Code language support | +| **Diagram Core** | `modeller/core/` | [syster-diagram-core](https://github.com/jade-codes/syster-diagram-core) | Diagram types (TS) | +| **Diagram UI** | `modeller/ui/` | [syster-diagram-ui](https://github.com/jade-codes/syster-diagram-ui) | React Flow components | +| **Modeller** | `modeller/vscode/` | [syster-vscode-modeller](https://github.com/jade-codes/syster-vscode-modeller) | VS Code modeller | +| **Viewer** | `viewer/vscode/` | [syster-vscode-viewer](https://github.com/jade-codes/syster-vscode-viewer) | VS Code viewer | +| **Pipelines** | `pipelines/` | [syster-pipelines](https://github.com/jade-codes/syster-pipelines) | CI/CD templates | ## Getting Started @@ -48,34 +49,32 @@ This repository includes a VS Code dev container with all development tools pre- 3. The container will automatically: - Initialize all git submodules - Install Rust, Node.js, and Bun - - Set up the VS Code LSP extension dependencies + - Set up dependencies ### Clone with Submodules -\`\`\`bash +```bash # Clone with all submodules git clone --recurse-submodules https://github.com/jade-codes/syster.git # Or if already cloned, initialize submodules git submodule update --init --recursive -\`\`\` - -### Build Rust Crates +``` -Each crate is independent - build separately: +### Build -\`\`\`bash -cd crates/syster-base && cargo build && cargo test -cd crates/syster-cli && cargo build -cd crates/syster-lsp && cargo build -\`\`\` +```bash +# Build all Rust crates from root +cargo build +cargo test -### Build TypeScript Packages +# Install TypeScript dependencies +bun install -```bash -cd editors/vscode-lsp && npm install && npm run esbuild -cd packages/diagram-core && bun install -cd packages/diagram-ui && bun install +# Setup VS Code extensions +npm run setup:lsp +npm run setup:modeller +npm run setup:viewer ``` ### Running the VS Code Extension Locally diff --git a/bun.lock b/bun.lock new file mode 100644 index 00000000..538599ed --- /dev/null +++ b/bun.lock @@ -0,0 +1,278 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "syster-meta", + }, + "modeller/core": { + "name": "@opensyster/diagram-core", + "version": "0.0.3-alpha", + }, + "modeller/ui": { + "name": "@opensyster/diagram-ui", + "version": "0.0.4-alpha", + "dependencies": { + "@opensyster/diagram-core": "^0.0.3-alpha", + "elkjs": "^0.9.3", + }, + "devDependencies": { + "@testing-library/react": "^14.3.1", + "@types/bun": "^1.2.14", + "@types/react": "^18.2.0", + "happy-dom": "^20.1.0", + "react-dom": "^18.2.0", + "typescript": "^5.0.0", + }, + "peerDependencies": { + "@xyflow/react": "^12.0.0", + "react": "^18.2.0", + }, + }, + }, + "packages": { + "@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], + + "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], + + "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], + + "@opensyster/diagram-core": ["@opensyster/diagram-core@workspace:modeller/core"], + + "@opensyster/diagram-ui": ["@opensyster/diagram-ui@workspace:modeller/ui"], + + "@testing-library/dom": ["@testing-library/dom@9.3.4", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" } }, "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ=="], + + "@testing-library/react": ["@testing-library/react@14.3.1", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^9.0.0", "@types/react-dom": "^18.0.0" }, "peerDependencies": { "react": "^18.0.0", "react-dom": "^18.0.0" } }, "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ=="], + + "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], + + "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], + + "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], + + "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], + + "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], + + "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], + + "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], + + "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], + + "@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], + + "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], + + "@types/react": ["@types/react@18.3.27", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w=="], + + "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], + + "@types/whatwg-mimetype": ["@types/whatwg-mimetype@3.0.2", "", {}, "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA=="], + + "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], + + "@xyflow/react": ["@xyflow/react@12.10.0", "", { "dependencies": { "@xyflow/system": "0.0.74", "classcat": "^5.0.3", "zustand": "^4.4.0" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17" } }, "sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw=="], + + "@xyflow/system": ["@xyflow/system@0.0.74", "", { "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", "@types/d3-selection": "^3.0.10", "@types/d3-transition": "^3.0.8", "@types/d3-zoom": "^3.0.8", "d3-drag": "^3.0.0", "d3-interpolate": "^3.0.1", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" } }, "sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q=="], + + "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], + + "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], + + "aria-query": ["aria-query@5.1.3", "", { "dependencies": { "deep-equal": "^2.0.5" } }, "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ=="], + + "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], + + "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], + + "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], + + "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], + + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], + + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], + + "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], + + "classcat": ["classcat@5.0.5", "", {}, "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w=="], + + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], + + "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], + + "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], + + "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], + + "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], + + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], + + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], + + "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], + + "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], + + "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], + + "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], + + "deep-equal": ["deep-equal@2.2.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.13" } }, "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA=="], + + "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], + + "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], + + "dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], + + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], + + "elkjs": ["elkjs@0.9.3", "", {}, "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ=="], + + "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], + + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], + + "es-get-iterator": ["es-get-iterator@1.1.3", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.7", "isarray": "^2.0.5", "stop-iteration-iterator": "^1.0.0" } }, "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw=="], + + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + + "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], + + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], + + "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], + + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], + + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], + + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], + + "happy-dom": ["happy-dom@20.3.4", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^4.5.0", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-rfbiwB6OKxZFIFQ7SRnCPB2WL9WhyXsFoTfecYgeCeFSOBxvkWLaXsdv5ehzJrfqwXQmDephAKWLRQoFoJwrew=="], + + "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], + + "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], + + "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], + + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], + + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], + + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], + + "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], + + "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], + + "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], + + "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], + + "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], + + "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], + + "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], + + "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], + + "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], + + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], + + "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], + + "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], + + "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], + + "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], + + "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], + + "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], + + "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], + + "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], + + "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], + + "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], + + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], + + "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], + + "object-is": ["object-is@1.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" } }, "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q=="], + + "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], + + "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], + + "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], + + "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], + + "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], + + "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], + + "react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="], + + "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], + + "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], + + "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], + + "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], + + "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], + + "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], + + "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], + + "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], + + "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], + + "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], + + "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], + + "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + + "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], + + "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], + + "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], + + "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], + + "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], + + "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], + + "zustand": ["zustand@4.5.7", "", { "dependencies": { "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0.6", "react": ">=16.8" }, "optionalPeers": ["@types/react", "immer", "react"] }, "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw=="], + + "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], + } +} diff --git a/cli b/cli new file mode 160000 index 00000000..e62fdb79 --- /dev/null +++ b/cli @@ -0,0 +1 @@ +Subproject commit e62fdb79c40e37f8054b11462baff6fae986a6bb diff --git a/core b/core new file mode 160000 index 00000000..9c4e2039 --- /dev/null +++ b/core @@ -0,0 +1 @@ +Subproject commit 9c4e2039cc1cca7ea52147ebadbaca354324a7c9 diff --git a/crates/syster-base b/crates/syster-base deleted file mode 160000 index 3e599f30..00000000 --- a/crates/syster-base +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3e599f30f4819dfe74a58d5c2ea7ba511e0eb49c diff --git a/crates/syster-cli b/crates/syster-cli deleted file mode 160000 index d770065f..00000000 --- a/crates/syster-cli +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d770065f8f325afa405d2207474de5d50cc6bc19 diff --git a/crates/syster-lsp b/crates/syster-lsp deleted file mode 160000 index 29303ad9..00000000 --- a/crates/syster-lsp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 29303ad9266c340af9c85b1ce53bc5317c0df721 diff --git a/editors/vscode-lsp b/editors/vscode-lsp deleted file mode 160000 index 788f0a17..00000000 --- a/editors/vscode-lsp +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 788f0a173cb8472e3eea8e245e514eed4acc8f3e diff --git a/editors/vscode-modeller b/editors/vscode-modeller deleted file mode 160000 index a8d2ac3c..00000000 --- a/editors/vscode-modeller +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a8d2ac3c05ed374b5afd63b30c0c7c4e24307a55 diff --git a/editors/vscode-viewer b/editors/vscode-viewer deleted file mode 160000 index a5ca91a7..00000000 --- a/editors/vscode-viewer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a5ca91a735295f0c0b2abb4b36e706b02432e745 diff --git a/lsp/server b/lsp/server new file mode 160000 index 00000000..33734da8 --- /dev/null +++ b/lsp/server @@ -0,0 +1 @@ +Subproject commit 33734da898a810be738b6bd34e4684d2fb9b4efe diff --git a/lsp/vscode b/lsp/vscode new file mode 160000 index 00000000..c8447b47 --- /dev/null +++ b/lsp/vscode @@ -0,0 +1 @@ +Subproject commit c8447b471a3fac7e803f40657e704a6519e82e20 diff --git a/modeller/core b/modeller/core new file mode 160000 index 00000000..562abd7f --- /dev/null +++ b/modeller/core @@ -0,0 +1 @@ +Subproject commit 562abd7f8779ea9e474a10e70f22a7d86ca2c2c0 diff --git a/modeller/ui b/modeller/ui new file mode 160000 index 00000000..39213fc9 --- /dev/null +++ b/modeller/ui @@ -0,0 +1 @@ +Subproject commit 39213fc95e1be41ff08e64c31974e93e8bf8136b diff --git a/modeller/vscode b/modeller/vscode new file mode 160000 index 00000000..d080a21b --- /dev/null +++ b/modeller/vscode @@ -0,0 +1 @@ +Subproject commit d080a21b8b0da5f18beb495e9d11637983cddd31 diff --git a/package.json b/package.json index 05939011..8b26cc99 100644 --- a/package.json +++ b/package.json @@ -2,14 +2,17 @@ "name": "syster-meta", "version": "0.1.0", "private": true, - "description": "Syster - SysML v2 Parser and Tooling (Meta Repository). This is a meta-repository - each subdirectory is a git submodule with its own dependencies.", + "description": "Syster - SysML v2 Parser and Tooling. Feature-based monorepo with independent submodules.", + "workspaces": [ + "modeller/core", + "modeller/ui" + ], "scripts": { - "postinstall": "echo 'Note: This is a meta-repo. Run npm install in individual submodules as needed.'", - "setup:vscode-lsp": "cd editors/vscode-lsp && npm install", - "setup:vscode-viewer": "cd editors/vscode-viewer && npm install", - "setup:vscode-modeller": "cd editors/vscode-modeller && npm install", - "setup:packages": "cd packages/diagram-core && bun install && cd ../diagram-ui && bun install", - "setup:all": "npm run setup:vscode-lsp && npm run setup:packages" + "setup:lsp": "cd lsp/vscode && npm install", + "setup:modeller": "cd modeller/vscode && npm install", + "setup:viewer": "cd viewer/vscode && npm install", + "setup:packages": "bun install", + "setup:all": "bun install && npm run setup:lsp && npm run setup:modeller && npm run setup:viewer" }, "repository": { "type": "git", diff --git a/packages/diagram-core b/packages/diagram-core deleted file mode 160000 index a7887de5..00000000 --- a/packages/diagram-core +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a7887de532c1fb4bb736eef41e33f3b1013bb63f diff --git a/packages/diagram-ui b/packages/diagram-ui deleted file mode 160000 index 702658a8..00000000 --- a/packages/diagram-ui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 702658a8f8e40bce08e4a8d0b58cf258b02aa70d diff --git a/viewer/vscode b/viewer/vscode new file mode 160000 index 00000000..910fe632 --- /dev/null +++ b/viewer/vscode @@ -0,0 +1 @@ +Subproject commit 910fe63221b703bdea0f0b251c1f506fba213678 From 22915ad6ddbbe252762208f59619dba6d2445da5 Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:10:25 +0000 Subject: [PATCH 2/7] refactor: restructure repo - rename core to base, flatten submodules - Renamed core/ to base/ - Moved lsp/server to language-server/ - Moved lsp/vscode to language-client/ - Moved modeller/vscode to modeller/ - Moved viewer/vscode to viewer/ - Moved modeller/core to diagram-core/ - Moved modeller/ui to diagram-ui/ - Removed root-level Cargo.toml, package.json, bun.lock - Updated CI workflow to validate structure - Updated release workflow to collect all artifacts - Updated README and copilot-instructions --- .github/copilot-instructions.md | 24 +- .github/instructions/chore.md | 61 - .github/instructions/configuration.md | 378 ---- .github/instructions/copilot-instructions.md | 225 --- .github/instructions/documentation.md | 420 ----- .github/instructions/refactor-lsp.md | 183 -- .github/instructions/vscode-extension.md | 227 --- .github/workflows/ci.yml | 21 +- .github/workflows/copilot-auto-retry.yml | 102 - .github/workflows/release.yml | 114 +- .gitmodules | 28 +- Cargo.lock | 1757 ------------------ Cargo.toml | 154 -- README.md | 61 +- core => base | 0 bun.lock | 278 --- modeller/core => diagram-core | 0 modeller/ui => diagram-ui | 0 lsp/vscode => language-client | 0 lsp/server => language-server | 0 modeller/vscode => modeller | 0 package.json | 31 - viewer/vscode => viewer | 0 23 files changed, 149 insertions(+), 3915 deletions(-) delete mode 100644 .github/instructions/chore.md delete mode 100644 .github/instructions/configuration.md delete mode 100644 .github/instructions/copilot-instructions.md delete mode 100644 .github/instructions/documentation.md delete mode 100644 .github/instructions/refactor-lsp.md delete mode 100644 .github/instructions/vscode-extension.md delete mode 100644 .github/workflows/copilot-auto-retry.yml delete mode 100644 Cargo.lock delete mode 100644 Cargo.toml rename core => base (100%) delete mode 100644 bun.lock rename modeller/core => diagram-core (100%) rename modeller/ui => diagram-ui (100%) rename lsp/vscode => language-client (100%) rename lsp/server => language-server (100%) rename modeller/vscode => modeller (100%) delete mode 100644 package.json rename viewer/vscode => viewer (100%) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index d0bd3a38..6106a2f6 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -18,25 +18,21 @@ Syster is a comprehensive Rust-based parser and tooling suite for SysML v2 (Syst - **LSP:** async-lsp library for Language Server Protocol - **Formatter:** Rowan-based Concrete Syntax Tree (CST) - **VS Code Extension:** TypeScript, Node.js -- **Build System:** Cargo workspace with 3 crates +- **Build System:** Independent submodules, each with own Cargo.toml/package.json ## Repository Structure ``` syster/ -├── core/ # syster-base: parser, AST, semantic analysis +├── base/ # syster-base: parser, AST, semantic analysis ├── cli/ # syster-cli: command-line tool -├── lsp/ -│ ├── server/ # syster-lsp: Language Server Protocol implementation -│ └── vscode/ # VS Code LSP extension -├── modeller/ -│ ├── core/ # diagram-core: TypeScript diagram utilities -│ ├── ui/ # diagram-ui: React diagram components -│ └── vscode/ # VS Code modeller extension -├── viewer/ -│ └── vscode/ # VS Code viewer extension +├── language-server/ # syster-lsp: Language Server Protocol implementation +├── language-client/ # VS Code LSP extension +├── modeller/ # VS Code modeller extension +├── viewer/ # VS Code viewer extension +├── diagram-core/ # TypeScript diagram utilities +├── diagram-ui/ # React diagram components ├── pipelines/ # CI/CD pipeline definitions -├── docs/ # Documentation └── .github/ # GitHub configuration and instructions ``` @@ -172,7 +168,7 @@ Before making changes, review: ## VS Code Extension -Located in `editors/vscode/`: +Located in `base/language-client/`: - TypeScript-based extension - Integrates with syster-lsp server - Provides syntax highlighting, IntelliSense, formatting, and more @@ -180,7 +176,7 @@ Located in `editors/vscode/`: ## Standard Library -The `crates/syster-base/sysml.library/` directory contains the SysML v2 standard library files. These are loaded automatically by the workspace when needed. +The `core/sysml.library/` directory contains the SysML v2 standard library files. These are loaded automatically by the workspace when needed. ## Getting Help diff --git a/.github/instructions/chore.md b/.github/instructions/chore.md deleted file mode 100644 index dbd977a7..00000000 --- a/.github/instructions/chore.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -applyTo: '**/*.rs' ---- - -# Pre-Commit Checklist - -This checklist MUST be completed after every task/todo before committing changes. - -## Code Quality Checks - -- [ ] Remove unnecessary documentation from each changed file - - Delete redundant comments that don't add value - - Keep only essential API docs and complex logic explanations - -- [ ] Remove unused methods (unless marked with TODO prefix) - - Search for `#[allow(dead_code)]` warnings - - Delete or mark for future use with `// TODO: ...` - -- [ ] Move tests into their own test files - - Inline tests → `/tests.rs` - - Keep test modules focused and organized - -## Test Quality Checks - -- [ ] Add missing tests for each changed file - - Every public function should have at least one test - - Cover edge cases and error paths - -- [ ] Remove if-else match logic from tests - - Use `let-else` pattern: `let Some(x) = y else { panic!("...") };` - - Use `assert_matches!` macro where appropriate - -- [ ] Make tests more concrete - - Replace `assert!(x >= 5)` with `assert_eq!(x, 5)` - - Use exact values instead of ranges when possible - - Make assertions specific and meaningful - -## Final Checks - -- [ ] Address any TODOs added during the task - - Either implement them or file as future work - - Document why TODOs remain if not addressed - -- [ ] Clean up any temporary notes or debug code - - Remove `println!` debug statements - - Remove commented-out code blocks - - Clean up experimental code - -## Repeat Process - -Iterate through this checklist until no further changes are needed. - -## Validation - -After completing checklist: -```bash -cargo clippy --fix --allow-dirty -cargo test -git add -A && git commit -m "..." -``` - diff --git a/.github/instructions/configuration.md b/.github/instructions/configuration.md deleted file mode 100644 index d08794c4..00000000 --- a/.github/instructions/configuration.md +++ /dev/null @@ -1,378 +0,0 @@ ---- -applyTo: '**/{Cargo.toml,package.json,tsconfig.json,.gitignore,Makefile}' ---- - -# Configuration Files Guidelines - -## Overview - -This file provides guidance for working with configuration files in the Syster repository. These files define build settings, dependencies, linting rules, and project structure. - -## Cargo.toml Files - -### Workspace Root (Cargo.toml) - -The root `Cargo.toml` defines: -- Workspace members (all crates) -- Shared workspace package metadata -- Workspace-wide linter rules (clippy) -- Build optimization profiles - -**Key Principles:** -- Keep workspace metadata centralized -- Use consistent versioning across crates -- Define strict clippy rules for code quality -- Optimize profiles for development vs. production - -### Workspace Lints - -Current clippy rules enforce: -```toml -# Enforce explicit error handling -unwrap_used = "warn" # Avoid .unwrap() in production code -expect_used = "warn" # Avoid .expect() in production code -panic = "warn" # Avoid panic!() in production code -todo = "warn" # Mark incomplete code -unimplemented = "warn" # Mark unimplemented code - -# Code quality -dbg_macro = "warn" # Remove debug macros -print_stdout = "warn" # Avoid print to stdout -print_stderr = "warn" # Avoid print to stderr -missing_errors_doc = "warn" # Document error conditions -missing_panics_doc = "warn" # Document panic conditions - -# Performance -inefficient_to_string = "warn" -unnecessary_wraps = "warn" - -# Style consistency -enum_glob_use = "warn" -wildcard_imports = "warn" - -# Test quality -collapsible_if = "warn" -collapsible_else_if = "warn" -cognitive_complexity = "deny" # Keep functions simple - -# Deny by category (set explicit priority to avoid ambiguity) -correctness = { level = "deny", priority = -1 } # Critical errors -suspicious = { level = "deny", priority = -1 } -complexity = { level = "deny", priority = -1 } -perf = { level = "deny", priority = -1 } -``` - -**When adding new lints:** -- Justify why it improves code quality -- Test across the entire workspace -- Document in comments if non-obvious -- Use `warn` for style, `deny` for correctness - -### Build Profiles - -```toml -[profile.dev] # Fast compilation for development -[profile.test] # Test optimization -[profile.release] # Balanced for containers -[profile.production] # Maximum optimization (may fail in low memory) -``` - -**Don't modify profiles unless:** -- Compilation is too slow -- Runtime performance is problematic -- Memory constraints require changes - -### Per-Crate Cargo.toml - -Each crate (`syster-base`, `syster-cli`, `syster-lsp`) has its own `Cargo.toml`: - -```toml -[package] -name = "syster-base" -version.workspace = true # Use workspace version -edition.workspace = true # Use workspace edition - -[dependencies] -# Core dependencies -pest = "2.7" # Parser generator -# ... other deps - -[dev-dependencies] -# Test-only dependencies -rstest = "0.18" # Test fixtures -``` - -**Guidelines:** -- Use `workspace = true` for version, edition, authors, license -- Group dependencies logically (parser, semantic, LSP, etc.) -- Specify minimum required version -- Keep dev-dependencies separate -- Document non-obvious dependency choices - -## package.json (VS Code Extension) - -Located in `editors/vscode/package.json`, this defines: -- Extension metadata (name, version, description) -- VS Code engine compatibility -- Extension activation events -- Language definitions -- Configuration settings -- Commands and contributions - -**Key Sections:** - -### Extension Metadata -```json -{ - "name": "sysml-language-support", - "displayName": "SysML v2 Language Support", - "version": "0.1.0", - "engines": { - "vscode": "^1.85.0" // Minimum VS Code version - } -} -``` - -### Language Contributions -```json -{ - "contributes": { - "languages": [{ - "id": "sysml", - "extensions": [".sysml"], - "aliases": ["SysML", "sysml"] - }] - } -} -``` - -### Configuration Settings -```json -{ - "contributes": { - "configuration": { - "properties": { - "syster.stdlib.enabled": { - "type": "boolean", - "default": true, - "description": "Load SysML standard library on document open" - }, - "syster.stdlib.path": { - "type": "string", - "default": "", - "description": "Custom path to SysML standard library directory" - }, - "syster.lsp.path": { - "type": "string", - "default": "/workspaces/syster/target/release/syster-lsp", - "description": "Path to syster-lsp binary" - } - } - } - } -} -``` - -**When modifying package.json:** -- Validate JSON syntax -- Test activation events carefully (affects startup time) -- Keep settings prefixed with `sysml.` -- Provide clear descriptions for user-facing settings -- Update README.md if adding new features - -## tsconfig.json (TypeScript Configuration) - -Controls TypeScript compilation for the VS Code extension: - -```json -{ - "compilerOptions": { - "module": "commonjs", - "target": "ES2020", - "strict": true, - "outDir": "out" - } -} -``` - -**Guidelines:** -- Keep `strict: true` for type safety -- Don't lower target below ES2020 -- Use `outDir` for compiled output -- Enable source maps for debugging - -## Makefile - -Provides convenient commands for common tasks: - -```makefile -build: # Build the project -test: # Run tests -fmt: # Format code -lint: # Run clippy -run-guidelines: # Full validation pipeline -``` - -**Guidelines:** -- Keep targets simple and focused -- Use `.PHONY` for non-file targets -- Add helpful comments for each target -- Show progress for multi-step targets -- Don't duplicate functionality that's better in Cargo - -**When adding new targets:** -1. Choose a clear, descriptive name -2. Add to help text -3. Test that it works -4. Document any dependencies - -## .gitignore - -Controls which files Git tracks: - -**Current patterns:** -- `/target/` - Rust build artifacts -- `*.swp`, `*.swo` - Editor temporary files -- `Cargo.lock` in libraries (keep in binaries) -- `node_modules/` - npm dependencies -- `.DS_Store` - macOS files - -**When modifying:** -- Add patterns for new build tools -- Don't ignore files that should be committed -- Use comments to explain non-obvious patterns -- Test with `git status` to verify - -**Common additions:** -```gitignore -# IDE files -.vscode/settings.json # But keep .vscode/extensions.json -.idea/ - -# Build artifacts -/out/ -/dist/ -*.vsix - -# OS files -Thumbs.db -``` - -## Configuration Best Practices - -### Version Management -- Use workspace versioning for consistent releases -- Keep versions in sync across related crates -- Bump versions following semantic versioning: - - MAJOR: Breaking changes - - MINOR: New features, backward compatible - - PATCH: Bug fixes - -### Dependency Management -- Specify minimum required versions -- Avoid overly restrictive version constraints -- Keep dependencies up-to-date for security -- Review new dependencies carefully -- Document why non-obvious dependencies are needed - -### Testing Configuration Changes -Before committing configuration changes: -```bash -# Test Cargo changes -cargo check --workspace -cargo test --workspace -cargo clippy --workspace - -# Test package.json changes -cd editors/vscode -npm install -npm run compile - -# Test Makefile changes -make build -make test -make run-guidelines -``` - -### Common Pitfalls - -❌ **Don't:** -- Change profile settings without understanding impact -- Add dependencies without considering alternatives -- Modify linter rules to silence warnings (fix the code instead) -- Use wildcard version constraints (`*` or `>=x.0`) -- Add configuration options without documentation - -✅ **Do:** -- Test configuration changes thoroughly -- Document non-obvious settings -- Keep configurations minimal and focused -- Use workspace features to avoid duplication -- Follow established patterns in the codebase - -## File-Specific Guidelines - -### When to Edit Cargo.toml -- Adding or removing dependencies -- Updating dependency versions -- Changing build profile settings -- Adding new crate features -- Modifying metadata or lints - -### When to Edit package.json -- Adding new VS Code commands -- Adding configuration settings -- Updating extension metadata -- Changing activation events -- Adding language definitions - -### When to Edit Makefile -- Adding convenience commands -- Simplifying complex workflows -- Creating shortcuts for testing -- Adding validation pipelines -- Improving developer experience - -### When to Edit .gitignore -- New build tools generate artifacts -- IDE creates temporary files -- OS-specific files appear -- New dependency managers used -- Build output changes location - -## Validation - -After modifying configuration files: - -```bash -# Validate Cargo.toml syntax -cargo check - -# Validate package.json syntax -npm install --dry-run - -# Validate tsconfig.json -npx tsc --noEmit - -# Validate Makefile -make --dry-run - -# Verify .gitignore works -git status # Should show only tracked files -``` - -## Security Considerations - -- Never commit secrets or credentials -- Don't expose internal paths in public configs -- Be careful with git-ignored files (ensure secrets are ignored) -- Review dependencies for known vulnerabilities -- Keep dependencies up-to-date - -## Documentation - -When changing configuration files: -- Update README.md if user-facing features change -- Update CONTRIBUTING.md if developer workflow changes -- Document new configuration options -- Explain why changes were made in commit messages diff --git a/.github/instructions/copilot-instructions.md b/.github/instructions/copilot-instructions.md deleted file mode 100644 index 23e093f8..00000000 --- a/.github/instructions/copilot-instructions.md +++ /dev/null @@ -1,225 +0,0 @@ ---- -applyTo: '**/*.rs' ---- - -# Rust Development Instructions - -## Project-Specific Guidance - -### Architecture Understanding - READ FIRST - -Before making changes, familiarize yourself with the project architecture: - -- **[ARCHITECTURE.md](../../ARCHITECTURE.md)** - System design, three-phase pipeline, design decisions -- **[docs/CONTRIBUTING.md](../../docs/CONTRIBUTING.md)** - Development workflow, code conventions -- **[docs/SYSML_PRIMER.md](../../docs/SYSML_PRIMER.md)** - SysML v2 and KerML concepts - -### Key Project Patterns - -1. **Three-Phase Pipeline**: Parse (Pest) → Syntax (AST) → Semantic (Symbols + Graphs) - - **Never mix phases**: Don't add semantic logic to parser, don't parse in semantic analyzer - - Each phase has clear inputs and outputs (see ARCHITECTURE.md) - -2. **Symbol Table is Global**: AST nodes don't contain resolved references - - Symbols are stored in centralized `SymbolTable` - - Use qualified names (`QualifiedName`) for cross-file references - - Don't add back-references to AST nodes - -3. **Relationship Graphs**: Use separate graphs for relationships - - Don't store specialization/typing in Symbol enum - - Use `RelationshipGraph` methods for queries - - Graph operations are in `src/semantic/graph.rs` - -4. **Import Resolution**: Three-pass algorithm (see SEMANTIC_ANALYSIS.md) - - Pass 1: Namespace imports (`Package::*`) - - Pass 2: Member imports (`Package::Member`) - - Pass 3: Recursive imports (`Package::*::**`) - - Don't try to resolve imports in a single pass - -5. **Type Aliases**: Use documented type aliases for clarity - - `QualifiedName` for fully qualified names - - `SimpleName` for unqualified names - - `ScopeId` for scope identifiers - - `SourceFilePath` for file paths - -### Adding New Features - -**Adding a new SysML element type** (e.g., `concern def`): -1. Update grammar: `src/parser/sysml.pest` -2. Define AST struct: `src/language/sysml/syntax/types.rs` -3. Add to parent enum: `src/language/sysml/syntax/enums.rs` -4. Update populator: `src/language/sysml/populator.rs` -5. Add tests: `tests/semantic/sysml_parsing_tests.rs` - -**Adding a new semantic check**: -1. Add error kind: `src/semantic/error.rs` -2. Implement check: `src/semantic/analyzer.rs` -3. Call from `analyze()` method -4. Add tests: `tests/semantic/mod.rs` - -See ARCHITECTURE.md "Common Operations Guide" for detailed examples. - -### Module Organization - -``` -src/ -├── parser/ # Pest grammar files (kerml.pest, sysml.pest) -├── language/ # Language-specific AST and populators -│ ├── kerml/ # KerML foundation language -│ └── sysml/ # SysML v2 systems language -├── semantic/ # Semantic analysis (YOU ARE HERE most of the time) -│ ├── symbol_table.rs # Global symbol registry -│ ├── graph.rs # Relationship graphs -│ ├── resolver.rs # Name resolution -│ ├── analyzer.rs # Validation passes -│ └── workspace.rs # Multi-file coordination -└── project/ # Workspace loading (stdlib, user projects) -``` - -### Common Pitfalls - -❌ **Don't**: Add semantic logic to AST nodes -✅ **Do**: Keep AST immutable, use SymbolTable for semantic info - -❌ **Don't**: Resolve imports while building symbol table -✅ **Do**: Build symbol table first, then run three-pass import resolution - -❌ **Don't**: Store relationships in Symbol enum -✅ **Do**: Use RelationshipGraph for all relationships - -❌ **Don't**: Create circular dependencies between modules -✅ **Do**: Follow dependency flow: parser → language → semantic - -### Terminology (SysML/KerML Specific) - -- **Qualified Name**: Full path like `Package::Class::Feature` -- **Classifier**: KerML type that can have features (class, struct, etc.) -- **Definition**: SysML type (part def, port def, action def, etc.) -- **Usage**: SysML instance (part, port, action, etc.) -- **Feature**: Property or operation of a classifier -- **Specialization**: IS-A relationship (inheritance) -- **Typing**: INSTANCE-OF relationship -- **Subsetting**: REFINES relationship -- **Redefinition**: OVERRIDES relationship - -See SYSML_PRIMER.md for full glossary. - -## Test-Driven Development (TDD) - MANDATORY - -1. **Always write tests first** before implementing functionality - - Write a failing test that describes the desired behavior - - Run the test to confirm it fails for the right reason - - Implement the minimal code to make the test pass - - Refactor if needed while keeping tests green - -2. **Test execution is required** - - After writing a test, you MUST run it using `runTests` tool or `cargo test` - - Never proceed to implementation without seeing the test fail first - - Never claim completion without running tests to verify success - -## Incremental Development - STRICT LIMITS - -1. **One function at a time** - - Edit only ONE function per change cycle - - Complete the full TDD cycle (test → implement → verify) for that function - - Do not move to the next function until current one is complete and tested - -2. **Small, focused changes** - - Each change should be minimal and focused - - If a change requires modifying multiple functions, STOP and break it down - - Prefer multiple small commits over one large change - -3. **Restart trigger** - - If you find yourself making changes across multiple files simultaneously, STOP - - If you're modifying more than ~10-15 lines in a single function, STOP and reconsider - - If the scope is growing beyond the original small task, STOP and restart with a smaller goal - - Ask the user to break down the task into smaller pieces if needed - -## Rust Best Practices - -1. **Error handling** - - Use `Result` for fallible operations - - Use `Option` for values that may or may not exist - - Avoid `.unwrap()` and `.expect()` in production code (tests are okay) - - Propagate errors with `?` operator when appropriate - -2. **Ownership and borrowing** - - Prefer borrowing (`&T`, `&mut T`) over transferring ownership - - Use `.clone()` judiciously - only when necessary - - Leverage the borrow checker to ensure memory safety - -3. **Idiomatic Rust** - - Use iterator methods (`.map()`, `.filter()`, `.collect()`) over explicit loops when clearer - - Prefer pattern matching over if-let chains - - Use `derive` macros for common traits (Debug, Clone, PartialEq, etc.) - - Follow Rust naming conventions (snake_case for functions/variables, CamelCase for types) - -4. **Code organization** - - Keep modules focused and cohesive - - Use `mod.rs` or module files appropriately - - Make items private by default, expose only what's needed - - Document public APIs with doc comments (`///`) - -## Workflow Checklist - -Before each change: -- [ ] Have I identified ONE specific function to modify? -- [ ] Have I written a test for this change? -- [ ] Is this change small enough (< 15 lines in the function)? - -After each change: -- [ ] Did I run the tests? -- [ ] Did the tests pass? -- [ ] Is the code formatted with `cargo fmt`? -- [ ] Does `cargo clippy` pass without warnings? - -If you answer "no" to any of these, STOP and address it before proceeding. - -## Task Completion Workflow - MANDATORY - -After completing EACH todo/task, you MUST: - -1. **Complete the pre-commit checklist** (see `.github/instructions/chore.md`): - - Remove unnecessary documentation from each changed file - - Remove unused methods that don't have a TODO prefix - - Move tests into their own files if that hasn't been done - - Go through each changed file and add any missing tests - - Remove if-else match logic from tests - - Make tests more concrete (clear equals values rather than >=/<= comparisons) - - Address any TODOs added during the task - - Clean up any temporary notes - -2. **Run validation**: `make run-guidelines` or `cargo clippy && cargo test` - -3. **Commit changes**: `git add -A && git commit` with descriptive message - -**This is mandatory after every todo completion.** Do not skip these steps. - -Example commit message format: -``` -feat(component): brief description of what was done - -- Detail 1 -- Detail 2 -- Tests: X passing -``` - -## Development Commands - -- `cargo test` - Run all tests -- `cargo test ` - Run specific test -- `cargo fmt` - Format code -- `cargo clippy` - Run linter -- `cargo build` - Build project -- `cargo run` - Run the application - -## Red Flags - When to STOP - -⛔ You're editing multiple functions simultaneously -⛔ You're making changes across multiple modules at once -⛔ The diff is growing beyond 20-30 lines -⛔ You haven't run tests in the last change cycle -⛔ You're implementing before writing tests -⛔ You're unsure how to test the change - -**When you see these flags, pause and restart with a smaller scope.** diff --git a/.github/instructions/documentation.md b/.github/instructions/documentation.md deleted file mode 100644 index 59dd9ccf..00000000 --- a/.github/instructions/documentation.md +++ /dev/null @@ -1,420 +0,0 @@ ---- -applyTo: '**/*.md' ---- - -# Documentation Guidelines - -## Documentation Philosophy - -Documentation in Syster should be: -- **Clear and concise** - Get to the point quickly -- **Up-to-date** - Keep in sync with code changes -- **Actionable** - Provide concrete examples and commands -- **Well-organized** - Use consistent structure and hierarchy - -## Key Documentation Files - -### Repository Root -- **README.md** - Project overview, features, quick start, usage examples -- **ARCHITECTURE.md** - System design, core patterns, critical rules, common operations -- **LICENSE.md** - MIT license information - -### docs/ Directory -- **CONTRIBUTING.md** - Development workflow, TDD guidelines, code conventions -- **SYSML_PRIMER.md** - SysML v2 and KerML concepts for developers new to the domain -- **FUTURE_WORK.md** - Planned features and improvements - -### .github/ -- **copilot-instructions.md** - Repository-wide Copilot guidance -- **instructions/*.md** - Path-specific Copilot instructions - -### Per-Crate Documentation -- **crates/syster-base/README.md** - Core library documentation -- **crates/syster-cli/README.md** - CLI tool documentation -- **crates/syster-lsp/README.md** - LSP server documentation -- **editors/vscode/README.md** - VS Code extension documentation - -## Documentation Structure - -### For Feature Documentation - -Use this structure: -1. **Overview** - What is this feature? -2. **Purpose** - Why does it exist? -3. **Usage** - How to use it (with examples) -4. **Configuration** - Available options and settings -5. **Examples** - Real-world usage patterns -6. **Troubleshooting** - Common issues and solutions - -### For Architecture Documentation - -Use this structure: -1. **High-level overview** - System architecture diagram or description -2. **Key components** - Major modules and their responsibilities -3. **Data flow** - How information moves through the system -4. **Design decisions** - Why things are structured this way -5. **Constraints** - Important rules and invariants -6. **Common operations** - How to accomplish typical tasks - -### For Contributing Documentation - -Use this structure: -1. **Getting started** - Setup and prerequisites -2. **Development workflow** - How to develop features -3. **Testing guidelines** - How to write and run tests -4. **Code conventions** - Style and patterns to follow -5. **Pull request process** - How to submit changes -6. **Review checklist** - What reviewers look for - -## Markdown Style Guide - -### Headers -```markdown -# Top-level heading (only one per document) - -## Section heading - -### Subsection heading - -#### Minor section (use sparingly) -``` - -### Code Blocks -Always specify the language for syntax highlighting: - -````markdown -```rust -pub fn example() -> Result<(), Error> { - // Code here -} -``` - -```bash -cargo build -cargo test -``` -```` - -### Links -- Use descriptive link text: `[ARCHITECTURE.md](ARCHITECTURE.md)` -- Not: `[click here](ARCHITECTURE.md)` -- Prefer relative links within the repository -- Use absolute links for external resources - -### Lists -```markdown -- Unordered lists use dashes -- Keep items parallel in structure -- Use bullet points for related items - -1. Ordered lists use numbers -2. Use for sequential steps -3. Keep numbering consistent -``` - -### Emphasis -- Use **bold** for important terms and commands -- Use *italics* for emphasis -- Use `code formatting` for: - - File names and paths - - Commands and CLI arguments - - Function and variable names - - Code snippets inline - -### Tables -```markdown -| Feature | Status | Notes | -|---------|--------|-------| -| Parsing | ✅ Complete | Full grammar support | -| LSP | ✅ Complete | All major features | -``` - -### Admonitions -Use consistent symbols for different message types: - -```markdown -✅ **Good:** This is a good practice - -❌ **Don't:** This is a bad practice - -⚠️ **Warning:** This is important to know - -💡 **Tip:** This is a helpful suggestion - -📝 **Note:** This is additional information -``` - -## Documentation Updates - -### When to Update Documentation - -**Always update docs when:** -- Adding a new feature or API -- Changing existing behavior -- Adding new configuration options -- Modifying build or test commands -- Changing architecture or design patterns -- Fixing bugs that users might encounter - -**Where to update:** -- **README.md** - For user-facing changes -- **ARCHITECTURE.md** - For design pattern changes -- **CONTRIBUTING.md** - For workflow changes -- **Doc comments** - For API changes -- **Changelog** - For all notable changes - -### Documentation Review Checklist - -Before committing documentation changes: -- [ ] Spell check completed -- [ ] Grammar checked -- [ ] Links tested (especially relative links) -- [ ] Code examples tested and working -- [ ] Consistent with existing style -- [ ] No broken markdown formatting -- [ ] Clear and concise -- [ ] Actionable with concrete examples - -## Rust Doc Comments - -### Module Documentation -```rust -//! # Module Name -//! -//! Brief description of the module's purpose. -//! -//! ## Overview -//! More detailed explanation... -//! -//! ## Examples -//! ``` -//! use syster::module::Function; -//! -//! let result = Function::new(); -//! ``` -``` - -### Function Documentation -```rust -/// Resolves a qualified name to its symbol definition. -/// -/// # Arguments -/// -/// * `qualified_name` - Fully qualified name like "Package::Element" -/// -/// # Returns -/// -/// The symbol if found, or `None` if not found. -/// -/// # Examples -/// -/// ``` -/// let symbol = resolver.resolve_qualified("MyPackage::MyClass"); -/// ``` -/// -/// # Errors -/// -/// Returns `SemanticError::UndefinedSymbol` if the name cannot be resolved. -pub fn resolve_qualified(&self, name: &str) -> Result<&Symbol, SemanticError> { - // Implementation -} -``` - -### What to Document -✅ **Do document:** -- Public APIs (functions, structs, enums) -- Complex algorithms or non-obvious logic -- Error conditions and edge cases -- Invariants and preconditions -- Examples for non-trivial usage - -❌ **Don't document:** -- Self-explanatory code -- Trivial getters/setters -- Private implementation details (unless complex) -- Test functions (unless testing pattern is complex) - -## Examples and Code Snippets - -### In README.md -- Show the most common use cases first -- Include complete, runnable examples -- Show both simple and advanced usage -- Include output or expected results - -### In ARCHITECTURE.md -- Use pseudocode for abstract concepts -- Use actual code for concrete implementations -- Include before/after examples for design patterns -- Show both good and bad examples - -### In CONTRIBUTING.md -- Show complete workflows, not just fragments -- Include all necessary commands -- Explain why, not just how -- Provide troubleshooting steps - -## Keeping Documentation Current - -### During Development -- Update docs as you write code, not after -- Make doc updates part of your PR -- Update examples when APIs change -- Run `cargo doc` to check doc comments - -### During Code Review -- Review doc changes as carefully as code changes -- Ensure examples compile and work -- Check that changes are reflected in all relevant docs -- Verify links and references are correct - -### Periodic Audits -- Review documentation quarterly -- Remove outdated information -- Update examples with current best practices -- Consolidate or reorganize as needed - -## Special Documentation Types - -### API Documentation -- Generated from Rust doc comments -- Run `cargo doc --open` to view -- Should include examples and error conditions -- Links to related functions and types - -### Tutorial Documentation -- Step-by-step guides -- Start simple, gradually increase complexity -- Include complete working examples -- Explain concepts before showing code - -### Reference Documentation -- Comprehensive coverage of all features -- Organized by category or module -- Include all options and parameters -- Link to examples and tutorials - -## Documentation Tools - -### Checking Documentation -```bash -# Build and check Rust docs -cargo doc --no-deps --document-private-items - -# Check for broken links in Rust docs -cargo doc --no-deps - -# Spell check (if installed) -typos - -# Markdown linting (if installed) -markdownlint **/*.md -``` - -### Generating Documentation -```bash -# Generate and open Rust API docs -cargo doc --open - -# Generate docs for all crates -cargo doc --workspace -``` - -## Writing Style - -### Voice and Tone -- Use active voice: "The parser generates..." not "The AST is generated by..." -- Be direct and concise -- Use present tense: "The function returns..." not "The function will return..." -- Be friendly but professional - -### Technical Accuracy -- Be precise with terminology -- Use consistent names for concepts -- Define domain-specific terms -- Link to definitions when introducing terms - -### Audience Awareness -- **README.md** - Assumes basic knowledge, shows what's possible -- **CONTRIBUTING.md** - Assumes developer familiarity with Rust -- **ARCHITECTURE.md** - Assumes developer working on the codebase -- **SYSML_PRIMER.md** - Assumes no SysML knowledge - -## Common Documentation Pitfalls - -❌ **Don't:** -- Let documentation get out of sync with code -- Use vague language like "usually" or "might" -- Assume readers know internal terminology -- Skip examples for complex features -- Leave broken links or outdated screenshots -- Write documentation after the code is done - -✅ **Do:** -- Update docs with every code change -- Be specific and concrete -- Define terms when first used -- Provide multiple examples for different scenarios -- Test all links and examples -- Write docs alongside code - -## Templates - -### New Feature Documentation Template -```markdown -## Feature Name - -### Overview -Brief description of what the feature does. - -### Usage -Basic usage example with code. - -### Configuration -Available settings and their defaults. - -### Examples -#### Example 1: Basic Usage -Code and explanation. - -#### Example 2: Advanced Usage -Code and explanation. - -### Troubleshooting -Common issues and solutions. -``` - -### API Reference Template -```rust -/// Brief one-line description. -/// -/// More detailed explanation of what this does, -/// including any important behavior or edge cases. -/// -/// # Arguments -/// -/// * `param1` - Description of first parameter -/// * `param2` - Description of second parameter -/// -/// # Returns -/// -/// Description of return value. -/// -/// # Examples -/// -/// ``` -/// // Example usage -/// let result = function(arg1, arg2); -/// ``` -/// -/// # Errors -/// -/// Description of error conditions. -/// -/// # Panics -/// -/// Description of panic conditions (if any). -pub fn function(param1: Type1, param2: Type2) -> ReturnType { - // Implementation -} -``` diff --git a/.github/instructions/refactor-lsp.md b/.github/instructions/refactor-lsp.md deleted file mode 100644 index f0da8fa9..00000000 --- a/.github/instructions/refactor-lsp.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -applyTo: 'crates/syster-lsp/**/*.rs' ---- - -# LSP Backend Refactoring TODO - -## Goal -Refactor `backend.rs` (590 lines) into clean, modular structure following rust-analyzer pattern. -Target: ~100 line backend.rs, separate feature modules. - ---- - -## Phase 1: Move utilities to core (syster-base) - -### 1.1 Create text utilities module ✅ COMPLETE -- [x] Create `crates/syster-base/src/core/text_utils.rs` -- [x] Move `extract_word_at_cursor()` from backend.rs -- [x] Add helper: `is_word_character()` -- [x] Add helper: `find_word_boundaries()` -- [x] Export from `crates/syster-base/src/core/mod.rs` -- [x] Update backend.rs to use `syster::core::text_utils::extract_word_at_cursor` -- [x] Run tests: `cargo test` -- [x] BONUS: Integrated unicode-ident for proper Unicode identifier support -- [x] All 1866 tests passing - -### 1.2 Create text search module -- [x] ~~Create `crates/syster-base/src/core/text_search.rs`~~ **SKIPPED** -- [x] ~~Move `find_text_references()` logic (without LSP types)~~ **SKIPPED** -- [x] ~~Define `TextMatch { line: usize, col: usize, length: usize }`~~ **SKIPPED** -- [x] ~~Function: `find_text_occurrences(text: &str, search: &str) -> Vec`~~ **SKIPPED** -- [x] ~~Export from `crates/syster-base/src/core/mod.rs`~~ **SKIPPED** -- [x] ~~Update backend.rs to use core text search + convert to LSP Location~~ **SKIPPED** -- [x] ~~Run tests: `cargo test`~~ **SKIPPED** - -**Decision**: Keep text search in backend.rs as-is. LSP features only work on valid syntax. -This is simpler and more accurate. Can revisit if error-resilient parsing is needed later. - ---- - -## Phase 2: Move AST utilities to language module - -### 2.1 Create syntax query module -- [ ] Create `crates/syster-base/src/language/sysml/syntax/query.rs` -- [ ] Move `find_element_at_position()` from backend.rs -- [ ] Make it return `Option<(String, Span)>` (remove LSP dependency) -- [ ] Export from `crates/syster-base/src/language/sysml/syntax/mod.rs` -- [ ] Update backend.rs to use `syster::language::sysml::syntax::query::find_element_at_position` -- [ ] Run tests: `cargo test` - ---- - -## Phase 3: Create LSP feature modules (within syster-lsp) - -### 3.1 Create conversions module -- [ ] Create `crates/syster-lsp/src/conversions.rs` -- [ ] Move `span_to_lsp_range()` from backend.rs -- [ ] Add `lsp_position_to_core()` helper -- [ ] Add `text_match_to_location()` helper -- [ ] Export from `crates/syster-lsp/src/lib.rs` (if exists) or main.rs - -### 3.2 Create hover feature module -- [ ] Create `crates/syster-lsp/src/features/mod.rs` -- [ ] Create `crates/syster-lsp/src/features/hover.rs` -- [ ] Move from backend.rs: - - `format_rich_hover()` - - `format_symbol_declaration()` - - `get_symbol_relationships()` -- [ ] Function: `get_hover_info(workspace, file_path, position, document_texts) -> Option` -- [ ] Run tests: `cargo test` - -### 3.3 Create navigation feature module -- [ ] Create `crates/syster-lsp/src/features/navigation.rs` -- [ ] Extract from `get_definition()`: - - Function: `find_symbol_definition(workspace, file_path, position, document_texts) -> Option<(PathBuf, Span)>` -- [ ] Extract from `get_references()`: - - Function: `find_symbol_references(workspace, symbol_name, document_texts, include_declaration) -> Vec<(PathBuf, usize, usize)>` -- [ ] Run tests: `cargo test` - -### 3.4 Create search feature module -- [ ] Create `crates/syster-lsp/src/features/search.rs` -- [ ] Function: `find_symbol_at_position(workspace, file_path, position) -> Option<(String, Span)>` -- [ ] Function: `lookup_symbol_with_fallback(workspace, name) -> Option<&Symbol>` -- [ ] Run tests: `cargo test` - ---- - -## Phase 4: Create LSP handlers (protocol layer) - -### 4.1 Create handlers module structure -- [ ] Create `crates/syster-lsp/src/handlers/mod.rs` -- [ ] Create `crates/syster-lsp/src/handlers/hover.rs` -- [ ] Create `crates/syster-lsp/src/handlers/definition.rs` -- [ ] Create `crates/syster-lsp/src/handlers/references.rs` - -### 4.2 Implement hover handler -- [ ] Move hover LSP logic from `backend.get_hover()` to `handlers/hover.rs` -- [ ] Function: `handle_hover(backend: &Backend, uri: &Url, position: Position) -> Option` -- [ ] Use `features::hover::get_hover_info()` + `conversions::span_to_lsp_range()` -- [ ] Update `main.rs` to call handler -- [ ] Run tests: `cargo test` - -### 4.3 Implement definition handler -- [ ] Move definition LSP logic from `backend.get_definition()` to `handlers/definition.rs` -- [ ] Function: `handle_goto_definition(backend: &Backend, uri: &Url, position: Position) -> Option` -- [ ] Use `features::navigation::find_symbol_definition()` + conversions -- [ ] Update `main.rs` to call handler -- [ ] Run tests: `cargo test` - -### 4.4 Implement references handler -- [ ] Move references LSP logic from `backend.get_references()` to `handlers/references.rs` -- [ ] Function: `handle_references(backend: &Backend, uri: &Url, position: Position, include_decl: bool) -> Option>` -- [ ] Use `features::navigation::find_symbol_references()` + conversions -- [ ] Update `main.rs` to call handler -- [ ] Run tests: `cargo test` - ---- - -## Phase 5: Simplify Backend - -### 5.1 Clean up backend.rs -- [ ] Remove all moved functions -- [ ] Keep only: - - `struct Backend` with state (workspace, parse_errors, document_texts) - - `new()` - - `workspace()` accessor - - `parse_and_update()` - - `open_document()`, `change_document()`, `close_document()` - - `get_diagnostics()` -- [ ] Target: ~100 lines -- [ ] Run tests: `cargo test` - -### 5.2 Update main.rs -- [ ] Import handlers: `use handlers::{hover, definition, references}` -- [ ] Update `hover()` to call `hover::handle_hover()` -- [ ] Update `goto_definition()` to call `definition::handle_goto_definition()` -- [ ] Update `references()` to call `references::handle_references()` -- [ ] Run tests: `cargo test` - ---- - -## Phase 6: Final cleanup - -### 6.1 Update tests -- [ ] Move tests from `backend/tests.rs` to appropriate feature test files: - - `features/hover/tests.rs` - - `features/navigation/tests.rs` - - `features/search/tests.rs` -- [ ] Keep integration-style tests in `backend/tests.rs` -- [ ] Run all tests: `cargo test` - -### 6.2 Documentation -- [ ] Add module-level docs to each new module -- [ ] Update ARCHITECTURE.md with new structure -- [ ] Run `cargo doc` to verify - -### 6.3 Final validation -- [ ] Run `cargo clippy` -- [ ] Run `cargo fmt` -- [ ] Run full test suite: `cargo test` -- [ ] Verify line counts: - - `backend.rs`: ~100 lines - - Total LSP crate: more organized, similar total lines -- [ ] Commit: "refactor: Restructure LSP into modular architecture" - ---- - -## Success Criteria - -- [x] All tests passing -- [x] No clippy warnings -- [x] `backend.rs` < 150 lines -- [x] Clear separation: core utils / language utils / LSP features / LSP protocol -- [x] Each module has focused responsibility -- [x] IDE features can be tested without LSP protocol - ---- - -## Notes - -- Work incrementally - test after each phase -- Keep all tests passing throughout -- Each phase should be a separate commit -- Follow the chore.md checklist after each phase diff --git a/.github/instructions/vscode-extension.md b/.github/instructions/vscode-extension.md deleted file mode 100644 index fa13c72b..00000000 --- a/.github/instructions/vscode-extension.md +++ /dev/null @@ -1,227 +0,0 @@ ---- -applyTo: 'editors/vscode/**/*.{ts,js,json}' ---- - -# VS Code Extension Development Instructions - -## Extension Overview - -The Syster VS Code extension provides IDE integration for SysML v2 and KerML languages. It communicates with the syster-lsp Language Server Protocol implementation to provide rich editing features. - -## Technology Stack - -- **Language:** TypeScript -- **Build System:** npm, tsc (TypeScript compiler) -- **Extension API:** VS Code Extension API -- **LSP Client:** vscode-languageclient package -- **Packaging:** vsce (Visual Studio Code Extension Manager) - -## Project Structure - -``` -editors/vscode/ -├── client/ -│ └── src/ -│ ├── extension.ts # Main extension entry point -│ ├── client.ts # LSP client setup -│ └── server-locator.ts # Server path detection -├── package.json # Extension manifest and configuration -├── tsconfig.json # TypeScript configuration -└── README.md # Extension documentation -``` - -## Development Guidelines - -### VS Code Extension Best Practices - -1. **Activation Events** - - Use precise activation events to minimize extension load time - - Current activation: on SysML/KerML file opening - - Don't activate on VS Code startup unless absolutely necessary - -2. **Configuration** - - All user-facing settings should be in `package.json` under `contributes.configuration` - - Use clear setting names with the `sysml.` prefix - - Provide sensible defaults - - Document each setting clearly - -3. **Language Server Integration** - - Use `vscode-languageclient` for LSP communication - - Handle server crashes and restarts gracefully - - Provide user feedback for server status - - Support custom server path configuration for development - -4. **Error Handling** - - Catch and log all errors appropriately - - Show user-friendly error messages for critical failures - - Don't crash the extension on recoverable errors - - Use VS Code's output channel for detailed logs - -### TypeScript Guidelines - -```typescript -// ✅ Good: Use async/await for asynchronous operations -async function startServer(): Promise { - try { - await client.start(); - } catch (error) { - vscode.window.showErrorMessage(`Failed to start LSP: ${error}`); - } -} - -// ✅ Good: Use proper TypeScript types -interface ServerConfig { - stdlibEnabled: boolean; - stdlibPath: string | undefined; -} - -// ✅ Good: Use VS Code API properly -const config = vscode.workspace.getConfiguration('syster'); -const enabled = config.get('stdlib.enabled', true); - -// ❌ Bad: Don't use 'any' type -const config: any = vscode.workspace.getConfiguration(); // Don't do this - -// ❌ Bad: Don't ignore errors silently -client.start().catch(() => {}); // Don't do this -``` - -### Extension Configuration - -Current extension settings (in `package.json`): -- `syster.stdlib.enabled` - Enable/disable standard library loading -- `syster.stdlib.path` - Custom path to standard library files -- `syster.lsp.path` - Custom path to syster-lsp server binary -- `syster.lsp.trace.server` - Trace LSP communication for debugging - -### Testing the Extension - -```bash -# Install dependencies -cd editors/vscode -npm install - -# Compile TypeScript -npm run compile - -# Watch mode for development -npm run watch - -# Package the extension -npm run package -``` - -To test locally: -1. Open the `editors/vscode` folder in VS Code -2. Press F5 to launch Extension Development Host -3. Open a `.sysml` or `.kerml` file to activate the extension -4. Check "Output" panel → "Syster LSP" for logs - -### Build & Deployment - -```bash -# Compile TypeScript -npm run compile - -# Package extension (.vsix file) -npm run package - -# Install locally for testing -code --install-extension syster-*.vsix -``` - -### Code Organization - -- **client/src/extension.ts** - Main entry point with `activate()` and `deactivate()` -- **client/src/client.ts** - LSP client setup and configuration -- **client/src/server-locator.ts** - Server binary path detection -- Keep extension logic simple - delegate to LSP server -- Configuration management should be centralized -- Use VS Code's workspace configuration API - -### Common Tasks - -**Adding a new configuration setting:** -1. Add to `contributes.configuration` in `package.json` with `syster.` prefix -2. Document with clear description and default value -3. Read in extension code using `vscode.workspace.getConfiguration('syster')` -4. Pass to LSP server if needed via initialization options - -**Adding a new command:** -1. Define in `contributes.commands` in `package.json` -2. Register in `extension.ts` with `vscode.commands.registerCommand()` -3. Add to activation events if needed - -**Updating LSP client:** -1. Modify initialization options in `extension.ts` -2. Ensure server supports the new options -3. Test communication between client and server - -### Debugging - -Enable detailed logs: -```typescript -// In extension.ts, add to client options: -const clientOptions: LanguageClientOptions = { - outputChannel: window.createOutputChannel('Syster LSP'), - traceOutputChannel: window.createOutputChannel('Syster LSP Trace'), -}; -``` - -Check logs in: -- Output panel → "Syster LSP" (general logs) -- Output panel → "Syster LSP Trace" (detailed protocol trace) - -### Performance Considerations - -- Minimize synchronous operations in activation -- Use lazy initialization where possible -- Avoid blocking the main extension thread -- Let the LSP server handle expensive computations - -### Security - -- Don't bundle sensitive data or credentials -- Validate all user-provided paths before using -- Use VS Code's secure storage API for any secrets -- Don't execute arbitrary user-provided code - -### Integration with syster-lsp - -The extension communicates with `crates/syster-lsp/` which provides: -- Document synchronization -- Diagnostics (parse errors) -- Code completion -- Go to definition -- Find references -- Hover information -- Symbol outline -- Code formatting -- Rename symbol -- Semantic tokens (syntax highlighting) -- Inlay hints -- Folding ranges -- Selection ranges - -Ensure the extension properly: -1. Starts and stops the server lifecycle -2. Handles server crashes/restarts -3. Passes configuration to server -4. Displays diagnostics to user -5. Registers all supported LSP features - -## VS Code Extension Manifest - -Key sections in `package.json`: -- `engines.vscode` - Minimum VS Code version -- `activationEvents` - When to activate the extension -- `contributes.languages` - Language definitions (SysML, KerML) -- `contributes.grammars` - TextMate grammars for syntax highlighting -- `contributes.configuration` - Extension settings -- `main` - Entry point file - -## Related Documentation - -- [VS Code Extension API](https://code.visualstudio.com/api) -- [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) -- [vscode-languageclient](https://github.com/microsoft/vscode-languageserver-node) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8322353a..a0a5787f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,6 @@ # Meta-repo CI workflow # This repo is a meta-repository that aggregates submodules. -# Each submodule (syster-base, syster-cli, syster-lsp) has its own CI. +# Each submodule has its own CI workflow. # This workflow validates that submodules are properly configured. name: CI @@ -26,12 +26,15 @@ jobs: git submodule status echo "All submodules are properly configured." - - name: Validate Cargo.toml + - name: Validate structure run: | - echo "Checking Cargo.toml..." - if grep -q 'members = \[\]' Cargo.toml; then - echo "✓ Meta-repo workspace configured correctly (no members)" - else - echo "✗ Expected meta-repo with no workspace members" - exit 1 - fi + echo "Checking repository structure..." + for dir in base cli language-server language-client modeller viewer diagram-core diagram-ui pipelines; do + if [ -d "$dir" ]; then + echo "✓ $dir exists" + else + echo "✗ $dir missing" + exit 1 + fi + done + echo "All expected directories present." diff --git a/.github/workflows/copilot-auto-retry.yml b/.github/workflows/copilot-auto-retry.yml deleted file mode 100644 index 093071c6..00000000 --- a/.github/workflows/copilot-auto-retry.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Auto-notify Copilot on CI Failure - -on: - workflow_run: - workflows: ["CI"] - types: [completed] - -jobs: - notify-copilot: - if: github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.event == 'pull_request' - runs-on: ubuntu-latest - permissions: - pull-requests: write - actions: read - contents: read - - steps: - - name: Get PR number - id: pr - uses: actions/github-script@v7 - with: - script: | - try { - const pulls = await github.rest.pulls.list({ - owner: context.repo.owner, - repo: context.repo.repo, - head: `${github.event.workflow_run.head_repository.owner.login}:${github.event.workflow_run.head_branch}`, - state: 'open' - }); - - if (pulls.data.length === 0) { - console.log('No open PR found for this branch'); - return 'none'; - } - - return pulls.data[0].number.toString(); - } catch (error) { - console.error('Error fetching PR:', error); - return 'none'; - } - result-encoding: string - - - name: Check if already notified - if: steps.pr.outputs.result != 'none' - id: check-notified - uses: actions/github-script@v7 - with: - script: | - try { - const prNumber = parseInt('${{ steps.pr.outputs.result }}'); - const comments = await github.rest.issues.listComments({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: prNumber, - per_page: 5, - sort: 'created', - direction: 'desc', - }); - - // Check if Copilot was already notified in the most recent 5 comments - const alreadyNotified = comments.data.some(comment => - comment.body.includes('@copilot') && - comment.body.includes('CI pipeline failed') - ); - - return alreadyNotified ? 'true' : 'false'; - } catch (error) { - console.error('Error checking for duplicate notifications:', error); - return 'false'; - } - result-encoding: string - - - name: Get workflow run logs URL - if: steps.pr.outputs.result != 'none' && steps.check-notified.outputs.result == 'false' - id: logs - uses: actions/github-script@v7 - with: - script: | - const runId = github.event.workflow_run.id; - const url = `https://github.com/${context.repo.owner}/${context.repo.repo}/actions/runs/${runId}`; - return url; - result-encoding: string - - - name: Comment on PR - if: steps.pr.outputs.result != 'none' && steps.check-notified.outputs.result == 'false' - uses: actions/github-script@v7 - with: - script: | - try { - const prNumber = parseInt('${{ steps.pr.outputs.result }}'); - const logsUrl = '${{ steps.logs.outputs.result }}'; - - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: prNumber, - body: `@copilot The CI pipeline failed. Please analyze the errors and fix the issues.\n\n📋 [View failed workflow run](${logsUrl})` - }); - } catch (error) { - console.error('Error posting comment:', error); - throw error; - } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7dc3465a..7ac8cfc0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -37,6 +37,7 @@ jobs: echo "version=$VERSION" >> $GITHUB_OUTPUT echo "Release version: $VERSION" + # Rust binaries - name: Download syster-lsp binaries uses: dawidd6/action-download-artifact@v3 with: @@ -61,6 +62,68 @@ jobs: search_artifacts: true continue-on-error: true + # VS Code extensions + - name: Download language-client extension + uses: dawidd6/action-download-artifact@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repo: jade-codes/syster-vscode-lsp + workflow: ci.yml + branch: main + name: vsix-* + path: artifacts/language-client + search_artifacts: true + continue-on-error: true + + - name: Download modeller extension + uses: dawidd6/action-download-artifact@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repo: jade-codes/syster-vscode-modeller + workflow: ci.yml + branch: main + name: vsix-* + path: artifacts/modeller + search_artifacts: true + continue-on-error: true + + - name: Download viewer extension + uses: dawidd6/action-download-artifact@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repo: jade-codes/syster-vscode-viewer + workflow: ci.yml + branch: main + name: vsix-* + path: artifacts/viewer + search_artifacts: true + continue-on-error: true + + # npm packages + - name: Download diagram-core package + uses: dawidd6/action-download-artifact@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repo: jade-codes/syster-diagram-core + workflow: ci.yml + branch: main + name: npm-package + path: artifacts/diagram-core + search_artifacts: true + continue-on-error: true + + - name: Download diagram-ui package + uses: dawidd6/action-download-artifact@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + repo: jade-codes/syster-diagram-ui + workflow: ci.yml + branch: main + name: npm-package + path: artifacts/diagram-ui + search_artifacts: true + continue-on-error: true + - name: List collected artifacts run: | echo "=== Collected Artifacts ===" @@ -68,38 +131,10 @@ jobs: - name: Package artifacts run: | - VERSION="${{ steps.version.outputs.version }}" mkdir -p release - # Package syster-lsp binaries - if [ -d "artifacts/syster-lsp" ]; then - for dir in artifacts/syster-lsp/binaries-*; do - if [ -d "$dir" ]; then - target=$(basename "$dir" | sed 's/binaries-//') - echo "Packaging syster-lsp for $target" - cd "$dir" - if [ -f "syster-lsp" ] || [ -f "syster-lsp.exe" ]; then - tar -czf "../../release/syster-lsp-${VERSION}-${target}.tar.gz" * - fi - cd - > /dev/null - fi - done - fi - - # Package syster-cli binaries - if [ -d "artifacts/syster-cli" ]; then - for dir in artifacts/syster-cli/binaries-*; do - if [ -d "$dir" ]; then - target=$(basename "$dir" | sed 's/binaries-//') - echo "Packaging syster-cli for $target" - cd "$dir" - if [ -f "syster" ] || [ -f "syster.exe" ]; then - tar -czf "../../release/syster-cli-${VERSION}-${target}.tar.gz" * - fi - cd - > /dev/null - fi - done - fi + # Copy all artifacts to release folder + find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.vsix" -o -name "*.tgz" \) -exec cp {} release/ \; 2>/dev/null || true ls -la release/ || echo "No packages created" @@ -141,13 +176,28 @@ jobs: body: | ## Syster ${{ steps.version.outputs.version }} - This release includes: + This release includes all Syster components: + + ### Binaries - **syster-cli**: Command-line tool for SysML v2 analysis - **syster-lsp**: Language Server Protocol implementation + ### VS Code Extensions + - **syster-lsp**: Language support (syntax, diagnostics, completion) + - **syster-modeller**: Visual diagram editor + - **syster-viewer**: Read-only diagram viewer + + ### npm Packages + - **@syster/diagram-core**: Diagram types and layout utilities + - **@syster/diagram-ui**: React Flow diagram components + ### Installation - Download the appropriate binary for your platform and extract it. + **CLI/LSP**: Download the appropriate binary for your platform and extract it. + + **VS Code Extensions**: Install the `.vsix` files via `Extensions: Install from VSIX...` + + **npm Packages**: `npm install @syster/diagram-core @syster/diagram-ui` ### Platforms - Linux (x86_64) diff --git a/.gitmodules b/.gitmodules index 3c0099bf..7b02c25e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,27 +1,27 @@ [submodule "pipelines"] path = pipelines url = https://github.com/jade-codes/syster-pipelines.git -[submodule "core"] - path = core +[submodule "base"] + path = base url = https://github.com/jade-codes/syster-base.git [submodule "cli"] path = cli url = https://github.com/jade-codes/syster-cli.git -[submodule "lsp/server"] - path = lsp/server +[submodule "language-server"] + path = language-server url = https://github.com/jade-codes/syster-lsp.git -[submodule "lsp/vscode"] - path = lsp/vscode +[submodule "language-client"] + path = language-client url = https://github.com/jade-codes/syster-vscode-lsp.git -[submodule "modeller/core"] - path = modeller/core +[submodule "diagram-core"] + path = diagram-core url = https://github.com/jade-codes/syster-diagram-core.git -[submodule "modeller/ui"] - path = modeller/ui +[submodule "diagram-ui"] + path = diagram-ui url = https://github.com/jade-codes/syster-diagram-ui.git -[submodule "modeller/vscode"] - path = modeller/vscode +[submodule "modeller"] + path = modeller url = https://github.com/jade-codes/syster-vscode-modeller.git -[submodule "viewer/vscode"] - path = viewer/vscode +[submodule "viewer"] + path = viewer url = https://github.com/jade-codes/syster-vscode-viewer.git diff --git a/Cargo.lock b/Cargo.lock deleted file mode 100644 index bf76b3ee..00000000 --- a/Cargo.lock +++ /dev/null @@ -1,1757 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "aho-corasick" -version = "1.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301" -dependencies = [ - "memchr", -] - -[[package]] -name = "anstream" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "is_terminal_polyfill", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78" - -[[package]] -name = "anstyle-parse" -version = "0.2.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40c48f72fd53cd289104fc64099abca73db4166ad86ea0b4341abe65af83dadc" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "291e6a250ff86cd4a820112fb8898808a366d8f9f58ce16d1f538353ad55747d" -dependencies = [ - "anstyle", - "once_cell_polyfill", - "windows-sys 0.61.2", -] - -[[package]] -name = "anyhow" -version = "1.0.100" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" - -[[package]] -name = "async-lsp" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c1c85c4bb41706ad1f8338e39fa725a24bc642be41140a38d818c93b9ae91f5" -dependencies = [ - "futures", - "lsp-types", - "pin-project-lite", - "rustix", - "serde", - "serde_json", - "thiserror", - "tokio", - "tower-layer", - "tower-service", - "tracing", - "waitpid-any", -] - -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" - -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3" - -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bytes" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35204fbdc0b3f4446b89fc1ac2cf84a8a68971995d0bf2e925ec7cd960f9cb3" - -[[package]] -name = "cfg-if" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801" - -[[package]] -name = "clap" -version = "4.5.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6e6ff9dcd79cff5cd969a17a545d79e84ab086e444102a591e288a8aa3ce394" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.5.54" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa42cf4d2b7a41bc8f663a7cab4031ebafa1bf3875705bfaf8466dc60ab52c00" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.5.49" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0b5487afeab2deb2ff4e03a807ad1a03ac532ff5a2cee5d86884440c7f7671" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.7.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3e64b0cc0439b12df2fa678eae89a1c56a529fd067a9115f7827f1fffd22b32" - -[[package]] -name = "colorchoice" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75" - -[[package]] -name = "countme" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" - -[[package]] -name = "cpufeatures" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" - -[[package]] -name = "crypto-common" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78c8292055d1c1df0cce5d180393dc8cce0abec0a7102adb6c7b1eef6016d60a" -dependencies = [ - "generic-array", - "typenum", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - -[[package]] -name = "displaydoc" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "either" -version = "1.15.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" - -[[package]] -name = "equivalent" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" - -[[package]] -name = "errno" -version = "0.3.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" -dependencies = [ - "libc", - "windows-sys 0.61.2", -] - -[[package]] -name = "fastrand" -version = "2.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" - -[[package]] -name = "fnv" -version = "1.0.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" - -[[package]] -name = "form_urlencoded" -version = "1.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb4cb245038516f5f85277875cdaa4f7d2c9a0fa0468de06ed190163b1581fcf" -dependencies = [ - "percent-encoding", -] - -[[package]] -name = "from-pest" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6608105256838dc3a7586083a8e4485ca6533bf1a39c3ed327e9de16a39e7f" -dependencies = [ - "log", - "pest", - "void", -] - -[[package]] -name = "futures" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" -dependencies = [ - "futures-channel", - "futures-core", - "futures-executor", - "futures-io", - "futures-sink", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-channel" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" -dependencies = [ - "futures-core", - "futures-sink", -] - -[[package]] -name = "futures-core" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" - -[[package]] -name = "futures-executor" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" -dependencies = [ - "futures-core", - "futures-task", - "futures-util", -] - -[[package]] -name = "futures-io" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" - -[[package]] -name = "futures-macro" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "futures-sink" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" - -[[package]] -name = "futures-task" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" - -[[package]] -name = "futures-timer" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" - -[[package]] -name = "futures-util" -version = "0.3.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" -dependencies = [ - "futures-channel", - "futures-core", - "futures-io", - "futures-macro", - "futures-sink", - "futures-task", - "memchr", - "pin-project-lite", - "pin-utils", - "slab", -] - -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - -[[package]] -name = "getrandom" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" -dependencies = [ - "cfg-if", - "libc", - "r-efi", - "wasip2", -] - -[[package]] -name = "glob" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" - -[[package]] -name = "hashbrown" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" - -[[package]] -name = "heck" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" - -[[package]] -name = "icu_collections" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c6b649701667bbe825c3b7e6388cb521c23d88644678e83c0c4d0a621a34b43" -dependencies = [ - "displaydoc", - "potential_utf", - "yoke", - "zerofrom", - "zerovec", -] - -[[package]] -name = "icu_locale_core" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edba7861004dd3714265b4db54a3c390e880ab658fec5f7db895fae2046b5bb6" -dependencies = [ - "displaydoc", - "litemap", - "tinystr", - "writeable", - "zerovec", -] - -[[package]] -name = "icu_normalizer" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f6c8828b67bf8908d82127b2054ea1b4427ff0230ee9141c54251934ab1b599" -dependencies = [ - "icu_collections", - "icu_normalizer_data", - "icu_properties", - "icu_provider", - "smallvec", - "zerovec", -] - -[[package]] -name = "icu_normalizer_data" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7aedcccd01fc5fe81e6b489c15b247b8b0690feb23304303a9e560f37efc560a" - -[[package]] -name = "icu_properties" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "020bfc02fe870ec3a66d93e677ccca0562506e5872c650f893269e08615d74ec" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_properties_data", - "icu_provider", - "zerotrie", - "zerovec", -] - -[[package]] -name = "icu_properties_data" -version = "2.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "616c294cf8d725c6afcd8f55abc17c56464ef6211f9ed59cccffe534129c77af" - -[[package]] -name = "icu_provider" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85962cf0ce02e1e0a629cc34e7ca3e373ce20dda4c4d7294bbd0bf1fdb59e614" -dependencies = [ - "displaydoc", - "icu_locale_core", - "writeable", - "yoke", - "zerofrom", - "zerotrie", - "zerovec", -] - -[[package]] -name = "idna" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b0875f23caa03898994f6ddc501886a45c7d3d62d04d2d90788d47be1b1e4de" -dependencies = [ - "idna_adapter", - "smallvec", - "utf8_iter", -] - -[[package]] -name = "idna_adapter" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3acae9609540aa318d1bc588455225fb2085b9ed0c4f6bd0d9d5bcd86f1a0344" -dependencies = [ - "icu_normalizer", - "icu_properties", -] - -[[package]] -name = "indexmap" -version = "2.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" -dependencies = [ - "equivalent", - "hashbrown 0.16.1", -] - -[[package]] -name = "is_terminal_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6cb138bb79a146c1bd460005623e142ef0181e3d0219cb493e02f7d08a35695" - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" - -[[package]] -name = "lazy_static" -version = "1.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" - -[[package]] -name = "libc" -version = "0.2.180" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" - -[[package]] -name = "linux-raw-sys" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039" - -[[package]] -name = "litemap" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6373607a59f0be73a39b6fe456b8192fcc3585f602af20751600e974dd455e77" - -[[package]] -name = "lock_api" -version = "0.4.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" -dependencies = [ - "scopeguard", -] - -[[package]] -name = "log" -version = "0.4.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897" - -[[package]] -name = "logos" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff472f899b4ec2d99161c51f60ff7075eeb3097069a36050d8037a6325eb8154" -dependencies = [ - "logos-derive", -] - -[[package]] -name = "logos-codegen" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "192a3a2b90b0c05b27a0b2c43eecdb7c415e29243acc3f89cc8247a5b693045c" -dependencies = [ - "beef", - "fnv", - "lazy_static", - "proc-macro2", - "quote", - "regex-syntax", - "rustc_version", - "syn", -] - -[[package]] -name = "logos-derive" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "605d9697bcd5ef3a42d38efc51541aa3d6a4a25f7ab6d1ed0da5ac632a26b470" -dependencies = [ - "logos-codegen", -] - -[[package]] -name = "lsp-types" -version = "0.95.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e34d33a8e9b006cd3fc4fe69a921affa097bae4bb65f76271f4644f9a334365" -dependencies = [ - "bitflags 1.3.2", - "serde", - "serde_json", - "serde_repr", - "url", -] - -[[package]] -name = "memchr" -version = "2.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" - -[[package]] -name = "mio" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc" -dependencies = [ - "libc", - "wasi", - "windows-sys 0.61.2", -] - -[[package]] -name = "nu-ansi-term" -version = "0.50.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" -dependencies = [ - "windows-sys 0.61.2", -] - -[[package]] -name = "once_cell" -version = "1.21.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" - -[[package]] -name = "once_cell_polyfill" -version = "1.70.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "384b8ab6d37215f3c5301a95a4accb5d64aa607f1fcb26a11b5303878451b4fe" - -[[package]] -name = "parking_lot" -version = "0.12.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" -dependencies = [ - "lock_api", - "parking_lot_core", -] - -[[package]] -name = "parking_lot_core" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" -dependencies = [ - "cfg-if", - "libc", - "redox_syscall", - "smallvec", - "windows-link", -] - -[[package]] -name = "percent-encoding" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b4f627cb1b25917193a259e49bdad08f671f8d9708acfd5fe0a8c1455d87220" - -[[package]] -name = "pest" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9eb05c21a464ea704b53158d358a31e6425db2f63a1a7312268b05fe2b75f7" -dependencies = [ - "memchr", - "ucd-trie", -] - -[[package]] -name = "pest-ast" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0348ed5e4fdd30965042a0fcafe9702f7ef5e71f3f1e12404e8ed3b0ebfb3b" -dependencies = [ - "itertools", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_derive" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f9dbced329c441fa79d80472764b1a2c7e57123553b8519b36663a2fb234ed" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bb96d5051a78f44f43c8f712d8e810adb0ebf923fc9ed2655a7f66f63ba8ee5" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "602113b5b5e8621770cfd490cfd90b9f84ab29bd2b0e49ad83eb6d186cef2365" -dependencies = [ - "pest", - "sha2", -] - -[[package]] -name = "pin-project-lite" -version = "0.2.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" - -[[package]] -name = "pin-utils" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" - -[[package]] -name = "potential_utf" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b73949432f5e2a09657003c25bca5e19a0e9c84f8058ca374f49e0ebe605af77" -dependencies = [ - "zerovec", -] - -[[package]] -name = "proc-macro-crate" -version = "3.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "219cb19e96be00ab2e37d6e299658a0cfa83e52429179969b0f0121b4ac46983" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro2" -version = "1.0.105" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.43" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "r-efi" -version = "5.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" - -[[package]] -name = "rayon" -version = "1.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "redox_syscall" -version = "0.5.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" -dependencies = [ - "bitflags 2.10.0", -] - -[[package]] -name = "regex" -version = "1.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" -dependencies = [ - "aho-corasick", - "memchr", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "regex-automata" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" -dependencies = [ - "aho-corasick", - "memchr", - "regex-syntax", -] - -[[package]] -name = "regex-syntax" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" - -[[package]] -name = "relative-path" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" - -[[package]] -name = "rowan" -version = "0.16.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "417a3a9f582e349834051b8a10c8d71ca88da4211e4093528e36b9845f6b5f21" -dependencies = [ - "countme", - "hashbrown 0.14.5", - "rustc-hash", - "text-size", -] - -[[package]] -name = "rstest" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fc39292f8613e913f7df8fa892b8944ceb47c247b78e1b1ae2f09e019be789d" -dependencies = [ - "futures-timer", - "futures-util", - "rstest_macros", - "rustc_version", -] - -[[package]] -name = "rstest_macros" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f168d99749d307be9de54d23fd226628d99768225ef08f6ffb52e0182a27746" -dependencies = [ - "cfg-if", - "glob", - "proc-macro-crate", - "proc-macro2", - "quote", - "regex", - "relative-path", - "rustc_version", - "syn", - "unicode-ident", -] - -[[package]] -name = "rustc-hash" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - -[[package]] -name = "rustix" -version = "1.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34" -dependencies = [ - "bitflags 2.10.0", - "errno", - "libc", - "linux-raw-sys", - "windows-sys 0.61.2", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "semver" -version = "1.0.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" - -[[package]] -name = "serde" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" -dependencies = [ - "serde_core", - "serde_derive", -] - -[[package]] -name = "serde_core" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.228" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "serde_json" -version = "1.0.149" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" -dependencies = [ - "itoa", - "memchr", - "serde", - "serde_core", - "zmij", -] - -[[package]] -name = "serde_repr" -version = "0.1.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "175ee3e80ae9982737ca543e96133087cbd9a485eecc3bc4de9c1a37b47ea59c" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "sha2" -version = "0.10.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - -[[package]] -name = "signal-hook-registry" -version = "1.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b" -dependencies = [ - "errno", - "libc", -] - -[[package]] -name = "slab" -version = "0.4.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a2ae44ef20feb57a68b23d846850f861394c2e02dc425a50098ae8c90267589" - -[[package]] -name = "smallvec" -version = "1.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" - -[[package]] -name = "socket2" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" -dependencies = [ - "libc", - "windows-sys 0.60.2", -] - -[[package]] -name = "stable_deref_trait" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" - -[[package]] -name = "strsim" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" - -[[package]] -name = "syn" -version = "2.0.114" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "synstructure" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "syster-base" -version = "0.1.8-alpha" -source = "git+https://github.com/jade-codes/syster-base.git#fc453b6b5e07f089c5771cd5586d67660e089917" -dependencies = [ - "from-pest", - "pest", - "pest-ast", - "pest_derive", - "rayon", - "rowan", - "unicode-ident", -] - -[[package]] -name = "syster-base" -version = "0.1.11-alpha" -dependencies = [ - "from-pest", - "logos", - "once_cell", - "pest", - "pest-ast", - "pest_derive", - "rayon", - "rowan", - "rstest", - "tempfile", - "tokio-util", - "unicode-ident", -] - -[[package]] -name = "syster-base" -version = "0.1.11-alpha" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be02b0ce10658fd650983b4ed9871906c4e46338ca148600d399354b8e60a98" -dependencies = [ - "from-pest", - "logos", - "pest", - "pest-ast", - "pest_derive", - "rayon", - "rowan", - "tokio-util", - "unicode-ident", -] - -[[package]] -name = "syster-cli" -version = "0.1.8-alpha" -dependencies = [ - "anyhow", - "clap", - "syster-base 0.1.8-alpha", - "tempfile", -] - -[[package]] -name = "syster-lsp" -version = "0.1.10-alpha" -dependencies = [ - "async-lsp", - "futures", - "percent-encoding", - "serde", - "serde_json", - "syster-base 0.1.11-alpha (registry+https://github.com/rust-lang/crates.io-index)", - "tokio", - "tokio-util", - "tower", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "tempfile" -version = "3.24.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c" -dependencies = [ - "fastrand", - "getrandom", - "once_cell", - "rustix", - "windows-sys 0.61.2", -] - -[[package]] -name = "text-size" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f18aa187839b2bdb1ad2fa35ead8c4c2976b64e4363c386d45ac0f7ee85c9233" - -[[package]] -name = "thiserror" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4" -dependencies = [ - "thiserror-impl", -] - -[[package]] -name = "thiserror-impl" -version = "2.0.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "thread_local" -version = "1.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f60246a4944f24f6e018aa17cdeffb7818b76356965d03b07d6a9886e8962185" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "tinystr" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d3e9c45c09de15d06dd8acf5f4e0e399e85927b7f00711024eb7ae10fa4869" -dependencies = [ - "displaydoc", - "zerovec", -] - -[[package]] -name = "tokio" -version = "1.49.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86" -dependencies = [ - "bytes", - "libc", - "mio", - "parking_lot", - "pin-project-lite", - "signal-hook-registry", - "socket2", - "tokio-macros", - "windows-sys 0.61.2", -] - -[[package]] -name = "tokio-macros" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tokio-util" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ae9cec805b01e8fc3fd2fe289f89149a9b66dd16786abd8b19cfa7b48cb0098" -dependencies = [ - "bytes", - "futures-core", - "futures-io", - "futures-sink", - "pin-project-lite", - "tokio", -] - -[[package]] -name = "toml_datetime" -version = "0.7.5+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92e1cfed4a3038bc5a127e35a2d360f145e1f4b971b551a2ba5fd7aedf7e1347" -dependencies = [ - "serde_core", -] - -[[package]] -name = "toml_edit" -version = "0.23.10+spec-1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84c8b9f757e028cee9fa244aea147aab2a9ec09d5325a9b01e0a49730c2b5269" -dependencies = [ - "indexmap", - "toml_datetime", - "toml_parser", - "winnow", -] - -[[package]] -name = "toml_parser" -version = "1.0.6+spec-1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3198b4b0a8e11f09dd03e133c0280504d0801269e9afa46362ffde1cbeebf44" -dependencies = [ - "winnow", -] - -[[package]] -name = "tower" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebe5ef63511595f1344e2d5cfa636d973292adc0eec1f0ad45fae9f0851ab1d4" -dependencies = [ - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - -[[package]] -name = "tower-service" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" - -[[package]] -name = "tracing" -version = "0.1.44" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63e71662fa4b2a2c3a26f570f037eb95bb1f85397f3cd8076caed2f026a6d100" -dependencies = [ - "pin-project-lite", - "tracing-attributes", - "tracing-core", -] - -[[package]] -name = "tracing-attributes" -version = "0.1.31" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7490cfa5ec963746568740651ac6781f701c9c5ea257c58e057f3ba8cf69e8da" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "tracing-core" -version = "0.1.36" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db97caf9d906fbde555dd62fa95ddba9eecfd14cb388e4f491a66d74cd5fb79a" -dependencies = [ - "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f30143827ddab0d256fd843b7a66d164e9f271cfa0dde49142c5ca0ca291f1e" -dependencies = [ - "nu-ansi-term", - "sharded-slab", - "smallvec", - "thread_local", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "typenum" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "562d481066bde0658276a35467c4af00bdc6ee726305698a55b86e61d7ad82bb" - -[[package]] -name = "ucd-trie" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" - -[[package]] -name = "unicode-ident" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5" - -[[package]] -name = "url" -version = "2.5.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff67a8a4397373c3ef660812acab3268222035010ab8680ec4215f38ba3d0eed" -dependencies = [ - "form_urlencoded", - "idna", - "percent-encoding", - "serde", - "serde_derive", -] - -[[package]] -name = "utf8_iter" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" - -[[package]] -name = "utf8parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "void" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" - -[[package]] -name = "waitpid-any" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18aa3ce681e189f125c4c1e1388c03285e2fd434ef52c7203084012ac29c5e4a" -dependencies = [ - "rustix", - "windows-sys 0.59.0", -] - -[[package]] -name = "wasi" -version = "0.11.1+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" - -[[package]] -name = "wasip2" -version = "1.0.1+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" -dependencies = [ - "wit-bindgen", -] - -[[package]] -name = "windows-link" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" - -[[package]] -name = "windows-sys" -version = "0.59.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-sys" -version = "0.60.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" -dependencies = [ - "windows-targets 0.53.5", -] - -[[package]] -name = "windows-sys" -version = "0.61.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" -dependencies = [ - "windows-link", -] - -[[package]] -name = "windows-targets" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" -dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm 0.52.6", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.53.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" -dependencies = [ - "windows-link", - "windows_aarch64_gnullvm 0.53.1", - "windows_aarch64_msvc 0.53.1", - "windows_i686_gnu 0.53.1", - "windows_i686_gnullvm 0.53.1", - "windows_i686_msvc 0.53.1", - "windows_x86_64_gnu 0.53.1", - "windows_x86_64_gnullvm 0.53.1", - "windows_x86_64_msvc 0.53.1", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" - -[[package]] -name = "windows_i686_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" - -[[package]] -name = "windows_i686_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" - -[[package]] -name = "windows_i686_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" - -[[package]] -name = "windows_i686_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" - -[[package]] -name = "windows_i686_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.53.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" - -[[package]] -name = "winnow" -version = "0.7.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5364e9d77fcdeeaa6062ced926ee3381faa2ee02d3eb83a5c27a8825540829" -dependencies = [ - "memchr", -] - -[[package]] -name = "wit-bindgen" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" - -[[package]] -name = "writeable" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9edde0db4769d2dc68579893f2306b26c6ecfbe0ef499b013d731b7b9247e0b9" - -[[package]] -name = "yoke" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72d6e5c6afb84d73944e5cedb052c4680d5657337201555f9f2a16b7406d4954" -dependencies = [ - "stable_deref_trait", - "yoke-derive", - "zerofrom", -] - -[[package]] -name = "yoke-derive" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerofrom" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50cc42e0333e05660c3587f3bf9d0478688e15d870fab3346451ce7f8c9fbea5" -dependencies = [ - "zerofrom-derive", -] - -[[package]] -name = "zerofrom-derive" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502" -dependencies = [ - "proc-macro2", - "quote", - "syn", - "synstructure", -] - -[[package]] -name = "zerotrie" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a59c17a5562d507e4b54960e8569ebee33bee890c70aa3fe7b97e85a9fd7851" -dependencies = [ - "displaydoc", - "yoke", - "zerofrom", -] - -[[package]] -name = "zerovec" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c28719294829477f525be0186d13efa9a3c602f7ec202ca9e353d310fb9a002" -dependencies = [ - "yoke", - "zerofrom", - "zerovec-derive", -] - -[[package]] -name = "zerovec-derive" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "zmij" -version = "1.0.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfcd145825aace48cff44a8844de64bf75feec3080e0aa5cdbde72961ae51a65" diff --git a/Cargo.toml b/Cargo.toml deleted file mode 100644 index fefcefc9..00000000 --- a/Cargo.toml +++ /dev/null @@ -1,154 +0,0 @@ -# Syster Meta-Repository -# Feature-based organization with independent submodules -# Each submodule has its own Cargo.toml with git dependencies -# Build from each directory: cd core && cargo build - -[workspace] -members = [] -exclude = [ - "core", # syster-base: parser, AST, semantic analysis - "cli", # syster-cli: command-line tool - "lsp/server", # syster-lsp: language server -] -resolver = "2" - -[workspace.package] -version = "0.1.0" -edition = "2024" -authors = ["jade-codes"] -license = "MIT" -repository = "https://github.com/jade-codes/syster" - -[workspace.lints.clippy] -# Enforce explicit error handling -unwrap_used = "warn" -expect_used = "warn" -panic = "warn" -todo = "warn" -unimplemented = "warn" - -# Code quality -dbg_macro = "warn" -print_stdout = "warn" -print_stderr = "warn" -missing_errors_doc = "warn" -missing_panics_doc = "warn" - -# Performance -inefficient_to_string = "warn" -unnecessary_wraps = "warn" - -# Style consistency -enum_glob_use = "warn" -wildcard_imports = "warn" - -# Test quality - deny control flow complexity in tests -collapsible_if = "warn" -collapsible_else_if = "warn" -cognitive_complexity = "deny" - -# Deny by category (set explicit priority to avoid ambiguity) -correctness = { level = "deny", priority = -1 } -suspicious = { level = "deny", priority = -1 } -complexity = { level = "deny", priority = -1 } -perf = { level = "deny", priority = -1 } - -# ============================================================================ -# Build Optimization Profiles -# ============================================================================ - -# Dev profile: optimize for fast compile times -[profile.dev] -opt-level = 0 -debug = true -incremental = true -# More codegen units = faster compile, slower runtime (fine for dev) -codegen-units = 256 - -# Dev dependencies can be optimized (tests run faster) -[profile.dev.package."*"] -opt-level = 1 - -# Test profile inherits from dev but can have overrides -# Using opt-level = 1 for faster tests while keeping debug info -[profile.test] -opt-level = 1 -debug = true -incremental = true - -# Optimize parsing dependencies in test builds for faster tests -[profile.test.package.pest] -opt-level = 3 - -[profile.test.package.pest_derive] -opt-level = 3 - -[profile.test.package.pest_meta] -opt-level = 3 - -[profile.test.package.pest_generator] -opt-level = 3 - -# Also optimize in dev builds -[profile.dev.package.pest] -opt-level = 3 - -[profile.dev.package.pest_derive] -opt-level = 3 - -[profile.dev.package.pest_meta] -opt-level = 3 - -[profile.dev.package.pest_generator] -opt-level = 3 - -# Optimize other parsing/syntax dependencies -[profile.dev.package.rowan] -opt-level = 3 - -[profile.dev.package.logos] -opt-level = 3 - -[profile.dev.package.from-pest] -opt-level = 3 - -[profile.dev.package.pest-ast] -opt-level = 3 - -[profile.dev.package.rayon] -opt-level = 3 - -[profile.dev.package.rayon-core] -opt-level = 3 - -[profile.test.package.rowan] -opt-level = 3 - -[profile.test.package.logos] -opt-level = 3 - -[profile.test.package.from-pest] -opt-level = 3 - -[profile.test.package.pest-ast] -opt-level = 3 - -[profile.test.package.rayon] -opt-level = 3 - -[profile.test.package.rayon-core] -opt-level = 3 - -# Release profile: balanced for dev containers (lower memory usage) -[profile.release] -opt-level = 3 -lto = false -codegen-units = 16 -strip = true - -# Production profile: maximum optimization (use with `cargo build --profile production`) -# Requires more memory - may fail in constrained environments -[profile.production] -inherits = "release" -lto = "thin" -codegen-units = 1 diff --git a/README.md b/README.md index a50e4450..091642d5 100644 --- a/README.md +++ b/README.md @@ -10,32 +10,29 @@ Feature-based organization with independent submodules for versioning flexibilit ``` syster/ -├── core/ # Parser, AST, semantic analysis -├── cli/ # Command-line tool -├── lsp/ -│ ├── server/ # Language Server Protocol implementation -│ └── vscode/ # VS Code LSP extension -├── modeller/ -│ ├── core/ # Diagram types and layout (TypeScript) -│ ├── ui/ # React Flow components (TypeScript) -│ └── vscode/ # VS Code modeller extension -├── viewer/ -│ └── vscode/ # VS Code viewer extension -└── pipelines/ # CI/CD pipeline templates +├── base/ # Parser, AST, semantic analysis +├── cli/ # Command-line tool +├── language-server/ # Language Server Protocol implementation +├── language-client/ # VS Code LSP extension +├── modeller/ # VS Code modeller extension +├── viewer/ # VS Code viewer extension +├── diagram-core/ # Diagram types and layout (TypeScript) +├── diagram-ui/ # React Flow components (TypeScript) +└── pipelines/ # CI/CD pipeline templates ``` ### Components | Feature | Path | Repository | Description | |---------|------|------------|-------------| -| **Core** | `core/` | [syster-base](https://github.com/jade-codes/syster-base) | Parser, AST, semantic analysis | +| **Base** | `base/` | [syster-base](https://github.com/jade-codes/syster-base) | Parser, AST, semantic analysis | | **CLI** | `cli/` | [syster-cli](https://github.com/jade-codes/syster-cli) | Command-line tool | -| **LSP Server** | `lsp/server/` | [syster-lsp](https://github.com/jade-codes/syster-lsp) | Language Server Protocol | -| **LSP Extension** | `lsp/vscode/` | [syster-vscode-lsp](https://github.com/jade-codes/syster-vscode-lsp) | VS Code language support | -| **Diagram Core** | `modeller/core/` | [syster-diagram-core](https://github.com/jade-codes/syster-diagram-core) | Diagram types (TS) | -| **Diagram UI** | `modeller/ui/` | [syster-diagram-ui](https://github.com/jade-codes/syster-diagram-ui) | React Flow components | -| **Modeller** | `modeller/vscode/` | [syster-vscode-modeller](https://github.com/jade-codes/syster-vscode-modeller) | VS Code modeller | -| **Viewer** | `viewer/vscode/` | [syster-vscode-viewer](https://github.com/jade-codes/syster-vscode-viewer) | VS Code viewer | +| **LSP Server** | `language-server/` | [syster-lsp](https://github.com/jade-codes/syster-lsp) | Language Server Protocol | +| **LSP Client** | `language-client/` | [syster-vscode-lsp](https://github.com/jade-codes/syster-vscode-lsp) | VS Code language support | +| **Diagram Core** | `diagram-core/` | [syster-diagram-core](https://github.com/jade-codes/syster-diagram-core) | Diagram types (TS) | +| **Diagram UI** | `diagram-ui/` | [syster-diagram-ui](https://github.com/jade-codes/syster-diagram-ui) | React Flow components | +| **Modeller** | `modeller/` | [syster-vscode-modeller](https://github.com/jade-codes/syster-vscode-modeller) | VS Code modeller | +| **Viewer** | `viewer/` | [syster-vscode-viewer](https://github.com/jade-codes/syster-vscode-viewer) | VS Code viewer | | **Pipelines** | `pipelines/` | [syster-pipelines](https://github.com/jade-codes/syster-pipelines) | CI/CD templates | ## Getting Started @@ -63,30 +60,34 @@ git submodule update --init --recursive ### Build +Each submodule is built independently. Navigate to the submodule directory and follow its README: + ```bash -# Build all Rust crates from root -cargo build -cargo test +# Build the base parser +cd base && cargo build && cargo test + +# Build the CLI +cd cli && cargo build -# Install TypeScript dependencies -bun install +# Build the LSP server +cd language-server && cargo build -# Setup VS Code extensions -npm run setup:lsp -npm run setup:modeller -npm run setup:viewer +# Build VS Code extensions +cd language-client && npm install && npm run compile +cd modeller && npm install && npm run compile +cd viewer && npm install && npm run compile ``` ### Running the VS Code Extension Locally 1. Build the LSP binary: ```bash - cd crates/syster-lsp && cargo build --release + cd language-server && cargo build --release ``` 2. Build the extension: ```bash - cd editors/vscode-lsp && npm install && npm run esbuild + cd language-client && npm install && npm run esbuild ``` 3. Press `F5` in VS Code to launch the extension in a new window diff --git a/core b/base similarity index 100% rename from core rename to base diff --git a/bun.lock b/bun.lock deleted file mode 100644 index 538599ed..00000000 --- a/bun.lock +++ /dev/null @@ -1,278 +0,0 @@ -{ - "lockfileVersion": 1, - "configVersion": 1, - "workspaces": { - "": { - "name": "syster-meta", - }, - "modeller/core": { - "name": "@opensyster/diagram-core", - "version": "0.0.3-alpha", - }, - "modeller/ui": { - "name": "@opensyster/diagram-ui", - "version": "0.0.4-alpha", - "dependencies": { - "@opensyster/diagram-core": "^0.0.3-alpha", - "elkjs": "^0.9.3", - }, - "devDependencies": { - "@testing-library/react": "^14.3.1", - "@types/bun": "^1.2.14", - "@types/react": "^18.2.0", - "happy-dom": "^20.1.0", - "react-dom": "^18.2.0", - "typescript": "^5.0.0", - }, - "peerDependencies": { - "@xyflow/react": "^12.0.0", - "react": "^18.2.0", - }, - }, - }, - "packages": { - "@babel/code-frame": ["@babel/code-frame@7.28.6", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q=="], - - "@babel/helper-validator-identifier": ["@babel/helper-validator-identifier@7.28.5", "", {}, "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q=="], - - "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="], - - "@opensyster/diagram-core": ["@opensyster/diagram-core@workspace:modeller/core"], - - "@opensyster/diagram-ui": ["@opensyster/diagram-ui@workspace:modeller/ui"], - - "@testing-library/dom": ["@testing-library/dom@9.3.4", "", { "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^5.0.1", "aria-query": "5.1.3", "chalk": "^4.1.0", "dom-accessibility-api": "^0.5.9", "lz-string": "^1.5.0", "pretty-format": "^27.0.2" } }, "sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ=="], - - "@testing-library/react": ["@testing-library/react@14.3.1", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^9.0.0", "@types/react-dom": "^18.0.0" }, "peerDependencies": { "react": "^18.0.0", "react-dom": "^18.0.0" } }, "sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ=="], - - "@types/aria-query": ["@types/aria-query@5.0.4", "", {}, "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw=="], - - "@types/bun": ["@types/bun@1.3.6", "", { "dependencies": { "bun-types": "1.3.6" } }, "sha512-uWCv6FO/8LcpREhenN1d1b6fcspAB+cefwD7uti8C8VffIv0Um08TKMn98FynpTiU38+y2dUO55T11NgDt8VAA=="], - - "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], - - "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], - - "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], - - "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], - - "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], - - "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], - - "@types/node": ["@types/node@25.0.9", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-/rpCXHlCWeqClNBwUhDcusJxXYDjZTyE8v5oTO7WbL8eij2nKhUeU89/6xgjU7N4/Vh3He0BtyhJdQbDyhiXAw=="], - - "@types/prop-types": ["@types/prop-types@15.7.15", "", {}, "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw=="], - - "@types/react": ["@types/react@18.3.27", "", { "dependencies": { "@types/prop-types": "*", "csstype": "^3.2.2" } }, "sha512-cisd7gxkzjBKU2GgdYrTdtQx1SORymWyaAFhaxQPK9bYO9ot3Y5OikQRvY0VYQtvwjeQnizCINJAenh/V7MK2w=="], - - "@types/react-dom": ["@types/react-dom@18.3.7", "", { "peerDependencies": { "@types/react": "^18.0.0" } }, "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ=="], - - "@types/whatwg-mimetype": ["@types/whatwg-mimetype@3.0.2", "", {}, "sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA=="], - - "@types/ws": ["@types/ws@8.18.1", "", { "dependencies": { "@types/node": "*" } }, "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg=="], - - "@xyflow/react": ["@xyflow/react@12.10.0", "", { "dependencies": { "@xyflow/system": "0.0.74", "classcat": "^5.0.3", "zustand": "^4.4.0" }, "peerDependencies": { "react": ">=17", "react-dom": ">=17" } }, "sha512-eOtz3whDMWrB4KWVatIBrKuxECHqip6PfA8fTpaS2RUGVpiEAe+nqDKsLqkViVWxDGreq0lWX71Xth/SPAzXiw=="], - - "@xyflow/system": ["@xyflow/system@0.0.74", "", { "dependencies": { "@types/d3-drag": "^3.0.7", "@types/d3-interpolate": "^3.0.4", "@types/d3-selection": "^3.0.10", "@types/d3-transition": "^3.0.8", "@types/d3-zoom": "^3.0.8", "d3-drag": "^3.0.0", "d3-interpolate": "^3.0.1", "d3-selection": "^3.0.0", "d3-zoom": "^3.0.0" } }, "sha512-7v7B/PkiVrkdZzSbL+inGAo6tkR/WQHHG0/jhSvLQToCsfa8YubOGmBYd1s08tpKpihdHDZFwzQZeR69QSBb4Q=="], - - "ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], - - "ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], - - "aria-query": ["aria-query@5.1.3", "", { "dependencies": { "deep-equal": "^2.0.5" } }, "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ=="], - - "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="], - - "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - - "bun-types": ["bun-types@1.3.6", "", { "dependencies": { "@types/node": "*" } }, "sha512-OlFwHcnNV99r//9v5IIOgQ9Uk37gZqrNMCcqEaExdkVq3Avwqok1bJFmvGMCkCE0FqzdY8VMOZpfpR3lwI+CsQ=="], - - "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="], - - "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], - - "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], - - "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - - "classcat": ["classcat@5.0.5", "", {}, "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w=="], - - "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], - - "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], - - "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], - - "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], - - "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], - - "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], - - "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], - - "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], - - "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], - - "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], - - "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], - - "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], - - "deep-equal": ["deep-equal@2.2.3", "", { "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.5", "es-get-iterator": "^1.1.3", "get-intrinsic": "^1.2.2", "is-arguments": "^1.1.1", "is-array-buffer": "^3.0.2", "is-date-object": "^1.0.5", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.2", "isarray": "^2.0.5", "object-is": "^1.1.5", "object-keys": "^1.1.1", "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.5.1", "side-channel": "^1.0.4", "which-boxed-primitive": "^1.0.2", "which-collection": "^1.0.1", "which-typed-array": "^1.1.13" } }, "sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA=="], - - "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="], - - "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="], - - "dom-accessibility-api": ["dom-accessibility-api@0.5.16", "", {}, "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg=="], - - "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], - - "elkjs": ["elkjs@0.9.3", "", {}, "sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ=="], - - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], - - "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], - - "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], - - "es-get-iterator": ["es-get-iterator@1.1.3", "", { "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "has-symbols": "^1.0.3", "is-arguments": "^1.1.1", "is-map": "^2.0.2", "is-set": "^2.0.2", "is-string": "^1.0.7", "isarray": "^2.0.5", "stop-iteration-iterator": "^1.0.0" } }, "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw=="], - - "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], - - "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="], - - "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], - - "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="], - - "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], - - "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], - - "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], - - "happy-dom": ["happy-dom@20.3.4", "", { "dependencies": { "@types/node": ">=20.0.0", "@types/whatwg-mimetype": "^3.0.2", "@types/ws": "^8.18.1", "entities": "^4.5.0", "whatwg-mimetype": "^3.0.0", "ws": "^8.18.3" } }, "sha512-rfbiwB6OKxZFIFQ7SRnCPB2WL9WhyXsFoTfecYgeCeFSOBxvkWLaXsdv5ehzJrfqwXQmDephAKWLRQoFoJwrew=="], - - "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="], - - "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], - - "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="], - - "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], - - "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], - - "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="], - - "is-arguments": ["is-arguments@1.2.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA=="], - - "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="], - - "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="], - - "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="], - - "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="], - - "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="], - - "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="], - - "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="], - - "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], - - "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="], - - "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="], - - "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="], - - "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="], - - "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="], - - "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="], - - "isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="], - - "js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="], - - "loose-envify": ["loose-envify@1.4.0", "", { "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, "bin": { "loose-envify": "cli.js" } }, "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q=="], - - "lz-string": ["lz-string@1.5.0", "", { "bin": { "lz-string": "bin/bin.js" } }, "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ=="], - - "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], - - "object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="], - - "object-is": ["object-is@1.1.6", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1" } }, "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q=="], - - "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="], - - "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="], - - "picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="], - - "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="], - - "pretty-format": ["pretty-format@27.5.1", "", { "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", "react-is": "^17.0.1" } }, "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ=="], - - "react": ["react@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ=="], - - "react-dom": ["react-dom@18.3.1", "", { "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^18.3.1" } }, "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw=="], - - "react-is": ["react-is@17.0.2", "", {}, "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="], - - "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="], - - "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - - "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], - - "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="], - - "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="], - - "side-channel": ["side-channel@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3", "side-channel-list": "^1.0.0", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" } }, "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw=="], - - "side-channel-list": ["side-channel-list@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "object-inspect": "^1.13.3" } }, "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA=="], - - "side-channel-map": ["side-channel-map@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3" } }, "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA=="], - - "side-channel-weakmap": ["side-channel-weakmap@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.5", "object-inspect": "^1.13.3", "side-channel-map": "^1.0.1" } }, "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A=="], - - "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="], - - "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], - - "use-sync-external-store": ["use-sync-external-store@1.6.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w=="], - - "whatwg-mimetype": ["whatwg-mimetype@3.0.0", "", {}, "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q=="], - - "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="], - - "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="], - - "which-typed-array": ["which-typed-array@1.1.20", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg=="], - - "ws": ["ws@8.19.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg=="], - - "zustand": ["zustand@4.5.7", "", { "dependencies": { "use-sync-external-store": "^1.2.2" }, "peerDependencies": { "@types/react": ">=16.8", "immer": ">=9.0.6", "react": ">=16.8" }, "optionalPeers": ["@types/react", "immer", "react"] }, "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw=="], - - "pretty-format/ansi-styles": ["ansi-styles@5.2.0", "", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="], - } -} diff --git a/modeller/core b/diagram-core similarity index 100% rename from modeller/core rename to diagram-core diff --git a/modeller/ui b/diagram-ui similarity index 100% rename from modeller/ui rename to diagram-ui diff --git a/lsp/vscode b/language-client similarity index 100% rename from lsp/vscode rename to language-client diff --git a/lsp/server b/language-server similarity index 100% rename from lsp/server rename to language-server diff --git a/modeller/vscode b/modeller similarity index 100% rename from modeller/vscode rename to modeller diff --git a/package.json b/package.json deleted file mode 100644 index 8b26cc99..00000000 --- a/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "syster-meta", - "version": "0.1.0", - "private": true, - "description": "Syster - SysML v2 Parser and Tooling. Feature-based monorepo with independent submodules.", - "workspaces": [ - "modeller/core", - "modeller/ui" - ], - "scripts": { - "setup:lsp": "cd lsp/vscode && npm install", - "setup:modeller": "cd modeller/vscode && npm install", - "setup:viewer": "cd viewer/vscode && npm install", - "setup:packages": "bun install", - "setup:all": "bun install && npm run setup:lsp && npm run setup:modeller && npm run setup:viewer" - }, - "repository": { - "type": "git", - "url": "https://github.com/jade-codes/syster.git" - }, - "keywords": [ - "sysml", - "sysml-v2", - "kerml", - "parser", - "systems-engineering", - "modeling" - ], - "author": "jade-codes", - "license": "MIT" -} diff --git a/viewer/vscode b/viewer similarity index 100% rename from viewer/vscode rename to viewer From 6e82e18331ef866869235485434606976a783e9c Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:13:09 +0000 Subject: [PATCH 3/7] fix: update devcontainer postCreateCommand path --- .devcontainer/devcontainer.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c82bf03c..71fde1c7 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -32,7 +32,7 @@ } }, "initializeCommand": "git submodule deinit -f --all 2>/dev/null || true && git submodule update --init --recursive", - "postCreateCommand": "rustc --version && cargo --version && bun install && cd lsp/vscode && npm install", + "postCreateCommand": "rustc --version && cargo --version && cd language-client && npm install", "forwardPorts": [3000, 5173], "remoteUser": "vscode" -} +} \ No newline at end of file From ed8e73d7cf6fc51e445c55129d83eabd36a691be Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:14:05 +0000 Subject: [PATCH 4/7] fix: remove postCreateCommand from devcontainer --- .devcontainer/devcontainer.json | 1 - 1 file changed, 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 71fde1c7..180b752f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -32,7 +32,6 @@ } }, "initializeCommand": "git submodule deinit -f --all 2>/dev/null || true && git submodule update --init --recursive", - "postCreateCommand": "rustc --version && cargo --version && cd language-client && npm install", "forwardPorts": [3000, 5173], "remoteUser": "vscode" } \ No newline at end of file From 56a5c05b89c798a273a6abcea34e005e7d6c7fda Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:15:24 +0000 Subject: [PATCH 5/7] Update .github/copilot-instructions.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 6106a2f6..58382525 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -168,7 +168,7 @@ Before making changes, review: ## VS Code Extension -Located in `base/language-client/`: +Located in `language-client/`: - TypeScript-based extension - Integrates with syster-lsp server - Provides syntax highlighting, IntelliSense, formatting, and more From ad58fe68b1b3e966a7bb65cfd4365b98a4a8a14c Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:15:30 +0000 Subject: [PATCH 6/7] Update .github/copilot-instructions.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .github/copilot-instructions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 58382525..2a42c56f 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -176,7 +176,7 @@ Located in `language-client/`: ## Standard Library -The `core/sysml.library/` directory contains the SysML v2 standard library files. These are loaded automatically by the workspace when needed. +The `base/sysml.library/` directory contains the SysML v2 standard library files. These are loaded automatically by the workspace when needed. ## Getting Help From 2683dee3e5432a5e635487a23efa1a5137ace46e Mon Sep 17 00:00:00 2001 From: Jade Wilson Date: Mon, 26 Jan 2026 13:17:24 +0000 Subject: [PATCH 7/7] docs: add architecture diagram to README --- README.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/README.md b/README.md index 091642d5..b91d7277 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,42 @@ A Rust-based parser and tooling for SysML v2 (Systems Modeling Language) and KerML (Kernel Modeling Language). +## Architecture + +```mermaid +graph TB + subgraph "SysML v2 Files" + SysML[".sysml / .kerml"] + end + + subgraph "Core (Rust)" + Base[base
Parser, AST, Semantic Analysis] + CLI[cli
Command Line Tool] + LSP[language-server
LSP Implementation] + end + + subgraph "VS Code Extensions (TypeScript)" + Client[language-client
LSP Extension] + Modeller[modeller
Diagram Editor] + Viewer[viewer
Diagram Viewer] + end + + subgraph "Diagram Library (TypeScript)" + Core[diagram-core
Types & Layout] + UI[diagram-ui
React Components] + end + + SysML --> Base + Base --> CLI + Base --> LSP + LSP <--> Client + Core --> UI + UI --> Modeller + UI --> Viewer + Client --> Modeller + Client --> Viewer +``` + ## Repository Structure Feature-based organization with independent submodules for versioning flexibility.