Skip to content

Commit 27d556c

Browse files
committed
fix diagnostics
1 parent 9b3c38b commit 27d556c

File tree

3 files changed

+59
-55
lines changed

3 files changed

+59
-55
lines changed

sites/svelte-5-preview/src/lib/Input/ModuleEditor.svelte

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,49 @@
11
<script>
22
import { get_repl_context } from '$lib/context.js';
3-
import { get_full_filename } from '$lib/utils.js';
43
import CodeMirror from '../CodeMirror.svelte';
54
65
/** @type {boolean} */
76
export let autocomplete;
87
8+
/** @type {any} */ // TODO
9+
export let error;
10+
11+
/** @type {any[]} */ // TODO
12+
export let warnings;
13+
914
export function focus() {
1015
$module_editor?.focus();
1116
}
1217
13-
const { bundle, handle_change, module_editor, selected, bundling } = get_repl_context();
14-
15-
async function diagnostics() {
16-
/** @type {import('@codemirror/lint').Diagnostic[]} */
17-
const diagnostics = [];
18-
19-
if (!$selected || !$bundle) return diagnostics;
20-
21-
await $bundling;
22-
23-
const filename = get_full_filename($selected);
24-
25-
if (
26-
$bundle.error &&
27-
$bundle.error.filename === filename &&
28-
$bundle.error.start &&
29-
$bundle.error.end
30-
) {
31-
diagnostics.push({
32-
from: $bundle.error.start.character,
33-
to: $bundle.error.end.character,
34-
severity: 'error',
35-
message: $bundle.error.message
36-
});
37-
}
38-
39-
for (const warning of $bundle.warnings) {
40-
if (warning.filename === filename) {
41-
diagnostics.push({
42-
from: warning.start.character,
43-
to: warning.end.character,
44-
severity: 'warning',
45-
message: warning.message
46-
});
47-
}
48-
}
49-
50-
return diagnostics;
51-
}
18+
const { handle_change, module_editor } = get_repl_context();
5219
</script>
5320
5421
<div class="editor-wrapper">
5522
<div class="editor notranslate" translate="no">
5623
<CodeMirror
5724
bind:this={$module_editor}
5825
{autocomplete}
59-
diagnostics={$selected && $bundle ? diagnostics : () => []}
26+
diagnostics={() => {
27+
if (error) {
28+
return [{
29+
severity: 'error',
30+
from: error.position[0],
31+
to: error.position[1],
32+
message: error.message
33+
}];
34+
}
35+
36+
if (warnings) {
37+
return warnings.map((warning) => ({
38+
severity: 'warning',
39+
from: warning.start.character,
40+
to: warning.end.character,
41+
message: warning.message,
42+
}));
43+
}
44+
45+
return [];
46+
}}
6047
on:change={handle_change}
6148
/>
6249
</div>

sites/svelte-5-preview/src/lib/Repl.svelte

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,21 @@
247247
/** @type {import('./workers/workers').CompileMessageData | null} */
248248
let compiled = null;
249249
250-
$: if (compiler && $selected) {
250+
/**
251+
* @param {import('./types').File | null} $selected
252+
* @param {import('svelte/compiler').CompileOptions} $compile_options
253+
*/
254+
async function recompile($selected, $compile_options) {
255+
if (!compiler || !$selected) return;
256+
251257
if ($selected.type === 'svelte' || $selected.type === 'js') {
252-
compiler.compile($selected, $compile_options, false).then((data) => {
253-
compiled = data;
254-
$runes_mode = data.metadata?.runes ?? false;
255-
});
258+
compiled = await compiler.compile($selected, $compile_options, false);
259+
$runes_mode = compiled.metadata?.runes ?? false;
256260
}
257261
}
258262
263+
$: recompile($selected, $compile_options);
264+
259265
$: mobile = width < 540;
260266
261267
$: $toggleable = mobile && orientation === 'columns';
@@ -319,7 +325,7 @@
319325
>
320326
<section slot="a">
321327
<ComponentSelector show_modified={showModified} on:add on:remove />
322-
<ModuleEditor {autocomplete} />
328+
<ModuleEditor {autocomplete} error={compiled?.result.error} warnings={compiled?.result.warnings ?? []} />
323329
</section>
324330
325331
<section slot="b" style="height: 100%;">

sites/svelte-5-preview/src/lib/workers/compiler/index.js

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ function compile({ id, source, options, return_ast }) {
6969
result: {
7070
js: js.code,
7171
css: css?.code || `/* Add a <sty` + `le> tag to see compiled CSS */`,
72-
warnings
73-
},
74-
metadata
72+
error: null,
73+
warnings,
74+
metadata
75+
}
7576
};
7677
} else if (options.filename.endsWith('.svelte.js')) {
7778
const compiled = svelte.compileModule(source, {
@@ -85,9 +86,10 @@ function compile({ id, source, options, return_ast }) {
8586
result: {
8687
js: compiled.js.code,
8788
css,
88-
warnings: compiled.warnings
89-
},
90-
metadata: compiled.metadata
89+
error: null,
90+
warnings: compiled.warnings,
91+
metadata: compiled.metadata
92+
}
9193
};
9294
}
9395
}
@@ -96,7 +98,10 @@ function compile({ id, source, options, return_ast }) {
9698
id,
9799
result: {
98100
js: `// Select a component, or a '.svelte.js' module that uses runes, to see compiled output`,
99-
css
101+
css,
102+
error: null,
103+
warnings: [],
104+
metadata: null
100105
}
101106
};
102107
} catch (err) {
@@ -107,7 +112,13 @@ function compile({ id, source, options, return_ast }) {
107112
id,
108113
result: {
109114
js: message,
110-
css: message
115+
css: message,
116+
error: {
117+
message: err.message,
118+
position: err.position
119+
},
120+
warnings: [],
121+
metadata: null
111122
}
112123
};
113124
}

0 commit comments

Comments
 (0)