Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

slintpad: Update and fix slintpad #5614

Merged
merged 3 commits into from
Jul 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion tools/lsp/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ pub mod lsp_to_editor {
Some(lsp_types::ShowDocumentParams {
uri,
external: Some(false),
take_focus: Some(true),
take_focus: Some(false),
selection: Some(range),
})
}
Expand Down
1 change: 0 additions & 1 deletion tools/lsp/preview.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1548,7 +1548,6 @@ pub mod test {
},
));

i_slint_core::debug_log!("Test source diagnostics:\n{diagnostics:?}");
assert!(diagnostics.is_empty());

component_definition.unwrap().create().unwrap()
Expand Down
4 changes: 1 addition & 3 deletions tools/slintpad/cypress/e2e/smoke_test.cy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,7 @@ describe("Smoke test", () => {

// Other UI elements
cy.get(".edit-area").get(".monaco-editor-background");
cy.get(".content.welcome").contains(
"Welcome to SlintPad",
);
cy.get(".content.welcome").contains("Welcome to SlintPad");

// Menu bar:
cy.get("#menuBar").contains("Share");
Expand Down
24 changes: 17 additions & 7 deletions tools/slintpad/index.html
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
<!doctype html>
<html>

<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="/styles/index.css" />
<title>SlintPad</title>
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous" />

<link
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"
rel="stylesheet"
integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN"
crossorigin="anonymous"
/>

<!--====== Favicon Icon ======-->
<link rel="shortcut icon" href="https://slint.dev/assets/img/favicon.ico">
<link rel="icon" type="image/x-icon" href="https://slint.dev/assets/img/favicon.svg">
<link
rel="shortcut icon"
href="https://slint.dev/assets/img/favicon.ico"
/>
<link
rel="icon"
type="image/x-icon"
href="https://slint.dev/assets/img/favicon.svg"
/>

<script type="module" src="./src/index.ts"></script>
</head>
Expand All @@ -19,5 +30,4 @@
<img class="loader-image" src="static/loader.svg" />
</div>
</body>

</html>
</html>
36 changes: 15 additions & 21 deletions tools/slintpad/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,21 @@
},
"keywords": [],
"author": "",
"overrides": {
"monaco-editor": "npm:@codingame/monaco-editor-treemended@>=1.85.0 <1.86.0",
"vscode": "npm:@codingame/monaco-vscode-api@>=1.85.0 <1.86.0"
},
"resolutions": {
"monaco-editor": "npm:@codingame/monaco-editor-treemended@>=1.85.0 <1.86.0",
"vscode": "npm:@codingame/monaco-vscode-api@>=1.85.0 <1.86.0"
},
"devDependencies": {
"@codingame/monaco-vscode-configuration-service-override": "~6.0.3",
"@codingame/monaco-vscode-editor-service-override": "~6.0.3",
"@codingame/monaco-vscode-languages-service-override": "~6.0.3",
"@codingame/monaco-vscode-model-service-override": "~6.0.3",
"@codingame/monaco-vscode-quickaccess-service-override": "~6.0.3",
"@codingame/monaco-vscode-snippets-service-override": "~6.0.3",
"@codingame/monaco-vscode-storage-service-override": "~6.0.3",
"monaco-editor": "npm:@codingame/monaco-vscode-editor-api@~6.0.3",
"monaco-editor-wrapper": "~5.3.1",
"monaco-languageclient": "~8.6.0",
"vscode": "npm:@codingame/monaco-vscode-api@~6.0.3",
"vscode-languageclient": "~9.0.1",
"vscode-languageserver": "~9.0.1",
"vscode-uri": "~3.0.8",
"@lumino/default-theme": "^2.1.1",
"@lumino/dragdrop": "^2.1.1",
"@lumino/widgets": "^2.1.1",
Expand All @@ -43,21 +49,9 @@
"@typescript-eslint/parser": "^7.1.1",
"cross-env": "^7.0.3",
"eslint": "^8.32.0",
"monaco-editor": "npm:@codingame/monaco-editor-treemended@>=1.85.0 <1.86.0",
"monaco-languageclient": "~7.3.0",
"@codingame/monaco-vscode-configuration-service-override": "~1.85.0",
"@codingame/monaco-vscode-editor-service-override": "~1.85.0",
"@codingame/monaco-vscode-languages-service-override": "~1.85.0",
"@codingame/monaco-vscode-model-service-override": "~1.85.0",
"@codingame/monaco-vscode-quickaccess-service-override": "~1.85.0",
"@codingame/monaco-vscode-snippets-service-override": "~1.85.0",
"@codingame/monaco-vscode-storage-service-override": "~1.85.0",
"path-browserify": "^1.0.1",
"rimraf": "^5.0.0",
"typescript": "~5.3.3",
"vite": "^5.1.5",
"vscode": "npm:@codingame/monaco-vscode-api@>=1.85.0 <1.86.0",
"vscode-languageserver": "8.1.0",
"vscode-languageserver-protocol": "3.17.3"
"vite": "^5.1.5"
}
}
13 changes: 8 additions & 5 deletions tools/slintpad/src/editor_widget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,11 @@ import getEditorServiceOverride, {
IEditorOptions,
IResolvedTextEditorModel,
} from "@codingame/monaco-vscode-editor-service-override";
import getLanguagesServiceOverride from "@codingame/monaco-vscode-languages-service-override";
import getModelServiceOverride from "@codingame/monaco-vscode-model-service-override";
import getSnippetServiceOverride from "@codingame/monaco-vscode-snippets-service-override";
import getStorageServiceOverride from "@codingame/monaco-vscode-storage-service-override";

