Add XQuery Completion Provider
This commit is contained in:
		
							parent
							
								
									5318909fcf
								
							
						
					
					
						commit
						645aa7d6ec
					
				
					 2 changed files with 57 additions and 0 deletions
				
			
		
							
								
								
									
										51
									
								
								src/completion/xquery-completion-item-provider.ts
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								src/completion/xquery-completion-item-provider.ts
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,51 @@
 | 
				
			||||||
 | 
					import { CompletionItem, CompletionItemKind, CompletionItemProvider, Position, TextDocument } from "vscode";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const XQLint = require("xqlint").XQLint;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export class XQueryCompletionItemProvider implements CompletionItemProvider {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    provideCompletionItems(document: TextDocument, position: Position): CompletionItem[] {
 | 
				
			||||||
 | 
					        const completionItems = new Array<CompletionItem>();
 | 
				
			||||||
 | 
					        const linter = new XQLint(document.getText());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        linter.getCompletions({ line: position.line, col: position.character }).forEach((x: any) => {
 | 
				
			||||||
 | 
					            completionItems.push(this._getCompletionItem(x));
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return completionItems;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private _getCompletionItem(xqLintCompletionItem: any): CompletionItem {
 | 
				
			||||||
 | 
					        const completionItem = new CompletionItem(xqLintCompletionItem.name);
 | 
				
			||||||
 | 
					        completionItem.insertText = xqLintCompletionItem.value;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        switch (xqLintCompletionItem.meta) {
 | 
				
			||||||
 | 
					            // functions (always qualified with a colon)
 | 
				
			||||||
 | 
					            case "function":
 | 
				
			||||||
 | 
					                completionItem.kind = CompletionItemKind.Function;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                const funcStart = (xqLintCompletionItem.value.indexOf(":") + 1);
 | 
				
			||||||
 | 
					                const funcEnd = xqLintCompletionItem.value.indexOf("(");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                completionItem.insertText = xqLintCompletionItem.value.substring(funcStart, funcEnd);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // variables and parameters (always qualified with a dollar sign)
 | 
				
			||||||
 | 
					            case "Let binding":
 | 
				
			||||||
 | 
					            case "Local variable":
 | 
				
			||||||
 | 
					            case "Window variable":
 | 
				
			||||||
 | 
					            case "Function parameter":
 | 
				
			||||||
 | 
					                completionItem.kind = CompletionItemKind.Variable;
 | 
				
			||||||
 | 
					                completionItem.insertText = xqLintCompletionItem.value.substring(1);
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // everything else
 | 
				
			||||||
 | 
					            default:
 | 
				
			||||||
 | 
					                completionItem.kind = CompletionItemKind.Text;
 | 
				
			||||||
 | 
					            break;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return completionItem;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
import { languages, window, workspace, commands } from "vscode";
 | 
					import { languages, window, workspace, commands } from "vscode";
 | 
				
			||||||
import { ExtensionContext, TextEditor, TextEditorSelectionChangeEvent, WorkspaceConfiguration } from "vscode";
 | 
					import { ExtensionContext, TextEditor, TextEditorSelectionChangeEvent, WorkspaceConfiguration } from "vscode";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { XQueryCompletionItemProvider } from "./completion/xquery-completion-item-provider";
 | 
				
			||||||
import { FormatAsXmlCommandName, formatAsXml } from "./formatting/commands/formatAsXml";
 | 
					import { FormatAsXmlCommandName, formatAsXml } from "./formatting/commands/formatAsXml";
 | 
				
			||||||
import { MinifyXmlCommandName, minifyXml } from "./formatting/commands/minifyXml";
 | 
					import { MinifyXmlCommandName, minifyXml } from "./formatting/commands/minifyXml";
 | 
				
			||||||
import { XmlFormatterFactory } from "./formatting/xml-formatter";
 | 
					import { XmlFormatterFactory } from "./formatting/xml-formatter";
 | 
				
			||||||
| 
						 | 
					@ -12,6 +13,11 @@ import * as constants from "./constants";
 | 
				
			||||||
export function activate(context: ExtensionContext) {
 | 
					export function activate(context: ExtensionContext) {
 | 
				
			||||||
    const config = workspace.getConfiguration(constants.extensionPrefix);
 | 
					    const config = workspace.getConfiguration(constants.extensionPrefix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /* Completion Features */
 | 
				
			||||||
 | 
					    context.subscriptions.push(
 | 
				
			||||||
 | 
					        languages.registerCompletionItemProvider("xquery", new XQueryCompletionItemProvider(), ":", "$")
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* Formatting Features */
 | 
					    /* Formatting Features */
 | 
				
			||||||
    const xmlFormattingEditProvider = new XmlFormattingEditProvider(config, XmlFormatterFactory.getXmlFormatter());
 | 
					    const xmlFormattingEditProvider = new XmlFormattingEditProvider(config, XmlFormatterFactory.getXmlFormatter());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue