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

Fix: Clear annotations for modes without corresponding service #106

Merged
merged 2 commits into from
Mar 19, 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
7 changes: 7 additions & 0 deletions packages/ace-linters/src/language-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,12 @@ class SessionLanguageProvider {
return;
}
this.$deltaQueue = [];

this.session.clearAnnotations();
if (this.state.diagnosticMarkers) {
this.state.diagnosticMarkers.setMarkers([]);
}

this.$messageController.changeMode(this.fileName, this.session.getValue(), this.$mode, this.setServerCapabilities);
};

Expand Down Expand Up @@ -536,6 +542,7 @@ class SessionLanguageProvider {
}

private $applyFormat = (edits: lsp.TextEdit[]) => {
edits ??= [];
for (let edit of edits.reverse()) {
this.session.replace(<Ace.Range>toRange(edit.range), edit.newText);
}
Expand Down
21 changes: 21 additions & 0 deletions packages/demo/change_mode.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ace linters Web Worker change mode demo</title>

</head>
<body>
<div id="wrapper">
<div>
<select id="ace_modes">

</select>
</div>

</div>

<script src="bundle.change_mode_demo.js"></script>

</body>
</html>
1 change: 1 addition & 0 deletions packages/demo/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<ul>
<li><a href="webworker.html">Ace linters LSP with WebWorker demo</a> (with JSON-RPC)</li>
<li><a href="default_services.html">Ace linters with WebWorker demo</a> (with default services)</li>
<li><a href="change_mode.html">Ace linters with WebWorker change modes demo</a></li>
<li><a href="rust_analyzer.html">Ace linters LSP for Rust-Analyzer on WebWorker demo</a></li>
<li><a href="websocket.html">Ace linters LSP with Web Socket demo</a> (you need LSP server run on 3000 port)</a>
</li>
Expand Down
26 changes: 2 additions & 24 deletions packages/demo/multiprovider/demo.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,9 @@
import "ace-code/esm-resolver";
import "ace-code/src/ext/language_tools";
import {LanguageProvider} from "ace-linters";
import {createEditorWithLSP} from "../utils";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {jsContent} from "../docs-example/javascript-example";

import event from "ace-code/src/lib/event";

import {HashHandler} from "ace-code/src/keyboard/hash_handler";

import keyUtil from "ace-code/src/lib/keys";

let modes = [
{name: "javascript validated by EsLint, with hover, autocompletion and format of Typescript", mode: "ace/mode/javascript", content: jsContent},
];
Expand All @@ -30,21 +24,5 @@ languageProvider.setGlobalOptions("typescript", {
jsx: 1
}
});
let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);

event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
addFormatCommand(languageProvider);
24 changes: 2 additions & 22 deletions packages/demo/rust-analyzer/demo.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
import "ace-code/esm-resolver";
import * as event from "ace-code/src/lib/event";
import {HashHandler} from "ace-code/src/keyboard/hash_handler";
import * as keyUtil from "ace-code/src/lib/keys";

import {AceLanguageClient} from "ace-linters/build/ace-language-client";
import {createEditorWithLSP} from "../utils";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {rustContent} from "../docs-example/rust-example";
import {LanguageClientConfig} from "ace-linters/types/types/language-service";

Expand All @@ -21,21 +18,4 @@ const serverData: LanguageClientConfig = {
let languageProvider = AceLanguageClient.for(serverData);
createEditorWithLSP(mode, 0, languageProvider);

let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);

event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
addFormatCommand(languageProvider);
27 changes: 24 additions & 3 deletions packages/demo/utils.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import * as ace from "ace-code";
import "ace-code/src/ext/language_tools";


import event from "ace-code/src/lib/event";
import {HashHandler} from "ace-code/src/keyboard/hash_handler";
import keyUtil from "ace-code/src/lib/keys";
import * as theme from "ace-code/src/theme/textmate";
import {LanguageProvider} from "ace-linters";
import type {LanguageProvider} from "ace-linters";

export function createCloseButton(el) {
let closeButton = document.createElement("span");
Expand Down Expand Up @@ -59,3 +60,23 @@ export function createEditorWithLSP(mode, i: number, languageProvider: LanguageP
}
return editor;
}

export function addFormatCommand(languageProvider: LanguageProvider) {
let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);
event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
}
24 changes: 2 additions & 22 deletions packages/demo/websockets-lsp/client.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,9 @@
import "ace-code/esm-resolver";
import * as event from "ace-code/src/lib/event";
import {HashHandler} from "ace-code/src/keyboard/hash_handler";
import * as keyUtil from "ace-code/src/lib/keys";
import {jsonContent} from "../docs-example/json-example";

import {json5Content, json5Schema} from "../docs-example/json5-example";

