Skip to content

Commit 7bcd33d

Browse files
authored
Fix diagnostics (#9385)
* simplify a whole bunch of stuff * delete more unused stuff * fix diagnostics * prettier --------- Co-authored-by: Rich Harris <[email protected]>
1 parent 2aacfad commit 7bcd33d

File tree

7 files changed

+107
-187
lines changed

7 files changed

+107
-187
lines changed

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

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@
1212
import Message from './Message.svelte';
1313
import { svelteTheme } from './theme.js';
1414
15-
/** @type {import('./types').StartOrEnd | null} */
16-
export let errorLoc = null;
17-
1815
/** @type {import('@codemirror/lint').LintSource | undefined} */
1916
export let diagnostics = undefined;
2017
@@ -171,37 +168,22 @@
171168
172169
let marked = false;
173170
174-
/** @type {number | null}*/
175-
let error_line = null;
176-
177171
let updating_externally = false;
178172
179173
/** @type {import('@codemirror/state').Extension[]} */
180174
let extensions = [];
181175
182176
let cursor_pos = 0;
183177
184-
$: {
185-
if ($cmInstance.view) {
186-
fulfil_module_editor_ready();
187-
}
178+
$: if ($cmInstance.view) {
179+
fulfil_module_editor_ready();
188180
}
189181
190182
$: if ($cmInstance.view && w && h) resize();
191183
192-
$: {
193-
if (marked) {
194-
unmarkText();
195-
marked = false;
196-
}
197-
198-
if (errorLoc) {
199-
markText({ from: errorLoc.character, to: errorLoc.character + 1, className: 'error-loc' });
200-
201-
error_line = errorLoc.line;
202-
} else {
203-
error_line = null;
204-
}
184+
$: if (marked) {
185+
unmarkText();
186+
marked = false;
205187
}
206188
207189
const watcher = EditorView.updateListener.of((viewUpdate) => {

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

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,51 @@
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
6-
/** @type {import('$lib/types').StartOrEnd | null} */
7-
export let errorLoc = null;
8-
95
/** @type {boolean} */
106
export let autocomplete;
117
8+
/** @type {any} */ // TODO
9+
export let error;
10+
11+
/** @type {any[]} */ // TODO
12+
export let warnings;
13+
1214
export function focus() {
1315
$module_editor?.focus();
1416
}
1517
16-
const { bundle, handle_change, module_editor, selected, bundling } = get_repl_context();
17-
18-
async function diagnostics() {
19-
/** @type {import('@codemirror/lint').Diagnostic[]} */
20-
const diagnostics = [];
21-
22-
if (!$selected || !$bundle) return diagnostics;
23-
24-
await $bundling;
25-
26-
const filename = get_full_filename($selected);
27-
28-
if (
29-
$bundle.error &&
30-
$bundle.error.filename === filename &&
31-
$bundle.error.start &&
32-
$bundle.error.end
33-
) {
34-
diagnostics.push({
35-
from: $bundle.error.start.character,
36-
to: $bundle.error.end.character,
37-
severity: 'error',
38-
message: $bundle.error.message
39-
});
40-
}
41-
42-
for (const warning of $bundle.warnings) {
43-
if (warning.filename === filename) {
44-
diagnostics.push({
45-
from: warning.start.character,
46-
to: warning.end.character,
47-
severity: 'warning',
48-
message: warning.message
49-
});
50-
}
51-
}
52-
53-
return diagnostics;
54-
}
18+
const { handle_change, module_editor } = get_repl_context();
5519
</script>
5620
5721
<div class="editor-wrapper">
5822
<div class="editor notranslate" translate="no">
5923
<CodeMirror
6024
bind:this={$module_editor}
61-
{errorLoc}
6225
{autocomplete}
63-
diagnostics={$selected && $bundle ? diagnostics : () => []}
26+
diagnostics={() => {
27+
if (error) {
28+
return [
29+
{
30+
severity: 'error',
31+
from: error.position[0],
32+
to: error.position[1],
33+
message: error.message
34+
}
35+
];
36+
}
37+
38+
if (warnings) {
39+
return warnings.map((warning) => ({
40+
severity: 'warning',
41+
from: warning.start.character,
42+
to: warning.end.character,
43+
message: warning.message
44+
}));
45+
}
46+
47+
return [];
48+
}}
6449
on:change={handle_change}
6550
/>
6651
</div>

sites/svelte-5-preview/src/lib/Output/Compiler.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ export default class Compiler {
4040

4141
/**
4242
* @param {import('$lib/types').File} file
43-
* @param {import('svelte/types/compiler').CompileOptions} options
43+
* @param {import('svelte/compiler').CompileOptions} options
4444
* @param {boolean} return_ast
45-
* @returns
45+
* @returns {Promise<import('$lib/workers/workers').CompileMessageData>}
4646
*/
4747
compile(file, options, return_ast) {
4848
return new Promise((fulfil) => {

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

Lines changed: 22 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
<script>
22
import { get_repl_context } from '$lib/context.js';
3-
import { BROWSER } from 'esm-env';
43
import { marked } from 'marked';
54
import CodeMirror from '../CodeMirror.svelte';
65
import AstView from './AstView.svelte';
7-
import Compiler from './Compiler.js';
86
import CompilerOptions from './CompilerOptions.svelte';
97
import PaneWithPanel from './PaneWithPanel.svelte';
108
import Viewer from './Viewer.svelte';
119
12-
export let svelteUrl;
13-
1410
/** @type {string | null} */
1511
export let status;
1612
17-
/** @type {import('$lib/types').StartOrEnd | null} */
18-
export let sourceErrorLoc = null;
19-
2013
/** @type {import('$lib/types').MessageDetails | null} */
2114
export let runtimeError = null;
2215
@@ -35,62 +28,25 @@
3528
/** @type {'light' | 'dark'} */
3629
export let previewTheme;
3730
38-
/**
39-
* @param {import('$lib/types').File} file
40-
* @param {import('svelte/compiler').CompileOptions} options
41-
*/
42-
export async function set(file, options) {
43-
selected_type = file.type;
31+
/** @type {import('../types').File | null} */
32+
export let selected;
4433
45-
if (file.type === 'json') {
34+
/** @type {import('../workers/workers').CompileMessageData | null} */
35+
export let compiled;
36+
37+
$: if (selected) {
38+
if (selected.type === 'json') {
4639
js_editor.set({ code: `/* Select a component to see its compiled code */`, lang: 'js' });
4740
css_editor.set({ code: `/* Select a component to see its compiled code */`, lang: 'css' });
48-
return;
49-
}
50-
51-
if (file.type === 'md') {
52-
markdown = marked(file.source);
53-
return;
54-
}
55-
56-
if (!compiler) return console.error('Compiler not initialized.');
57-
58-
const compiled = await compiler.compile(file, options, showAst);
59-
if (!js_editor) return; // unmounted
60-
61-
js_editor.set({
62-
code: compiled.js,
63-
lang: 'js'
64-
});
65-
css_editor.set({ code: compiled.css, lang: 'css' });
66-
ast = compiled.ast;
67-
}
68-
69-
/**
70-
* @param {import('$lib/types').File} selected
71-
* @param {import('svelte/compiler').CompileOptions} options
72-
*/
73-
export async function update(selected, options) {
74-
if (selected.type === 'json') return;
75-
76-
if (selected.type === 'md') {
41+
} else if (selected.type === 'md') {
7742
markdown = marked(selected.source);
78-
return;
43+
} else if (compiled) {
44+
js_editor.set({ code: compiled.result.js, lang: 'js' });
45+
css_editor.set({ code: compiled.result.css, lang: 'css' });
7946
}
80-
81-
if (!compiler) return console.error('Compiler not initialized.');
82-
83-
const { result, metadata } = await compiler.compile(selected, options, showAst);
84-
85-
js_editor.update({ code: result.js, lang: 'js' });
86-
css_editor.update({ code: result.css, lang: 'css' });
87-
$runes_mode = metadata?.runes;
88-
ast = result.ast;
8947
}
9048
91-
const { module_editor, runes_mode } = get_repl_context();
92-
93-
const compiler = BROWSER ? new Compiler(svelteUrl) : null;
49+
const { module_editor } = get_repl_context();
9450
9551
/** @type {CodeMirror} */
9652
let js_editor;
@@ -100,15 +56,14 @@
10056
10157
/** @type {'result' | 'js' | 'css' | 'ast'} */
10258
let view = 'result';
103-
let selected_type = '';
10459
let markdown = '';
10560
10661
/** @type {import('svelte/types/compiler/interfaces').Ast} */
10762
let ast;
10863
</script>
10964

11065
<div class="view-toggle">
111-
{#if selected_type === 'md'}
66+
{#if selected?.type === 'md'}
11267
<button class="active">Markdown</button>
11368
{:else}
11469
<button class:active={view === 'result'} on:click={() => (view = 'result')}>Result</button>
@@ -121,7 +76,7 @@
12176
</div>
12277

12378
<!-- component viewer -->
124-
<div class="tab-content" class:visible={selected_type !== 'md' && view === 'result'}>
79+
<div class="tab-content" class:visible={selected?.type !== 'md' && view === 'result'}>
12580
<Viewer
12681
bind:error={runtimeError}
12782
{status}
@@ -133,13 +88,13 @@
13388
</div>
13489

13590
<!-- js output -->
136-
<div class="tab-content" class:visible={selected_type !== 'md' && view === 'js'}>
91+
<div class="tab-content" class:visible={selected?.type !== 'md' && view === 'js'}>
13792
{#if embedded}
138-
<CodeMirror bind:this={js_editor} errorLoc={sourceErrorLoc} readonly />
93+
<CodeMirror bind:this={js_editor} readonly />
13994
{:else}
14095
<PaneWithPanel pos="50%" panel="Compiler options">
14196
<div slot="main">
142-
<CodeMirror bind:this={js_editor} errorLoc={sourceErrorLoc} readonly />
97+
<CodeMirror bind:this={js_editor} readonly />
14398
</div>
14499

145100
<div slot="panel-body">
@@ -150,22 +105,22 @@
150105
</div>
151106

152107
<!-- css output -->
153-
<div class="tab-content" class:visible={selected_type !== 'md' && view === 'css'}>
154-
<CodeMirror bind:this={css_editor} errorLoc={sourceErrorLoc} readonly />
108+
<div class="tab-content" class:visible={selected?.type !== 'md' && view === 'css'}>
109+
<CodeMirror bind:this={css_editor} readonly />
155110
</div>
156111

157112
<!-- ast output -->
158113
{#if showAst}
159-
<div class="tab-content" class:visible={selected_type !== 'md' && view === 'ast'}>
114+
<div class="tab-content" class:visible={selected?.type !== 'md' && view === 'ast'}>
160115
<!-- ast view interacts with the module editor, wait for it first -->
161116
{#if $module_editor}
162-
<AstView {ast} autoscroll={selected_type !== 'md' && view === 'ast'} />
117+
<AstView {ast} autoscroll={selected?.type !== 'md' && view === 'ast'} />
163118
{/if}
164119
</div>
165120
{/if}
166121

167122
<!-- markdown output -->
168-
<div class="tab-content" class:visible={selected_type === 'md'}>
123+
<div class="tab-content" class:visible={selected?.type === 'md'}>
169124
<iframe title="Markdown" srcdoc={markdown} />
170125
</div>
171126

0 commit comments

Comments
 (0)