[mod] surface client

This commit is contained in:
Andy Bunce 2025-08-07 16:21:29 +01:00
parent 5f094cdd95
commit 5c859d014f
9 changed files with 37 additions and 19 deletions

View file

@ -28,12 +28,11 @@ function simpleWebSocketTransport(uri) {
});
};
function lsp(transport,fileId){
let client = new LSPClient().connect(transport);
return languageServerSupport(client, fileId);
function client(transport){
return new LSPClient().connect(transport)
};
const baseExts = [
lineNumbers(),
highlightActiveLineGutter(),
@ -82,4 +81,4 @@ function createEditorView(state, parent) {
return new EditorView({ state, parent });
}
export { createEditorState, createEditorView, openSearchPanel,openLintPanel, languageServerSupport, baseExts ,lsp, simpleWebSocketTransport};
export { createEditorState, createEditorView, openSearchPanel,openLintPanel, languageServerSupport, baseExts ,client, simpleWebSocketTransport};

View file

@ -1 +1 @@
{"cells":[{"kind":2,"language":"xquery","value":" db:system() "}]}
{"cells":[{"kind":2,"language":"xquery","value":"(:<:)\r\n\r\nimport module namespace docs=\"lsp/docs\" at \"/srv/basex/webapp/lsp/docs.xqm\";"},{"kind":2,"language":"xquery","value":"ws:ids()"},{"kind":2,"language":"xquery","value":"let $f:=docs:list(ws:ids())[1]\r\nreturn docs:get(ws:ids(),$f,\"parse\")"}]}

View file

@ -20,7 +20,7 @@
},
"scripts": {
"build": "rollup src/index.js -m true -f iife -o dist/cm6.bundle.js -p node-resolve,tla --output.name cm6",
"build-cm": "rollup src/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp",
"build-cm": "rollup bundles/src/lsp.js -m true -f iife -o webapp/static/clients/codemirror/lsp.bundle.js -p node-resolve,tla --output.name lsp",
"min-cm": "cd webapp/static/clients/codemirror && npx minify lsp.bundle.js > lsp.bundle.min.js ",
"min": "cd dist && npx minify cm6.bundle.js > cm6.bundle.min.js && npx minify lsp.bundle.js > lsp.bundle.min.js"
}

View file

@ -51,3 +51,21 @@ return (
)
};
(:~ close a file :)
declare function docs:close($socket as xs:string,$uri as xs:string)
as map(*){
let $files:=ws:get($socket,"files",{})
return if(map:contains($files,$uri))
then let $props:=$files($uri)
return (
map:items($props)!ws:delete($socket,.),
ws:set($socket,"files",map:remove($files,$uri))
)
else ()
};
(:~ list a file :)
declare function docs:list($socket as xs:string)
as xs:string*{
ws:get($socket,"files",{})=>map:keys()
};

View file

@ -14,7 +14,7 @@
"selectionRangeProvider": true,
"documentLinkProvider": {},
"serverInfo": {
"name": "BaseX Language Server",
"name": "XQuery 4.0 Language Server",
"version": "0.0.1"
}
}

View file

@ -64,7 +64,7 @@ as empty-sequence()
return ()
};
(:~ didOpen method response :)
(:~ didChange method response :)
declare
function lsp-text:didChange($json as map(*))
as map(*)?

View file

@ -31305,11 +31305,10 @@ ${text}</tr>
});
});
}function client(transport){
return new LSPClient().connect(transport)
}
function lsp(transport,fileId){
let client = new LSPClient().connect(transport);
return languageServerSupport(client, fileId);
}
const baseExts = [
lineNumbers(),
highlightActiveLineGutter(),
@ -31359,10 +31358,10 @@ ${text}</tr>
}
exports.baseExts = baseExts;
exports.client = client;
exports.createEditorState = createEditorState;
exports.createEditorView = createEditorView;
exports.languageServerSupport = languageServerSupport;
exports.lsp = lsp;
exports.openLintPanel = openLintPanel;
exports.openSearchPanel = openSearchPanel;
exports.simpleWebSocketTransport = simpleWebSocketTransport;

File diff suppressed because one or more lines are too long

View file

@ -10,7 +10,7 @@ window.addEventListener('load', () => {
const view = lsp.createEditorView(undefined, document.getElementById("editor"));
view.setState(lsp.createEditorState(doc, lsp.baseExts));
let client;
// Save content to localStorage when the page is about to unload
window.addEventListener('beforeunload', () => {
const doc = view.state.doc.toString();
@ -40,6 +40,7 @@ document.getElementById("load").onchange = e => {
insert: t
}
})
console.log("SYNC")
});
document.getElementById("load").value="";
};
@ -48,11 +49,12 @@ function connect() {
const file = document.getElementById("iFile").value;
lsp.simpleWebSocketTransport(server)
.then(transport => {
let link = lsp.lsp(transport, file);
client = lsp.client(transport);
let plugin=lsp.languageServerSupport(client,file,"xquery")
const doc = view.state.doc.toString();
const state = lsp.createEditorState(doc, [...lsp.baseExts, link]);
const state = lsp.createEditorState(doc, [...lsp.baseExts, plugin]);
view.setState(state);
})
.catch(r => alert("fail"));
.catch(r => alert("connection failed: "+ server));
};
connect();