import {createEditorWithLSP} from "../utils";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {AceLanguageClient} from "ace-linters/build/ace-language-client";
import {LanguageClientConfig} from "ace-linters/types/types/language-service";

Expand All @@ -30,21 +27,4 @@ for (let mode of modes) {
i++;
}

let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);

event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
addFormatCommand(languageProvider);
24 changes: 2 additions & 22 deletions packages/demo/websockets-pylsp/client.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import "ace-code/esm-resolver";
import * as event from "ace-code/src/lib/event";
import {HashHandler} from "ace-code/src/keyboard/hash_handler";
import * as keyUtil from "ace-code/src/lib/keys";
import {AceLanguageClient} from "ace-linters/build/ace-language-client";
import {createEditorWithLSP} from "../utils";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {pythonContent} from "../docs-example/python-example";
import {LanguageClientConfig} from "ace-linters/types/types/language-service";

Expand Down Expand Up @@ -52,21 +49,4 @@ for (let mode of modes) {
i++;
}

let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);

event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
addFormatCommand(languageProvider);
24 changes: 2 additions & 22 deletions packages/demo/websockets-sls/client.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import "ace-code/esm-resolver";
import * as event from "ace-code/src/lib/event";
import {HashHandler} from "ace-code/src/keyboard/hash_handler";
import * as keyUtil from "ace-code/src/lib/keys";
import {AceLanguageClient} from "ace-linters/build/ace-language-client";
import {createEditorWithLSP} from "../utils";
import {addFormatCommand, createEditorWithLSP} from "../utils";
import {svelteContent} from "../docs-example/svelte-example";
import {LanguageClientConfig} from "ace-linters/types/types/language-service";

Expand All @@ -26,21 +23,4 @@ for (let mode of modes) {
i++;
}

let menuKb = new HashHandler([
{
bindKey: "Ctrl-Shift-B",
name: "format",
exec: function () {
languageProvider.format();
}
}
]);

event.addCommandKeyListener(window, function (e, hashId, keyCode) {
let keyString = keyUtil.keyCodeToString(keyCode);
let command = menuKb.findKeyCommand(hashId, keyString);
if (command) {
command.exec();
e.preventDefault();
}
});
addFormatCommand(languageProvider);
65 changes: 65 additions & 0 deletions packages/demo/webworker-change-mode/demo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import "ace-code/esm-resolver";
import "ace-code/src/ext/language_tools";
import {typescriptContent} from "../docs-example/typescript-example";
import * as theme from "ace-code/src/theme/textmate";
import {LanguageProvider} from "ace-linters";
import * as ace from "ace-code";
import {addFormatCommand} from "../utils";

let modes = [
{name: "typescript", mode: "ace/mode/typescript", content: typescriptContent},
{name: "json", mode: "ace/mode/json"},
{name: "json5", mode: "ace/mode/json5"},
{name: "html", mode: "ace/mode/html"},
{name: "css", mode: "ace/mode/css"},
{name: "less", mode: "ace/mode/less"},
{name: "scss", mode: "ace/mode/scss"},
{name: "python", mode: "ace/mode/python"},
{name: "javascript", mode: "ace/mode/javascript"},
{name: "tsx", mode: "ace/mode/tsx"},
{name: "lua", mode: "ace/mode/lua"},
{name: "yaml", mode: "ace/mode/yaml"},
{name: "xml", mode: "ace/mode/xml"},
{name: "php", mode: "ace/mode/php"},
{name: "mysql", mode: "ace/mode/mysql"},
{name: "swift", mode: "ace/mode/swift"},
];
let worker = new Worker(new URL('./webworker.ts', import.meta.url));
let languageProvider = LanguageProvider.create(worker);

let el = document.getElementById("ace_modes");
el.onchange = function () {
let mode = modes.find(x => x.name == el["value"]);
editor.session.setMode(mode.mode);
}
for (var i = 0; i < modes.length; i++) {
let option = document.createElement("option");
option.value = modes[i].name;
option.innerText = modes[i].name;
el.appendChild(option);
}

let editorEl = document.createElement("div");
let editorContainer = document.createElement("div");
editorContainer.setAttribute("id", "container");
editorContainer.style.height = "300px";
editorEl.appendChild(editorContainer);
editorEl.style.width = "49%";
editorEl.style.float = "left";
document.getElementById("wrapper").appendChild(editorEl);

let currentMode = modes[0];

let editor = ace.edit("container", {
mode: currentMode.mode,
value: currentMode.content,
enableBasicAutocompletion: true,
enableLiveAutocompletion: true,
enableSnippets: true,
theme: theme,
customScrollbar: true
});

languageProvider.registerEditor(editor);

addFormatCommand(languageProvider);
Loading