import "vscode/localExtensionHost";

function openEditor(
_modelRef: IReference<IResolvedTextEditorModel>,
_options: IEditorOptions | undefined,
Expand All @@ -49,8 +49,6 @@ export function initialize(): Promise<void> {
initializeMonacoServices({
...getConfigurationServiceOverride(monaco.Uri.file("/tmp")),
...getEditorServiceOverride(openEditor),
...getLanguagesServiceOverride(),
...getModelServiceOverride(),
...getSnippetServiceOverride(),
...getStorageServiceOverride(),
}).then(() => {
Expand Down Expand Up @@ -249,6 +247,11 @@ class EditorPaneWidget extends Widget {
monaco.editor.onDidCreateModel((model: monaco.editor.ITextModel) =>
this.add_model_listener(model),
);

lsp.show_document_callback = (uri, position) => {
this.goto_position(uri, position);
return true;
};
}

async map_url(url_: string): Promise<string | undefined> {
Expand Down Expand Up @@ -461,7 +464,7 @@ class EditorPaneWidget extends Widget {
language: "slint",
glyphMargin: true,
lightbulb: {
enabled: true,
enabled: monaco.editor.ShowLightbulbIconMode.On,
},
});

Expand Down
10 changes: 9 additions & 1 deletion tools/slintpad/src/highlighting.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,15 @@ import * as monaco from "monaco-editor";
export const slint_language = <monaco.languages.IMonarchLanguage>{
defaultToken: "invalid",

root_keywords: ["import", "from", "export", "global", "component", "struct", "inherits"],
root_keywords: [
"import",
"from",
"export",
"global",
"component",
"struct",
"inherits",
],
inner_keywords: [
"property",
"callback",
Expand Down
38 changes: 38 additions & 0 deletions tools/slintpad/src/lsp.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import {
NotificationMessage,
RequestMessage,
ResponseMessage,
ShowDocumentParams,
} from "vscode-languageclient";
import { MonacoLanguageClient } from "monaco-languageclient";

Expand All @@ -19,12 +20,18 @@ import {
MessageReader,
MessageWriter,
} from "vscode-languageserver-protocol/browser";
import { LspPosition } from "./lsp_integration";

import slint_init, * as slint_preview from "@lsp/slint_lsp_wasm.js";

import type { ResourceUrlMapperFunction } from "@lsp/slint_lsp_wasm.js";
export { ResourceUrlMapperFunction };

export type ShowDocumentCallback = (
_uri: string,
_posiiton: LspPosition,
) => boolean;

function createLanguageClient(
transports: MessageTransports,
): MonacoLanguageClient {
Expand Down Expand Up @@ -107,6 +114,8 @@ export class Lsp {
#lsp_client: MonacoLanguageClient | null = null;
#file_reader: FileReader | null = null;

#show_document_callback: ShowDocumentCallback;

readonly #lsp_worker: Worker;
readonly #lsp_reader: MessageReader;
readonly #lsp_writer: MessageWriter;
Expand All @@ -115,6 +124,8 @@ export class Lsp {

constructor(worker: Worker) {
this.#lsp_worker = worker;
this.#show_document_callback = (_uri, _pos) => true;

const reader = new FilterProxyReader(
new BrowserMessageReader(this.#lsp_worker),
(data: Message) => {
Expand Down Expand Up @@ -156,6 +167,29 @@ export class Lsp {

return true;
}
if ((data as RequestMessage).method == "window/showDocument") {
const request = data as RequestMessage;
const params = request.params as ShowDocumentParams;

const selection = params.selection?.start || {
line: 1,
character: 1,
};

const success = this.#show_document_callback(
params.uri,
selection,
);

writer.write({
jsonrpc: request.jsonrpc,
id: request.id,
result: { success: success },
error: undefined,
} as ResponseMessage);

return true;
}
return false;
},
);
Expand All @@ -181,6 +215,10 @@ export class Lsp {
this.#file_reader = fr;
}

set show_document_callback(cb: ShowDocumentCallback) {
this.#show_document_callback = cb;
}

private read_url(url: string): Promise<string> {
try {
return this.#file_reader?.(url) ?? Promise.reject();
Expand Down
4 changes: 3 additions & 1 deletion tools/slintpad/src/preview_widget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,9 @@ export class PreviewWidget extends Widget {
// when searching the document.
this.#previewer.show_ui().then(() => {
console.info("UI should be up!");
const canvas = document.getElementById(canvas_id) as HTMLElement;
const canvas = document.getElementById(
canvas_id,
) as HTMLElement;
canvas.style.width = "100%";
canvas.style.height = "100%";
});
Expand Down
Loading