@macroforge/mcp-server 0.1.39 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/docs/api/api-overview.md +32 -32
- package/docs/api/expand-sync.md +30 -30
- package/docs/api/native-plugin.md +38 -38
- package/docs/api/position-mapper.md +18 -18
- package/docs/api/transform-sync.md +31 -31
- package/docs/builtin-macros/default.md +6 -6
- package/docs/builtin-macros/macros-overview.md +84 -84
- package/docs/builtin-macros/partial-ord.md +18 -20
- package/docs/concepts/architecture.md +16 -16
- package/docs/concepts/derive-system.md +89 -68
- package/docs/concepts/how-macros-work.md +13 -12
- package/docs/custom-macros/custom-overview.md +36 -36
- package/docs/custom-macros/rust-setup.md +71 -71
- package/docs/custom-macros/ts-macro-derive.md +167 -167
- package/docs/custom-macros/ts-quote.md +347 -347
- package/docs/getting-started/first-macro.md +57 -55
- package/docs/getting-started/installation.md +34 -35
- package/docs/integration/cli.md +43 -43
- package/docs/integration/configuration.md +41 -41
- package/docs/integration/integration-overview.md +4 -4
- package/docs/integration/mcp-server.md +22 -22
- package/docs/integration/svelte-preprocessor.md +87 -87
- package/docs/integration/typescript-plugin.md +23 -24
- package/docs/integration/vite-plugin.md +40 -40
- package/docs/language-servers/svelte.md +15 -16
- package/docs/language-servers/zed.md +14 -15
- package/package.json +2 -2
|
@@ -1,45 +1,45 @@
|
|
|
1
1
|
# MCP Server
|
|
2
2
|
*The MCP (Model Context Protocol) server enables AI assistants to understand and work with Macroforge macros, providing documentation lookup, code validation, and macro expansion.*
|
|
3
|
-
The local (stdio) version of the MCP server is available via the [
|
|
3
|
+
The local (stdio) version of the MCP server is available via the [<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@macroforge<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">/<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">mcp<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">server</code>](https://www.npmjs.com/package/@macroforge/mcp-server) npm package. You can either install it globally and then reference it in your configuration or run it with <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">npx</code>:
|
|
4
4
|
```
|
|
5
|
-
npx
|
|
5
|
+
npx -y @macroforge/mcp-server
|
|
6
6
|
``` Here's how to set it up in some common MCP clients:
|
|
7
7
|
## Claude Code
|
|
8
8
|
To include the local MCP version in Claude Code, simply run the following command:
|
|
9
9
|
```
|
|
10
|
-
claude
|
|
11
|
-
``` The
|
|
10
|
+
claude mcp add -t stdio -s [scope] macroforge -- npx -y @macroforge/mcp-server
|
|
11
|
+
``` The <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">[scope]</code> must be <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">user</code>, <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">project</code> or <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">local</code>.
|
|
12
12
|
## Claude Desktop
|
|
13
|
-
In the Settings > Developer section, click on Edit Config. It will open the folder with a
|
|
13
|
+
In the Settings > Developer section, click on Edit Config. It will open the folder with a <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">claude_desktop_config.json</code> file in it. Edit the file to include the following configuration:
|
|
14
14
|
```
|
|
15
15
|
{
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
"mcpServers": {
|
|
17
|
+
"macroforge": {
|
|
18
|
+
"command": "npx",
|
|
19
|
+
"args": ["-y", "@macroforge/mcp-server"]
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
22
|
}
|
|
23
23
|
``` ## Codex CLI
|
|
24
|
-
Add the following to your
|
|
24
|
+
Add the following to your <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;--shiki-light:#B31D28;--shiki-light-font-style:italic">config.toml</code> (which defaults to <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;--shiki-light:#B31D28;--shiki-light-font-style:italic">~/.codex/config.toml</code>, but refer to [the configuration documentation](https://github.com/openai/codex/blob/main/docs/config.md) for more advanced setups):
|
|
25
25
|
```
|
|
26
26
|
[mcp_servers.macroforge]
|
|
27
|
-
command
|
|
28
|
-
args
|
|
27
|
+
command = "npx"
|
|
28
|
+
args = ["-y", "@macroforge/mcp-server"]
|
|
29
29
|
``` ## Gemini CLI
|
|
30
30
|
To include the local MCP version in Gemini CLI, simply run the following command:
|
|
31
31
|
```
|
|
32
|
-
gemini
|
|
33
|
-
``` The
|
|
32
|
+
gemini mcp add -t stdio -s [scope] macroforge npx -y @macroforge/mcp-server
|
|
33
|
+
``` The <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">[scope]</code> must be <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">user</code>, <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">project</code> or <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">local</code>.
|
|
34
34
|
## Other Clients
|
|
35
|
-
If we didn't include the MCP client you are using, refer to their documentation for
|
|
35
|
+
If we didn't include the MCP client you are using, refer to their documentation for <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">stdio</code> servers and use <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">npx</code> as the command and <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">y @macroforge<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">/<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">mcp<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">server</code> as the arguments.
|
|
36
36
|
## Available Tools
|
|
37
37
|
The MCP server provides five tools for AI assistants:
|
|
38
38
|
| Tool | Description |
|
|
39
39
|
| --- | --- |
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
43
|
-
|
|
|
44
|
-
|
|
|
40
|
+
| list-sections | Lists all available Macroforge documentation sections |
|
|
41
|
+
| get-documentation | Retrieves full documentation for one or more sections |
|
|
42
|
+
| macroforge-autofixer | Validates code with @derive decorators and returns diagnostics |
|
|
43
|
+
| expand-code | Expands macros and returns the transformed TypeScript code |
|
|
44
|
+
| get-macro-info | Retrieves documentation for macros and field decorators |
|
|
45
45
|
> **Note:** For code validation and expansion features (macroforge-autofixer, expand-code, get-macro-info), the MCP server requires macroforge as a peer dependency. Install it in your project with npm install macroforge.
|
|
@@ -1,128 +1,128 @@
|
|
|
1
1
|
# Svelte Preprocessor
|
|
2
|
-
*The Svelte preprocessor expands Macroforge macros in
|
|
2
|
+
*The Svelte preprocessor expands Macroforge macros in <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"><<span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">script<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">></code> blocks before Svelte compilation, enabling seamless macro usage in Svelte components.*
|
|
3
3
|
## Installation
|
|
4
4
|
```
|
|
5
|
-
npm
|
|
5
|
+
npm install -D @macroforge/svelte-preprocessor
|
|
6
6
|
``` ## Configuration
|
|
7
|
-
Add the preprocessor to your
|
|
7
|
+
Add the preprocessor to your <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">svelte.config.js</code>:
|
|
8
8
|
```
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
9
|
+
import adapter from '@sveltejs/adapter-auto';
|
|
10
|
+
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
|
11
|
+
import { macroforgePreprocess } from '@macroforge/svelte-preprocessor';
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
/** @type {import('@sveltejs/kit').Config} */
|
|
14
|
+
const config = {
|
|
15
|
+
preprocess: [
|
|
16
|
+
macroforgePreprocess(), // Expand macros FIRST
|
|
17
|
+
vitePreprocess() // Then handle TypeScript/CSS
|
|
18
|
+
],
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
kit: {
|
|
21
|
+
adapter: adapter()
|
|
22
|
+
}
|
|
23
23
|
};
|
|
24
24
|
|
|
25
|
-
export
|
|
26
|
-
``` **Warning Always place
|
|
27
|
-
Use
|
|
25
|
+
export default config;
|
|
26
|
+
``` **Warning Always place **<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">macroforgePreprocess<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">()</code> **before** other preprocessors like <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#B392F0;--shiki-light:#6F42C1">vitePreprocess<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">()</code>. This ensures macros are expanded before TypeScript compilation. ## Usage
|
|
27
|
+
Use <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorators directly in your Svelte component scripts:
|
|
28
28
|
```
|
|
29
|
-
<script
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
29
|
+
<script lang="ts">
|
|
30
|
+
/** @derive(Debug, Clone) */
|
|
31
|
+
class User {
|
|
32
|
+
name: string;
|
|
33
|
+
email: string;
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
constructor(name: string, email: string) {
|
|
36
|
+
this.name = name;
|
|
37
|
+
this.email = email;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
let user = new User("Alice", "alice@example.com");
|
|
42
|
+
console.log(user.toString()); // Generated by Debug macro
|
|
43
43
|
</script>
|
|
44
44
|
|
|
45
|
-
<p>User
|
|
45
|
+
<p>User: {user.name}</p>
|
|
46
46
|
``` ## Options
|
|
47
47
|
```
|
|
48
48
|
macroforgePreprocess({
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
// Keep @derive decorators in output (for debugging)
|
|
50
|
+
keepDecorators: false,
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
// Process JavaScript files (not just TypeScript)
|
|
53
|
+
processJavaScript: false
|
|
54
54
|
})
|
|
55
55
|
``` ### Option Reference
|
|
56
56
|
| Option | Type | Default | Description |
|
|
57
57
|
| --- | --- | --- | --- |
|
|
58
|
-
|
|
|
59
|
-
|
|
|
58
|
+
| keepDecorators | boolean | false | Keep decorators in output |
|
|
59
|
+
| processJavaScript | boolean | false | Process <script> blocks without lang="ts" |
|
|
60
60
|
## How It Works
|
|
61
61
|
The preprocessor:
|
|
62
|
-
1. Intercepts
|
|
63
|
-
2. Checks for
|
|
62
|
+
1. Intercepts <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#F97583;--shiki-light:#D73A49"><<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">script lang<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">=<span style="--shiki-dark:#9ECBFF;--shiki-light:#032F62">"ts"<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">></code> blocks in <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.svelte</code> files
|
|
63
|
+
2. Checks for <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorators (skips files without them)
|
|
64
64
|
3. Expands macros using the native Macroforge binary
|
|
65
65
|
4. Returns the transformed code for Svelte compilation
|
|
66
|
-
|
|
67
|
-
For SvelteKit projects, you can use both the preprocessor (for
|
|
66
|
+
**Tip Files without **<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorators are passed through unchanged with zero overhead. ## SvelteKit Integration
|
|
67
|
+
For SvelteKit projects, you can use both the preprocessor (for <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.svelte</code> files) and the Vite plugin (for standalone <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.ts</code> files):
|
|
68
68
|
```
|
|
69
|
-
|
|
70
|
-
import
|
|
71
|
-
import
|
|
69
|
+
// svelte.config.js
|
|
70
|
+
import { macroforgePreprocess } from '@macroforge/svelte-preprocessor';
|
|
71
|
+
import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
|
|
72
72
|
|
|
73
|
-
export
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
export default {
|
|
74
|
+
preprocess: [
|
|
75
|
+
macroforgePreprocess(),
|
|
76
|
+
vitePreprocess()
|
|
77
|
+
]
|
|
78
78
|
};
|
|
79
79
|
``` ```
|
|
80
|
-
|
|
81
|
-
import
|
|
82
|
-
import
|
|
83
|
-
import
|
|
80
|
+
// vite.config.ts
|
|
81
|
+
import macroforge from '@macroforge/vite-plugin';
|
|
82
|
+
import { sveltekit } from '@sveltejs/kit/vite';
|
|
83
|
+
import { defineConfig } from 'vite';
|
|
84
84
|
|
|
85
|
-
export
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
export default defineConfig({
|
|
86
|
+
plugins: [
|
|
87
|
+
macroforge(), // For .ts files
|
|
88
|
+
sveltekit()
|
|
89
|
+
]
|
|
90
90
|
});
|
|
91
91
|
``` ## Using with Vitest
|
|
92
92
|
The preprocessor works seamlessly with Vitest for testing Svelte components:
|
|
93
93
|
```
|
|
94
|
-
|
|
95
|
-
import
|
|
96
|
-
import
|
|
97
|
-
import
|
|
98
|
-
import
|
|
94
|
+
// vitest.config.ts
|
|
95
|
+
import { defineConfig } from 'vitest/config';
|
|
96
|
+
import { sveltekit } from '@sveltejs/kit/vite';
|
|
97
|
+
import { svelteTesting } from '@testing-library/svelte/vite';
|
|
98
|
+
import macroforge from '@macroforge/vite-plugin';
|
|
99
99
|
|
|
100
|
-
export
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
100
|
+
export default defineConfig({
|
|
101
|
+
plugins: [
|
|
102
|
+
macroforge(),
|
|
103
|
+
sveltekit(),
|
|
104
|
+
svelteTesting()
|
|
105
|
+
],
|
|
106
|
+
test: {
|
|
107
|
+
environment: 'jsdom',
|
|
108
|
+
include: ['src/**/*.{test,spec}.{js,ts}']
|
|
109
|
+
}
|
|
110
110
|
});
|
|
111
111
|
``` ## Svelte 5 Runes Compatibility
|
|
112
|
-
The preprocessor is fully compatible with Svelte 5 runes (
|
|
112
|
+
The preprocessor is fully compatible with Svelte 5 runes (<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">$state</code>, <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">$derived</code>, <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">$props</code>, etc.). Files using runes but without <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorators are skipped entirely.
|
|
113
113
|
```
|
|
114
|
-
<script
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
<script lang="ts">
|
|
115
|
+
// Runes work normally
|
|
116
|
+
let count = $state(0);
|
|
117
|
+
let doubled = $derived(count * 2);
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
119
|
+
// Macros expand correctly
|
|
120
|
+
/** @derive(Debug) */
|
|
121
|
+
class Counter {
|
|
122
|
+
value: number;
|
|
123
|
+
constructor(value: number) {
|
|
124
|
+
this.value = value;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
127
|
</script>
|
|
128
|
-
|
|
128
|
+
```
|
|
@@ -2,54 +2,53 @@
|
|
|
2
2
|
*The TypeScript plugin provides IDE integration for Macroforge, including error reporting, completions, and type checking for generated code.*
|
|
3
3
|
## Installation
|
|
4
4
|
```
|
|
5
|
-
npm
|
|
5
|
+
npm install -D @macroforge/typescript-plugin
|
|
6
6
|
``` ## Configuration
|
|
7
|
-
Add the plugin to your
|
|
7
|
+
Add the plugin to your <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">tsconfig.json</code>:
|
|
8
8
|
```
|
|
9
9
|
{
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
"compilerOptions": {
|
|
11
|
+
"plugins": [
|
|
12
|
+
{
|
|
13
|
+
"name": "@macroforge/typescript-plugin"
|
|
14
|
+
}
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
17
|
}
|
|
18
18
|
``` ## VS Code Setup
|
|
19
19
|
VS Code uses its own TypeScript version by default. To use the workspace version (which includes plugins):
|
|
20
|
-
1. Open the Command Palette (
|
|
20
|
+
1. Open the Command Palette (<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">Cmd<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">/<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">Ctrl <span style="--shiki-dark:#F97583;--shiki-light:#D73A49">+<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E"> Shift <span style="--shiki-dark:#F97583;--shiki-light:#D73A49">+<span style="--shiki-dark:#79B8FF;--shiki-light:#005CC5"> P</code>)
|
|
21
21
|
2. Search for "TypeScript: Select TypeScript Version"
|
|
22
22
|
3. Choose "Use Workspace Version"
|
|
23
|
-
**Tip Add this setting to your
|
|
23
|
+
**Tip Add this setting to your **<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.vscode/settings.json</code> to make it permanent: ```
|
|
24
24
|
{
|
|
25
|
-
|
|
25
|
+
"typescript.tsdk": "node_modules/typescript/lib"
|
|
26
26
|
}
|
|
27
27
|
``` ## Features
|
|
28
28
|
### Error Reporting
|
|
29
|
-
Errors in macro-generated code are reported at the
|
|
29
|
+
Errors in macro-generated code are reported at the <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorator position:
|
|
30
30
|
```
|
|
31
|
-
|
|
32
|
-
class
|
|
33
|
-
|
|
31
|
+
/** @derive(Debug) */ // <- Errors appear here
|
|
32
|
+
class User {
|
|
33
|
+
name: string;
|
|
34
34
|
}
|
|
35
35
|
``` ### Completions
|
|
36
36
|
The plugin provides completions for generated methods:
|
|
37
37
|
```
|
|
38
|
-
const
|
|
39
|
-
user.to
|
|
38
|
+
const user = new User("Alice");
|
|
39
|
+
user.to // Suggests: toString(), toJSON(), etc.
|
|
40
40
|
``` ### Type Information
|
|
41
41
|
Hover over generated methods to see their types:
|
|
42
42
|
```
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const
|
|
43
|
+
// Hover over 'clone' shows:
|
|
44
|
+
// (method) User.clone(): User
|
|
45
|
+
const copy = user.clone();
|
|
46
46
|
``` ## Troubleshooting
|
|
47
47
|
### Plugin Not Loading
|
|
48
48
|
1. Ensure you're using the workspace TypeScript version
|
|
49
49
|
2. Restart the TypeScript server (Command Palette → "TypeScript: Restart TS Server")
|
|
50
|
-
3. Check that the plugin is listed in
|
|
50
|
+
3. Check that the plugin is listed in <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">tsconfig.json</code>
|
|
51
51
|
### Errors Not Showing
|
|
52
52
|
If errors from macros aren't appearing:
|
|
53
53
|
1. Make sure the Vite plugin is also installed (for source file watching)
|
|
54
|
-
2. Check that your file is saved (plugins process on save)
|
|
55
|
-
**
|
|
54
|
+
2. Check that your file is saved (plugins process on save)
|
|
@@ -2,68 +2,68 @@
|
|
|
2
2
|
*The Vite plugin provides build-time macro expansion, transforming your code during development and production builds.*
|
|
3
3
|
## Installation
|
|
4
4
|
```
|
|
5
|
-
npm
|
|
5
|
+
npm install -D @macroforge/vite-plugin
|
|
6
6
|
``` ## Configuration
|
|
7
|
-
Add the plugin to your
|
|
7
|
+
Add the plugin to your <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">vite.config.ts</code>:
|
|
8
8
|
```
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import macroforge from "@macroforge/vite-plugin";
|
|
10
|
+
import { defineConfig } from "vite";
|
|
11
11
|
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
export default defineConfig({
|
|
13
|
+
plugins: [
|
|
14
|
+
macroforge()
|
|
15
|
+
]
|
|
16
16
|
});
|
|
17
17
|
``` ## Options
|
|
18
18
|
```
|
|
19
19
|
macroforge({
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
// Generate .d.ts files for expanded code
|
|
21
|
+
generateTypes: true,
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
// Output directory for generated types
|
|
24
|
+
typesOutputDir: ".macroforge/types",
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
// Emit metadata files for debugging
|
|
27
|
+
emitMetadata: false,
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
// Keep @derive decorators in output (for debugging)
|
|
30
|
+
keepDecorators: false,
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
// File patterns to process
|
|
33
|
+
include: ["**/*.ts", "**/*.tsx"],
|
|
34
|
+
exclude: ["node_modules/**"]
|
|
35
35
|
})
|
|
36
36
|
``` ### Option Reference
|
|
37
37
|
| Option | Type | Default | Description |
|
|
38
38
|
| --- | --- | --- | --- |
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
|
42
|
-
|
|
|
39
|
+
| generateTypes | boolean | true | Generate .d.ts files |
|
|
40
|
+
| typesOutputDir | string | .macroforge/types | Where to write type files |
|
|
41
|
+
| emitMetadata | boolean | false | Emit macro metadata files |
|
|
42
|
+
| keepDecorators | boolean | false | Keep decorators in output |
|
|
43
43
|
## Framework Integration
|
|
44
44
|
### React (Vite)
|
|
45
45
|
```
|
|
46
|
-
import
|
|
47
|
-
import
|
|
48
|
-
import
|
|
46
|
+
import macroforge from "@macroforge/vite-plugin";
|
|
47
|
+
import react from "@vitejs/plugin-react";
|
|
48
|
+
import { defineConfig } from "vite";
|
|
49
49
|
|
|
50
|
-
export
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
export default defineConfig({
|
|
51
|
+
plugins: [
|
|
52
|
+
macroforge(), // Before React plugin
|
|
53
|
+
react()
|
|
54
|
+
]
|
|
55
55
|
});
|
|
56
56
|
``` ### SvelteKit
|
|
57
57
|
```
|
|
58
|
-
import
|
|
59
|
-
import
|
|
60
|
-
import
|
|
58
|
+
import macroforge from "@macroforge/vite-plugin";
|
|
59
|
+
import { sveltekit } from "@sveltejs/kit/vite";
|
|
60
|
+
import { defineConfig } from "vite";
|
|
61
61
|
|
|
62
|
-
export
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
62
|
+
export default defineConfig({
|
|
63
|
+
plugins: [
|
|
64
|
+
macroforge(), // Before SvelteKit
|
|
65
|
+
sveltekit()
|
|
66
|
+
]
|
|
67
67
|
});
|
|
68
68
|
``` > **Note:** Always place the Macroforge plugin before other framework plugins to ensure macros are expanded first. ## Development Server
|
|
69
69
|
During development, the plugin:
|
|
@@ -74,4 +74,4 @@ export default defineConfig({
|
|
|
74
74
|
During production builds, the plugin:
|
|
75
75
|
- Expands all macros in the source files
|
|
76
76
|
- Generates type declaration files
|
|
77
|
-
- Strips
|
|
77
|
+
- Strips <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@derive</code> decorators from output
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# Svelte Language Server
|
|
2
|
-
|
|
2
|
+
*<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@macroforge<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">/<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">svelte<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">language<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">server</code> provides full Svelte IDE support with macroforge integration.*
|
|
3
3
|
**Developer Installation Required This package is not yet published as an official extension. You'll need to build and install it manually. ## Features
|
|
4
4
|
- **Svelte syntax diagnostics** - Errors and warnings in .svelte files
|
|
5
5
|
- **HTML support** - Hover info, autocompletions, Emmet, outline symbols
|
|
@@ -10,32 +10,31 @@
|
|
|
10
10
|
## Installation
|
|
11
11
|
### 1. Clone the Repository
|
|
12
12
|
```
|
|
13
|
-
git
|
|
14
|
-
cd
|
|
13
|
+
git clone https://github.com/rymskip/macroforge-ts.git
|
|
14
|
+
cd macroforge-ts
|
|
15
15
|
``` ### 2. Build the Language Server
|
|
16
16
|
```
|
|
17
|
-
|
|
18
|
-
npm
|
|
17
|
+
# Install dependencies
|
|
18
|
+
npm install
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
cd
|
|
22
|
-
npm
|
|
20
|
+
# Build the Svelte language server
|
|
21
|
+
cd packages/svelte-language-server
|
|
22
|
+
npm run build
|
|
23
23
|
``` ### 3. Configure Your Editor
|
|
24
|
-
The language server exposes a
|
|
24
|
+
The language server exposes a **<code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">svelteserver</code> binary that implements the Language Server Protocol (LSP). Configure your editor to use it:
|
|
25
25
|
```
|
|
26
|
-
|
|
26
|
+
# The binary is located at:
|
|
27
27
|
./packages/svelte-language-server/bin/server.js
|
|
28
28
|
``` ## Package Info
|
|
29
|
-
| Package |
|
|
29
|
+
| Package | @macroforge/svelte-language-server |
|
|
30
30
|
| Version | 0.1.7 |
|
|
31
|
-
| CLI Command |
|
|
31
|
+
| CLI Command | svelteserver |
|
|
32
32
|
| Node Version | >= 18.0.0 |
|
|
33
33
|
## How It Works
|
|
34
34
|
The Svelte language server extends the standard Svelte language tooling with macroforge integration:
|
|
35
|
-
1. Parses
|
|
36
|
-
2. Expands macros using the
|
|
35
|
+
1. Parses <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">.svelte</code> files and extracts TypeScript/JavaScript blocks
|
|
36
|
+
2. Expands macros using the <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">@macroforge<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">/<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">typescript<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">plugin</code>
|
|
37
37
|
3. Maps diagnostics back to original source positions
|
|
38
38
|
4. Provides completions for macro-generated methods
|
|
39
39
|
## Using with Zed
|
|
40
|
-
For Zed editor, see the [Zed Extensions](../../docs/language-servers/zed) page for the dedicated
|
|
41
|
-
**
|
|
40
|
+
For Zed editor, see the [Zed Extensions](../../docs/language-servers/zed) page for the dedicated <code class="shiki-inline"><span class="line"><span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">svelte<span style="--shiki-dark:#F97583;--shiki-light:#D73A49">-<span style="--shiki-dark:#E1E4E8;--shiki-light:#24292E">macroforge</code> extension.
|