Skip to content

Commit 584b9e4

Browse files
committed
cli: Deduplicate code with a diagnose fn
1 parent 2a65be9 commit 584b9e4

File tree

13 files changed

+186
-266
lines changed

13 files changed

+186
-266
lines changed

build-aux/re.sonny.Workbench.Devel.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://raw.githubusercontent.com/flatpak/flatpak-builder/main/data/flatpak-manifest.schema.json",
33
"id": "re.sonny.Workbench.Devel",
44
"runtime": "org.gnome.Sdk",
5-
"runtime-version": "47",
5+
"runtime-version": "master",
66
"sdk": "org.gnome.Sdk",
77
"sdk-extensions": [
88
"org.freedesktop.Sdk.Extension.vala",

build-aux/re.sonny.Workbench.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"$schema": "https://raw.githubusercontent.com/flatpak/flatpak-builder/main/data/flatpak-manifest.schema.json",
33
"id": "re.sonny.Workbench",
44
"runtime": "org.gnome.Sdk",
5-
"runtime-version": "47",
5+
"runtime-version": "master",
66
"sdk": "org.gnome.Sdk",
77
"sdk-extensions": [
88
"org.freedesktop.Sdk.Extension.vala",

build-aux/wip/run.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ async function exec(argv, { cancellable = null /*, verbose = false*/ }) {
225225
return arg.toString();
226226
});
227227

228-
console.debug(`$ ${argv}`);
228+
console.debug(`$ ${argv.join(" ")}`);
229229

230230
let cancelId = 0;
231231

data/app.desktop

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ Type=Application
88
Categories=WebDevelopment;Development;IDE;GNOME;GTK;
99
Icon=@app_id@
1010
# TRANSLATORS: Don't translate
11-
Keywords=CSS;JavaScript;GJS;Blueprint;builder;Vala;GTK;libadwaita;Python;PyGObject;Rust;doc;playground;code;
11+
Keywords=CSS;JavaScript;GJS;Blueprint;builder;Vala;GTK;libadwaita;Python;PyGObject;Rust;doc;playground;code;TypeScript;
1212
DBusActivatable=true
1313
StartupNotify=true

src/cli/blueprint.js

Lines changed: 29 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,51 +5,37 @@ import Gtk from "gi://Gtk";
55
import { getLanguage } from "../common.js";
66
import { parse } from "../langs/xml/xml.js";
77
import { LSPError } from "../lsp/LSP.js";
8-
import { waitForDiagnostics } from "./lint.js";
9-
import { serializeDiagnostics, checkFile } from "./util.js";
10-
11-
export default async function blueprint({ file_blueprint, lsp_clients }) {
12-
print(` ${file_blueprint.get_path()}`);
13-
const uri = file_blueprint.get_uri();
14-
const languageId = "blueprint";
15-
let version = 0;
16-
17-
const [contents] = await file_blueprint.load_contents_async(null);
18-
const text = new TextDecoder().decode(contents);
19-
20-
await lsp_clients.blueprint._notify("textDocument/didOpen", {
21-
textDocument: {
22-
uri,
23-
languageId,
24-
version: version++,
25-
text,
8+
import { checkFile, diagnose } from "./util.js";
9+
10+
const languageId = "blueprint";
11+
12+
export default async function blueprint({ file, lspc }) {
13+
print(` ${file.get_path()}`);
14+
15+
const text = await diagnose({
16+
file,
17+
lspc,
18+
languageId,
19+
filter(diagnostic) {
20+
// No replacements yet
21+
return ![
22+
"Gtk.ShortcutsShortcut is deprecated\nhint: This widget will be removed in GTK 5",
23+
"Gtk.ShortcutLabel is deprecated\nhint: This widget will be removed in GTK 5",
24+
].includes(diagnostic.message);
2625
},
2726
});
27+
if (text === false) return false;
2828

29-
const diagnostics = await waitForDiagnostics({
30-
uri,
31-
lspc: lsp_clients.blueprint,
32-
});
33-
if (diagnostics.length > 0) {
34-
printerr(serializeDiagnostics({ diagnostics }));
35-
return false;
36-
}
37-
38-
print(` ✅ lints`);
39-
40-
const { xml } = await lsp_clients.blueprint._request(
41-
"textDocument/x-blueprint-compile",
42-
{
43-
textDocument: {
44-
uri,
45-
},
29+
const { xml } = await lspc._request("textDocument/x-blueprint-compile", {
30+
textDocument: {
31+
uri: file.get_uri(),
4632
},
47-
);
33+
});
4834

4935
print(` ✅ compiles`);
5036

5137
try {
52-
await lsp_clients.blueprint._request("x-blueprint/decompile", {
38+
await lspc._request("x-blueprint/decompile", {
5339
text: xml,
5440
});
5541
print(" ✅ decompiles");
@@ -68,16 +54,16 @@ export default async function blueprint({ file_blueprint, lsp_clients }) {
6854
}
6955

7056
const checks = await checkFile({
71-
lspc: lsp_clients.blueprint,
72-
file: file_blueprint,
73-
lang: getLanguage("blueprint"),
74-
uri,
57+
lspc,
58+
file,
59+
lang: getLanguage(languageId),
60+
uri: file.get_uri(),
7561
});
7662
if (!checks) return false;
7763

78-
await lsp_clients.blueprint._notify("textDocument/didClose", {
64+
await lspc._notify("textDocument/didClose", {
7965
textDocument: {
80-
uri,
66+
uri: file.get_uri(),
8167
},
8268
});
8369

src/cli/css.js

Lines changed: 12 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,27 @@
11
/* eslint-disable no-restricted-globals */
22

33
import { getLanguage } from "../common.js";
4-
import { waitForDiagnostics } from "./lint.js";
5-
import { serializeDiagnostics, checkFile } from "./util.js";
4+
import { checkFile, diagnose } from "./util.js";
65

7-
export default async function css({ file_css, lsp_clients }) {
8-
print(` ${file_css.get_path()}`);
6+
const languageId = "css";
97

10-
const uri = file_css.get_uri();
11-
const languageId = "css";
12-
let version = 0;
8+
export default async function css({ file, lspc }) {
9+
print(` ${file.get_path()}`);
1310

14-
const [contents] = await file_css.load_contents_async(null);
15-
const text = new TextDecoder().decode(contents);
16-
17-
await lsp_clients.css._notify("textDocument/didOpen", {
18-
textDocument: {
19-
uri,
20-
languageId,
21-
version: version++,
22-
text,
23-
},
24-
});
25-
26-
const diagnostics = await waitForDiagnostics({
27-
uri,
28-
lspc: lsp_clients.css,
29-
});
30-
if (diagnostics.length > 0) {
31-
printerr(serializeDiagnostics({ diagnostics }));
32-
return false;
33-
}
34-
print(` ✅ lints`);
11+
const text = await diagnose({ file, lspc, languageId });
12+
if (text === false) return false;
3513

3614
const checks = await checkFile({
37-
lspc: lsp_clients.css,
38-
file: file_css,
39-
lang: getLanguage("css"),
40-
uri,
15+
lspc,
16+
file,
17+
lang: getLanguage(languageId),
18+
uri: file.get_uri(),
4119
});
4220
if (!checks) return false;
4321

44-
await lsp_clients.css._notify("textDocument/didClose", {
22+
await lspc._notify("textDocument/didClose", {
4523
textDocument: {
46-
uri,
24+
uri: file.get_uri(),
4725
},
4826
});
4927
}

src/cli/javascript.js

Lines changed: 15 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,30 @@
11
/* eslint-disable no-restricted-globals */
22

33
import { getLanguage } from "../common.js";
4-
import { waitForDiagnostics } from "./lint.js";
5-
import { serializeDiagnostics, checkFile, getCodeObjectIds } from "./util.js";
4+
import { checkFile, getCodeObjectIds, diagnose } from "./util.js";
65

7-
export default async function typescript({
8-
file_javascript,
9-
lsp_clients,
6+
const languageId = "javascript";
7+
8+
export default async function javascript({
9+
file,
10+
lspc,
1011
blueprint_object_ids,
1112
demo_dir,
1213
application,
1314
builder,
1415
template,
1516
window,
1617
}) {
17-
print(` ${file_javascript.get_path()}`);
18-
19-
const uri = file_javascript.get_uri();
20-
const languageId = "javascript";
21-
let version = 0;
22-
23-
const [contents] = await file_javascript.load_contents_async(null);
24-
const text = new TextDecoder().decode(contents);
18+
print(` ${file.get_path()}`);
2519

26-
await lsp_clients.javascript._notify("textDocument/didOpen", {
27-
textDocument: {
28-
uri,
29-
languageId,
30-
version: version++,
31-
text,
32-
},
33-
});
34-
35-
const diagnostics = await waitForDiagnostics({
36-
uri,
37-
lspc: lsp_clients.javascript,
38-
});
39-
if (diagnostics.length > 0) {
40-
printerr(serializeDiagnostics({ diagnostics }));
41-
return false;
42-
}
43-
print(` ✅ lints`);
20+
const text = await diagnose({ file, lspc, languageId });
21+
if (text === false) return false;
4422

4523
const checks = await checkFile({
46-
lspc: lsp_clients.javascript,
47-
file: file_javascript,
24+
lspc: lspc,
25+
file: file,
4826
lang: getLanguage("javascript"),
49-
uri,
27+
uri: file.get_uri(),
5028
});
5129
if (!checks) return false;
5230

@@ -69,12 +47,12 @@ export default async function typescript({
6947
preview() {},
7048
};
7149

72-
await import(`file://${file_javascript.get_path()}`);
50+
await import(`file://${file.get_path()}`);
7351
print(" ✅ runs");
7452

75-
await lsp_clients.javascript._notify("textDocument/didClose", {
53+
await lspc._notify("textDocument/didClose", {
7654
textDocument: {
77-
uri,
55+
uri: file.get_uri(),
7856
},
7957
});
8058
}

src/cli/main.js

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -133,22 +133,24 @@ async function ci({ filenames }) {
133133

134134
const file_blueprint = demo_dir.get_child("main.blp");
135135
if (file_blueprint.query_exists(null)) {
136-
({ template, builder, blueprint_object_ids } = await blueprint({
137-
file_blueprint,
138-
lsp_clients,
139-
}));
136+
const result = await blueprint({
137+
file: file_blueprint,
138+
lspc: lsp_clients.blueprint,
139+
});
140+
if (result === false) return;
141+
({ template, builder, blueprint_object_ids } = result);
140142
}
141143

142144
const file_css = demo_dir.get_child("main.css");
143145
if (file_css.query_exists(null)) {
144-
await css({ file_css, lsp_clients });
146+
await css({ file: file_css, lspc: lsp_clients.css });
145147
}
146148

147149
const file_javascript = demo_dir.get_child("main.js");
148150
if (file_javascript.query_exists(null)) {
149151
await javascript({
150-
file_javascript,
151-
lsp_clients,
152+
file: file_javascript,
153+
lspc: lsp_clients.javascript,
152154
blueprint_object_ids,
153155
demo_dir,
154156
application,
@@ -161,8 +163,8 @@ async function ci({ filenames }) {
161163
const file_typescript = demo_dir.get_child("main.ts");
162164
if (file_typescript.query_exists(null)) {
163165
await typescript({
164-
file_typescript,
165-
lsp_clients,
166+
file: file_typescript,
167+
lspc: lsp_clients.typescript,
166168
blueprint_object_ids,
167169
demo_dir,
168170
application,
@@ -174,17 +176,17 @@ async function ci({ filenames }) {
174176

175177
const file_vala = demo_dir.get_child("main.vala");
176178
if (file_vala.query_exists(null)) {
177-
await vala({ file_vala, lsp_clients, demo_dir });
179+
await vala({ file: file_vala, lspc: lsp_clients.vala, demo_dir });
178180
}
179181

180182
const file_python = demo_dir.get_child("main.py");
181183
if (file_python.query_exists(null)) {
182-
await python({ file_python, lsp_clients });
184+
await python({ file: file_python, lspc: lsp_clients.python });
183185
}
184186

185187
const file_rust = demo_dir.get_child("code.rs");
186188
if (file_rust.query_exists(null)) {
187-
await rust({ file_rust, lsp_clients });
189+
await rust({ file: file_rust, lspc: lsp_clients.rust });
188190
}
189191

190192
await Promise.all(

0 commit comments

Comments
 (0)