Compare commits
No commits in common. "5409755b71f8ece8025bfe9440318734d952acab" and "529b57d628263fcda0eeab921b238161cf014cd2" have entirely different histories.
5409755b71
...
529b57d628
8 changed files with 13 additions and 263 deletions
|
|
@ -14,7 +14,7 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"hoverProvider": true,
|
"hoverProvider": true,
|
||||||
"documentSymbolProvider": true,
|
"documentSymbolProvider": false,
|
||||||
"documentRangeFormattingProvider": false,
|
"documentRangeFormattingProvider": false,
|
||||||
"colorProvider": false,
|
"colorProvider": false,
|
||||||
"foldingRangeProvider": false,
|
"foldingRangeProvider": false,
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
"documentLinkProvider": {},
|
"documentLinkProvider": {},
|
||||||
"serverInfo": {
|
"serverInfo": {
|
||||||
"name": "XQuery 4.0b Language Server",
|
"name": "XQuery 4.0b Language Server",
|
||||||
"version": "0.0.2"
|
"version": "0.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -90,8 +90,8 @@ as map(*)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
(:~ rpc response to $json msg, if result empty just acknowledge :)
|
(:~ rpc response to $json msg :)
|
||||||
declare function rpc:result($json as map(*),$result:=())
|
declare function rpc:result($json as map(*),$result)
|
||||||
as map(*)
|
as map(*)
|
||||||
{
|
{
|
||||||
map{
|
map{
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,6 @@ import module namespace rpc = 'rpc' at 'jsonrpc.xqm';
|
||||||
import module namespace lspt = 'lsp-typedefs' at 'lsp-typedefs.xqm';
|
import module namespace lspt = 'lsp-typedefs' at 'lsp-typedefs.xqm';
|
||||||
import module namespace pos="lsp/position" at "position.xqm";
|
import module namespace pos="lsp/position" at "position.xqm";
|
||||||
import module namespace syms="lsp/symbols" at "providers/documentSymbols.xqm";
|
import module namespace syms="lsp/symbols" at "providers/documentSymbols.xqm";
|
||||||
import module namespace comp = 'lsp-completions' at "providers/completions.xqm";
|
|
||||||
|
|
||||||
declare variable $lsp-text:methods:=map{
|
declare variable $lsp-text:methods:=map{
|
||||||
"textDocument/didOpen": lsp-text:didOpen#1,
|
"textDocument/didOpen": lsp-text:didOpen#1,
|
||||||
|
|
@ -62,8 +61,7 @@ function lsp-text:completion($json as map(*))
|
||||||
as map(*)?
|
as map(*)?
|
||||||
{
|
{
|
||||||
let $doc:=$json?params?textDocument?uri
|
let $doc:=$json?params?textDocument?uri
|
||||||
let $context:=$json?params?context (:{"triggerCharacter":":","triggerKind":2.0e0}:)
|
let $result:=()
|
||||||
let $result:=comp:list($context)
|
|
||||||
return rpc:result($json,$result)
|
return rpc:result($json,$result)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -108,236 +108,5 @@ declare record lspt:Diagnostic(
|
||||||
code? as xs:string,
|
code? as xs:string,
|
||||||
source as xs:string:="xquery"
|
source as xs:string:="xquery"
|
||||||
);
|
);
|
||||||
|
|
||||||
declare type lspt:TraceValue as enum( 'off' , 'messages' , 'verbose');
|
declare type lspt:TraceValue as enum( 'off' , 'messages' , 'verbose');
|
||||||
|
|
||||||
(: -----------------completions ------------------:)
|
|
||||||
|
|
||||||
(:
|
|
||||||
The kind of a completion entry. :)
|
|
||||||
|
|
||||||
declare variable $lspt:CompletionItemKindMap:= {
|
|
||||||
"Text": 1,
|
|
||||||
"Method": 2,
|
|
||||||
"Function": 3,
|
|
||||||
"Constructor": 4,
|
|
||||||
"Field": 5,
|
|
||||||
"Variable": 6,
|
|
||||||
"Class": 7,
|
|
||||||
"Interface": 8,
|
|
||||||
"Module": 9,
|
|
||||||
"Property": 10,
|
|
||||||
"Unit": 11,
|
|
||||||
"Value": 12,
|
|
||||||
"Enum": 13,
|
|
||||||
"Keyword": 14,
|
|
||||||
"Snippet": 15,
|
|
||||||
"Color": 16,
|
|
||||||
"File": 17,
|
|
||||||
"Reference": 18,
|
|
||||||
"Folder": 19,
|
|
||||||
"EnumMember": 20,
|
|
||||||
"Constant": 21,
|
|
||||||
"Struct": 22,
|
|
||||||
"Event": 23,
|
|
||||||
"Operator": 24,
|
|
||||||
"TypeParameter": 25
|
|
||||||
};
|
|
||||||
|
|
||||||
declare type lspt:CompletionItemKind as xs:integer;
|
|
||||||
|
|
||||||
(: 1=Completion was triggered by typing an identifier (24x7 code
|
|
||||||
complete), manual invocation (e.g Ctrl+Space) or via API.
|
|
||||||
2=Completion was triggered by a trigger character specified by
|
|
||||||
the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
|
|
||||||
3=Completion was re-triggered as the current completion list is incomplete.
|
|
||||||
:)
|
|
||||||
declare type lspt:CompletionTriggerKind as xs:integer(: 1 | 2 | 3 :);
|
|
||||||
|
|
||||||
(:
|
|
||||||
export interface CompletionItem {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The label of this completion item.
|
|
||||||
*
|
|
||||||
* The label property is also by default the text that
|
|
||||||
* is inserted when selecting this completion.
|
|
||||||
*
|
|
||||||
* If label details are provided the label itself should
|
|
||||||
* be an unqualified name of the completion item.
|
|
||||||
*/
|
|
||||||
label: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Additional details for the label
|
|
||||||
*
|
|
||||||
* @since 3.17.0
|
|
||||||
*/
|
|
||||||
labelDetails?: CompletionItemLabelDetails;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The kind of this completion item. Based of the kind
|
|
||||||
* an icon is chosen by the editor. The standardized set
|
|
||||||
* of available values is defined in `CompletionItemKind`.
|
|
||||||
*/
|
|
||||||
kind?: CompletionItemKind;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tags for this completion item.
|
|
||||||
*
|
|
||||||
* @since 3.15.0
|
|
||||||
*/
|
|
||||||
tags?: CompletionItemTag[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A human-readable string with additional information
|
|
||||||
* about this item, like type or symbol information.
|
|
||||||
*/
|
|
||||||
detail?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A human-readable string that represents a doc-comment.
|
|
||||||
*/
|
|
||||||
documentation?: string | MarkupContent;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates if this item is deprecated.
|
|
||||||
*
|
|
||||||
* @deprecated Use `tags` instead if supported.
|
|
||||||
*/
|
|
||||||
deprecated?: boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Select this item when showing.
|
|
||||||
*
|
|
||||||
* *Note* that only one completion item can be selected and that the
|
|
||||||
* tool / client decides which item that is. The rule is that the *first*
|
|
||||||
* item of those that match best is selected.
|
|
||||||
*/
|
|
||||||
preselect?: boolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A string that should be used when comparing this item
|
|
||||||
* with other items. When omitted the label is used
|
|
||||||
* as the sort text for this item.
|
|
||||||
*/
|
|
||||||
sortText?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A string that should be used when filtering a set of
|
|
||||||
* completion items. When omitted the label is used as the
|
|
||||||
* filter text for this item.
|
|
||||||
*/
|
|
||||||
filterText?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A string that should be inserted into a document when selecting
|
|
||||||
* this completion. When omitted the label is used as the insert text
|
|
||||||
* for this item.
|
|
||||||
*
|
|
||||||
* The `insertText` is subject to interpretation by the client side.
|
|
||||||
* Some tools might not take the string literally. For example
|
|
||||||
* VS Code when code complete is requested in this example
|
|
||||||
* `con<cursor position>` and a completion item with an `insertText` of
|
|
||||||
* `console` is provided it will only insert `sole`. Therefore it is
|
|
||||||
* recommended to use `textEdit` instead since it avoids additional client
|
|
||||||
* side interpretation.
|
|
||||||
*/
|
|
||||||
insertText?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The format of the insert text. The format applies to both the
|
|
||||||
* `insertText` property and the `newText` property of a provided
|
|
||||||
* `textEdit`. If omitted defaults to `InsertTextFormat.PlainText`.
|
|
||||||
*
|
|
||||||
* Please note that the insertTextFormat doesn't apply to
|
|
||||||
* `additionalTextEdits`.
|
|
||||||
*/
|
|
||||||
insertTextFormat?: InsertTextFormat;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* How whitespace and indentation is handled during completion
|
|
||||||
* item insertion. If not provided the client's default value depends on
|
|
||||||
* the `textDocument.completion.insertTextMode` client capability.
|
|
||||||
*
|
|
||||||
* @since 3.16.0
|
|
||||||
* @since 3.17.0 - support for `textDocument.completion.insertTextMode`
|
|
||||||
*/
|
|
||||||
insertTextMode?: InsertTextMode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An edit which is applied to a document when selecting this completion.
|
|
||||||
* When an edit is provided the value of `insertText` is ignored.
|
|
||||||
*
|
|
||||||
* *Note:* The range of the edit must be a single line range and it must
|
|
||||||
* contain the position at which completion has been requested.
|
|
||||||
*
|
|
||||||
* Most editors support two different operations when accepting a completion
|
|
||||||
* item. One is to insert a completion text and the other is to replace an
|
|
||||||
* existing text with a completion text. Since this can usually not be
|
|
||||||
* predetermined by a server it can report both ranges. Clients need to
|
|
||||||
* signal support for `InsertReplaceEdit`s via the
|
|
||||||
* `textDocument.completion.completionItem.insertReplaceSupport` client
|
|
||||||
* capability property.
|
|
||||||
*
|
|
||||||
* *Note 1:* The text edit's range as well as both ranges from an insert
|
|
||||||
* replace edit must be a [single line] and they must contain the position
|
|
||||||
* at which completion has been requested.
|
|
||||||
* *Note 2:* If an `InsertReplaceEdit` is returned the edit's insert range
|
|
||||||
* must be a prefix of the edit's replace range, that means it must be
|
|
||||||
* contained and starting at the same position.
|
|
||||||
*
|
|
||||||
* @since 3.16.0 additional type `InsertReplaceEdit`
|
|
||||||
*/
|
|
||||||
textEdit?: TextEdit | InsertReplaceEdit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The edit text used if the completion item is part of a CompletionList and
|
|
||||||
* CompletionList defines an item default for the text edit range.
|
|
||||||
*
|
|
||||||
* Clients will only honor this property if they opt into completion list
|
|
||||||
* item defaults using the capability `completionList.itemDefaults`.
|
|
||||||
*
|
|
||||||
* If not provided and a list's default range is provided the label
|
|
||||||
* property is used as a text.
|
|
||||||
*
|
|
||||||
* @since 3.17.0
|
|
||||||
*/
|
|
||||||
textEditText?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An optional array of additional text edits that are applied when
|
|
||||||
* selecting this completion. Edits must not overlap (including the same
|
|
||||||
* insert position) with the main edit nor with themselves.
|
|
||||||
*
|
|
||||||
* Additional text edits should be used to change text unrelated to the
|
|
||||||
* current cursor position (for example adding an import statement at the
|
|
||||||
* top of the file if the completion item will insert an unqualified type).
|
|
||||||
*/
|
|
||||||
additionalTextEdits?: TextEdit[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An optional set of characters that when pressed while this completion is
|
|
||||||
* active will accept it first and then type that character. *Note* that all
|
|
||||||
* commit characters should have `length=1` and that superfluous characters
|
|
||||||
* will be ignored.
|
|
||||||
*/
|
|
||||||
commitCharacters?: string[];
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An optional command that is executed *after* inserting this completion.
|
|
||||||
* *Note* that additional modifications to the current document should be
|
|
||||||
* described with the additionalTextEdits-property.
|
|
||||||
*/
|
|
||||||
command?: Command;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A data entry field that is preserved on a completion item between
|
|
||||||
* a completion and a completion resolve request.
|
|
||||||
*/
|
|
||||||
data?: LSPAny;
|
|
||||||
:)
|
|
||||||
declare record lspt:CompletionItem(
|
|
||||||
label as xs:string,
|
|
||||||
kind? as lspt:CompletionItemKind
|
|
||||||
);
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
module namespace comp = 'lsp-completions';
|
|
||||||
|
|
||||||
(: (:{"triggerCharacter":":","triggerKind":2.0e0}:):)
|
|
||||||
declare function comp:list($context as map(*)){
|
|
||||||
message($context,"context: "),
|
|
||||||
()
|
|
||||||
};
|
|
||||||
|
|
@ -63,10 +63,6 @@ form header {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
::backdrop {
|
|
||||||
backdrop-filter: blur(2px);
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 600px) {
|
@media (max-width: 600px) {
|
||||||
grid-template-columns: 100%;
|
grid-template-columns: 100%;
|
||||||
grid-template-rows: auto;
|
grid-template-rows: auto;
|
||||||
|
|
|
||||||
|
|
@ -168,11 +168,11 @@
|
||||||
|
|
||||||
<dialog id="popHelp" popover>
|
<dialog id="popHelp" popover>
|
||||||
<form>
|
<form>
|
||||||
<header>Commands and keys
|
<header>Help
|
||||||
<button type="button" class="btn-close" aria-label="Close"
|
<button type="button" class="btn-close" aria-label="Close"
|
||||||
onclick="$('popHelp').hidePopover(); "></button>
|
onclick="$('popHelp').hidePopover(); "></button>
|
||||||
</header>
|
</header>
|
||||||
<div id="popHelpInfo" class="modal-body" style="height: 50vh;overflow:scroll;">
|
<div id="popHelpInfo" class="modal-body">
|
||||||
TODO
|
TODO
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
|
|
|
||||||
|
|
@ -87,20 +87,14 @@ $("symbols2").onclick = e => {
|
||||||
|
|
||||||
$("cmd").onclick = e => {
|
$("cmd").onclick = e => {
|
||||||
let cmds = lsp.listCommands(view);
|
let cmds = lsp.listCommands(view);
|
||||||
let result="";
|
[...cmds.keys()].forEach(key => {
|
||||||
[...cmds.keys()].sort().forEach(key => {
|
console.log(`${key} ${cmds.get(key).key}`)
|
||||||
result+=`<li>${key} ${cmds.get(key).key}</li>`
|
|
||||||
});
|
});
|
||||||
$("popHelpInfo").innerHTML=`<ul>${result}</ul>`
|
|
||||||
$("popHelp").showPopover()
|
|
||||||
console.log(result)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$("symList").addEventListener("itemSelected", e => {
|
$("symList").addEventListener("itemSelected", e => {
|
||||||
const sel=e.detail.selectionRange;
|
console.log("SYM itemSelected",e.detail);
|
||||||
console.log("SYM selection range",sel);
|
|
||||||
const an=17*e.detail.kind
|
|
||||||
view.dispatch({selection: {anchor: an,head:an+34},scrollIntoView:true});
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("lint").onclick = async e => {
|
$("lint").onclick = async e => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue