UNPKG

2.63 MBJavaScriptView Raw
1/******/ (() => { // webpackBootstrap
2/******/ var __webpack_modules__ = ([
3/* 0 */
4/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
5
6"use strict";
7
8var __assign = (this && this.__assign) || function () {
9 __assign = Object.assign || function(t) {
10 for (var s, i = 1, n = arguments.length; i < n; i++) {
11 s = arguments[i];
12 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
13 t[p] = s[p];
14 }
15 return t;
16 };
17 return __assign.apply(this, arguments);
18};
19var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
20 if (k2 === undefined) k2 = k;
21 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
22}) : (function(o, m, k, k2) {
23 if (k2 === undefined) k2 = k;
24 o[k2] = m[k];
25}));
26var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27 Object.defineProperty(o, "default", { enumerable: true, value: v });
28}) : function(o, v) {
29 o["default"] = v;
30});
31var __importStar = (this && this.__importStar) || function (mod) {
32 if (mod && mod.__esModule) return mod;
33 var result = {};
34 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
35 __setModuleDefault(result, mod);
36 return result;
37};
38var __importDefault = (this && this.__importDefault) || function (mod) {
39 return (mod && mod.__esModule) ? mod : { "default": mod };
40};
41Object.defineProperty(exports, "__esModule", ({ value: true }));
42var shvl = __importStar(__webpack_require__(1));
43var vscode_languageserver_1 = __webpack_require__(2);
44var constant_1 = __webpack_require__(64);
45var completion_1 = __webpack_require__(65);
46var completionResolve_1 = __webpack_require__(176);
47var definition_1 = __webpack_require__(177);
48var documentHighlight_1 = __webpack_require__(178);
49var foldingRange_1 = __webpack_require__(179);
50var hover_1 = __webpack_require__(180);
51var references_1 = __webpack_require__(181);
52var rename_1 = __webpack_require__(182);
53var signatureHelp_1 = __webpack_require__(183);
54var builtin_1 = __webpack_require__(77);
55var config_1 = __importDefault(__webpack_require__(73));
56var connection_1 = __webpack_require__(156);
57var documents_1 = __webpack_require__(74);
58var parser_1 = __webpack_require__(184);
59var selectionRange_1 = __webpack_require__(388);
60var documentSymbol_1 = __webpack_require__(389);
61// lsp initialize
62connection_1.connection.onInitialize(function (param) {
63 var _a = param.initializationOptions, initializationOptions = _a === void 0 ? {} : _a;
64 var isNeovim = initializationOptions.isNeovim, iskeyword = initializationOptions.iskeyword, runtimepath = initializationOptions.runtimepath, vimruntime = initializationOptions.vimruntime, diagnostic = initializationOptions.diagnostic, suggest = initializationOptions.suggest, indexes = initializationOptions.indexes;
65 var runtimepaths = runtimepath ? runtimepath.split(",") : [];
66 // config by user's initializationOptions
67 var conf = {
68 isNeovim: isNeovim || false,
69 iskeyword: iskeyword || "",
70 runtimepath: runtimepaths,
71 vimruntime: (vimruntime || "").trim(),
72 diagnostic: __assign({ enable: true }, (diagnostic || {})),
73 snippetSupport: shvl.get(param, "capabilities.textDocument.completion.completionItem.snippetSupport"),
74 suggest: __assign({ fromRuntimepath: false, fromVimruntime: true }, (suggest || {})),
75 indexes: __assign({ runtimepath: true, gap: 100, count: 1, projectRootPatterns: constant_1.projectRootPatterns }, (indexes || {})),
76 capabilities: param.capabilities
77 };
78 // init config
79 config_1.default.init(conf);
80 // init builtin docs
81 builtin_1.builtinDocs.init();
82 return {
83 capabilities: {
84 textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
85 documentHighlightProvider: true,
86 foldingRangeProvider: true,
87 selectionRangeProvider: true,
88 documentSymbolProvider: true,
89 hoverProvider: true,
90 completionProvider: {
91 triggerCharacters: [".", ":", "#", "[", "&", "$", "<", '"', "'"],
92 resolveProvider: true,
93 },
94 signatureHelpProvider: {
95 triggerCharacters: ["(", ","],
96 },
97 definitionProvider: true,
98 referencesProvider: true,
99 renameProvider: {
100 prepareProvider: true,
101 },
102 },
103 };
104});
105// document change or open
106documents_1.documents.onDidChangeContent(function (change) {
107 parser_1.next(change.document);
108});
109documents_1.documents.onDidClose(function (evt) {
110 parser_1.unsubscribe(evt.document);
111});
112// listen for document's open/close/change
113documents_1.documents.listen(connection_1.connection);
114// handle completion
115connection_1.connection.onCompletion(completion_1.completionProvider);
116// handle completion resolve
117connection_1.connection.onCompletionResolve(completionResolve_1.completionResolveProvider);
118// handle signature help
119connection_1.connection.onSignatureHelp(signatureHelp_1.signatureHelpProvider);
120// handle hover
121connection_1.connection.onHover(hover_1.hoverProvider);
122// handle definition request
123connection_1.connection.onDefinition(definition_1.definitionProvider);
124// handle references
125connection_1.connection.onReferences(references_1.referencesProvider);
126// handle rename
127connection_1.connection.onPrepareRename(rename_1.prepareProvider);
128connection_1.connection.onRenameRequest(rename_1.renameProvider);
129// document highlight
130connection_1.connection.onDocumentHighlight(documentHighlight_1.documentHighlightProvider);
131// folding range
132connection_1.connection.onFoldingRanges(foldingRange_1.foldingRangeProvider);
133// select range
134connection_1.connection.onSelectionRanges(selectionRange_1.selectionRangeProvider);
135// document symbols
136connection_1.connection.onDocumentSymbol(documentSymbol_1.documentSymbolProvider);
137connection_1.connection.onNotification('$/change/iskeyword', function (iskeyword) {
138 config_1.default.changeByKey('iskeyword', iskeyword);
139});
140// lsp start
141connection_1.connection.listen();
142
143
144/***/ }),
145/* 1 */
146/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
147
148"use strict";
149__webpack_require__.r(__webpack_exports__);
150/* harmony export */ __webpack_require__.d(__webpack_exports__, {
151/* harmony export */ "get": () => (/* binding */ t),
152/* harmony export */ "set": () => (/* binding */ n)
153/* harmony export */ });
154function t(t,n,r){return void 0===(t=(n.split?n.split("."):n).reduce(function(t,n){return t&&t[n]},t))?r:t}function n(t,n,r,e){return(n=n.split?n.split("."):n).slice(0,-1).reduce(function(t,n){return t[n]=t[n]||{}},t)[n.pop()]=r,t}
155//# sourceMappingURL=shvl.mjs.map
156
157
158/***/ }),
159/* 2 */
160/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
161
162"use strict";
163
164/* --------------------------------------------------------------------------------------------
165 * Copyright (c) Microsoft Corporation. All rights reserved.
166 * Licensed under the MIT License. See License.txt in the project root for license information.
167 * ------------------------------------------------------------------------------------------ */
168/// <reference path="../../typings/thenable.d.ts" />
169var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
170 if (k2 === undefined) k2 = k;
171 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
172}) : (function(o, m, k, k2) {
173 if (k2 === undefined) k2 = k;
174 o[k2] = m[k];
175}));
176var __exportStar = (this && this.__exportStar) || function(m, exports) {
177 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
178};
179Object.defineProperty(exports, "__esModule", ({ value: true }));
180exports.createConnection = exports.Files = void 0;
181const Is = __webpack_require__(3);
182const server_1 = __webpack_require__(4);
183const fm = __webpack_require__(58);
184const node_1 = __webpack_require__(62);
185__exportStar(__webpack_require__(62), exports);
186__exportStar(__webpack_require__(63), exports);
187var Files;
188(function (Files) {
189 Files.uriToFilePath = fm.uriToFilePath;
190 Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
191 Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
192 Files.resolve = fm.resolve;
193 Files.resolveModulePath = fm.resolveModulePath;
194})(Files = exports.Files || (exports.Files = {}));
195let _protocolConnection;
196function endProtocolConnection() {
197 if (_protocolConnection === undefined) {
198 return;
199 }
200 try {
201 _protocolConnection.end();
202 }
203 catch (_err) {
204 // Ignore. The client process could have already
205 // did and we can't send an end into the connection.
206 }
207}
208let _shutdownReceived = false;
209let exitTimer = undefined;
210function setupExitTimer() {
211 const argName = '--clientProcessId';
212 function runTimer(value) {
213 try {
214 let processId = parseInt(value);
215 if (!isNaN(processId)) {
216 exitTimer = setInterval(() => {
217 try {
218 process.kill(processId, 0);
219 }
220 catch (ex) {
221 // Parent process doesn't exist anymore. Exit the server.
222 endProtocolConnection();
223 process.exit(_shutdownReceived ? 0 : 1);
224 }
225 }, 3000);
226 }
227 }
228 catch (e) {
229 // Ignore errors;
230 }
231 }
232 for (let i = 2; i < process.argv.length; i++) {
233 let arg = process.argv[i];
234 if (arg === argName && i + 1 < process.argv.length) {
235 runTimer(process.argv[i + 1]);
236 return;
237 }
238 else {
239 let args = arg.split('=');
240 if (args[0] === argName) {
241 runTimer(args[1]);
242 }
243 }
244 }
245}
246setupExitTimer();
247const watchDog = {
248 initialize: (params) => {
249 const processId = params.processId;
250 if (Is.number(processId) && exitTimer === undefined) {
251 // We received a parent process id. Set up a timer to periodically check
252 // if the parent is still alive.
253 setInterval(() => {
254 try {
255 process.kill(processId, 0);
256 }
257 catch (ex) {
258 // Parent process doesn't exist anymore. Exit the server.
259 process.exit(_shutdownReceived ? 0 : 1);
260 }
261 }, 3000);
262 }
263 },
264 get shutdownReceived() {
265 return _shutdownReceived;
266 },
267 set shutdownReceived(value) {
268 _shutdownReceived = value;
269 },
270 exit: (code) => {
271 endProtocolConnection();
272 process.exit(code);
273 }
274};
275function createConnection(arg1, arg2, arg3, arg4) {
276 let factories;
277 let input;
278 let output;
279 let options;
280 if (arg1 !== void 0 && arg1.__brand === 'features') {
281 factories = arg1;
282 arg1 = arg2;
283 arg2 = arg3;
284 arg3 = arg4;
285 }
286 if (node_1.ConnectionStrategy.is(arg1) || node_1.ConnectionOptions.is(arg1)) {
287 options = arg1;
288 }
289 else {
290 input = arg1;
291 output = arg2;
292 options = arg3;
293 }
294 return _createConnection(input, output, options, factories);
295}
296exports.createConnection = createConnection;
297function _createConnection(input, output, options, factories) {
298 if (!input && !output && process.argv.length > 2) {
299 let port = void 0;
300 let pipeName = void 0;
301 let argv = process.argv.slice(2);
302 for (let i = 0; i < argv.length; i++) {
303 let arg = argv[i];
304 if (arg === '--node-ipc') {
305 input = new node_1.IPCMessageReader(process);
306 output = new node_1.IPCMessageWriter(process);
307 break;
308 }
309 else if (arg === '--stdio') {
310 input = process.stdin;
311 output = process.stdout;
312 break;
313 }
314 else if (arg === '--socket') {
315 port = parseInt(argv[i + 1]);
316 break;
317 }
318 else if (arg === '--pipe') {
319 pipeName = argv[i + 1];
320 break;
321 }
322 else {
323 var args = arg.split('=');
324 if (args[0] === '--socket') {
325 port = parseInt(args[1]);
326 break;
327 }
328 else if (args[0] === '--pipe') {
329 pipeName = args[1];
330 break;
331 }
332 }
333 }
334 if (port) {
335 let transport = node_1.createServerSocketTransport(port);
336 input = transport[0];
337 output = transport[1];
338 }
339 else if (pipeName) {
340 let transport = node_1.createServerPipeTransport(pipeName);
341 input = transport[0];
342 output = transport[1];
343 }
344 }
345 var commandLineMessage = 'Use arguments of createConnection or set command line parameters: \'--node-ipc\', \'--stdio\' or \'--socket={number}\'';
346 if (!input) {
347 throw new Error('Connection input stream is not set. ' + commandLineMessage);
348 }
349 if (!output) {
350 throw new Error('Connection output stream is not set. ' + commandLineMessage);
351 }
352 // Backwards compatibility
353 if (Is.func(input.read) && Is.func(input.on)) {
354 let inputStream = input;
355 inputStream.on('end', () => {
356 endProtocolConnection();
357 process.exit(_shutdownReceived ? 0 : 1);
358 });
359 inputStream.on('close', () => {
360 endProtocolConnection();
361 process.exit(_shutdownReceived ? 0 : 1);
362 });
363 }
364 const connectionFactory = (logger) => {
365 const result = node_1.createProtocolConnection(input, output, logger, options);
366 return result;
367 };
368 return server_1.createConnection(connectionFactory, watchDog, factories);
369}
370//# sourceMappingURL=main.js.map
371
372/***/ }),
373/* 3 */
374/***/ ((__unused_webpack_module, exports) => {
375
376"use strict";
377
378/* --------------------------------------------------------------------------------------------
379 * Copyright (c) Microsoft Corporation. All rights reserved.
380 * Licensed under the MIT License. See License.txt in the project root for license information.
381 * ------------------------------------------------------------------------------------------ */
382Object.defineProperty(exports, "__esModule", ({ value: true }));
383exports.thenable = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
384function boolean(value) {
385 return value === true || value === false;
386}
387exports.boolean = boolean;
388function string(value) {
389 return typeof value === 'string' || value instanceof String;
390}
391exports.string = string;
392function number(value) {
393 return typeof value === 'number' || value instanceof Number;
394}
395exports.number = number;
396function error(value) {
397 return value instanceof Error;
398}
399exports.error = error;
400function func(value) {
401 return typeof value === 'function';
402}
403exports.func = func;
404function array(value) {
405 return Array.isArray(value);
406}
407exports.array = array;
408function stringArray(value) {
409 return array(value) && value.every(elem => string(elem));
410}
411exports.stringArray = stringArray;
412function typedArray(value, check) {
413 return Array.isArray(value) && value.every(check);
414}
415exports.typedArray = typedArray;
416function thenable(value) {
417 return value && func(value.then);
418}
419exports.thenable = thenable;
420//# sourceMappingURL=is.js.map
421
422/***/ }),
423/* 4 */
424/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
425
426"use strict";
427
428/* --------------------------------------------------------------------------------------------
429 * Copyright (c) Microsoft Corporation. All rights reserved.
430 * Licensed under the MIT License. See License.txt in the project root for license information.
431 * ------------------------------------------------------------------------------------------ */
432Object.defineProperty(exports, "__esModule", ({ value: true }));
433exports.createConnection = exports.combineFeatures = exports.combineLanguagesFeatures = exports.combineWorkspaceFeatures = exports.combineWindowFeatures = exports.combineClientFeatures = exports.combineTracerFeatures = exports.combineTelemetryFeatures = exports.combineConsoleFeatures = exports._LanguagesImpl = exports.BulkUnregistration = exports.BulkRegistration = exports.ErrorMessageTracker = exports.TextDocuments = void 0;
434const vscode_languageserver_protocol_1 = __webpack_require__(5);
435const Is = __webpack_require__(3);
436const UUID = __webpack_require__(48);
437const progress_1 = __webpack_require__(49);
438const configuration_1 = __webpack_require__(50);
439const workspaceFolders_1 = __webpack_require__(51);
440const callHierarchy_1 = __webpack_require__(52);
441const semanticTokens_1 = __webpack_require__(53);
442const showDocument_1 = __webpack_require__(54);
443const fileOperations_1 = __webpack_require__(55);
444const linkedEditingRange_1 = __webpack_require__(56);
445const moniker_1 = __webpack_require__(57);
446function null2Undefined(value) {
447 if (value === null) {
448 return undefined;
449 }
450 return value;
451}
452/**
453 * A manager for simple text documents
454 */
455class TextDocuments {
456 /**
457 * Create a new text document manager.
458 */
459 constructor(configuration) {
460 this._documents = Object.create(null);
461 this._configuration = configuration;
462 this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
463 this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
464 this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
465 this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
466 this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
467 }
468 /**
469 * An event that fires when a text document managed by this manager
470 * has been opened or the content changes.
471 */
472 get onDidChangeContent() {
473 return this._onDidChangeContent.event;
474 }
475 /**
476 * An event that fires when a text document managed by this manager
477 * has been opened.
478 */
479 get onDidOpen() {
480 return this._onDidOpen.event;
481 }
482 /**
483 * An event that fires when a text document managed by this manager
484 * will be saved.
485 */
486 get onWillSave() {
487 return this._onWillSave.event;
488 }
489 /**
490 * Sets a handler that will be called if a participant wants to provide
491 * edits during a text document save.
492 */
493 onWillSaveWaitUntil(handler) {
494 this._willSaveWaitUntil = handler;
495 }
496 /**
497 * An event that fires when a text document managed by this manager
498 * has been saved.
499 */
500 get onDidSave() {
501 return this._onDidSave.event;
502 }
503 /**
504 * An event that fires when a text document managed by this manager
505 * has been closed.
506 */
507 get onDidClose() {
508 return this._onDidClose.event;
509 }
510 /**
511 * Returns the document for the given URI. Returns undefined if
512 * the document is not managed by this instance.
513 *
514 * @param uri The text document's URI to retrieve.
515 * @return the text document or `undefined`.
516 */
517 get(uri) {
518 return this._documents[uri];
519 }
520 /**
521 * Returns all text documents managed by this instance.
522 *
523 * @return all text documents.
524 */
525 all() {
526 return Object.keys(this._documents).map(key => this._documents[key]);
527 }
528 /**
529 * Returns the URIs of all text documents managed by this instance.
530 *
531 * @return the URI's of all text documents.
532 */
533 keys() {
534 return Object.keys(this._documents);
535 }
536 /**
537 * Listens for `low level` notification on the given connection to
538 * update the text documents managed by this instance.
539 *
540 * Please note that the connection only provides handlers not an event model. Therefore
541 * listening on a connection will overwrite the following handlers on a connection:
542 * `onDidOpenTextDocument`, `onDidChangeTextDocument`, `onDidCloseTextDocument`,
543 * `onWillSaveTextDocument`, `onWillSaveTextDocumentWaitUntil` and `onDidSaveTextDocument`.
544 *
545 * Use the corresponding events on the TextDocuments instance instead.
546 *
547 * @param connection The connection to listen on.
548 */
549 listen(connection) {
550 connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
551 connection.onDidOpenTextDocument((event) => {
552 let td = event.textDocument;
553 let document = this._configuration.create(td.uri, td.languageId, td.version, td.text);
554 this._documents[td.uri] = document;
555 let toFire = Object.freeze({ document });
556 this._onDidOpen.fire(toFire);
557 this._onDidChangeContent.fire(toFire);
558 });
559 connection.onDidChangeTextDocument((event) => {
560 let td = event.textDocument;
561 let changes = event.contentChanges;
562 if (changes.length === 0) {
563 return;
564 }
565 let document = this._documents[td.uri];
566 const { version } = td;
567 if (version === null || version === undefined) {
568 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
569 }
570 document = this._configuration.update(document, changes, version);
571 this._documents[td.uri] = document;
572 this._onDidChangeContent.fire(Object.freeze({ document }));
573 });
574 connection.onDidCloseTextDocument((event) => {
575 let document = this._documents[event.textDocument.uri];
576 if (document) {
577 delete this._documents[event.textDocument.uri];
578 this._onDidClose.fire(Object.freeze({ document }));
579 }
580 });
581 connection.onWillSaveTextDocument((event) => {
582 let document = this._documents[event.textDocument.uri];
583 if (document) {
584 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
585 }
586 });
587 connection.onWillSaveTextDocumentWaitUntil((event, token) => {
588 let document = this._documents[event.textDocument.uri];
589 if (document && this._willSaveWaitUntil) {
590 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
591 }
592 else {
593 return [];
594 }
595 });
596 connection.onDidSaveTextDocument((event) => {
597 let document = this._documents[event.textDocument.uri];
598 if (document) {
599 this._onDidSave.fire(Object.freeze({ document }));
600 }
601 });
602 }
603}
604exports.TextDocuments = TextDocuments;
605/**
606 * Helps tracking error message. Equal occurrences of the same
607 * message are only stored once. This class is for example
608 * useful if text documents are validated in a loop and equal
609 * error message should be folded into one.
610 */
611class ErrorMessageTracker {
612 constructor() {
613 this._messages = Object.create(null);
614 }
615 /**
616 * Add a message to the tracker.
617 *
618 * @param message The message to add.
619 */
620 add(message) {
621 let count = this._messages[message];
622 if (!count) {
623 count = 0;
624 }
625 count++;
626 this._messages[message] = count;
627 }
628 /**
629 * Send all tracked messages to the connection's window.
630 *
631 * @param connection The connection established between client and server.
632 */
633 sendErrors(connection) {
634 Object.keys(this._messages).forEach(message => {
635 connection.window.showErrorMessage(message);
636 });
637 }
638}
639exports.ErrorMessageTracker = ErrorMessageTracker;
640class RemoteConsoleImpl {
641 constructor() {
642 }
643 rawAttach(connection) {
644 this._rawConnection = connection;
645 }
646 attach(connection) {
647 this._connection = connection;
648 }
649 get connection() {
650 if (!this._connection) {
651 throw new Error('Remote is not attached to a connection yet.');
652 }
653 return this._connection;
654 }
655 fillServerCapabilities(_capabilities) {
656 }
657 initialize(_capabilities) {
658 }
659 error(message) {
660 this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
661 }
662 warn(message) {
663 this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
664 }
665 info(message) {
666 this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
667 }
668 log(message) {
669 this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
670 }
671 send(type, message) {
672 if (this._rawConnection) {
673 this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
674 }
675 }
676}
677class _RemoteWindowImpl {
678 constructor() {
679 }
680 attach(connection) {
681 this._connection = connection;
682 }
683 get connection() {
684 if (!this._connection) {
685 throw new Error('Remote is not attached to a connection yet.');
686 }
687 return this._connection;
688 }
689 initialize(_capabilities) {
690 }
691 fillServerCapabilities(_capabilities) {
692 }
693 showErrorMessage(message, ...actions) {
694 let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
695 return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
696 }
697 showWarningMessage(message, ...actions) {
698 let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
699 return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
700 }
701 showInformationMessage(message, ...actions) {
702 let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
703 return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
704 }
705}
706const RemoteWindowImpl = showDocument_1.ShowDocumentFeature(progress_1.ProgressFeature(_RemoteWindowImpl));
707var BulkRegistration;
708(function (BulkRegistration) {
709 /**
710 * Creates a new bulk registration.
711 * @return an empty bulk registration.
712 */
713 function create() {
714 return new BulkRegistrationImpl();
715 }
716 BulkRegistration.create = create;
717})(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
718class BulkRegistrationImpl {
719 constructor() {
720 this._registrations = [];
721 this._registered = new Set();
722 }
723 add(type, registerOptions) {
724 const method = Is.string(type) ? type : type.method;
725 if (this._registered.has(method)) {
726 throw new Error(`${method} is already added to this registration`);
727 }
728 const id = UUID.generateUuid();
729 this._registrations.push({
730 id: id,
731 method: method,
732 registerOptions: registerOptions || {}
733 });
734 this._registered.add(method);
735 }
736 asRegistrationParams() {
737 return {
738 registrations: this._registrations
739 };
740 }
741}
742var BulkUnregistration;
743(function (BulkUnregistration) {
744 function create() {
745 return new BulkUnregistrationImpl(undefined, []);
746 }
747 BulkUnregistration.create = create;
748})(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
749class BulkUnregistrationImpl {
750 constructor(_connection, unregistrations) {
751 this._connection = _connection;
752 this._unregistrations = new Map();
753 unregistrations.forEach(unregistration => {
754 this._unregistrations.set(unregistration.method, unregistration);
755 });
756 }
757 get isAttached() {
758 return !!this._connection;
759 }
760 attach(connection) {
761 this._connection = connection;
762 }
763 add(unregistration) {
764 this._unregistrations.set(unregistration.method, unregistration);
765 }
766 dispose() {
767 let unregistrations = [];
768 for (let unregistration of this._unregistrations.values()) {
769 unregistrations.push(unregistration);
770 }
771 let params = {
772 unregisterations: unregistrations
773 };
774 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
775 this._connection.console.info(`Bulk unregistration failed.`);
776 });
777 }
778 disposeSingle(arg) {
779 const method = Is.string(arg) ? arg : arg.method;
780 const unregistration = this._unregistrations.get(method);
781 if (!unregistration) {
782 return false;
783 }
784 let params = {
785 unregisterations: [unregistration]
786 };
787 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
788 this._unregistrations.delete(method);
789 }, (_error) => {
790 this._connection.console.info(`Un-registering request handler for ${unregistration.id} failed.`);
791 });
792 return true;
793 }
794}
795class RemoteClientImpl {
796 attach(connection) {
797 this._connection = connection;
798 }
799 get connection() {
800 if (!this._connection) {
801 throw new Error('Remote is not attached to a connection yet.');
802 }
803 return this._connection;
804 }
805 initialize(_capabilities) {
806 }
807 fillServerCapabilities(_capabilities) {
808 }
809 register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
810 if (typeOrRegistrations instanceof BulkRegistrationImpl) {
811 return this.registerMany(typeOrRegistrations);
812 }
813 else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
814 return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
815 }
816 else {
817 return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
818 }
819 }
820 registerSingle1(unregistration, type, registerOptions) {
821 const method = Is.string(type) ? type : type.method;
822 const id = UUID.generateUuid();
823 let params = {
824 registrations: [{ id, method, registerOptions: registerOptions || {} }]
825 };
826 if (!unregistration.isAttached) {
827 unregistration.attach(this.connection);
828 }
829 return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
830 unregistration.add({ id: id, method: method });
831 return unregistration;
832 }, (_error) => {
833 this.connection.console.info(`Registering request handler for ${method} failed.`);
834 return Promise.reject(_error);
835 });
836 }
837 registerSingle2(type, registerOptions) {
838 const method = Is.string(type) ? type : type.method;
839 const id = UUID.generateUuid();
840 let params = {
841 registrations: [{ id, method, registerOptions: registerOptions || {} }]
842 };
843 return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
844 return vscode_languageserver_protocol_1.Disposable.create(() => {
845 this.unregisterSingle(id, method);
846 });
847 }, (_error) => {
848 this.connection.console.info(`Registering request handler for ${method} failed.`);
849 return Promise.reject(_error);
850 });
851 }
852 unregisterSingle(id, method) {
853 let params = {
854 unregisterations: [{ id, method }]
855 };
856 return this.connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
857 this.connection.console.info(`Un-registering request handler for ${id} failed.`);
858 });
859 }
860 registerMany(registrations) {
861 let params = registrations.asRegistrationParams();
862 return this.connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
863 return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
864 }, (_error) => {
865 this.connection.console.info(`Bulk registration failed.`);
866 return Promise.reject(_error);
867 });
868 }
869}
870class _RemoteWorkspaceImpl {
871 constructor() {
872 }
873 attach(connection) {
874 this._connection = connection;
875 }
876 get connection() {
877 if (!this._connection) {
878 throw new Error('Remote is not attached to a connection yet.');
879 }
880 return this._connection;
881 }
882 initialize(_capabilities) {
883 }
884 fillServerCapabilities(_capabilities) {
885 }
886 applyEdit(paramOrEdit) {
887 function isApplyWorkspaceEditParams(value) {
888 return value && !!value.edit;
889 }
890 let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
891 return this.connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
892 }
893}
894const RemoteWorkspaceImpl = fileOperations_1.FileOperationsFeature(workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl)));
895class TracerImpl {
896 constructor() {
897 this._trace = vscode_languageserver_protocol_1.Trace.Off;
898 }
899 attach(connection) {
900 this._connection = connection;
901 }
902 get connection() {
903 if (!this._connection) {
904 throw new Error('Remote is not attached to a connection yet.');
905 }
906 return this._connection;
907 }
908 initialize(_capabilities) {
909 }
910 fillServerCapabilities(_capabilities) {
911 }
912 set trace(value) {
913 this._trace = value;
914 }
915 log(message, verbose) {
916 if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
917 return;
918 }
919 this.connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
920 message: message,
921 verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
922 });
923 }
924}
925class TelemetryImpl {
926 constructor() {
927 }
928 attach(connection) {
929 this._connection = connection;
930 }
931 get connection() {
932 if (!this._connection) {
933 throw new Error('Remote is not attached to a connection yet.');
934 }
935 return this._connection;
936 }
937 initialize(_capabilities) {
938 }
939 fillServerCapabilities(_capabilities) {
940 }
941 logEvent(data) {
942 this.connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
943 }
944}
945class _LanguagesImpl {
946 constructor() {
947 }
948 attach(connection) {
949 this._connection = connection;
950 }
951 get connection() {
952 if (!this._connection) {
953 throw new Error('Remote is not attached to a connection yet.');
954 }
955 return this._connection;
956 }
957 initialize(_capabilities) {
958 }
959 fillServerCapabilities(_capabilities) {
960 }
961 attachWorkDoneProgress(params) {
962 return progress_1.attachWorkDone(this.connection, params);
963 }
964 attachPartialResultProgress(_type, params) {
965 return progress_1.attachPartialResult(this.connection, params);
966 }
967}
968exports._LanguagesImpl = _LanguagesImpl;
969const LanguagesImpl = moniker_1.MonikerFeature(linkedEditingRange_1.LinkedEditingRangeFeature(semanticTokens_1.SemanticTokensFeature(callHierarchy_1.CallHierarchyFeature(_LanguagesImpl))));
970function combineConsoleFeatures(one, two) {
971 return function (Base) {
972 return two(one(Base));
973 };
974}
975exports.combineConsoleFeatures = combineConsoleFeatures;
976function combineTelemetryFeatures(one, two) {
977 return function (Base) {
978 return two(one(Base));
979 };
980}
981exports.combineTelemetryFeatures = combineTelemetryFeatures;
982function combineTracerFeatures(one, two) {
983 return function (Base) {
984 return two(one(Base));
985 };
986}
987exports.combineTracerFeatures = combineTracerFeatures;
988function combineClientFeatures(one, two) {
989 return function (Base) {
990 return two(one(Base));
991 };
992}
993exports.combineClientFeatures = combineClientFeatures;
994function combineWindowFeatures(one, two) {
995 return function (Base) {
996 return two(one(Base));
997 };
998}
999exports.combineWindowFeatures = combineWindowFeatures;
1000function combineWorkspaceFeatures(one, two) {
1001 return function (Base) {
1002 return two(one(Base));
1003 };
1004}
1005exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
1006function combineLanguagesFeatures(one, two) {
1007 return function (Base) {
1008 return two(one(Base));
1009 };
1010}
1011exports.combineLanguagesFeatures = combineLanguagesFeatures;
1012function combineFeatures(one, two) {
1013 function combine(one, two, func) {
1014 if (one && two) {
1015 return func(one, two);
1016 }
1017 else if (one) {
1018 return one;
1019 }
1020 else {
1021 return two;
1022 }
1023 }
1024 let result = {
1025 __brand: 'features',
1026 console: combine(one.console, two.console, combineConsoleFeatures),
1027 tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
1028 telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
1029 client: combine(one.client, two.client, combineClientFeatures),
1030 window: combine(one.window, two.window, combineWindowFeatures),
1031 workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
1032 };
1033 return result;
1034}
1035exports.combineFeatures = combineFeatures;
1036function createConnection(connectionFactory, watchDog, factories) {
1037 const logger = (factories && factories.console ? new (factories.console(RemoteConsoleImpl))() : new RemoteConsoleImpl());
1038 const connection = connectionFactory(logger);
1039 logger.rawAttach(connection);
1040 const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
1041 const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
1042 const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
1043 const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
1044 const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
1045 const languages = (factories && factories.languages ? new (factories.languages(LanguagesImpl))() : new LanguagesImpl());
1046 const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace, languages];
1047 function asPromise(value) {
1048 if (value instanceof Promise) {
1049 return value;
1050 }
1051 else if (Is.thenable(value)) {
1052 return new Promise((resolve, reject) => {
1053 value.then((resolved) => resolve(resolved), (error) => reject(error));
1054 });
1055 }
1056 else {
1057 return Promise.resolve(value);
1058 }
1059 }
1060 let shutdownHandler = undefined;
1061 let initializeHandler = undefined;
1062 let exitHandler = undefined;
1063 let protocolConnection = {
1064 listen: () => connection.listen(),
1065 sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
1066 onRequest: (type, handler) => connection.onRequest(type, handler),
1067 sendNotification: (type, param) => {
1068 const method = Is.string(type) ? type : type.method;
1069 if (arguments.length === 1) {
1070 connection.sendNotification(method);
1071 }
1072 else {
1073 connection.sendNotification(method, param);
1074 }
1075 },
1076 onNotification: (type, handler) => connection.onNotification(type, handler),
1077 onProgress: connection.onProgress,
1078 sendProgress: connection.sendProgress,
1079 onInitialize: (handler) => initializeHandler = handler,
1080 onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
1081 onShutdown: (handler) => shutdownHandler = handler,
1082 onExit: (handler) => exitHandler = handler,
1083 get console() { return logger; },
1084 get telemetry() { return telemetry; },
1085 get tracer() { return tracer; },
1086 get client() { return client; },
1087 get window() { return remoteWindow; },
1088 get workspace() { return workspace; },
1089 get languages() { return languages; },
1090 onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
1091 onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
1092 __textDocumentSync: undefined,
1093 onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
1094 onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
1095 onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
1096 onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
1097 onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
1098 onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
1099 sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
1100 onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, (params, cancel) => {
1101 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1102 }),
1103 onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, (params, cancel) => {
1104 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1105 }),
1106 onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
1107 onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, (params, cancel) => {
1108 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1109 }),
1110 onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, (params, cancel) => {
1111 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1112 }),
1113 onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, (params, cancel) => {
1114 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1115 }),
1116 onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, (params, cancel) => {
1117 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1118 }),
1119 onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, (params, cancel) => {
1120 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1121 }),
1122 onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, (params, cancel) => {
1123 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1124 }),
1125 onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, (params, cancel) => {
1126 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1127 }),
1128 onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, (params, cancel) => {
1129 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1130 }),
1131 onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, (params, cancel) => {
1132 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1133 }),
1134 onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, (params, cancel) => {
1135 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1136 }),
1137 onCodeActionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionResolveRequest.type, (params, cancel) => {
1138 return handler(params, cancel);
1139 }),
1140 onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, (params, cancel) => {
1141 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1142 }),
1143 onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, (params, cancel) => {
1144 return handler(params, cancel);
1145 }),
1146 onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, (params, cancel) => {
1147 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1148 }),
1149 onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, (params, cancel) => {
1150 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1151 }),
1152 onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, (params, cancel) => {
1153 return handler(params, cancel);
1154 }),
1155 onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, (params, cancel) => {
1156 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1157 }),
1158 onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, (params, cancel) => {
1159 return handler(params, cancel);
1160 }),
1161 onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, (params, cancel) => {
1162 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1163 }),
1164 onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, (params, cancel) => {
1165 return handler(params, cancel);
1166 }),
1167 onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, (params, cancel) => {
1168 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1169 }),
1170 onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, (params, cancel) => {
1171 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1172 }),
1173 onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, (params, cancel) => {
1174 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1175 }),
1176 onSelectionRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, (params, cancel) => {
1177 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1178 }),
1179 onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, (params, cancel) => {
1180 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1181 }),
1182 dispose: () => connection.dispose()
1183 };
1184 for (let remote of allRemotes) {
1185 remote.attach(protocolConnection);
1186 }
1187 connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
1188 watchDog.initialize(params);
1189 if (Is.string(params.trace)) {
1190 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
1191 }
1192 for (let remote of allRemotes) {
1193 remote.initialize(params.capabilities);
1194 }
1195 if (initializeHandler) {
1196 let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token, progress_1.attachWorkDone(connection, params), undefined);
1197 return asPromise(result).then((value) => {
1198 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
1199 return value;
1200 }
1201 let result = value;
1202 if (!result) {
1203 result = { capabilities: {} };
1204 }
1205 let capabilities = result.capabilities;
1206 if (!capabilities) {
1207 capabilities = {};
1208 result.capabilities = capabilities;
1209 }
1210 if (capabilities.textDocumentSync === undefined || capabilities.textDocumentSync === null) {
1211 capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1212 }
1213 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
1214 capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1215 }
1216 for (let remote of allRemotes) {
1217 remote.fillServerCapabilities(capabilities);
1218 }
1219 return result;
1220 });
1221 }
1222 else {
1223 let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
1224 for (let remote of allRemotes) {
1225 remote.fillServerCapabilities(result.capabilities);
1226 }
1227 return result;
1228 }
1229 });
1230 connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
1231 watchDog.shutdownReceived = true;
1232 if (shutdownHandler) {
1233 return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1234 }
1235 else {
1236 return undefined;
1237 }
1238 });
1239 connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
1240 try {
1241 if (exitHandler) {
1242 exitHandler();
1243 }
1244 }
1245 finally {
1246 if (watchDog.shutdownReceived) {
1247 watchDog.exit(0);
1248 }
1249 else {
1250 watchDog.exit(1);
1251 }
1252 }
1253 });
1254 connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
1255 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
1256 });
1257 return protocolConnection;
1258}
1259exports.createConnection = createConnection;
1260//# sourceMappingURL=server.js.map
1261
1262/***/ }),
1263/* 5 */
1264/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1265
1266"use strict";
1267
1268/* --------------------------------------------------------------------------------------------
1269 * Copyright (c) Microsoft Corporation. All rights reserved.
1270 * Licensed under the MIT License. See License.txt in the project root for license information.
1271 * ------------------------------------------------------------------------------------------ */
1272var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1273 if (k2 === undefined) k2 = k;
1274 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
1275}) : (function(o, m, k, k2) {
1276 if (k2 === undefined) k2 = k;
1277 o[k2] = m[k];
1278}));
1279var __exportStar = (this && this.__exportStar) || function(m, exports) {
1280 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1281};
1282Object.defineProperty(exports, "__esModule", ({ value: true }));
1283exports.createProtocolConnection = void 0;
1284const node_1 = __webpack_require__(6);
1285__exportStar(__webpack_require__(6), exports);
1286__exportStar(__webpack_require__(27), exports);
1287function createProtocolConnection(input, output, logger, options) {
1288 return node_1.createMessageConnection(input, output, logger, options);
1289}
1290exports.createProtocolConnection = createProtocolConnection;
1291//# sourceMappingURL=main.js.map
1292
1293/***/ }),
1294/* 6 */
1295/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1296
1297"use strict";
1298/* --------------------------------------------------------------------------------------------
1299 * Copyright (c) Microsoft Corporation. All rights reserved.
1300 * Licensed under the MIT License. See License.txt in the project root for license information.
1301 * ----------------------------------------------------------------------------------------- */
1302
1303
1304module.exports = __webpack_require__(7);
1305
1306/***/ }),
1307/* 7 */
1308/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
1309
1310"use strict";
1311
1312var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1313 if (k2 === undefined) k2 = k;
1314 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
1315}) : (function(o, m, k, k2) {
1316 if (k2 === undefined) k2 = k;
1317 o[k2] = m[k];
1318}));
1319var __exportStar = (this && this.__exportStar) || function(m, exports) {
1320 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
1321};
1322Object.defineProperty(exports, "__esModule", ({ value: true }));
1323exports.createMessageConnection = exports.createServerSocketTransport = exports.createClientSocketTransport = exports.createServerPipeTransport = exports.createClientPipeTransport = exports.generateRandomPipeName = exports.StreamMessageWriter = exports.StreamMessageReader = exports.SocketMessageWriter = exports.SocketMessageReader = exports.IPCMessageWriter = exports.IPCMessageReader = void 0;
1324/* --------------------------------------------------------------------------------------------
1325 * Copyright (c) Microsoft Corporation. All rights reserved.
1326 * Licensed under the MIT License. See License.txt in the project root for license information.
1327 * ----------------------------------------------------------------------------------------- */
1328const ril_1 = __webpack_require__(8);
1329// Install the node runtime abstract.
1330ril_1.default.install();
1331const api_1 = __webpack_require__(13);
1332const path = __webpack_require__(23);
1333const os = __webpack_require__(24);
1334const crypto_1 = __webpack_require__(25);
1335const net_1 = __webpack_require__(26);
1336__exportStar(__webpack_require__(13), exports);
1337class IPCMessageReader extends api_1.AbstractMessageReader {
1338 constructor(process) {
1339 super();
1340 this.process = process;
1341 let eventEmitter = this.process;
1342 eventEmitter.on('error', (error) => this.fireError(error));
1343 eventEmitter.on('close', () => this.fireClose());
1344 }
1345 listen(callback) {
1346 this.process.on('message', callback);
1347 return api_1.Disposable.create(() => this.process.off('message', callback));
1348 }
1349}
1350exports.IPCMessageReader = IPCMessageReader;
1351class IPCMessageWriter extends api_1.AbstractMessageWriter {
1352 constructor(process) {
1353 super();
1354 this.process = process;
1355 this.errorCount = 0;
1356 let eventEmitter = this.process;
1357 eventEmitter.on('error', (error) => this.fireError(error));
1358 eventEmitter.on('close', () => this.fireClose);
1359 }
1360 write(msg) {
1361 try {
1362 if (typeof this.process.send === 'function') {
1363 this.process.send(msg, undefined, undefined, (error) => {
1364 if (error) {
1365 this.errorCount++;
1366 this.handleError(error, msg);
1367 }
1368 else {
1369 this.errorCount = 0;
1370 }
1371 });
1372 }
1373 return Promise.resolve();
1374 }
1375 catch (error) {
1376 this.handleError(error, msg);
1377 return Promise.reject(error);
1378 }
1379 }
1380 handleError(error, msg) {
1381 this.errorCount++;
1382 this.fireError(error, msg, this.errorCount);
1383 }
1384 end() {
1385 }
1386}
1387exports.IPCMessageWriter = IPCMessageWriter;
1388class SocketMessageReader extends api_1.ReadableStreamMessageReader {
1389 constructor(socket, encoding = 'utf-8') {
1390 super(ril_1.default().stream.asReadableStream(socket), encoding);
1391 }
1392}
1393exports.SocketMessageReader = SocketMessageReader;
1394class SocketMessageWriter extends api_1.WriteableStreamMessageWriter {
1395 constructor(socket, options) {
1396 super(ril_1.default().stream.asWritableStream(socket), options);
1397 this.socket = socket;
1398 }
1399 dispose() {
1400 super.dispose();
1401 this.socket.destroy();
1402 }
1403}
1404exports.SocketMessageWriter = SocketMessageWriter;
1405class StreamMessageReader extends api_1.ReadableStreamMessageReader {
1406 constructor(readble, encoding) {
1407 super(ril_1.default().stream.asReadableStream(readble), encoding);
1408 }
1409}
1410exports.StreamMessageReader = StreamMessageReader;
1411class StreamMessageWriter extends api_1.WriteableStreamMessageWriter {
1412 constructor(writable, options) {
1413 super(ril_1.default().stream.asWritableStream(writable), options);
1414 }
1415}
1416exports.StreamMessageWriter = StreamMessageWriter;
1417const XDG_RUNTIME_DIR = process.env['XDG_RUNTIME_DIR'];
1418const safeIpcPathLengths = new Map([
1419 ['linux', 107],
1420 ['darwin', 103]
1421]);
1422function generateRandomPipeName() {
1423 const randomSuffix = crypto_1.randomBytes(21).toString('hex');
1424 if (process.platform === 'win32') {
1425 return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
1426 }
1427 let result;
1428 if (XDG_RUNTIME_DIR) {
1429 result = path.join(XDG_RUNTIME_DIR, `vscode-ipc-${randomSuffix}.sock`);
1430 }
1431 else {
1432 result = path.join(os.tmpdir(), `vscode-${randomSuffix}.sock`);
1433 }
1434 const limit = safeIpcPathLengths.get(process.platform);
1435 if (limit !== undefined && result.length >= limit) {
1436 ril_1.default().console.warn(`WARNING: IPC handle "${result}" is longer than ${limit} characters.`);
1437 }
1438 return result;
1439}
1440exports.generateRandomPipeName = generateRandomPipeName;
1441function createClientPipeTransport(pipeName, encoding = 'utf-8') {
1442 let connectResolve;
1443 const connected = new Promise((resolve, _reject) => {
1444 connectResolve = resolve;
1445 });
1446 return new Promise((resolve, reject) => {
1447 let server = net_1.createServer((socket) => {
1448 server.close();
1449 connectResolve([
1450 new SocketMessageReader(socket, encoding),
1451 new SocketMessageWriter(socket, encoding)
1452 ]);
1453 });
1454 server.on('error', reject);
1455 server.listen(pipeName, () => {
1456 server.removeListener('error', reject);
1457 resolve({
1458 onConnected: () => { return connected; }
1459 });
1460 });
1461 });
1462}
1463exports.createClientPipeTransport = createClientPipeTransport;
1464function createServerPipeTransport(pipeName, encoding = 'utf-8') {
1465 const socket = net_1.createConnection(pipeName);
1466 return [
1467 new SocketMessageReader(socket, encoding),
1468 new SocketMessageWriter(socket, encoding)
1469 ];
1470}
1471exports.createServerPipeTransport = createServerPipeTransport;
1472function createClientSocketTransport(port, encoding = 'utf-8') {
1473 let connectResolve;
1474 const connected = new Promise((resolve, _reject) => {
1475 connectResolve = resolve;
1476 });
1477 return new Promise((resolve, reject) => {
1478 const server = net_1.createServer((socket) => {
1479 server.close();
1480 connectResolve([
1481 new SocketMessageReader(socket, encoding),
1482 new SocketMessageWriter(socket, encoding)
1483 ]);
1484 });
1485 server.on('error', reject);
1486 server.listen(port, '127.0.0.1', () => {
1487 server.removeListener('error', reject);
1488 resolve({
1489 onConnected: () => { return connected; }
1490 });
1491 });
1492 });
1493}
1494exports.createClientSocketTransport = createClientSocketTransport;
1495function createServerSocketTransport(port, encoding = 'utf-8') {
1496 const socket = net_1.createConnection(port, '127.0.0.1');
1497 return [
1498 new SocketMessageReader(socket, encoding),
1499 new SocketMessageWriter(socket, encoding)
1500 ];
1501}
1502exports.createServerSocketTransport = createServerSocketTransport;
1503function isReadableStream(value) {
1504 const candidate = value;
1505 return candidate.read !== undefined && candidate.addListener !== undefined;
1506}
1507function isWritableStream(value) {
1508 const candidate = value;
1509 return candidate.write !== undefined && candidate.addListener !== undefined;
1510}
1511function createMessageConnection(input, output, logger, options) {
1512 if (!logger) {
1513 logger = api_1.NullLogger;
1514 }
1515 const reader = isReadableStream(input) ? new StreamMessageReader(input) : input;
1516 const writer = isWritableStream(output) ? new StreamMessageWriter(output) : output;
1517 if (api_1.ConnectionStrategy.is(options)) {
1518 options = { connectionStrategy: options };
1519 }
1520 return api_1.createMessageConnection(reader, writer, logger, options);
1521}
1522exports.createMessageConnection = createMessageConnection;
1523//# sourceMappingURL=main.js.map
1524
1525/***/ }),
1526/* 8 */
1527/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1528
1529"use strict";
1530
1531/* --------------------------------------------------------------------------------------------
1532 * Copyright (c) Microsoft Corporation. All rights reserved.
1533 * Licensed under the MIT License. See License.txt in the project root for license information.
1534 * ------------------------------------------------------------------------------------------ */
1535Object.defineProperty(exports, "__esModule", ({ value: true }));
1536const ral_1 = __webpack_require__(9);
1537const util_1 = __webpack_require__(10);
1538const disposable_1 = __webpack_require__(11);
1539const messageBuffer_1 = __webpack_require__(12);
1540class MessageBuffer extends messageBuffer_1.AbstractMessageBuffer {
1541 constructor(encoding = 'utf-8') {
1542 super(encoding);
1543 }
1544 emptyBuffer() {
1545 return MessageBuffer.emptyBuffer;
1546 }
1547 fromString(value, encoding) {
1548 return Buffer.from(value, encoding);
1549 }
1550 toString(value, encoding) {
1551 if (value instanceof Buffer) {
1552 return value.toString(encoding);
1553 }
1554 else {
1555 return new util_1.TextDecoder(encoding).decode(value);
1556 }
1557 }
1558 asNative(buffer, length) {
1559 if (length === undefined) {
1560 return buffer instanceof Buffer ? buffer : Buffer.from(buffer);
1561 }
1562 else {
1563 return buffer instanceof Buffer ? buffer.slice(0, length) : Buffer.from(buffer, 0, length);
1564 }
1565 }
1566 allocNative(length) {
1567 return Buffer.allocUnsafe(length);
1568 }
1569}
1570MessageBuffer.emptyBuffer = Buffer.allocUnsafe(0);
1571class ReadableStreamWrapper {
1572 constructor(stream) {
1573 this.stream = stream;
1574 }
1575 onClose(listener) {
1576 this.stream.on('close', listener);
1577 return disposable_1.Disposable.create(() => this.stream.off('close', listener));
1578 }
1579 onError(listener) {
1580 this.stream.on('error', listener);
1581 return disposable_1.Disposable.create(() => this.stream.off('error', listener));
1582 }
1583 onEnd(listener) {
1584 this.stream.on('end', listener);
1585 return disposable_1.Disposable.create(() => this.stream.off('end', listener));
1586 }
1587 onData(listener) {
1588 this.stream.on('data', listener);
1589 return disposable_1.Disposable.create(() => this.stream.off('data', listener));
1590 }
1591}
1592class WritableStreamWrapper {
1593 constructor(stream) {
1594 this.stream = stream;
1595 }
1596 onClose(listener) {
1597 this.stream.on('close', listener);
1598 return disposable_1.Disposable.create(() => this.stream.off('close', listener));
1599 }
1600 onError(listener) {
1601 this.stream.on('error', listener);
1602 return disposable_1.Disposable.create(() => this.stream.off('error', listener));
1603 }
1604 onEnd(listener) {
1605 this.stream.on('end', listener);
1606 return disposable_1.Disposable.create(() => this.stream.off('end', listener));
1607 }
1608 write(data, encoding) {
1609 return new Promise((resolve, reject) => {
1610 const callback = (error) => {
1611 if (error === undefined || error === null) {
1612 resolve();
1613 }
1614 else {
1615 reject(error);
1616 }
1617 };
1618 if (typeof data === 'string') {
1619 this.stream.write(data, encoding, callback);
1620 }
1621 else {
1622 this.stream.write(data, callback);
1623 }
1624 });
1625 }
1626 end() {
1627 this.stream.end();
1628 }
1629}
1630const _ril = Object.freeze({
1631 messageBuffer: Object.freeze({
1632 create: (encoding) => new MessageBuffer(encoding)
1633 }),
1634 applicationJson: Object.freeze({
1635 encoder: Object.freeze({
1636 name: 'application/json',
1637 encode: (msg, options) => {
1638 try {
1639 return Promise.resolve(Buffer.from(JSON.stringify(msg, undefined, 0), options.charset));
1640 }
1641 catch (err) {
1642 return Promise.reject(err);
1643 }
1644 }
1645 }),
1646 decoder: Object.freeze({
1647 name: 'application/json',
1648 decode: (buffer, options) => {
1649 try {
1650 if (buffer instanceof Buffer) {
1651 return Promise.resolve(JSON.parse(buffer.toString(options.charset)));
1652 }
1653 else {
1654 return Promise.resolve(JSON.parse(new util_1.TextDecoder(options.charset).decode(buffer)));
1655 }
1656 }
1657 catch (err) {
1658 return Promise.reject(err);
1659 }
1660 }
1661 })
1662 }),
1663 stream: Object.freeze({
1664 asReadableStream: (stream) => new ReadableStreamWrapper(stream),
1665 asWritableStream: (stream) => new WritableStreamWrapper(stream)
1666 }),
1667 console: console,
1668 timer: Object.freeze({
1669 setTimeout(callback, ms, ...args) {
1670 return setTimeout(callback, ms, ...args);
1671 },
1672 clearTimeout(handle) {
1673 clearTimeout(handle);
1674 },
1675 setImmediate(callback, ...args) {
1676 return setImmediate(callback, ...args);
1677 },
1678 clearImmediate(handle) {
1679 clearImmediate(handle);
1680 }
1681 })
1682});
1683function RIL() {
1684 return _ril;
1685}
1686(function (RIL) {
1687 function install() {
1688 ral_1.default.install(_ril);
1689 }
1690 RIL.install = install;
1691})(RIL || (RIL = {}));
1692exports.default = RIL;
1693//# sourceMappingURL=ril.js.map
1694
1695/***/ }),
1696/* 9 */
1697/***/ ((__unused_webpack_module, exports) => {
1698
1699"use strict";
1700
1701/* --------------------------------------------------------------------------------------------
1702 * Copyright (c) Microsoft Corporation. All rights reserved.
1703 * Licensed under the MIT License. See License.txt in the project root for license information.
1704 * ------------------------------------------------------------------------------------------ */
1705Object.defineProperty(exports, "__esModule", ({ value: true }));
1706let _ral;
1707function RAL() {
1708 if (_ral === undefined) {
1709 throw new Error(`No runtime abstraction layer installed`);
1710 }
1711 return _ral;
1712}
1713(function (RAL) {
1714 function install(ral) {
1715 if (ral === undefined) {
1716 throw new Error(`No runtime abstraction layer provided`);
1717 }
1718 _ral = ral;
1719 }
1720 RAL.install = install;
1721})(RAL || (RAL = {}));
1722exports.default = RAL;
1723//# sourceMappingURL=ral.js.map
1724
1725/***/ }),
1726/* 10 */
1727/***/ ((module) => {
1728
1729"use strict";
1730module.exports = require("util");;
1731
1732/***/ }),
1733/* 11 */
1734/***/ ((__unused_webpack_module, exports) => {
1735
1736"use strict";
1737
1738/*---------------------------------------------------------------------------------------------
1739 * Copyright (c) Microsoft Corporation. All rights reserved.
1740 * Licensed under the MIT License. See License.txt in the project root for license information.
1741 *--------------------------------------------------------------------------------------------*/
1742Object.defineProperty(exports, "__esModule", ({ value: true }));
1743exports.Disposable = void 0;
1744var Disposable;
1745(function (Disposable) {
1746 function create(func) {
1747 return {
1748 dispose: func
1749 };
1750 }
1751 Disposable.create = create;
1752})(Disposable = exports.Disposable || (exports.Disposable = {}));
1753//# sourceMappingURL=disposable.js.map
1754
1755/***/ }),
1756/* 12 */
1757/***/ ((__unused_webpack_module, exports) => {
1758
1759"use strict";
1760
1761/*---------------------------------------------------------------------------------------------
1762 * Copyright (c) Microsoft Corporation. All rights reserved.
1763 * Licensed under the MIT License. See License.txt in the project root for license information.
1764 *--------------------------------------------------------------------------------------------*/
1765Object.defineProperty(exports, "__esModule", ({ value: true }));
1766exports.AbstractMessageBuffer = void 0;
1767const CR = 13;
1768const LF = 10;
1769const CRLF = '\r\n';
1770class AbstractMessageBuffer {
1771 constructor(encoding = 'utf-8') {
1772 this._encoding = encoding;
1773 this._chunks = [];
1774 this._totalLength = 0;
1775 }
1776 get encoding() {
1777 return this._encoding;
1778 }
1779 append(chunk) {
1780 const toAppend = typeof chunk === 'string' ? this.fromString(chunk, this._encoding) : chunk;
1781 this._chunks.push(toAppend);
1782 this._totalLength += toAppend.byteLength;
1783 }
1784 tryReadHeaders() {
1785 if (this._chunks.length === 0) {
1786 return undefined;
1787 }
1788 let state = 0;
1789 let chunkIndex = 0;
1790 let offset = 0;
1791 let chunkBytesRead = 0;
1792 row: while (chunkIndex < this._chunks.length) {
1793 const chunk = this._chunks[chunkIndex];
1794 offset = 0;
1795 column: while (offset < chunk.length) {
1796 const value = chunk[offset];
1797 switch (value) {
1798 case CR:
1799 switch (state) {
1800 case 0:
1801 state = 1;
1802 break;
1803 case 2:
1804 state = 3;
1805 break;
1806 default:
1807 state = 0;
1808 }
1809 break;
1810 case LF:
1811 switch (state) {
1812 case 1:
1813 state = 2;
1814 break;
1815 case 3:
1816 state = 4;
1817 offset++;
1818 break row;
1819 default:
1820 state = 0;
1821 }
1822 break;
1823 default:
1824 state = 0;
1825 }
1826 offset++;
1827 }
1828 chunkBytesRead += chunk.byteLength;
1829 chunkIndex++;
1830 }
1831 if (state !== 4) {
1832 return undefined;
1833 }
1834 // The buffer contains the two CRLF at the end. So we will
1835 // have two empty lines after the split at the end as well.
1836 const buffer = this._read(chunkBytesRead + offset);
1837 const result = new Map();
1838 const headers = this.toString(buffer, 'ascii').split(CRLF);
1839 if (headers.length < 2) {
1840 return result;
1841 }
1842 for (let i = 0; i < headers.length - 2; i++) {
1843 const header = headers[i];
1844 const index = header.indexOf(':');
1845 if (index === -1) {
1846 throw new Error('Message header must separate key and value using :');
1847 }
1848 const key = header.substr(0, index);
1849 const value = header.substr(index + 1).trim();
1850 result.set(key, value);
1851 }
1852 return result;
1853 }
1854 tryReadBody(length) {
1855 if (this._totalLength < length) {
1856 return undefined;
1857 }
1858 return this._read(length);
1859 }
1860 get numberOfBytes() {
1861 return this._totalLength;
1862 }
1863 _read(byteCount) {
1864 if (byteCount === 0) {
1865 return this.emptyBuffer();
1866 }
1867 if (byteCount > this._totalLength) {
1868 throw new Error(`Cannot read so many bytes!`);
1869 }
1870 if (this._chunks[0].byteLength === byteCount) {
1871 // super fast path, precisely first chunk must be returned
1872 const chunk = this._chunks[0];
1873 this._chunks.shift();
1874 this._totalLength -= byteCount;
1875 return this.asNative(chunk);
1876 }
1877 if (this._chunks[0].byteLength > byteCount) {
1878 // fast path, the reading is entirely within the first chunk
1879 const chunk = this._chunks[0];
1880 const result = this.asNative(chunk, byteCount);
1881 this._chunks[0] = chunk.slice(byteCount);
1882 this._totalLength -= byteCount;
1883 return result;
1884 }
1885 const result = this.allocNative(byteCount);
1886 let resultOffset = 0;
1887 let chunkIndex = 0;
1888 while (byteCount > 0) {
1889 const chunk = this._chunks[chunkIndex];
1890 if (chunk.byteLength > byteCount) {
1891 // this chunk will survive
1892 const chunkPart = chunk.slice(0, byteCount);
1893 result.set(chunkPart, resultOffset);
1894 resultOffset += byteCount;
1895 this._chunks[chunkIndex] = chunk.slice(byteCount);
1896 this._totalLength -= byteCount;
1897 byteCount -= byteCount;
1898 }
1899 else {
1900 // this chunk will be entirely read
1901 result.set(chunk, resultOffset);
1902 resultOffset += chunk.byteLength;
1903 this._chunks.shift();
1904 this._totalLength -= chunk.byteLength;
1905 byteCount -= chunk.byteLength;
1906 }
1907 }
1908 return result;
1909 }
1910}
1911exports.AbstractMessageBuffer = AbstractMessageBuffer;
1912//# sourceMappingURL=messageBuffer.js.map
1913
1914/***/ }),
1915/* 13 */
1916/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1917
1918"use strict";
1919
1920/* --------------------------------------------------------------------------------------------
1921 * Copyright (c) Microsoft Corporation. All rights reserved.
1922 * Licensed under the MIT License. See License.txt in the project root for license information.
1923 * ------------------------------------------------------------------------------------------ */
1924/// <reference path="../../typings/thenable.d.ts" />
1925Object.defineProperty(exports, "__esModule", ({ value: true }));
1926exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.ProgressType = exports.createMessageConnection = exports.NullLogger = exports.ConnectionOptions = exports.ConnectionStrategy = exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = exports.CancellationToken = exports.CancellationTokenSource = exports.Emitter = exports.Event = exports.Disposable = exports.ParameterStructures = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.ErrorCodes = exports.ResponseError = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType0 = exports.RequestType = exports.RAL = void 0;
1927exports.CancellationStrategy = void 0;
1928const messages_1 = __webpack_require__(14);
1929Object.defineProperty(exports, "RequestType", ({ enumerable: true, get: function () { return messages_1.RequestType; } }));
1930Object.defineProperty(exports, "RequestType0", ({ enumerable: true, get: function () { return messages_1.RequestType0; } }));
1931Object.defineProperty(exports, "RequestType1", ({ enumerable: true, get: function () { return messages_1.RequestType1; } }));
1932Object.defineProperty(exports, "RequestType2", ({ enumerable: true, get: function () { return messages_1.RequestType2; } }));
1933Object.defineProperty(exports, "RequestType3", ({ enumerable: true, get: function () { return messages_1.RequestType3; } }));
1934Object.defineProperty(exports, "RequestType4", ({ enumerable: true, get: function () { return messages_1.RequestType4; } }));
1935Object.defineProperty(exports, "RequestType5", ({ enumerable: true, get: function () { return messages_1.RequestType5; } }));
1936Object.defineProperty(exports, "RequestType6", ({ enumerable: true, get: function () { return messages_1.RequestType6; } }));
1937Object.defineProperty(exports, "RequestType7", ({ enumerable: true, get: function () { return messages_1.RequestType7; } }));
1938Object.defineProperty(exports, "RequestType8", ({ enumerable: true, get: function () { return messages_1.RequestType8; } }));
1939Object.defineProperty(exports, "RequestType9", ({ enumerable: true, get: function () { return messages_1.RequestType9; } }));
1940Object.defineProperty(exports, "ResponseError", ({ enumerable: true, get: function () { return messages_1.ResponseError; } }));
1941Object.defineProperty(exports, "ErrorCodes", ({ enumerable: true, get: function () { return messages_1.ErrorCodes; } }));
1942Object.defineProperty(exports, "NotificationType", ({ enumerable: true, get: function () { return messages_1.NotificationType; } }));
1943Object.defineProperty(exports, "NotificationType0", ({ enumerable: true, get: function () { return messages_1.NotificationType0; } }));
1944Object.defineProperty(exports, "NotificationType1", ({ enumerable: true, get: function () { return messages_1.NotificationType1; } }));
1945Object.defineProperty(exports, "NotificationType2", ({ enumerable: true, get: function () { return messages_1.NotificationType2; } }));
1946Object.defineProperty(exports, "NotificationType3", ({ enumerable: true, get: function () { return messages_1.NotificationType3; } }));
1947Object.defineProperty(exports, "NotificationType4", ({ enumerable: true, get: function () { return messages_1.NotificationType4; } }));
1948Object.defineProperty(exports, "NotificationType5", ({ enumerable: true, get: function () { return messages_1.NotificationType5; } }));
1949Object.defineProperty(exports, "NotificationType6", ({ enumerable: true, get: function () { return messages_1.NotificationType6; } }));
1950Object.defineProperty(exports, "NotificationType7", ({ enumerable: true, get: function () { return messages_1.NotificationType7; } }));
1951Object.defineProperty(exports, "NotificationType8", ({ enumerable: true, get: function () { return messages_1.NotificationType8; } }));
1952Object.defineProperty(exports, "NotificationType9", ({ enumerable: true, get: function () { return messages_1.NotificationType9; } }));
1953Object.defineProperty(exports, "ParameterStructures", ({ enumerable: true, get: function () { return messages_1.ParameterStructures; } }));
1954const disposable_1 = __webpack_require__(11);
1955Object.defineProperty(exports, "Disposable", ({ enumerable: true, get: function () { return disposable_1.Disposable; } }));
1956const events_1 = __webpack_require__(16);
1957Object.defineProperty(exports, "Event", ({ enumerable: true, get: function () { return events_1.Event; } }));
1958Object.defineProperty(exports, "Emitter", ({ enumerable: true, get: function () { return events_1.Emitter; } }));
1959const cancellation_1 = __webpack_require__(17);
1960Object.defineProperty(exports, "CancellationTokenSource", ({ enumerable: true, get: function () { return cancellation_1.CancellationTokenSource; } }));
1961Object.defineProperty(exports, "CancellationToken", ({ enumerable: true, get: function () { return cancellation_1.CancellationToken; } }));
1962const messageReader_1 = __webpack_require__(18);
1963Object.defineProperty(exports, "MessageReader", ({ enumerable: true, get: function () { return messageReader_1.MessageReader; } }));
1964Object.defineProperty(exports, "AbstractMessageReader", ({ enumerable: true, get: function () { return messageReader_1.AbstractMessageReader; } }));
1965Object.defineProperty(exports, "ReadableStreamMessageReader", ({ enumerable: true, get: function () { return messageReader_1.ReadableStreamMessageReader; } }));
1966const messageWriter_1 = __webpack_require__(19);
1967Object.defineProperty(exports, "MessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.MessageWriter; } }));
1968Object.defineProperty(exports, "AbstractMessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.AbstractMessageWriter; } }));
1969Object.defineProperty(exports, "WriteableStreamMessageWriter", ({ enumerable: true, get: function () { return messageWriter_1.WriteableStreamMessageWriter; } }));
1970const connection_1 = __webpack_require__(21);
1971Object.defineProperty(exports, "ConnectionStrategy", ({ enumerable: true, get: function () { return connection_1.ConnectionStrategy; } }));
1972Object.defineProperty(exports, "ConnectionOptions", ({ enumerable: true, get: function () { return connection_1.ConnectionOptions; } }));
1973Object.defineProperty(exports, "NullLogger", ({ enumerable: true, get: function () { return connection_1.NullLogger; } }));
1974Object.defineProperty(exports, "createMessageConnection", ({ enumerable: true, get: function () { return connection_1.createMessageConnection; } }));
1975Object.defineProperty(exports, "ProgressType", ({ enumerable: true, get: function () { return connection_1.ProgressType; } }));
1976Object.defineProperty(exports, "Trace", ({ enumerable: true, get: function () { return connection_1.Trace; } }));
1977Object.defineProperty(exports, "TraceFormat", ({ enumerable: true, get: function () { return connection_1.TraceFormat; } }));
1978Object.defineProperty(exports, "SetTraceNotification", ({ enumerable: true, get: function () { return connection_1.SetTraceNotification; } }));
1979Object.defineProperty(exports, "LogTraceNotification", ({ enumerable: true, get: function () { return connection_1.LogTraceNotification; } }));
1980Object.defineProperty(exports, "ConnectionErrors", ({ enumerable: true, get: function () { return connection_1.ConnectionErrors; } }));
1981Object.defineProperty(exports, "ConnectionError", ({ enumerable: true, get: function () { return connection_1.ConnectionError; } }));
1982Object.defineProperty(exports, "CancellationReceiverStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationReceiverStrategy; } }));
1983Object.defineProperty(exports, "CancellationSenderStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationSenderStrategy; } }));
1984Object.defineProperty(exports, "CancellationStrategy", ({ enumerable: true, get: function () { return connection_1.CancellationStrategy; } }));
1985const ral_1 = __webpack_require__(9);
1986exports.RAL = ral_1.default;
1987//# sourceMappingURL=api.js.map
1988
1989/***/ }),
1990/* 14 */
1991/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
1992
1993"use strict";
1994
1995/* --------------------------------------------------------------------------------------------
1996 * Copyright (c) Microsoft Corporation. All rights reserved.
1997 * Licensed under the MIT License. See License.txt in the project root for license information.
1998 * ------------------------------------------------------------------------------------------ */
1999Object.defineProperty(exports, "__esModule", ({ value: true }));
2000exports.isResponseMessage = exports.isNotificationMessage = exports.isRequestMessage = exports.NotificationType9 = exports.NotificationType8 = exports.NotificationType7 = exports.NotificationType6 = exports.NotificationType5 = exports.NotificationType4 = exports.NotificationType3 = exports.NotificationType2 = exports.NotificationType1 = exports.NotificationType0 = exports.NotificationType = exports.RequestType9 = exports.RequestType8 = exports.RequestType7 = exports.RequestType6 = exports.RequestType5 = exports.RequestType4 = exports.RequestType3 = exports.RequestType2 = exports.RequestType1 = exports.RequestType = exports.RequestType0 = exports.AbstractMessageSignature = exports.ParameterStructures = exports.ResponseError = exports.ErrorCodes = void 0;
2001const is = __webpack_require__(15);
2002/**
2003 * Predefined error codes.
2004 */
2005var ErrorCodes;
2006(function (ErrorCodes) {
2007 // Defined by JSON RPC
2008 ErrorCodes.ParseError = -32700;
2009 ErrorCodes.InvalidRequest = -32600;
2010 ErrorCodes.MethodNotFound = -32601;
2011 ErrorCodes.InvalidParams = -32602;
2012 ErrorCodes.InternalError = -32603;
2013 /**
2014 * This is the start range of JSON RPC reserved error codes.
2015 * It doesn't denote a real error code. No application error codes should
2016 * be defined between the start and end range. For backwards
2017 * compatibility the `ServerNotInitialized` and the `UnknownErrorCode`
2018 * are left in the range.
2019 *
2020 * @since 3.16.0
2021 */
2022 ErrorCodes.jsonrpcReservedErrorRangeStart = -32099;
2023 /** @deprecated use jsonrpcReservedErrorRangeStart */
2024 ErrorCodes.serverErrorStart = ErrorCodes.jsonrpcReservedErrorRangeStart;
2025 ErrorCodes.MessageWriteError = -32099;
2026 ErrorCodes.MessageReadError = -32098;
2027 ErrorCodes.ServerNotInitialized = -32002;
2028 ErrorCodes.UnknownErrorCode = -32001;
2029 /**
2030 * This is the end range of JSON RPC reserved error codes.
2031 * It doesn't denote a real error code.
2032 *
2033 * @since 3.16.0
2034 */
2035 ErrorCodes.jsonrpcReservedErrorRangeEnd = -32000;
2036 /** @deprecated use jsonrpcReservedErrorRangeEnd */
2037 ErrorCodes.serverErrorEnd = ErrorCodes.jsonrpcReservedErrorRangeEnd;
2038})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
2039/**
2040 * An error object return in a response in case a request
2041 * has failed.
2042 */
2043class ResponseError extends Error {
2044 constructor(code, message, data) {
2045 super(message);
2046 this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
2047 this.data = data;
2048 Object.setPrototypeOf(this, ResponseError.prototype);
2049 }
2050 toJson() {
2051 return {
2052 code: this.code,
2053 message: this.message,
2054 data: this.data,
2055 };
2056 }
2057}
2058exports.ResponseError = ResponseError;
2059class ParameterStructures {
2060 constructor(kind) {
2061 this.kind = kind;
2062 }
2063 static is(value) {
2064 return value === ParameterStructures.auto || value === ParameterStructures.byName || value === ParameterStructures.byPosition;
2065 }
2066 toString() {
2067 return this.kind;
2068 }
2069}
2070exports.ParameterStructures = ParameterStructures;
2071/**
2072 * The parameter structure is automatically inferred on the number of parameters
2073 * and the parameter type in case of a single param.
2074 */
2075ParameterStructures.auto = new ParameterStructures('auto');
2076/**
2077 * Forces `byPosition` parameter structure. This is useful if you have a single
2078 * parameter which has a literal type.
2079 */
2080ParameterStructures.byPosition = new ParameterStructures('byPosition');
2081/**
2082 * Forces `byName` parameter structure. This is only useful when having a single
2083 * parameter. The library will report errors if used with a different number of
2084 * parameters.
2085 */
2086ParameterStructures.byName = new ParameterStructures('byName');
2087/**
2088 * An abstract implementation of a MessageType.
2089 */
2090class AbstractMessageSignature {
2091 constructor(method, numberOfParams) {
2092 this.method = method;
2093 this.numberOfParams = numberOfParams;
2094 }
2095 get parameterStructures() {
2096 return ParameterStructures.auto;
2097 }
2098}
2099exports.AbstractMessageSignature = AbstractMessageSignature;
2100/**
2101 * Classes to type request response pairs
2102 */
2103class RequestType0 extends AbstractMessageSignature {
2104 constructor(method) {
2105 super(method, 0);
2106 }
2107}
2108exports.RequestType0 = RequestType0;
2109class RequestType extends AbstractMessageSignature {
2110 constructor(method, _parameterStructures = ParameterStructures.auto) {
2111 super(method, 1);
2112 this._parameterStructures = _parameterStructures;
2113 }
2114 get parameterStructures() {
2115 return this._parameterStructures;
2116 }
2117}
2118exports.RequestType = RequestType;
2119class RequestType1 extends AbstractMessageSignature {
2120 constructor(method, _parameterStructures = ParameterStructures.auto) {
2121 super(method, 1);
2122 this._parameterStructures = _parameterStructures;
2123 }
2124 get parameterStructures() {
2125 return this._parameterStructures;
2126 }
2127}
2128exports.RequestType1 = RequestType1;
2129class RequestType2 extends AbstractMessageSignature {
2130 constructor(method) {
2131 super(method, 2);
2132 }
2133}
2134exports.RequestType2 = RequestType2;
2135class RequestType3 extends AbstractMessageSignature {
2136 constructor(method) {
2137 super(method, 3);
2138 }
2139}
2140exports.RequestType3 = RequestType3;
2141class RequestType4 extends AbstractMessageSignature {
2142 constructor(method) {
2143 super(method, 4);
2144 }
2145}
2146exports.RequestType4 = RequestType4;
2147class RequestType5 extends AbstractMessageSignature {
2148 constructor(method) {
2149 super(method, 5);
2150 }
2151}
2152exports.RequestType5 = RequestType5;
2153class RequestType6 extends AbstractMessageSignature {
2154 constructor(method) {
2155 super(method, 6);
2156 }
2157}
2158exports.RequestType6 = RequestType6;
2159class RequestType7 extends AbstractMessageSignature {
2160 constructor(method) {
2161 super(method, 7);
2162 }
2163}
2164exports.RequestType7 = RequestType7;
2165class RequestType8 extends AbstractMessageSignature {
2166 constructor(method) {
2167 super(method, 8);
2168 }
2169}
2170exports.RequestType8 = RequestType8;
2171class RequestType9 extends AbstractMessageSignature {
2172 constructor(method) {
2173 super(method, 9);
2174 }
2175}
2176exports.RequestType9 = RequestType9;
2177class NotificationType extends AbstractMessageSignature {
2178 constructor(method, _parameterStructures = ParameterStructures.auto) {
2179 super(method, 1);
2180 this._parameterStructures = _parameterStructures;
2181 }
2182 get parameterStructures() {
2183 return this._parameterStructures;
2184 }
2185}
2186exports.NotificationType = NotificationType;
2187class NotificationType0 extends AbstractMessageSignature {
2188 constructor(method) {
2189 super(method, 0);
2190 }
2191}
2192exports.NotificationType0 = NotificationType0;
2193class NotificationType1 extends AbstractMessageSignature {
2194 constructor(method, _parameterStructures = ParameterStructures.auto) {
2195 super(method, 1);
2196 this._parameterStructures = _parameterStructures;
2197 }
2198 get parameterStructures() {
2199 return this._parameterStructures;
2200 }
2201}
2202exports.NotificationType1 = NotificationType1;
2203class NotificationType2 extends AbstractMessageSignature {
2204 constructor(method) {
2205 super(method, 2);
2206 }
2207}
2208exports.NotificationType2 = NotificationType2;
2209class NotificationType3 extends AbstractMessageSignature {
2210 constructor(method) {
2211 super(method, 3);
2212 }
2213}
2214exports.NotificationType3 = NotificationType3;
2215class NotificationType4 extends AbstractMessageSignature {
2216 constructor(method) {
2217 super(method, 4);
2218 }
2219}
2220exports.NotificationType4 = NotificationType4;
2221class NotificationType5 extends AbstractMessageSignature {
2222 constructor(method) {
2223 super(method, 5);
2224 }
2225}
2226exports.NotificationType5 = NotificationType5;
2227class NotificationType6 extends AbstractMessageSignature {
2228 constructor(method) {
2229 super(method, 6);
2230 }
2231}
2232exports.NotificationType6 = NotificationType6;
2233class NotificationType7 extends AbstractMessageSignature {
2234 constructor(method) {
2235 super(method, 7);
2236 }
2237}
2238exports.NotificationType7 = NotificationType7;
2239class NotificationType8 extends AbstractMessageSignature {
2240 constructor(method) {
2241 super(method, 8);
2242 }
2243}
2244exports.NotificationType8 = NotificationType8;
2245class NotificationType9 extends AbstractMessageSignature {
2246 constructor(method) {
2247 super(method, 9);
2248 }
2249}
2250exports.NotificationType9 = NotificationType9;
2251/**
2252 * Tests if the given message is a request message
2253 */
2254function isRequestMessage(message) {
2255 const candidate = message;
2256 return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
2257}
2258exports.isRequestMessage = isRequestMessage;
2259/**
2260 * Tests if the given message is a notification message
2261 */
2262function isNotificationMessage(message) {
2263 const candidate = message;
2264 return candidate && is.string(candidate.method) && message.id === void 0;
2265}
2266exports.isNotificationMessage = isNotificationMessage;
2267/**
2268 * Tests if the given message is a response message
2269 */
2270function isResponseMessage(message) {
2271 const candidate = message;
2272 return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
2273}
2274exports.isResponseMessage = isResponseMessage;
2275//# sourceMappingURL=messages.js.map
2276
2277/***/ }),
2278/* 15 */
2279/***/ ((__unused_webpack_module, exports) => {
2280
2281"use strict";
2282
2283/* --------------------------------------------------------------------------------------------
2284 * Copyright (c) Microsoft Corporation. All rights reserved.
2285 * Licensed under the MIT License. See License.txt in the project root for license information.
2286 * ------------------------------------------------------------------------------------------ */
2287Object.defineProperty(exports, "__esModule", ({ value: true }));
2288exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
2289function boolean(value) {
2290 return value === true || value === false;
2291}
2292exports.boolean = boolean;
2293function string(value) {
2294 return typeof value === 'string' || value instanceof String;
2295}
2296exports.string = string;
2297function number(value) {
2298 return typeof value === 'number' || value instanceof Number;
2299}
2300exports.number = number;
2301function error(value) {
2302 return value instanceof Error;
2303}
2304exports.error = error;
2305function func(value) {
2306 return typeof value === 'function';
2307}
2308exports.func = func;
2309function array(value) {
2310 return Array.isArray(value);
2311}
2312exports.array = array;
2313function stringArray(value) {
2314 return array(value) && value.every(elem => string(elem));
2315}
2316exports.stringArray = stringArray;
2317//# sourceMappingURL=is.js.map
2318
2319/***/ }),
2320/* 16 */
2321/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2322
2323"use strict";
2324
2325/* --------------------------------------------------------------------------------------------
2326 * Copyright (c) Microsoft Corporation. All rights reserved.
2327 * Licensed under the MIT License. See License.txt in the project root for license information.
2328 * ------------------------------------------------------------------------------------------ */
2329Object.defineProperty(exports, "__esModule", ({ value: true }));
2330exports.Emitter = exports.Event = void 0;
2331const ral_1 = __webpack_require__(9);
2332var Event;
2333(function (Event) {
2334 const _disposable = { dispose() { } };
2335 Event.None = function () { return _disposable; };
2336})(Event = exports.Event || (exports.Event = {}));
2337class CallbackList {
2338 add(callback, context = null, bucket) {
2339 if (!this._callbacks) {
2340 this._callbacks = [];
2341 this._contexts = [];
2342 }
2343 this._callbacks.push(callback);
2344 this._contexts.push(context);
2345 if (Array.isArray(bucket)) {
2346 bucket.push({ dispose: () => this.remove(callback, context) });
2347 }
2348 }
2349 remove(callback, context = null) {
2350 if (!this._callbacks) {
2351 return;
2352 }
2353 let foundCallbackWithDifferentContext = false;
2354 for (let i = 0, len = this._callbacks.length; i < len; i++) {
2355 if (this._callbacks[i] === callback) {
2356 if (this._contexts[i] === context) {
2357 // callback & context match => remove it
2358 this._callbacks.splice(i, 1);
2359 this._contexts.splice(i, 1);
2360 return;
2361 }
2362 else {
2363 foundCallbackWithDifferentContext = true;
2364 }
2365 }
2366 }
2367 if (foundCallbackWithDifferentContext) {
2368 throw new Error('When adding a listener with a context, you should remove it with the same context');
2369 }
2370 }
2371 invoke(...args) {
2372 if (!this._callbacks) {
2373 return [];
2374 }
2375 const ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
2376 for (let i = 0, len = callbacks.length; i < len; i++) {
2377 try {
2378 ret.push(callbacks[i].apply(contexts[i], args));
2379 }
2380 catch (e) {
2381 // eslint-disable-next-line no-console
2382 ral_1.default().console.error(e);
2383 }
2384 }
2385 return ret;
2386 }
2387 isEmpty() {
2388 return !this._callbacks || this._callbacks.length === 0;
2389 }
2390 dispose() {
2391 this._callbacks = undefined;
2392 this._contexts = undefined;
2393 }
2394}
2395class Emitter {
2396 constructor(_options) {
2397 this._options = _options;
2398 }
2399 /**
2400 * For the public to allow to subscribe
2401 * to events from this Emitter
2402 */
2403 get event() {
2404 if (!this._event) {
2405 this._event = (listener, thisArgs, disposables) => {
2406 if (!this._callbacks) {
2407 this._callbacks = new CallbackList();
2408 }
2409 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
2410 this._options.onFirstListenerAdd(this);
2411 }
2412 this._callbacks.add(listener, thisArgs);
2413 const result = {
2414 dispose: () => {
2415 if (!this._callbacks) {
2416 // disposable is disposed after emitter is disposed.
2417 return;
2418 }
2419 this._callbacks.remove(listener, thisArgs);
2420 result.dispose = Emitter._noop;
2421 if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
2422 this._options.onLastListenerRemove(this);
2423 }
2424 }
2425 };
2426 if (Array.isArray(disposables)) {
2427 disposables.push(result);
2428 }
2429 return result;
2430 };
2431 }
2432 return this._event;
2433 }
2434 /**
2435 * To be kept private to fire an event to
2436 * subscribers
2437 */
2438 fire(event) {
2439 if (this._callbacks) {
2440 this._callbacks.invoke.call(this._callbacks, event);
2441 }
2442 }
2443 dispose() {
2444 if (this._callbacks) {
2445 this._callbacks.dispose();
2446 this._callbacks = undefined;
2447 }
2448 }
2449}
2450exports.Emitter = Emitter;
2451Emitter._noop = function () { };
2452//# sourceMappingURL=events.js.map
2453
2454/***/ }),
2455/* 17 */
2456/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2457
2458"use strict";
2459
2460/*---------------------------------------------------------------------------------------------
2461 * Copyright (c) Microsoft Corporation. All rights reserved.
2462 * Licensed under the MIT License. See License.txt in the project root for license information.
2463 *--------------------------------------------------------------------------------------------*/
2464Object.defineProperty(exports, "__esModule", ({ value: true }));
2465exports.CancellationTokenSource = exports.CancellationToken = void 0;
2466const ral_1 = __webpack_require__(9);
2467const Is = __webpack_require__(15);
2468const events_1 = __webpack_require__(16);
2469var CancellationToken;
2470(function (CancellationToken) {
2471 CancellationToken.None = Object.freeze({
2472 isCancellationRequested: false,
2473 onCancellationRequested: events_1.Event.None
2474 });
2475 CancellationToken.Cancelled = Object.freeze({
2476 isCancellationRequested: true,
2477 onCancellationRequested: events_1.Event.None
2478 });
2479 function is(value) {
2480 const candidate = value;
2481 return candidate && (candidate === CancellationToken.None
2482 || candidate === CancellationToken.Cancelled
2483 || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
2484 }
2485 CancellationToken.is = is;
2486})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
2487const shortcutEvent = Object.freeze(function (callback, context) {
2488 const handle = ral_1.default().timer.setTimeout(callback.bind(context), 0);
2489 return { dispose() { ral_1.default().timer.clearTimeout(handle); } };
2490});
2491class MutableToken {
2492 constructor() {
2493 this._isCancelled = false;
2494 }
2495 cancel() {
2496 if (!this._isCancelled) {
2497 this._isCancelled = true;
2498 if (this._emitter) {
2499 this._emitter.fire(undefined);
2500 this.dispose();
2501 }
2502 }
2503 }
2504 get isCancellationRequested() {
2505 return this._isCancelled;
2506 }
2507 get onCancellationRequested() {
2508 if (this._isCancelled) {
2509 return shortcutEvent;
2510 }
2511 if (!this._emitter) {
2512 this._emitter = new events_1.Emitter();
2513 }
2514 return this._emitter.event;
2515 }
2516 dispose() {
2517 if (this._emitter) {
2518 this._emitter.dispose();
2519 this._emitter = undefined;
2520 }
2521 }
2522}
2523class CancellationTokenSource {
2524 get token() {
2525 if (!this._token) {
2526 // be lazy and create the token only when
2527 // actually needed
2528 this._token = new MutableToken();
2529 }
2530 return this._token;
2531 }
2532 cancel() {
2533 if (!this._token) {
2534 // save an object by returning the default
2535 // cancelled token when cancellation happens
2536 // before someone asks for the token
2537 this._token = CancellationToken.Cancelled;
2538 }
2539 else {
2540 this._token.cancel();
2541 }
2542 }
2543 dispose() {
2544 if (!this._token) {
2545 // ensure to initialize with an empty token if we had none
2546 this._token = CancellationToken.None;
2547 }
2548 else if (this._token instanceof MutableToken) {
2549 // actually dispose
2550 this._token.dispose();
2551 }
2552 }
2553}
2554exports.CancellationTokenSource = CancellationTokenSource;
2555//# sourceMappingURL=cancellation.js.map
2556
2557/***/ }),
2558/* 18 */
2559/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2560
2561"use strict";
2562
2563/* --------------------------------------------------------------------------------------------
2564 * Copyright (c) Microsoft Corporation. All rights reserved.
2565 * Licensed under the MIT License. See License.txt in the project root for license information.
2566 * ------------------------------------------------------------------------------------------ */
2567Object.defineProperty(exports, "__esModule", ({ value: true }));
2568exports.ReadableStreamMessageReader = exports.AbstractMessageReader = exports.MessageReader = void 0;
2569const ral_1 = __webpack_require__(9);
2570const Is = __webpack_require__(15);
2571const events_1 = __webpack_require__(16);
2572var MessageReader;
2573(function (MessageReader) {
2574 function is(value) {
2575 let candidate = value;
2576 return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
2577 Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
2578 }
2579 MessageReader.is = is;
2580})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
2581class AbstractMessageReader {
2582 constructor() {
2583 this.errorEmitter = new events_1.Emitter();
2584 this.closeEmitter = new events_1.Emitter();
2585 this.partialMessageEmitter = new events_1.Emitter();
2586 }
2587 dispose() {
2588 this.errorEmitter.dispose();
2589 this.closeEmitter.dispose();
2590 }
2591 get onError() {
2592 return this.errorEmitter.event;
2593 }
2594 fireError(error) {
2595 this.errorEmitter.fire(this.asError(error));
2596 }
2597 get onClose() {
2598 return this.closeEmitter.event;
2599 }
2600 fireClose() {
2601 this.closeEmitter.fire(undefined);
2602 }
2603 get onPartialMessage() {
2604 return this.partialMessageEmitter.event;
2605 }
2606 firePartialMessage(info) {
2607 this.partialMessageEmitter.fire(info);
2608 }
2609 asError(error) {
2610 if (error instanceof Error) {
2611 return error;
2612 }
2613 else {
2614 return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2615 }
2616 }
2617}
2618exports.AbstractMessageReader = AbstractMessageReader;
2619var ResolvedMessageReaderOptions;
2620(function (ResolvedMessageReaderOptions) {
2621 function fromOptions(options) {
2622 var _a;
2623 let charset;
2624 let result;
2625 let contentDecoder;
2626 const contentDecoders = new Map();
2627 let contentTypeDecoder;
2628 const contentTypeDecoders = new Map();
2629 if (options === undefined || typeof options === 'string') {
2630 charset = options !== null && options !== void 0 ? options : 'utf-8';
2631 }
2632 else {
2633 charset = (_a = options.charset) !== null && _a !== void 0 ? _a : 'utf-8';
2634 if (options.contentDecoder !== undefined) {
2635 contentDecoder = options.contentDecoder;
2636 contentDecoders.set(contentDecoder.name, contentDecoder);
2637 }
2638 if (options.contentDecoders !== undefined) {
2639 for (const decoder of options.contentDecoders) {
2640 contentDecoders.set(decoder.name, decoder);
2641 }
2642 }
2643 if (options.contentTypeDecoder !== undefined) {
2644 contentTypeDecoder = options.contentTypeDecoder;
2645 contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
2646 }
2647 if (options.contentTypeDecoders !== undefined) {
2648 for (const decoder of options.contentTypeDecoders) {
2649 contentTypeDecoders.set(decoder.name, decoder);
2650 }
2651 }
2652 }
2653 if (contentTypeDecoder === undefined) {
2654 contentTypeDecoder = ral_1.default().applicationJson.decoder;
2655 contentTypeDecoders.set(contentTypeDecoder.name, contentTypeDecoder);
2656 }
2657 return { charset, contentDecoder, contentDecoders, contentTypeDecoder, contentTypeDecoders };
2658 }
2659 ResolvedMessageReaderOptions.fromOptions = fromOptions;
2660})(ResolvedMessageReaderOptions || (ResolvedMessageReaderOptions = {}));
2661class ReadableStreamMessageReader extends AbstractMessageReader {
2662 constructor(readable, options) {
2663 super();
2664 this.readable = readable;
2665 this.options = ResolvedMessageReaderOptions.fromOptions(options);
2666 this.buffer = ral_1.default().messageBuffer.create(this.options.charset);
2667 this._partialMessageTimeout = 10000;
2668 this.nextMessageLength = -1;
2669 this.messageToken = 0;
2670 }
2671 set partialMessageTimeout(timeout) {
2672 this._partialMessageTimeout = timeout;
2673 }
2674 get partialMessageTimeout() {
2675 return this._partialMessageTimeout;
2676 }
2677 listen(callback) {
2678 this.nextMessageLength = -1;
2679 this.messageToken = 0;
2680 this.partialMessageTimer = undefined;
2681 this.callback = callback;
2682 const result = this.readable.onData((data) => {
2683 this.onData(data);
2684 });
2685 this.readable.onError((error) => this.fireError(error));
2686 this.readable.onClose(() => this.fireClose());
2687 return result;
2688 }
2689 onData(data) {
2690 this.buffer.append(data);
2691 while (true) {
2692 if (this.nextMessageLength === -1) {
2693 const headers = this.buffer.tryReadHeaders();
2694 if (!headers) {
2695 return;
2696 }
2697 const contentLength = headers.get('Content-Length');
2698 if (!contentLength) {
2699 throw new Error('Header must provide a Content-Length property.');
2700 }
2701 const length = parseInt(contentLength);
2702 if (isNaN(length)) {
2703 throw new Error('Content-Length value must be a number.');
2704 }
2705 this.nextMessageLength = length;
2706 }
2707 const body = this.buffer.tryReadBody(this.nextMessageLength);
2708 if (body === undefined) {
2709 /** We haven't received the full message yet. */
2710 this.setPartialMessageTimer();
2711 return;
2712 }
2713 this.clearPartialMessageTimer();
2714 this.nextMessageLength = -1;
2715 let p;
2716 if (this.options.contentDecoder !== undefined) {
2717 p = this.options.contentDecoder.decode(body);
2718 }
2719 else {
2720 p = Promise.resolve(body);
2721 }
2722 p.then((value) => {
2723 this.options.contentTypeDecoder.decode(value, this.options).then((msg) => {
2724 this.callback(msg);
2725 }, (error) => {
2726 this.fireError(error);
2727 });
2728 }, (error) => {
2729 this.fireError(error);
2730 });
2731 }
2732 }
2733 clearPartialMessageTimer() {
2734 if (this.partialMessageTimer) {
2735 ral_1.default().timer.clearTimeout(this.partialMessageTimer);
2736 this.partialMessageTimer = undefined;
2737 }
2738 }
2739 setPartialMessageTimer() {
2740 this.clearPartialMessageTimer();
2741 if (this._partialMessageTimeout <= 0) {
2742 return;
2743 }
2744 this.partialMessageTimer = ral_1.default().timer.setTimeout((token, timeout) => {
2745 this.partialMessageTimer = undefined;
2746 if (token === this.messageToken) {
2747 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
2748 this.setPartialMessageTimer();
2749 }
2750 }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
2751 }
2752}
2753exports.ReadableStreamMessageReader = ReadableStreamMessageReader;
2754//# sourceMappingURL=messageReader.js.map
2755
2756/***/ }),
2757/* 19 */
2758/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2759
2760"use strict";
2761
2762/* --------------------------------------------------------------------------------------------
2763 * Copyright (c) Microsoft Corporation. All rights reserved.
2764 * Licensed under the MIT License. See License.txt in the project root for license information.
2765 * ------------------------------------------------------------------------------------------ */
2766Object.defineProperty(exports, "__esModule", ({ value: true }));
2767exports.WriteableStreamMessageWriter = exports.AbstractMessageWriter = exports.MessageWriter = void 0;
2768const ral_1 = __webpack_require__(9);
2769const Is = __webpack_require__(15);
2770const semaphore_1 = __webpack_require__(20);
2771const events_1 = __webpack_require__(16);
2772const ContentLength = 'Content-Length: ';
2773const CRLF = '\r\n';
2774var MessageWriter;
2775(function (MessageWriter) {
2776 function is(value) {
2777 let candidate = value;
2778 return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
2779 Is.func(candidate.onError) && Is.func(candidate.write);
2780 }
2781 MessageWriter.is = is;
2782})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
2783class AbstractMessageWriter {
2784 constructor() {
2785 this.errorEmitter = new events_1.Emitter();
2786 this.closeEmitter = new events_1.Emitter();
2787 }
2788 dispose() {
2789 this.errorEmitter.dispose();
2790 this.closeEmitter.dispose();
2791 }
2792 get onError() {
2793 return this.errorEmitter.event;
2794 }
2795 fireError(error, message, count) {
2796 this.errorEmitter.fire([this.asError(error), message, count]);
2797 }
2798 get onClose() {
2799 return this.closeEmitter.event;
2800 }
2801 fireClose() {
2802 this.closeEmitter.fire(undefined);
2803 }
2804 asError(error) {
2805 if (error instanceof Error) {
2806 return error;
2807 }
2808 else {
2809 return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2810 }
2811 }
2812}
2813exports.AbstractMessageWriter = AbstractMessageWriter;
2814var ResolvedMessageWriterOptions;
2815(function (ResolvedMessageWriterOptions) {
2816 function fromOptions(options) {
2817 var _a, _b;
2818 if (options === undefined || typeof options === 'string') {
2819 return { charset: options !== null && options !== void 0 ? options : 'utf-8', contentTypeEncoder: ral_1.default().applicationJson.encoder };
2820 }
2821 else {
2822 return { charset: (_a = options.charset) !== null && _a !== void 0 ? _a : 'utf-8', contentEncoder: options.contentEncoder, contentTypeEncoder: (_b = options.contentTypeEncoder) !== null && _b !== void 0 ? _b : ral_1.default().applicationJson.encoder };
2823 }
2824 }
2825 ResolvedMessageWriterOptions.fromOptions = fromOptions;
2826})(ResolvedMessageWriterOptions || (ResolvedMessageWriterOptions = {}));
2827class WriteableStreamMessageWriter extends AbstractMessageWriter {
2828 constructor(writable, options) {
2829 super();
2830 this.writable = writable;
2831 this.options = ResolvedMessageWriterOptions.fromOptions(options);
2832 this.errorCount = 0;
2833 this.writeSemaphore = new semaphore_1.Semaphore(1);
2834 this.writable.onError((error) => this.fireError(error));
2835 this.writable.onClose(() => this.fireClose());
2836 }
2837 async write(msg) {
2838 return this.writeSemaphore.lock(async () => {
2839 const payload = this.options.contentTypeEncoder.encode(msg, this.options).then((buffer) => {
2840 if (this.options.contentEncoder !== undefined) {
2841 return this.options.contentEncoder.encode(buffer);
2842 }
2843 else {
2844 return buffer;
2845 }
2846 });
2847 return payload.then((buffer) => {
2848 const headers = [];
2849 headers.push(ContentLength, buffer.byteLength.toString(), CRLF);
2850 headers.push(CRLF);
2851 return this.doWrite(msg, headers, buffer);
2852 }, (error) => {
2853 this.fireError(error);
2854 throw error;
2855 });
2856 });
2857 }
2858 async doWrite(msg, headers, data) {
2859 try {
2860 await this.writable.write(headers.join(''), 'ascii');
2861 return this.writable.write(data);
2862 }
2863 catch (error) {
2864 this.handleError(error, msg);
2865 return Promise.reject(error);
2866 }
2867 }
2868 handleError(error, msg) {
2869 this.errorCount++;
2870 this.fireError(error, msg, this.errorCount);
2871 }
2872 end() {
2873 this.writable.end();
2874 }
2875}
2876exports.WriteableStreamMessageWriter = WriteableStreamMessageWriter;
2877//# sourceMappingURL=messageWriter.js.map
2878
2879/***/ }),
2880/* 20 */
2881/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2882
2883"use strict";
2884
2885/* --------------------------------------------------------------------------------------------
2886 * Copyright (c) Microsoft Corporation. All rights reserved.
2887 * Licensed under the MIT License. See License.txt in the project root for license information.
2888 * ------------------------------------------------------------------------------------------ */
2889Object.defineProperty(exports, "__esModule", ({ value: true }));
2890exports.Semaphore = void 0;
2891const ral_1 = __webpack_require__(9);
2892class Semaphore {
2893 constructor(capacity = 1) {
2894 if (capacity <= 0) {
2895 throw new Error('Capacity must be greater than 0');
2896 }
2897 this._capacity = capacity;
2898 this._active = 0;
2899 this._waiting = [];
2900 }
2901 lock(thunk) {
2902 return new Promise((resolve, reject) => {
2903 this._waiting.push({ thunk, resolve, reject });
2904 this.runNext();
2905 });
2906 }
2907 get active() {
2908 return this._active;
2909 }
2910 runNext() {
2911 if (this._waiting.length === 0 || this._active === this._capacity) {
2912 return;
2913 }
2914 ral_1.default().timer.setImmediate(() => this.doRunNext());
2915 }
2916 doRunNext() {
2917 if (this._waiting.length === 0 || this._active === this._capacity) {
2918 return;
2919 }
2920 const next = this._waiting.shift();
2921 this._active++;
2922 if (this._active > this._capacity) {
2923 throw new Error(`To many thunks active`);
2924 }
2925 try {
2926 const result = next.thunk();
2927 if (result instanceof Promise) {
2928 result.then((value) => {
2929 this._active--;
2930 next.resolve(value);
2931 this.runNext();
2932 }, (err) => {
2933 this._active--;
2934 next.reject(err);
2935 this.runNext();
2936 });
2937 }
2938 else {
2939 this._active--;
2940 next.resolve(result);
2941 this.runNext();
2942 }
2943 }
2944 catch (err) {
2945 this._active--;
2946 next.reject(err);
2947 this.runNext();
2948 }
2949 }
2950}
2951exports.Semaphore = Semaphore;
2952//# sourceMappingURL=semaphore.js.map
2953
2954/***/ }),
2955/* 21 */
2956/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
2957
2958"use strict";
2959
2960/* --------------------------------------------------------------------------------------------
2961 * Copyright (c) Microsoft Corporation. All rights reserved.
2962 * Licensed under the MIT License. See License.txt in the project root for license information.
2963 * ------------------------------------------------------------------------------------------ */
2964Object.defineProperty(exports, "__esModule", ({ value: true }));
2965exports.createMessageConnection = exports.ConnectionOptions = exports.CancellationStrategy = exports.CancellationSenderStrategy = exports.CancellationReceiverStrategy = exports.ConnectionStrategy = exports.ConnectionError = exports.ConnectionErrors = exports.LogTraceNotification = exports.SetTraceNotification = exports.TraceFormat = exports.Trace = exports.NullLogger = exports.ProgressType = void 0;
2966const ral_1 = __webpack_require__(9);
2967const Is = __webpack_require__(15);
2968const messages_1 = __webpack_require__(14);
2969const linkedMap_1 = __webpack_require__(22);
2970const events_1 = __webpack_require__(16);
2971const cancellation_1 = __webpack_require__(17);
2972var CancelNotification;
2973(function (CancelNotification) {
2974 CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
2975})(CancelNotification || (CancelNotification = {}));
2976var ProgressNotification;
2977(function (ProgressNotification) {
2978 ProgressNotification.type = new messages_1.NotificationType('$/progress');
2979})(ProgressNotification || (ProgressNotification = {}));
2980class ProgressType {
2981 constructor() {
2982 }
2983}
2984exports.ProgressType = ProgressType;
2985var StarRequestHandler;
2986(function (StarRequestHandler) {
2987 function is(value) {
2988 return Is.func(value);
2989 }
2990 StarRequestHandler.is = is;
2991})(StarRequestHandler || (StarRequestHandler = {}));
2992exports.NullLogger = Object.freeze({
2993 error: () => { },
2994 warn: () => { },
2995 info: () => { },
2996 log: () => { }
2997});
2998var Trace;
2999(function (Trace) {
3000 Trace[Trace["Off"] = 0] = "Off";
3001 Trace[Trace["Messages"] = 1] = "Messages";
3002 Trace[Trace["Verbose"] = 2] = "Verbose";
3003})(Trace = exports.Trace || (exports.Trace = {}));
3004(function (Trace) {
3005 function fromString(value) {
3006 if (!Is.string(value)) {
3007 return Trace.Off;
3008 }
3009 value = value.toLowerCase();
3010 switch (value) {
3011 case 'off':
3012 return Trace.Off;
3013 case 'messages':
3014 return Trace.Messages;
3015 case 'verbose':
3016 return Trace.Verbose;
3017 default:
3018 return Trace.Off;
3019 }
3020 }
3021 Trace.fromString = fromString;
3022 function toString(value) {
3023 switch (value) {
3024 case Trace.Off:
3025 return 'off';
3026 case Trace.Messages:
3027 return 'messages';
3028 case Trace.Verbose:
3029 return 'verbose';
3030 default:
3031 return 'off';
3032 }
3033 }
3034 Trace.toString = toString;
3035})(Trace = exports.Trace || (exports.Trace = {}));
3036var TraceFormat;
3037(function (TraceFormat) {
3038 TraceFormat["Text"] = "text";
3039 TraceFormat["JSON"] = "json";
3040})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
3041(function (TraceFormat) {
3042 function fromString(value) {
3043 value = value.toLowerCase();
3044 if (value === 'json') {
3045 return TraceFormat.JSON;
3046 }
3047 else {
3048 return TraceFormat.Text;
3049 }
3050 }
3051 TraceFormat.fromString = fromString;
3052})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
3053var SetTraceNotification;
3054(function (SetTraceNotification) {
3055 SetTraceNotification.type = new messages_1.NotificationType('$/setTrace');
3056})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
3057var LogTraceNotification;
3058(function (LogTraceNotification) {
3059 LogTraceNotification.type = new messages_1.NotificationType('$/logTrace');
3060})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
3061var ConnectionErrors;
3062(function (ConnectionErrors) {
3063 /**
3064 * The connection is closed.
3065 */
3066 ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
3067 /**
3068 * The connection got disposed.
3069 */
3070 ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
3071 /**
3072 * The connection is already in listening mode.
3073 */
3074 ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
3075})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
3076class ConnectionError extends Error {
3077 constructor(code, message) {
3078 super(message);
3079 this.code = code;
3080 Object.setPrototypeOf(this, ConnectionError.prototype);
3081 }
3082}
3083exports.ConnectionError = ConnectionError;
3084var ConnectionStrategy;
3085(function (ConnectionStrategy) {
3086 function is(value) {
3087 const candidate = value;
3088 return candidate && Is.func(candidate.cancelUndispatched);
3089 }
3090 ConnectionStrategy.is = is;
3091})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
3092var CancellationReceiverStrategy;
3093(function (CancellationReceiverStrategy) {
3094 CancellationReceiverStrategy.Message = Object.freeze({
3095 createCancellationTokenSource(_) {
3096 return new cancellation_1.CancellationTokenSource();
3097 }
3098 });
3099 function is(value) {
3100 const candidate = value;
3101 return candidate && Is.func(candidate.createCancellationTokenSource);
3102 }
3103 CancellationReceiverStrategy.is = is;
3104})(CancellationReceiverStrategy = exports.CancellationReceiverStrategy || (exports.CancellationReceiverStrategy = {}));
3105var CancellationSenderStrategy;
3106(function (CancellationSenderStrategy) {
3107 CancellationSenderStrategy.Message = Object.freeze({
3108 sendCancellation(conn, id) {
3109 conn.sendNotification(CancelNotification.type, { id });
3110 },
3111 cleanup(_) { }
3112 });
3113 function is(value) {
3114 const candidate = value;
3115 return candidate && Is.func(candidate.sendCancellation) && Is.func(candidate.cleanup);
3116 }
3117 CancellationSenderStrategy.is = is;
3118})(CancellationSenderStrategy = exports.CancellationSenderStrategy || (exports.CancellationSenderStrategy = {}));
3119var CancellationStrategy;
3120(function (CancellationStrategy) {
3121 CancellationStrategy.Message = Object.freeze({
3122 receiver: CancellationReceiverStrategy.Message,
3123 sender: CancellationSenderStrategy.Message
3124 });
3125 function is(value) {
3126 const candidate = value;
3127 return candidate && CancellationReceiverStrategy.is(candidate.receiver) && CancellationSenderStrategy.is(candidate.sender);
3128 }
3129 CancellationStrategy.is = is;
3130})(CancellationStrategy = exports.CancellationStrategy || (exports.CancellationStrategy = {}));
3131var ConnectionOptions;
3132(function (ConnectionOptions) {
3133 function is(value) {
3134 const candidate = value;
3135 return candidate && (CancellationStrategy.is(candidate.cancellationStrategy) || ConnectionStrategy.is(candidate.connectionStrategy));
3136 }
3137 ConnectionOptions.is = is;
3138})(ConnectionOptions = exports.ConnectionOptions || (exports.ConnectionOptions = {}));
3139var ConnectionState;
3140(function (ConnectionState) {
3141 ConnectionState[ConnectionState["New"] = 1] = "New";
3142 ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
3143 ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
3144 ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
3145})(ConnectionState || (ConnectionState = {}));
3146function createMessageConnection(messageReader, messageWriter, _logger, options) {
3147 const logger = _logger !== undefined ? _logger : exports.NullLogger;
3148 let sequenceNumber = 0;
3149 let notificationSquenceNumber = 0;
3150 let unknownResponseSquenceNumber = 0;
3151 const version = '2.0';
3152 let starRequestHandler = undefined;
3153 const requestHandlers = Object.create(null);
3154 let starNotificationHandler = undefined;
3155 const notificationHandlers = Object.create(null);
3156 const progressHandlers = new Map();
3157 let timer;
3158 let messageQueue = new linkedMap_1.LinkedMap();
3159 let responsePromises = Object.create(null);
3160 let requestTokens = Object.create(null);
3161 let trace = Trace.Off;
3162 let traceFormat = TraceFormat.Text;
3163 let tracer;
3164 let state = ConnectionState.New;
3165 const errorEmitter = new events_1.Emitter();
3166 const closeEmitter = new events_1.Emitter();
3167 const unhandledNotificationEmitter = new events_1.Emitter();
3168 const unhandledProgressEmitter = new events_1.Emitter();
3169 const disposeEmitter = new events_1.Emitter();
3170 const cancellationStrategy = (options && options.cancellationStrategy) ? options.cancellationStrategy : CancellationStrategy.Message;
3171 function createRequestQueueKey(id) {
3172 if (id === null) {
3173 throw new Error(`Can't send requests with id null since the response can't be correlated.`);
3174 }
3175 return 'req-' + id.toString();
3176 }
3177 function createResponseQueueKey(id) {
3178 if (id === null) {
3179 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
3180 }
3181 else {
3182 return 'res-' + id.toString();
3183 }
3184 }
3185 function createNotificationQueueKey() {
3186 return 'not-' + (++notificationSquenceNumber).toString();
3187 }
3188 function addMessageToQueue(queue, message) {
3189 if (messages_1.isRequestMessage(message)) {
3190 queue.set(createRequestQueueKey(message.id), message);
3191 }
3192 else if (messages_1.isResponseMessage(message)) {
3193 queue.set(createResponseQueueKey(message.id), message);
3194 }
3195 else {
3196 queue.set(createNotificationQueueKey(), message);
3197 }
3198 }
3199 function cancelUndispatched(_message) {
3200 return undefined;
3201 }
3202 function isListening() {
3203 return state === ConnectionState.Listening;
3204 }
3205 function isClosed() {
3206 return state === ConnectionState.Closed;
3207 }
3208 function isDisposed() {
3209 return state === ConnectionState.Disposed;
3210 }
3211 function closeHandler() {
3212 if (state === ConnectionState.New || state === ConnectionState.Listening) {
3213 state = ConnectionState.Closed;
3214 closeEmitter.fire(undefined);
3215 }
3216 // If the connection is disposed don't sent close events.
3217 }
3218 function readErrorHandler(error) {
3219 errorEmitter.fire([error, undefined, undefined]);
3220 }
3221 function writeErrorHandler(data) {
3222 errorEmitter.fire(data);
3223 }
3224 messageReader.onClose(closeHandler);
3225 messageReader.onError(readErrorHandler);
3226 messageWriter.onClose(closeHandler);
3227 messageWriter.onError(writeErrorHandler);
3228 function triggerMessageQueue() {
3229 if (timer || messageQueue.size === 0) {
3230 return;
3231 }
3232 timer = ral_1.default().timer.setImmediate(() => {
3233 timer = undefined;
3234 processMessageQueue();
3235 });
3236 }
3237 function processMessageQueue() {
3238 if (messageQueue.size === 0) {
3239 return;
3240 }
3241 const message = messageQueue.shift();
3242 try {
3243 if (messages_1.isRequestMessage(message)) {
3244 handleRequest(message);
3245 }
3246 else if (messages_1.isNotificationMessage(message)) {
3247 handleNotification(message);
3248 }
3249 else if (messages_1.isResponseMessage(message)) {
3250 handleResponse(message);
3251 }
3252 else {
3253 handleInvalidMessage(message);
3254 }
3255 }
3256 finally {
3257 triggerMessageQueue();
3258 }
3259 }
3260 const callback = (message) => {
3261 try {
3262 // We have received a cancellation message. Check if the message is still in the queue
3263 // and cancel it if allowed to do so.
3264 if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
3265 const key = createRequestQueueKey(message.params.id);
3266 const toCancel = messageQueue.get(key);
3267 if (messages_1.isRequestMessage(toCancel)) {
3268 const strategy = options === null || options === void 0 ? void 0 : options.connectionStrategy;
3269 const response = (strategy && strategy.cancelUndispatched) ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
3270 if (response && (response.error !== undefined || response.result !== undefined)) {
3271 messageQueue.delete(key);
3272 response.id = toCancel.id;
3273 traceSendingResponse(response, message.method, Date.now());
3274 messageWriter.write(response);
3275 return;
3276 }
3277 }
3278 }
3279 addMessageToQueue(messageQueue, message);
3280 }
3281 finally {
3282 triggerMessageQueue();
3283 }
3284 };
3285 function handleRequest(requestMessage) {
3286 if (isDisposed()) {
3287 // we return here silently since we fired an event when the
3288 // connection got disposed.
3289 return;
3290 }
3291 function reply(resultOrError, method, startTime) {
3292 const message = {
3293 jsonrpc: version,
3294 id: requestMessage.id
3295 };
3296 if (resultOrError instanceof messages_1.ResponseError) {
3297 message.error = resultOrError.toJson();
3298 }
3299 else {
3300 message.result = resultOrError === undefined ? null : resultOrError;
3301 }
3302 traceSendingResponse(message, method, startTime);
3303 messageWriter.write(message);
3304 }
3305 function replyError(error, method, startTime) {
3306 const message = {
3307 jsonrpc: version,
3308 id: requestMessage.id,
3309 error: error.toJson()
3310 };
3311 traceSendingResponse(message, method, startTime);
3312 messageWriter.write(message);
3313 }
3314 function replySuccess(result, method, startTime) {
3315 // The JSON RPC defines that a response must either have a result or an error
3316 // So we can't treat undefined as a valid response result.
3317 if (result === undefined) {
3318 result = null;
3319 }
3320 const message = {
3321 jsonrpc: version,
3322 id: requestMessage.id,
3323 result: result
3324 };
3325 traceSendingResponse(message, method, startTime);
3326 messageWriter.write(message);
3327 }
3328 traceReceivedRequest(requestMessage);
3329 const element = requestHandlers[requestMessage.method];
3330 let type;
3331 let requestHandler;
3332 if (element) {
3333 type = element.type;
3334 requestHandler = element.handler;
3335 }
3336 const startTime = Date.now();
3337 if (requestHandler || starRequestHandler) {
3338 const tokenKey = String(requestMessage.id);
3339 const cancellationSource = cancellationStrategy.receiver.createCancellationTokenSource(tokenKey);
3340 requestTokens[tokenKey] = cancellationSource;
3341 try {
3342 let handlerResult;
3343 if (requestHandler) {
3344 if (requestMessage.params === undefined) {
3345 if (type !== undefined && type.numberOfParams !== 0) {
3346 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines ${type.numberOfParams} params but recevied none.`), requestMessage.method, startTime);
3347 return;
3348 }
3349 handlerResult = requestHandler(cancellationSource.token);
3350 }
3351 else if (Array.isArray(requestMessage.params)) {
3352 if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byName) {
3353 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by name but received parameters by position`), requestMessage.method, startTime);
3354 return;
3355 }
3356 handlerResult = requestHandler(...requestMessage.params, cancellationSource.token);
3357 }
3358 else {
3359 if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
3360 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InvalidParams, `Request ${requestMessage.method} defines parameters by position but received parameters by name`), requestMessage.method, startTime);
3361 return;
3362 }
3363 handlerResult = requestHandler(requestMessage.params, cancellationSource.token);
3364 }
3365 }
3366 else if (starRequestHandler) {
3367 handlerResult = starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
3368 }
3369 const promise = handlerResult;
3370 if (!handlerResult) {
3371 delete requestTokens[tokenKey];
3372 replySuccess(handlerResult, requestMessage.method, startTime);
3373 }
3374 else if (promise.then) {
3375 promise.then((resultOrError) => {
3376 delete requestTokens[tokenKey];
3377 reply(resultOrError, requestMessage.method, startTime);
3378 }, error => {
3379 delete requestTokens[tokenKey];
3380 if (error instanceof messages_1.ResponseError) {
3381 replyError(error, requestMessage.method, startTime);
3382 }
3383 else if (error && Is.string(error.message)) {
3384 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
3385 }
3386 else {
3387 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
3388 }
3389 });
3390 }
3391 else {
3392 delete requestTokens[tokenKey];
3393 reply(handlerResult, requestMessage.method, startTime);
3394 }
3395 }
3396 catch (error) {
3397 delete requestTokens[tokenKey];
3398 if (error instanceof messages_1.ResponseError) {
3399 reply(error, requestMessage.method, startTime);
3400 }
3401 else if (error && Is.string(error.message)) {
3402 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
3403 }
3404 else {
3405 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
3406 }
3407 }
3408 }
3409 else {
3410 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
3411 }
3412 }
3413 function handleResponse(responseMessage) {
3414 if (isDisposed()) {
3415 // See handle request.
3416 return;
3417 }
3418 if (responseMessage.id === null) {
3419 if (responseMessage.error) {
3420 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
3421 }
3422 else {
3423 logger.error(`Received response message without id. No further error information provided.`);
3424 }
3425 }
3426 else {
3427 const key = String(responseMessage.id);
3428 const responsePromise = responsePromises[key];
3429 traceReceivedResponse(responseMessage, responsePromise);
3430 if (responsePromise) {
3431 delete responsePromises[key];
3432 try {
3433 if (responseMessage.error) {
3434 const error = responseMessage.error;
3435 responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
3436 }
3437 else if (responseMessage.result !== undefined) {
3438 responsePromise.resolve(responseMessage.result);
3439 }
3440 else {
3441 throw new Error('Should never happen.');
3442 }
3443 }
3444 catch (error) {
3445 if (error.message) {
3446 logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
3447 }
3448 else {
3449 logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
3450 }
3451 }
3452 }
3453 }
3454 }
3455 function handleNotification(message) {
3456 if (isDisposed()) {
3457 // See handle request.
3458 return;
3459 }
3460 let type = undefined;
3461 let notificationHandler;
3462 if (message.method === CancelNotification.type.method) {
3463 notificationHandler = (params) => {
3464 const id = params.id;
3465 const source = requestTokens[String(id)];
3466 if (source) {
3467 source.cancel();
3468 }
3469 };
3470 }
3471 else {
3472 const element = notificationHandlers[message.method];
3473 if (element) {
3474 notificationHandler = element.handler;
3475 type = element.type;
3476 }
3477 }
3478 if (notificationHandler || starNotificationHandler) {
3479 try {
3480 traceReceivedNotification(message);
3481 if (notificationHandler) {
3482 if (message.params === undefined) {
3483 if (type !== undefined) {
3484 if (type.numberOfParams !== 0 && type.parameterStructures !== messages_1.ParameterStructures.byName) {
3485 logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but recevied none.`);
3486 }
3487 }
3488 notificationHandler();
3489 }
3490 else if (Array.isArray(message.params)) {
3491 if (type !== undefined) {
3492 if (type.parameterStructures === messages_1.ParameterStructures.byName) {
3493 logger.error(`Notification ${message.method} defines parameters by name but received parameters by position`);
3494 }
3495 if (type.numberOfParams !== message.params.length) {
3496 logger.error(`Notification ${message.method} defines ${type.numberOfParams} params but received ${message.params.length} argumennts`);
3497 }
3498 }
3499 notificationHandler(...message.params);
3500 }
3501 else {
3502 if (type !== undefined && type.parameterStructures === messages_1.ParameterStructures.byPosition) {
3503 logger.error(`Notification ${message.method} defines parameters by position but received parameters by name`);
3504 }
3505 notificationHandler(message.params);
3506 }
3507 }
3508 else if (starNotificationHandler) {
3509 starNotificationHandler(message.method, message.params);
3510 }
3511 }
3512 catch (error) {
3513 if (error.message) {
3514 logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
3515 }
3516 else {
3517 logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
3518 }
3519 }
3520 }
3521 else {
3522 unhandledNotificationEmitter.fire(message);
3523 }
3524 }
3525 function handleInvalidMessage(message) {
3526 if (!message) {
3527 logger.error('Received empty message.');
3528 return;
3529 }
3530 logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
3531 // Test whether we find an id to reject the promise
3532 const responseMessage = message;
3533 if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
3534 const key = String(responseMessage.id);
3535 const responseHandler = responsePromises[key];
3536 if (responseHandler) {
3537 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
3538 }
3539 }
3540 }
3541 function traceSendingRequest(message) {
3542 if (trace === Trace.Off || !tracer) {
3543 return;
3544 }
3545 if (traceFormat === TraceFormat.Text) {
3546 let data = undefined;
3547 if (trace === Trace.Verbose && message.params) {
3548 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
3549 }
3550 tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
3551 }
3552 else {
3553 logLSPMessage('send-request', message);
3554 }
3555 }
3556 function traceSendingNotification(message) {
3557 if (trace === Trace.Off || !tracer) {
3558 return;
3559 }
3560 if (traceFormat === TraceFormat.Text) {
3561 let data = undefined;
3562 if (trace === Trace.Verbose) {
3563 if (message.params) {
3564 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
3565 }
3566 else {
3567 data = 'No parameters provided.\n\n';
3568 }
3569 }
3570 tracer.log(`Sending notification '${message.method}'.`, data);
3571 }
3572 else {
3573 logLSPMessage('send-notification', message);
3574 }
3575 }
3576 function traceSendingResponse(message, method, startTime) {
3577 if (trace === Trace.Off || !tracer) {
3578 return;
3579 }
3580 if (traceFormat === TraceFormat.Text) {
3581 let data = undefined;
3582 if (trace === Trace.Verbose) {
3583 if (message.error && message.error.data) {
3584 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
3585 }
3586 else {
3587 if (message.result) {
3588 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
3589 }
3590 else if (message.error === undefined) {
3591 data = 'No result returned.\n\n';
3592 }
3593 }
3594 }
3595 tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
3596 }
3597 else {
3598 logLSPMessage('send-response', message);
3599 }
3600 }
3601 function traceReceivedRequest(message) {
3602 if (trace === Trace.Off || !tracer) {
3603 return;
3604 }
3605 if (traceFormat === TraceFormat.Text) {
3606 let data = undefined;
3607 if (trace === Trace.Verbose && message.params) {
3608 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
3609 }
3610 tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
3611 }
3612 else {
3613 logLSPMessage('receive-request', message);
3614 }
3615 }
3616 function traceReceivedNotification(message) {
3617 if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
3618 return;
3619 }
3620 if (traceFormat === TraceFormat.Text) {
3621 let data = undefined;
3622 if (trace === Trace.Verbose) {
3623 if (message.params) {
3624 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
3625 }
3626 else {
3627 data = 'No parameters provided.\n\n';
3628 }
3629 }
3630 tracer.log(`Received notification '${message.method}'.`, data);
3631 }
3632 else {
3633 logLSPMessage('receive-notification', message);
3634 }
3635 }
3636 function traceReceivedResponse(message, responsePromise) {
3637 if (trace === Trace.Off || !tracer) {
3638 return;
3639 }
3640 if (traceFormat === TraceFormat.Text) {
3641 let data = undefined;
3642 if (trace === Trace.Verbose) {
3643 if (message.error && message.error.data) {
3644 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
3645 }
3646 else {
3647 if (message.result) {
3648 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
3649 }
3650 else if (message.error === undefined) {
3651 data = 'No result returned.\n\n';
3652 }
3653 }
3654 }
3655 if (responsePromise) {
3656 const error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
3657 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
3658 }
3659 else {
3660 tracer.log(`Received response ${message.id} without active response promise.`, data);
3661 }
3662 }
3663 else {
3664 logLSPMessage('receive-response', message);
3665 }
3666 }
3667 function logLSPMessage(type, message) {
3668 if (!tracer || trace === Trace.Off) {
3669 return;
3670 }
3671 const lspMessage = {
3672 isLSPMessage: true,
3673 type,
3674 message,
3675 timestamp: Date.now()
3676 };
3677 tracer.log(lspMessage);
3678 }
3679 function throwIfClosedOrDisposed() {
3680 if (isClosed()) {
3681 throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
3682 }
3683 if (isDisposed()) {
3684 throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
3685 }
3686 }
3687 function throwIfListening() {
3688 if (isListening()) {
3689 throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
3690 }
3691 }
3692 function throwIfNotListening() {
3693 if (!isListening()) {
3694 throw new Error('Call listen() first.');
3695 }
3696 }
3697 function undefinedToNull(param) {
3698 if (param === undefined) {
3699 return null;
3700 }
3701 else {
3702 return param;
3703 }
3704 }
3705 function nullToUndefined(param) {
3706 if (param === null) {
3707 return undefined;
3708 }
3709 else {
3710 return param;
3711 }
3712 }
3713 function isNamedParam(param) {
3714 return param !== undefined && param !== null && !Array.isArray(param) && typeof param === 'object';
3715 }
3716 function computeSingleParam(parameterStructures, param) {
3717 switch (parameterStructures) {
3718 case messages_1.ParameterStructures.auto:
3719 if (isNamedParam(param)) {
3720 return nullToUndefined(param);
3721 }
3722 else {
3723 return [undefinedToNull(param)];
3724 }
3725 break;
3726 case messages_1.ParameterStructures.byName:
3727 if (!isNamedParam(param)) {
3728 throw new Error(`Recevied parameters by name but param is not an object literal.`);
3729 }
3730 return nullToUndefined(param);
3731 case messages_1.ParameterStructures.byPosition:
3732 return [undefinedToNull(param)];
3733 default:
3734 throw new Error(`Unknown parameter structure ${parameterStructures.toString()}`);
3735 }
3736 }
3737 function computeMessageParams(type, params) {
3738 let result;
3739 const numberOfParams = type.numberOfParams;
3740 switch (numberOfParams) {
3741 case 0:
3742 result = undefined;
3743 break;
3744 case 1:
3745 result = computeSingleParam(type.parameterStructures, params[0]);
3746 break;
3747 default:
3748 result = [];
3749 for (let i = 0; i < params.length && i < numberOfParams; i++) {
3750 result.push(undefinedToNull(params[i]));
3751 }
3752 if (params.length < numberOfParams) {
3753 for (let i = params.length; i < numberOfParams; i++) {
3754 result.push(null);
3755 }
3756 }
3757 break;
3758 }
3759 return result;
3760 }
3761 const connection = {
3762 sendNotification: (type, ...args) => {
3763 throwIfClosedOrDisposed();
3764 let method;
3765 let messageParams;
3766 if (Is.string(type)) {
3767 method = type;
3768 const first = args[0];
3769 let paramStart = 0;
3770 let parameterStructures = messages_1.ParameterStructures.auto;
3771 if (messages_1.ParameterStructures.is(first)) {
3772 paramStart = 1;
3773 parameterStructures = first;
3774 }
3775 let paramEnd = args.length;
3776 const numberOfParams = paramEnd - paramStart;
3777 switch (numberOfParams) {
3778 case 0:
3779 messageParams = undefined;
3780 break;
3781 case 1:
3782 messageParams = computeSingleParam(parameterStructures, args[paramStart]);
3783 break;
3784 default:
3785 if (parameterStructures === messages_1.ParameterStructures.byName) {
3786 throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' notification parameter structure.`);
3787 }
3788 messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
3789 break;
3790 }
3791 }
3792 else {
3793 const params = args;
3794 method = type.method;
3795 messageParams = computeMessageParams(type, params);
3796 }
3797 const notificationMessage = {
3798 jsonrpc: version,
3799 method: method,
3800 params: messageParams
3801 };
3802 traceSendingNotification(notificationMessage);
3803 messageWriter.write(notificationMessage);
3804 },
3805 onNotification: (type, handler) => {
3806 throwIfClosedOrDisposed();
3807 let method;
3808 if (Is.func(type)) {
3809 starNotificationHandler = type;
3810 }
3811 else if (handler) {
3812 if (Is.string(type)) {
3813 method = type;
3814 notificationHandlers[type] = { type: undefined, handler };
3815 }
3816 else {
3817 method = type.method;
3818 notificationHandlers[type.method] = { type, handler };
3819 }
3820 }
3821 return {
3822 dispose: () => {
3823 if (method !== undefined) {
3824 delete notificationHandlers[method];
3825 }
3826 else {
3827 starNotificationHandler = undefined;
3828 }
3829 }
3830 };
3831 },
3832 onProgress: (_type, token, handler) => {
3833 if (progressHandlers.has(token)) {
3834 throw new Error(`Progress handler for token ${token} already registered`);
3835 }
3836 progressHandlers.set(token, handler);
3837 return {
3838 dispose: () => {
3839 progressHandlers.delete(token);
3840 }
3841 };
3842 },
3843 sendProgress: (_type, token, value) => {
3844 connection.sendNotification(ProgressNotification.type, { token, value });
3845 },
3846 onUnhandledProgress: unhandledProgressEmitter.event,
3847 sendRequest: (type, ...args) => {
3848 throwIfClosedOrDisposed();
3849 throwIfNotListening();
3850 let method;
3851 let messageParams;
3852 let token = undefined;
3853 if (Is.string(type)) {
3854 method = type;
3855 const first = args[0];
3856 const last = args[args.length - 1];
3857 let paramStart = 0;
3858 let parameterStructures = messages_1.ParameterStructures.auto;
3859 if (messages_1.ParameterStructures.is(first)) {
3860 paramStart = 1;
3861 parameterStructures = first;
3862 }
3863 let paramEnd = args.length;
3864 if (cancellation_1.CancellationToken.is(last)) {
3865 paramEnd = paramEnd - 1;
3866 token = last;
3867 }
3868 const numberOfParams = paramEnd - paramStart;
3869 switch (numberOfParams) {
3870 case 0:
3871 messageParams = undefined;
3872 break;
3873 case 1:
3874 messageParams = computeSingleParam(parameterStructures, args[paramStart]);
3875 break;
3876 default:
3877 if (parameterStructures === messages_1.ParameterStructures.byName) {
3878 throw new Error(`Recevied ${numberOfParams} parameters for 'by Name' request parameter structure.`);
3879 }
3880 messageParams = args.slice(paramStart, paramEnd).map(value => undefinedToNull(value));
3881 break;
3882 }
3883 }
3884 else {
3885 const params = args;
3886 method = type.method;
3887 messageParams = computeMessageParams(type, params);
3888 const numberOfParams = type.numberOfParams;
3889 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
3890 }
3891 const id = sequenceNumber++;
3892 let disposable;
3893 if (token) {
3894 disposable = token.onCancellationRequested(() => {
3895 cancellationStrategy.sender.sendCancellation(connection, id);
3896 });
3897 }
3898 const result = new Promise((resolve, reject) => {
3899 const requestMessage = {
3900 jsonrpc: version,
3901 id: id,
3902 method: method,
3903 params: messageParams
3904 };
3905 const resolveWithCleanup = (r) => {
3906 resolve(r);
3907 cancellationStrategy.sender.cleanup(id);
3908 disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
3909 };
3910 const rejectWithCleanup = (r) => {
3911 reject(r);
3912 cancellationStrategy.sender.cleanup(id);
3913 disposable === null || disposable === void 0 ? void 0 : disposable.dispose();
3914 };
3915 let responsePromise = { method: method, timerStart: Date.now(), resolve: resolveWithCleanup, reject: rejectWithCleanup };
3916 traceSendingRequest(requestMessage);
3917 try {
3918 messageWriter.write(requestMessage);
3919 }
3920 catch (e) {
3921 // Writing the message failed. So we need to reject the promise.
3922 responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
3923 responsePromise = null;
3924 }
3925 if (responsePromise) {
3926 responsePromises[String(id)] = responsePromise;
3927 }
3928 });
3929 return result;
3930 },
3931 onRequest: (type, handler) => {
3932 throwIfClosedOrDisposed();
3933 let method = null;
3934 if (StarRequestHandler.is(type)) {
3935 method = undefined;
3936 starRequestHandler = type;
3937 }
3938 else if (Is.string(type)) {
3939 method = null;
3940 if (handler !== undefined) {
3941 method = type;
3942 requestHandlers[type] = { handler: handler, type: undefined };
3943 }
3944 }
3945 else {
3946 if (handler !== undefined) {
3947 method = type.method;
3948 requestHandlers[type.method] = { type, handler };
3949 }
3950 }
3951 return {
3952 dispose: () => {
3953 if (method === null) {
3954 return;
3955 }
3956 if (method !== undefined) {
3957 delete requestHandlers[method];
3958 }
3959 else {
3960 starRequestHandler = undefined;
3961 }
3962 }
3963 };
3964 },
3965 trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
3966 let _sendNotification = false;
3967 let _traceFormat = TraceFormat.Text;
3968 if (sendNotificationOrTraceOptions !== undefined) {
3969 if (Is.boolean(sendNotificationOrTraceOptions)) {
3970 _sendNotification = sendNotificationOrTraceOptions;
3971 }
3972 else {
3973 _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
3974 _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
3975 }
3976 }
3977 trace = _value;
3978 traceFormat = _traceFormat;
3979 if (trace === Trace.Off) {
3980 tracer = undefined;
3981 }
3982 else {
3983 tracer = _tracer;
3984 }
3985 if (_sendNotification && !isClosed() && !isDisposed()) {
3986 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
3987 }
3988 },
3989 onError: errorEmitter.event,
3990 onClose: closeEmitter.event,
3991 onUnhandledNotification: unhandledNotificationEmitter.event,
3992 onDispose: disposeEmitter.event,
3993 end: () => {
3994 messageWriter.end();
3995 },
3996 dispose: () => {
3997 if (isDisposed()) {
3998 return;
3999 }
4000 state = ConnectionState.Disposed;
4001 disposeEmitter.fire(undefined);
4002 const error = new Error('Connection got disposed.');
4003 Object.keys(responsePromises).forEach((key) => {
4004 responsePromises[key].reject(error);
4005 });
4006 responsePromises = Object.create(null);
4007 requestTokens = Object.create(null);
4008 messageQueue = new linkedMap_1.LinkedMap();
4009 // Test for backwards compatibility
4010 if (Is.func(messageWriter.dispose)) {
4011 messageWriter.dispose();
4012 }
4013 if (Is.func(messageReader.dispose)) {
4014 messageReader.dispose();
4015 }
4016 },
4017 listen: () => {
4018 throwIfClosedOrDisposed();
4019 throwIfListening();
4020 state = ConnectionState.Listening;
4021 messageReader.listen(callback);
4022 },
4023 inspect: () => {
4024 // eslint-disable-next-line no-console
4025 ral_1.default().console.log('inspect');
4026 }
4027 };
4028 connection.onNotification(LogTraceNotification.type, (params) => {
4029 if (trace === Trace.Off || !tracer) {
4030 return;
4031 }
4032 tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
4033 });
4034 connection.onNotification(ProgressNotification.type, (params) => {
4035 const handler = progressHandlers.get(params.token);
4036 if (handler) {
4037 handler(params.value);
4038 }
4039 else {
4040 unhandledProgressEmitter.fire(params);
4041 }
4042 });
4043 return connection;
4044}
4045exports.createMessageConnection = createMessageConnection;
4046//# sourceMappingURL=connection.js.map
4047
4048/***/ }),
4049/* 22 */
4050/***/ ((__unused_webpack_module, exports) => {
4051
4052"use strict";
4053
4054/*---------------------------------------------------------------------------------------------
4055 * Copyright (c) Microsoft Corporation. All rights reserved.
4056 * Licensed under the MIT License. See License.txt in the project root for license information.
4057 *--------------------------------------------------------------------------------------------*/
4058Object.defineProperty(exports, "__esModule", ({ value: true }));
4059exports.LRUCache = exports.LinkedMap = exports.Touch = void 0;
4060var Touch;
4061(function (Touch) {
4062 Touch.None = 0;
4063 Touch.First = 1;
4064 Touch.AsOld = Touch.First;
4065 Touch.Last = 2;
4066 Touch.AsNew = Touch.Last;
4067})(Touch = exports.Touch || (exports.Touch = {}));
4068class LinkedMap {
4069 constructor() {
4070 this[Symbol.toStringTag] = 'LinkedMap';
4071 this._map = new Map();
4072 this._head = undefined;
4073 this._tail = undefined;
4074 this._size = 0;
4075 this._state = 0;
4076 }
4077 clear() {
4078 this._map.clear();
4079 this._head = undefined;
4080 this._tail = undefined;
4081 this._size = 0;
4082 this._state++;
4083 }
4084 isEmpty() {
4085 return !this._head && !this._tail;
4086 }
4087 get size() {
4088 return this._size;
4089 }
4090 get first() {
4091 var _a;
4092 return (_a = this._head) === null || _a === void 0 ? void 0 : _a.value;
4093 }
4094 get last() {
4095 var _a;
4096 return (_a = this._tail) === null || _a === void 0 ? void 0 : _a.value;
4097 }
4098 has(key) {
4099 return this._map.has(key);
4100 }
4101 get(key, touch = Touch.None) {
4102 const item = this._map.get(key);
4103 if (!item) {
4104 return undefined;
4105 }
4106 if (touch !== Touch.None) {
4107 this.touch(item, touch);
4108 }
4109 return item.value;
4110 }
4111 set(key, value, touch = Touch.None) {
4112 let item = this._map.get(key);
4113 if (item) {
4114 item.value = value;
4115 if (touch !== Touch.None) {
4116 this.touch(item, touch);
4117 }
4118 }
4119 else {
4120 item = { key, value, next: undefined, previous: undefined };
4121 switch (touch) {
4122 case Touch.None:
4123 this.addItemLast(item);
4124 break;
4125 case Touch.First:
4126 this.addItemFirst(item);
4127 break;
4128 case Touch.Last:
4129 this.addItemLast(item);
4130 break;
4131 default:
4132 this.addItemLast(item);
4133 break;
4134 }
4135 this._map.set(key, item);
4136 this._size++;
4137 }
4138 return this;
4139 }
4140 delete(key) {
4141 return !!this.remove(key);
4142 }
4143 remove(key) {
4144 const item = this._map.get(key);
4145 if (!item) {
4146 return undefined;
4147 }
4148 this._map.delete(key);
4149 this.removeItem(item);
4150 this._size--;
4151 return item.value;
4152 }
4153 shift() {
4154 if (!this._head && !this._tail) {
4155 return undefined;
4156 }
4157 if (!this._head || !this._tail) {
4158 throw new Error('Invalid list');
4159 }
4160 const item = this._head;
4161 this._map.delete(item.key);
4162 this.removeItem(item);
4163 this._size--;
4164 return item.value;
4165 }
4166 forEach(callbackfn, thisArg) {
4167 const state = this._state;
4168 let current = this._head;
4169 while (current) {
4170 if (thisArg) {
4171 callbackfn.bind(thisArg)(current.value, current.key, this);
4172 }
4173 else {
4174 callbackfn(current.value, current.key, this);
4175 }
4176 if (this._state !== state) {
4177 throw new Error(`LinkedMap got modified during iteration.`);
4178 }
4179 current = current.next;
4180 }
4181 }
4182 keys() {
4183 const map = this;
4184 const state = this._state;
4185 let current = this._head;
4186 const iterator = {
4187 [Symbol.iterator]() {
4188 return iterator;
4189 },
4190 next() {
4191 if (map._state !== state) {
4192 throw new Error(`LinkedMap got modified during iteration.`);
4193 }
4194 if (current) {
4195 const result = { value: current.key, done: false };
4196 current = current.next;
4197 return result;
4198 }
4199 else {
4200 return { value: undefined, done: true };
4201 }
4202 }
4203 };
4204 return iterator;
4205 }
4206 values() {
4207 const map = this;
4208 const state = this._state;
4209 let current = this._head;
4210 const iterator = {
4211 [Symbol.iterator]() {
4212 return iterator;
4213 },
4214 next() {
4215 if (map._state !== state) {
4216 throw new Error(`LinkedMap got modified during iteration.`);
4217 }
4218 if (current) {
4219 const result = { value: current.value, done: false };
4220 current = current.next;
4221 return result;
4222 }
4223 else {
4224 return { value: undefined, done: true };
4225 }
4226 }
4227 };
4228 return iterator;
4229 }
4230 entries() {
4231 const map = this;
4232 const state = this._state;
4233 let current = this._head;
4234 const iterator = {
4235 [Symbol.iterator]() {
4236 return iterator;
4237 },
4238 next() {
4239 if (map._state !== state) {
4240 throw new Error(`LinkedMap got modified during iteration.`);
4241 }
4242 if (current) {
4243 const result = { value: [current.key, current.value], done: false };
4244 current = current.next;
4245 return result;
4246 }
4247 else {
4248 return { value: undefined, done: true };
4249 }
4250 }
4251 };
4252 return iterator;
4253 }
4254 [Symbol.iterator]() {
4255 return this.entries();
4256 }
4257 trimOld(newSize) {
4258 if (newSize >= this.size) {
4259 return;
4260 }
4261 if (newSize === 0) {
4262 this.clear();
4263 return;
4264 }
4265 let current = this._head;
4266 let currentSize = this.size;
4267 while (current && currentSize > newSize) {
4268 this._map.delete(current.key);
4269 current = current.next;
4270 currentSize--;
4271 }
4272 this._head = current;
4273 this._size = currentSize;
4274 if (current) {
4275 current.previous = undefined;
4276 }
4277 this._state++;
4278 }
4279 addItemFirst(item) {
4280 // First time Insert
4281 if (!this._head && !this._tail) {
4282 this._tail = item;
4283 }
4284 else if (!this._head) {
4285 throw new Error('Invalid list');
4286 }
4287 else {
4288 item.next = this._head;
4289 this._head.previous = item;
4290 }
4291 this._head = item;
4292 this._state++;
4293 }
4294 addItemLast(item) {
4295 // First time Insert
4296 if (!this._head && !this._tail) {
4297 this._head = item;
4298 }
4299 else if (!this._tail) {
4300 throw new Error('Invalid list');
4301 }
4302 else {
4303 item.previous = this._tail;
4304 this._tail.next = item;
4305 }
4306 this._tail = item;
4307 this._state++;
4308 }
4309 removeItem(item) {
4310 if (item === this._head && item === this._tail) {
4311 this._head = undefined;
4312 this._tail = undefined;
4313 }
4314 else if (item === this._head) {
4315 // This can only happend if size === 1 which is handle
4316 // by the case above.
4317 if (!item.next) {
4318 throw new Error('Invalid list');
4319 }
4320 item.next.previous = undefined;
4321 this._head = item.next;
4322 }
4323 else if (item === this._tail) {
4324 // This can only happend if size === 1 which is handle
4325 // by the case above.
4326 if (!item.previous) {
4327 throw new Error('Invalid list');
4328 }
4329 item.previous.next = undefined;
4330 this._tail = item.previous;
4331 }
4332 else {
4333 const next = item.next;
4334 const previous = item.previous;
4335 if (!next || !previous) {
4336 throw new Error('Invalid list');
4337 }
4338 next.previous = previous;
4339 previous.next = next;
4340 }
4341 item.next = undefined;
4342 item.previous = undefined;
4343 this._state++;
4344 }
4345 touch(item, touch) {
4346 if (!this._head || !this._tail) {
4347 throw new Error('Invalid list');
4348 }
4349 if ((touch !== Touch.First && touch !== Touch.Last)) {
4350 return;
4351 }
4352 if (touch === Touch.First) {
4353 if (item === this._head) {
4354 return;
4355 }
4356 const next = item.next;
4357 const previous = item.previous;
4358 // Unlink the item
4359 if (item === this._tail) {
4360 // previous must be defined since item was not head but is tail
4361 // So there are more than on item in the map
4362 previous.next = undefined;
4363 this._tail = previous;
4364 }
4365 else {
4366 // Both next and previous are not undefined since item was neither head nor tail.
4367 next.previous = previous;
4368 previous.next = next;
4369 }
4370 // Insert the node at head
4371 item.previous = undefined;
4372 item.next = this._head;
4373 this._head.previous = item;
4374 this._head = item;
4375 this._state++;
4376 }
4377 else if (touch === Touch.Last) {
4378 if (item === this._tail) {
4379 return;
4380 }
4381 const next = item.next;
4382 const previous = item.previous;
4383 // Unlink the item.
4384 if (item === this._head) {
4385 // next must be defined since item was not tail but is head
4386 // So there are more than on item in the map
4387 next.previous = undefined;
4388 this._head = next;
4389 }
4390 else {
4391 // Both next and previous are not undefined since item was neither head nor tail.
4392 next.previous = previous;
4393 previous.next = next;
4394 }
4395 item.next = undefined;
4396 item.previous = this._tail;
4397 this._tail.next = item;
4398 this._tail = item;
4399 this._state++;
4400 }
4401 }
4402 toJSON() {
4403 const data = [];
4404 this.forEach((value, key) => {
4405 data.push([key, value]);
4406 });
4407 return data;
4408 }
4409 fromJSON(data) {
4410 this.clear();
4411 for (const [key, value] of data) {
4412 this.set(key, value);
4413 }
4414 }
4415}
4416exports.LinkedMap = LinkedMap;
4417class LRUCache extends LinkedMap {
4418 constructor(limit, ratio = 1) {
4419 super();
4420 this._limit = limit;
4421 this._ratio = Math.min(Math.max(0, ratio), 1);
4422 }
4423 get limit() {
4424 return this._limit;
4425 }
4426 set limit(limit) {
4427 this._limit = limit;
4428 this.checkTrim();
4429 }
4430 get ratio() {
4431 return this._ratio;
4432 }
4433 set ratio(ratio) {
4434 this._ratio = Math.min(Math.max(0, ratio), 1);
4435 this.checkTrim();
4436 }
4437 get(key, touch = Touch.AsNew) {
4438 return super.get(key, touch);
4439 }
4440 peek(key) {
4441 return super.get(key, Touch.None);
4442 }
4443 set(key, value) {
4444 super.set(key, value, Touch.Last);
4445 this.checkTrim();
4446 return this;
4447 }
4448 checkTrim() {
4449 if (this.size > this._limit) {
4450 this.trimOld(Math.round(this._limit * this._ratio));
4451 }
4452 }
4453}
4454exports.LRUCache = LRUCache;
4455//# sourceMappingURL=linkedMap.js.map
4456
4457/***/ }),
4458/* 23 */
4459/***/ ((module) => {
4460
4461"use strict";
4462module.exports = require("path");;
4463
4464/***/ }),
4465/* 24 */
4466/***/ ((module) => {
4467
4468"use strict";
4469module.exports = require("os");;
4470
4471/***/ }),
4472/* 25 */
4473/***/ ((module) => {
4474
4475"use strict";
4476module.exports = require("crypto");;
4477
4478/***/ }),
4479/* 26 */
4480/***/ ((module) => {
4481
4482"use strict";
4483module.exports = require("net");;
4484
4485/***/ }),
4486/* 27 */
4487/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
4488
4489"use strict";
4490
4491/* --------------------------------------------------------------------------------------------
4492 * Copyright (c) Microsoft Corporation. All rights reserved.
4493 * Licensed under the MIT License. See License.txt in the project root for license information.
4494 * ------------------------------------------------------------------------------------------ */
4495var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4496 if (k2 === undefined) k2 = k;
4497 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4498}) : (function(o, m, k, k2) {
4499 if (k2 === undefined) k2 = k;
4500 o[k2] = m[k];
4501}));
4502var __exportStar = (this && this.__exportStar) || function(m, exports) {
4503 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
4504};
4505Object.defineProperty(exports, "__esModule", ({ value: true }));
4506exports.LSPErrorCodes = exports.createProtocolConnection = void 0;
4507__exportStar(__webpack_require__(7), exports);
4508__exportStar(__webpack_require__(28), exports);
4509__exportStar(__webpack_require__(29), exports);
4510__exportStar(__webpack_require__(30), exports);
4511var connection_1 = __webpack_require__(47);
4512Object.defineProperty(exports, "createProtocolConnection", ({ enumerable: true, get: function () { return connection_1.createProtocolConnection; } }));
4513var LSPErrorCodes;
4514(function (LSPErrorCodes) {
4515 /**
4516 * This is the start range of LSP reserved error codes.
4517 * It doesn't denote a real error code.
4518 *
4519 * @since 3.16.0
4520 */
4521 LSPErrorCodes.lspReservedErrorRangeStart = -32899;
4522 LSPErrorCodes.ContentModified = -32801;
4523 LSPErrorCodes.RequestCancelled = -32800;
4524 /**
4525 * This is the end range of LSP reserved error codes.
4526 * It doesn't denote a real error code.
4527 *
4528 * @since 3.16.0
4529 */
4530 LSPErrorCodes.lspReservedErrorRangeEnd = -32800;
4531})(LSPErrorCodes = exports.LSPErrorCodes || (exports.LSPErrorCodes = {}));
4532//# sourceMappingURL=api.js.map
4533
4534/***/ }),
4535/* 28 */
4536/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
4537
4538"use strict";
4539__webpack_require__.r(__webpack_exports__);
4540/* harmony export */ __webpack_require__.d(__webpack_exports__, {
4541/* harmony export */ "integer": () => (/* binding */ integer),
4542/* harmony export */ "uinteger": () => (/* binding */ uinteger),
4543/* harmony export */ "Position": () => (/* binding */ Position),
4544/* harmony export */ "Range": () => (/* binding */ Range),
4545/* harmony export */ "Location": () => (/* binding */ Location),
4546/* harmony export */ "LocationLink": () => (/* binding */ LocationLink),
4547/* harmony export */ "Color": () => (/* binding */ Color),
4548/* harmony export */ "ColorInformation": () => (/* binding */ ColorInformation),
4549/* harmony export */ "ColorPresentation": () => (/* binding */ ColorPresentation),
4550/* harmony export */ "FoldingRangeKind": () => (/* binding */ FoldingRangeKind),
4551/* harmony export */ "FoldingRange": () => (/* binding */ FoldingRange),
4552/* harmony export */ "DiagnosticRelatedInformation": () => (/* binding */ DiagnosticRelatedInformation),
4553/* harmony export */ "DiagnosticSeverity": () => (/* binding */ DiagnosticSeverity),
4554/* harmony export */ "DiagnosticTag": () => (/* binding */ DiagnosticTag),
4555/* harmony export */ "CodeDescription": () => (/* binding */ CodeDescription),
4556/* harmony export */ "Diagnostic": () => (/* binding */ Diagnostic),
4557/* harmony export */ "Command": () => (/* binding */ Command),
4558/* harmony export */ "TextEdit": () => (/* binding */ TextEdit),
4559/* harmony export */ "ChangeAnnotation": () => (/* binding */ ChangeAnnotation),
4560/* harmony export */ "ChangeAnnotationIdentifier": () => (/* binding */ ChangeAnnotationIdentifier),
4561/* harmony export */ "AnnotatedTextEdit": () => (/* binding */ AnnotatedTextEdit),
4562/* harmony export */ "TextDocumentEdit": () => (/* binding */ TextDocumentEdit),
4563/* harmony export */ "CreateFile": () => (/* binding */ CreateFile),
4564/* harmony export */ "RenameFile": () => (/* binding */ RenameFile),
4565/* harmony export */ "DeleteFile": () => (/* binding */ DeleteFile),
4566/* harmony export */ "WorkspaceEdit": () => (/* binding */ WorkspaceEdit),
4567/* harmony export */ "WorkspaceChange": () => (/* binding */ WorkspaceChange),
4568/* harmony export */ "TextDocumentIdentifier": () => (/* binding */ TextDocumentIdentifier),
4569/* harmony export */ "VersionedTextDocumentIdentifier": () => (/* binding */ VersionedTextDocumentIdentifier),
4570/* harmony export */ "OptionalVersionedTextDocumentIdentifier": () => (/* binding */ OptionalVersionedTextDocumentIdentifier),
4571/* harmony export */ "TextDocumentItem": () => (/* binding */ TextDocumentItem),
4572/* harmony export */ "MarkupKind": () => (/* binding */ MarkupKind),
4573/* harmony export */ "MarkupContent": () => (/* binding */ MarkupContent),
4574/* harmony export */ "CompletionItemKind": () => (/* binding */ CompletionItemKind),
4575/* harmony export */ "InsertTextFormat": () => (/* binding */ InsertTextFormat),
4576/* harmony export */ "CompletionItemTag": () => (/* binding */ CompletionItemTag),
4577/* harmony export */ "InsertReplaceEdit": () => (/* binding */ InsertReplaceEdit),
4578/* harmony export */ "InsertTextMode": () => (/* binding */ InsertTextMode),
4579/* harmony export */ "CompletionItem": () => (/* binding */ CompletionItem),
4580/* harmony export */ "CompletionList": () => (/* binding */ CompletionList),
4581/* harmony export */ "MarkedString": () => (/* binding */ MarkedString),
4582/* harmony export */ "Hover": () => (/* binding */ Hover),
4583/* harmony export */ "ParameterInformation": () => (/* binding */ ParameterInformation),
4584/* harmony export */ "SignatureInformation": () => (/* binding */ SignatureInformation),
4585/* harmony export */ "DocumentHighlightKind": () => (/* binding */ DocumentHighlightKind),
4586/* harmony export */ "DocumentHighlight": () => (/* binding */ DocumentHighlight),
4587/* harmony export */ "SymbolKind": () => (/* binding */ SymbolKind),
4588/* harmony export */ "SymbolTag": () => (/* binding */ SymbolTag),
4589/* harmony export */ "SymbolInformation": () => (/* binding */ SymbolInformation),
4590/* harmony export */ "DocumentSymbol": () => (/* binding */ DocumentSymbol),
4591/* harmony export */ "CodeActionKind": () => (/* binding */ CodeActionKind),
4592/* harmony export */ "CodeActionContext": () => (/* binding */ CodeActionContext),
4593/* harmony export */ "CodeAction": () => (/* binding */ CodeAction),
4594/* harmony export */ "CodeLens": () => (/* binding */ CodeLens),
4595/* harmony export */ "FormattingOptions": () => (/* binding */ FormattingOptions),
4596/* harmony export */ "DocumentLink": () => (/* binding */ DocumentLink),
4597/* harmony export */ "SelectionRange": () => (/* binding */ SelectionRange),
4598/* harmony export */ "EOL": () => (/* binding */ EOL),
4599/* harmony export */ "TextDocument": () => (/* binding */ TextDocument)
4600/* harmony export */ });
4601/* --------------------------------------------------------------------------------------------
4602 * Copyright (c) Microsoft Corporation. All rights reserved.
4603 * Licensed under the MIT License. See License.txt in the project root for license information.
4604 * ------------------------------------------------------------------------------------------ */
4605
4606var integer;
4607(function (integer) {
4608 integer.MIN_VALUE = -2147483648;
4609 integer.MAX_VALUE = 2147483647;
4610})(integer || (integer = {}));
4611var uinteger;
4612(function (uinteger) {
4613 uinteger.MIN_VALUE = 0;
4614 uinteger.MAX_VALUE = 2147483647;
4615})(uinteger || (uinteger = {}));
4616/**
4617 * The Position namespace provides helper functions to work with
4618 * [Position](#Position) literals.
4619 */
4620var Position;
4621(function (Position) {
4622 /**
4623 * Creates a new Position literal from the given line and character.
4624 * @param line The position's line.
4625 * @param character The position's character.
4626 */
4627 function create(line, character) {
4628 if (line === Number.MAX_VALUE) {
4629 line = uinteger.MAX_VALUE;
4630 }
4631 if (character === Number.MAX_VALUE) {
4632 character = uinteger.MAX_VALUE;
4633 }
4634 return { line: line, character: character };
4635 }
4636 Position.create = create;
4637 /**
4638 * Checks whether the given literal conforms to the [Position](#Position) interface.
4639 */
4640 function is(value) {
4641 var candidate = value;
4642 return Is.objectLiteral(candidate) && Is.uinteger(candidate.line) && Is.uinteger(candidate.character);
4643 }
4644 Position.is = is;
4645})(Position || (Position = {}));
4646/**
4647 * The Range namespace provides helper functions to work with
4648 * [Range](#Range) literals.
4649 */
4650var Range;
4651(function (Range) {
4652 function create(one, two, three, four) {
4653 if (Is.uinteger(one) && Is.uinteger(two) && Is.uinteger(three) && Is.uinteger(four)) {
4654 return { start: Position.create(one, two), end: Position.create(three, four) };
4655 }
4656 else if (Position.is(one) && Position.is(two)) {
4657 return { start: one, end: two };
4658 }
4659 else {
4660 throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
4661 }
4662 }
4663 Range.create = create;
4664 /**
4665 * Checks whether the given literal conforms to the [Range](#Range) interface.
4666 */
4667 function is(value) {
4668 var candidate = value;
4669 return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
4670 }
4671 Range.is = is;
4672})(Range || (Range = {}));
4673/**
4674 * The Location namespace provides helper functions to work with
4675 * [Location](#Location) literals.
4676 */
4677var Location;
4678(function (Location) {
4679 /**
4680 * Creates a Location literal.
4681 * @param uri The location's uri.
4682 * @param range The location's range.
4683 */
4684 function create(uri, range) {
4685 return { uri: uri, range: range };
4686 }
4687 Location.create = create;
4688 /**
4689 * Checks whether the given literal conforms to the [Location](#Location) interface.
4690 */
4691 function is(value) {
4692 var candidate = value;
4693 return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
4694 }
4695 Location.is = is;
4696})(Location || (Location = {}));
4697/**
4698 * The LocationLink namespace provides helper functions to work with
4699 * [LocationLink](#LocationLink) literals.
4700 */
4701var LocationLink;
4702(function (LocationLink) {
4703 /**
4704 * Creates a LocationLink literal.
4705 * @param targetUri The definition's uri.
4706 * @param targetRange The full range of the definition.
4707 * @param targetSelectionRange The span of the symbol definition at the target.
4708 * @param originSelectionRange The span of the symbol being defined in the originating source file.
4709 */
4710 function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
4711 return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
4712 }
4713 LocationLink.create = create;
4714 /**
4715 * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
4716 */
4717 function is(value) {
4718 var candidate = value;
4719 return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
4720 && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
4721 && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
4722 }
4723 LocationLink.is = is;
4724})(LocationLink || (LocationLink = {}));
4725/**
4726 * The Color namespace provides helper functions to work with
4727 * [Color](#Color) literals.
4728 */
4729var Color;
4730(function (Color) {
4731 /**
4732 * Creates a new Color literal.
4733 */
4734 function create(red, green, blue, alpha) {
4735 return {
4736 red: red,
4737 green: green,
4738 blue: blue,
4739 alpha: alpha,
4740 };
4741 }
4742 Color.create = create;
4743 /**
4744 * Checks whether the given literal conforms to the [Color](#Color) interface.
4745 */
4746 function is(value) {
4747 var candidate = value;
4748 return Is.numberRange(candidate.red, 0, 1)
4749 && Is.numberRange(candidate.green, 0, 1)
4750 && Is.numberRange(candidate.blue, 0, 1)
4751 && Is.numberRange(candidate.alpha, 0, 1);
4752 }
4753 Color.is = is;
4754})(Color || (Color = {}));
4755/**
4756 * The ColorInformation namespace provides helper functions to work with
4757 * [ColorInformation](#ColorInformation) literals.
4758 */
4759var ColorInformation;
4760(function (ColorInformation) {
4761 /**
4762 * Creates a new ColorInformation literal.
4763 */
4764 function create(range, color) {
4765 return {
4766 range: range,
4767 color: color,
4768 };
4769 }
4770 ColorInformation.create = create;
4771 /**
4772 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
4773 */
4774 function is(value) {
4775 var candidate = value;
4776 return Range.is(candidate.range) && Color.is(candidate.color);
4777 }
4778 ColorInformation.is = is;
4779})(ColorInformation || (ColorInformation = {}));
4780/**
4781 * The Color namespace provides helper functions to work with
4782 * [ColorPresentation](#ColorPresentation) literals.
4783 */
4784var ColorPresentation;
4785(function (ColorPresentation) {
4786 /**
4787 * Creates a new ColorInformation literal.
4788 */
4789 function create(label, textEdit, additionalTextEdits) {
4790 return {
4791 label: label,
4792 textEdit: textEdit,
4793 additionalTextEdits: additionalTextEdits,
4794 };
4795 }
4796 ColorPresentation.create = create;
4797 /**
4798 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
4799 */
4800 function is(value) {
4801 var candidate = value;
4802 return Is.string(candidate.label)
4803 && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
4804 && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
4805 }
4806 ColorPresentation.is = is;
4807})(ColorPresentation || (ColorPresentation = {}));
4808/**
4809 * Enum of known range kinds
4810 */
4811var FoldingRangeKind;
4812(function (FoldingRangeKind) {
4813 /**
4814 * Folding range for a comment
4815 */
4816 FoldingRangeKind["Comment"] = "comment";
4817 /**
4818 * Folding range for a imports or includes
4819 */
4820 FoldingRangeKind["Imports"] = "imports";
4821 /**
4822 * Folding range for a region (e.g. `#region`)
4823 */
4824 FoldingRangeKind["Region"] = "region";
4825})(FoldingRangeKind || (FoldingRangeKind = {}));
4826/**
4827 * The folding range namespace provides helper functions to work with
4828 * [FoldingRange](#FoldingRange) literals.
4829 */
4830var FoldingRange;
4831(function (FoldingRange) {
4832 /**
4833 * Creates a new FoldingRange literal.
4834 */
4835 function create(startLine, endLine, startCharacter, endCharacter, kind) {
4836 var result = {
4837 startLine: startLine,
4838 endLine: endLine
4839 };
4840 if (Is.defined(startCharacter)) {
4841 result.startCharacter = startCharacter;
4842 }
4843 if (Is.defined(endCharacter)) {
4844 result.endCharacter = endCharacter;
4845 }
4846 if (Is.defined(kind)) {
4847 result.kind = kind;
4848 }
4849 return result;
4850 }
4851 FoldingRange.create = create;
4852 /**
4853 * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
4854 */
4855 function is(value) {
4856 var candidate = value;
4857 return Is.uinteger(candidate.startLine) && Is.uinteger(candidate.startLine)
4858 && (Is.undefined(candidate.startCharacter) || Is.uinteger(candidate.startCharacter))
4859 && (Is.undefined(candidate.endCharacter) || Is.uinteger(candidate.endCharacter))
4860 && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
4861 }
4862 FoldingRange.is = is;
4863})(FoldingRange || (FoldingRange = {}));
4864/**
4865 * The DiagnosticRelatedInformation namespace provides helper functions to work with
4866 * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
4867 */
4868var DiagnosticRelatedInformation;
4869(function (DiagnosticRelatedInformation) {
4870 /**
4871 * Creates a new DiagnosticRelatedInformation literal.
4872 */
4873 function create(location, message) {
4874 return {
4875 location: location,
4876 message: message
4877 };
4878 }
4879 DiagnosticRelatedInformation.create = create;
4880 /**
4881 * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
4882 */
4883 function is(value) {
4884 var candidate = value;
4885 return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
4886 }
4887 DiagnosticRelatedInformation.is = is;
4888})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
4889/**
4890 * The diagnostic's severity.
4891 */
4892var DiagnosticSeverity;
4893(function (DiagnosticSeverity) {
4894 /**
4895 * Reports an error.
4896 */
4897 DiagnosticSeverity.Error = 1;
4898 /**
4899 * Reports a warning.
4900 */
4901 DiagnosticSeverity.Warning = 2;
4902 /**
4903 * Reports an information.
4904 */
4905 DiagnosticSeverity.Information = 3;
4906 /**
4907 * Reports a hint.
4908 */
4909 DiagnosticSeverity.Hint = 4;
4910})(DiagnosticSeverity || (DiagnosticSeverity = {}));
4911/**
4912 * The diagnostic tags.
4913 *
4914 * @since 3.15.0
4915 */
4916var DiagnosticTag;
4917(function (DiagnosticTag) {
4918 /**
4919 * Unused or unnecessary code.
4920 *
4921 * Clients are allowed to render diagnostics with this tag faded out instead of having
4922 * an error squiggle.
4923 */
4924 DiagnosticTag.Unnecessary = 1;
4925 /**
4926 * Deprecated or obsolete code.
4927 *
4928 * Clients are allowed to rendered diagnostics with this tag strike through.
4929 */
4930 DiagnosticTag.Deprecated = 2;
4931})(DiagnosticTag || (DiagnosticTag = {}));
4932/**
4933 * The CodeDescription namespace provides functions to deal with descriptions for diagnostic codes.
4934 *
4935 * @since 3.16.0
4936 */
4937var CodeDescription;
4938(function (CodeDescription) {
4939 function is(value) {
4940 var candidate = value;
4941 return candidate !== undefined && candidate !== null && Is.string(candidate.href);
4942 }
4943 CodeDescription.is = is;
4944})(CodeDescription || (CodeDescription = {}));
4945/**
4946 * The Diagnostic namespace provides helper functions to work with
4947 * [Diagnostic](#Diagnostic) literals.
4948 */
4949var Diagnostic;
4950(function (Diagnostic) {
4951 /**
4952 * Creates a new Diagnostic literal.
4953 */
4954 function create(range, message, severity, code, source, relatedInformation) {
4955 var result = { range: range, message: message };
4956 if (Is.defined(severity)) {
4957 result.severity = severity;
4958 }
4959 if (Is.defined(code)) {
4960 result.code = code;
4961 }
4962 if (Is.defined(source)) {
4963 result.source = source;
4964 }
4965 if (Is.defined(relatedInformation)) {
4966 result.relatedInformation = relatedInformation;
4967 }
4968 return result;
4969 }
4970 Diagnostic.create = create;
4971 /**
4972 * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
4973 */
4974 function is(value) {
4975 var _a;
4976 var candidate = value;
4977 return Is.defined(candidate)
4978 && Range.is(candidate.range)
4979 && Is.string(candidate.message)
4980 && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
4981 && (Is.integer(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
4982 && (Is.undefined(candidate.codeDescription) || (Is.string((_a = candidate.codeDescription) === null || _a === void 0 ? void 0 : _a.href)))
4983 && (Is.string(candidate.source) || Is.undefined(candidate.source))
4984 && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
4985 }
4986 Diagnostic.is = is;
4987})(Diagnostic || (Diagnostic = {}));
4988/**
4989 * The Command namespace provides helper functions to work with
4990 * [Command](#Command) literals.
4991 */
4992var Command;
4993(function (Command) {
4994 /**
4995 * Creates a new Command literal.
4996 */
4997 function create(title, command) {
4998 var args = [];
4999 for (var _i = 2; _i < arguments.length; _i++) {
5000 args[_i - 2] = arguments[_i];
5001 }
5002 var result = { title: title, command: command };
5003 if (Is.defined(args) && args.length > 0) {
5004 result.arguments = args;
5005 }
5006 return result;
5007 }
5008 Command.create = create;
5009 /**
5010 * Checks whether the given literal conforms to the [Command](#Command) interface.
5011 */
5012 function is(value) {
5013 var candidate = value;
5014 return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
5015 }
5016 Command.is = is;
5017})(Command || (Command = {}));
5018/**
5019 * The TextEdit namespace provides helper function to create replace,
5020 * insert and delete edits more easily.
5021 */
5022var TextEdit;
5023(function (TextEdit) {
5024 /**
5025 * Creates a replace text edit.
5026 * @param range The range of text to be replaced.
5027 * @param newText The new text.
5028 */
5029 function replace(range, newText) {
5030 return { range: range, newText: newText };
5031 }
5032 TextEdit.replace = replace;
5033 /**
5034 * Creates a insert text edit.
5035 * @param position The position to insert the text at.
5036 * @param newText The text to be inserted.
5037 */
5038 function insert(position, newText) {
5039 return { range: { start: position, end: position }, newText: newText };
5040 }
5041 TextEdit.insert = insert;
5042 /**
5043 * Creates a delete text edit.
5044 * @param range The range of text to be deleted.
5045 */
5046 function del(range) {
5047 return { range: range, newText: '' };
5048 }
5049 TextEdit.del = del;
5050 function is(value) {
5051 var candidate = value;
5052 return Is.objectLiteral(candidate)
5053 && Is.string(candidate.newText)
5054 && Range.is(candidate.range);
5055 }
5056 TextEdit.is = is;
5057})(TextEdit || (TextEdit = {}));
5058var ChangeAnnotation;
5059(function (ChangeAnnotation) {
5060 function create(label, needsConfirmation, description) {
5061 var result = { label: label };
5062 if (needsConfirmation !== undefined) {
5063 result.needsConfirmation = needsConfirmation;
5064 }
5065 if (description !== undefined) {
5066 result.description = description;
5067 }
5068 return result;
5069 }
5070 ChangeAnnotation.create = create;
5071 function is(value) {
5072 var candidate = value;
5073 return candidate !== undefined && Is.objectLiteral(candidate) && Is.string(candidate.label) &&
5074 (Is.boolean(candidate.needsConfirmation) || candidate.needsConfirmation === undefined) &&
5075 (Is.string(candidate.description) || candidate.description === undefined);
5076 }
5077 ChangeAnnotation.is = is;
5078})(ChangeAnnotation || (ChangeAnnotation = {}));
5079var ChangeAnnotationIdentifier;
5080(function (ChangeAnnotationIdentifier) {
5081 function is(value) {
5082 var candidate = value;
5083 return typeof candidate === 'string';
5084 }
5085 ChangeAnnotationIdentifier.is = is;
5086})(ChangeAnnotationIdentifier || (ChangeAnnotationIdentifier = {}));
5087var AnnotatedTextEdit;
5088(function (AnnotatedTextEdit) {
5089 /**
5090 * Creates an annotated replace text edit.
5091 *
5092 * @param range The range of text to be replaced.
5093 * @param newText The new text.
5094 * @param annotation The annotation.
5095 */
5096 function replace(range, newText, annotation) {
5097 return { range: range, newText: newText, annotationId: annotation };
5098 }
5099 AnnotatedTextEdit.replace = replace;
5100 /**
5101 * Creates an annotated insert text edit.
5102 *
5103 * @param position The position to insert the text at.
5104 * @param newText The text to be inserted.
5105 * @param annotation The annotation.
5106 */
5107 function insert(position, newText, annotation) {
5108 return { range: { start: position, end: position }, newText: newText, annotationId: annotation };
5109 }
5110 AnnotatedTextEdit.insert = insert;
5111 /**
5112 * Creates an annotated delete text edit.
5113 *
5114 * @param range The range of text to be deleted.
5115 * @param annotation The annotation.
5116 */
5117 function del(range, annotation) {
5118 return { range: range, newText: '', annotationId: annotation };
5119 }
5120 AnnotatedTextEdit.del = del;
5121 function is(value) {
5122 var candidate = value;
5123 return TextEdit.is(candidate) && (ChangeAnnotation.is(candidate.annotationId) || ChangeAnnotationIdentifier.is(candidate.annotationId));
5124 }
5125 AnnotatedTextEdit.is = is;
5126})(AnnotatedTextEdit || (AnnotatedTextEdit = {}));
5127/**
5128 * The TextDocumentEdit namespace provides helper function to create
5129 * an edit that manipulates a text document.
5130 */
5131var TextDocumentEdit;
5132(function (TextDocumentEdit) {
5133 /**
5134 * Creates a new `TextDocumentEdit`
5135 */
5136 function create(textDocument, edits) {
5137 return { textDocument: textDocument, edits: edits };
5138 }
5139 TextDocumentEdit.create = create;
5140 function is(value) {
5141 var candidate = value;
5142 return Is.defined(candidate)
5143 && OptionalVersionedTextDocumentIdentifier.is(candidate.textDocument)
5144 && Array.isArray(candidate.edits);
5145 }
5146 TextDocumentEdit.is = is;
5147})(TextDocumentEdit || (TextDocumentEdit = {}));
5148var CreateFile;
5149(function (CreateFile) {
5150 function create(uri, options, annotation) {
5151 var result = {
5152 kind: 'create',
5153 uri: uri
5154 };
5155 if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
5156 result.options = options;
5157 }
5158 if (annotation !== undefined) {
5159 result.annotationId = annotation;
5160 }
5161 return result;
5162 }
5163 CreateFile.create = create;
5164 function is(value) {
5165 var candidate = value;
5166 return candidate && candidate.kind === 'create' && Is.string(candidate.uri) && (candidate.options === undefined ||
5167 ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
5168 }
5169 CreateFile.is = is;
5170})(CreateFile || (CreateFile = {}));
5171var RenameFile;
5172(function (RenameFile) {
5173 function create(oldUri, newUri, options, annotation) {
5174 var result = {
5175 kind: 'rename',
5176 oldUri: oldUri,
5177 newUri: newUri
5178 };
5179 if (options !== undefined && (options.overwrite !== undefined || options.ignoreIfExists !== undefined)) {
5180 result.options = options;
5181 }
5182 if (annotation !== undefined) {
5183 result.annotationId = annotation;
5184 }
5185 return result;
5186 }
5187 RenameFile.create = create;
5188 function is(value) {
5189 var candidate = value;
5190 return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) && (candidate.options === undefined ||
5191 ((candidate.options.overwrite === undefined || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === undefined || Is.boolean(candidate.options.ignoreIfExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
5192 }
5193 RenameFile.is = is;
5194})(RenameFile || (RenameFile = {}));
5195var DeleteFile;
5196(function (DeleteFile) {
5197 function create(uri, options, annotation) {
5198 var result = {
5199 kind: 'delete',
5200 uri: uri
5201 };
5202 if (options !== undefined && (options.recursive !== undefined || options.ignoreIfNotExists !== undefined)) {
5203 result.options = options;
5204 }
5205 if (annotation !== undefined) {
5206 result.annotationId = annotation;
5207 }
5208 return result;
5209 }
5210 DeleteFile.create = create;
5211 function is(value) {
5212 var candidate = value;
5213 return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) && (candidate.options === undefined ||
5214 ((candidate.options.recursive === undefined || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === undefined || Is.boolean(candidate.options.ignoreIfNotExists)))) && (candidate.annotationId === undefined || ChangeAnnotationIdentifier.is(candidate.annotationId));
5215 }
5216 DeleteFile.is = is;
5217})(DeleteFile || (DeleteFile = {}));
5218var WorkspaceEdit;
5219(function (WorkspaceEdit) {
5220 function is(value) {
5221 var candidate = value;
5222 return candidate &&
5223 (candidate.changes !== undefined || candidate.documentChanges !== undefined) &&
5224 (candidate.documentChanges === undefined || candidate.documentChanges.every(function (change) {
5225 if (Is.string(change.kind)) {
5226 return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
5227 }
5228 else {
5229 return TextDocumentEdit.is(change);
5230 }
5231 }));
5232 }
5233 WorkspaceEdit.is = is;
5234})(WorkspaceEdit || (WorkspaceEdit = {}));
5235var TextEditChangeImpl = /** @class */ (function () {
5236 function TextEditChangeImpl(edits, changeAnnotations) {
5237 this.edits = edits;
5238 this.changeAnnotations = changeAnnotations;
5239 }
5240 TextEditChangeImpl.prototype.insert = function (position, newText, annotation) {
5241 var edit;
5242 var id;
5243 if (annotation === undefined) {
5244 edit = TextEdit.insert(position, newText);
5245 }
5246 else if (ChangeAnnotationIdentifier.is(annotation)) {
5247 id = annotation;
5248 edit = AnnotatedTextEdit.insert(position, newText, annotation);
5249 }
5250 else {
5251 this.assertChangeAnnotations(this.changeAnnotations);
5252 id = this.changeAnnotations.manage(annotation);
5253 edit = AnnotatedTextEdit.insert(position, newText, id);
5254 }
5255 this.edits.push(edit);
5256 if (id !== undefined) {
5257 return id;
5258 }
5259 };
5260 TextEditChangeImpl.prototype.replace = function (range, newText, annotation) {
5261 var edit;
5262 var id;
5263 if (annotation === undefined) {
5264 edit = TextEdit.replace(range, newText);
5265 }
5266 else if (ChangeAnnotationIdentifier.is(annotation)) {
5267 id = annotation;
5268 edit = AnnotatedTextEdit.replace(range, newText, annotation);
5269 }
5270 else {
5271 this.assertChangeAnnotations(this.changeAnnotations);
5272 id = this.changeAnnotations.manage(annotation);
5273 edit = AnnotatedTextEdit.replace(range, newText, id);
5274 }
5275 this.edits.push(edit);
5276 if (id !== undefined) {
5277 return id;
5278 }
5279 };
5280 TextEditChangeImpl.prototype.delete = function (range, annotation) {
5281 var edit;
5282 var id;
5283 if (annotation === undefined) {
5284 edit = TextEdit.del(range);
5285 }
5286 else if (ChangeAnnotationIdentifier.is(annotation)) {
5287 id = annotation;
5288 edit = AnnotatedTextEdit.del(range, annotation);
5289 }
5290 else {
5291 this.assertChangeAnnotations(this.changeAnnotations);
5292 id = this.changeAnnotations.manage(annotation);
5293 edit = AnnotatedTextEdit.del(range, id);
5294 }
5295 this.edits.push(edit);
5296 if (id !== undefined) {
5297 return id;
5298 }
5299 };
5300 TextEditChangeImpl.prototype.add = function (edit) {
5301 this.edits.push(edit);
5302 };
5303 TextEditChangeImpl.prototype.all = function () {
5304 return this.edits;
5305 };
5306 TextEditChangeImpl.prototype.clear = function () {
5307 this.edits.splice(0, this.edits.length);
5308 };
5309 TextEditChangeImpl.prototype.assertChangeAnnotations = function (value) {
5310 if (value === undefined) {
5311 throw new Error("Text edit change is not configured to manage change annotations.");
5312 }
5313 };
5314 return TextEditChangeImpl;
5315}());
5316/**
5317 * A helper class
5318 */
5319var ChangeAnnotations = /** @class */ (function () {
5320 function ChangeAnnotations(annotations) {
5321 this._annotations = annotations === undefined ? Object.create(null) : annotations;
5322 this._counter = 0;
5323 this._size = 0;
5324 }
5325 ChangeAnnotations.prototype.all = function () {
5326 return this._annotations;
5327 };
5328 Object.defineProperty(ChangeAnnotations.prototype, "size", {
5329 get: function () {
5330 return this._size;
5331 },
5332 enumerable: false,
5333 configurable: true
5334 });
5335 ChangeAnnotations.prototype.manage = function (idOrAnnotation, annotation) {
5336 var id;
5337 if (ChangeAnnotationIdentifier.is(idOrAnnotation)) {
5338 id = idOrAnnotation;
5339 }
5340 else {
5341 id = this.nextId();
5342 annotation = idOrAnnotation;
5343 }
5344 if (this._annotations[id] !== undefined) {
5345 throw new Error("Id " + id + " is already in use.");
5346 }
5347 if (annotation === undefined) {
5348 throw new Error("No annotation provided for id " + id);
5349 }
5350 this._annotations[id] = annotation;
5351 this._size++;
5352 return id;
5353 };
5354 ChangeAnnotations.prototype.nextId = function () {
5355 this._counter++;
5356 return this._counter.toString();
5357 };
5358 return ChangeAnnotations;
5359}());
5360/**
5361 * A workspace change helps constructing changes to a workspace.
5362 */
5363var WorkspaceChange = /** @class */ (function () {
5364 function WorkspaceChange(workspaceEdit) {
5365 var _this = this;
5366 this._textEditChanges = Object.create(null);
5367 if (workspaceEdit !== undefined) {
5368 this._workspaceEdit = workspaceEdit;
5369 if (workspaceEdit.documentChanges) {
5370 this._changeAnnotations = new ChangeAnnotations(workspaceEdit.changeAnnotations);
5371 workspaceEdit.changeAnnotations = this._changeAnnotations.all();
5372 workspaceEdit.documentChanges.forEach(function (change) {
5373 if (TextDocumentEdit.is(change)) {
5374 var textEditChange = new TextEditChangeImpl(change.edits, _this._changeAnnotations);
5375 _this._textEditChanges[change.textDocument.uri] = textEditChange;
5376 }
5377 });
5378 }
5379 else if (workspaceEdit.changes) {
5380 Object.keys(workspaceEdit.changes).forEach(function (key) {
5381 var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
5382 _this._textEditChanges[key] = textEditChange;
5383 });
5384 }
5385 }
5386 else {
5387 this._workspaceEdit = {};
5388 }
5389 }
5390 Object.defineProperty(WorkspaceChange.prototype, "edit", {
5391 /**
5392 * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
5393 * use to be returned from a workspace edit operation like rename.
5394 */
5395 get: function () {
5396 this.initDocumentChanges();
5397 if (this._changeAnnotations !== undefined) {
5398 if (this._changeAnnotations.size === 0) {
5399 this._workspaceEdit.changeAnnotations = undefined;
5400 }
5401 else {
5402 this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
5403 }
5404 }
5405 return this._workspaceEdit;
5406 },
5407 enumerable: false,
5408 configurable: true
5409 });
5410 WorkspaceChange.prototype.getTextEditChange = function (key) {
5411 if (OptionalVersionedTextDocumentIdentifier.is(key)) {
5412 this.initDocumentChanges();
5413 if (this._workspaceEdit.documentChanges === undefined) {
5414 throw new Error('Workspace edit is not configured for document changes.');
5415 }
5416 var textDocument = { uri: key.uri, version: key.version };
5417 var result = this._textEditChanges[textDocument.uri];
5418 if (!result) {
5419 var edits = [];
5420 var textDocumentEdit = {
5421 textDocument: textDocument,
5422 edits: edits
5423 };
5424 this._workspaceEdit.documentChanges.push(textDocumentEdit);
5425 result = new TextEditChangeImpl(edits, this._changeAnnotations);
5426 this._textEditChanges[textDocument.uri] = result;
5427 }
5428 return result;
5429 }
5430 else {
5431 this.initChanges();
5432 if (this._workspaceEdit.changes === undefined) {
5433 throw new Error('Workspace edit is not configured for normal text edit changes.');
5434 }
5435 var result = this._textEditChanges[key];
5436 if (!result) {
5437 var edits = [];
5438 this._workspaceEdit.changes[key] = edits;
5439 result = new TextEditChangeImpl(edits);
5440 this._textEditChanges[key] = result;
5441 }
5442 return result;
5443 }
5444 };
5445 WorkspaceChange.prototype.initDocumentChanges = function () {
5446 if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
5447 this._changeAnnotations = new ChangeAnnotations();
5448 this._workspaceEdit.documentChanges = [];
5449 this._workspaceEdit.changeAnnotations = this._changeAnnotations.all();
5450 }
5451 };
5452 WorkspaceChange.prototype.initChanges = function () {
5453 if (this._workspaceEdit.documentChanges === undefined && this._workspaceEdit.changes === undefined) {
5454 this._workspaceEdit.changes = Object.create(null);
5455 }
5456 };
5457 WorkspaceChange.prototype.createFile = function (uri, optionsOrAnnotation, options) {
5458 this.initDocumentChanges();
5459 if (this._workspaceEdit.documentChanges === undefined) {
5460 throw new Error('Workspace edit is not configured for document changes.');
5461 }
5462 var annotation;
5463 if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
5464 annotation = optionsOrAnnotation;
5465 }
5466 else {
5467 options = optionsOrAnnotation;
5468 }
5469 var operation;
5470 var id;
5471 if (annotation === undefined) {
5472 operation = CreateFile.create(uri, options);
5473 }
5474 else {
5475 id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
5476 operation = CreateFile.create(uri, options, id);
5477 }
5478 this._workspaceEdit.documentChanges.push(operation);
5479 if (id !== undefined) {
5480 return id;
5481 }
5482 };
5483 WorkspaceChange.prototype.renameFile = function (oldUri, newUri, optionsOrAnnotation, options) {
5484 this.initDocumentChanges();
5485 if (this._workspaceEdit.documentChanges === undefined) {
5486 throw new Error('Workspace edit is not configured for document changes.');
5487 }
5488 var annotation;
5489 if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
5490 annotation = optionsOrAnnotation;
5491 }
5492 else {
5493 options = optionsOrAnnotation;
5494 }
5495 var operation;
5496 var id;
5497 if (annotation === undefined) {
5498 operation = RenameFile.create(oldUri, newUri, options);
5499 }
5500 else {
5501 id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
5502 operation = RenameFile.create(oldUri, newUri, options, id);
5503 }
5504 this._workspaceEdit.documentChanges.push(operation);
5505 if (id !== undefined) {
5506 return id;
5507 }
5508 };
5509 WorkspaceChange.prototype.deleteFile = function (uri, optionsOrAnnotation, options) {
5510 this.initDocumentChanges();
5511 if (this._workspaceEdit.documentChanges === undefined) {
5512 throw new Error('Workspace edit is not configured for document changes.');
5513 }
5514 var annotation;
5515 if (ChangeAnnotation.is(optionsOrAnnotation) || ChangeAnnotationIdentifier.is(optionsOrAnnotation)) {
5516 annotation = optionsOrAnnotation;
5517 }
5518 else {
5519 options = optionsOrAnnotation;
5520 }
5521 var operation;
5522 var id;
5523 if (annotation === undefined) {
5524 operation = DeleteFile.create(uri, options);
5525 }
5526 else {
5527 id = ChangeAnnotationIdentifier.is(annotation) ? annotation : this._changeAnnotations.manage(annotation);
5528 operation = DeleteFile.create(uri, options, id);
5529 }
5530 this._workspaceEdit.documentChanges.push(operation);
5531 if (id !== undefined) {
5532 return id;
5533 }
5534 };
5535 return WorkspaceChange;
5536}());
5537
5538/**
5539 * The TextDocumentIdentifier namespace provides helper functions to work with
5540 * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
5541 */
5542var TextDocumentIdentifier;
5543(function (TextDocumentIdentifier) {
5544 /**
5545 * Creates a new TextDocumentIdentifier literal.
5546 * @param uri The document's uri.
5547 */
5548 function create(uri) {
5549 return { uri: uri };
5550 }
5551 TextDocumentIdentifier.create = create;
5552 /**
5553 * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
5554 */
5555 function is(value) {
5556 var candidate = value;
5557 return Is.defined(candidate) && Is.string(candidate.uri);
5558 }
5559 TextDocumentIdentifier.is = is;
5560})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
5561/**
5562 * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
5563 * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
5564 */
5565var VersionedTextDocumentIdentifier;
5566(function (VersionedTextDocumentIdentifier) {
5567 /**
5568 * Creates a new VersionedTextDocumentIdentifier literal.
5569 * @param uri The document's uri.
5570 * @param uri The document's text.
5571 */
5572 function create(uri, version) {
5573 return { uri: uri, version: version };
5574 }
5575 VersionedTextDocumentIdentifier.create = create;
5576 /**
5577 * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
5578 */
5579 function is(value) {
5580 var candidate = value;
5581 return Is.defined(candidate) && Is.string(candidate.uri) && Is.integer(candidate.version);
5582 }
5583 VersionedTextDocumentIdentifier.is = is;
5584})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
5585/**
5586 * The OptionalVersionedTextDocumentIdentifier namespace provides helper functions to work with
5587 * [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) literals.
5588 */
5589var OptionalVersionedTextDocumentIdentifier;
5590(function (OptionalVersionedTextDocumentIdentifier) {
5591 /**
5592 * Creates a new OptionalVersionedTextDocumentIdentifier literal.
5593 * @param uri The document's uri.
5594 * @param uri The document's text.
5595 */
5596 function create(uri, version) {
5597 return { uri: uri, version: version };
5598 }
5599 OptionalVersionedTextDocumentIdentifier.create = create;
5600 /**
5601 * Checks whether the given literal conforms to the [OptionalVersionedTextDocumentIdentifier](#OptionalVersionedTextDocumentIdentifier) interface.
5602 */
5603 function is(value) {
5604 var candidate = value;
5605 return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.integer(candidate.version));
5606 }
5607 OptionalVersionedTextDocumentIdentifier.is = is;
5608})(OptionalVersionedTextDocumentIdentifier || (OptionalVersionedTextDocumentIdentifier = {}));
5609/**
5610 * The TextDocumentItem namespace provides helper functions to work with
5611 * [TextDocumentItem](#TextDocumentItem) literals.
5612 */
5613var TextDocumentItem;
5614(function (TextDocumentItem) {
5615 /**
5616 * Creates a new TextDocumentItem literal.
5617 * @param uri The document's uri.
5618 * @param languageId The document's language identifier.
5619 * @param version The document's version number.
5620 * @param text The document's text.
5621 */
5622 function create(uri, languageId, version, text) {
5623 return { uri: uri, languageId: languageId, version: version, text: text };
5624 }
5625 TextDocumentItem.create = create;
5626 /**
5627 * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
5628 */
5629 function is(value) {
5630 var candidate = value;
5631 return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.integer(candidate.version) && Is.string(candidate.text);
5632 }
5633 TextDocumentItem.is = is;
5634})(TextDocumentItem || (TextDocumentItem = {}));
5635/**
5636 * Describes the content type that a client supports in various
5637 * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
5638 *
5639 * Please note that `MarkupKinds` must not start with a `$`. This kinds
5640 * are reserved for internal usage.
5641 */
5642var MarkupKind;
5643(function (MarkupKind) {
5644 /**
5645 * Plain text is supported as a content format
5646 */
5647 MarkupKind.PlainText = 'plaintext';
5648 /**
5649 * Markdown is supported as a content format
5650 */
5651 MarkupKind.Markdown = 'markdown';
5652})(MarkupKind || (MarkupKind = {}));
5653(function (MarkupKind) {
5654 /**
5655 * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
5656 */
5657 function is(value) {
5658 var candidate = value;
5659 return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
5660 }
5661 MarkupKind.is = is;
5662})(MarkupKind || (MarkupKind = {}));
5663var MarkupContent;
5664(function (MarkupContent) {
5665 /**
5666 * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
5667 */
5668 function is(value) {
5669 var candidate = value;
5670 return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
5671 }
5672 MarkupContent.is = is;
5673})(MarkupContent || (MarkupContent = {}));
5674/**
5675 * The kind of a completion entry.
5676 */
5677var CompletionItemKind;
5678(function (CompletionItemKind) {
5679 CompletionItemKind.Text = 1;
5680 CompletionItemKind.Method = 2;
5681 CompletionItemKind.Function = 3;
5682 CompletionItemKind.Constructor = 4;
5683 CompletionItemKind.Field = 5;
5684 CompletionItemKind.Variable = 6;
5685 CompletionItemKind.Class = 7;
5686 CompletionItemKind.Interface = 8;
5687 CompletionItemKind.Module = 9;
5688 CompletionItemKind.Property = 10;
5689 CompletionItemKind.Unit = 11;
5690 CompletionItemKind.Value = 12;
5691 CompletionItemKind.Enum = 13;
5692 CompletionItemKind.Keyword = 14;
5693 CompletionItemKind.Snippet = 15;
5694 CompletionItemKind.Color = 16;
5695 CompletionItemKind.File = 17;
5696 CompletionItemKind.Reference = 18;
5697 CompletionItemKind.Folder = 19;
5698 CompletionItemKind.EnumMember = 20;
5699 CompletionItemKind.Constant = 21;
5700 CompletionItemKind.Struct = 22;
5701 CompletionItemKind.Event = 23;
5702 CompletionItemKind.Operator = 24;
5703 CompletionItemKind.TypeParameter = 25;
5704})(CompletionItemKind || (CompletionItemKind = {}));
5705/**
5706 * Defines whether the insert text in a completion item should be interpreted as
5707 * plain text or a snippet.
5708 */
5709var InsertTextFormat;
5710(function (InsertTextFormat) {
5711 /**
5712 * The primary text to be inserted is treated as a plain string.
5713 */
5714 InsertTextFormat.PlainText = 1;
5715 /**
5716 * The primary text to be inserted is treated as a snippet.
5717 *
5718 * A snippet can define tab stops and placeholders with `$1`, `$2`
5719 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
5720 * the end of the snippet. Placeholders with equal identifiers are linked,
5721 * that is typing in one will update others too.
5722 *
5723 * See also: https://microsoft.github.io/language-server-protocol/specifications/specification-current/#snippet_syntax
5724 */
5725 InsertTextFormat.Snippet = 2;
5726})(InsertTextFormat || (InsertTextFormat = {}));
5727/**
5728 * Completion item tags are extra annotations that tweak the rendering of a completion
5729 * item.
5730 *
5731 * @since 3.15.0
5732 */
5733var CompletionItemTag;
5734(function (CompletionItemTag) {
5735 /**
5736 * Render a completion as obsolete, usually using a strike-out.
5737 */
5738 CompletionItemTag.Deprecated = 1;
5739})(CompletionItemTag || (CompletionItemTag = {}));
5740/**
5741 * The InsertReplaceEdit namespace provides functions to deal with insert / replace edits.
5742 *
5743 * @since 3.16.0
5744 */
5745var InsertReplaceEdit;
5746(function (InsertReplaceEdit) {
5747 /**
5748 * Creates a new insert / replace edit
5749 */
5750 function create(newText, insert, replace) {
5751 return { newText: newText, insert: insert, replace: replace };
5752 }
5753 InsertReplaceEdit.create = create;
5754 /**
5755 * Checks whether the given literal conforms to the [InsertReplaceEdit](#InsertReplaceEdit) interface.
5756 */
5757 function is(value) {
5758 var candidate = value;
5759 return candidate && Is.string(candidate.newText) && Range.is(candidate.insert) && Range.is(candidate.replace);
5760 }
5761 InsertReplaceEdit.is = is;
5762})(InsertReplaceEdit || (InsertReplaceEdit = {}));
5763/**
5764 * How whitespace and indentation is handled during completion
5765 * item insertion.
5766 *
5767 * @since 3.16.0
5768 */
5769var InsertTextMode;
5770(function (InsertTextMode) {
5771 /**
5772 * The insertion or replace strings is taken as it is. If the
5773 * value is multi line the lines below the cursor will be
5774 * inserted using the indentation defined in the string value.
5775 * The client will not apply any kind of adjustments to the
5776 * string.
5777 */
5778 InsertTextMode.asIs = 1;
5779 /**
5780 * The editor adjusts leading whitespace of new lines so that
5781 * they match the indentation up to the cursor of the line for
5782 * which the item is accepted.
5783 *
5784 * Consider a line like this: <2tabs><cursor><3tabs>foo. Accepting a
5785 * multi line completion item is indented using 2 tabs and all
5786 * following lines inserted will be indented using 2 tabs as well.
5787 */
5788 InsertTextMode.adjustIndentation = 2;
5789})(InsertTextMode || (InsertTextMode = {}));
5790/**
5791 * The CompletionItem namespace provides functions to deal with
5792 * completion items.
5793 */
5794var CompletionItem;
5795(function (CompletionItem) {
5796 /**
5797 * Create a completion item and seed it with a label.
5798 * @param label The completion item's label
5799 */
5800 function create(label) {
5801 return { label: label };
5802 }
5803 CompletionItem.create = create;
5804})(CompletionItem || (CompletionItem = {}));
5805/**
5806 * The CompletionList namespace provides functions to deal with
5807 * completion lists.
5808 */
5809var CompletionList;
5810(function (CompletionList) {
5811 /**
5812 * Creates a new completion list.
5813 *
5814 * @param items The completion items.
5815 * @param isIncomplete The list is not complete.
5816 */
5817 function create(items, isIncomplete) {
5818 return { items: items ? items : [], isIncomplete: !!isIncomplete };
5819 }
5820 CompletionList.create = create;
5821})(CompletionList || (CompletionList = {}));
5822var MarkedString;
5823(function (MarkedString) {
5824 /**
5825 * Creates a marked string from plain text.
5826 *
5827 * @param plainText The plain text.
5828 */
5829 function fromPlainText(plainText) {
5830 return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
5831 }
5832 MarkedString.fromPlainText = fromPlainText;
5833 /**
5834 * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
5835 */
5836 function is(value) {
5837 var candidate = value;
5838 return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
5839 }
5840 MarkedString.is = is;
5841})(MarkedString || (MarkedString = {}));
5842var Hover;
5843(function (Hover) {
5844 /**
5845 * Checks whether the given value conforms to the [Hover](#Hover) interface.
5846 */
5847 function is(value) {
5848 var candidate = value;
5849 return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
5850 MarkedString.is(candidate.contents) ||
5851 Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === undefined || Range.is(value.range));
5852 }
5853 Hover.is = is;
5854})(Hover || (Hover = {}));
5855/**
5856 * The ParameterInformation namespace provides helper functions to work with
5857 * [ParameterInformation](#ParameterInformation) literals.
5858 */
5859var ParameterInformation;
5860(function (ParameterInformation) {
5861 /**
5862 * Creates a new parameter information literal.
5863 *
5864 * @param label A label string.
5865 * @param documentation A doc string.
5866 */
5867 function create(label, documentation) {
5868 return documentation ? { label: label, documentation: documentation } : { label: label };
5869 }
5870 ParameterInformation.create = create;
5871})(ParameterInformation || (ParameterInformation = {}));
5872/**
5873 * The SignatureInformation namespace provides helper functions to work with
5874 * [SignatureInformation](#SignatureInformation) literals.
5875 */
5876var SignatureInformation;
5877(function (SignatureInformation) {
5878 function create(label, documentation) {
5879 var parameters = [];
5880 for (var _i = 2; _i < arguments.length; _i++) {
5881 parameters[_i - 2] = arguments[_i];
5882 }
5883 var result = { label: label };
5884 if (Is.defined(documentation)) {
5885 result.documentation = documentation;
5886 }
5887 if (Is.defined(parameters)) {
5888 result.parameters = parameters;
5889 }
5890 else {
5891 result.parameters = [];
5892 }
5893 return result;
5894 }
5895 SignatureInformation.create = create;
5896})(SignatureInformation || (SignatureInformation = {}));
5897/**
5898 * A document highlight kind.
5899 */
5900var DocumentHighlightKind;
5901(function (DocumentHighlightKind) {
5902 /**
5903 * A textual occurrence.
5904 */
5905 DocumentHighlightKind.Text = 1;
5906 /**
5907 * Read-access of a symbol, like reading a variable.
5908 */
5909 DocumentHighlightKind.Read = 2;
5910 /**
5911 * Write-access of a symbol, like writing to a variable.
5912 */
5913 DocumentHighlightKind.Write = 3;
5914})(DocumentHighlightKind || (DocumentHighlightKind = {}));
5915/**
5916 * DocumentHighlight namespace to provide helper functions to work with
5917 * [DocumentHighlight](#DocumentHighlight) literals.
5918 */
5919var DocumentHighlight;
5920(function (DocumentHighlight) {
5921 /**
5922 * Create a DocumentHighlight object.
5923 * @param range The range the highlight applies to.
5924 */
5925 function create(range, kind) {
5926 var result = { range: range };
5927 if (Is.number(kind)) {
5928 result.kind = kind;
5929 }
5930 return result;
5931 }
5932 DocumentHighlight.create = create;
5933})(DocumentHighlight || (DocumentHighlight = {}));
5934/**
5935 * A symbol kind.
5936 */
5937var SymbolKind;
5938(function (SymbolKind) {
5939 SymbolKind.File = 1;
5940 SymbolKind.Module = 2;
5941 SymbolKind.Namespace = 3;
5942 SymbolKind.Package = 4;
5943 SymbolKind.Class = 5;
5944 SymbolKind.Method = 6;
5945 SymbolKind.Property = 7;
5946 SymbolKind.Field = 8;
5947 SymbolKind.Constructor = 9;
5948 SymbolKind.Enum = 10;
5949 SymbolKind.Interface = 11;
5950 SymbolKind.Function = 12;
5951 SymbolKind.Variable = 13;
5952 SymbolKind.Constant = 14;
5953 SymbolKind.String = 15;
5954 SymbolKind.Number = 16;
5955 SymbolKind.Boolean = 17;
5956 SymbolKind.Array = 18;
5957 SymbolKind.Object = 19;
5958 SymbolKind.Key = 20;
5959 SymbolKind.Null = 21;
5960 SymbolKind.EnumMember = 22;
5961 SymbolKind.Struct = 23;
5962 SymbolKind.Event = 24;
5963 SymbolKind.Operator = 25;
5964 SymbolKind.TypeParameter = 26;
5965})(SymbolKind || (SymbolKind = {}));
5966/**
5967 * Symbol tags are extra annotations that tweak the rendering of a symbol.
5968 * @since 3.16
5969 */
5970var SymbolTag;
5971(function (SymbolTag) {
5972 /**
5973 * Render a symbol as obsolete, usually using a strike-out.
5974 */
5975 SymbolTag.Deprecated = 1;
5976})(SymbolTag || (SymbolTag = {}));
5977var SymbolInformation;
5978(function (SymbolInformation) {
5979 /**
5980 * Creates a new symbol information literal.
5981 *
5982 * @param name The name of the symbol.
5983 * @param kind The kind of the symbol.
5984 * @param range The range of the location of the symbol.
5985 * @param uri The resource of the location of symbol, defaults to the current document.
5986 * @param containerName The name of the symbol containing the symbol.
5987 */
5988 function create(name, kind, range, uri, containerName) {
5989 var result = {
5990 name: name,
5991 kind: kind,
5992 location: { uri: uri, range: range }
5993 };
5994 if (containerName) {
5995 result.containerName = containerName;
5996 }
5997 return result;
5998 }
5999 SymbolInformation.create = create;
6000})(SymbolInformation || (SymbolInformation = {}));
6001var DocumentSymbol;
6002(function (DocumentSymbol) {
6003 /**
6004 * Creates a new symbol information literal.
6005 *
6006 * @param name The name of the symbol.
6007 * @param detail The detail of the symbol.
6008 * @param kind The kind of the symbol.
6009 * @param range The range of the symbol.
6010 * @param selectionRange The selectionRange of the symbol.
6011 * @param children Children of the symbol.
6012 */
6013 function create(name, detail, kind, range, selectionRange, children) {
6014 var result = {
6015 name: name,
6016 detail: detail,
6017 kind: kind,
6018 range: range,
6019 selectionRange: selectionRange
6020 };
6021 if (children !== undefined) {
6022 result.children = children;
6023 }
6024 return result;
6025 }
6026 DocumentSymbol.create = create;
6027 /**
6028 * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
6029 */
6030 function is(value) {
6031 var candidate = value;
6032 return candidate &&
6033 Is.string(candidate.name) && Is.number(candidate.kind) &&
6034 Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
6035 (candidate.detail === undefined || Is.string(candidate.detail)) &&
6036 (candidate.deprecated === undefined || Is.boolean(candidate.deprecated)) &&
6037 (candidate.children === undefined || Array.isArray(candidate.children)) &&
6038 (candidate.tags === undefined || Array.isArray(candidate.tags));
6039 }
6040 DocumentSymbol.is = is;
6041})(DocumentSymbol || (DocumentSymbol = {}));
6042/**
6043 * A set of predefined code action kinds
6044 */
6045var CodeActionKind;
6046(function (CodeActionKind) {
6047 /**
6048 * Empty kind.
6049 */
6050 CodeActionKind.Empty = '';
6051 /**
6052 * Base kind for quickfix actions: 'quickfix'
6053 */
6054 CodeActionKind.QuickFix = 'quickfix';
6055 /**
6056 * Base kind for refactoring actions: 'refactor'
6057 */
6058 CodeActionKind.Refactor = 'refactor';
6059 /**
6060 * Base kind for refactoring extraction actions: 'refactor.extract'
6061 *
6062 * Example extract actions:
6063 *
6064 * - Extract method
6065 * - Extract function
6066 * - Extract variable
6067 * - Extract interface from class
6068 * - ...
6069 */
6070 CodeActionKind.RefactorExtract = 'refactor.extract';
6071 /**
6072 * Base kind for refactoring inline actions: 'refactor.inline'
6073 *
6074 * Example inline actions:
6075 *
6076 * - Inline function
6077 * - Inline variable
6078 * - Inline constant
6079 * - ...
6080 */
6081 CodeActionKind.RefactorInline = 'refactor.inline';
6082 /**
6083 * Base kind for refactoring rewrite actions: 'refactor.rewrite'
6084 *
6085 * Example rewrite actions:
6086 *
6087 * - Convert JavaScript function to class
6088 * - Add or remove parameter
6089 * - Encapsulate field
6090 * - Make method static
6091 * - Move method to base class
6092 * - ...
6093 */
6094 CodeActionKind.RefactorRewrite = 'refactor.rewrite';
6095 /**
6096 * Base kind for source actions: `source`
6097 *
6098 * Source code actions apply to the entire file.
6099 */
6100 CodeActionKind.Source = 'source';
6101 /**
6102 * Base kind for an organize imports source action: `source.organizeImports`
6103 */
6104 CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
6105 /**
6106 * Base kind for auto-fix source actions: `source.fixAll`.
6107 *
6108 * Fix all actions automatically fix errors that have a clear fix that do not require user input.
6109 * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
6110 *
6111 * @since 3.15.0
6112 */
6113 CodeActionKind.SourceFixAll = 'source.fixAll';
6114})(CodeActionKind || (CodeActionKind = {}));
6115/**
6116 * The CodeActionContext namespace provides helper functions to work with
6117 * [CodeActionContext](#CodeActionContext) literals.
6118 */
6119var CodeActionContext;
6120(function (CodeActionContext) {
6121 /**
6122 * Creates a new CodeActionContext literal.
6123 */
6124 function create(diagnostics, only) {
6125 var result = { diagnostics: diagnostics };
6126 if (only !== undefined && only !== null) {
6127 result.only = only;
6128 }
6129 return result;
6130 }
6131 CodeActionContext.create = create;
6132 /**
6133 * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
6134 */
6135 function is(value) {
6136 var candidate = value;
6137 return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === undefined || Is.typedArray(candidate.only, Is.string));
6138 }
6139 CodeActionContext.is = is;
6140})(CodeActionContext || (CodeActionContext = {}));
6141var CodeAction;
6142(function (CodeAction) {
6143 function create(title, kindOrCommandOrEdit, kind) {
6144 var result = { title: title };
6145 var checkKind = true;
6146 if (typeof kindOrCommandOrEdit === 'string') {
6147 checkKind = false;
6148 result.kind = kindOrCommandOrEdit;
6149 }
6150 else if (Command.is(kindOrCommandOrEdit)) {
6151 result.command = kindOrCommandOrEdit;
6152 }
6153 else {
6154 result.edit = kindOrCommandOrEdit;
6155 }
6156 if (checkKind && kind !== undefined) {
6157 result.kind = kind;
6158 }
6159 return result;
6160 }
6161 CodeAction.create = create;
6162 function is(value) {
6163 var candidate = value;
6164 return candidate && Is.string(candidate.title) &&
6165 (candidate.diagnostics === undefined || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
6166 (candidate.kind === undefined || Is.string(candidate.kind)) &&
6167 (candidate.edit !== undefined || candidate.command !== undefined) &&
6168 (candidate.command === undefined || Command.is(candidate.command)) &&
6169 (candidate.isPreferred === undefined || Is.boolean(candidate.isPreferred)) &&
6170 (candidate.edit === undefined || WorkspaceEdit.is(candidate.edit));
6171 }
6172 CodeAction.is = is;
6173})(CodeAction || (CodeAction = {}));
6174/**
6175 * The CodeLens namespace provides helper functions to work with
6176 * [CodeLens](#CodeLens) literals.
6177 */
6178var CodeLens;
6179(function (CodeLens) {
6180 /**
6181 * Creates a new CodeLens literal.
6182 */
6183 function create(range, data) {
6184 var result = { range: range };
6185 if (Is.defined(data)) {
6186 result.data = data;
6187 }
6188 return result;
6189 }
6190 CodeLens.create = create;
6191 /**
6192 * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
6193 */
6194 function is(value) {
6195 var candidate = value;
6196 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
6197 }
6198 CodeLens.is = is;
6199})(CodeLens || (CodeLens = {}));
6200/**
6201 * The FormattingOptions namespace provides helper functions to work with
6202 * [FormattingOptions](#FormattingOptions) literals.
6203 */
6204var FormattingOptions;
6205(function (FormattingOptions) {
6206 /**
6207 * Creates a new FormattingOptions literal.
6208 */
6209 function create(tabSize, insertSpaces) {
6210 return { tabSize: tabSize, insertSpaces: insertSpaces };
6211 }
6212 FormattingOptions.create = create;
6213 /**
6214 * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
6215 */
6216 function is(value) {
6217 var candidate = value;
6218 return Is.defined(candidate) && Is.uinteger(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
6219 }
6220 FormattingOptions.is = is;
6221})(FormattingOptions || (FormattingOptions = {}));
6222/**
6223 * The DocumentLink namespace provides helper functions to work with
6224 * [DocumentLink](#DocumentLink) literals.
6225 */
6226var DocumentLink;
6227(function (DocumentLink) {
6228 /**
6229 * Creates a new DocumentLink literal.
6230 */
6231 function create(range, target, data) {
6232 return { range: range, target: target, data: data };
6233 }
6234 DocumentLink.create = create;
6235 /**
6236 * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
6237 */
6238 function is(value) {
6239 var candidate = value;
6240 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
6241 }
6242 DocumentLink.is = is;
6243})(DocumentLink || (DocumentLink = {}));
6244/**
6245 * The SelectionRange namespace provides helper function to work with
6246 * SelectionRange literals.
6247 */
6248var SelectionRange;
6249(function (SelectionRange) {
6250 /**
6251 * Creates a new SelectionRange
6252 * @param range the range.
6253 * @param parent an optional parent.
6254 */
6255 function create(range, parent) {
6256 return { range: range, parent: parent };
6257 }
6258 SelectionRange.create = create;
6259 function is(value) {
6260 var candidate = value;
6261 return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
6262 }
6263 SelectionRange.is = is;
6264})(SelectionRange || (SelectionRange = {}));
6265var EOL = ['\n', '\r\n', '\r'];
6266/**
6267 * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
6268 */
6269var TextDocument;
6270(function (TextDocument) {
6271 /**
6272 * Creates a new ITextDocument literal from the given uri and content.
6273 * @param uri The document's uri.
6274 * @param languageId The document's language Id.
6275 * @param content The document's content.
6276 */
6277 function create(uri, languageId, version, content) {
6278 return new FullTextDocument(uri, languageId, version, content);
6279 }
6280 TextDocument.create = create;
6281 /**
6282 * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
6283 */
6284 function is(value) {
6285 var candidate = value;
6286 return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.uinteger(candidate.lineCount)
6287 && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
6288 }
6289 TextDocument.is = is;
6290 function applyEdits(document, edits) {
6291 var text = document.getText();
6292 var sortedEdits = mergeSort(edits, function (a, b) {
6293 var diff = a.range.start.line - b.range.start.line;
6294 if (diff === 0) {
6295 return a.range.start.character - b.range.start.character;
6296 }
6297 return diff;
6298 });
6299 var lastModifiedOffset = text.length;
6300 for (var i = sortedEdits.length - 1; i >= 0; i--) {
6301 var e = sortedEdits[i];
6302 var startOffset = document.offsetAt(e.range.start);
6303 var endOffset = document.offsetAt(e.range.end);
6304 if (endOffset <= lastModifiedOffset) {
6305 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
6306 }
6307 else {
6308 throw new Error('Overlapping edit');
6309 }
6310 lastModifiedOffset = startOffset;
6311 }
6312 return text;
6313 }
6314 TextDocument.applyEdits = applyEdits;
6315 function mergeSort(data, compare) {
6316 if (data.length <= 1) {
6317 // sorted
6318 return data;
6319 }
6320 var p = (data.length / 2) | 0;
6321 var left = data.slice(0, p);
6322 var right = data.slice(p);
6323 mergeSort(left, compare);
6324 mergeSort(right, compare);
6325 var leftIdx = 0;
6326 var rightIdx = 0;
6327 var i = 0;
6328 while (leftIdx < left.length && rightIdx < right.length) {
6329 var ret = compare(left[leftIdx], right[rightIdx]);
6330 if (ret <= 0) {
6331 // smaller_equal -> take left to preserve order
6332 data[i++] = left[leftIdx++];
6333 }
6334 else {
6335 // greater -> take right
6336 data[i++] = right[rightIdx++];
6337 }
6338 }
6339 while (leftIdx < left.length) {
6340 data[i++] = left[leftIdx++];
6341 }
6342 while (rightIdx < right.length) {
6343 data[i++] = right[rightIdx++];
6344 }
6345 return data;
6346 }
6347})(TextDocument || (TextDocument = {}));
6348/**
6349 * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
6350 */
6351var FullTextDocument = /** @class */ (function () {
6352 function FullTextDocument(uri, languageId, version, content) {
6353 this._uri = uri;
6354 this._languageId = languageId;
6355 this._version = version;
6356 this._content = content;
6357 this._lineOffsets = undefined;
6358 }
6359 Object.defineProperty(FullTextDocument.prototype, "uri", {
6360 get: function () {
6361 return this._uri;
6362 },
6363 enumerable: false,
6364 configurable: true
6365 });
6366 Object.defineProperty(FullTextDocument.prototype, "languageId", {
6367 get: function () {
6368 return this._languageId;
6369 },
6370 enumerable: false,
6371 configurable: true
6372 });
6373 Object.defineProperty(FullTextDocument.prototype, "version", {
6374 get: function () {
6375 return this._version;
6376 },
6377 enumerable: false,
6378 configurable: true
6379 });
6380 FullTextDocument.prototype.getText = function (range) {
6381 if (range) {
6382 var start = this.offsetAt(range.start);
6383 var end = this.offsetAt(range.end);
6384 return this._content.substring(start, end);
6385 }
6386 return this._content;
6387 };
6388 FullTextDocument.prototype.update = function (event, version) {
6389 this._content = event.text;
6390 this._version = version;
6391 this._lineOffsets = undefined;
6392 };
6393 FullTextDocument.prototype.getLineOffsets = function () {
6394 if (this._lineOffsets === undefined) {
6395 var lineOffsets = [];
6396 var text = this._content;
6397 var isLineStart = true;
6398 for (var i = 0; i < text.length; i++) {
6399 if (isLineStart) {
6400 lineOffsets.push(i);
6401 isLineStart = false;
6402 }
6403 var ch = text.charAt(i);
6404 isLineStart = (ch === '\r' || ch === '\n');
6405 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
6406 i++;
6407 }
6408 }
6409 if (isLineStart && text.length > 0) {
6410 lineOffsets.push(text.length);
6411 }
6412 this._lineOffsets = lineOffsets;
6413 }
6414 return this._lineOffsets;
6415 };
6416 FullTextDocument.prototype.positionAt = function (offset) {
6417 offset = Math.max(Math.min(offset, this._content.length), 0);
6418 var lineOffsets = this.getLineOffsets();
6419 var low = 0, high = lineOffsets.length;
6420 if (high === 0) {
6421 return Position.create(0, offset);
6422 }
6423 while (low < high) {
6424 var mid = Math.floor((low + high) / 2);
6425 if (lineOffsets[mid] > offset) {
6426 high = mid;
6427 }
6428 else {
6429 low = mid + 1;
6430 }
6431 }
6432 // low is the least x for which the line offset is larger than the current offset
6433 // or array.length if no line offset is larger than the current offset
6434 var line = low - 1;
6435 return Position.create(line, offset - lineOffsets[line]);
6436 };
6437 FullTextDocument.prototype.offsetAt = function (position) {
6438 var lineOffsets = this.getLineOffsets();
6439 if (position.line >= lineOffsets.length) {
6440 return this._content.length;
6441 }
6442 else if (position.line < 0) {
6443 return 0;
6444 }
6445 var lineOffset = lineOffsets[position.line];
6446 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
6447 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
6448 };
6449 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
6450 get: function () {
6451 return this.getLineOffsets().length;
6452 },
6453 enumerable: false,
6454 configurable: true
6455 });
6456 return FullTextDocument;
6457}());
6458var Is;
6459(function (Is) {
6460 var toString = Object.prototype.toString;
6461 function defined(value) {
6462 return typeof value !== 'undefined';
6463 }
6464 Is.defined = defined;
6465 function undefined(value) {
6466 return typeof value === 'undefined';
6467 }
6468 Is.undefined = undefined;
6469 function boolean(value) {
6470 return value === true || value === false;
6471 }
6472 Is.boolean = boolean;
6473 function string(value) {
6474 return toString.call(value) === '[object String]';
6475 }
6476 Is.string = string;
6477 function number(value) {
6478 return toString.call(value) === '[object Number]';
6479 }
6480 Is.number = number;
6481 function numberRange(value, min, max) {
6482 return toString.call(value) === '[object Number]' && min <= value && value <= max;
6483 }
6484 Is.numberRange = numberRange;
6485 function integer(value) {
6486 return toString.call(value) === '[object Number]' && -2147483648 <= value && value <= 2147483647;
6487 }
6488 Is.integer = integer;
6489 function uinteger(value) {
6490 return toString.call(value) === '[object Number]' && 0 <= value && value <= 2147483647;
6491 }
6492 Is.uinteger = uinteger;
6493 function func(value) {
6494 return toString.call(value) === '[object Function]';
6495 }
6496 Is.func = func;
6497 function objectLiteral(value) {
6498 // Strictly speaking class instances pass this check as well. Since the LSP
6499 // doesn't use classes we ignore this for now. If we do we need to add something
6500 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
6501 return value !== null && typeof value === 'object';
6502 }
6503 Is.objectLiteral = objectLiteral;
6504 function typedArray(value, check) {
6505 return Array.isArray(value) && value.every(check);
6506 }
6507 Is.typedArray = typedArray;
6508})(Is || (Is = {}));
6509
6510
6511/***/ }),
6512/* 29 */
6513/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6514
6515"use strict";
6516
6517/* --------------------------------------------------------------------------------------------
6518 * Copyright (c) Microsoft Corporation. All rights reserved.
6519 * Licensed under the MIT License. See License.txt in the project root for license information.
6520 * ------------------------------------------------------------------------------------------ */
6521Object.defineProperty(exports, "__esModule", ({ value: true }));
6522exports.ProtocolNotificationType = exports.ProtocolNotificationType0 = exports.ProtocolRequestType = exports.ProtocolRequestType0 = exports.RegistrationType = void 0;
6523const vscode_jsonrpc_1 = __webpack_require__(7);
6524class RegistrationType {
6525 constructor(method) {
6526 this.method = method;
6527 }
6528}
6529exports.RegistrationType = RegistrationType;
6530class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
6531 constructor(method) {
6532 super(method);
6533 }
6534}
6535exports.ProtocolRequestType0 = ProtocolRequestType0;
6536class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
6537 constructor(method) {
6538 super(method, vscode_jsonrpc_1.ParameterStructures.byName);
6539 }
6540}
6541exports.ProtocolRequestType = ProtocolRequestType;
6542class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
6543 constructor(method) {
6544 super(method);
6545 }
6546}
6547exports.ProtocolNotificationType0 = ProtocolNotificationType0;
6548class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
6549 constructor(method) {
6550 super(method, vscode_jsonrpc_1.ParameterStructures.byName);
6551 }
6552}
6553exports.ProtocolNotificationType = ProtocolNotificationType;
6554// let x: ProtocolNotificationType<number, { value: number}>;
6555// let y: ProtocolNotificationType<string, { value: number}>;
6556// x = y;
6557//# sourceMappingURL=messages.js.map
6558
6559/***/ }),
6560/* 30 */
6561/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6562
6563"use strict";
6564
6565/* --------------------------------------------------------------------------------------------
6566 * Copyright (c) Microsoft Corporation. All rights reserved.
6567 * Licensed under the MIT License. See License.txt in the project root for license information.
6568 * ------------------------------------------------------------------------------------------ */
6569Object.defineProperty(exports, "__esModule", ({ value: true }));
6570exports.DocumentLinkRequest = exports.CodeLensRefreshRequest = exports.CodeLensResolveRequest = exports.CodeLensRequest = exports.WorkspaceSymbolRequest = exports.CodeActionResolveRequest = exports.CodeActionRequest = exports.DocumentSymbolRequest = exports.DocumentHighlightRequest = exports.ReferencesRequest = exports.DefinitionRequest = exports.SignatureHelpRequest = exports.SignatureHelpTriggerKind = exports.HoverRequest = exports.CompletionResolveRequest = exports.CompletionRequest = exports.CompletionTriggerKind = exports.PublishDiagnosticsNotification = exports.WatchKind = exports.FileChangeType = exports.DidChangeWatchedFilesNotification = exports.WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentNotification = exports.TextDocumentSaveReason = exports.DidSaveTextDocumentNotification = exports.DidCloseTextDocumentNotification = exports.DidChangeTextDocumentNotification = exports.TextDocumentContentChangeEvent = exports.DidOpenTextDocumentNotification = exports.TextDocumentSyncKind = exports.TelemetryEventNotification = exports.LogMessageNotification = exports.ShowMessageRequest = exports.ShowMessageNotification = exports.MessageType = exports.DidChangeConfigurationNotification = exports.ExitNotification = exports.ShutdownRequest = exports.InitializedNotification = exports.InitializeError = exports.InitializeRequest = exports.WorkDoneProgressOptions = exports.TextDocumentRegistrationOptions = exports.StaticRegistrationOptions = exports.FailureHandlingKind = exports.ResourceOperationKind = exports.UnregistrationRequest = exports.RegistrationRequest = exports.DocumentSelector = exports.DocumentFilter = void 0;
6571exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.WillRenameFilesRequest = exports.DidRenameFilesNotification = exports.WillCreateFilesRequest = exports.DidCreateFilesNotification = exports.FileOperationPatternKind = exports.LinkedEditingRangeRequest = exports.ShowDocumentRequest = exports.SemanticTokensRegistrationType = exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.TokenFormat = exports.SemanticTokens = exports.SemanticTokenModifiers = exports.SemanticTokenTypes = exports.CallHierarchyPrepareRequest = exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = exports.SelectionRangeRequest = exports.DeclarationRequest = exports.FoldingRangeRequest = exports.ColorPresentationRequest = exports.DocumentColorRequest = exports.ConfigurationRequest = exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = exports.TypeDefinitionRequest = exports.ImplementationRequest = exports.ApplyWorkspaceEditRequest = exports.ExecuteCommandRequest = exports.PrepareRenameRequest = exports.RenameRequest = exports.PrepareSupportDefaultBehavior = exports.DocumentOnTypeFormattingRequest = exports.DocumentRangeFormattingRequest = exports.DocumentFormattingRequest = exports.DocumentLinkResolveRequest = void 0;
6572const Is = __webpack_require__(31);
6573const messages_1 = __webpack_require__(29);
6574const protocol_implementation_1 = __webpack_require__(32);
6575Object.defineProperty(exports, "ImplementationRequest", ({ enumerable: true, get: function () { return protocol_implementation_1.ImplementationRequest; } }));
6576const protocol_typeDefinition_1 = __webpack_require__(33);
6577Object.defineProperty(exports, "TypeDefinitionRequest", ({ enumerable: true, get: function () { return protocol_typeDefinition_1.TypeDefinitionRequest; } }));
6578const protocol_workspaceFolders_1 = __webpack_require__(34);
6579Object.defineProperty(exports, "WorkspaceFoldersRequest", ({ enumerable: true, get: function () { return protocol_workspaceFolders_1.WorkspaceFoldersRequest; } }));
6580Object.defineProperty(exports, "DidChangeWorkspaceFoldersNotification", ({ enumerable: true, get: function () { return protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification; } }));
6581const protocol_configuration_1 = __webpack_require__(35);
6582Object.defineProperty(exports, "ConfigurationRequest", ({ enumerable: true, get: function () { return protocol_configuration_1.ConfigurationRequest; } }));
6583const protocol_colorProvider_1 = __webpack_require__(36);
6584Object.defineProperty(exports, "DocumentColorRequest", ({ enumerable: true, get: function () { return protocol_colorProvider_1.DocumentColorRequest; } }));
6585Object.defineProperty(exports, "ColorPresentationRequest", ({ enumerable: true, get: function () { return protocol_colorProvider_1.ColorPresentationRequest; } }));
6586const protocol_foldingRange_1 = __webpack_require__(37);
6587Object.defineProperty(exports, "FoldingRangeRequest", ({ enumerable: true, get: function () { return protocol_foldingRange_1.FoldingRangeRequest; } }));
6588const protocol_declaration_1 = __webpack_require__(38);
6589Object.defineProperty(exports, "DeclarationRequest", ({ enumerable: true, get: function () { return protocol_declaration_1.DeclarationRequest; } }));
6590const protocol_selectionRange_1 = __webpack_require__(39);
6591Object.defineProperty(exports, "SelectionRangeRequest", ({ enumerable: true, get: function () { return protocol_selectionRange_1.SelectionRangeRequest; } }));
6592const protocol_progress_1 = __webpack_require__(40);
6593Object.defineProperty(exports, "WorkDoneProgress", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgress; } }));
6594Object.defineProperty(exports, "WorkDoneProgressCreateRequest", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCreateRequest; } }));
6595Object.defineProperty(exports, "WorkDoneProgressCancelNotification", ({ enumerable: true, get: function () { return protocol_progress_1.WorkDoneProgressCancelNotification; } }));
6596const protocol_callHierarchy_1 = __webpack_require__(41);
6597Object.defineProperty(exports, "CallHierarchyIncomingCallsRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyIncomingCallsRequest; } }));
6598Object.defineProperty(exports, "CallHierarchyOutgoingCallsRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyOutgoingCallsRequest; } }));
6599Object.defineProperty(exports, "CallHierarchyPrepareRequest", ({ enumerable: true, get: function () { return protocol_callHierarchy_1.CallHierarchyPrepareRequest; } }));
6600const protocol_semanticTokens_1 = __webpack_require__(42);
6601Object.defineProperty(exports, "SemanticTokenTypes", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokenTypes; } }));
6602Object.defineProperty(exports, "SemanticTokenModifiers", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokenModifiers; } }));
6603Object.defineProperty(exports, "SemanticTokens", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokens; } }));
6604Object.defineProperty(exports, "TokenFormat", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.TokenFormat; } }));
6605Object.defineProperty(exports, "SemanticTokensRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRequest; } }));
6606Object.defineProperty(exports, "SemanticTokensDeltaRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensDeltaRequest; } }));
6607Object.defineProperty(exports, "SemanticTokensRangeRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRangeRequest; } }));
6608Object.defineProperty(exports, "SemanticTokensRefreshRequest", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRefreshRequest; } }));
6609Object.defineProperty(exports, "SemanticTokensRegistrationType", ({ enumerable: true, get: function () { return protocol_semanticTokens_1.SemanticTokensRegistrationType; } }));
6610const protocol_showDocument_1 = __webpack_require__(43);
6611Object.defineProperty(exports, "ShowDocumentRequest", ({ enumerable: true, get: function () { return protocol_showDocument_1.ShowDocumentRequest; } }));
6612const protocol_linkedEditingRange_1 = __webpack_require__(44);
6613Object.defineProperty(exports, "LinkedEditingRangeRequest", ({ enumerable: true, get: function () { return protocol_linkedEditingRange_1.LinkedEditingRangeRequest; } }));
6614const protocol_fileOperations_1 = __webpack_require__(45);
6615Object.defineProperty(exports, "FileOperationPatternKind", ({ enumerable: true, get: function () { return protocol_fileOperations_1.FileOperationPatternKind; } }));
6616Object.defineProperty(exports, "DidCreateFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidCreateFilesNotification; } }));
6617Object.defineProperty(exports, "WillCreateFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillCreateFilesRequest; } }));
6618Object.defineProperty(exports, "DidRenameFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidRenameFilesNotification; } }));
6619Object.defineProperty(exports, "WillRenameFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillRenameFilesRequest; } }));
6620Object.defineProperty(exports, "DidDeleteFilesNotification", ({ enumerable: true, get: function () { return protocol_fileOperations_1.DidDeleteFilesNotification; } }));
6621Object.defineProperty(exports, "WillDeleteFilesRequest", ({ enumerable: true, get: function () { return protocol_fileOperations_1.WillDeleteFilesRequest; } }));
6622const protocol_moniker_1 = __webpack_require__(46);
6623Object.defineProperty(exports, "UniquenessLevel", ({ enumerable: true, get: function () { return protocol_moniker_1.UniquenessLevel; } }));
6624Object.defineProperty(exports, "MonikerKind", ({ enumerable: true, get: function () { return protocol_moniker_1.MonikerKind; } }));
6625Object.defineProperty(exports, "MonikerRequest", ({ enumerable: true, get: function () { return protocol_moniker_1.MonikerRequest; } }));
6626// @ts-ignore: to avoid inlining LocationLink as dynamic import
6627let __noDynamicImport;
6628/**
6629 * The DocumentFilter namespace provides helper functions to work with
6630 * [DocumentFilter](#DocumentFilter) literals.
6631 */
6632var DocumentFilter;
6633(function (DocumentFilter) {
6634 function is(value) {
6635 const candidate = value;
6636 return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
6637 }
6638 DocumentFilter.is = is;
6639})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
6640/**
6641 * The DocumentSelector namespace provides helper functions to work with
6642 * [DocumentSelector](#DocumentSelector)s.
6643 */
6644var DocumentSelector;
6645(function (DocumentSelector) {
6646 function is(value) {
6647 if (!Array.isArray(value)) {
6648 return false;
6649 }
6650 for (let elem of value) {
6651 if (!Is.string(elem) && !DocumentFilter.is(elem)) {
6652 return false;
6653 }
6654 }
6655 return true;
6656 }
6657 DocumentSelector.is = is;
6658})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));
6659/**
6660 * The `client/registerCapability` request is sent from the server to the client to register a new capability
6661 * handler on the client side.
6662 */
6663var RegistrationRequest;
6664(function (RegistrationRequest) {
6665 RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');
6666})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
6667/**
6668 * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
6669 * handler on the client side.
6670 */
6671var UnregistrationRequest;
6672(function (UnregistrationRequest) {
6673 UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');
6674})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
6675var ResourceOperationKind;
6676(function (ResourceOperationKind) {
6677 /**
6678 * Supports creating new files and folders.
6679 */
6680 ResourceOperationKind.Create = 'create';
6681 /**
6682 * Supports renaming existing files and folders.
6683 */
6684 ResourceOperationKind.Rename = 'rename';
6685 /**
6686 * Supports deleting existing files and folders.
6687 */
6688 ResourceOperationKind.Delete = 'delete';
6689})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
6690var FailureHandlingKind;
6691(function (FailureHandlingKind) {
6692 /**
6693 * Applying the workspace change is simply aborted if one of the changes provided
6694 * fails. All operations executed before the failing operation stay executed.
6695 */
6696 FailureHandlingKind.Abort = 'abort';
6697 /**
6698 * All operations are executed transactional. That means they either all
6699 * succeed or no changes at all are applied to the workspace.
6700 */
6701 FailureHandlingKind.Transactional = 'transactional';
6702 /**
6703 * If the workspace edit contains only textual file changes they are executed transactional.
6704 * If resource changes (create, rename or delete file) are part of the change the failure
6705 * handling strategy is abort.
6706 */
6707 FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
6708 /**
6709 * The client tries to undo the operations already executed. But there is no
6710 * guarantee that this is succeeding.
6711 */
6712 FailureHandlingKind.Undo = 'undo';
6713})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
6714/**
6715 * The StaticRegistrationOptions namespace provides helper functions to work with
6716 * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.
6717 */
6718var StaticRegistrationOptions;
6719(function (StaticRegistrationOptions) {
6720 function hasId(value) {
6721 const candidate = value;
6722 return candidate && Is.string(candidate.id) && candidate.id.length > 0;
6723 }
6724 StaticRegistrationOptions.hasId = hasId;
6725})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));
6726/**
6727 * The TextDocumentRegistrationOptions namespace provides helper functions to work with
6728 * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.
6729 */
6730var TextDocumentRegistrationOptions;
6731(function (TextDocumentRegistrationOptions) {
6732 function is(value) {
6733 const candidate = value;
6734 return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
6735 }
6736 TextDocumentRegistrationOptions.is = is;
6737})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));
6738/**
6739 * The WorkDoneProgressOptions namespace provides helper functions to work with
6740 * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.
6741 */
6742var WorkDoneProgressOptions;
6743(function (WorkDoneProgressOptions) {
6744 function is(value) {
6745 const candidate = value;
6746 return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
6747 }
6748 WorkDoneProgressOptions.is = is;
6749 function hasWorkDoneProgress(value) {
6750 const candidate = value;
6751 return candidate && Is.boolean(candidate.workDoneProgress);
6752 }
6753 WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
6754})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));
6755/**
6756 * The initialize request is sent from the client to the server.
6757 * It is sent once as the request after starting up the server.
6758 * The requests parameter is of type [InitializeParams](#InitializeParams)
6759 * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
6760 * resolves to such.
6761 */
6762var InitializeRequest;
6763(function (InitializeRequest) {
6764 InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');
6765})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
6766/**
6767 * Known error codes for an `InitializeError`;
6768 */
6769var InitializeError;
6770(function (InitializeError) {
6771 /**
6772 * If the protocol version provided by the client can't be handled by the server.
6773 * @deprecated This initialize error got replaced by client capabilities. There is
6774 * no version handshake in version 3.0x
6775 */
6776 InitializeError.unknownProtocolVersion = 1;
6777})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
6778/**
6779 * The initialized notification is sent from the client to the
6780 * server after the client is fully initialized and the server
6781 * is allowed to send requests from the server to the client.
6782 */
6783var InitializedNotification;
6784(function (InitializedNotification) {
6785 InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');
6786})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
6787//---- Shutdown Method ----
6788/**
6789 * A shutdown request is sent from the client to the server.
6790 * It is sent once when the client decides to shutdown the
6791 * server. The only notification that is sent after a shutdown request
6792 * is the exit event.
6793 */
6794var ShutdownRequest;
6795(function (ShutdownRequest) {
6796 ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');
6797})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
6798//---- Exit Notification ----
6799/**
6800 * The exit event is sent from the client to the server to
6801 * ask the server to exit its process.
6802 */
6803var ExitNotification;
6804(function (ExitNotification) {
6805 ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');
6806})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
6807/**
6808 * The configuration change notification is sent from the client to the server
6809 * when the client's configuration has changed. The notification contains
6810 * the changed configuration as defined by the language client.
6811 */
6812var DidChangeConfigurationNotification;
6813(function (DidChangeConfigurationNotification) {
6814 DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');
6815})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
6816//---- Message show and log notifications ----
6817/**
6818 * The message type
6819 */
6820var MessageType;
6821(function (MessageType) {
6822 /**
6823 * An error message.
6824 */
6825 MessageType.Error = 1;
6826 /**
6827 * A warning message.
6828 */
6829 MessageType.Warning = 2;
6830 /**
6831 * An information message.
6832 */
6833 MessageType.Info = 3;
6834 /**
6835 * A log message.
6836 */
6837 MessageType.Log = 4;
6838})(MessageType = exports.MessageType || (exports.MessageType = {}));
6839/**
6840 * The show message notification is sent from a server to a client to ask
6841 * the client to display a particular message in the user interface.
6842 */
6843var ShowMessageNotification;
6844(function (ShowMessageNotification) {
6845 ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');
6846})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
6847/**
6848 * The show message request is sent from the server to the client to show a message
6849 * and a set of options actions to the user.
6850 */
6851var ShowMessageRequest;
6852(function (ShowMessageRequest) {
6853 ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');
6854})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
6855/**
6856 * The log message notification is sent from the server to the client to ask
6857 * the client to log a particular message.
6858 */
6859var LogMessageNotification;
6860(function (LogMessageNotification) {
6861 LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');
6862})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
6863//---- Telemetry notification
6864/**
6865 * The telemetry event notification is sent from the server to the client to ask
6866 * the client to log telemetry data.
6867 */
6868var TelemetryEventNotification;
6869(function (TelemetryEventNotification) {
6870 TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');
6871})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
6872/**
6873 * Defines how the host (editor) should sync
6874 * document changes to the language server.
6875 */
6876var TextDocumentSyncKind;
6877(function (TextDocumentSyncKind) {
6878 /**
6879 * Documents should not be synced at all.
6880 */
6881 TextDocumentSyncKind.None = 0;
6882 /**
6883 * Documents are synced by always sending the full content
6884 * of the document.
6885 */
6886 TextDocumentSyncKind.Full = 1;
6887 /**
6888 * Documents are synced by sending the full content on open.
6889 * After that only incremental updates to the document are
6890 * send.
6891 */
6892 TextDocumentSyncKind.Incremental = 2;
6893})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
6894/**
6895 * The document open notification is sent from the client to the server to signal
6896 * newly opened text documents. The document's truth is now managed by the client
6897 * and the server must not try to read the document's truth using the document's
6898 * uri. Open in this sense means it is managed by the client. It doesn't necessarily
6899 * mean that its content is presented in an editor. An open notification must not
6900 * be sent more than once without a corresponding close notification send before.
6901 * This means open and close notification must be balanced and the max open count
6902 * is one.
6903 */
6904var DidOpenTextDocumentNotification;
6905(function (DidOpenTextDocumentNotification) {
6906 DidOpenTextDocumentNotification.method = 'textDocument/didOpen';
6907 DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
6908})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
6909var TextDocumentContentChangeEvent;
6910(function (TextDocumentContentChangeEvent) {
6911 /**
6912 * Checks whether the information describes a delta event.
6913 */
6914 function isIncremental(event) {
6915 let candidate = event;
6916 return candidate !== undefined && candidate !== null &&
6917 typeof candidate.text === 'string' && candidate.range !== undefined &&
6918 (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
6919 }
6920 TextDocumentContentChangeEvent.isIncremental = isIncremental;
6921 /**
6922 * Checks whether the information describes a full replacement event.
6923 */
6924 function isFull(event) {
6925 let candidate = event;
6926 return candidate !== undefined && candidate !== null &&
6927 typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
6928 }
6929 TextDocumentContentChangeEvent.isFull = isFull;
6930})(TextDocumentContentChangeEvent = exports.TextDocumentContentChangeEvent || (exports.TextDocumentContentChangeEvent = {}));
6931/**
6932 * The document change notification is sent from the client to the server to signal
6933 * changes to a text document.
6934 */
6935var DidChangeTextDocumentNotification;
6936(function (DidChangeTextDocumentNotification) {
6937 DidChangeTextDocumentNotification.method = 'textDocument/didChange';
6938 DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
6939})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
6940/**
6941 * The document close notification is sent from the client to the server when
6942 * the document got closed in the client. The document's truth now exists where
6943 * the document's uri points to (e.g. if the document's uri is a file uri the
6944 * truth now exists on disk). As with the open notification the close notification
6945 * is about managing the document's content. Receiving a close notification
6946 * doesn't mean that the document was open in an editor before. A close
6947 * notification requires a previous open notification to be sent.
6948 */
6949var DidCloseTextDocumentNotification;
6950(function (DidCloseTextDocumentNotification) {
6951 DidCloseTextDocumentNotification.method = 'textDocument/didClose';
6952 DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
6953})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
6954/**
6955 * The document save notification is sent from the client to the server when
6956 * the document got saved in the client.
6957 */
6958var DidSaveTextDocumentNotification;
6959(function (DidSaveTextDocumentNotification) {
6960 DidSaveTextDocumentNotification.method = 'textDocument/didSave';
6961 DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
6962})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
6963/**
6964 * Represents reasons why a text document is saved.
6965 */
6966var TextDocumentSaveReason;
6967(function (TextDocumentSaveReason) {
6968 /**
6969 * Manually triggered, e.g. by the user pressing save, by starting debugging,
6970 * or by an API call.
6971 */
6972 TextDocumentSaveReason.Manual = 1;
6973 /**
6974 * Automatic after a delay.
6975 */
6976 TextDocumentSaveReason.AfterDelay = 2;
6977 /**
6978 * When the editor lost focus.
6979 */
6980 TextDocumentSaveReason.FocusOut = 3;
6981})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));
6982/**
6983 * A document will save notification is sent from the client to the server before
6984 * the document is actually saved.
6985 */
6986var WillSaveTextDocumentNotification;
6987(function (WillSaveTextDocumentNotification) {
6988 WillSaveTextDocumentNotification.method = 'textDocument/willSave';
6989 WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
6990})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
6991/**
6992 * A document will save request is sent from the client to the server before
6993 * the document is actually saved. The request can return an array of TextEdits
6994 * which will be applied to the text document before it is saved. Please note that
6995 * clients might drop results if computing the text edits took too long or if a
6996 * server constantly fails on this request. This is done to keep the save fast and
6997 * reliable.
6998 */
6999var WillSaveTextDocumentWaitUntilRequest;
7000(function (WillSaveTextDocumentWaitUntilRequest) {
7001 WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';
7002 WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
7003})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
7004/**
7005 * The watched files notification is sent from the client to the server when
7006 * the client detects changes to file watched by the language client.
7007 */
7008var DidChangeWatchedFilesNotification;
7009(function (DidChangeWatchedFilesNotification) {
7010 DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');
7011})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
7012/**
7013 * The file event type
7014 */
7015var FileChangeType;
7016(function (FileChangeType) {
7017 /**
7018 * The file got created.
7019 */
7020 FileChangeType.Created = 1;
7021 /**
7022 * The file got changed.
7023 */
7024 FileChangeType.Changed = 2;
7025 /**
7026 * The file got deleted.
7027 */
7028 FileChangeType.Deleted = 3;
7029})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
7030var WatchKind;
7031(function (WatchKind) {
7032 /**
7033 * Interested in create events.
7034 */
7035 WatchKind.Create = 1;
7036 /**
7037 * Interested in change events
7038 */
7039 WatchKind.Change = 2;
7040 /**
7041 * Interested in delete events
7042 */
7043 WatchKind.Delete = 4;
7044})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
7045/**
7046 * Diagnostics notification are sent from the server to the client to signal
7047 * results of validation runs.
7048 */
7049var PublishDiagnosticsNotification;
7050(function (PublishDiagnosticsNotification) {
7051 PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');
7052})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
7053/**
7054 * How a completion was triggered
7055 */
7056var CompletionTriggerKind;
7057(function (CompletionTriggerKind) {
7058 /**
7059 * Completion was triggered by typing an identifier (24x7 code
7060 * complete), manual invocation (e.g Ctrl+Space) or via API.
7061 */
7062 CompletionTriggerKind.Invoked = 1;
7063 /**
7064 * Completion was triggered by a trigger character specified by
7065 * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
7066 */
7067 CompletionTriggerKind.TriggerCharacter = 2;
7068 /**
7069 * Completion was re-triggered as current completion list is incomplete
7070 */
7071 CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
7072})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
7073/**
7074 * Request to request completion at a given text document position. The request's
7075 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
7076 * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
7077 * or a Thenable that resolves to such.
7078 *
7079 * The request can delay the computation of the [`detail`](#CompletionItem.detail)
7080 * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
7081 * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
7082 * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
7083 */
7084var CompletionRequest;
7085(function (CompletionRequest) {
7086 CompletionRequest.method = 'textDocument/completion';
7087 CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
7088})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
7089/**
7090 * Request to resolve additional information for a given completion item.The request's
7091 * parameter is of type [CompletionItem](#CompletionItem) the response
7092 * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
7093 */
7094var CompletionResolveRequest;
7095(function (CompletionResolveRequest) {
7096 CompletionResolveRequest.method = 'completionItem/resolve';
7097 CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
7098})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
7099/**
7100 * Request to request hover information at a given text document position. The request's
7101 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
7102 * type [Hover](#Hover) or a Thenable that resolves to such.
7103 */
7104var HoverRequest;
7105(function (HoverRequest) {
7106 HoverRequest.method = 'textDocument/hover';
7107 HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
7108})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
7109/**
7110 * How a signature help was triggered.
7111 *
7112 * @since 3.15.0
7113 */
7114var SignatureHelpTriggerKind;
7115(function (SignatureHelpTriggerKind) {
7116 /**
7117 * Signature help was invoked manually by the user or by a command.
7118 */
7119 SignatureHelpTriggerKind.Invoked = 1;
7120 /**
7121 * Signature help was triggered by a trigger character.
7122 */
7123 SignatureHelpTriggerKind.TriggerCharacter = 2;
7124 /**
7125 * Signature help was triggered by the cursor moving or by the document content changing.
7126 */
7127 SignatureHelpTriggerKind.ContentChange = 3;
7128})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));
7129var SignatureHelpRequest;
7130(function (SignatureHelpRequest) {
7131 SignatureHelpRequest.method = 'textDocument/signatureHelp';
7132 SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
7133})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
7134/**
7135 * A request to resolve the definition location of a symbol at a given text
7136 * document position. The request's parameter is of type [TextDocumentPosition]
7137 * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
7138 * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
7139 * to such.
7140 */
7141var DefinitionRequest;
7142(function (DefinitionRequest) {
7143 DefinitionRequest.method = 'textDocument/definition';
7144 DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
7145})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
7146/**
7147 * A request to resolve project-wide references for the symbol denoted
7148 * by the given text document position. The request's parameter is of
7149 * type [ReferenceParams](#ReferenceParams) the response is of type
7150 * [Location[]](#Location) or a Thenable that resolves to such.
7151 */
7152var ReferencesRequest;
7153(function (ReferencesRequest) {
7154 ReferencesRequest.method = 'textDocument/references';
7155 ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
7156})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
7157/**
7158 * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
7159 * text document position. The request's parameter is of type [TextDocumentPosition]
7160 * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
7161 * (#DocumentHighlight) or a Thenable that resolves to such.
7162 */
7163var DocumentHighlightRequest;
7164(function (DocumentHighlightRequest) {
7165 DocumentHighlightRequest.method = 'textDocument/documentHighlight';
7166 DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
7167})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
7168/**
7169 * A request to list all symbols found in a given text document. The request's
7170 * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
7171 * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
7172 * that resolves to such.
7173 */
7174var DocumentSymbolRequest;
7175(function (DocumentSymbolRequest) {
7176 DocumentSymbolRequest.method = 'textDocument/documentSymbol';
7177 DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
7178})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
7179/**
7180 * A request to provide commands for the given text document and range.
7181 */
7182var CodeActionRequest;
7183(function (CodeActionRequest) {
7184 CodeActionRequest.method = 'textDocument/codeAction';
7185 CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
7186})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
7187/**
7188 * Request to resolve additional information for a given code action.The request's
7189 * parameter is of type [CodeAction](#CodeAction) the response
7190 * is of type [CodeAction](#CodeAction) or a Thenable that resolves to such.
7191 */
7192var CodeActionResolveRequest;
7193(function (CodeActionResolveRequest) {
7194 CodeActionResolveRequest.method = 'codeAction/resolve';
7195 CodeActionResolveRequest.type = new messages_1.ProtocolRequestType(CodeActionResolveRequest.method);
7196})(CodeActionResolveRequest = exports.CodeActionResolveRequest || (exports.CodeActionResolveRequest = {}));
7197/**
7198 * A request to list project-wide symbols matching the query string given
7199 * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
7200 * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
7201 * resolves to such.
7202 */
7203var WorkspaceSymbolRequest;
7204(function (WorkspaceSymbolRequest) {
7205 WorkspaceSymbolRequest.method = 'workspace/symbol';
7206 WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
7207})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
7208/**
7209 * A request to provide code lens for the given text document.
7210 */
7211var CodeLensRequest;
7212(function (CodeLensRequest) {
7213 CodeLensRequest.method = 'textDocument/codeLens';
7214 CodeLensRequest.type = new messages_1.ProtocolRequestType(CodeLensRequest.method);
7215})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
7216/**
7217 * A request to resolve a command for a given code lens.
7218 */
7219var CodeLensResolveRequest;
7220(function (CodeLensResolveRequest) {
7221 CodeLensResolveRequest.method = 'codeLens/resolve';
7222 CodeLensResolveRequest.type = new messages_1.ProtocolRequestType(CodeLensResolveRequest.method);
7223})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
7224/**
7225 * A request to refresh all code actions
7226 *
7227 * @since 3.16.0
7228 */
7229var CodeLensRefreshRequest;
7230(function (CodeLensRefreshRequest) {
7231 CodeLensRefreshRequest.method = `workspace/codeLens/refresh`;
7232 CodeLensRefreshRequest.type = new messages_1.ProtocolRequestType0(CodeLensRefreshRequest.method);
7233})(CodeLensRefreshRequest = exports.CodeLensRefreshRequest || (exports.CodeLensRefreshRequest = {}));
7234/**
7235 * A request to provide document links
7236 */
7237var DocumentLinkRequest;
7238(function (DocumentLinkRequest) {
7239 DocumentLinkRequest.method = 'textDocument/documentLink';
7240 DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
7241})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
7242/**
7243 * Request to resolve additional information for a given document link. The request's
7244 * parameter is of type [DocumentLink](#DocumentLink) the response
7245 * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
7246 */
7247var DocumentLinkResolveRequest;
7248(function (DocumentLinkResolveRequest) {
7249 DocumentLinkResolveRequest.method = 'documentLink/resolve';
7250 DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType(DocumentLinkResolveRequest.method);
7251})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
7252/**
7253 * A request to to format a whole document.
7254 */
7255var DocumentFormattingRequest;
7256(function (DocumentFormattingRequest) {
7257 DocumentFormattingRequest.method = 'textDocument/formatting';
7258 DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
7259})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
7260/**
7261 * A request to to format a range in a document.
7262 */
7263var DocumentRangeFormattingRequest;
7264(function (DocumentRangeFormattingRequest) {
7265 DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';
7266 DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
7267})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
7268/**
7269 * A request to format a document on type.
7270 */
7271var DocumentOnTypeFormattingRequest;
7272(function (DocumentOnTypeFormattingRequest) {
7273 DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';
7274 DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
7275})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
7276//---- Rename ----------------------------------------------
7277var PrepareSupportDefaultBehavior;
7278(function (PrepareSupportDefaultBehavior) {
7279 /**
7280 * The client's default behavior is to select the identifier
7281 * according the to language's syntax rule.
7282 */
7283 PrepareSupportDefaultBehavior.Identifier = 1;
7284})(PrepareSupportDefaultBehavior = exports.PrepareSupportDefaultBehavior || (exports.PrepareSupportDefaultBehavior = {}));
7285/**
7286 * A request to rename a symbol.
7287 */
7288var RenameRequest;
7289(function (RenameRequest) {
7290 RenameRequest.method = 'textDocument/rename';
7291 RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
7292})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
7293/**
7294 * A request to test and perform the setup necessary for a rename.
7295 *
7296 * @since 3.16 - support for default behavior
7297 */
7298var PrepareRenameRequest;
7299(function (PrepareRenameRequest) {
7300 PrepareRenameRequest.method = 'textDocument/prepareRename';
7301 PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
7302})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
7303/**
7304 * A request send from the client to the server to execute a command. The request might return
7305 * a workspace edit which the client will apply to the workspace.
7306 */
7307var ExecuteCommandRequest;
7308(function (ExecuteCommandRequest) {
7309 ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');
7310})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
7311/**
7312 * A request sent from the server to the client to modified certain resources.
7313 */
7314var ApplyWorkspaceEditRequest;
7315(function (ApplyWorkspaceEditRequest) {
7316 ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');
7317})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
7318//# sourceMappingURL=protocol.js.map
7319
7320/***/ }),
7321/* 31 */
7322/***/ ((__unused_webpack_module, exports) => {
7323
7324"use strict";
7325/* --------------------------------------------------------------------------------------------
7326 * Copyright (c) Microsoft Corporation. All rights reserved.
7327 * Licensed under the MIT License. See License.txt in the project root for license information.
7328 * ------------------------------------------------------------------------------------------ */
7329
7330Object.defineProperty(exports, "__esModule", ({ value: true }));
7331exports.objectLiteral = exports.typedArray = exports.stringArray = exports.array = exports.func = exports.error = exports.number = exports.string = exports.boolean = void 0;
7332function boolean(value) {
7333 return value === true || value === false;
7334}
7335exports.boolean = boolean;
7336function string(value) {
7337 return typeof value === 'string' || value instanceof String;
7338}
7339exports.string = string;
7340function number(value) {
7341 return typeof value === 'number' || value instanceof Number;
7342}
7343exports.number = number;
7344function error(value) {
7345 return value instanceof Error;
7346}
7347exports.error = error;
7348function func(value) {
7349 return typeof value === 'function';
7350}
7351exports.func = func;
7352function array(value) {
7353 return Array.isArray(value);
7354}
7355exports.array = array;
7356function stringArray(value) {
7357 return array(value) && value.every(elem => string(elem));
7358}
7359exports.stringArray = stringArray;
7360function typedArray(value, check) {
7361 return Array.isArray(value) && value.every(check);
7362}
7363exports.typedArray = typedArray;
7364function objectLiteral(value) {
7365 // Strictly speaking class instances pass this check as well. Since the LSP
7366 // doesn't use classes we ignore this for now. If we do we need to add something
7367 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
7368 return value !== null && typeof value === 'object';
7369}
7370exports.objectLiteral = objectLiteral;
7371//# sourceMappingURL=is.js.map
7372
7373/***/ }),
7374/* 32 */
7375/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7376
7377"use strict";
7378
7379/* --------------------------------------------------------------------------------------------
7380 * Copyright (c) Microsoft Corporation. All rights reserved.
7381 * Licensed under the MIT License. See License.txt in the project root for license information.
7382 * ------------------------------------------------------------------------------------------ */
7383Object.defineProperty(exports, "__esModule", ({ value: true }));
7384exports.ImplementationRequest = void 0;
7385const messages_1 = __webpack_require__(29);
7386// @ts-ignore: to avoid inlining LocatioLink as dynamic import
7387let __noDynamicImport;
7388/**
7389 * A request to resolve the implementation locations of a symbol at a given text
7390 * document position. The request's parameter is of type [TextDocumentPositioParams]
7391 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
7392 * Thenable that resolves to such.
7393 */
7394var ImplementationRequest;
7395(function (ImplementationRequest) {
7396 ImplementationRequest.method = 'textDocument/implementation';
7397 ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
7398})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
7399//# sourceMappingURL=protocol.implementation.js.map
7400
7401/***/ }),
7402/* 33 */
7403/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7404
7405"use strict";
7406
7407/* --------------------------------------------------------------------------------------------
7408 * Copyright (c) Microsoft Corporation. All rights reserved.
7409 * Licensed under the MIT License. See License.txt in the project root for license information.
7410 * ------------------------------------------------------------------------------------------ */
7411Object.defineProperty(exports, "__esModule", ({ value: true }));
7412exports.TypeDefinitionRequest = void 0;
7413const messages_1 = __webpack_require__(29);
7414// @ts-ignore: to avoid inlining LocatioLink as dynamic import
7415let __noDynamicImport;
7416/**
7417 * A request to resolve the type definition locations of a symbol at a given text
7418 * document position. The request's parameter is of type [TextDocumentPositioParams]
7419 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
7420 * Thenable that resolves to such.
7421 */
7422var TypeDefinitionRequest;
7423(function (TypeDefinitionRequest) {
7424 TypeDefinitionRequest.method = 'textDocument/typeDefinition';
7425 TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
7426})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
7427//# sourceMappingURL=protocol.typeDefinition.js.map
7428
7429/***/ }),
7430/* 34 */
7431/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7432
7433"use strict";
7434
7435/* --------------------------------------------------------------------------------------------
7436 * Copyright (c) Microsoft Corporation. All rights reserved.
7437 * Licensed under the MIT License. See License.txt in the project root for license information.
7438 * ------------------------------------------------------------------------------------------ */
7439Object.defineProperty(exports, "__esModule", ({ value: true }));
7440exports.DidChangeWorkspaceFoldersNotification = exports.WorkspaceFoldersRequest = void 0;
7441const messages_1 = __webpack_require__(29);
7442/**
7443 * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
7444 */
7445var WorkspaceFoldersRequest;
7446(function (WorkspaceFoldersRequest) {
7447 WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');
7448})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
7449/**
7450 * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
7451 * folder configuration changes.
7452 */
7453var DidChangeWorkspaceFoldersNotification;
7454(function (DidChangeWorkspaceFoldersNotification) {
7455 DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');
7456})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
7457//# sourceMappingURL=protocol.workspaceFolders.js.map
7458
7459/***/ }),
7460/* 35 */
7461/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7462
7463"use strict";
7464
7465/* --------------------------------------------------------------------------------------------
7466 * Copyright (c) Microsoft Corporation. All rights reserved.
7467 * Licensed under the MIT License. See License.txt in the project root for license information.
7468 * ------------------------------------------------------------------------------------------ */
7469Object.defineProperty(exports, "__esModule", ({ value: true }));
7470exports.ConfigurationRequest = void 0;
7471const messages_1 = __webpack_require__(29);
7472/**
7473 * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
7474 * configuration setting.
7475 *
7476 * This pull model replaces the old push model were the client signaled configuration change via an
7477 * event. If the server still needs to react to configuration changes (since the server caches the
7478 * result of `workspace/configuration` requests) the server should register for an empty configuration
7479 * change event and empty the cache if such an event is received.
7480 */
7481var ConfigurationRequest;
7482(function (ConfigurationRequest) {
7483 ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');
7484})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
7485//# sourceMappingURL=protocol.configuration.js.map
7486
7487/***/ }),
7488/* 36 */
7489/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7490
7491"use strict";
7492
7493/* --------------------------------------------------------------------------------------------
7494 * Copyright (c) Microsoft Corporation. All rights reserved.
7495 * Licensed under the MIT License. See License.txt in the project root for license information.
7496 * ------------------------------------------------------------------------------------------ */
7497Object.defineProperty(exports, "__esModule", ({ value: true }));
7498exports.ColorPresentationRequest = exports.DocumentColorRequest = void 0;
7499const messages_1 = __webpack_require__(29);
7500/**
7501 * A request to list all color symbols found in a given text document. The request's
7502 * parameter is of type [DocumentColorParams](#DocumentColorParams) the
7503 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
7504 * that resolves to such.
7505 */
7506var DocumentColorRequest;
7507(function (DocumentColorRequest) {
7508 DocumentColorRequest.method = 'textDocument/documentColor';
7509 DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
7510})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
7511/**
7512 * A request to list all presentation for a color. The request's
7513 * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
7514 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
7515 * that resolves to such.
7516 */
7517var ColorPresentationRequest;
7518(function (ColorPresentationRequest) {
7519 ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');
7520})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
7521//# sourceMappingURL=protocol.colorProvider.js.map
7522
7523/***/ }),
7524/* 37 */
7525/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7526
7527"use strict";
7528
7529/*---------------------------------------------------------------------------------------------
7530 * Copyright (c) Microsoft Corporation. All rights reserved.
7531 * Licensed under the MIT License. See License.txt in the project root for license information.
7532 *--------------------------------------------------------------------------------------------*/
7533Object.defineProperty(exports, "__esModule", ({ value: true }));
7534exports.FoldingRangeRequest = exports.FoldingRangeKind = void 0;
7535const messages_1 = __webpack_require__(29);
7536/**
7537 * Enum of known range kinds
7538 */
7539var FoldingRangeKind;
7540(function (FoldingRangeKind) {
7541 /**
7542 * Folding range for a comment
7543 */
7544 FoldingRangeKind["Comment"] = "comment";
7545 /**
7546 * Folding range for a imports or includes
7547 */
7548 FoldingRangeKind["Imports"] = "imports";
7549 /**
7550 * Folding range for a region (e.g. `#region`)
7551 */
7552 FoldingRangeKind["Region"] = "region";
7553})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
7554/**
7555 * A request to provide folding ranges in a document. The request's
7556 * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
7557 * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
7558 * that resolves to such.
7559 */
7560var FoldingRangeRequest;
7561(function (FoldingRangeRequest) {
7562 FoldingRangeRequest.method = 'textDocument/foldingRange';
7563 FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
7564})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
7565//# sourceMappingURL=protocol.foldingRange.js.map
7566
7567/***/ }),
7568/* 38 */
7569/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7570
7571"use strict";
7572
7573/* --------------------------------------------------------------------------------------------
7574 * Copyright (c) Microsoft Corporation. All rights reserved.
7575 * Licensed under the MIT License. See License.txt in the project root for license information.
7576 * ------------------------------------------------------------------------------------------ */
7577Object.defineProperty(exports, "__esModule", ({ value: true }));
7578exports.DeclarationRequest = void 0;
7579const messages_1 = __webpack_require__(29);
7580// @ts-ignore: to avoid inlining LocatioLink as dynamic import
7581let __noDynamicImport;
7582/**
7583 * A request to resolve the type definition locations of a symbol at a given text
7584 * document position. The request's parameter is of type [TextDocumentPositioParams]
7585 * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
7586 * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
7587 * to such.
7588 */
7589var DeclarationRequest;
7590(function (DeclarationRequest) {
7591 DeclarationRequest.method = 'textDocument/declaration';
7592 DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
7593})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
7594//# sourceMappingURL=protocol.declaration.js.map
7595
7596/***/ }),
7597/* 39 */
7598/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7599
7600"use strict";
7601
7602/*---------------------------------------------------------------------------------------------
7603 * Copyright (c) Microsoft Corporation. All rights reserved.
7604 * Licensed under the MIT License. See License.txt in the project root for license information.
7605 *--------------------------------------------------------------------------------------------*/
7606Object.defineProperty(exports, "__esModule", ({ value: true }));
7607exports.SelectionRangeRequest = void 0;
7608const messages_1 = __webpack_require__(29);
7609/**
7610 * A request to provide selection ranges in a document. The request's
7611 * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the
7612 * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable
7613 * that resolves to such.
7614 */
7615var SelectionRangeRequest;
7616(function (SelectionRangeRequest) {
7617 SelectionRangeRequest.method = 'textDocument/selectionRange';
7618 SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
7619})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));
7620//# sourceMappingURL=protocol.selectionRange.js.map
7621
7622/***/ }),
7623/* 40 */
7624/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7625
7626"use strict";
7627
7628/* --------------------------------------------------------------------------------------------
7629 * Copyright (c) Microsoft Corporation. All rights reserved.
7630 * Licensed under the MIT License. See License.txt in the project root for license information.
7631 * ------------------------------------------------------------------------------------------ */
7632Object.defineProperty(exports, "__esModule", ({ value: true }));
7633exports.WorkDoneProgressCancelNotification = exports.WorkDoneProgressCreateRequest = exports.WorkDoneProgress = void 0;
7634const vscode_jsonrpc_1 = __webpack_require__(7);
7635const messages_1 = __webpack_require__(29);
7636var WorkDoneProgress;
7637(function (WorkDoneProgress) {
7638 WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
7639 function is(value) {
7640 return value === WorkDoneProgress.type;
7641 }
7642 WorkDoneProgress.is = is;
7643})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));
7644/**
7645 * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
7646 * reporting from the server.
7647 */
7648var WorkDoneProgressCreateRequest;
7649(function (WorkDoneProgressCreateRequest) {
7650 WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');
7651})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));
7652/**
7653 * The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
7654 * initiated on the server side.
7655 */
7656var WorkDoneProgressCancelNotification;
7657(function (WorkDoneProgressCancelNotification) {
7658 WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');
7659})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));
7660//# sourceMappingURL=protocol.progress.js.map
7661
7662/***/ }),
7663/* 41 */
7664/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7665
7666"use strict";
7667
7668/* --------------------------------------------------------------------------------------------
7669 * Copyright (c) TypeFox and others. All rights reserved.
7670 * Licensed under the MIT License. See License.txt in the project root for license information.
7671 * ------------------------------------------------------------------------------------------ */
7672Object.defineProperty(exports, "__esModule", ({ value: true }));
7673exports.CallHierarchyOutgoingCallsRequest = exports.CallHierarchyIncomingCallsRequest = exports.CallHierarchyPrepareRequest = void 0;
7674const messages_1 = __webpack_require__(29);
7675/**
7676 * A request to result a `CallHierarchyItem` in a document at a given position.
7677 * Can be used as an input to a incoming or outgoing call hierarchy.
7678 *
7679 * @since 3.16.0
7680 */
7681var CallHierarchyPrepareRequest;
7682(function (CallHierarchyPrepareRequest) {
7683 CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';
7684 CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
7685})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));
7686/**
7687 * A request to resolve the incoming calls for a given `CallHierarchyItem`.
7688 *
7689 * @since 3.16.0
7690 */
7691var CallHierarchyIncomingCallsRequest;
7692(function (CallHierarchyIncomingCallsRequest) {
7693 CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';
7694 CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
7695})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));
7696/**
7697 * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
7698 *
7699 * @since 3.16.0
7700 */
7701var CallHierarchyOutgoingCallsRequest;
7702(function (CallHierarchyOutgoingCallsRequest) {
7703 CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';
7704 CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
7705})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));
7706//# sourceMappingURL=protocol.callHierarchy.js.map
7707
7708/***/ }),
7709/* 42 */
7710/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7711
7712"use strict";
7713
7714/* --------------------------------------------------------------------------------------------
7715 * Copyright (c) Microsoft Corporation. All rights reserved.
7716 * Licensed under the MIT License. See License.txt in the project root for license information.
7717 * ------------------------------------------------------------------------------------------ */
7718Object.defineProperty(exports, "__esModule", ({ value: true }));
7719exports.SemanticTokensRefreshRequest = exports.SemanticTokensRangeRequest = exports.SemanticTokensDeltaRequest = exports.SemanticTokensRequest = exports.SemanticTokensRegistrationType = exports.TokenFormat = exports.SemanticTokens = exports.SemanticTokenModifiers = exports.SemanticTokenTypes = void 0;
7720const messages_1 = __webpack_require__(29);
7721/**
7722 * A set of predefined token types. This set is not fixed
7723 * an clients can specify additional token types via the
7724 * corresponding client capabilities.
7725 *
7726 * @since 3.16.0
7727 */
7728var SemanticTokenTypes;
7729(function (SemanticTokenTypes) {
7730 SemanticTokenTypes["namespace"] = "namespace";
7731 /**
7732 * Represents a generic type. Acts as a fallback for types which can't be mapped to
7733 * a specific type like class or enum.
7734 */
7735 SemanticTokenTypes["type"] = "type";
7736 SemanticTokenTypes["class"] = "class";
7737 SemanticTokenTypes["enum"] = "enum";
7738 SemanticTokenTypes["interface"] = "interface";
7739 SemanticTokenTypes["struct"] = "struct";
7740 SemanticTokenTypes["typeParameter"] = "typeParameter";
7741 SemanticTokenTypes["parameter"] = "parameter";
7742 SemanticTokenTypes["variable"] = "variable";
7743 SemanticTokenTypes["property"] = "property";
7744 SemanticTokenTypes["enumMember"] = "enumMember";
7745 SemanticTokenTypes["event"] = "event";
7746 SemanticTokenTypes["function"] = "function";
7747 SemanticTokenTypes["method"] = "method";
7748 SemanticTokenTypes["macro"] = "macro";
7749 SemanticTokenTypes["keyword"] = "keyword";
7750 SemanticTokenTypes["modifier"] = "modifier";
7751 SemanticTokenTypes["comment"] = "comment";
7752 SemanticTokenTypes["string"] = "string";
7753 SemanticTokenTypes["number"] = "number";
7754 SemanticTokenTypes["regexp"] = "regexp";
7755 SemanticTokenTypes["operator"] = "operator";
7756})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));
7757/**
7758 * A set of predefined token modifiers. This set is not fixed
7759 * an clients can specify additional token types via the
7760 * corresponding client capabilities.
7761 *
7762 * @since 3.16.0
7763 */
7764var SemanticTokenModifiers;
7765(function (SemanticTokenModifiers) {
7766 SemanticTokenModifiers["declaration"] = "declaration";
7767 SemanticTokenModifiers["definition"] = "definition";
7768 SemanticTokenModifiers["readonly"] = "readonly";
7769 SemanticTokenModifiers["static"] = "static";
7770 SemanticTokenModifiers["deprecated"] = "deprecated";
7771 SemanticTokenModifiers["abstract"] = "abstract";
7772 SemanticTokenModifiers["async"] = "async";
7773 SemanticTokenModifiers["modification"] = "modification";
7774 SemanticTokenModifiers["documentation"] = "documentation";
7775 SemanticTokenModifiers["defaultLibrary"] = "defaultLibrary";
7776})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));
7777/**
7778 * @since 3.16.0
7779 */
7780var SemanticTokens;
7781(function (SemanticTokens) {
7782 function is(value) {
7783 const candidate = value;
7784 return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&
7785 Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');
7786 }
7787 SemanticTokens.is = is;
7788})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));
7789//------- 'textDocument/semanticTokens' -----
7790var TokenFormat;
7791(function (TokenFormat) {
7792 TokenFormat.Relative = 'relative';
7793})(TokenFormat = exports.TokenFormat || (exports.TokenFormat = {}));
7794var SemanticTokensRegistrationType;
7795(function (SemanticTokensRegistrationType) {
7796 SemanticTokensRegistrationType.method = 'textDocument/semanticTokens';
7797 SemanticTokensRegistrationType.type = new messages_1.RegistrationType(SemanticTokensRegistrationType.method);
7798})(SemanticTokensRegistrationType = exports.SemanticTokensRegistrationType || (exports.SemanticTokensRegistrationType = {}));
7799/**
7800 * @since 3.16.0
7801 */
7802var SemanticTokensRequest;
7803(function (SemanticTokensRequest) {
7804 SemanticTokensRequest.method = 'textDocument/semanticTokens/full';
7805 SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
7806})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));
7807/**
7808 * @since 3.16.0
7809 */
7810var SemanticTokensDeltaRequest;
7811(function (SemanticTokensDeltaRequest) {
7812 SemanticTokensDeltaRequest.method = 'textDocument/semanticTokens/full/delta';
7813 SemanticTokensDeltaRequest.type = new messages_1.ProtocolRequestType(SemanticTokensDeltaRequest.method);
7814})(SemanticTokensDeltaRequest = exports.SemanticTokensDeltaRequest || (exports.SemanticTokensDeltaRequest = {}));
7815/**
7816 * @since 3.16.0
7817 */
7818var SemanticTokensRangeRequest;
7819(function (SemanticTokensRangeRequest) {
7820 SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';
7821 SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
7822})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));
7823/**
7824 * @since 3.16.0
7825 */
7826var SemanticTokensRefreshRequest;
7827(function (SemanticTokensRefreshRequest) {
7828 SemanticTokensRefreshRequest.method = `workspace/semanticTokens/refresh`;
7829 SemanticTokensRefreshRequest.type = new messages_1.ProtocolRequestType0(SemanticTokensRefreshRequest.method);
7830})(SemanticTokensRefreshRequest = exports.SemanticTokensRefreshRequest || (exports.SemanticTokensRefreshRequest = {}));
7831//# sourceMappingURL=protocol.semanticTokens.js.map
7832
7833/***/ }),
7834/* 43 */
7835/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7836
7837"use strict";
7838
7839/* --------------------------------------------------------------------------------------------
7840 * Copyright (c) Microsoft Corporation. All rights reserved.
7841 * Licensed under the MIT License. See License.txt in the project root for license information.
7842 * ------------------------------------------------------------------------------------------ */
7843Object.defineProperty(exports, "__esModule", ({ value: true }));
7844exports.ShowDocumentRequest = void 0;
7845const messages_1 = __webpack_require__(29);
7846/**
7847 * A request to show a document. This request might open an
7848 * external program depending on the value of the URI to open.
7849 * For example a request to open `https://code.visualstudio.com/`
7850 * will very likely open the URI in a WEB browser.
7851 *
7852 * @since 3.16.0
7853*/
7854var ShowDocumentRequest;
7855(function (ShowDocumentRequest) {
7856 ShowDocumentRequest.method = 'window/showDocument';
7857 ShowDocumentRequest.type = new messages_1.ProtocolRequestType(ShowDocumentRequest.method);
7858})(ShowDocumentRequest = exports.ShowDocumentRequest || (exports.ShowDocumentRequest = {}));
7859//# sourceMappingURL=protocol.showDocument.js.map
7860
7861/***/ }),
7862/* 44 */
7863/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7864
7865"use strict";
7866
7867/*---------------------------------------------------------------------------------------------
7868 * Copyright (c) Microsoft Corporation. All rights reserved.
7869 * Licensed under the MIT License. See License.txt in the project root for license information.
7870 *--------------------------------------------------------------------------------------------*/
7871Object.defineProperty(exports, "__esModule", ({ value: true }));
7872exports.LinkedEditingRangeRequest = void 0;
7873const messages_1 = __webpack_require__(29);
7874/**
7875 * A request to provide ranges that can be edited together.
7876 *
7877 * @since 3.16.0
7878 */
7879var LinkedEditingRangeRequest;
7880(function (LinkedEditingRangeRequest) {
7881 LinkedEditingRangeRequest.method = 'textDocument/linkedEditingRange';
7882 LinkedEditingRangeRequest.type = new messages_1.ProtocolRequestType(LinkedEditingRangeRequest.method);
7883})(LinkedEditingRangeRequest = exports.LinkedEditingRangeRequest || (exports.LinkedEditingRangeRequest = {}));
7884//# sourceMappingURL=protocol.linkedEditingRange.js.map
7885
7886/***/ }),
7887/* 45 */
7888/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7889
7890"use strict";
7891
7892/* --------------------------------------------------------------------------------------------
7893 * Copyright (c) Microsoft Corporation. All rights reserved.
7894 * Licensed under the MIT License. See License.txt in the project root for license information.
7895 * ------------------------------------------------------------------------------------------ */
7896Object.defineProperty(exports, "__esModule", ({ value: true }));
7897exports.WillDeleteFilesRequest = exports.DidDeleteFilesNotification = exports.DidRenameFilesNotification = exports.WillRenameFilesRequest = exports.DidCreateFilesNotification = exports.WillCreateFilesRequest = exports.FileOperationPatternKind = void 0;
7898const messages_1 = __webpack_require__(29);
7899/**
7900 * A pattern kind describing if a glob pattern matches a file a folder or
7901 * both.
7902 *
7903 * @since 3.16.0
7904 */
7905var FileOperationPatternKind;
7906(function (FileOperationPatternKind) {
7907 /**
7908 * The pattern matches a file only.
7909 */
7910 FileOperationPatternKind.file = 'file';
7911 /**
7912 * The pattern matches a folder only.
7913 */
7914 FileOperationPatternKind.folder = 'folder';
7915})(FileOperationPatternKind = exports.FileOperationPatternKind || (exports.FileOperationPatternKind = {}));
7916/**
7917 * The will create files request is sent from the client to the server before files are actually
7918 * created as long as the creation is triggered from within the client.
7919 *
7920 * @since 3.16.0
7921 */
7922var WillCreateFilesRequest;
7923(function (WillCreateFilesRequest) {
7924 WillCreateFilesRequest.method = 'workspace/willCreateFiles';
7925 WillCreateFilesRequest.type = new messages_1.ProtocolRequestType(WillCreateFilesRequest.method);
7926})(WillCreateFilesRequest = exports.WillCreateFilesRequest || (exports.WillCreateFilesRequest = {}));
7927/**
7928 * The did create files notification is sent from the client to the server when
7929 * files were created from within the client.
7930 *
7931 * @since 3.16.0
7932 */
7933var DidCreateFilesNotification;
7934(function (DidCreateFilesNotification) {
7935 DidCreateFilesNotification.method = 'workspace/didCreateFiles';
7936 DidCreateFilesNotification.type = new messages_1.ProtocolNotificationType(DidCreateFilesNotification.method);
7937})(DidCreateFilesNotification = exports.DidCreateFilesNotification || (exports.DidCreateFilesNotification = {}));
7938/**
7939 * The will rename files request is sent from the client to the server before files are actually
7940 * renamed as long as the rename is triggered from within the client.
7941 *
7942 * @since 3.16.0
7943 */
7944var WillRenameFilesRequest;
7945(function (WillRenameFilesRequest) {
7946 WillRenameFilesRequest.method = 'workspace/willRenameFiles';
7947 WillRenameFilesRequest.type = new messages_1.ProtocolRequestType(WillRenameFilesRequest.method);
7948})(WillRenameFilesRequest = exports.WillRenameFilesRequest || (exports.WillRenameFilesRequest = {}));
7949/**
7950 * The did rename files notification is sent from the client to the server when
7951 * files were renamed from within the client.
7952 *
7953 * @since 3.16.0
7954 */
7955var DidRenameFilesNotification;
7956(function (DidRenameFilesNotification) {
7957 DidRenameFilesNotification.method = 'workspace/didRenameFiles';
7958 DidRenameFilesNotification.type = new messages_1.ProtocolNotificationType(DidRenameFilesNotification.method);
7959})(DidRenameFilesNotification = exports.DidRenameFilesNotification || (exports.DidRenameFilesNotification = {}));
7960/**
7961 * The will delete files request is sent from the client to the server before files are actually
7962 * deleted as long as the deletion is triggered from within the client.
7963 *
7964 * @since 3.16.0
7965 */
7966var DidDeleteFilesNotification;
7967(function (DidDeleteFilesNotification) {
7968 DidDeleteFilesNotification.method = 'workspace/didDeleteFiles';
7969 DidDeleteFilesNotification.type = new messages_1.ProtocolNotificationType(DidDeleteFilesNotification.method);
7970})(DidDeleteFilesNotification = exports.DidDeleteFilesNotification || (exports.DidDeleteFilesNotification = {}));
7971/**
7972 * The did delete files notification is sent from the client to the server when
7973 * files were deleted from within the client.
7974 *
7975 * @since 3.16.0
7976 */
7977var WillDeleteFilesRequest;
7978(function (WillDeleteFilesRequest) {
7979 WillDeleteFilesRequest.method = 'workspace/willDeleteFiles';
7980 WillDeleteFilesRequest.type = new messages_1.ProtocolRequestType(WillDeleteFilesRequest.method);
7981})(WillDeleteFilesRequest = exports.WillDeleteFilesRequest || (exports.WillDeleteFilesRequest = {}));
7982//# sourceMappingURL=protocol.fileOperations.js.map
7983
7984/***/ }),
7985/* 46 */
7986/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
7987
7988"use strict";
7989
7990/* --------------------------------------------------------------------------------------------
7991 * Copyright (c) Microsoft Corporation. All rights reserved.
7992 * Licensed under the MIT License. See License.txt in the project root for license information.
7993 * ------------------------------------------------------------------------------------------ */
7994Object.defineProperty(exports, "__esModule", ({ value: true }));
7995exports.MonikerRequest = exports.MonikerKind = exports.UniquenessLevel = void 0;
7996const messages_1 = __webpack_require__(29);
7997/**
7998 * Moniker uniqueness level to define scope of the moniker.
7999 *
8000 * @since 3.16.0
8001 */
8002var UniquenessLevel;
8003(function (UniquenessLevel) {
8004 /**
8005 * The moniker is only unique inside a document
8006 */
8007 UniquenessLevel["document"] = "document";
8008 /**
8009 * The moniker is unique inside a project for which a dump got created
8010 */
8011 UniquenessLevel["project"] = "project";
8012 /**
8013 * The moniker is unique inside the group to which a project belongs
8014 */
8015 UniquenessLevel["group"] = "group";
8016 /**
8017 * The moniker is unique inside the moniker scheme.
8018 */
8019 UniquenessLevel["scheme"] = "scheme";
8020 /**
8021 * The moniker is globally unique
8022 */
8023 UniquenessLevel["global"] = "global";
8024})(UniquenessLevel = exports.UniquenessLevel || (exports.UniquenessLevel = {}));
8025/**
8026 * The moniker kind.
8027 *
8028 * @since 3.16.0
8029 */
8030var MonikerKind;
8031(function (MonikerKind) {
8032 /**
8033 * The moniker represent a symbol that is imported into a project
8034 */
8035 MonikerKind["import"] = "import";
8036 /**
8037 * The moniker represents a symbol that is exported from a project
8038 */
8039 MonikerKind["export"] = "export";
8040 /**
8041 * The moniker represents a symbol that is local to a project (e.g. a local
8042 * variable of a function, a class not visible outside the project, ...)
8043 */
8044 MonikerKind["local"] = "local";
8045})(MonikerKind = exports.MonikerKind || (exports.MonikerKind = {}));
8046/**
8047 * A request to get the moniker of a symbol at a given text document position.
8048 * The request parameter is of type [TextDocumentPositionParams](#TextDocumentPositionParams).
8049 * The response is of type [Moniker[]](#Moniker[]) or `null`.
8050 */
8051var MonikerRequest;
8052(function (MonikerRequest) {
8053 MonikerRequest.method = 'textDocument/moniker';
8054 MonikerRequest.type = new messages_1.ProtocolRequestType(MonikerRequest.method);
8055})(MonikerRequest = exports.MonikerRequest || (exports.MonikerRequest = {}));
8056//# sourceMappingURL=protocol.moniker.js.map
8057
8058/***/ }),
8059/* 47 */
8060/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8061
8062"use strict";
8063
8064/* --------------------------------------------------------------------------------------------
8065 * Copyright (c) Microsoft Corporation. All rights reserved.
8066 * Licensed under the MIT License. See License.txt in the project root for license information.
8067 * ------------------------------------------------------------------------------------------ */
8068Object.defineProperty(exports, "__esModule", ({ value: true }));
8069exports.createProtocolConnection = void 0;
8070const vscode_jsonrpc_1 = __webpack_require__(7);
8071function createProtocolConnection(input, output, logger, options) {
8072 if (vscode_jsonrpc_1.ConnectionStrategy.is(options)) {
8073 options = { connectionStrategy: options };
8074 }
8075 return vscode_jsonrpc_1.createMessageConnection(input, output, logger, options);
8076}
8077exports.createProtocolConnection = createProtocolConnection;
8078//# sourceMappingURL=connection.js.map
8079
8080/***/ }),
8081/* 48 */
8082/***/ ((__unused_webpack_module, exports) => {
8083
8084"use strict";
8085
8086/*---------------------------------------------------------------------------------------------
8087 * Copyright (c) Microsoft Corporation. All rights reserved.
8088 * Licensed under the MIT License. See License.txt in the project root for license information.
8089 *--------------------------------------------------------------------------------------------*/
8090Object.defineProperty(exports, "__esModule", ({ value: true }));
8091exports.generateUuid = exports.parse = exports.isUUID = exports.v4 = exports.empty = void 0;
8092class ValueUUID {
8093 constructor(_value) {
8094 this._value = _value;
8095 // empty
8096 }
8097 asHex() {
8098 return this._value;
8099 }
8100 equals(other) {
8101 return this.asHex() === other.asHex();
8102 }
8103}
8104class V4UUID extends ValueUUID {
8105 constructor() {
8106 super([
8107 V4UUID._randomHex(),
8108 V4UUID._randomHex(),
8109 V4UUID._randomHex(),
8110 V4UUID._randomHex(),
8111 V4UUID._randomHex(),
8112 V4UUID._randomHex(),
8113 V4UUID._randomHex(),
8114 V4UUID._randomHex(),
8115 '-',
8116 V4UUID._randomHex(),
8117 V4UUID._randomHex(),
8118 V4UUID._randomHex(),
8119 V4UUID._randomHex(),
8120 '-',
8121 '4',
8122 V4UUID._randomHex(),
8123 V4UUID._randomHex(),
8124 V4UUID._randomHex(),
8125 '-',
8126 V4UUID._oneOf(V4UUID._timeHighBits),
8127 V4UUID._randomHex(),
8128 V4UUID._randomHex(),
8129 V4UUID._randomHex(),
8130 '-',
8131 V4UUID._randomHex(),
8132 V4UUID._randomHex(),
8133 V4UUID._randomHex(),
8134 V4UUID._randomHex(),
8135 V4UUID._randomHex(),
8136 V4UUID._randomHex(),
8137 V4UUID._randomHex(),
8138 V4UUID._randomHex(),
8139 V4UUID._randomHex(),
8140 V4UUID._randomHex(),
8141 V4UUID._randomHex(),
8142 V4UUID._randomHex(),
8143 ].join(''));
8144 }
8145 static _oneOf(array) {
8146 return array[Math.floor(array.length * Math.random())];
8147 }
8148 static _randomHex() {
8149 return V4UUID._oneOf(V4UUID._chars);
8150 }
8151}
8152V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
8153V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
8154/**
8155 * An empty UUID that contains only zeros.
8156 */
8157exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
8158function v4() {
8159 return new V4UUID();
8160}
8161exports.v4 = v4;
8162const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
8163function isUUID(value) {
8164 return _UUIDPattern.test(value);
8165}
8166exports.isUUID = isUUID;
8167/**
8168 * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
8169 * @param value A uuid string.
8170 */
8171function parse(value) {
8172 if (!isUUID(value)) {
8173 throw new Error('invalid uuid');
8174 }
8175 return new ValueUUID(value);
8176}
8177exports.parse = parse;
8178function generateUuid() {
8179 return v4().asHex();
8180}
8181exports.generateUuid = generateUuid;
8182//# sourceMappingURL=uuid.js.map
8183
8184/***/ }),
8185/* 49 */
8186/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8187
8188"use strict";
8189
8190/* --------------------------------------------------------------------------------------------
8191 * Copyright (c) Microsoft Corporation. All rights reserved.
8192 * Licensed under the MIT License. See License.txt in the project root for license information.
8193 * ------------------------------------------------------------------------------------------ */
8194Object.defineProperty(exports, "__esModule", ({ value: true }));
8195exports.attachPartialResult = exports.ProgressFeature = exports.attachWorkDone = void 0;
8196const vscode_languageserver_protocol_1 = __webpack_require__(5);
8197const uuid_1 = __webpack_require__(48);
8198class WorkDoneProgressReporterImpl {
8199 constructor(_connection, _token) {
8200 this._connection = _connection;
8201 this._token = _token;
8202 WorkDoneProgressReporterImpl.Instances.set(this._token, this);
8203 }
8204 begin(title, percentage, message, cancellable) {
8205 let param = {
8206 kind: 'begin',
8207 title,
8208 percentage,
8209 message,
8210 cancellable
8211 };
8212 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
8213 }
8214 report(arg0, arg1) {
8215 let param = {
8216 kind: 'report'
8217 };
8218 if (typeof arg0 === 'number') {
8219 param.percentage = arg0;
8220 if (arg1 !== undefined) {
8221 param.message = arg1;
8222 }
8223 }
8224 else {
8225 param.message = arg0;
8226 }
8227 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
8228 }
8229 done() {
8230 WorkDoneProgressReporterImpl.Instances.delete(this._token);
8231 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
8232 }
8233}
8234WorkDoneProgressReporterImpl.Instances = new Map();
8235class WorkDoneProgressServerReporterImpl extends WorkDoneProgressReporterImpl {
8236 constructor(connection, token) {
8237 super(connection, token);
8238 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
8239 }
8240 get token() {
8241 return this._source.token;
8242 }
8243 done() {
8244 this._source.dispose();
8245 super.done();
8246 }
8247 cancel() {
8248 this._source.cancel();
8249 }
8250}
8251class NullProgressReporter {
8252 constructor() {
8253 }
8254 begin() {
8255 }
8256 report() {
8257 }
8258 done() {
8259 }
8260}
8261class NullProgressServerReporter extends NullProgressReporter {
8262 constructor() {
8263 super();
8264 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
8265 }
8266 get token() {
8267 return this._source.token;
8268 }
8269 done() {
8270 this._source.dispose();
8271 }
8272 cancel() {
8273 this._source.cancel();
8274 }
8275}
8276function attachWorkDone(connection, params) {
8277 if (params === undefined || params.workDoneToken === undefined) {
8278 return new NullProgressReporter();
8279 }
8280 const token = params.workDoneToken;
8281 delete params.workDoneToken;
8282 return new WorkDoneProgressReporterImpl(connection, token);
8283}
8284exports.attachWorkDone = attachWorkDone;
8285const ProgressFeature = (Base) => {
8286 return class extends Base {
8287 constructor() {
8288 super();
8289 this._progressSupported = false;
8290 }
8291 initialize(capabilities) {
8292 var _a;
8293 if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
8294 this._progressSupported = true;
8295 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
8296 let progress = WorkDoneProgressReporterImpl.Instances.get(params.token);
8297 if (progress instanceof WorkDoneProgressServerReporterImpl || progress instanceof NullProgressServerReporter) {
8298 progress.cancel();
8299 }
8300 });
8301 }
8302 }
8303 attachWorkDoneProgress(token) {
8304 if (token === undefined) {
8305 return new NullProgressReporter();
8306 }
8307 else {
8308 return new WorkDoneProgressReporterImpl(this.connection, token);
8309 }
8310 }
8311 createWorkDoneProgress() {
8312 if (this._progressSupported) {
8313 const token = uuid_1.generateUuid();
8314 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
8315 const result = new WorkDoneProgressServerReporterImpl(this.connection, token);
8316 return result;
8317 });
8318 }
8319 else {
8320 return Promise.resolve(new NullProgressServerReporter());
8321 }
8322 }
8323 };
8324};
8325exports.ProgressFeature = ProgressFeature;
8326var ResultProgress;
8327(function (ResultProgress) {
8328 ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
8329})(ResultProgress || (ResultProgress = {}));
8330class ResultProgressReporterImpl {
8331 constructor(_connection, _token) {
8332 this._connection = _connection;
8333 this._token = _token;
8334 }
8335 report(data) {
8336 this._connection.sendProgress(ResultProgress.type, this._token, data);
8337 }
8338}
8339function attachPartialResult(connection, params) {
8340 if (params === undefined || params.partialResultToken === undefined) {
8341 return undefined;
8342 }
8343 const token = params.partialResultToken;
8344 delete params.partialResultToken;
8345 return new ResultProgressReporterImpl(connection, token);
8346}
8347exports.attachPartialResult = attachPartialResult;
8348//# sourceMappingURL=progress.js.map
8349
8350/***/ }),
8351/* 50 */
8352/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8353
8354"use strict";
8355
8356/* --------------------------------------------------------------------------------------------
8357 * Copyright (c) Microsoft Corporation. All rights reserved.
8358 * Licensed under the MIT License. See License.txt in the project root for license information.
8359 * ------------------------------------------------------------------------------------------ */
8360Object.defineProperty(exports, "__esModule", ({ value: true }));
8361exports.ConfigurationFeature = void 0;
8362const vscode_languageserver_protocol_1 = __webpack_require__(5);
8363const Is = __webpack_require__(3);
8364const ConfigurationFeature = (Base) => {
8365 return class extends Base {
8366 getConfiguration(arg) {
8367 if (!arg) {
8368 return this._getConfiguration({});
8369 }
8370 else if (Is.string(arg)) {
8371 return this._getConfiguration({ section: arg });
8372 }
8373 else {
8374 return this._getConfiguration(arg);
8375 }
8376 }
8377 _getConfiguration(arg) {
8378 let params = {
8379 items: Array.isArray(arg) ? arg : [arg]
8380 };
8381 return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
8382 return Array.isArray(arg) ? result : result[0];
8383 });
8384 }
8385 };
8386};
8387exports.ConfigurationFeature = ConfigurationFeature;
8388//# sourceMappingURL=configuration.js.map
8389
8390/***/ }),
8391/* 51 */
8392/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8393
8394"use strict";
8395/* --------------------------------------------------------------------------------------------
8396 * Copyright (c) Microsoft Corporation. All rights reserved.
8397 * Licensed under the MIT License. See License.txt in the project root for license information.
8398 * ------------------------------------------------------------------------------------------ */
8399
8400Object.defineProperty(exports, "__esModule", ({ value: true }));
8401exports.WorkspaceFoldersFeature = void 0;
8402const vscode_languageserver_protocol_1 = __webpack_require__(5);
8403const WorkspaceFoldersFeature = (Base) => {
8404 return class extends Base {
8405 initialize(capabilities) {
8406 let workspaceCapabilities = capabilities.workspace;
8407 if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
8408 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
8409 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
8410 this._onDidChangeWorkspaceFolders.fire(params.event);
8411 });
8412 }
8413 }
8414 getWorkspaceFolders() {
8415 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
8416 }
8417 get onDidChangeWorkspaceFolders() {
8418 if (!this._onDidChangeWorkspaceFolders) {
8419 throw new Error('Client doesn\'t support sending workspace folder change events.');
8420 }
8421 if (!this._unregistration) {
8422 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
8423 }
8424 return this._onDidChangeWorkspaceFolders.event;
8425 }
8426 };
8427};
8428exports.WorkspaceFoldersFeature = WorkspaceFoldersFeature;
8429//# sourceMappingURL=workspaceFolders.js.map
8430
8431/***/ }),
8432/* 52 */
8433/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8434
8435"use strict";
8436/* --------------------------------------------------------------------------------------------
8437 * Copyright (c) Microsoft Corporation. All rights reserved.
8438 * Licensed under the MIT License. See License.txt in the project root for license information.
8439 * ------------------------------------------------------------------------------------------ */
8440
8441Object.defineProperty(exports, "__esModule", ({ value: true }));
8442exports.CallHierarchyFeature = void 0;
8443const vscode_languageserver_protocol_1 = __webpack_require__(5);
8444const CallHierarchyFeature = (Base) => {
8445 return class extends Base {
8446 get callHierarchy() {
8447 return {
8448 onPrepare: (handler) => {
8449 this.connection.onRequest(vscode_languageserver_protocol_1.CallHierarchyPrepareRequest.type, (params, cancel) => {
8450 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
8451 });
8452 },
8453 onIncomingCalls: (handler) => {
8454 const type = vscode_languageserver_protocol_1.CallHierarchyIncomingCallsRequest.type;
8455 this.connection.onRequest(type, (params, cancel) => {
8456 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8457 });
8458 },
8459 onOutgoingCalls: (handler) => {
8460 const type = vscode_languageserver_protocol_1.CallHierarchyOutgoingCallsRequest.type;
8461 this.connection.onRequest(type, (params, cancel) => {
8462 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8463 });
8464 }
8465 };
8466 }
8467 };
8468};
8469exports.CallHierarchyFeature = CallHierarchyFeature;
8470//# sourceMappingURL=callHierarchy.js.map
8471
8472/***/ }),
8473/* 53 */
8474/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8475
8476"use strict";
8477
8478/* --------------------------------------------------------------------------------------------
8479 * Copyright (c) Microsoft Corporation. All rights reserved.
8480 * Licensed under the MIT License. See License.txt in the project root for license information.
8481 * ------------------------------------------------------------------------------------------ */
8482Object.defineProperty(exports, "__esModule", ({ value: true }));
8483exports.SemanticTokensBuilder = exports.SemanticTokensFeature = void 0;
8484const vscode_languageserver_protocol_1 = __webpack_require__(5);
8485const SemanticTokensFeature = (Base) => {
8486 return class extends Base {
8487 get semanticTokens() {
8488 return {
8489 on: (handler) => {
8490 const type = vscode_languageserver_protocol_1.SemanticTokensRequest.type;
8491 this.connection.onRequest(type, (params, cancel) => {
8492 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8493 });
8494 },
8495 onDelta: (handler) => {
8496 const type = vscode_languageserver_protocol_1.SemanticTokensDeltaRequest.type;
8497 this.connection.onRequest(type, (params, cancel) => {
8498 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8499 });
8500 },
8501 onRange: (handler) => {
8502 const type = vscode_languageserver_protocol_1.SemanticTokensRangeRequest.type;
8503 this.connection.onRequest(type, (params, cancel) => {
8504 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8505 });
8506 }
8507 };
8508 }
8509 };
8510};
8511exports.SemanticTokensFeature = SemanticTokensFeature;
8512class SemanticTokensBuilder {
8513 constructor() {
8514 this._prevData = undefined;
8515 this.initialize();
8516 }
8517 initialize() {
8518 this._id = Date.now();
8519 this._prevLine = 0;
8520 this._prevChar = 0;
8521 this._data = [];
8522 this._dataLen = 0;
8523 }
8524 push(line, char, length, tokenType, tokenModifiers) {
8525 let pushLine = line;
8526 let pushChar = char;
8527 if (this._dataLen > 0) {
8528 pushLine -= this._prevLine;
8529 if (pushLine === 0) {
8530 pushChar -= this._prevChar;
8531 }
8532 }
8533 this._data[this._dataLen++] = pushLine;
8534 this._data[this._dataLen++] = pushChar;
8535 this._data[this._dataLen++] = length;
8536 this._data[this._dataLen++] = tokenType;
8537 this._data[this._dataLen++] = tokenModifiers;
8538 this._prevLine = line;
8539 this._prevChar = char;
8540 }
8541 get id() {
8542 return this._id.toString();
8543 }
8544 previousResult(id) {
8545 if (this.id === id) {
8546 this._prevData = this._data;
8547 }
8548 this.initialize();
8549 }
8550 build() {
8551 this._prevData = undefined;
8552 return {
8553 resultId: this.id,
8554 data: this._data
8555 };
8556 }
8557 canBuildEdits() {
8558 return this._prevData !== undefined;
8559 }
8560 buildEdits() {
8561 if (this._prevData !== undefined) {
8562 const prevDataLength = this._prevData.length;
8563 const dataLength = this._data.length;
8564 let startIndex = 0;
8565 while (startIndex < dataLength && startIndex < prevDataLength && this._prevData[startIndex] === this._data[startIndex]) {
8566 startIndex++;
8567 }
8568 if (startIndex < dataLength && startIndex < prevDataLength) {
8569 // Find end index
8570 let endIndex = 0;
8571 while (endIndex < dataLength && endIndex < prevDataLength && this._prevData[prevDataLength - 1 - endIndex] === this._data[dataLength - 1 - endIndex]) {
8572 endIndex++;
8573 }
8574 const newData = this._data.slice(startIndex, dataLength - endIndex);
8575 const result = {
8576 resultId: this.id,
8577 edits: [
8578 { start: startIndex, deleteCount: prevDataLength - endIndex - startIndex, data: newData }
8579 ]
8580 };
8581 return result;
8582 }
8583 else if (startIndex < dataLength) {
8584 return { resultId: this.id, edits: [
8585 { start: startIndex, deleteCount: 0, data: this._data.slice(startIndex) }
8586 ] };
8587 }
8588 else if (startIndex < prevDataLength) {
8589 return { resultId: this.id, edits: [
8590 { start: startIndex, deleteCount: prevDataLength - startIndex }
8591 ] };
8592 }
8593 else {
8594 return { resultId: this.id, edits: [] };
8595 }
8596 }
8597 else {
8598 return this.build();
8599 }
8600 }
8601}
8602exports.SemanticTokensBuilder = SemanticTokensBuilder;
8603//# sourceMappingURL=semanticTokens.js.map
8604
8605/***/ }),
8606/* 54 */
8607/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8608
8609"use strict";
8610
8611/* --------------------------------------------------------------------------------------------
8612 * Copyright (c) Microsoft Corporation. All rights reserved.
8613 * Licensed under the MIT License. See License.txt in the project root for license information.
8614 * ------------------------------------------------------------------------------------------ */
8615Object.defineProperty(exports, "__esModule", ({ value: true }));
8616exports.ShowDocumentFeature = void 0;
8617const vscode_languageserver_protocol_1 = __webpack_require__(5);
8618const ShowDocumentFeature = (Base) => {
8619 return class extends Base {
8620 showDocument(params) {
8621 return this.connection.sendRequest(vscode_languageserver_protocol_1.ShowDocumentRequest.type, params);
8622 }
8623 };
8624};
8625exports.ShowDocumentFeature = ShowDocumentFeature;
8626//# sourceMappingURL=showDocument.js.map
8627
8628/***/ }),
8629/* 55 */
8630/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8631
8632"use strict";
8633
8634/* --------------------------------------------------------------------------------------------
8635 * Copyright (c) Microsoft Corporation. All rights reserved.
8636 * Licensed under the MIT License. See License.txt in the project root for license information.
8637 * ------------------------------------------------------------------------------------------ */
8638Object.defineProperty(exports, "__esModule", ({ value: true }));
8639exports.FileOperationsFeature = void 0;
8640const vscode_languageserver_protocol_1 = __webpack_require__(5);
8641const FileOperationsFeature = (Base) => {
8642 return class extends Base {
8643 onDidCreateFiles(handler) {
8644 this.connection.onNotification(vscode_languageserver_protocol_1.DidCreateFilesNotification.type, (params) => {
8645 handler(params);
8646 });
8647 }
8648 onDidRenameFiles(handler) {
8649 this.connection.onNotification(vscode_languageserver_protocol_1.DidRenameFilesNotification.type, (params) => {
8650 handler(params);
8651 });
8652 }
8653 onDidDeleteFiles(handler) {
8654 this.connection.onNotification(vscode_languageserver_protocol_1.DidDeleteFilesNotification.type, (params) => {
8655 handler(params);
8656 });
8657 }
8658 onWillCreateFiles(handler) {
8659 return this.connection.onRequest(vscode_languageserver_protocol_1.WillCreateFilesRequest.type, (params, cancel) => {
8660 return handler(params, cancel);
8661 });
8662 }
8663 onWillRenameFiles(handler) {
8664 return this.connection.onRequest(vscode_languageserver_protocol_1.WillRenameFilesRequest.type, (params, cancel) => {
8665 return handler(params, cancel);
8666 });
8667 }
8668 onWillDeleteFiles(handler) {
8669 return this.connection.onRequest(vscode_languageserver_protocol_1.WillDeleteFilesRequest.type, (params, cancel) => {
8670 return handler(params, cancel);
8671 });
8672 }
8673 };
8674};
8675exports.FileOperationsFeature = FileOperationsFeature;
8676//# sourceMappingURL=fileOperations.js.map
8677
8678/***/ }),
8679/* 56 */
8680/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8681
8682"use strict";
8683
8684/* --------------------------------------------------------------------------------------------
8685 * Copyright (c) Microsoft Corporation. All rights reserved.
8686 * Licensed under the MIT License. See License.txt in the project root for license information.
8687 * ------------------------------------------------------------------------------------------ */
8688Object.defineProperty(exports, "__esModule", ({ value: true }));
8689exports.LinkedEditingRangeFeature = void 0;
8690const vscode_languageserver_protocol_1 = __webpack_require__(5);
8691const LinkedEditingRangeFeature = (Base) => {
8692 return class extends Base {
8693 onLinkedEditingRange(handler) {
8694 this.connection.onRequest(vscode_languageserver_protocol_1.LinkedEditingRangeRequest.type, (params, cancel) => {
8695 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
8696 });
8697 }
8698 };
8699};
8700exports.LinkedEditingRangeFeature = LinkedEditingRangeFeature;
8701//# sourceMappingURL=linkedEditingRange.js.map
8702
8703/***/ }),
8704/* 57 */
8705/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8706
8707"use strict";
8708/* --------------------------------------------------------------------------------------------
8709 * Copyright (c) Microsoft Corporation. All rights reserved.
8710 * Licensed under the MIT License. See License.txt in the project root for license information.
8711 * ------------------------------------------------------------------------------------------ */
8712
8713Object.defineProperty(exports, "__esModule", ({ value: true }));
8714exports.MonikerFeature = void 0;
8715const vscode_languageserver_protocol_1 = __webpack_require__(5);
8716const MonikerFeature = (Base) => {
8717 return class extends Base {
8718 get moniker() {
8719 return {
8720 on: (handler) => {
8721 const type = vscode_languageserver_protocol_1.MonikerRequest.type;
8722 this.connection.onRequest(type, (params, cancel) => {
8723 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
8724 });
8725 },
8726 };
8727 }
8728 };
8729};
8730exports.MonikerFeature = MonikerFeature;
8731//# sourceMappingURL=moniker.js.map
8732
8733/***/ }),
8734/* 58 */
8735/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
8736
8737"use strict";
8738
8739/* --------------------------------------------------------------------------------------------
8740 * Copyright (c) Microsoft Corporation. All rights reserved.
8741 * Licensed under the MIT License. See License.txt in the project root for license information.
8742 * ------------------------------------------------------------------------------------------ */
8743Object.defineProperty(exports, "__esModule", ({ value: true }));
8744exports.resolveModulePath = exports.FileSystem = exports.resolveGlobalYarnPath = exports.resolveGlobalNodePath = exports.resolve = exports.uriToFilePath = void 0;
8745const url = __webpack_require__(59);
8746const path = __webpack_require__(23);
8747const fs = __webpack_require__(60);
8748const child_process_1 = __webpack_require__(61);
8749/**
8750 * @deprecated Use the `vscode-uri` npm module which provides a more
8751 * complete implementation of handling VS Code URIs.
8752 */
8753function uriToFilePath(uri) {
8754 let parsed = url.parse(uri);
8755 if (parsed.protocol !== 'file:' || !parsed.path) {
8756 return undefined;
8757 }
8758 let segments = parsed.path.split('/');
8759 for (var i = 0, len = segments.length; i < len; i++) {
8760 segments[i] = decodeURIComponent(segments[i]);
8761 }
8762 if (process.platform === 'win32' && segments.length > 1) {
8763 let first = segments[0];
8764 let second = segments[1];
8765 // Do we have a drive letter and we started with a / which is the
8766 // case if the first segement is empty (see split above)
8767 if (first.length === 0 && second.length > 1 && second[1] === ':') {
8768 // Remove first slash
8769 segments.shift();
8770 }
8771 }
8772 return path.normalize(segments.join('/'));
8773}
8774exports.uriToFilePath = uriToFilePath;
8775function isWindows() {
8776 return process.platform === 'win32';
8777}
8778function resolve(moduleName, nodePath, cwd, tracer) {
8779 const nodePathKey = 'NODE_PATH';
8780 const app = [
8781 'var p = process;',
8782 'p.on(\'message\',function(m){',
8783 'if(m.c===\'e\'){',
8784 'p.exit(0);',
8785 '}',
8786 'else if(m.c===\'rs\'){',
8787 'try{',
8788 'var r=require.resolve(m.a);',
8789 'p.send({c:\'r\',s:true,r:r});',
8790 '}',
8791 'catch(err){',
8792 'p.send({c:\'r\',s:false});',
8793 '}',
8794 '}',
8795 '});'
8796 ].join('');
8797 return new Promise((resolve, reject) => {
8798 let env = process.env;
8799 let newEnv = Object.create(null);
8800 Object.keys(env).forEach(key => newEnv[key] = env[key]);
8801 if (nodePath && fs.existsSync(nodePath) /* see issue 545 */) {
8802 if (newEnv[nodePathKey]) {
8803 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
8804 }
8805 else {
8806 newEnv[nodePathKey] = nodePath;
8807 }
8808 if (tracer) {
8809 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
8810 }
8811 }
8812 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
8813 try {
8814 let cp = child_process_1.fork('', [], {
8815 cwd: cwd,
8816 env: newEnv,
8817 execArgv: ['-e', app]
8818 });
8819 if (cp.pid === void 0) {
8820 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
8821 return;
8822 }
8823 cp.on('error', (error) => {
8824 reject(error);
8825 });
8826 cp.on('message', (message) => {
8827 if (message.c === 'r') {
8828 cp.send({ c: 'e' });
8829 if (message.s) {
8830 resolve(message.r);
8831 }
8832 else {
8833 reject(new Error(`Failed to resolve module: ${moduleName}`));
8834 }
8835 }
8836 });
8837 let message = {
8838 c: 'rs',
8839 a: moduleName
8840 };
8841 cp.send(message);
8842 }
8843 catch (error) {
8844 reject(error);
8845 }
8846 });
8847}
8848exports.resolve = resolve;
8849/**
8850 * Resolve the global npm package path.
8851 * @deprecated Since this depends on the used package manager and their version the best is that servers
8852 * implement this themselves since they know best what kind of package managers to support.
8853 * @param tracer the tracer to use
8854 */
8855function resolveGlobalNodePath(tracer) {
8856 let npmCommand = 'npm';
8857 const env = Object.create(null);
8858 Object.keys(process.env).forEach(key => env[key] = process.env[key]);
8859 env['NO_UPDATE_NOTIFIER'] = 'true';
8860 const options = {
8861 encoding: 'utf8',
8862 env
8863 };
8864 if (isWindows()) {
8865 npmCommand = 'npm.cmd';
8866 options.shell = true;
8867 }
8868 let handler = () => { };
8869 try {
8870 process.on('SIGPIPE', handler);
8871 let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
8872 if (!stdout) {
8873 if (tracer) {
8874 tracer(`'npm config get prefix' didn't return a value.`);
8875 }
8876 return undefined;
8877 }
8878 let prefix = stdout.trim();
8879 if (tracer) {
8880 tracer(`'npm config get prefix' value is: ${prefix}`);
8881 }
8882 if (prefix.length > 0) {
8883 if (isWindows()) {
8884 return path.join(prefix, 'node_modules');
8885 }
8886 else {
8887 return path.join(prefix, 'lib', 'node_modules');
8888 }
8889 }
8890 return undefined;
8891 }
8892 catch (err) {
8893 return undefined;
8894 }
8895 finally {
8896 process.removeListener('SIGPIPE', handler);
8897 }
8898}
8899exports.resolveGlobalNodePath = resolveGlobalNodePath;
8900/*
8901 * Resolve the global yarn pakage path.
8902 * @deprecated Since this depends on the used package manager and their version the best is that servers
8903 * implement this themselves since they know best what kind of package managers to support.
8904 * @param tracer the tracer to use
8905 */
8906function resolveGlobalYarnPath(tracer) {
8907 let yarnCommand = 'yarn';
8908 let options = {
8909 encoding: 'utf8'
8910 };
8911 if (isWindows()) {
8912 yarnCommand = 'yarn.cmd';
8913 options.shell = true;
8914 }
8915 let handler = () => { };
8916 try {
8917 process.on('SIGPIPE', handler);
8918 let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
8919 let stdout = results.stdout;
8920 if (!stdout) {
8921 if (tracer) {
8922 tracer(`'yarn global dir' didn't return a value.`);
8923 if (results.stderr) {
8924 tracer(results.stderr);
8925 }
8926 }
8927 return undefined;
8928 }
8929 let lines = stdout.trim().split(/\r?\n/);
8930 for (let line of lines) {
8931 try {
8932 let yarn = JSON.parse(line);
8933 if (yarn.type === 'log') {
8934 return path.join(yarn.data, 'node_modules');
8935 }
8936 }
8937 catch (e) {
8938 // Do nothing. Ignore the line
8939 }
8940 }
8941 return undefined;
8942 }
8943 catch (err) {
8944 return undefined;
8945 }
8946 finally {
8947 process.removeListener('SIGPIPE', handler);
8948 }
8949}
8950exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
8951var FileSystem;
8952(function (FileSystem) {
8953 let _isCaseSensitive = undefined;
8954 function isCaseSensitive() {
8955 if (_isCaseSensitive !== void 0) {
8956 return _isCaseSensitive;
8957 }
8958 if (process.platform === 'win32') {
8959 _isCaseSensitive = false;
8960 }
8961 else {
8962 // convert current file name to upper case / lower case and check if file exists
8963 // (guards against cases when name is already all uppercase or lowercase)
8964 _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
8965 }
8966 return _isCaseSensitive;
8967 }
8968 FileSystem.isCaseSensitive = isCaseSensitive;
8969 function isParent(parent, child) {
8970 if (isCaseSensitive()) {
8971 return path.normalize(child).indexOf(path.normalize(parent)) === 0;
8972 }
8973 else {
8974 return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) === 0;
8975 }
8976 }
8977 FileSystem.isParent = isParent;
8978})(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
8979function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
8980 if (nodePath) {
8981 if (!path.isAbsolute(nodePath)) {
8982 nodePath = path.join(workspaceRoot, nodePath);
8983 }
8984 return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
8985 if (FileSystem.isParent(nodePath, value)) {
8986 return value;
8987 }
8988 else {
8989 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
8990 }
8991 }).then(undefined, (_error) => {
8992 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
8993 });
8994 }
8995 else {
8996 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
8997 }
8998}
8999exports.resolveModulePath = resolveModulePath;
9000//# sourceMappingURL=files.js.map
9001
9002/***/ }),
9003/* 59 */
9004/***/ ((module) => {
9005
9006"use strict";
9007module.exports = require("url");;
9008
9009/***/ }),
9010/* 60 */
9011/***/ ((module) => {
9012
9013"use strict";
9014module.exports = require("fs");;
9015
9016/***/ }),
9017/* 61 */
9018/***/ ((module) => {
9019
9020"use strict";
9021module.exports = require("child_process");;
9022
9023/***/ }),
9024/* 62 */
9025/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9026
9027"use strict";
9028/* --------------------------------------------------------------------------------------------
9029 * Copyright (c) Microsoft Corporation. All rights reserved.
9030 * Licensed under the MIT License. See License.txt in the project root for license information.
9031 * ----------------------------------------------------------------------------------------- */
9032
9033
9034module.exports = __webpack_require__(5);
9035
9036/***/ }),
9037/* 63 */
9038/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
9039
9040"use strict";
9041
9042/* --------------------------------------------------------------------------------------------
9043 * Copyright (c) Microsoft Corporation. All rights reserved.
9044 * Licensed under the MIT License. See License.txt in the project root for license information.
9045 * ------------------------------------------------------------------------------------------ */
9046var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9047 if (k2 === undefined) k2 = k;
9048 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9049}) : (function(o, m, k, k2) {
9050 if (k2 === undefined) k2 = k;
9051 o[k2] = m[k];
9052}));
9053var __exportStar = (this && this.__exportStar) || function(m, exports) {
9054 for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
9055};
9056Object.defineProperty(exports, "__esModule", ({ value: true }));
9057exports.ProposedFeatures = exports.SemanticTokensBuilder = void 0;
9058const semanticTokens_1 = __webpack_require__(53);
9059Object.defineProperty(exports, "SemanticTokensBuilder", ({ enumerable: true, get: function () { return semanticTokens_1.SemanticTokensBuilder; } }));
9060__exportStar(__webpack_require__(5), exports);
9061__exportStar(__webpack_require__(4), exports);
9062var ProposedFeatures;
9063(function (ProposedFeatures) {
9064 ProposedFeatures.all = {
9065 __brand: 'features'
9066 };
9067})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
9068//# sourceMappingURL=api.js.map
9069
9070/***/ }),
9071/* 64 */
9072/***/ ((__unused_webpack_module, exports) => {
9073
9074"use strict";
9075
9076Object.defineProperty(exports, "__esModule", ({ value: true }));
9077exports.projectRootPatterns = exports.sortTexts = void 0;
9078exports.sortTexts = {
9079 one: "00001",
9080 two: "00002",
9081 three: "00003",
9082 four: "00004",
9083};
9084exports.projectRootPatterns = [".git", "autoload", "plugin"];
9085
9086
9087/***/ }),
9088/* 65 */
9089/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
9090
9091"use strict";
9092
9093var __importDefault = (this && this.__importDefault) || function (mod) {
9094 return (mod && mod.__esModule) ? mod : { "default": mod };
9095};
9096Object.defineProperty(exports, "__esModule", ({ value: true }));
9097exports.completionProvider = void 0;
9098var vscode_languageserver_1 = __webpack_require__(2);
9099var util_1 = __webpack_require__(66);
9100var config_1 = __importDefault(__webpack_require__(73));
9101var documents_1 = __webpack_require__(74);
9102__webpack_require__(76);
9103__webpack_require__(161);
9104__webpack_require__(162);
9105__webpack_require__(163);
9106__webpack_require__(165);
9107__webpack_require__(166);
9108__webpack_require__(170);
9109__webpack_require__(171);
9110__webpack_require__(172);
9111__webpack_require__(173);
9112__webpack_require__(174);
9113__webpack_require__(175);
9114var provider_1 = __webpack_require__(159);
9115var provider = provider_1.getProvider();
9116var completionProvider = function (params) {
9117 var textDocument = params.textDocument, position = params.position;
9118 var textDoc = documents_1.documents.get(textDocument.uri);
9119 if (textDoc) {
9120 var line = textDoc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), position));
9121 var words = util_1.getWordFromPosition(textDoc, { line: position.line, character: position.character - 1 });
9122 var word = words && words.word || "";
9123 if (word === "" && words && words.wordRight.trim() === ":") {
9124 word = ":";
9125 }
9126 // options items start with &
9127 var invalidLength = word.replace(/^&/, "").length;
9128 var completionItems = provider(line, textDoc.uri, position, word, invalidLength, []);
9129 if (!config_1.default.snippetSupport) {
9130 return {
9131 isIncomplete: true,
9132 items: util_1.removeSnippets(completionItems)
9133 };
9134 }
9135 return {
9136 isIncomplete: true,
9137 items: completionItems
9138 };
9139 }
9140 return [];
9141};
9142exports.completionProvider = completionProvider;
9143
9144
9145/***/ }),
9146/* 66 */
9147/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
9148
9149"use strict";
9150
9151var __assign = (this && this.__assign) || function () {
9152 __assign = Object.assign || function(t) {
9153 for (var s, i = 1, n = arguments.length; i < n; i++) {
9154 s = arguments[i];
9155 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
9156 t[p] = s[p];
9157 }
9158 return t;
9159 };
9160 return __assign.apply(this, arguments);
9161};
9162var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
9163 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
9164 return new (P || (P = Promise))(function (resolve, reject) {
9165 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
9166 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
9167 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9168 step((generator = generator.apply(thisArg, _arguments || [])).next());
9169 });
9170};
9171var __generator = (this && this.__generator) || function (thisArg, body) {
9172 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
9173 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
9174 function verb(n) { return function (v) { return step([n, v]); }; }
9175 function step(op) {
9176 if (f) throw new TypeError("Generator is already executing.");
9177 while (_) try {
9178 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
9179 if (y = 0, t) op = [op[0] & 2, t.value];
9180 switch (op[0]) {
9181 case 0: case 1: t = op; break;
9182 case 4: _.label++; return { value: op[1], done: false };
9183 case 5: _.label++; y = op[1]; op = [0]; continue;
9184 case 7: op = _.ops.pop(); _.trys.pop(); continue;
9185 default:
9186 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
9187 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
9188 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
9189 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
9190 if (t[2]) _.ops.pop();
9191 _.trys.pop(); continue;
9192 }
9193 op = body.call(thisArg, _);
9194 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
9195 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
9196 }
9197};
9198var __spreadArray = (this && this.__spreadArray) || function (to, from) {
9199 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
9200 to[j] = from[i];
9201 return to;
9202};
9203var __importDefault = (this && this.__importDefault) || function (mod) {
9204 return (mod && mod.__esModule) ? mod : { "default": mod };
9205};
9206Object.defineProperty(exports, "__esModule", ({ value: true }));
9207exports.delay = exports.getRealPath = exports.isSymbolLink = exports.removeSnippets = exports.handleParse = exports.getWordFromPosition = exports.markupSnippets = exports.findProjectRoot = exports.pcb = exports.executeFile = exports.isSomeMatchPattern = void 0;
9208var child_process_1 = __webpack_require__(61);
9209var findup_1 = __importDefault(__webpack_require__(67));
9210var fs_1 = __importDefault(__webpack_require__(60));
9211var path_1 = __importDefault(__webpack_require__(23));
9212var vscode_languageserver_1 = __webpack_require__(2);
9213var vimparser_1 = __webpack_require__(71);
9214var patterns_1 = __webpack_require__(72);
9215var config_1 = __importDefault(__webpack_require__(73));
9216function isSomeMatchPattern(patterns, line) {
9217 return patterns.some(function (p) { return p.test(line); });
9218}
9219exports.isSomeMatchPattern = isSomeMatchPattern;
9220function executeFile(input, command, args, option) {
9221 return new Promise(function (resolve, reject) {
9222 var stdout = "";
9223 var stderr = "";
9224 var error;
9225 var isPassAsText = false;
9226 args = (args || []).map(function (arg) {
9227 if (/%text/.test(arg)) {
9228 isPassAsText = true;
9229 return arg.replace(/%text/g, input.toString());
9230 }
9231 return arg;
9232 });
9233 var cp = child_process_1.spawn(command, args, option);
9234 cp.stdout.on("data", function (data) {
9235 stdout += data;
9236 });
9237 cp.stderr.on("data", function (data) {
9238 stderr += data;
9239 });
9240 cp.on("error", function (err) {
9241 error = err;
9242 reject(error);
9243 });
9244 cp.on("close", function (code) {
9245 if (!error) {
9246 resolve({ code: code, stdout: stdout, stderr: stderr });
9247 }
9248 });
9249 // error will occur when cp get error
9250 if (!isPassAsText) {
9251 input.pipe(cp.stdin).on("error", function () { return; });
9252 }
9253 });
9254}
9255exports.executeFile = executeFile;
9256// cover cb type async function to promise
9257function pcb(cb) {
9258 return function () {
9259 var args = [];
9260 for (var _i = 0; _i < arguments.length; _i++) {
9261 args[_i] = arguments[_i];
9262 }
9263 return new Promise(function (resolve) {
9264 cb.apply(void 0, __spreadArray(__spreadArray([], args), [function () {
9265 var params = [];
9266 for (var _i = 0; _i < arguments.length; _i++) {
9267 params[_i] = arguments[_i];
9268 }
9269 resolve(params);
9270 }]));
9271 });
9272 };
9273}
9274exports.pcb = pcb;
9275// find work dirname by root patterns
9276function findProjectRoot(filePath, rootPatterns) {
9277 return __awaiter(this, void 0, void 0, function () {
9278 var dirname, patterns, dirCandidate, _i, patterns_2, pattern, _a, err, dir;
9279 return __generator(this, function (_b) {
9280 switch (_b.label) {
9281 case 0:
9282 dirname = path_1.default.dirname(filePath);
9283 patterns = [].concat(rootPatterns);
9284 dirCandidate = "";
9285 _i = 0, patterns_2 = patterns;
9286 _b.label = 1;
9287 case 1:
9288 if (!(_i < patterns_2.length)) return [3 /*break*/, 4];
9289 pattern = patterns_2[_i];
9290 return [4 /*yield*/, pcb(findup_1.default)(dirname, pattern)];
9291 case 2:
9292 _a = _b.sent(), err = _a[0], dir = _a[1];
9293 if (!err && dir && dir !== "/" && dir.length > dirCandidate.length) {
9294 dirCandidate = dir;
9295 }
9296 _b.label = 3;
9297 case 3:
9298 _i++;
9299 return [3 /*break*/, 1];
9300 case 4:
9301 if (dirCandidate.length) {
9302 return [2 /*return*/, dirCandidate];
9303 }
9304 return [2 /*return*/, dirname];
9305 }
9306 });
9307 });
9308}
9309exports.findProjectRoot = findProjectRoot;
9310function markupSnippets(snippets) {
9311 return [
9312 "```vim",
9313 snippets.replace(/\$\{[0-9]+(:([^}]+))?\}/g, "$2"),
9314 "```",
9315 ].join("\n");
9316}
9317exports.markupSnippets = markupSnippets;
9318function getWordFromPosition(doc, position) {
9319 if (!doc) {
9320 return;
9321 }
9322 var character = doc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, position.character), vscode_languageserver_1.Position.create(position.line, position.character + 1)));
9323 // not keyword position
9324 if (!character || !patterns_1.keywordPattern.test(character)) {
9325 return;
9326 }
9327 var currentLine = doc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), vscode_languageserver_1.Position.create(position.line + 1, 0)));
9328 // comment line
9329 if (patterns_1.commentPattern.test(currentLine)) {
9330 return;
9331 }
9332 var preSegment = currentLine.slice(0, position.character);
9333 var nextSegment = currentLine.slice(position.character);
9334 var wordLeft = preSegment.match(patterns_1.wordPrePattern);
9335 var wordRight = nextSegment.match(patterns_1.wordNextPattern);
9336 var word = "" + (wordLeft && wordLeft[1] || "") + (wordRight && wordRight[1] || "");
9337 return {
9338 word: word,
9339 left: wordLeft && wordLeft[1] || "",
9340 right: wordRight && wordRight[1] || "",
9341 wordLeft: wordLeft && wordLeft[1]
9342 ? preSegment.replace(new RegExp(wordLeft[1] + "$"), word)
9343 : "" + preSegment + word,
9344 wordRight: wordRight && wordRight[1]
9345 ? nextSegment.replace(new RegExp("^" + wordRight[1]), word)
9346 : "" + word + nextSegment,
9347 };
9348}
9349exports.getWordFromPosition = getWordFromPosition;
9350// parse vim buffer
9351function handleParse(textDoc) {
9352 return __awaiter(this, void 0, void 0, function () {
9353 var text, tokens, node;
9354 return __generator(this, function (_a) {
9355 text = textDoc instanceof Object ? textDoc.getText() : textDoc;
9356 tokens = new vimparser_1.StringReader(text.split(/\r\n|\r|\n/));
9357 try {
9358 node = new vimparser_1.VimLParser(config_1.default.isNeovim).parse(tokens);
9359 return [2 /*return*/, [node, ""]];
9360 }
9361 catch (error) {
9362 return [2 /*return*/, [null, error]];
9363 }
9364 return [2 /*return*/];
9365 });
9366 });
9367}
9368exports.handleParse = handleParse;
9369// remove snippets of completionItem
9370function removeSnippets(completionItems) {
9371 if (completionItems === void 0) { completionItems = []; }
9372 return completionItems.map(function (item) {
9373 if (item.insertTextFormat === vscode_languageserver_1.InsertTextFormat.Snippet) {
9374 return __assign(__assign({}, item), { insertText: item.label, insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText });
9375 }
9376 return item;
9377 });
9378}
9379exports.removeSnippets = removeSnippets;
9380var isSymbolLink = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
9381 return __generator(this, function (_a) {
9382 return [2 /*return*/, new Promise(function (resolve) {
9383 fs_1.default.lstat(filePath, function (err, stats) {
9384 resolve({
9385 err: err,
9386 stats: stats && stats.isSymbolicLink(),
9387 });
9388 });
9389 })];
9390 });
9391}); };
9392exports.isSymbolLink = isSymbolLink;
9393var getRealPath = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
9394 var _a, err, stats;
9395 return __generator(this, function (_b) {
9396 switch (_b.label) {
9397 case 0: return [4 /*yield*/, exports.isSymbolLink(filePath)];
9398 case 1:
9399 _a = _b.sent(), err = _a.err, stats = _a.stats;
9400 if (!err && stats) {
9401 return [2 /*return*/, new Promise(function (resolve) {
9402 fs_1.default.realpath(filePath, function (error, realPath) {
9403 if (error) {
9404 return resolve(filePath);
9405 }
9406 resolve(realPath);
9407 });
9408 })];
9409 }
9410 return [2 /*return*/, filePath];
9411 }
9412 });
9413}); };
9414exports.getRealPath = getRealPath;
9415var delay = function (ms) { return __awaiter(void 0, void 0, void 0, function () {
9416 return __generator(this, function (_a) {
9417 switch (_a.label) {
9418 case 0: return [4 /*yield*/, new Promise(function (res) {
9419 setTimeout(function () {
9420 res();
9421 }, ms);
9422 })];
9423 case 1:
9424 _a.sent();
9425 return [2 /*return*/];
9426 }
9427 });
9428}); };
9429exports.delay = delay;
9430
9431
9432/***/ }),
9433/* 67 */
9434/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9435
9436var fs = __webpack_require__(60),
9437 Path = __webpack_require__(23),
9438 util = __webpack_require__(10),
9439 colors = __webpack_require__(68),
9440 EE = __webpack_require__(70).EventEmitter,
9441 fsExists = fs.exists ? fs.exists : Path.exists,
9442 fsExistsSync = fs.existsSync ? fs.existsSync : Path.existsSync;
9443
9444module.exports = function(dir, iterator, options, callback){
9445 return FindUp(dir, iterator, options, callback);
9446};
9447
9448function FindUp(dir, iterator, options, callback){
9449 if (!(this instanceof FindUp)) {
9450 return new FindUp(dir, iterator, options, callback);
9451 }
9452 if(typeof options === 'function'){
9453 callback = options;
9454 options = {};
9455 }
9456 options = options || {};
9457
9458 EE.call(this);
9459 this.found = false;
9460 this.stopPlease = false;
9461 var self = this;
9462
9463 if(typeof iterator === 'string'){
9464 var file = iterator;
9465 iterator = function(dir, cb){
9466 return fsExists(Path.join(dir, file), cb);
9467 };
9468 }
9469
9470 if(callback) {
9471 this.on('found', function(dir){
9472 if(options.verbose) console.log(('found '+ dir ).green);
9473 callback(null, dir);
9474 self.stop();
9475 });
9476
9477 this.on('end', function(){
9478 if(options.verbose) console.log('end'.grey);
9479 if(!self.found) callback(new Error('not found'));
9480 });
9481
9482 this.on('error', function(err){
9483 if(options.verbose) console.log('error'.red, err);
9484 callback(err);
9485 });
9486 }
9487
9488 this._find(dir, iterator, options, callback);
9489}
9490util.inherits(FindUp, EE);
9491
9492FindUp.prototype._find = function(dir, iterator, options, callback){
9493 var self = this;
9494
9495 iterator(dir, function(exists){
9496 if(options.verbose) console.log(('traverse '+ dir).grey);
9497 if(exists) {
9498 self.found = true;
9499 self.emit('found', dir);
9500 }
9501
9502 var parentDir = Path.join(dir, '..');
9503 if (self.stopPlease) return self.emit('end');
9504 if (dir === parentDir) return self.emit('end');
9505 if(dir.indexOf('../../') !== -1 ) return self.emit('error', new Error(dir + ' is not correct.'));
9506 self._find(parentDir, iterator, options, callback);
9507 });
9508};
9509
9510FindUp.prototype.stop = function(){
9511 this.stopPlease = true;
9512};
9513
9514module.exports.FindUp = FindUp;
9515
9516module.exports.sync = function(dir, iteratorSync){
9517 if(typeof iteratorSync === 'string'){
9518 var file = iteratorSync;
9519 iteratorSync = function(dir){
9520 return fsExistsSync(Path.join(dir, file));
9521 };
9522 }
9523 var initialDir = dir;
9524 while(dir !== Path.join(dir, '..')){
9525 if(dir.indexOf('../../') !== -1 ) throw new Error(initialDir + ' is not correct.');
9526 if(iteratorSync(dir)) return dir;
9527 dir = Path.join(dir, '..');
9528 }
9529 throw new Error('not found');
9530};
9531
9532
9533/***/ }),
9534/* 68 */
9535/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
9536
9537/*
9538colors.js
9539
9540Copyright (c) 2010
9541
9542Marak Squires
9543Alexis Sellier (cloudhead)
9544
9545Permission is hereby granted, free of charge, to any person obtaining a copy
9546of this software and associated documentation files (the "Software"), to deal
9547in the Software without restriction, including without limitation the rights
9548to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9549copies of the Software, and to permit persons to whom the Software is
9550furnished to do so, subject to the following conditions:
9551
9552The above copyright notice and this permission notice shall be included in
9553all copies or substantial portions of the Software.
9554
9555THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
9556IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
9557FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
9558AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
9559LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
9560OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
9561THE SOFTWARE.
9562
9563*/
9564
9565var isHeadless = false;
9566
9567if (typeof module !== 'undefined') {
9568 isHeadless = true;
9569}
9570
9571if (!isHeadless) {
9572 var exports = {};
9573 var module = {};
9574 var colors = exports;
9575 exports.mode = "browser";
9576} else {
9577 exports.mode = "console";
9578}
9579
9580//
9581// Prototypes the string object to have additional method calls that add terminal colors
9582//
9583var addProperty = function (color, func) {
9584 exports[color] = function (str) {
9585 return func.apply(str);
9586 };
9587 String.prototype.__defineGetter__(color, func);
9588};
9589
9590function stylize(str, style) {
9591
9592 var styles;
9593
9594 if (exports.mode === 'console') {
9595 styles = {
9596 //styles
9597 'bold' : ['\x1B[1m', '\x1B[22m'],
9598 'italic' : ['\x1B[3m', '\x1B[23m'],
9599 'underline' : ['\x1B[4m', '\x1B[24m'],
9600 'inverse' : ['\x1B[7m', '\x1B[27m'],
9601 'strikethrough' : ['\x1B[9m', '\x1B[29m'],
9602 //text colors
9603 //grayscale
9604 'white' : ['\x1B[37m', '\x1B[39m'],
9605 'grey' : ['\x1B[90m', '\x1B[39m'],
9606 'black' : ['\x1B[30m', '\x1B[39m'],
9607 //colors
9608 'blue' : ['\x1B[34m', '\x1B[39m'],
9609 'cyan' : ['\x1B[36m', '\x1B[39m'],
9610 'green' : ['\x1B[32m', '\x1B[39m'],
9611 'magenta' : ['\x1B[35m', '\x1B[39m'],
9612 'red' : ['\x1B[31m', '\x1B[39m'],
9613 'yellow' : ['\x1B[33m', '\x1B[39m'],
9614 //background colors
9615 //grayscale
9616 'whiteBG' : ['\x1B[47m', '\x1B[49m'],
9617 'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
9618 'blackBG' : ['\x1B[40m', '\x1B[49m'],
9619 //colors
9620 'blueBG' : ['\x1B[44m', '\x1B[49m'],
9621 'cyanBG' : ['\x1B[46m', '\x1B[49m'],
9622 'greenBG' : ['\x1B[42m', '\x1B[49m'],
9623 'magentaBG' : ['\x1B[45m', '\x1B[49m'],
9624 'redBG' : ['\x1B[41m', '\x1B[49m'],
9625 'yellowBG' : ['\x1B[43m', '\x1B[49m']
9626 };
9627 } else if (exports.mode === 'browser') {
9628 styles = {
9629 //styles
9630 'bold' : ['<b>', '</b>'],
9631 'italic' : ['<i>', '</i>'],
9632 'underline' : ['<u>', '</u>'],
9633 'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
9634 'strikethrough' : ['<del>', '</del>'],
9635 //text colors
9636 //grayscale
9637 'white' : ['<span style="color:white;">', '</span>'],
9638 'grey' : ['<span style="color:gray;">', '</span>'],
9639 'black' : ['<span style="color:black;">', '</span>'],
9640 //colors
9641 'blue' : ['<span style="color:blue;">', '</span>'],
9642 'cyan' : ['<span style="color:cyan;">', '</span>'],
9643 'green' : ['<span style="color:green;">', '</span>'],
9644 'magenta' : ['<span style="color:magenta;">', '</span>'],
9645 'red' : ['<span style="color:red;">', '</span>'],
9646 'yellow' : ['<span style="color:yellow;">', '</span>'],
9647 //background colors
9648 //grayscale
9649 'whiteBG' : ['<span style="background-color:white;">', '</span>'],
9650 'greyBG' : ['<span style="background-color:gray;">', '</span>'],
9651 'blackBG' : ['<span style="background-color:black;">', '</span>'],
9652 //colors
9653 'blueBG' : ['<span style="background-color:blue;">', '</span>'],
9654 'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
9655 'greenBG' : ['<span style="background-color:green;">', '</span>'],
9656 'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
9657 'redBG' : ['<span style="background-color:red;">', '</span>'],
9658 'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
9659 };
9660 } else if (exports.mode === 'none') {
9661 return str + '';
9662 } else {
9663 console.log('unsupported mode, try "browser", "console" or "none"');
9664 }
9665 return styles[style][0] + str + styles[style][1];
9666}
9667
9668function applyTheme(theme) {
9669
9670 //
9671 // Remark: This is a list of methods that exist
9672 // on String that you should not overwrite.
9673 //
9674 var stringPrototypeBlacklist = [
9675 '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
9676 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
9677 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
9678 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
9679 ];
9680
9681 Object.keys(theme).forEach(function (prop) {
9682 if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
9683 console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
9684 }
9685 else {
9686 if (typeof(theme[prop]) === 'string') {
9687 addProperty(prop, function () {
9688 return exports[theme[prop]](this);
9689 });
9690 }
9691 else {
9692 addProperty(prop, function () {
9693 var ret = this;
9694 for (var t = 0; t < theme[prop].length; t++) {
9695 ret = exports[theme[prop][t]](ret);
9696 }
9697 return ret;
9698 });
9699 }
9700 }
9701 });
9702}
9703
9704
9705//
9706// Iterate through all default styles and colors
9707//
9708var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
9709x.forEach(function (style) {
9710
9711 // __defineGetter__ at the least works in more browsers
9712 // http://robertnyman.com/javascript/javascript-getters-setters.html
9713 // Object.defineProperty only works in Chrome
9714 addProperty(style, function () {
9715 return stylize(this, style);
9716 });
9717});
9718
9719function sequencer(map) {
9720 return function () {
9721 if (!isHeadless) {
9722 return this.replace(/( )/, '$1');
9723 }
9724 var exploded = this.split(""), i = 0;
9725 exploded = exploded.map(map);
9726 return exploded.join("");
9727 };
9728}
9729
9730var rainbowMap = (function () {
9731 var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
9732 return function (letter, i, exploded) {
9733 if (letter === " ") {
9734 return letter;
9735 } else {
9736 return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
9737 }
9738 };
9739})();
9740
9741exports.themes = {};
9742
9743exports.addSequencer = function (name, map) {
9744 addProperty(name, sequencer(map));
9745};
9746
9747exports.addSequencer('rainbow', rainbowMap);
9748exports.addSequencer('zebra', function (letter, i, exploded) {
9749 return i % 2 === 0 ? letter : letter.inverse;
9750});
9751
9752exports.setTheme = function (theme) {
9753 if (typeof theme === 'string') {
9754 try {
9755 exports.themes[theme] = __webpack_require__(69)(theme);
9756 applyTheme(exports.themes[theme]);
9757 return exports.themes[theme];
9758 } catch (err) {
9759 console.log(err);
9760 return err;
9761 }
9762 } else {
9763 applyTheme(theme);
9764 }
9765};
9766
9767
9768addProperty('stripColors', function () {
9769 return ("" + this).replace(/\x1B\[\d+m/g, '');
9770});
9771
9772// please no
9773function zalgo(text, options) {
9774 var soul = {
9775 "up" : [
9776 '̍', '̎', '̄', '̅',
9777 '̿', '̑', '̆', '̐',
9778 '͒', '͗', '͑', '̇',
9779 '̈', '̊', '͂', '̓',
9780 '̈', '͊', '͋', '͌',
9781 '̃', '̂', '̌', '͐',
9782 '̀', '́', '̋', '̏',
9783 '̒', '̓', '̔', '̽',
9784 '̉', 'ͣ', 'ͤ', 'ͥ',
9785 'ͦ', 'ͧ', 'ͨ', 'ͩ',
9786 'ͪ', 'ͫ', 'ͬ', 'ͭ',
9787 'ͮ', 'ͯ', '̾', '͛',
9788 '͆', '̚'
9789 ],
9790 "down" : [
9791 '̖', '̗', '̘', '̙',
9792 '̜', '̝', '̞', '̟',
9793 '̠', '̤', '̥', '̦',
9794 '̩', '̪', '̫', '̬',
9795 '̭', '̮', '̯', '̰',
9796 '̱', '̲', '̳', '̹',
9797 '̺', '̻', '̼', 'ͅ',
9798 '͇', '͈', '͉', '͍',
9799 '͎', '͓', '͔', '͕',
9800 '͖', '͙', '͚', '̣'
9801 ],
9802 "mid" : [
9803 '̕', '̛', '̀', '́',
9804 '͘', '̡', '̢', '̧',
9805 '̨', '̴', '̵', '̶',
9806 '͜', '͝', '͞',
9807 '͟', '͠', '͢', '̸',
9808 '̷', '͡', ' ҉'
9809 ]
9810 },
9811 all = [].concat(soul.up, soul.down, soul.mid),
9812 zalgo = {};
9813
9814 function randomNumber(range) {
9815 var r = Math.floor(Math.random() * range);
9816 return r;
9817 }
9818
9819 function is_char(character) {
9820 var bool = false;
9821 all.filter(function (i) {
9822 bool = (i === character);
9823 });
9824 return bool;
9825 }
9826
9827 function heComes(text, options) {
9828 var result = '', counts, l;
9829 options = options || {};
9830 options["up"] = options["up"] || true;
9831 options["mid"] = options["mid"] || true;
9832 options["down"] = options["down"] || true;
9833 options["size"] = options["size"] || "maxi";
9834 text = text.split('');
9835 for (l in text) {
9836 if (is_char(l)) {
9837 continue;
9838 }
9839 result = result + text[l];
9840 counts = {"up" : 0, "down" : 0, "mid" : 0};
9841 switch (options.size) {
9842 case 'mini':
9843 counts.up = randomNumber(8);
9844 counts.min = randomNumber(2);
9845 counts.down = randomNumber(8);
9846 break;
9847 case 'maxi':
9848 counts.up = randomNumber(16) + 3;
9849 counts.min = randomNumber(4) + 1;
9850 counts.down = randomNumber(64) + 3;
9851 break;
9852 default:
9853 counts.up = randomNumber(8) + 1;
9854 counts.mid = randomNumber(6) / 2;
9855 counts.down = randomNumber(8) + 1;
9856 break;
9857 }
9858
9859 var arr = ["up", "mid", "down"];
9860 for (var d in arr) {
9861 var index = arr[d];
9862 for (var i = 0 ; i <= counts[index]; i++) {
9863 if (options[index]) {
9864 result = result + soul[index][randomNumber(soul[index].length)];
9865 }
9866 }
9867 }
9868 }
9869 return result;
9870 }
9871 return heComes(text);
9872}
9873
9874
9875// don't summon zalgo
9876addProperty('zalgo', function () {
9877 return zalgo(this);
9878});
9879
9880
9881/***/ }),
9882/* 69 */
9883/***/ ((module) => {
9884
9885function webpackEmptyContext(req) {
9886 var e = new Error("Cannot find module '" + req + "'");
9887 e.code = 'MODULE_NOT_FOUND';
9888 throw e;
9889}
9890webpackEmptyContext.keys = () => ([]);
9891webpackEmptyContext.resolve = webpackEmptyContext;
9892webpackEmptyContext.id = 69;
9893module.exports = webpackEmptyContext;
9894
9895/***/ }),
9896/* 70 */
9897/***/ ((module) => {
9898
9899"use strict";
9900module.exports = require("events");;
9901
9902/***/ }),
9903/* 71 */
9904/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
9905
9906/* module decorator */ module = __webpack_require__.nmd(module);
9907//!/usr/bin/env nodejs
9908// usage: nodejs vimlparser.js [--neovim] foo.vim
9909
9910var fs = __webpack_require__(60);
9911var util = __webpack_require__(10);
9912
9913function main() {
9914 var neovim = false;
9915 var fpath = ''
9916 var args = process.argv;
9917 if (args.length == 4) {
9918 if (args[2] == '--neovim') {
9919 neovim = true;
9920 }
9921 fpath = args[3];
9922 } else if (args.length == 3) {
9923 neovim = false;
9924 fpath = args[2]
9925 }
9926 var r = new StringReader(viml_readfile(fpath));
9927 var p = new VimLParser(neovim);
9928 var c = new Compiler();
9929 try {
9930 var lines = c.compile(p.parse(r));
9931 for (var i in lines) {
9932 process.stdout.write(lines[i] + "\n");
9933 }
9934 } catch (e) {
9935 process.stdout.write(e + '\n');
9936 }
9937}
9938
9939var pat_vim2js = {
9940 "[0-9a-zA-Z]" : "[0-9a-zA-Z]",
9941 "[@*!=><&~#]" : "[@*!=><&~#]",
9942 "\\<ARGOPT\\>" : "\\bARGOPT\\b",
9943 "\\<BANG\\>" : "\\bBANG\\b",
9944 "\\<EDITCMD\\>" : "\\bEDITCMD\\b",
9945 "\\<NOTRLCOM\\>" : "\\bNOTRLCOM\\b",
9946 "\\<TRLBAR\\>" : "\\bTRLBAR\\b",
9947 "\\<USECTRLV\\>" : "\\bUSECTRLV\\b",
9948 "\\<USERCMD\\>" : "\\bUSERCMD\\b",
9949 "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>" : "\\b(XFILE|FILES|FILE1)\\b",
9950 "\\S" : "\\S",
9951 "\\a" : "[A-Za-z]",
9952 "\\d" : "\\d",
9953 "\\h" : "[A-Za-z_]",
9954 "\\s" : "\\s",
9955 "\\v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$",
9956 "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
9957 "\\w" : "[0-9A-Za-z_]",
9958 "\\w\\|[:#]" : "[0-9A-Za-z_]|[:#]",
9959 "\\x" : "[0-9A-Fa-f]",
9960 "^++" : "^\+\+",
9961 "^++bad=\\(keep\\|drop\\|.\\)\\>" : "^\\+\\+bad=(keep|drop|.)\\b",
9962 "^++bad=drop" : "^\\+\\+bad=drop",
9963 "^++bad=keep" : "^\\+\\+bad=keep",
9964 "^++bin\\>" : "^\\+\\+bin\\b",
9965 "^++edit\\>" : "^\\+\\+edit\\b",
9966 "^++enc=\\S" : "^\\+\\+enc=\\S",
9967 "^++encoding=\\S" : "^\\+\\+encoding=\\S",
9968 "^++ff=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+ff=(dos|unix|mac)\\b",
9969 "^++fileformat=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+fileformat=(dos|unix|mac)\\b",
9970 "^++nobin\\>" : "^\\+\\+nobin\\b",
9971 "^[A-Z]" : "^[A-Z]",
9972 "^\\$\\w\\+" : "^\\$[0-9A-Za-z_]+",
9973 "^\\(!\\|global\\|vglobal\\)$" : "^(!|global|vglobal)$",
9974 "^\\(WHILE\\|FOR\\)$" : "^(WHILE|FOR)$",
9975 "^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
9976 "^\\d" : "^\\d",
9977 "^\\h" : "^[A-Za-z_]",
9978 "^\\s" : "^\\s",
9979 "^\\s*\\\\" : "^\\s*\\\\",
9980 "^[ \\t]$" : "^[ \\t]$",
9981 "^[A-Za-z]$" : "^[A-Za-z]$",
9982 "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$",
9983 "^[0-9]$" : "^[0-9]$",
9984 "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$",
9985 "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$",
9986 "^[A-Za-z_]$" : "^[A-Za-z_]$",
9987 "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$",
9988 "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$",
9989 "^[A-Z]$" : "^[A-Z]$",
9990 "^[a-z]$" : "^[a-z]$",
9991 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
9992 "^[0-7]$" : "^[0-7]$",
9993 "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$",
9994 "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$",
9995 "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
9996}
9997
9998function viml_add(lst, item) {
9999 lst.push(item);
10000}
10001
10002function viml_call(func, args) {
10003 return func.apply(null, args);
10004}
10005
10006function viml_char2nr(c) {
10007 return c.charCodeAt(0);
10008}
10009
10010function viml_empty(obj) {
10011 return obj.length == 0;
10012}
10013
10014function viml_equalci(a, b) {
10015 return a.toLowerCase() == b.toLowerCase();
10016}
10017
10018function viml_eqreg(s, reg) {
10019 var mx = new RegExp(pat_vim2js[reg]);
10020 return mx.exec(s) != null;
10021}
10022
10023function viml_eqregh(s, reg) {
10024 var mx = new RegExp(pat_vim2js[reg]);
10025 return mx.exec(s) != null;
10026}
10027
10028function viml_eqregq(s, reg) {
10029 var mx = new RegExp(pat_vim2js[reg], "i");
10030 return mx.exec(s) != null;
10031}
10032
10033function viml_escape(s, chars) {
10034 var r = '';
10035 for (var i = 0; i < s.length; ++i) {
10036 if (chars.indexOf(s.charAt(i)) != -1) {
10037 r = r + "\\" + s.charAt(i);
10038 } else {
10039 r = r + s.charAt(i);
10040 }
10041 }
10042 return r;
10043}
10044
10045function viml_extend(obj, item) {
10046 obj.push.apply(obj, item);
10047}
10048
10049function viml_insert(lst, item) {
10050 var idx = arguments.length >= 3 ? arguments[2] : 0;
10051 lst.splice(0, 0, item);
10052}
10053
10054function viml_join(lst, sep) {
10055 return lst.join(sep);
10056}
10057
10058function viml_keys(obj) {
10059 return Object.keys(obj);
10060}
10061
10062function viml_len(obj) {
10063 if (typeof obj === 'string') {
10064 var len = 0;
10065 for (var i = 0; i < obj.length; i++) {
10066 var c = obj.charCodeAt(i);
10067 len += c < 128 ? 1 : ((c > 127) && (c < 2048)) ? 2 : 3;
10068 }
10069 return len;
10070 }
10071 return obj.length;
10072}
10073
10074function viml_printf() {
10075 var a000 = Array.prototype.slice.call(arguments, 0);
10076 if (a000.length == 1) {
10077 return a000[0];
10078 } else {
10079 return util.format.apply(null, a000);
10080 }
10081}
10082
10083function viml_range(start) {
10084 var end = arguments.length >= 2 ? arguments[1] : null;
10085 if (end == null) {
10086 var x = [];
10087 for (var i = 0; i < start; ++i) {
10088 x.push(i);
10089 }
10090 return x;
10091 } else {
10092 var x = []
10093 for (var i = start; i <= end; ++i) {
10094 x.push(i);
10095 }
10096 return x;
10097 }
10098}
10099
10100function viml_readfile(path) {
10101 // FIXME: newline?
10102 return fs.readFileSync(path, 'utf-8').split(/\r\n|\r|\n/);
10103}
10104
10105function viml_remove(lst, idx) {
10106 lst.splice(idx, 1);
10107}
10108
10109function viml_split(s, sep) {
10110 if (sep == "\\zs") {
10111 return s.split("");
10112 }
10113 throw "NotImplemented";
10114}
10115
10116function viml_str2nr(s) {
10117 var base = arguments.length >= 2 ? arguments[1] : 10;
10118 return parseInt(s, base);
10119}
10120
10121function viml_string(obj) {
10122 return obj.toString();
10123}
10124
10125function viml_has_key(obj, key) {
10126 return obj[key] !== undefined;
10127}
10128
10129function viml_stridx(a, b) {
10130 return a.indexOf(b);
10131}
10132
10133var NIL = [];
10134var TRUE = 1;
10135var FALSE = 0;
10136var NODE_TOPLEVEL = 1;
10137var NODE_COMMENT = 2;
10138var NODE_EXCMD = 3;
10139var NODE_FUNCTION = 4;
10140var NODE_ENDFUNCTION = 5;
10141var NODE_DELFUNCTION = 6;
10142var NODE_RETURN = 7;
10143var NODE_EXCALL = 8;
10144var NODE_LET = 9;
10145var NODE_UNLET = 10;
10146var NODE_LOCKVAR = 11;
10147var NODE_UNLOCKVAR = 12;
10148var NODE_IF = 13;
10149var NODE_ELSEIF = 14;
10150var NODE_ELSE = 15;
10151var NODE_ENDIF = 16;
10152var NODE_WHILE = 17;
10153var NODE_ENDWHILE = 18;
10154var NODE_FOR = 19;
10155var NODE_ENDFOR = 20;
10156var NODE_CONTINUE = 21;
10157var NODE_BREAK = 22;
10158var NODE_TRY = 23;
10159var NODE_CATCH = 24;
10160var NODE_FINALLY = 25;
10161var NODE_ENDTRY = 26;
10162var NODE_THROW = 27;
10163var NODE_ECHO = 28;
10164var NODE_ECHON = 29;
10165var NODE_ECHOHL = 30;
10166var NODE_ECHOMSG = 31;
10167var NODE_ECHOERR = 32;
10168var NODE_EXECUTE = 33;
10169var NODE_TERNARY = 34;
10170var NODE_OR = 35;
10171var NODE_AND = 36;
10172var NODE_EQUAL = 37;
10173var NODE_EQUALCI = 38;
10174var NODE_EQUALCS = 39;
10175var NODE_NEQUAL = 40;
10176var NODE_NEQUALCI = 41;
10177var NODE_NEQUALCS = 42;
10178var NODE_GREATER = 43;
10179var NODE_GREATERCI = 44;
10180var NODE_GREATERCS = 45;
10181var NODE_GEQUAL = 46;
10182var NODE_GEQUALCI = 47;
10183var NODE_GEQUALCS = 48;
10184var NODE_SMALLER = 49;
10185var NODE_SMALLERCI = 50;
10186var NODE_SMALLERCS = 51;
10187var NODE_SEQUAL = 52;
10188var NODE_SEQUALCI = 53;
10189var NODE_SEQUALCS = 54;
10190var NODE_MATCH = 55;
10191var NODE_MATCHCI = 56;
10192var NODE_MATCHCS = 57;
10193var NODE_NOMATCH = 58;
10194var NODE_NOMATCHCI = 59;
10195var NODE_NOMATCHCS = 60;
10196var NODE_IS = 61;
10197var NODE_ISCI = 62;
10198var NODE_ISCS = 63;
10199var NODE_ISNOT = 64;
10200var NODE_ISNOTCI = 65;
10201var NODE_ISNOTCS = 66;
10202var NODE_ADD = 67;
10203var NODE_SUBTRACT = 68;
10204var NODE_CONCAT = 69;
10205var NODE_MULTIPLY = 70;
10206var NODE_DIVIDE = 71;
10207var NODE_REMAINDER = 72;
10208var NODE_NOT = 73;
10209var NODE_MINUS = 74;
10210var NODE_PLUS = 75;
10211var NODE_SUBSCRIPT = 76;
10212var NODE_SLICE = 77;
10213var NODE_CALL = 78;
10214var NODE_DOT = 79;
10215var NODE_NUMBER = 80;
10216var NODE_STRING = 81;
10217var NODE_LIST = 82;
10218var NODE_DICT = 83;
10219var NODE_OPTION = 85;
10220var NODE_IDENTIFIER = 86;
10221var NODE_CURLYNAME = 87;
10222var NODE_ENV = 88;
10223var NODE_REG = 89;
10224var NODE_CURLYNAMEPART = 90;
10225var NODE_CURLYNAMEEXPR = 91;
10226var NODE_LAMBDA = 92;
10227var NODE_BLOB = 93;
10228var NODE_CONST = 94;
10229var NODE_EVAL = 95;
10230var NODE_HEREDOC = 96;
10231var NODE_METHOD = 97;
10232var TOKEN_EOF = 1;
10233var TOKEN_EOL = 2;
10234var TOKEN_SPACE = 3;
10235var TOKEN_OROR = 4;
10236var TOKEN_ANDAND = 5;
10237var TOKEN_EQEQ = 6;
10238var TOKEN_EQEQCI = 7;
10239var TOKEN_EQEQCS = 8;
10240var TOKEN_NEQ = 9;
10241var TOKEN_NEQCI = 10;
10242var TOKEN_NEQCS = 11;
10243var TOKEN_GT = 12;
10244var TOKEN_GTCI = 13;
10245var TOKEN_GTCS = 14;
10246var TOKEN_GTEQ = 15;
10247var TOKEN_GTEQCI = 16;
10248var TOKEN_GTEQCS = 17;
10249var TOKEN_LT = 18;
10250var TOKEN_LTCI = 19;
10251var TOKEN_LTCS = 20;
10252var TOKEN_LTEQ = 21;
10253var TOKEN_LTEQCI = 22;
10254var TOKEN_LTEQCS = 23;
10255var TOKEN_MATCH = 24;
10256var TOKEN_MATCHCI = 25;
10257var TOKEN_MATCHCS = 26;
10258var TOKEN_NOMATCH = 27;
10259var TOKEN_NOMATCHCI = 28;
10260var TOKEN_NOMATCHCS = 29;
10261var TOKEN_IS = 30;
10262var TOKEN_ISCI = 31;
10263var TOKEN_ISCS = 32;
10264var TOKEN_ISNOT = 33;
10265var TOKEN_ISNOTCI = 34;
10266var TOKEN_ISNOTCS = 35;
10267var TOKEN_PLUS = 36;
10268var TOKEN_MINUS = 37;
10269var TOKEN_DOT = 38;
10270var TOKEN_STAR = 39;
10271var TOKEN_SLASH = 40;
10272var TOKEN_PERCENT = 41;
10273var TOKEN_NOT = 42;
10274var TOKEN_QUESTION = 43;
10275var TOKEN_COLON = 44;
10276var TOKEN_POPEN = 45;
10277var TOKEN_PCLOSE = 46;
10278var TOKEN_SQOPEN = 47;
10279var TOKEN_SQCLOSE = 48;
10280var TOKEN_COPEN = 49;
10281var TOKEN_CCLOSE = 50;
10282var TOKEN_COMMA = 51;
10283var TOKEN_NUMBER = 52;
10284var TOKEN_SQUOTE = 53;
10285var TOKEN_DQUOTE = 54;
10286var TOKEN_OPTION = 55;
10287var TOKEN_IDENTIFIER = 56;
10288var TOKEN_ENV = 57;
10289var TOKEN_REG = 58;
10290var TOKEN_EQ = 59;
10291var TOKEN_OR = 60;
10292var TOKEN_SEMICOLON = 61;
10293var TOKEN_BACKTICK = 62;
10294var TOKEN_DOTDOTDOT = 63;
10295var TOKEN_SHARP = 64;
10296var TOKEN_ARROW = 65;
10297var TOKEN_BLOB = 66;
10298var TOKEN_LITCOPEN = 67;
10299var TOKEN_DOTDOT = 68;
10300var TOKEN_HEREDOC = 69;
10301var MAX_FUNC_ARGS = 20;
10302function isalpha(c) {
10303 return viml_eqregh(c, "^[A-Za-z]$");
10304}
10305
10306function isalnum(c) {
10307 return viml_eqregh(c, "^[0-9A-Za-z]$");
10308}
10309
10310function isdigit(c) {
10311 return viml_eqregh(c, "^[0-9]$");
10312}
10313
10314function isodigit(c) {
10315 return viml_eqregh(c, "^[0-7]$");
10316}
10317
10318function isxdigit(c) {
10319 return viml_eqregh(c, "^[0-9A-Fa-f]$");
10320}
10321
10322function iswordc(c) {
10323 return viml_eqregh(c, "^[0-9A-Za-z_]$");
10324}
10325
10326function iswordc1(c) {
10327 return viml_eqregh(c, "^[A-Za-z_]$");
10328}
10329
10330function iswhite(c) {
10331 return viml_eqregh(c, "^[ \\t]$");
10332}
10333
10334function isnamec(c) {
10335 return viml_eqregh(c, "^[0-9A-Za-z_:#]$");
10336}
10337
10338function isnamec1(c) {
10339 return viml_eqregh(c, "^[A-Za-z_]$");
10340}
10341
10342function isargname(s) {
10343 return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$");
10344}
10345
10346function isvarname(s) {
10347 return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$");
10348}
10349
10350// FIXME:
10351function isidc(c) {
10352 return viml_eqregh(c, "^[0-9A-Za-z_]$");
10353}
10354
10355function isupper(c) {
10356 return viml_eqregh(c, "^[A-Z]$");
10357}
10358
10359function islower(c) {
10360 return viml_eqregh(c, "^[a-z]$");
10361}
10362
10363function ExArg() {
10364 var ea = {};
10365 ea.forceit = FALSE;
10366 ea.addr_count = 0;
10367 ea.line1 = 0;
10368 ea.line2 = 0;
10369 ea.flags = 0;
10370 ea.do_ecmd_cmd = "";
10371 ea.do_ecmd_lnum = 0;
10372 ea.append = 0;
10373 ea.usefilter = FALSE;
10374 ea.amount = 0;
10375 ea.regname = 0;
10376 ea.force_bin = 0;
10377 ea.read_edit = 0;
10378 ea.force_ff = 0;
10379 ea.force_enc = 0;
10380 ea.bad_char = 0;
10381 ea.linepos = {};
10382 ea.cmdpos = [];
10383 ea.argpos = [];
10384 ea.cmd = {};
10385 ea.modifiers = [];
10386 ea.range = [];
10387 ea.argopt = {};
10388 ea.argcmd = {};
10389 return ea;
10390}
10391
10392// struct node {
10393// int type
10394// pos pos
10395// node left
10396// node right
10397// node cond
10398// node rest
10399// node[] list
10400// node[] rlist
10401// node[] default_args
10402// node[] body
10403// string op
10404// string str
10405// int depth
10406// variant value
10407// }
10408// TOPLEVEL .body
10409// COMMENT .str
10410// EXCMD .ea .str
10411// FUNCTION .ea .body .left .rlist .default_args .attr .endfunction
10412// ENDFUNCTION .ea
10413// DELFUNCTION .ea .left
10414// RETURN .ea .left
10415// EXCALL .ea .left
10416// LET .ea .op .left .list .rest .right
10417// CONST .ea .op .left .list .rest .right
10418// UNLET .ea .list
10419// LOCKVAR .ea .depth .list
10420// UNLOCKVAR .ea .depth .list
10421// IF .ea .body .cond .elseif .else .endif
10422// ELSEIF .ea .body .cond
10423// ELSE .ea .body
10424// ENDIF .ea
10425// WHILE .ea .body .cond .endwhile
10426// ENDWHILE .ea
10427// FOR .ea .body .left .list .rest .right .endfor
10428// ENDFOR .ea
10429// CONTINUE .ea
10430// BREAK .ea
10431// TRY .ea .body .catch .finally .endtry
10432// CATCH .ea .body .pattern
10433// FINALLY .ea .body
10434// ENDTRY .ea
10435// THROW .ea .left
10436// EVAL .ea .left
10437// ECHO .ea .list
10438// ECHON .ea .list
10439// ECHOHL .ea .str
10440// ECHOMSG .ea .list
10441// ECHOERR .ea .list
10442// EXECUTE .ea .list
10443// TERNARY .cond .left .right
10444// OR .left .right
10445// AND .left .right
10446// EQUAL .left .right
10447// EQUALCI .left .right
10448// EQUALCS .left .right
10449// NEQUAL .left .right
10450// NEQUALCI .left .right
10451// NEQUALCS .left .right
10452// GREATER .left .right
10453// GREATERCI .left .right
10454// GREATERCS .left .right
10455// GEQUAL .left .right
10456// GEQUALCI .left .right
10457// GEQUALCS .left .right
10458// SMALLER .left .right
10459// SMALLERCI .left .right
10460// SMALLERCS .left .right
10461// SEQUAL .left .right
10462// SEQUALCI .left .right
10463// SEQUALCS .left .right
10464// MATCH .left .right
10465// MATCHCI .left .right
10466// MATCHCS .left .right
10467// NOMATCH .left .right
10468// NOMATCHCI .left .right
10469// NOMATCHCS .left .right
10470// IS .left .right
10471// ISCI .left .right
10472// ISCS .left .right
10473// ISNOT .left .right
10474// ISNOTCI .left .right
10475// ISNOTCS .left .right
10476// ADD .left .right
10477// SUBTRACT .left .right
10478// CONCAT .left .right
10479// MULTIPLY .left .right
10480// DIVIDE .left .right
10481// REMAINDER .left .right
10482// NOT .left
10483// MINUS .left
10484// PLUS .left
10485// SUBSCRIPT .left .right
10486// SLICE .left .rlist
10487// METHOD .left .right
10488// CALL .left .rlist
10489// DOT .left .right
10490// NUMBER .value
10491// STRING .value
10492// LIST .value
10493// DICT .value
10494// BLOB .value
10495// NESTING .left
10496// OPTION .value
10497// IDENTIFIER .value
10498// CURLYNAME .value
10499// ENV .value
10500// REG .value
10501// CURLYNAMEPART .value
10502// CURLYNAMEEXPR .value
10503// LAMBDA .rlist .left
10504// HEREDOC .rlist .op .body
10505function Node(type) {
10506 return {"type":type};
10507}
10508
10509function Err(msg, pos) {
10510 return viml_printf("vimlparser: %s: line %d col %d", msg, pos.lnum, pos.col);
10511}
10512
10513function VimLParser() { this.__init__.apply(this, arguments); }
10514VimLParser.prototype.__init__ = function() {
10515 var a000 = Array.prototype.slice.call(arguments, 0);
10516 if (viml_len(a000) > 0) {
10517 this.neovim = a000[0];
10518 }
10519 else {
10520 this.neovim = 0;
10521 }
10522 this.find_command_cache = {};
10523}
10524
10525VimLParser.prototype.push_context = function(node) {
10526 viml_insert(this.context, node);
10527}
10528
10529VimLParser.prototype.pop_context = function() {
10530 viml_remove(this.context, 0);
10531}
10532
10533VimLParser.prototype.find_context = function(type) {
10534 var i = 0;
10535 var __c3 = this.context;
10536 for (var __i3 = 0; __i3 < __c3.length; ++__i3) {
10537 var node = __c3[__i3];
10538 if (node.type == type) {
10539 return i;
10540 }
10541 i += 1;
10542 }
10543 return -1;
10544}
10545
10546VimLParser.prototype.add_node = function(node) {
10547 viml_add(this.context[0].body, node);
10548}
10549
10550VimLParser.prototype.check_missing_endfunction = function(ends, pos) {
10551 if (this.context[0].type == NODE_FUNCTION) {
10552 throw Err(viml_printf("E126: Missing :endfunction: %s", ends), pos);
10553 }
10554}
10555
10556VimLParser.prototype.check_missing_endif = function(ends, pos) {
10557 if (this.context[0].type == NODE_IF || this.context[0].type == NODE_ELSEIF || this.context[0].type == NODE_ELSE) {
10558 throw Err(viml_printf("E171: Missing :endif: %s", ends), pos);
10559 }
10560}
10561
10562VimLParser.prototype.check_missing_endtry = function(ends, pos) {
10563 if (this.context[0].type == NODE_TRY || this.context[0].type == NODE_CATCH || this.context[0].type == NODE_FINALLY) {
10564 throw Err(viml_printf("E600: Missing :endtry: %s", ends), pos);
10565 }
10566}
10567
10568VimLParser.prototype.check_missing_endwhile = function(ends, pos) {
10569 if (this.context[0].type == NODE_WHILE) {
10570 throw Err(viml_printf("E170: Missing :endwhile: %s", ends), pos);
10571 }
10572}
10573
10574VimLParser.prototype.check_missing_endfor = function(ends, pos) {
10575 if (this.context[0].type == NODE_FOR) {
10576 throw Err(viml_printf("E170: Missing :endfor: %s", ends), pos);
10577 }
10578}
10579
10580VimLParser.prototype.parse = function(reader) {
10581 this.reader = reader;
10582 this.context = [];
10583 var toplevel = Node(NODE_TOPLEVEL);
10584 toplevel.pos = this.reader.getpos();
10585 toplevel.body = [];
10586 this.push_context(toplevel);
10587 while (this.reader.peek() != "<EOF>") {
10588 this.parse_one_cmd();
10589 }
10590 this.check_missing_endfunction("TOPLEVEL", this.reader.getpos());
10591 this.check_missing_endif("TOPLEVEL", this.reader.getpos());
10592 this.check_missing_endtry("TOPLEVEL", this.reader.getpos());
10593 this.check_missing_endwhile("TOPLEVEL", this.reader.getpos());
10594 this.check_missing_endfor("TOPLEVEL", this.reader.getpos());
10595 this.pop_context();
10596 return toplevel;
10597}
10598
10599VimLParser.prototype.parse_one_cmd = function() {
10600 this.ea = ExArg();
10601 if (this.reader.peekn(2) == "#!") {
10602 this.parse_hashbang();
10603 this.reader.get();
10604 return;
10605 }
10606 this.reader.skip_white_and_colon();
10607 if (this.reader.peekn(1) == "") {
10608 this.reader.get();
10609 return;
10610 }
10611 if (this.reader.peekn(1) == "\"") {
10612 this.parse_comment();
10613 this.reader.get();
10614 return;
10615 }
10616 this.ea.linepos = this.reader.getpos();
10617 this.parse_command_modifiers();
10618 this.parse_range();
10619 this.parse_command();
10620 this.parse_trail();
10621}
10622
10623// FIXME:
10624VimLParser.prototype.parse_command_modifiers = function() {
10625 var modifiers = [];
10626 while (TRUE) {
10627 var pos = this.reader.tell();
10628 var d = "";
10629 if (isdigit(this.reader.peekn(1))) {
10630 var d = this.reader.read_digit();
10631 this.reader.skip_white();
10632 }
10633 var k = this.reader.read_alpha();
10634 var c = this.reader.peekn(1);
10635 this.reader.skip_white();
10636 if (viml_stridx("aboveleft", k) == 0 && viml_len(k) >= 3) {
10637 // abo\%[veleft]
10638 viml_add(modifiers, {"name":"aboveleft"});
10639 }
10640 else if (viml_stridx("belowright", k) == 0 && viml_len(k) >= 3) {
10641 // bel\%[owright]
10642 viml_add(modifiers, {"name":"belowright"});
10643 }
10644 else if (viml_stridx("browse", k) == 0 && viml_len(k) >= 3) {
10645 // bro\%[wse]
10646 viml_add(modifiers, {"name":"browse"});
10647 }
10648 else if (viml_stridx("botright", k) == 0 && viml_len(k) >= 2) {
10649 // bo\%[tright]
10650 viml_add(modifiers, {"name":"botright"});
10651 }
10652 else if (viml_stridx("confirm", k) == 0 && viml_len(k) >= 4) {
10653 // conf\%[irm]
10654 viml_add(modifiers, {"name":"confirm"});
10655 }
10656 else if (viml_stridx("keepmarks", k) == 0 && viml_len(k) >= 3) {
10657 // kee\%[pmarks]
10658 viml_add(modifiers, {"name":"keepmarks"});
10659 }
10660 else if (viml_stridx("keepalt", k) == 0 && viml_len(k) >= 5) {
10661 // keepa\%[lt]
10662 viml_add(modifiers, {"name":"keepalt"});
10663 }
10664 else if (viml_stridx("keepjumps", k) == 0 && viml_len(k) >= 5) {
10665 // keepj\%[umps]
10666 viml_add(modifiers, {"name":"keepjumps"});
10667 }
10668 else if (viml_stridx("keeppatterns", k) == 0 && viml_len(k) >= 5) {
10669 // keepp\%[atterns]
10670 viml_add(modifiers, {"name":"keeppatterns"});
10671 }
10672 else if (viml_stridx("hide", k) == 0 && viml_len(k) >= 3) {
10673 // hid\%[e]
10674 if (this.ends_excmds(c)) {
10675 break;
10676 }
10677 viml_add(modifiers, {"name":"hide"});
10678 }
10679 else if (viml_stridx("lockmarks", k) == 0 && viml_len(k) >= 3) {
10680 // loc\%[kmarks]
10681 viml_add(modifiers, {"name":"lockmarks"});
10682 }
10683 else if (viml_stridx("leftabove", k) == 0 && viml_len(k) >= 5) {
10684 // lefta\%[bove]
10685 viml_add(modifiers, {"name":"leftabove"});
10686 }
10687 else if (viml_stridx("noautocmd", k) == 0 && viml_len(k) >= 3) {
10688 // noa\%[utocmd]
10689 viml_add(modifiers, {"name":"noautocmd"});
10690 }
10691 else if (viml_stridx("noswapfile", k) == 0 && viml_len(k) >= 3) {
10692 // :nos\%[wapfile]
10693 viml_add(modifiers, {"name":"noswapfile"});
10694 }
10695 else if (viml_stridx("rightbelow", k) == 0 && viml_len(k) >= 6) {
10696 // rightb\%[elow]
10697 viml_add(modifiers, {"name":"rightbelow"});
10698 }
10699 else if (viml_stridx("sandbox", k) == 0 && viml_len(k) >= 3) {
10700 // san\%[dbox]
10701 viml_add(modifiers, {"name":"sandbox"});
10702 }
10703 else if (viml_stridx("silent", k) == 0 && viml_len(k) >= 3) {
10704 // sil\%[ent]
10705 if (c == "!") {
10706 this.reader.get();
10707 viml_add(modifiers, {"name":"silent", "bang":1});
10708 }
10709 else {
10710 viml_add(modifiers, {"name":"silent", "bang":0});
10711 }
10712 }
10713 else if (k == "tab") {
10714 // tab
10715 if (d != "") {
10716 viml_add(modifiers, {"name":"tab", "count":viml_str2nr(d, 10)});
10717 }
10718 else {
10719 viml_add(modifiers, {"name":"tab"});
10720 }
10721 }
10722 else if (viml_stridx("topleft", k) == 0 && viml_len(k) >= 2) {
10723 // to\%[pleft]
10724 viml_add(modifiers, {"name":"topleft"});
10725 }
10726 else if (viml_stridx("unsilent", k) == 0 && viml_len(k) >= 3) {
10727 // uns\%[ilent]
10728 viml_add(modifiers, {"name":"unsilent"});
10729 }
10730 else if (viml_stridx("vertical", k) == 0 && viml_len(k) >= 4) {
10731 // vert\%[ical]
10732 viml_add(modifiers, {"name":"vertical"});
10733 }
10734 else if (viml_stridx("verbose", k) == 0 && viml_len(k) >= 4) {
10735 // verb\%[ose]
10736 if (d != "") {
10737 viml_add(modifiers, {"name":"verbose", "count":viml_str2nr(d, 10)});
10738 }
10739 else {
10740 viml_add(modifiers, {"name":"verbose", "count":1});
10741 }
10742 }
10743 else {
10744 this.reader.seek_set(pos);
10745 break;
10746 }
10747 }
10748 this.ea.modifiers = modifiers;
10749}
10750
10751// FIXME:
10752VimLParser.prototype.parse_range = function() {
10753 var tokens = [];
10754 while (TRUE) {
10755 while (TRUE) {
10756 this.reader.skip_white();
10757 var c = this.reader.peekn(1);
10758 if (c == "") {
10759 break;
10760 }
10761 if (c == ".") {
10762 viml_add(tokens, this.reader.getn(1));
10763 }
10764 else if (c == "$") {
10765 viml_add(tokens, this.reader.getn(1));
10766 }
10767 else if (c == "'") {
10768 this.reader.getn(1);
10769 var m = this.reader.getn(1);
10770 if (m == "") {
10771 break;
10772 }
10773 viml_add(tokens, "'" + m);
10774 }
10775 else if (c == "/") {
10776 this.reader.getn(1);
10777 var __tmp = this.parse_pattern(c);
10778 var pattern = __tmp[0];
10779 var _ = __tmp[1];
10780 viml_add(tokens, pattern);
10781 }
10782 else if (c == "?") {
10783 this.reader.getn(1);
10784 var __tmp = this.parse_pattern(c);
10785 var pattern = __tmp[0];
10786 var _ = __tmp[1];
10787 viml_add(tokens, pattern);
10788 }
10789 else if (c == "\\") {
10790 var m = this.reader.p(1);
10791 if (m == "&" || m == "?" || m == "/") {
10792 this.reader.seek_cur(2);
10793 viml_add(tokens, "\\" + m);
10794 }
10795 else {
10796 throw Err("E10: \\\\ should be followed by /, ? or &", this.reader.getpos());
10797 }
10798 }
10799 else if (isdigit(c)) {
10800 viml_add(tokens, this.reader.read_digit());
10801 }
10802 while (TRUE) {
10803 this.reader.skip_white();
10804 if (this.reader.peekn(1) == "") {
10805 break;
10806 }
10807 var n = this.reader.read_integer();
10808 if (n == "") {
10809 break;
10810 }
10811 viml_add(tokens, n);
10812 }
10813 if (this.reader.p(0) != "/" && this.reader.p(0) != "?") {
10814 break;
10815 }
10816 }
10817 if (this.reader.peekn(1) == "%") {
10818 viml_add(tokens, this.reader.getn(1));
10819 }
10820 else if (this.reader.peekn(1) == "*") {
10821 // && &cpoptions !~ '\*'
10822 viml_add(tokens, this.reader.getn(1));
10823 }
10824 if (this.reader.peekn(1) == ";") {
10825 viml_add(tokens, this.reader.getn(1));
10826 continue;
10827 }
10828 else if (this.reader.peekn(1) == ",") {
10829 viml_add(tokens, this.reader.getn(1));
10830 continue;
10831 }
10832 break;
10833 }
10834 this.ea.range = tokens;
10835}
10836
10837// FIXME:
10838VimLParser.prototype.parse_pattern = function(delimiter) {
10839 var pattern = "";
10840 var endc = "";
10841 var inbracket = 0;
10842 while (TRUE) {
10843 var c = this.reader.getn(1);
10844 if (c == "") {
10845 break;
10846 }
10847 if (c == delimiter && inbracket == 0) {
10848 var endc = c;
10849 break;
10850 }
10851 pattern += c;
10852 if (c == "\\") {
10853 var c = this.reader.peekn(1);
10854 if (c == "") {
10855 throw Err("E682: Invalid search pattern or delimiter", this.reader.getpos());
10856 }
10857 this.reader.getn(1);
10858 pattern += c;
10859 }
10860 else if (c == "[") {
10861 inbracket += 1;
10862 }
10863 else if (c == "]") {
10864 inbracket -= 1;
10865 }
10866 }
10867 return [pattern, endc];
10868}
10869
10870VimLParser.prototype.parse_command = function() {
10871 this.reader.skip_white_and_colon();
10872 this.ea.cmdpos = this.reader.getpos();
10873 if (this.reader.peekn(1) == "" || this.reader.peekn(1) == "\"") {
10874 if (!viml_empty(this.ea.modifiers) || !viml_empty(this.ea.range)) {
10875 this.parse_cmd_modifier_range();
10876 }
10877 return;
10878 }
10879 this.ea.cmd = this.find_command();
10880 if (this.ea.cmd === NIL) {
10881 this.reader.setpos(this.ea.cmdpos);
10882 throw Err(viml_printf("E492: Not an editor command: %s", this.reader.peekline()), this.ea.cmdpos);
10883 }
10884 if (this.reader.peekn(1) == "!" && this.ea.cmd.name != "substitute" && this.ea.cmd.name != "smagic" && this.ea.cmd.name != "snomagic") {
10885 this.reader.getn(1);
10886 this.ea.forceit = TRUE;
10887 }
10888 else {
10889 this.ea.forceit = FALSE;
10890 }
10891 if (!viml_eqregh(this.ea.cmd.flags, "\\<BANG\\>") && this.ea.forceit && !viml_eqregh(this.ea.cmd.flags, "\\<USERCMD\\>")) {
10892 throw Err("E477: No ! allowed", this.ea.cmdpos);
10893 }
10894 if (this.ea.cmd.name != "!") {
10895 this.reader.skip_white();
10896 }
10897 this.ea.argpos = this.reader.getpos();
10898 if (viml_eqregh(this.ea.cmd.flags, "\\<ARGOPT\\>")) {
10899 this.parse_argopt();
10900 }
10901 if (this.ea.cmd.name == "write" || this.ea.cmd.name == "update") {
10902 if (this.reader.p(0) == ">") {
10903 if (this.reader.p(1) != ">") {
10904 throw Err("E494: Use w or w>>", this.ea.cmdpos);
10905 }
10906 this.reader.seek_cur(2);
10907 this.reader.skip_white();
10908 this.ea.append = 1;
10909 }
10910 else if (this.reader.peekn(1) == "!" && this.ea.cmd.name == "write") {
10911 this.reader.getn(1);
10912 this.ea.usefilter = TRUE;
10913 }
10914 }
10915 if (this.ea.cmd.name == "read") {
10916 if (this.ea.forceit) {
10917 this.ea.usefilter = TRUE;
10918 this.ea.forceit = FALSE;
10919 }
10920 else if (this.reader.peekn(1) == "!") {
10921 this.reader.getn(1);
10922 this.ea.usefilter = TRUE;
10923 }
10924 }
10925 if (this.ea.cmd.name == "<" || this.ea.cmd.name == ">") {
10926 this.ea.amount = 1;
10927 while (this.reader.peekn(1) == this.ea.cmd.name) {
10928 this.reader.getn(1);
10929 this.ea.amount += 1;
10930 }
10931 this.reader.skip_white();
10932 }
10933 if (viml_eqregh(this.ea.cmd.flags, "\\<EDITCMD\\>") && !this.ea.usefilter) {
10934 this.parse_argcmd();
10935 }
10936 this._parse_command(this.ea.cmd.parser);
10937}
10938
10939// TODO: self[a:parser]
10940VimLParser.prototype._parse_command = function(parser) {
10941 if (parser == "parse_cmd_append") {
10942 this.parse_cmd_append();
10943 }
10944 else if (parser == "parse_cmd_break") {
10945 this.parse_cmd_break();
10946 }
10947 else if (parser == "parse_cmd_call") {
10948 this.parse_cmd_call();
10949 }
10950 else if (parser == "parse_cmd_catch") {
10951 this.parse_cmd_catch();
10952 }
10953 else if (parser == "parse_cmd_common") {
10954 this.parse_cmd_common();
10955 }
10956 else if (parser == "parse_cmd_continue") {
10957 this.parse_cmd_continue();
10958 }
10959 else if (parser == "parse_cmd_delfunction") {
10960 this.parse_cmd_delfunction();
10961 }
10962 else if (parser == "parse_cmd_echo") {
10963 this.parse_cmd_echo();
10964 }
10965 else if (parser == "parse_cmd_echoerr") {
10966 this.parse_cmd_echoerr();
10967 }
10968 else if (parser == "parse_cmd_echohl") {
10969 this.parse_cmd_echohl();
10970 }
10971 else if (parser == "parse_cmd_echomsg") {
10972 this.parse_cmd_echomsg();
10973 }
10974 else if (parser == "parse_cmd_echon") {
10975 this.parse_cmd_echon();
10976 }
10977 else if (parser == "parse_cmd_else") {
10978 this.parse_cmd_else();
10979 }
10980 else if (parser == "parse_cmd_elseif") {
10981 this.parse_cmd_elseif();
10982 }
10983 else if (parser == "parse_cmd_endfor") {
10984 this.parse_cmd_endfor();
10985 }
10986 else if (parser == "parse_cmd_endfunction") {
10987 this.parse_cmd_endfunction();
10988 }
10989 else if (parser == "parse_cmd_endif") {
10990 this.parse_cmd_endif();
10991 }
10992 else if (parser == "parse_cmd_endtry") {
10993 this.parse_cmd_endtry();
10994 }
10995 else if (parser == "parse_cmd_endwhile") {
10996 this.parse_cmd_endwhile();
10997 }
10998 else if (parser == "parse_cmd_execute") {
10999 this.parse_cmd_execute();
11000 }
11001 else if (parser == "parse_cmd_finally") {
11002 this.parse_cmd_finally();
11003 }
11004 else if (parser == "parse_cmd_finish") {
11005 this.parse_cmd_finish();
11006 }
11007 else if (parser == "parse_cmd_for") {
11008 this.parse_cmd_for();
11009 }
11010 else if (parser == "parse_cmd_function") {
11011 this.parse_cmd_function();
11012 }
11013 else if (parser == "parse_cmd_if") {
11014 this.parse_cmd_if();
11015 }
11016 else if (parser == "parse_cmd_insert") {
11017 this.parse_cmd_insert();
11018 }
11019 else if (parser == "parse_cmd_let") {
11020 this.parse_cmd_let();
11021 }
11022 else if (parser == "parse_cmd_const") {
11023 this.parse_cmd_const();
11024 }
11025 else if (parser == "parse_cmd_loadkeymap") {
11026 this.parse_cmd_loadkeymap();
11027 }
11028 else if (parser == "parse_cmd_lockvar") {
11029 this.parse_cmd_lockvar();
11030 }
11031 else if (parser == "parse_cmd_lua") {
11032 this.parse_cmd_lua();
11033 }
11034 else if (parser == "parse_cmd_modifier_range") {
11035 this.parse_cmd_modifier_range();
11036 }
11037 else if (parser == "parse_cmd_mzscheme") {
11038 this.parse_cmd_mzscheme();
11039 }
11040 else if (parser == "parse_cmd_perl") {
11041 this.parse_cmd_perl();
11042 }
11043 else if (parser == "parse_cmd_python") {
11044 this.parse_cmd_python();
11045 }
11046 else if (parser == "parse_cmd_python3") {
11047 this.parse_cmd_python3();
11048 }
11049 else if (parser == "parse_cmd_return") {
11050 this.parse_cmd_return();
11051 }
11052 else if (parser == "parse_cmd_ruby") {
11053 this.parse_cmd_ruby();
11054 }
11055 else if (parser == "parse_cmd_tcl") {
11056 this.parse_cmd_tcl();
11057 }
11058 else if (parser == "parse_cmd_throw") {
11059 this.parse_cmd_throw();
11060 }
11061 else if (parser == "parse_cmd_eval") {
11062 this.parse_cmd_eval();
11063 }
11064 else if (parser == "parse_cmd_try") {
11065 this.parse_cmd_try();
11066 }
11067 else if (parser == "parse_cmd_unlet") {
11068 this.parse_cmd_unlet();
11069 }
11070 else if (parser == "parse_cmd_unlockvar") {
11071 this.parse_cmd_unlockvar();
11072 }
11073 else if (parser == "parse_cmd_usercmd") {
11074 this.parse_cmd_usercmd();
11075 }
11076 else if (parser == "parse_cmd_while") {
11077 this.parse_cmd_while();
11078 }
11079 else if (parser == "parse_wincmd") {
11080 this.parse_wincmd();
11081 }
11082 else if (parser == "parse_cmd_syntax") {
11083 this.parse_cmd_syntax();
11084 }
11085 else {
11086 throw viml_printf("unknown parser: %s", viml_string(parser));
11087 }
11088}
11089
11090VimLParser.prototype.find_command = function() {
11091 var c = this.reader.peekn(1);
11092 var name = "";
11093 if (c == "k") {
11094 this.reader.getn(1);
11095 var name = "k";
11096 }
11097 else if (c == "s" && viml_eqregh(this.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])")) {
11098 this.reader.getn(1);
11099 var name = "substitute";
11100 }
11101 else if (viml_eqregh(c, "[@*!=><&~#]")) {
11102 this.reader.getn(1);
11103 var name = c;
11104 }
11105 else if (this.reader.peekn(2) == "py") {
11106 var name = this.reader.read_alnum();
11107 }
11108 else {
11109 var pos = this.reader.tell();
11110 var name = this.reader.read_alpha();
11111 if (name != "del" && viml_eqregh(name, "\\v^d%[elete][lp]$")) {
11112 this.reader.seek_set(pos);
11113 var name = this.reader.getn(viml_len(name) - 1);
11114 }
11115 }
11116 if (name == "") {
11117 return NIL;
11118 }
11119 if (viml_has_key(this.find_command_cache, name)) {
11120 return this.find_command_cache[name];
11121 }
11122 var cmd = NIL;
11123 var __c4 = this.builtin_commands;
11124 for (var __i4 = 0; __i4 < __c4.length; ++__i4) {
11125 var x = __c4[__i4];
11126 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
11127 delete cmd;
11128 var cmd = x;
11129 break;
11130 }
11131 }
11132 if (this.neovim) {
11133 var __c5 = this.neovim_additional_commands;
11134 for (var __i5 = 0; __i5 < __c5.length; ++__i5) {
11135 var x = __c5[__i5];
11136 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
11137 delete cmd;
11138 var cmd = x;
11139 break;
11140 }
11141 }
11142 var __c6 = this.neovim_removed_commands;
11143 for (var __i6 = 0; __i6 < __c6.length; ++__i6) {
11144 var x = __c6[__i6];
11145 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
11146 delete cmd;
11147 var cmd = NIL;
11148 break;
11149 }
11150 }
11151 }
11152 // FIXME: user defined command
11153 if ((cmd === NIL || cmd.name == "Print") && viml_eqregh(name, "^[A-Z]")) {
11154 name += this.reader.read_alnum();
11155 delete cmd;
11156 var cmd = {"name":name, "flags":"USERCMD", "parser":"parse_cmd_usercmd"};
11157 }
11158 this.find_command_cache[name] = cmd;
11159 return cmd;
11160}
11161
11162// TODO:
11163VimLParser.prototype.parse_hashbang = function() {
11164 this.reader.getn(-1);
11165}
11166
11167// TODO:
11168// ++opt=val
11169VimLParser.prototype.parse_argopt = function() {
11170 while (this.reader.p(0) == "+" && this.reader.p(1) == "+") {
11171 var s = this.reader.peekn(20);
11172 if (viml_eqregh(s, "^++bin\\>")) {
11173 this.reader.getn(5);
11174 this.ea.force_bin = 1;
11175 }
11176 else if (viml_eqregh(s, "^++nobin\\>")) {
11177 this.reader.getn(7);
11178 this.ea.force_bin = 2;
11179 }
11180 else if (viml_eqregh(s, "^++edit\\>")) {
11181 this.reader.getn(6);
11182 this.ea.read_edit = 1;
11183 }
11184 else if (viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>")) {
11185 this.reader.getn(5);
11186 this.ea.force_ff = this.reader.read_alpha();
11187 }
11188 else if (viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>")) {
11189 this.reader.getn(13);
11190 this.ea.force_ff = this.reader.read_alpha();
11191 }
11192 else if (viml_eqregh(s, "^++enc=\\S")) {
11193 this.reader.getn(6);
11194 this.ea.force_enc = this.reader.read_nonwhite();
11195 }
11196 else if (viml_eqregh(s, "^++encoding=\\S")) {
11197 this.reader.getn(11);
11198 this.ea.force_enc = this.reader.read_nonwhite();
11199 }
11200 else if (viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>")) {
11201 this.reader.getn(6);
11202 if (viml_eqregh(s, "^++bad=keep")) {
11203 this.ea.bad_char = this.reader.getn(4);
11204 }
11205 else if (viml_eqregh(s, "^++bad=drop")) {
11206 this.ea.bad_char = this.reader.getn(4);
11207 }
11208 else {
11209 this.ea.bad_char = this.reader.getn(1);
11210 }
11211 }
11212 else if (viml_eqregh(s, "^++")) {
11213 throw Err("E474: Invalid Argument", this.reader.getpos());
11214 }
11215 else {
11216 break;
11217 }
11218 this.reader.skip_white();
11219 }
11220}
11221
11222// TODO:
11223// +command
11224VimLParser.prototype.parse_argcmd = function() {
11225 if (this.reader.peekn(1) == "+") {
11226 this.reader.getn(1);
11227 if (this.reader.peekn(1) == " ") {
11228 this.ea.do_ecmd_cmd = "$";
11229 }
11230 else {
11231 this.ea.do_ecmd_cmd = this.read_cmdarg();
11232 }
11233 }
11234}
11235
11236VimLParser.prototype.read_cmdarg = function() {
11237 var r = "";
11238 while (TRUE) {
11239 var c = this.reader.peekn(1);
11240 if (c == "" || iswhite(c)) {
11241 break;
11242 }
11243 this.reader.getn(1);
11244 if (c == "\\") {
11245 var c = this.reader.getn(1);
11246 }
11247 r += c;
11248 }
11249 return r;
11250}
11251
11252VimLParser.prototype.parse_comment = function() {
11253 var npos = this.reader.getpos();
11254 var c = this.reader.get();
11255 if (c != "\"") {
11256 throw Err(viml_printf("unexpected character: %s", c), npos);
11257 }
11258 var node = Node(NODE_COMMENT);
11259 node.pos = npos;
11260 node.str = this.reader.getn(-1);
11261 this.add_node(node);
11262}
11263
11264VimLParser.prototype.parse_trail = function() {
11265 this.reader.skip_white();
11266 var c = this.reader.peek();
11267 if (c == "<EOF>") {
11268 // pass
11269 }
11270 else if (c == "<EOL>") {
11271 this.reader.get();
11272 }
11273 else if (c == "|") {
11274 this.reader.get();
11275 }
11276 else if (c == "\"") {
11277 this.parse_comment();
11278 this.reader.get();
11279 }
11280 else {
11281 throw Err(viml_printf("E488: Trailing characters: %s", c), this.reader.getpos());
11282 }
11283}
11284
11285// modifier or range only command line
11286VimLParser.prototype.parse_cmd_modifier_range = function() {
11287 var node = Node(NODE_EXCMD);
11288 node.pos = this.ea.cmdpos;
11289 node.ea = this.ea;
11290 node.str = this.reader.getstr(this.ea.linepos, this.reader.getpos());
11291 this.add_node(node);
11292}
11293
11294// TODO:
11295VimLParser.prototype.parse_cmd_common = function() {
11296 var end = this.reader.getpos();
11297 if (viml_eqregh(this.ea.cmd.flags, "\\<TRLBAR\\>") && !this.ea.usefilter) {
11298 var end = this.separate_nextcmd();
11299 }
11300 else if (this.ea.cmd.name == "!" || this.ea.cmd.name == "global" || this.ea.cmd.name == "vglobal" || this.ea.usefilter) {
11301 while (TRUE) {
11302 var end = this.reader.getpos();
11303 if (this.reader.getn(1) == "") {
11304 break;
11305 }
11306 }
11307 }
11308 else {
11309 while (TRUE) {
11310 var end = this.reader.getpos();
11311 if (this.reader.getn(1) == "") {
11312 break;
11313 }
11314 }
11315 }
11316 var node = Node(NODE_EXCMD);
11317 node.pos = this.ea.cmdpos;
11318 node.ea = this.ea;
11319 node.str = this.reader.getstr(this.ea.linepos, end);
11320 this.add_node(node);
11321}
11322
11323VimLParser.prototype.separate_nextcmd = function() {
11324 if (this.ea.cmd.name == "vimgrep" || this.ea.cmd.name == "vimgrepadd" || this.ea.cmd.name == "lvimgrep" || this.ea.cmd.name == "lvimgrepadd") {
11325 this.skip_vimgrep_pat();
11326 }
11327 var pc = "";
11328 var end = this.reader.getpos();
11329 var nospend = end;
11330 while (TRUE) {
11331 var end = this.reader.getpos();
11332 if (!iswhite(pc)) {
11333 var nospend = end;
11334 }
11335 var c = this.reader.peek();
11336 if (c == "<EOF>" || c == "<EOL>") {
11337 break;
11338 }
11339 else if (c == "\x16") {
11340 // <C-V>
11341 this.reader.get();
11342 var end = this.reader.getpos();
11343 var nospend = this.reader.getpos();
11344 var c = this.reader.peek();
11345 if (c == "<EOF>" || c == "<EOL>") {
11346 break;
11347 }
11348 this.reader.get();
11349 }
11350 else if (this.reader.peekn(2) == "`=" && viml_eqregh(this.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>")) {
11351 this.reader.getn(2);
11352 this.parse_expr();
11353 var c = this.reader.peekn(1);
11354 if (c != "`") {
11355 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
11356 }
11357 this.reader.getn(1);
11358 }
11359 else if (c == "|" || c == "\n" || c == "\"" && !viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>") && (this.ea.cmd.name != "@" && this.ea.cmd.name != "*" || this.reader.getpos() != this.ea.argpos) && (this.ea.cmd.name != "redir" || this.reader.getpos().i != this.ea.argpos.i + 1 || pc != "@")) {
11360 var has_cpo_bar = FALSE;
11361 // &cpoptions =~ 'b'
11362 if ((!has_cpo_bar || !viml_eqregh(this.ea.cmd.flags, "\\<USECTRLV\\>")) && pc == "\\") {
11363 this.reader.get();
11364 }
11365 else {
11366 break;
11367 }
11368 }
11369 else {
11370 this.reader.get();
11371 }
11372 var pc = c;
11373 }
11374 if (!viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>")) {
11375 var end = nospend;
11376 }
11377 return end;
11378}
11379
11380// FIXME
11381VimLParser.prototype.skip_vimgrep_pat = function() {
11382 if (this.reader.peekn(1) == "") {
11383 // pass
11384 }
11385 else if (isidc(this.reader.peekn(1))) {
11386 // :vimgrep pattern fname
11387 this.reader.read_nonwhite();
11388 }
11389 else {
11390 // :vimgrep /pattern/[g][j] fname
11391 var c = this.reader.getn(1);
11392 var __tmp = this.parse_pattern(c);
11393 var _ = __tmp[0];
11394 var endc = __tmp[1];
11395 if (c != endc) {
11396 return;
11397 }
11398 while (this.reader.p(0) == "g" || this.reader.p(0) == "j") {
11399 this.reader.getn(1);
11400 }
11401 }
11402}
11403
11404VimLParser.prototype.parse_cmd_append = function() {
11405 this.reader.setpos(this.ea.linepos);
11406 var cmdline = this.reader.readline();
11407 var lines = [cmdline];
11408 var m = ".";
11409 while (TRUE) {
11410 if (this.reader.peek() == "<EOF>") {
11411 break;
11412 }
11413 var line = this.reader.getn(-1);
11414 viml_add(lines, line);
11415 if (line == m) {
11416 break;
11417 }
11418 this.reader.get();
11419 }
11420 var node = Node(NODE_EXCMD);
11421 node.pos = this.ea.cmdpos;
11422 node.ea = this.ea;
11423 node.str = viml_join(lines, "\n");
11424 this.add_node(node);
11425}
11426
11427VimLParser.prototype.parse_cmd_insert = function() {
11428 this.parse_cmd_append();
11429}
11430
11431VimLParser.prototype.parse_cmd_loadkeymap = function() {
11432 this.reader.setpos(this.ea.linepos);
11433 var cmdline = this.reader.readline();
11434 var lines = [cmdline];
11435 while (TRUE) {
11436 if (this.reader.peek() == "<EOF>") {
11437 break;
11438 }
11439 var line = this.reader.readline();
11440 viml_add(lines, line);
11441 }
11442 var node = Node(NODE_EXCMD);
11443 node.pos = this.ea.cmdpos;
11444 node.ea = this.ea;
11445 node.str = viml_join(lines, "\n");
11446 this.add_node(node);
11447}
11448
11449VimLParser.prototype.parse_cmd_lua = function() {
11450 var lines = [];
11451 this.reader.skip_white();
11452 if (this.reader.peekn(2) == "<<") {
11453 this.reader.getn(2);
11454 this.reader.skip_white();
11455 var m = this.reader.readline();
11456 if (m == "") {
11457 var m = ".";
11458 }
11459 this.reader.setpos(this.ea.linepos);
11460 var cmdline = this.reader.getn(-1);
11461 var lines = [cmdline];
11462 this.reader.get();
11463 while (TRUE) {
11464 if (this.reader.peek() == "<EOF>") {
11465 break;
11466 }
11467 var line = this.reader.getn(-1);
11468 viml_add(lines, line);
11469 if (line == m) {
11470 break;
11471 }
11472 this.reader.get();
11473 }
11474 }
11475 else {
11476 this.reader.setpos(this.ea.linepos);
11477 var cmdline = this.reader.getn(-1);
11478 var lines = [cmdline];
11479 }
11480 var node = Node(NODE_EXCMD);
11481 node.pos = this.ea.cmdpos;
11482 node.ea = this.ea;
11483 node.str = viml_join(lines, "\n");
11484 this.add_node(node);
11485}
11486
11487VimLParser.prototype.parse_cmd_mzscheme = function() {
11488 this.parse_cmd_lua();
11489}
11490
11491VimLParser.prototype.parse_cmd_perl = function() {
11492 this.parse_cmd_lua();
11493}
11494
11495VimLParser.prototype.parse_cmd_python = function() {
11496 this.parse_cmd_lua();
11497}
11498
11499VimLParser.prototype.parse_cmd_python3 = function() {
11500 this.parse_cmd_lua();
11501}
11502
11503VimLParser.prototype.parse_cmd_ruby = function() {
11504 this.parse_cmd_lua();
11505}
11506
11507VimLParser.prototype.parse_cmd_tcl = function() {
11508 this.parse_cmd_lua();
11509}
11510
11511VimLParser.prototype.parse_cmd_finish = function() {
11512 this.parse_cmd_common();
11513 if (this.context[0].type == NODE_TOPLEVEL) {
11514 this.reader.seek_end(0);
11515 }
11516}
11517
11518// FIXME
11519VimLParser.prototype.parse_cmd_usercmd = function() {
11520 this.parse_cmd_common();
11521}
11522
11523VimLParser.prototype.parse_cmd_function = function() {
11524 var pos = this.reader.tell();
11525 this.reader.skip_white();
11526 // :function
11527 if (this.ends_excmds(this.reader.peek())) {
11528 this.reader.seek_set(pos);
11529 this.parse_cmd_common();
11530 return;
11531 }
11532 // :function /pattern
11533 if (this.reader.peekn(1) == "/") {
11534 this.reader.seek_set(pos);
11535 this.parse_cmd_common();
11536 return;
11537 }
11538 var left = this.parse_lvalue_func();
11539 this.reader.skip_white();
11540 if (left.type == NODE_IDENTIFIER) {
11541 var s = left.value;
11542 var ss = viml_split(s, "\\zs");
11543 if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) {
11544 throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos);
11545 }
11546 }
11547 // :function {name}
11548 if (this.reader.peekn(1) != "(") {
11549 this.reader.seek_set(pos);
11550 this.parse_cmd_common();
11551 return;
11552 }
11553 // :function[!] {name}([arguments]) [range] [abort] [dict] [closure]
11554 var node = Node(NODE_FUNCTION);
11555 node.pos = this.ea.cmdpos;
11556 node.body = [];
11557 node.ea = this.ea;
11558 node.left = left;
11559 node.rlist = [];
11560 node.default_args = [];
11561 node.attr = {"range":0, "abort":0, "dict":0, "closure":0};
11562 node.endfunction = NIL;
11563 this.reader.getn(1);
11564 var tokenizer = new ExprTokenizer(this.reader);
11565 if (tokenizer.peek().type == TOKEN_PCLOSE) {
11566 tokenizer.get();
11567 }
11568 else {
11569 var named = {};
11570 while (TRUE) {
11571 var varnode = Node(NODE_IDENTIFIER);
11572 var token = tokenizer.get();
11573 if (token.type == TOKEN_IDENTIFIER) {
11574 if (!isargname(token.value) || token.value == "firstline" || token.value == "lastline") {
11575 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
11576 }
11577 else if (viml_has_key(named, token.value)) {
11578 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
11579 }
11580 named[token.value] = 1;
11581 varnode.pos = token.pos;
11582 varnode.value = token.value;
11583 viml_add(node.rlist, varnode);
11584 if (tokenizer.peek().type == TOKEN_EQ) {
11585 tokenizer.get();
11586 viml_add(node.default_args, this.parse_expr());
11587 }
11588 else if (viml_len(node.default_args) > 0) {
11589 throw Err("E989: Non-default argument follows default argument", varnode.pos);
11590 }
11591 // XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
11592 if (iswhite(this.reader.p(0)) && tokenizer.peek().type == TOKEN_COMMA) {
11593 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
11594 }
11595 var token = tokenizer.get();
11596 if (token.type == TOKEN_COMMA) {
11597 // XXX: Vim allows last comma. F(a, b, ) => OK
11598 if (tokenizer.peek().type == TOKEN_PCLOSE) {
11599 tokenizer.get();
11600 break;
11601 }
11602 }
11603 else if (token.type == TOKEN_PCLOSE) {
11604 break;
11605 }
11606 else {
11607 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11608 }
11609 }
11610 else if (token.type == TOKEN_DOTDOTDOT) {
11611 varnode.pos = token.pos;
11612 varnode.value = token.value;
11613 viml_add(node.rlist, varnode);
11614 var token = tokenizer.get();
11615 if (token.type == TOKEN_PCLOSE) {
11616 break;
11617 }
11618 else {
11619 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11620 }
11621 }
11622 else {
11623 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11624 }
11625 }
11626 }
11627 while (TRUE) {
11628 this.reader.skip_white();
11629 var epos = this.reader.getpos();
11630 var key = this.reader.read_alpha();
11631 if (key == "") {
11632 break;
11633 }
11634 else if (key == "range") {
11635 node.attr.range = TRUE;
11636 }
11637 else if (key == "abort") {
11638 node.attr.abort = TRUE;
11639 }
11640 else if (key == "dict") {
11641 node.attr.dict = TRUE;
11642 }
11643 else if (key == "closure") {
11644 node.attr.closure = TRUE;
11645 }
11646 else {
11647 throw Err(viml_printf("unexpected token: %s", key), epos);
11648 }
11649 }
11650 this.add_node(node);
11651 this.push_context(node);
11652}
11653
11654VimLParser.prototype.parse_cmd_endfunction = function() {
11655 this.check_missing_endif("ENDFUNCTION", this.ea.cmdpos);
11656 this.check_missing_endtry("ENDFUNCTION", this.ea.cmdpos);
11657 this.check_missing_endwhile("ENDFUNCTION", this.ea.cmdpos);
11658 this.check_missing_endfor("ENDFUNCTION", this.ea.cmdpos);
11659 if (this.context[0].type != NODE_FUNCTION) {
11660 throw Err("E193: :endfunction not inside a function", this.ea.cmdpos);
11661 }
11662 this.reader.getn(-1);
11663 var node = Node(NODE_ENDFUNCTION);
11664 node.pos = this.ea.cmdpos;
11665 node.ea = this.ea;
11666 this.context[0].endfunction = node;
11667 this.pop_context();
11668}
11669
11670VimLParser.prototype.parse_cmd_delfunction = function() {
11671 var node = Node(NODE_DELFUNCTION);
11672 node.pos = this.ea.cmdpos;
11673 node.ea = this.ea;
11674 node.left = this.parse_lvalue_func();
11675 this.add_node(node);
11676}
11677
11678VimLParser.prototype.parse_cmd_return = function() {
11679 if (this.find_context(NODE_FUNCTION) == -1) {
11680 throw Err("E133: :return not inside a function", this.ea.cmdpos);
11681 }
11682 var node = Node(NODE_RETURN);
11683 node.pos = this.ea.cmdpos;
11684 node.ea = this.ea;
11685 node.left = NIL;
11686 this.reader.skip_white();
11687 var c = this.reader.peek();
11688 if (c == "\"" || !this.ends_excmds(c)) {
11689 node.left = this.parse_expr();
11690 }
11691 this.add_node(node);
11692}
11693
11694VimLParser.prototype.parse_cmd_call = function() {
11695 var node = Node(NODE_EXCALL);
11696 node.pos = this.ea.cmdpos;
11697 node.ea = this.ea;
11698 this.reader.skip_white();
11699 var c = this.reader.peek();
11700 if (this.ends_excmds(c)) {
11701 throw Err("E471: Argument required", this.reader.getpos());
11702 }
11703 node.left = this.parse_expr();
11704 if (node.left.type != NODE_CALL) {
11705 throw Err("Not a function call", node.left.pos);
11706 }
11707 this.add_node(node);
11708}
11709
11710VimLParser.prototype.parse_heredoc = function() {
11711 var node = Node(NODE_HEREDOC);
11712 node.pos = this.ea.cmdpos;
11713 node.op = "";
11714 node.rlist = [];
11715 node.body = [];
11716 while (TRUE) {
11717 this.reader.skip_white();
11718 var key = this.reader.read_word();
11719 if (key == "") {
11720 break;
11721 }
11722 if (!islower(key[0])) {
11723 node.op = key;
11724 break;
11725 }
11726 else {
11727 viml_add(node.rlist, key);
11728 }
11729 }
11730 if (node.op == "") {
11731 throw Err("E172: Missing marker", this.reader.getpos());
11732 }
11733 this.parse_trail();
11734 while (TRUE) {
11735 if (this.reader.peek() == "<EOF>") {
11736 break;
11737 }
11738 var line = this.reader.getn(-1);
11739 if (line == node.op) {
11740 return node;
11741 }
11742 viml_add(node.body, line);
11743 this.reader.get();
11744 }
11745 throw Err(viml_printf("E990: Missing end marker '%s'", node.op), this.reader.getpos());
11746}
11747
11748VimLParser.prototype.parse_cmd_let = function() {
11749 var pos = this.reader.tell();
11750 this.reader.skip_white();
11751 // :let
11752 if (this.ends_excmds(this.reader.peek())) {
11753 this.reader.seek_set(pos);
11754 this.parse_cmd_common();
11755 return;
11756 }
11757 var lhs = this.parse_letlhs();
11758 this.reader.skip_white();
11759 var s1 = this.reader.peekn(1);
11760 var s2 = this.reader.peekn(2);
11761 // TODO check scriptversion?
11762 if (s2 == "..") {
11763 var s2 = this.reader.peekn(3);
11764 }
11765 else if (s2 == "=<") {
11766 var s2 = this.reader.peekn(3);
11767 }
11768 // :let {var-name} ..
11769 if (this.ends_excmds(s1) || s2 != "+=" && s2 != "-=" && s2 != ".=" && s2 != "..=" && s2 != "*=" && s2 != "/=" && s2 != "%=" && s2 != "=<<" && s1 != "=") {
11770 this.reader.seek_set(pos);
11771 this.parse_cmd_common();
11772 return;
11773 }
11774 // :let left op right
11775 var node = Node(NODE_LET);
11776 node.pos = this.ea.cmdpos;
11777 node.ea = this.ea;
11778 node.op = "";
11779 node.left = lhs.left;
11780 node.list = lhs.list;
11781 node.rest = lhs.rest;
11782 node.right = NIL;
11783 if (s2 == "+=" || s2 == "-=" || s2 == ".=" || s2 == "..=" || s2 == "*=" || s2 == "/=" || s2 == "%=") {
11784 this.reader.getn(viml_len(s2));
11785 node.op = s2;
11786 }
11787 else if (s2 == "=<<") {
11788 this.reader.getn(viml_len(s2));
11789 this.reader.skip_white();
11790 node.op = s2;
11791 node.right = this.parse_heredoc();
11792 this.add_node(node);
11793 return;
11794 }
11795 else if (s1 == "=") {
11796 this.reader.getn(1);
11797 node.op = s1;
11798 }
11799 else {
11800 throw "NOT REACHED";
11801 }
11802 node.right = this.parse_expr();
11803 this.add_node(node);
11804}
11805
11806VimLParser.prototype.parse_cmd_const = function() {
11807 var pos = this.reader.tell();
11808 this.reader.skip_white();
11809 // :const
11810 if (this.ends_excmds(this.reader.peek())) {
11811 this.reader.seek_set(pos);
11812 this.parse_cmd_common();
11813 return;
11814 }
11815 var lhs = this.parse_constlhs();
11816 this.reader.skip_white();
11817 var s1 = this.reader.peekn(1);
11818 // :const {var-name}
11819 if (this.ends_excmds(s1) || s1 != "=") {
11820 this.reader.seek_set(pos);
11821 this.parse_cmd_common();
11822 return;
11823 }
11824 // :const left op right
11825 var node = Node(NODE_CONST);
11826 node.pos = this.ea.cmdpos;
11827 node.ea = this.ea;
11828 this.reader.getn(1);
11829 node.op = s1;
11830 node.left = lhs.left;
11831 node.list = lhs.list;
11832 node.rest = lhs.rest;
11833 node.right = this.parse_expr();
11834 this.add_node(node);
11835}
11836
11837VimLParser.prototype.parse_cmd_unlet = function() {
11838 var node = Node(NODE_UNLET);
11839 node.pos = this.ea.cmdpos;
11840 node.ea = this.ea;
11841 node.list = this.parse_lvaluelist();
11842 this.add_node(node);
11843}
11844
11845VimLParser.prototype.parse_cmd_lockvar = function() {
11846 var node = Node(NODE_LOCKVAR);
11847 node.pos = this.ea.cmdpos;
11848 node.ea = this.ea;
11849 node.depth = NIL;
11850 node.list = [];
11851 this.reader.skip_white();
11852 if (isdigit(this.reader.peekn(1))) {
11853 node.depth = viml_str2nr(this.reader.read_digit(), 10);
11854 }
11855 node.list = this.parse_lvaluelist();
11856 this.add_node(node);
11857}
11858
11859VimLParser.prototype.parse_cmd_unlockvar = function() {
11860 var node = Node(NODE_UNLOCKVAR);
11861 node.pos = this.ea.cmdpos;
11862 node.ea = this.ea;
11863 node.depth = NIL;
11864 node.list = [];
11865 this.reader.skip_white();
11866 if (isdigit(this.reader.peekn(1))) {
11867 node.depth = viml_str2nr(this.reader.read_digit(), 10);
11868 }
11869 node.list = this.parse_lvaluelist();
11870 this.add_node(node);
11871}
11872
11873VimLParser.prototype.parse_cmd_if = function() {
11874 var node = Node(NODE_IF);
11875 node.pos = this.ea.cmdpos;
11876 node.body = [];
11877 node.ea = this.ea;
11878 node.cond = this.parse_expr();
11879 node.elseif = [];
11880 node._else = NIL;
11881 node.endif = NIL;
11882 this.add_node(node);
11883 this.push_context(node);
11884}
11885
11886VimLParser.prototype.parse_cmd_elseif = function() {
11887 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
11888 throw Err("E582: :elseif without :if", this.ea.cmdpos);
11889 }
11890 if (this.context[0].type != NODE_IF) {
11891 this.pop_context();
11892 }
11893 var node = Node(NODE_ELSEIF);
11894 node.pos = this.ea.cmdpos;
11895 node.body = [];
11896 node.ea = this.ea;
11897 node.cond = this.parse_expr();
11898 viml_add(this.context[0].elseif, node);
11899 this.push_context(node);
11900}
11901
11902VimLParser.prototype.parse_cmd_else = function() {
11903 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
11904 throw Err("E581: :else without :if", this.ea.cmdpos);
11905 }
11906 if (this.context[0].type != NODE_IF) {
11907 this.pop_context();
11908 }
11909 var node = Node(NODE_ELSE);
11910 node.pos = this.ea.cmdpos;
11911 node.body = [];
11912 node.ea = this.ea;
11913 this.context[0]._else = node;
11914 this.push_context(node);
11915}
11916
11917VimLParser.prototype.parse_cmd_endif = function() {
11918 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF && this.context[0].type != NODE_ELSE) {
11919 throw Err("E580: :endif without :if", this.ea.cmdpos);
11920 }
11921 if (this.context[0].type != NODE_IF) {
11922 this.pop_context();
11923 }
11924 var node = Node(NODE_ENDIF);
11925 node.pos = this.ea.cmdpos;
11926 node.ea = this.ea;
11927 this.context[0].endif = node;
11928 this.pop_context();
11929}
11930
11931VimLParser.prototype.parse_cmd_while = function() {
11932 var node = Node(NODE_WHILE);
11933 node.pos = this.ea.cmdpos;
11934 node.body = [];
11935 node.ea = this.ea;
11936 node.cond = this.parse_expr();
11937 node.endwhile = NIL;
11938 this.add_node(node);
11939 this.push_context(node);
11940}
11941
11942VimLParser.prototype.parse_cmd_endwhile = function() {
11943 if (this.context[0].type != NODE_WHILE) {
11944 throw Err("E588: :endwhile without :while", this.ea.cmdpos);
11945 }
11946 var node = Node(NODE_ENDWHILE);
11947 node.pos = this.ea.cmdpos;
11948 node.ea = this.ea;
11949 this.context[0].endwhile = node;
11950 this.pop_context();
11951}
11952
11953VimLParser.prototype.parse_cmd_for = function() {
11954 var node = Node(NODE_FOR);
11955 node.pos = this.ea.cmdpos;
11956 node.body = [];
11957 node.ea = this.ea;
11958 node.left = NIL;
11959 node.right = NIL;
11960 node.endfor = NIL;
11961 var lhs = this.parse_letlhs();
11962 node.left = lhs.left;
11963 node.list = lhs.list;
11964 node.rest = lhs.rest;
11965 this.reader.skip_white();
11966 var epos = this.reader.getpos();
11967 if (this.reader.read_alpha() != "in") {
11968 throw Err("Missing \"in\" after :for", epos);
11969 }
11970 node.right = this.parse_expr();
11971 this.add_node(node);
11972 this.push_context(node);
11973}
11974
11975VimLParser.prototype.parse_cmd_endfor = function() {
11976 if (this.context[0].type != NODE_FOR) {
11977 throw Err("E588: :endfor without :for", this.ea.cmdpos);
11978 }
11979 var node = Node(NODE_ENDFOR);
11980 node.pos = this.ea.cmdpos;
11981 node.ea = this.ea;
11982 this.context[0].endfor = node;
11983 this.pop_context();
11984}
11985
11986VimLParser.prototype.parse_cmd_continue = function() {
11987 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
11988 throw Err("E586: :continue without :while or :for", this.ea.cmdpos);
11989 }
11990 var node = Node(NODE_CONTINUE);
11991 node.pos = this.ea.cmdpos;
11992 node.ea = this.ea;
11993 this.add_node(node);
11994}
11995
11996VimLParser.prototype.parse_cmd_break = function() {
11997 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
11998 throw Err("E587: :break without :while or :for", this.ea.cmdpos);
11999 }
12000 var node = Node(NODE_BREAK);
12001 node.pos = this.ea.cmdpos;
12002 node.ea = this.ea;
12003 this.add_node(node);
12004}
12005
12006VimLParser.prototype.parse_cmd_try = function() {
12007 var node = Node(NODE_TRY);
12008 node.pos = this.ea.cmdpos;
12009 node.body = [];
12010 node.ea = this.ea;
12011 node.catch = [];
12012 node._finally = NIL;
12013 node.endtry = NIL;
12014 this.add_node(node);
12015 this.push_context(node);
12016}
12017
12018VimLParser.prototype.parse_cmd_catch = function() {
12019 if (this.context[0].type == NODE_FINALLY) {
12020 throw Err("E604: :catch after :finally", this.ea.cmdpos);
12021 }
12022 else if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
12023 throw Err("E603: :catch without :try", this.ea.cmdpos);
12024 }
12025 if (this.context[0].type != NODE_TRY) {
12026 this.pop_context();
12027 }
12028 var node = Node(NODE_CATCH);
12029 node.pos = this.ea.cmdpos;
12030 node.body = [];
12031 node.ea = this.ea;
12032 node.pattern = NIL;
12033 this.reader.skip_white();
12034 if (!this.ends_excmds(this.reader.peek())) {
12035 var __tmp = this.parse_pattern(this.reader.get());
12036 node.pattern = __tmp[0];
12037 var _ = __tmp[1];
12038 }
12039 viml_add(this.context[0].catch, node);
12040 this.push_context(node);
12041}
12042
12043VimLParser.prototype.parse_cmd_finally = function() {
12044 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
12045 throw Err("E606: :finally without :try", this.ea.cmdpos);
12046 }
12047 if (this.context[0].type != NODE_TRY) {
12048 this.pop_context();
12049 }
12050 var node = Node(NODE_FINALLY);
12051 node.pos = this.ea.cmdpos;
12052 node.body = [];
12053 node.ea = this.ea;
12054 this.context[0]._finally = node;
12055 this.push_context(node);
12056}
12057
12058VimLParser.prototype.parse_cmd_endtry = function() {
12059 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH && this.context[0].type != NODE_FINALLY) {
12060 throw Err("E602: :endtry without :try", this.ea.cmdpos);
12061 }
12062 if (this.context[0].type != NODE_TRY) {
12063 this.pop_context();
12064 }
12065 var node = Node(NODE_ENDTRY);
12066 node.pos = this.ea.cmdpos;
12067 node.ea = this.ea;
12068 this.context[0].endtry = node;
12069 this.pop_context();
12070}
12071
12072VimLParser.prototype.parse_cmd_throw = function() {
12073 var node = Node(NODE_THROW);
12074 node.pos = this.ea.cmdpos;
12075 node.ea = this.ea;
12076 node.left = this.parse_expr();
12077 this.add_node(node);
12078}
12079
12080VimLParser.prototype.parse_cmd_eval = function() {
12081 var node = Node(NODE_EVAL);
12082 node.pos = this.ea.cmdpos;
12083 node.ea = this.ea;
12084 node.left = this.parse_expr();
12085 this.add_node(node);
12086}
12087
12088VimLParser.prototype.parse_cmd_echo = function() {
12089 var node = Node(NODE_ECHO);
12090 node.pos = this.ea.cmdpos;
12091 node.ea = this.ea;
12092 node.list = this.parse_exprlist();
12093 this.add_node(node);
12094}
12095
12096VimLParser.prototype.parse_cmd_echon = function() {
12097 var node = Node(NODE_ECHON);
12098 node.pos = this.ea.cmdpos;
12099 node.ea = this.ea;
12100 node.list = this.parse_exprlist();
12101 this.add_node(node);
12102}
12103
12104VimLParser.prototype.parse_cmd_echohl = function() {
12105 var node = Node(NODE_ECHOHL);
12106 node.pos = this.ea.cmdpos;
12107 node.ea = this.ea;
12108 node.str = "";
12109 while (!this.ends_excmds(this.reader.peek())) {
12110 node.str += this.reader.get();
12111 }
12112 this.add_node(node);
12113}
12114
12115VimLParser.prototype.parse_cmd_echomsg = function() {
12116 var node = Node(NODE_ECHOMSG);
12117 node.pos = this.ea.cmdpos;
12118 node.ea = this.ea;
12119 node.list = this.parse_exprlist();
12120 this.add_node(node);
12121}
12122
12123VimLParser.prototype.parse_cmd_echoerr = function() {
12124 var node = Node(NODE_ECHOERR);
12125 node.pos = this.ea.cmdpos;
12126 node.ea = this.ea;
12127 node.list = this.parse_exprlist();
12128 this.add_node(node);
12129}
12130
12131VimLParser.prototype.parse_cmd_execute = function() {
12132 var node = Node(NODE_EXECUTE);
12133 node.pos = this.ea.cmdpos;
12134 node.ea = this.ea;
12135 node.list = this.parse_exprlist();
12136 this.add_node(node);
12137}
12138
12139VimLParser.prototype.parse_expr = function() {
12140 return new ExprParser(this.reader).parse();
12141}
12142
12143VimLParser.prototype.parse_exprlist = function() {
12144 var list = [];
12145 while (TRUE) {
12146 this.reader.skip_white();
12147 var c = this.reader.peek();
12148 if (c != "\"" && this.ends_excmds(c)) {
12149 break;
12150 }
12151 var node = this.parse_expr();
12152 viml_add(list, node);
12153 }
12154 return list;
12155}
12156
12157VimLParser.prototype.parse_lvalue_func = function() {
12158 var p = new LvalueParser(this.reader);
12159 var node = p.parse();
12160 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME || node.type == NODE_SUBSCRIPT || node.type == NODE_DOT || node.type == NODE_OPTION || node.type == NODE_ENV || node.type == NODE_REG) {
12161 return node;
12162 }
12163 throw Err("Invalid Expression", node.pos);
12164}
12165
12166// FIXME:
12167VimLParser.prototype.parse_lvalue = function() {
12168 var p = new LvalueParser(this.reader);
12169 var node = p.parse();
12170 if (node.type == NODE_IDENTIFIER) {
12171 if (!isvarname(node.value)) {
12172 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
12173 }
12174 }
12175 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME || node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT || node.type == NODE_OPTION || node.type == NODE_ENV || node.type == NODE_REG) {
12176 return node;
12177 }
12178 throw Err("Invalid Expression", node.pos);
12179}
12180
12181// TODO: merge with s:VimLParser.parse_lvalue()
12182VimLParser.prototype.parse_constlvalue = function() {
12183 var p = new LvalueParser(this.reader);
12184 var node = p.parse();
12185 if (node.type == NODE_IDENTIFIER) {
12186 if (!isvarname(node.value)) {
12187 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
12188 }
12189 }
12190 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME) {
12191 return node;
12192 }
12193 else if (node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT) {
12194 throw Err("E996: Cannot lock a list or dict", node.pos);
12195 }
12196 else if (node.type == NODE_OPTION) {
12197 throw Err("E996: Cannot lock an option", node.pos);
12198 }
12199 else if (node.type == NODE_ENV) {
12200 throw Err("E996: Cannot lock an environment variable", node.pos);
12201 }
12202 else if (node.type == NODE_REG) {
12203 throw Err("E996: Cannot lock a register", node.pos);
12204 }
12205 throw Err("Invalid Expression", node.pos);
12206}
12207
12208VimLParser.prototype.parse_lvaluelist = function() {
12209 var list = [];
12210 var node = this.parse_expr();
12211 viml_add(list, node);
12212 while (TRUE) {
12213 this.reader.skip_white();
12214 if (this.ends_excmds(this.reader.peek())) {
12215 break;
12216 }
12217 var node = this.parse_lvalue();
12218 viml_add(list, node);
12219 }
12220 return list;
12221}
12222
12223// FIXME:
12224VimLParser.prototype.parse_letlhs = function() {
12225 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
12226 var tokenizer = new ExprTokenizer(this.reader);
12227 if (tokenizer.peek().type == TOKEN_SQOPEN) {
12228 tokenizer.get();
12229 lhs.list = [];
12230 while (TRUE) {
12231 var node = this.parse_lvalue();
12232 viml_add(lhs.list, node);
12233 var token = tokenizer.get();
12234 if (token.type == TOKEN_SQCLOSE) {
12235 break;
12236 }
12237 else if (token.type == TOKEN_COMMA) {
12238 continue;
12239 }
12240 else if (token.type == TOKEN_SEMICOLON) {
12241 var node = this.parse_lvalue();
12242 lhs.rest = node;
12243 var token = tokenizer.get();
12244 if (token.type == TOKEN_SQCLOSE) {
12245 break;
12246 }
12247 else {
12248 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
12249 }
12250 }
12251 else {
12252 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
12253 }
12254 }
12255 }
12256 else {
12257 lhs.left = this.parse_lvalue();
12258 }
12259 return lhs;
12260}
12261
12262// TODO: merge with s:VimLParser.parse_letlhs() ?
12263VimLParser.prototype.parse_constlhs = function() {
12264 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
12265 var tokenizer = new ExprTokenizer(this.reader);
12266 if (tokenizer.peek().type == TOKEN_SQOPEN) {
12267 tokenizer.get();
12268 lhs.list = [];
12269 while (TRUE) {
12270 var node = this.parse_lvalue();
12271 viml_add(lhs.list, node);
12272 var token = tokenizer.get();
12273 if (token.type == TOKEN_SQCLOSE) {
12274 break;
12275 }
12276 else if (token.type == TOKEN_COMMA) {
12277 continue;
12278 }
12279 else if (token.type == TOKEN_SEMICOLON) {
12280 var node = this.parse_lvalue();
12281 lhs.rest = node;
12282 var token = tokenizer.get();
12283 if (token.type == TOKEN_SQCLOSE) {
12284 break;
12285 }
12286 else {
12287 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
12288 }
12289 }
12290 else {
12291 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
12292 }
12293 }
12294 }
12295 else {
12296 lhs.left = this.parse_constlvalue();
12297 }
12298 return lhs;
12299}
12300
12301VimLParser.prototype.ends_excmds = function(c) {
12302 return c == "" || c == "|" || c == "\"" || c == "<EOF>" || c == "<EOL>";
12303}
12304
12305// FIXME: validate argument
12306VimLParser.prototype.parse_wincmd = function() {
12307 var c = this.reader.getn(1);
12308 if (c == "") {
12309 throw Err("E471: Argument required", this.reader.getpos());
12310 }
12311 else if (c == "g" || c == "\x07") {
12312 // <C-G>
12313 var c2 = this.reader.getn(1);
12314 if (c2 == "" || iswhite(c2)) {
12315 throw Err("E474: Invalid Argument", this.reader.getpos());
12316 }
12317 }
12318 var end = this.reader.getpos();
12319 this.reader.skip_white();
12320 if (!this.ends_excmds(this.reader.peek())) {
12321 throw Err("E474: Invalid Argument", this.reader.getpos());
12322 }
12323 var node = Node(NODE_EXCMD);
12324 node.pos = this.ea.cmdpos;
12325 node.ea = this.ea;
12326 node.str = this.reader.getstr(this.ea.linepos, end);
12327 this.add_node(node);
12328}
12329
12330// FIXME: validate argument
12331VimLParser.prototype.parse_cmd_syntax = function() {
12332 var end = this.reader.getpos();
12333 while (TRUE) {
12334 var end = this.reader.getpos();
12335 var c = this.reader.peek();
12336 if (c == "/" || c == "'" || c == "\"") {
12337 this.reader.getn(1);
12338 this.parse_pattern(c);
12339 }
12340 else if (c == "=") {
12341 this.reader.getn(1);
12342 this.parse_pattern(" ");
12343 }
12344 else if (this.ends_excmds(c)) {
12345 break;
12346 }
12347 this.reader.getn(1);
12348 }
12349 var node = Node(NODE_EXCMD);
12350 node.pos = this.ea.cmdpos;
12351 node.ea = this.ea;
12352 node.str = this.reader.getstr(this.ea.linepos, end);
12353 this.add_node(node);
12354}
12355
12356VimLParser.prototype.neovim_additional_commands = [{"name":"rshada", "minlen":3, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"wshada", "minlen":3, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}];
12357VimLParser.prototype.neovim_removed_commands = [{"name":"Print", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"fixdel", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"helpfind", "minlen":5, "flags":"EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"open", "minlen":1, "flags":"RANGE|BANG|EXTRA", "parser":"parse_cmd_common"}, {"name":"shell", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tearoff", "minlen":2, "flags":"NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"gvim", "minlen":2, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}];
12358// To find new builtin_commands, run the below script.
12359// $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
12360VimLParser.prototype.builtin_commands = [{"name":"append", "minlen":1, "flags":"BANG|RANGE|ZEROR|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_append"}, {"name":"abbreviate", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"abclear", "minlen":3, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"aboveleft", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"all", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"amenu", "minlen":2, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"anoremenu", "minlen":2, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"args", "minlen":2, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"argadd", "minlen":4, "flags":"BANG|NEEDARG|RANGE|NOTADR|ZEROR|FILES|TRLBAR", "parser":"parse_cmd_common"}, {"name":"argdelete", "minlen":4, "flags":"BANG|RANGE|NOTADR|FILES|TRLBAR", "parser":"parse_cmd_common"}, {"name":"argedit", "minlen":4, "flags":"BANG|NEEDARG|RANGE|NOTADR|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"argdo", "minlen":5, "flags":"BANG|NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"argglobal", "minlen":4, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"arglocal", "minlen":4, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"argument", "minlen":4, "flags":"BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"ascii", "minlen":2, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"autocmd", "minlen":2, "flags":"BANG|EXTRA|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"augroup", "minlen":3, "flags":"BANG|WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"aunmenu", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"buffer", "minlen":1, "flags":"BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"bNext", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"ball", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"badd", "minlen":3, "flags":"NEEDARG|FILE1|EDITCMD|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"bdelete", "minlen":2, "flags":"BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"behave", "minlen":2, "flags":"NEEDARG|WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"belowright", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"bfirst", "minlen":2, "flags":"BANG|RANGE|NOTADR|TRLBAR", "parser":"parse_cmd_common"}, {"name":"blast", "minlen":2, "flags":"BANG|RANGE|NOTADR|TRLBAR", "parser":"parse_cmd_common"}, {"name":"bmodified", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"bnext", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"botright", "minlen":2, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"bprevious", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"brewind", "minlen":2, "flags":"BANG|RANGE|NOTADR|TRLBAR", "parser":"parse_cmd_common"}, {"name":"break", "minlen":4, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_break"}, {"name":"breakadd", "minlen":6, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"breakdel", "minlen":6, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"breaklist", "minlen":6, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"browse", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"bufdo", "minlen":5, "flags":"BANG|NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"buffers", "minlen":7, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"bunload", "minlen":3, "flags":"BANG|RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"bwipeout", "minlen":2, "flags":"BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"change", "minlen":1, "flags":"BANG|WHOLEFOLD|RANGE|COUNT|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"cNext", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cNfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cabbrev", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cabclear", "minlen":4, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"caddbuffer", "minlen":3, "flags":"RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"caddexpr", "minlen":5, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR", "parser":"parse_cmd_common"}, {"name":"caddfile", "minlen":5, "flags":"TRLBAR|FILE1", "parser":"parse_cmd_common"}, {"name":"call", "minlen":3, "flags":"RANGE|NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_call"}, {"name":"catch", "minlen":3, "flags":"EXTRA|SBOXOK|CMDWIN", "parser":"parse_cmd_catch"}, {"name":"cbuffer", "minlen":2, "flags":"BANG|RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cc", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cclose", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cd", "minlen":2, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"center", "minlen":2, "flags":"TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"cexpr", "minlen":3, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cfile", "minlen":2, "flags":"TRLBAR|FILE1|BANG", "parser":"parse_cmd_common"}, {"name":"cfirst", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cgetbuffer", "minlen":5, "flags":"RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cgetexpr", "minlen":5, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cgetfile", "minlen":2, "flags":"TRLBAR|FILE1", "parser":"parse_cmd_common"}, {"name":"changes", "minlen":7, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"chdir", "minlen":3, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"checkpath", "minlen":3, "flags":"TRLBAR|BANG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"checktime", "minlen":6, "flags":"RANGE|NOTADR|BUFNAME|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"clist", "minlen":2, "flags":"BANG|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"clast", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"close", "minlen":3, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cmapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cmenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cnext", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cnewer", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cnfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cnoremap", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cnoreabbrev", "minlen":6, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cnoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"copy", "minlen":2, "flags":"RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"colder", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"colorscheme", "minlen":4, "flags":"WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"command", "minlen":3, "flags":"EXTRA|BANG|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"comclear", "minlen":4, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"compiler", "minlen":4, "flags":"BANG|TRLBAR|WORD1|CMDWIN", "parser":"parse_cmd_common"}, {"name":"continue", "minlen":3, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_continue"}, {"name":"confirm", "minlen":4, "flags":"NEEDARG|EXTRA|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"copen", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"cprevious", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cpfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cquit", "minlen":2, "flags":"TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"crewind", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"cscope", "minlen":2, "flags":"EXTRA|NOTRLCOM|XFILE", "parser":"parse_cmd_common"}, {"name":"cstag", "minlen":3, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"cunmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cunabbrev", "minlen":4, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"cwindow", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"delete", "minlen":1, "flags":"RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"delmarks", "minlen":4, "flags":"BANG|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"debug", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"debuggreedy", "minlen":6, "flags":"RANGE|NOTADR|ZEROR|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"delcommand", "minlen":4, "flags":"NEEDARG|WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"delfunction", "minlen":4, "flags":"BANG|NEEDARG|WORD1|CMDWIN", "parser":"parse_cmd_delfunction"}, {"name":"diffupdate", "minlen":3, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"diffget", "minlen":5, "flags":"RANGE|EXTRA|TRLBAR|MODIFY", "parser":"parse_cmd_common"}, {"name":"diffoff", "minlen":5, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"diffpatch", "minlen":5, "flags":"EXTRA|FILE1|TRLBAR|MODIFY", "parser":"parse_cmd_common"}, {"name":"diffput", "minlen":6, "flags":"RANGE|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"diffsplit", "minlen":5, "flags":"EXTRA|FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"diffthis", "minlen":5, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"digraphs", "minlen":3, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"display", "minlen":2, "flags":"EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"djump", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA", "parser":"parse_cmd_common"}, {"name":"dlist", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"doautocmd", "minlen":2, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"doautoall", "minlen":7, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"drop", "minlen":2, "flags":"FILES|EDITCMD|NEEDARG|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"dsearch", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"dsplit", "minlen":3, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA", "parser":"parse_cmd_common"}, {"name":"edit", "minlen":1, "flags":"BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"earlier", "minlen":2, "flags":"TRLBAR|EXTRA|NOSPC|CMDWIN", "parser":"parse_cmd_common"}, {"name":"echo", "minlen":2, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_echo"}, {"name":"echoerr", "minlen":5, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_echoerr"}, {"name":"echohl", "minlen":5, "flags":"EXTRA|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_echohl"}, {"name":"echomsg", "minlen":5, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_echomsg"}, {"name":"echon", "minlen":5, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_echon"}, {"name":"else", "minlen":2, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_else"}, {"name":"elseif", "minlen":5, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_elseif"}, {"name":"emenu", "minlen":2, "flags":"NEEDARG|EXTRA|TRLBAR|NOTRLCOM|RANGE|NOTADR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"endif", "minlen":2, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_endif"}, {"name":"endfor", "minlen":5, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_endfor"}, {"name":"endfunction", "minlen":4, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_endfunction"}, {"name":"endtry", "minlen":4, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_endtry"}, {"name":"endwhile", "minlen":4, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_endwhile"}, {"name":"enew", "minlen":3, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"eval", "minlen":2, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_eval"}, {"name":"ex", "minlen":2, "flags":"BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"execute", "minlen":3, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_execute"}, {"name":"exit", "minlen":3, "flags":"RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"exusage", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"file", "minlen":1, "flags":"RANGE|NOTADR|ZEROR|BANG|FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"files", "minlen":5, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"filetype", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"find", "minlen":3, "flags":"RANGE|NOTADR|BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"finally", "minlen":4, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_finally"}, {"name":"finish", "minlen":4, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_finish"}, {"name":"first", "minlen":3, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"fixdel", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"fold", "minlen":2, "flags":"RANGE|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"foldclose", "minlen":5, "flags":"RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"folddoopen", "minlen":5, "flags":"RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"folddoclosed", "minlen":7, "flags":"RANGE|DFLALL|NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"foldopen", "minlen":5, "flags":"RANGE|BANG|WHOLEFOLD|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"for", "minlen":3, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_for"}, {"name":"function", "minlen":2, "flags":"EXTRA|BANG|CMDWIN", "parser":"parse_cmd_function"}, {"name":"global", "minlen":1, "flags":"RANGE|WHOLEFOLD|BANG|EXTRA|DFLALL|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"goto", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"grep", "minlen":2, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"grepadd", "minlen":5, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"gui", "minlen":2, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"gvim", "minlen":2, "flags":"BANG|FILES|EDITCMD|ARGOPT|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"hardcopy", "minlen":2, "flags":"RANGE|COUNT|EXTRA|TRLBAR|DFLALL|BANG", "parser":"parse_cmd_common"}, {"name":"help", "minlen":1, "flags":"BANG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"helpfind", "minlen":5, "flags":"EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"helpgrep", "minlen":5, "flags":"EXTRA|NOTRLCOM|NEEDARG", "parser":"parse_cmd_common"}, {"name":"helptags", "minlen":5, "flags":"NEEDARG|FILES|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"highlight", "minlen":2, "flags":"BANG|EXTRA|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"hide", "minlen":3, "flags":"BANG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"history", "minlen":3, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"insert", "minlen":1, "flags":"BANG|RANGE|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_insert"}, {"name":"iabbrev", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"iabclear", "minlen":4, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"if", "minlen":2, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_if"}, {"name":"ijump", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA", "parser":"parse_cmd_common"}, {"name":"ilist", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"imap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"imapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"imenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"inoremap", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"inoreabbrev", "minlen":6, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"inoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"intro", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"isearch", "minlen":2, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"isplit", "minlen":3, "flags":"BANG|RANGE|DFLALL|WHOLEFOLD|EXTRA", "parser":"parse_cmd_common"}, {"name":"iunmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"iunabbrev", "minlen":4, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"iunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"join", "minlen":1, "flags":"BANG|RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"jumps", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"k", "minlen":1, "flags":"RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"keepalt", "minlen":5, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"keepmarks", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"keepjumps", "minlen":5, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"keeppatterns", "minlen":5, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"lNext", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lNfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"list", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"laddexpr", "minlen":3, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR", "parser":"parse_cmd_common"}, {"name":"laddbuffer", "minlen":5, "flags":"RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"laddfile", "minlen":5, "flags":"TRLBAR|FILE1", "parser":"parse_cmd_common"}, {"name":"last", "minlen":2, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"language", "minlen":3, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"later", "minlen":3, "flags":"TRLBAR|EXTRA|NOSPC|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lbuffer", "minlen":2, "flags":"BANG|RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lcd", "minlen":2, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lchdir", "minlen":3, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lclose", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lcscope", "minlen":3, "flags":"EXTRA|NOTRLCOM|XFILE", "parser":"parse_cmd_common"}, {"name":"left", "minlen":2, "flags":"TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"leftabove", "minlen":5, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"let", "minlen":3, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_let"}, {"name":"const", "minlen":4, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_const"}, {"name":"lexpr", "minlen":3, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lfile", "minlen":2, "flags":"TRLBAR|FILE1|BANG", "parser":"parse_cmd_common"}, {"name":"lfirst", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lgetbuffer", "minlen":5, "flags":"RANGE|NOTADR|WORD1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lgetexpr", "minlen":5, "flags":"NEEDARG|WORD1|NOTRLCOM|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lgetfile", "minlen":2, "flags":"TRLBAR|FILE1", "parser":"parse_cmd_common"}, {"name":"lgrep", "minlen":3, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"lgrepadd", "minlen":6, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"lhelpgrep", "minlen":2, "flags":"EXTRA|NOTRLCOM|NEEDARG", "parser":"parse_cmd_common"}, {"name":"ll", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"llast", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"list", "minlen":3, "flags":"BANG|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lmake", "minlen":4, "flags":"BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"lmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lmapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lnext", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lnewer", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lnfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lnoremap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"loadkeymap", "minlen":5, "flags":"CMDWIN", "parser":"parse_cmd_loadkeymap"}, {"name":"loadview", "minlen":2, "flags":"FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lockmarks", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"lockvar", "minlen":5, "flags":"BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN", "parser":"parse_cmd_lockvar"}, {"name":"lolder", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lopen", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"lprevious", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lpfile", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"lrewind", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR|BANG", "parser":"parse_cmd_common"}, {"name":"ls", "minlen":2, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"ltag", "minlen":2, "flags":"NOTADR|TRLBAR|BANG|WORD1", "parser":"parse_cmd_common"}, {"name":"lunmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lua", "minlen":3, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_lua"}, {"name":"luado", "minlen":4, "flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"luafile", "minlen":4, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"lvimgrep", "minlen":2, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"lvimgrepadd", "minlen":9, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"lwindow", "minlen":2, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"move", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"mark", "minlen":2, "flags":"RANGE|WORD1|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"make", "minlen":3, "flags":"BANG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"map", "minlen":3, "flags":"BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"mapclear", "minlen":4, "flags":"EXTRA|BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"marks", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"match", "minlen":3, "flags":"RANGE|NOTADR|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"menu", "minlen":2, "flags":"RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"menutranslate", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"messages", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"mkexrc", "minlen":2, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"mksession", "minlen":3, "flags":"BANG|FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"mkspell", "minlen":4, "flags":"BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"mkvimrc", "minlen":3, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"mkview", "minlen":5, "flags":"BANG|FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"mode", "minlen":3, "flags":"WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"mzscheme", "minlen":2, "flags":"RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN|SBOXOK", "parser":"parse_cmd_mzscheme"}, {"name":"mzfile", "minlen":3, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nbclose", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nbkey", "minlen":2, "flags":"EXTRA|NOTADR|NEEDARG", "parser":"parse_cmd_common"}, {"name":"nbstart", "minlen":3, "flags":"WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"next", "minlen":1, "flags":"RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"new", "minlen":3, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"nmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nmapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nmenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nnoremap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nnoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"noautocmd", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"noremap", "minlen":2, "flags":"BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nohlsearch", "minlen":3, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"noreabbrev", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"noremenu", "minlen":6, "flags":"RANGE|NOTADR|ZEROR|BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"normal", "minlen":4, "flags":"RANGE|BANG|EXTRA|NEEDARG|NOTRLCOM|USECTRLV|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"number", "minlen":2, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nunmap", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"nunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"oldfiles", "minlen":2, "flags":"BANG|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"open", "minlen":1, "flags":"RANGE|BANG|EXTRA", "parser":"parse_cmd_common"}, {"name":"omap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"omapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"omenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"only", "minlen":2, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"onoremap", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"onoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"options", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"ounmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"ounmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"ownsyntax", "minlen":2, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"pclose", "minlen":2, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"pedit", "minlen":3, "flags":"BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"perl", "minlen":2, "flags":"RANGE|EXTRA|DFLALL|NEEDARG|SBOXOK|CMDWIN", "parser":"parse_cmd_perl"}, {"name":"print", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|SBOXOK", "parser":"parse_cmd_common"}, {"name":"profdel", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"profile", "minlen":4, "flags":"BANG|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"promptfind", "minlen":3, "flags":"EXTRA|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"promptrepl", "minlen":7, "flags":"EXTRA|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"perldo", "minlen":5, "flags":"RANGE|EXTRA|DFLALL|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"pop", "minlen":2, "flags":"RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"popup", "minlen":4, "flags":"NEEDARG|EXTRA|BANG|TRLBAR|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"ppop", "minlen":2, "flags":"RANGE|NOTADR|BANG|COUNT|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"preserve", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"previous", "minlen":4, "flags":"EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"psearch", "minlen":2, "flags":"BANG|RANGE|WHOLEFOLD|DFLALL|EXTRA", "parser":"parse_cmd_common"}, {"name":"ptag", "minlen":2, "flags":"RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptNext", "minlen":3, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptfirst", "minlen":3, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptjump", "minlen":3, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"ptlast", "minlen":3, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"ptnext", "minlen":3, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptprevious", "minlen":3, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptrewind", "minlen":3, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"ptselect", "minlen":3, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"put", "minlen":2, "flags":"RANGE|WHOLEFOLD|BANG|REGSTR|TRLBAR|ZEROR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"pwd", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"py3", "minlen":3, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_python3"}, {"name":"python3", "minlen":7, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_python3"}, {"name":"py3file", "minlen":4, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"python", "minlen":2, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_python"}, {"name":"pyfile", "minlen":3, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"pydo", "minlen":3, "flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"py3do", "minlen":4, "flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"quit", "minlen":1, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"quitall", "minlen":5, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"qall", "minlen":2, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"read", "minlen":1, "flags":"BANG|RANGE|WHOLEFOLD|FILE1|ARGOPT|TRLBAR|ZEROR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"recover", "minlen":3, "flags":"BANG|FILE1|TRLBAR", "parser":"parse_cmd_common"}, {"name":"redo", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"redir", "minlen":4, "flags":"BANG|FILES|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"redraw", "minlen":4, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"redrawstatus", "minlen":7, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"registers", "minlen":3, "flags":"EXTRA|NOTRLCOM|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"resize", "minlen":3, "flags":"RANGE|NOTADR|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"retab", "minlen":3, "flags":"TRLBAR|RANGE|WHOLEFOLD|DFLALL|BANG|WORD1|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"return", "minlen":4, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_return"}, {"name":"rewind", "minlen":3, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"right", "minlen":2, "flags":"TRLBAR|RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"rightbelow", "minlen":6, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"ruby", "minlen":3, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_ruby"}, {"name":"rubydo", "minlen":5, "flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"rubyfile", "minlen":5, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"rundo", "minlen":4, "flags":"NEEDARG|FILE1", "parser":"parse_cmd_common"}, {"name":"runtime", "minlen":2, "flags":"BANG|NEEDARG|FILES|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"rviminfo", "minlen":2, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"substitute", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sNext", "minlen":2, "flags":"EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sandbox", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"sargument", "minlen":2, "flags":"BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sall", "minlen":3, "flags":"BANG|RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"saveas", "minlen":3, "flags":"BANG|DFLALL|FILE1|ARGOPT|CMDWIN|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbuffer", "minlen":2, "flags":"BANG|RANGE|NOTADR|BUFNAME|BUFUNL|COUNT|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbNext", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sball", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbfirst", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"sblast", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbmodified", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbnext", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbprevious", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sbrewind", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"scriptnames", "minlen":3, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"scriptencoding", "minlen":7, "flags":"WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"scscope", "minlen":3, "flags":"EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"set", "minlen":2, "flags":"TRLBAR|EXTRA|CMDWIN|SBOXOK", "parser":"parse_cmd_common"}, {"name":"setfiletype", "minlen":4, "flags":"TRLBAR|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"setglobal", "minlen":4, "flags":"TRLBAR|EXTRA|CMDWIN|SBOXOK", "parser":"parse_cmd_common"}, {"name":"setlocal", "minlen":4, "flags":"TRLBAR|EXTRA|CMDWIN|SBOXOK", "parser":"parse_cmd_common"}, {"name":"sfind", "minlen":2, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sfirst", "minlen":4, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"shell", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"simalt", "minlen":3, "flags":"NEEDARG|WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sign", "minlen":3, "flags":"NEEDARG|RANGE|NOTADR|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"silent", "minlen":3, "flags":"NEEDARG|EXTRA|BANG|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sleep", "minlen":2, "flags":"RANGE|NOTADR|COUNT|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"slast", "minlen":3, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"smagic", "minlen":2, "flags":"RANGE|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"smap", "minlen":4, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"smapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"smenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"snext", "minlen":2, "flags":"RANGE|NOTADR|BANG|FILES|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sniff", "minlen":3, "flags":"EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"snomagic", "minlen":3, "flags":"RANGE|WHOLEFOLD|EXTRA|CMDWIN", "parser":"parse_cmd_common"}, {"name":"snoremap", "minlen":4, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"snoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sort", "minlen":3, "flags":"RANGE|DFLALL|WHOLEFOLD|BANG|EXTRA|NOTRLCOM|MODIFY", "parser":"parse_cmd_common"}, {"name":"source", "minlen":2, "flags":"BANG|FILE1|TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"spelldump", "minlen":6, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"spellgood", "minlen":3, "flags":"BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"spellinfo", "minlen":6, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"spellrepall", "minlen":6, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"spellundo", "minlen":6, "flags":"BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"spellwrong", "minlen":6, "flags":"BANG|RANGE|NOTADR|NEEDARG|EXTRA|TRLBAR", "parser":"parse_cmd_common"}, {"name":"split", "minlen":2, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sprevious", "minlen":3, "flags":"EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"srewind", "minlen":3, "flags":"EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"stop", "minlen":2, "flags":"TRLBAR|BANG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"stag", "minlen":3, "flags":"RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"startinsert", "minlen":4, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"startgreplace", "minlen":6, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"startreplace", "minlen":6, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"stopinsert", "minlen":5, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"stjump", "minlen":3, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"stselect", "minlen":3, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"sunhide", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"sunmap", "minlen":4, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"suspend", "minlen":3, "flags":"TRLBAR|BANG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"sview", "minlen":2, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"swapname", "minlen":2, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"syntax", "minlen":2, "flags":"EXTRA|NOTRLCOM|CMDWIN", "parser":"parse_cmd_syntax"}, {"name":"syntime", "minlen":5, "flags":"NEEDARG|WORD1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"syncbind", "minlen":4, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"t", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"tNext", "minlen":2, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"tabNext", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabclose", "minlen":4, "flags":"RANGE|NOTADR|COUNT|BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tabdo", "minlen":4, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"tabedit", "minlen":4, "flags":"BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabfind", "minlen":4, "flags":"BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|NEEDARG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabfirst", "minlen":6, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"tablast", "minlen":4, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabmove", "minlen":4, "flags":"RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabnew", "minlen":6, "flags":"BANG|FILE1|RANGE|NOTADR|ZEROR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabnext", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabonly", "minlen":4, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tabprevious", "minlen":4, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabrewind", "minlen":4, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"tabs", "minlen":4, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tab", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"tag", "minlen":2, "flags":"RANGE|NOTADR|BANG|WORD1|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"tags", "minlen":4, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tcl", "minlen":2, "flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_tcl"}, {"name":"tcldo", "minlen":4, "flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tclfile", "minlen":4, "flags":"RANGE|FILE1|NEEDARG|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tearoff", "minlen":2, "flags":"NEEDARG|EXTRA|TRLBAR|NOTRLCOM|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tfirst", "minlen":2, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"throw", "minlen":2, "flags":"EXTRA|NEEDARG|SBOXOK|CMDWIN", "parser":"parse_cmd_throw"}, {"name":"tjump", "minlen":2, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"tlast", "minlen":2, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"tmenu", "minlen":2, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"tnext", "minlen":2, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"topleft", "minlen":2, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"tprevious", "minlen":2, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"trewind", "minlen":2, "flags":"RANGE|NOTADR|BANG|TRLBAR|ZEROR", "parser":"parse_cmd_common"}, {"name":"try", "minlen":3, "flags":"TRLBAR|SBOXOK|CMDWIN", "parser":"parse_cmd_try"}, {"name":"tselect", "minlen":2, "flags":"BANG|TRLBAR|WORD1", "parser":"parse_cmd_common"}, {"name":"tunmenu", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"undo", "minlen":1, "flags":"RANGE|NOTADR|COUNT|ZEROR|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"undojoin", "minlen":5, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"undolist", "minlen":5, "flags":"TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"unabbreviate", "minlen":3, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"unhide", "minlen":3, "flags":"RANGE|NOTADR|COUNT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"unlet", "minlen":3, "flags":"BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN", "parser":"parse_cmd_unlet"}, {"name":"unlockvar", "minlen":4, "flags":"BANG|EXTRA|NEEDARG|SBOXOK|CMDWIN", "parser":"parse_cmd_unlockvar"}, {"name":"unmap", "minlen":3, "flags":"BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"unmenu", "minlen":4, "flags":"BANG|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"unsilent", "minlen":3, "flags":"NEEDARG|EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"update", "minlen":2, "flags":"RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR", "parser":"parse_cmd_common"}, {"name":"vglobal", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|DFLALL|CMDWIN", "parser":"parse_cmd_common"}, {"name":"version", "minlen":2, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"verbose", "minlen":4, "flags":"NEEDARG|RANGE|NOTADR|EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vertical", "minlen":4, "flags":"NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"vimgrep", "minlen":3, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"vimgrepadd", "minlen":8, "flags":"RANGE|NOTADR|BANG|NEEDARG|EXTRA|NOTRLCOM|TRLBAR|XFILE", "parser":"parse_cmd_common"}, {"name":"visual", "minlen":2, "flags":"BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"viusage", "minlen":3, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"view", "minlen":3, "flags":"BANG|FILE1|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"vmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vmapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vmenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vnew", "minlen":3, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"vnoremap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vnoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vsplit", "minlen":2, "flags":"BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"vunmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"vunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"windo", "minlen":5, "flags":"BANG|NEEDARG|EXTRA|NOTRLCOM", "parser":"parse_cmd_common"}, {"name":"write", "minlen":1, "flags":"RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"wNext", "minlen":2, "flags":"RANGE|WHOLEFOLD|NOTADR|BANG|FILE1|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wall", "minlen":2, "flags":"BANG|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"while", "minlen":2, "flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "parser":"parse_cmd_while"}, {"name":"winsize", "minlen":2, "flags":"EXTRA|NEEDARG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wincmd", "minlen":4, "flags":"NEEDARG|WORD1|RANGE|NOTADR", "parser":"parse_wincmd"}, {"name":"winpos", "minlen":4, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"wnext", "minlen":2, "flags":"RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wprevious", "minlen":2, "flags":"RANGE|NOTADR|BANG|FILE1|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wq", "minlen":2, "flags":"RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wqall", "minlen":3, "flags":"BANG|FILE1|ARGOPT|DFLALL|TRLBAR", "parser":"parse_cmd_common"}, {"name":"wsverb", "minlen":2, "flags":"EXTRA|NOTADR|NEEDARG", "parser":"parse_cmd_common"}, {"name":"wundo", "minlen":2, "flags":"BANG|NEEDARG|FILE1", "parser":"parse_cmd_common"}, {"name":"wviminfo", "minlen":2, "flags":"BANG|FILE1|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xit", "minlen":1, "flags":"RANGE|WHOLEFOLD|BANG|FILE1|ARGOPT|DFLALL|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xall", "minlen":2, "flags":"BANG|TRLBAR", "parser":"parse_cmd_common"}, {"name":"xmapclear", "minlen":5, "flags":"EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xmenu", "minlen":3, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xnoremap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xnoremenu", "minlen":7, "flags":"RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xunmap", "minlen":2, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"xunmenu", "minlen":5, "flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "parser":"parse_cmd_common"}, {"name":"yank", "minlen":1, "flags":"RANGE|WHOLEFOLD|REGSTR|COUNT|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"z", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"!", "minlen":1, "flags":"RANGE|WHOLEFOLD|BANG|FILES|CMDWIN", "parser":"parse_cmd_common"}, {"name":"#", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"&", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"*", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"<", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"=", "minlen":1, "flags":"RANGE|TRLBAR|DFLALL|EXFLAGS|CMDWIN", "parser":"parse_cmd_common"}, {"name":">", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"name":"@", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"Next", "minlen":1, "flags":"EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR", "parser":"parse_cmd_common"}, {"name":"Print", "minlen":1, "flags":"RANGE|WHOLEFOLD|COUNT|EXFLAGS|TRLBAR|CMDWIN", "parser":"parse_cmd_common"}, {"name":"X", "minlen":1, "flags":"TRLBAR", "parser":"parse_cmd_common"}, {"name":"~", "minlen":1, "flags":"RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY", "parser":"parse_cmd_common"}, {"flags":"TRLBAR", "minlen":3, "name":"cbottom", "parser":"parse_cmd_common"}, {"flags":"BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL", "minlen":3, "name":"cdo", "parser":"parse_cmd_common"}, {"flags":"BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL", "minlen":3, "name":"cfdo", "parser":"parse_cmd_common"}, {"flags":"TRLBAR", "minlen":3, "name":"chistory", "parser":"parse_cmd_common"}, {"flags":"TRLBAR|CMDWIN", "minlen":3, "name":"clearjumps", "parser":"parse_cmd_common"}, {"flags":"BANG|NEEDARG|EXTRA|NOTRLCOM", "minlen":4, "name":"filter", "parser":"parse_cmd_common"}, {"flags":"RANGE|NOTADR|COUNT|TRLBAR", "minlen":5, "name":"helpclose", "parser":"parse_cmd_common"}, {"flags":"TRLBAR", "minlen":3, "name":"lbottom", "parser":"parse_cmd_common"}, {"flags":"BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL", "minlen":2, "name":"ldo", "parser":"parse_cmd_common"}, {"flags":"BANG|NEEDARG|EXTRA|NOTRLCOM|RANGE|NOTADR|DFLALL", "minlen":3, "name":"lfdo", "parser":"parse_cmd_common"}, {"flags":"TRLBAR", "minlen":3, "name":"lhistory", "parser":"parse_cmd_common"}, {"flags":"BANG|EXTRA|TRLBAR|CMDWIN", "minlen":3, "name":"llist", "parser":"parse_cmd_common"}, {"flags":"NEEDARG|EXTRA|NOTRLCOM", "minlen":3, "name":"noswapfile", "parser":"parse_cmd_common"}, {"flags":"BANG|FILE1|NEEDARG|TRLBAR|SBOXOK|CMDWIN", "minlen":2, "name":"packadd", "parser":"parse_cmd_common"}, {"flags":"BANG|TRLBAR|SBOXOK|CMDWIN", "minlen":5, "name":"packloadall", "parser":"parse_cmd_common"}, {"flags":"TRLBAR|CMDWIN|SBOXOK", "minlen":3, "name":"smile", "parser":"parse_cmd_common"}, {"flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "minlen":3, "name":"pyx", "parser":"parse_cmd_common"}, {"flags":"RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN", "minlen":4, "name":"pyxdo", "parser":"parse_cmd_common"}, {"flags":"RANGE|EXTRA|NEEDARG|CMDWIN", "minlen":7, "name":"pythonx", "parser":"parse_cmd_common"}, {"flags":"RANGE|FILE1|NEEDARG|CMDWIN", "minlen":4, "name":"pyxfile", "parser":"parse_cmd_common"}, {"flags":"RANGE|BANG|FILES|CMDWIN", "minlen":3, "name":"terminal", "parser":"parse_cmd_common"}, {"flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "minlen":3, "name":"tmap", "parser":"parse_cmd_common"}, {"flags":"EXTRA|TRLBAR|CMDWIN", "minlen":5, "name":"tmapclear", "parser":"parse_cmd_common"}, {"flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "minlen":3, "name":"tnoremap", "parser":"parse_cmd_common"}, {"flags":"EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN", "minlen":5, "name":"tunmap", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":4, "name":"cabove", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":3, "name":"cafter", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":3, "name":"cbefore", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":4, "name":"cbelow", "parser":"parse_cmd_common"}, {"flags":"EXTRA|NOTRLCOM|SBOXOK|CMDWIN", "minlen":4, "name":"const", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":3, "name":"labove", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":3, "name":"lafter", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":3, "name":"lbefore", "parser":"parse_cmd_common"}, {"flags":"RANGE|COUNT|TRLBAR", "minlen":4, "name":"lbelow", "parser":"parse_cmd_common"}, {"flags":"TRLBAR|CMDWIN", "minlen":7, "name":"redrawtabline", "parser":"parse_cmd_common"}, {"flags":"WORD1|TRLBAR|CMDWIN", "minlen":7, "name":"scriptversion", "parser":"parse_cmd_common"}, {"flags":"BANG|FILE1|TRLBAR|CMDWIN", "minlen":2, "name":"tcd", "parser":"parse_cmd_common"}, {"flags":"BANG|FILE1|TRLBAR|CMDWIN", "minlen":3, "name":"tchdir", "parser":"parse_cmd_common"}, {"flags":"RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|CTRLV|CMDWIN", "minlen":3, "name":"tlmenu", "parser":"parse_cmd_common"}, {"flags":"RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|CTRLV|CMDWIN", "minlen":3, "name":"tlnoremenu", "parser":"parse_cmd_common"}, {"flags":"RANGE|ZEROR|EXTRA|TRLBAR|NOTRLCOM|CTRLV|CMDWIN", "minlen":3, "name":"tlunmenu", "parser":"parse_cmd_common"}, {"flags":"EXTRA|TRLBAR|CMDWIN", "minlen":2, "name":"xrestore", "parser":"parse_cmd_common"}, {"flags":"EXTRA|BANG|SBOXOK|CMDWIN", "minlen":3, "name":"def", "parser":"parse_cmd_common"}, {"flags":"EXTRA|NEEDARG|TRLBAR|CMDWIN", "minlen":4, "name":"disassemble", "parser":"parse_cmd_common"}, {"flags":"TRLBAR|CMDWIN", "minlen":4, "name":"enddef", "parser":"parse_cmd_common"}, {"flags":"EXTRA|NOTRLCOM", "minlen":3, "name":"export", "parser":"parse_cmd_common"}, {"flags":"EXTRA|NOTRLCOM", "minlen":3, "name":"import", "parser":"parse_cmd_common"}, {"flags":"BANG|RANGE|NEEDARG|EXTRA|TRLBAR", "minlen":7, "name":"spellrare", "parser":"parse_cmd_common"}, {"flags":"", "minlen":4, "name":"vim9script", "parser":"parse_cmd_common"}];
12361// To find new builtin_functions, run the below script.
12362// $ scripts/update_builtin_functions.sh /path/to/vim/src/evalfunc.c
12363VimLParser.prototype.builtin_functions = [{"name":"abs", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"acos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"add", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"and", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"append", "min_argc":2, "max_argc":2, "argtype":"FEARG_LAST"}, {"name":"appendbufline", "min_argc":3, "max_argc":3, "argtype":"FEARG_LAST"}, {"name":"argc", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"argidx", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"arglistid", "min_argc":0, "max_argc":2, "argtype":"0"}, {"name":"argv", "min_argc":0, "max_argc":2, "argtype":"0"}, {"name":"asin", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"assert_beeps", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"assert_equal", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"assert_equalfile", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"assert_exception", "min_argc":1, "max_argc":2, "argtype":"0"}, {"name":"assert_fails", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"assert_false", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"assert_inrange", "min_argc":3, "max_argc":4, "argtype":"FEARG_3"}, {"name":"assert_match", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"assert_notequal", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"assert_notmatch", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"assert_report", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"assert_true", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"atan", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"atan2", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"balloon_gettext", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"balloon_show", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"balloon_split", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"browse", "min_argc":4, "max_argc":4, "argtype":"0"}, {"name":"browsedir", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"bufadd", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufexists", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"buffer_exists", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"buffer_name", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"buffer_number", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"buflisted", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufload", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufloaded", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufname", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufnr", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"bufwinid", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"bufwinnr", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"byte2line", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"byteidx", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"byteidxcomp", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"call", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"ceil", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_canread", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_close", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_close_in", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_evalexpr", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"ch_evalraw", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"ch_getbufnr", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_getjob", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_info", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"ch_log", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_logfile", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_open", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_read", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_readblob", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_readraw", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_sendexpr", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"ch_sendraw", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"ch_setoptions", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"ch_status", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"changenr", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"char2nr", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"chdir", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"cindent", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"clearmatches", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"col", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"complete", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"complete_add", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"complete_check", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"complete_info", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"confirm", "min_argc":1, "max_argc":4, "argtype":"FEARG_1"}, {"name":"copy", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"cos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"cosh", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"count", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"cscope_connection", "min_argc":0, "max_argc":3, "argtype":"0"}, {"name":"cursor", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"debugbreak", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"deepcopy", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"delete", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"deletebufline", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"did_filetype", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"diff_filler", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"diff_hlID", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"echoraw", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"empty", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"environ", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"escape", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"eval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"eventhandler", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"executable", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"execute", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"exepath", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"exists", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"exp", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"expand", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"expandcmd", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"extend", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"feedkeys", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"file_readable", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"filereadable", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"filewritable", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"filter", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"finddir", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"findfile", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"float2nr", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"floor", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"fmod", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"fnameescape", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"fnamemodify", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"foldclosed", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"foldclosedend", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"foldlevel", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"foldtext", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"foldtextresult", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"foreground", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"funcref", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"function", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"garbagecollect", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"get", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"getbufinfo", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"getbufline", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"getbufvar", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"getchangelist", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getchar", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"getcharmod", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcharsearch", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcmdline", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcmdpos", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcmdtype", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcmdwintype", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcompletion", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"getcurpos", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getcwd", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"getenv", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getfontname", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"getfperm", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getfsize", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getftime", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getftype", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getimstatus", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getjumplist", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"getline", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"getloclist", "min_argc":1, "max_argc":2, "argtype":"0"}, {"name":"getmatches", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"getmousepos", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getpid", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getpos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getqflist", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"getreg", "min_argc":0, "max_argc":3, "argtype":"FEARG_1"}, {"name":"getregtype", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"gettabinfo", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"gettabvar", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"gettabwinvar", "min_argc":3, "max_argc":4, "argtype":"FEARG_1"}, {"name":"gettagstack", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getwininfo", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getwinpos", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"getwinposx", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getwinposy", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"getwinvar", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"glob", "min_argc":1, "max_argc":4, "argtype":"FEARG_1"}, {"name":"glob2regpat", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"globpath", "min_argc":2, "max_argc":5, "argtype":"FEARG_2"}, {"name":"has", "min_argc":1, "max_argc":1, "argtype":"0"}, {"name":"has_key", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"haslocaldir", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"hasmapto", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"highlightID", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"highlight_exists", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"histadd", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"histdel", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"histget", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"histnr", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"hlID", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"hlexists", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"hostname", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"iconv", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"indent", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"index", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"input", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"inputdialog", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"inputlist", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"inputrestore", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"inputsave", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"inputsecret", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"insert", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"interrupt", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"invert", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"isdirectory", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"isinf", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"islocked", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"isnan", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"items", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"job_getchannel", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"job_info", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"job_setoptions", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"job_start", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"job_status", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"job_stop", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"join", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"js_decode", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"js_encode", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"json_decode", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"json_encode", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"keys", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"last_buffer_nr", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"len", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"libcall", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"libcallnr", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"line", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"line2byte", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"lispindent", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"list2str", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"listener_add", "min_argc":1, "max_argc":2, "argtype":"FEARG_2"}, {"name":"listener_flush", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"listener_remove", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"localtime", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"log", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"log10", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"luaeval", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"map", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"maparg", "min_argc":1, "max_argc":4, "argtype":"FEARG_1"}, {"name":"mapcheck", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"match", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"matchadd", "min_argc":2, "max_argc":5, "argtype":"FEARG_1"}, {"name":"matchaddpos", "min_argc":2, "max_argc":5, "argtype":"FEARG_1"}, {"name":"matcharg", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"matchdelete", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"matchend", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"matchlist", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"matchstr", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"matchstrpos", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"max", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"min", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"mkdir", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"mode", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"mzeval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"nextnonblank", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"nr2char", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"or", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"pathshorten", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"perleval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"popup_atcursor", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_beval", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_clear", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"popup_close", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_create", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_dialog", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_filter_menu", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"popup_filter_yesno", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"popup_findinfo", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"popup_findpreview", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"popup_getoptions", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"popup_getpos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"popup_hide", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"popup_locate", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"popup_menu", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_move", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_notification", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_setoptions", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_settext", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"popup_show", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"pow", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prevnonblank", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"printf", "min_argc":1, "max_argc":19, "argtype":"FEARG_2"}, {"name":"prompt_setcallback", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prompt_setinterrupt", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prompt_setprompt", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_add", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"prop_clear", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"prop_find", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_list", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_remove", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"prop_type_add", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_type_change", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_type_delete", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_type_get", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"prop_type_list", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"pum_getpos", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"pumvisible", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"py3eval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"pyeval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"pyxeval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"rand", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"range", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"readdir", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"readfile", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"reg_executing", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"reg_recording", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"reltime", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"reltimefloat", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"reltimestr", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"remote_expr", "min_argc":2, "max_argc":4, "argtype":"FEARG_1"}, {"name":"remote_foreground", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"remote_peek", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"remote_read", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"remote_send", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"remote_startserver", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"remove", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"rename", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"repeat", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"resolve", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"reverse", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"round", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"rubyeval", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"screenattr", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"screenchar", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"screenchars", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"screencol", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"screenpos", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"screenrow", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"screenstring", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"search", "min_argc":1, "max_argc":4, "argtype":"FEARG_1"}, {"name":"searchdecl", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"searchpair", "min_argc":3, "max_argc":7, "argtype":"0"}, {"name":"searchpairpos", "min_argc":3, "max_argc":7, "argtype":"0"}, {"name":"searchpos", "min_argc":1, "max_argc":4, "argtype":"FEARG_1"}, {"name":"server2client", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"serverlist", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"setbufline", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"setbufvar", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"setcharsearch", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"setcmdpos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"setenv", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"setfperm", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"setline", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"setloclist", "min_argc":2, "max_argc":4, "argtype":"FEARG_2"}, {"name":"setmatches", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"setpos", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"setqflist", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"setreg", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"settabvar", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"settabwinvar", "min_argc":4, "max_argc":4, "argtype":"FEARG_4"}, {"name":"settagstack", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"setwinvar", "min_argc":3, "max_argc":3, "argtype":"FEARG_3"}, {"name":"sha256", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"shellescape", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"shiftwidth", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sign_define", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"sign_getdefined", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sign_getplaced", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"sign_jump", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"sign_place", "min_argc":4, "max_argc":5, "argtype":"FEARG_1"}, {"name":"sign_placelist", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sign_undefine", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sign_unplace", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"sign_unplacelist", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"simplify", "min_argc":1, "max_argc":1, "argtype":"0"}, {"name":"sin", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sinh", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"sort", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"sound_clear", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"sound_playevent", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"sound_playfile", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"sound_stop", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"soundfold", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"spellbadword", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"spellsuggest", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"split", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"sqrt", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"srand", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"state", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"str2float", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"str2list", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"str2nr", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"strcharpart", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"strchars", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"strdisplaywidth", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"strftime", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"strgetchar", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"stridx", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"string", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"strlen", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"strpart", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"strptime", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"strridx", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"strtrans", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"strwidth", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"submatch", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"substitute", "min_argc":4, "max_argc":4, "argtype":"FEARG_1"}, {"name":"swapinfo", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"swapname", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"synID", "min_argc":3, "max_argc":3, "argtype":"0"}, {"name":"synIDattr", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"synIDtrans", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"synconcealed", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"synstack", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"system", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"systemlist", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"tabpagebuflist", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"tabpagenr", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"tabpagewinnr", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"tagfiles", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"taglist", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"tan", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"tanh", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"tempname", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"term_dumpdiff", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"term_dumpload", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_dumpwrite", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"term_getaltscreen", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getansicolors", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getattr", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_getcursor", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getjob", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getline", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_getscrolled", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getsize", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_getstatus", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_gettitle", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"term_gettty", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_list", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"term_scrape", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_sendkeys", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_setansicolors", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_setapi", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_setkill", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_setrestore", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_setsize", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"term_start", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"term_wait", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"test_alloc_fail", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"test_autochdir", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_feedinput", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_garbagecollect_now", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_garbagecollect_soon", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_getvalue", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_ignore_error", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_null_blob", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_channel", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_dict", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_job", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_list", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_partial", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_null_string", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_option_not_set", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_override", "min_argc":2, "max_argc":2, "argtype":"FEARG_2"}, {"name":"test_refcount", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_scrollbar", "min_argc":3, "max_argc":3, "argtype":"FEARG_2"}, {"name":"test_setmouse", "min_argc":2, "max_argc":2, "argtype":"0"}, {"name":"test_settime", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_srand_seed", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"test_unknown", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"test_void", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"timer_info", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"timer_pause", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}, {"name":"timer_start", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"timer_stop", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"timer_stopall", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"tolower", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"toupper", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"tr", "min_argc":3, "max_argc":3, "argtype":"FEARG_1"}, {"name":"trim", "min_argc":1, "max_argc":2, "argtype":"FEARG_1"}, {"name":"trunc", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"type", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"undofile", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"undotree", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"uniq", "min_argc":1, "max_argc":3, "argtype":"FEARG_1"}, {"name":"values", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"virtcol", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"visualmode", "min_argc":0, "max_argc":1, "argtype":"0"}, {"name":"wildmenumode", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"win_execute", "min_argc":2, "max_argc":3, "argtype":"FEARG_2"}, {"name":"win_findbuf", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_getid", "min_argc":0, "max_argc":2, "argtype":"FEARG_1"}, {"name":"win_gettype", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_gotoid", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_id2tabwin", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_id2win", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_screenpos", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"win_splitmove", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"winbufnr", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"wincol", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"windowsversion", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"winheight", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"winlayout", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"winline", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"winnr", "min_argc":0, "max_argc":1, "argtype":"FEARG_1"}, {"name":"winrestcmd", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"winrestview", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"winsaveview", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"winwidth", "min_argc":1, "max_argc":1, "argtype":"FEARG_1"}, {"name":"wordcount", "min_argc":0, "max_argc":0, "argtype":"0"}, {"name":"writefile", "min_argc":2, "max_argc":3, "argtype":"FEARG_1"}, {"name":"xor", "min_argc":2, "max_argc":2, "argtype":"FEARG_1"}];
12364function ExprTokenizer() { this.__init__.apply(this, arguments); }
12365ExprTokenizer.prototype.__init__ = function(reader) {
12366 this.reader = reader;
12367 this.cache = {};
12368}
12369
12370ExprTokenizer.prototype.token = function(type, value, pos) {
12371 return {"type":type, "value":value, "pos":pos};
12372}
12373
12374ExprTokenizer.prototype.peek = function() {
12375 var pos = this.reader.tell();
12376 var r = this.get();
12377 this.reader.seek_set(pos);
12378 return r;
12379}
12380
12381ExprTokenizer.prototype.get = function() {
12382 // FIXME: remove dirty hack
12383 if (viml_has_key(this.cache, this.reader.tell())) {
12384 var x = this.cache[this.reader.tell()];
12385 this.reader.seek_set(x[0]);
12386 return x[1];
12387 }
12388 var pos = this.reader.tell();
12389 this.reader.skip_white();
12390 var r = this.get2();
12391 this.cache[pos] = [this.reader.tell(), r];
12392 return r;
12393}
12394
12395ExprTokenizer.prototype.get2 = function() {
12396 var r = this.reader;
12397 var pos = r.getpos();
12398 var c = r.peek();
12399 if (c == "<EOF>") {
12400 return this.token(TOKEN_EOF, c, pos);
12401 }
12402 else if (c == "<EOL>") {
12403 r.seek_cur(1);
12404 return this.token(TOKEN_EOL, c, pos);
12405 }
12406 else if (iswhite(c)) {
12407 var s = r.read_white();
12408 return this.token(TOKEN_SPACE, s, pos);
12409 }
12410 else if (c == "0" && (r.p(1) == "X" || r.p(1) == "x") && isxdigit(r.p(2))) {
12411 var s = r.getn(3);
12412 s += r.read_xdigit();
12413 return this.token(TOKEN_NUMBER, s, pos);
12414 }
12415 else if (c == "0" && (r.p(1) == "B" || r.p(1) == "b") && (r.p(2) == "0" || r.p(2) == "1")) {
12416 var s = r.getn(3);
12417 s += r.read_bdigit();
12418 return this.token(TOKEN_NUMBER, s, pos);
12419 }
12420 else if (c == "0" && (r.p(1) == "Z" || r.p(1) == "z") && r.p(2) != ".") {
12421 var s = r.getn(2);
12422 s += r.read_blob();
12423 return this.token(TOKEN_BLOB, s, pos);
12424 }
12425 else if (isdigit(c)) {
12426 var s = r.read_digit();
12427 if (r.p(0) == "." && isdigit(r.p(1))) {
12428 s += r.getn(1);
12429 s += r.read_digit();
12430 if ((r.p(0) == "E" || r.p(0) == "e") && (isdigit(r.p(1)) || (r.p(1) == "-" || r.p(1) == "+") && isdigit(r.p(2)))) {
12431 s += r.getn(2);
12432 s += r.read_digit();
12433 }
12434 }
12435 return this.token(TOKEN_NUMBER, s, pos);
12436 }
12437 else if (c == "i" && r.p(1) == "s" && !isidc(r.p(2))) {
12438 if (r.p(2) == "?") {
12439 r.seek_cur(3);
12440 return this.token(TOKEN_ISCI, "is?", pos);
12441 }
12442 else if (r.p(2) == "#") {
12443 r.seek_cur(3);
12444 return this.token(TOKEN_ISCS, "is#", pos);
12445 }
12446 else {
12447 r.seek_cur(2);
12448 return this.token(TOKEN_IS, "is", pos);
12449 }
12450 }
12451 else if (c == "i" && r.p(1) == "s" && r.p(2) == "n" && r.p(3) == "o" && r.p(4) == "t" && !isidc(r.p(5))) {
12452 if (r.p(5) == "?") {
12453 r.seek_cur(6);
12454 return this.token(TOKEN_ISNOTCI, "isnot?", pos);
12455 }
12456 else if (r.p(5) == "#") {
12457 r.seek_cur(6);
12458 return this.token(TOKEN_ISNOTCS, "isnot#", pos);
12459 }
12460 else {
12461 r.seek_cur(5);
12462 return this.token(TOKEN_ISNOT, "isnot", pos);
12463 }
12464 }
12465 else if (isnamec1(c)) {
12466 var s = r.read_name();
12467 return this.token(TOKEN_IDENTIFIER, s, pos);
12468 }
12469 else if (c == "|" && r.p(1) == "|") {
12470 r.seek_cur(2);
12471 return this.token(TOKEN_OROR, "||", pos);
12472 }
12473 else if (c == "&" && r.p(1) == "&") {
12474 r.seek_cur(2);
12475 return this.token(TOKEN_ANDAND, "&&", pos);
12476 }
12477 else if (c == "=" && r.p(1) == "=") {
12478 if (r.p(2) == "?") {
12479 r.seek_cur(3);
12480 return this.token(TOKEN_EQEQCI, "==?", pos);
12481 }
12482 else if (r.p(2) == "#") {
12483 r.seek_cur(3);
12484 return this.token(TOKEN_EQEQCS, "==#", pos);
12485 }
12486 else {
12487 r.seek_cur(2);
12488 return this.token(TOKEN_EQEQ, "==", pos);
12489 }
12490 }
12491 else if (c == "!" && r.p(1) == "=") {
12492 if (r.p(2) == "?") {
12493 r.seek_cur(3);
12494 return this.token(TOKEN_NEQCI, "!=?", pos);
12495 }
12496 else if (r.p(2) == "#") {
12497 r.seek_cur(3);
12498 return this.token(TOKEN_NEQCS, "!=#", pos);
12499 }
12500 else {
12501 r.seek_cur(2);
12502 return this.token(TOKEN_NEQ, "!=", pos);
12503 }
12504 }
12505 else if (c == ">" && r.p(1) == "=") {
12506 if (r.p(2) == "?") {
12507 r.seek_cur(3);
12508 return this.token(TOKEN_GTEQCI, ">=?", pos);
12509 }
12510 else if (r.p(2) == "#") {
12511 r.seek_cur(3);
12512 return this.token(TOKEN_GTEQCS, ">=#", pos);
12513 }
12514 else {
12515 r.seek_cur(2);
12516 return this.token(TOKEN_GTEQ, ">=", pos);
12517 }
12518 }
12519 else if (c == "<" && r.p(1) == "=") {
12520 if (r.p(2) == "?") {
12521 r.seek_cur(3);
12522 return this.token(TOKEN_LTEQCI, "<=?", pos);
12523 }
12524 else if (r.p(2) == "#") {
12525 r.seek_cur(3);
12526 return this.token(TOKEN_LTEQCS, "<=#", pos);
12527 }
12528 else {
12529 r.seek_cur(2);
12530 return this.token(TOKEN_LTEQ, "<=", pos);
12531 }
12532 }
12533 else if (c == "=" && r.p(1) == "~") {
12534 if (r.p(2) == "?") {
12535 r.seek_cur(3);
12536 return this.token(TOKEN_MATCHCI, "=~?", pos);
12537 }
12538 else if (r.p(2) == "#") {
12539 r.seek_cur(3);
12540 return this.token(TOKEN_MATCHCS, "=~#", pos);
12541 }
12542 else {
12543 r.seek_cur(2);
12544 return this.token(TOKEN_MATCH, "=~", pos);
12545 }
12546 }
12547 else if (c == "!" && r.p(1) == "~") {
12548 if (r.p(2) == "?") {
12549 r.seek_cur(3);
12550 return this.token(TOKEN_NOMATCHCI, "!~?", pos);
12551 }
12552 else if (r.p(2) == "#") {
12553 r.seek_cur(3);
12554 return this.token(TOKEN_NOMATCHCS, "!~#", pos);
12555 }
12556 else {
12557 r.seek_cur(2);
12558 return this.token(TOKEN_NOMATCH, "!~", pos);
12559 }
12560 }
12561 else if (c == ">") {
12562 if (r.p(1) == "?") {
12563 r.seek_cur(2);
12564 return this.token(TOKEN_GTCI, ">?", pos);
12565 }
12566 else if (r.p(1) == "#") {
12567 r.seek_cur(2);
12568 return this.token(TOKEN_GTCS, ">#", pos);
12569 }
12570 else {
12571 r.seek_cur(1);
12572 return this.token(TOKEN_GT, ">", pos);
12573 }
12574 }
12575 else if (c == "<") {
12576 if (r.p(1) == "?") {
12577 r.seek_cur(2);
12578 return this.token(TOKEN_LTCI, "<?", pos);
12579 }
12580 else if (r.p(1) == "#") {
12581 r.seek_cur(2);
12582 return this.token(TOKEN_LTCS, "<#", pos);
12583 }
12584 else {
12585 r.seek_cur(1);
12586 return this.token(TOKEN_LT, "<", pos);
12587 }
12588 }
12589 else if (c == "+") {
12590 r.seek_cur(1);
12591 return this.token(TOKEN_PLUS, "+", pos);
12592 }
12593 else if (c == "-") {
12594 if (r.p(1) == ">") {
12595 r.seek_cur(2);
12596 return this.token(TOKEN_ARROW, "->", pos);
12597 }
12598 else {
12599 r.seek_cur(1);
12600 return this.token(TOKEN_MINUS, "-", pos);
12601 }
12602 }
12603 else if (c == ".") {
12604 if (r.p(1) == "." && r.p(2) == ".") {
12605 r.seek_cur(3);
12606 return this.token(TOKEN_DOTDOTDOT, "...", pos);
12607 }
12608 else if (r.p(1) == ".") {
12609 r.seek_cur(2);
12610 return this.token(TOKEN_DOTDOT, "..", pos);
12611 // TODO check scriptversion?
12612 }
12613 else {
12614 r.seek_cur(1);
12615 return this.token(TOKEN_DOT, ".", pos);
12616 // TODO check scriptversion?
12617 }
12618 }
12619 else if (c == "*") {
12620 r.seek_cur(1);
12621 return this.token(TOKEN_STAR, "*", pos);
12622 }
12623 else if (c == "/") {
12624 r.seek_cur(1);
12625 return this.token(TOKEN_SLASH, "/", pos);
12626 }
12627 else if (c == "%") {
12628 r.seek_cur(1);
12629 return this.token(TOKEN_PERCENT, "%", pos);
12630 }
12631 else if (c == "!") {
12632 r.seek_cur(1);
12633 return this.token(TOKEN_NOT, "!", pos);
12634 }
12635 else if (c == "?") {
12636 r.seek_cur(1);
12637 return this.token(TOKEN_QUESTION, "?", pos);
12638 }
12639 else if (c == ":") {
12640 r.seek_cur(1);
12641 return this.token(TOKEN_COLON, ":", pos);
12642 }
12643 else if (c == "#") {
12644 if (r.p(1) == "{") {
12645 r.seek_cur(2);
12646 return this.token(TOKEN_LITCOPEN, "#{", pos);
12647 }
12648 else {
12649 r.seek_cur(1);
12650 return this.token(TOKEN_SHARP, "#", pos);
12651 }
12652 }
12653 else if (c == "(") {
12654 r.seek_cur(1);
12655 return this.token(TOKEN_POPEN, "(", pos);
12656 }
12657 else if (c == ")") {
12658 r.seek_cur(1);
12659 return this.token(TOKEN_PCLOSE, ")", pos);
12660 }
12661 else if (c == "[") {
12662 r.seek_cur(1);
12663 return this.token(TOKEN_SQOPEN, "[", pos);
12664 }
12665 else if (c == "]") {
12666 r.seek_cur(1);
12667 return this.token(TOKEN_SQCLOSE, "]", pos);
12668 }
12669 else if (c == "{") {
12670 r.seek_cur(1);
12671 return this.token(TOKEN_COPEN, "{", pos);
12672 }
12673 else if (c == "}") {
12674 r.seek_cur(1);
12675 return this.token(TOKEN_CCLOSE, "}", pos);
12676 }
12677 else if (c == ",") {
12678 r.seek_cur(1);
12679 return this.token(TOKEN_COMMA, ",", pos);
12680 }
12681 else if (c == "'") {
12682 r.seek_cur(1);
12683 return this.token(TOKEN_SQUOTE, "'", pos);
12684 }
12685 else if (c == "\"") {
12686 r.seek_cur(1);
12687 return this.token(TOKEN_DQUOTE, "\"", pos);
12688 }
12689 else if (c == "$") {
12690 var s = r.getn(1);
12691 s += r.read_word();
12692 return this.token(TOKEN_ENV, s, pos);
12693 }
12694 else if (c == "@") {
12695 // @<EOL> is treated as @"
12696 return this.token(TOKEN_REG, r.getn(2), pos);
12697 }
12698 else if (c == "&") {
12699 var s = "";
12700 if ((r.p(1) == "g" || r.p(1) == "l") && r.p(2) == ":") {
12701 var s = r.getn(3) + r.read_word();
12702 }
12703 else {
12704 var s = r.getn(1) + r.read_word();
12705 }
12706 return this.token(TOKEN_OPTION, s, pos);
12707 }
12708 else if (c == "=") {
12709 r.seek_cur(1);
12710 return this.token(TOKEN_EQ, "=", pos);
12711 }
12712 else if (c == "|") {
12713 r.seek_cur(1);
12714 return this.token(TOKEN_OR, "|", pos);
12715 }
12716 else if (c == ";") {
12717 r.seek_cur(1);
12718 return this.token(TOKEN_SEMICOLON, ";", pos);
12719 }
12720 else if (c == "`") {
12721 r.seek_cur(1);
12722 return this.token(TOKEN_BACKTICK, "`", pos);
12723 }
12724 else {
12725 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
12726 }
12727}
12728
12729ExprTokenizer.prototype.get_sstring = function() {
12730 this.reader.skip_white();
12731 var c = this.reader.p(0);
12732 if (c != "'") {
12733 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
12734 }
12735 this.reader.seek_cur(1);
12736 var s = "";
12737 while (TRUE) {
12738 var c = this.reader.p(0);
12739 if (c == "<EOF>" || c == "<EOL>") {
12740 throw Err("unexpected EOL", this.reader.getpos());
12741 }
12742 else if (c == "'") {
12743 this.reader.seek_cur(1);
12744 if (this.reader.p(0) == "'") {
12745 this.reader.seek_cur(1);
12746 s += "''";
12747 }
12748 else {
12749 break;
12750 }
12751 }
12752 else {
12753 this.reader.seek_cur(1);
12754 s += c;
12755 }
12756 }
12757 return s;
12758}
12759
12760ExprTokenizer.prototype.get_dstring = function() {
12761 this.reader.skip_white();
12762 var c = this.reader.p(0);
12763 if (c != "\"") {
12764 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
12765 }
12766 this.reader.seek_cur(1);
12767 var s = "";
12768 while (TRUE) {
12769 var c = this.reader.p(0);
12770 if (c == "<EOF>" || c == "<EOL>") {
12771 throw Err("unexpectd EOL", this.reader.getpos());
12772 }
12773 else if (c == "\"") {
12774 this.reader.seek_cur(1);
12775 break;
12776 }
12777 else if (c == "\\") {
12778 this.reader.seek_cur(1);
12779 s += c;
12780 var c = this.reader.p(0);
12781 if (c == "<EOF>" || c == "<EOL>") {
12782 throw Err("ExprTokenizer: unexpected EOL", this.reader.getpos());
12783 }
12784 this.reader.seek_cur(1);
12785 s += c;
12786 }
12787 else {
12788 this.reader.seek_cur(1);
12789 s += c;
12790 }
12791 }
12792 return s;
12793}
12794
12795ExprTokenizer.prototype.parse_dict_literal_key = function() {
12796 this.reader.skip_white();
12797 var c = this.reader.peek();
12798 if (!isalnum(c) && c != "_" && c != "-") {
12799 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
12800 }
12801 var node = Node(NODE_STRING);
12802 var s = c;
12803 this.reader.seek_cur(1);
12804 node.pos = this.reader.getpos();
12805 while (TRUE) {
12806 var c = this.reader.p(0);
12807 if (c == "<EOF>" || c == "<EOL>") {
12808 throw Err("unexpectd EOL", this.reader.getpos());
12809 }
12810 if (!isalnum(c) && c != "_" && c != "-") {
12811 break;
12812 }
12813 this.reader.seek_cur(1);
12814 s += c;
12815 }
12816 node.value = "'" + s + "'";
12817 return node;
12818}
12819
12820function ExprParser() { this.__init__.apply(this, arguments); }
12821ExprParser.prototype.__init__ = function(reader) {
12822 this.reader = reader;
12823 this.tokenizer = new ExprTokenizer(reader);
12824}
12825
12826ExprParser.prototype.parse = function() {
12827 return this.parse_expr1();
12828}
12829
12830// expr1: expr2 ? expr1 : expr1
12831ExprParser.prototype.parse_expr1 = function() {
12832 var left = this.parse_expr2();
12833 var pos = this.reader.tell();
12834 var token = this.tokenizer.get();
12835 if (token.type == TOKEN_QUESTION) {
12836 var node = Node(NODE_TERNARY);
12837 node.pos = token.pos;
12838 node.cond = left;
12839 node.left = this.parse_expr1();
12840 var token = this.tokenizer.get();
12841 if (token.type != TOKEN_COLON) {
12842 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
12843 }
12844 node.right = this.parse_expr1();
12845 var left = node;
12846 }
12847 else {
12848 this.reader.seek_set(pos);
12849 }
12850 return left;
12851}
12852
12853// expr2: expr3 || expr3 ..
12854ExprParser.prototype.parse_expr2 = function() {
12855 var left = this.parse_expr3();
12856 while (TRUE) {
12857 var pos = this.reader.tell();
12858 var token = this.tokenizer.get();
12859 if (token.type == TOKEN_OROR) {
12860 var node = Node(NODE_OR);
12861 node.pos = token.pos;
12862 node.left = left;
12863 node.right = this.parse_expr3();
12864 var left = node;
12865 }
12866 else {
12867 this.reader.seek_set(pos);
12868 break;
12869 }
12870 }
12871 return left;
12872}
12873
12874// expr3: expr4 && expr4
12875ExprParser.prototype.parse_expr3 = function() {
12876 var left = this.parse_expr4();
12877 while (TRUE) {
12878 var pos = this.reader.tell();
12879 var token = this.tokenizer.get();
12880 if (token.type == TOKEN_ANDAND) {
12881 var node = Node(NODE_AND);
12882 node.pos = token.pos;
12883 node.left = left;
12884 node.right = this.parse_expr4();
12885 var left = node;
12886 }
12887 else {
12888 this.reader.seek_set(pos);
12889 break;
12890 }
12891 }
12892 return left;
12893}
12894
12895// expr4: expr5 == expr5
12896// expr5 != expr5
12897// expr5 > expr5
12898// expr5 >= expr5
12899// expr5 < expr5
12900// expr5 <= expr5
12901// expr5 =~ expr5
12902// expr5 !~ expr5
12903//
12904// expr5 ==? expr5
12905// expr5 ==# expr5
12906// etc.
12907//
12908// expr5 is expr5
12909// expr5 isnot expr5
12910ExprParser.prototype.parse_expr4 = function() {
12911 var left = this.parse_expr5();
12912 var pos = this.reader.tell();
12913 var token = this.tokenizer.get();
12914 if (token.type == TOKEN_EQEQ) {
12915 var node = Node(NODE_EQUAL);
12916 node.pos = token.pos;
12917 node.left = left;
12918 node.right = this.parse_expr5();
12919 var left = node;
12920 }
12921 else if (token.type == TOKEN_EQEQCI) {
12922 var node = Node(NODE_EQUALCI);
12923 node.pos = token.pos;
12924 node.left = left;
12925 node.right = this.parse_expr5();
12926 var left = node;
12927 }
12928 else if (token.type == TOKEN_EQEQCS) {
12929 var node = Node(NODE_EQUALCS);
12930 node.pos = token.pos;
12931 node.left = left;
12932 node.right = this.parse_expr5();
12933 var left = node;
12934 }
12935 else if (token.type == TOKEN_NEQ) {
12936 var node = Node(NODE_NEQUAL);
12937 node.pos = token.pos;
12938 node.left = left;
12939 node.right = this.parse_expr5();
12940 var left = node;
12941 }
12942 else if (token.type == TOKEN_NEQCI) {
12943 var node = Node(NODE_NEQUALCI);
12944 node.pos = token.pos;
12945 node.left = left;
12946 node.right = this.parse_expr5();
12947 var left = node;
12948 }
12949 else if (token.type == TOKEN_NEQCS) {
12950 var node = Node(NODE_NEQUALCS);
12951 node.pos = token.pos;
12952 node.left = left;
12953 node.right = this.parse_expr5();
12954 var left = node;
12955 }
12956 else if (token.type == TOKEN_GT) {
12957 var node = Node(NODE_GREATER);
12958 node.pos = token.pos;
12959 node.left = left;
12960 node.right = this.parse_expr5();
12961 var left = node;
12962 }
12963 else if (token.type == TOKEN_GTCI) {
12964 var node = Node(NODE_GREATERCI);
12965 node.pos = token.pos;
12966 node.left = left;
12967 node.right = this.parse_expr5();
12968 var left = node;
12969 }
12970 else if (token.type == TOKEN_GTCS) {
12971 var node = Node(NODE_GREATERCS);
12972 node.pos = token.pos;
12973 node.left = left;
12974 node.right = this.parse_expr5();
12975 var left = node;
12976 }
12977 else if (token.type == TOKEN_GTEQ) {
12978 var node = Node(NODE_GEQUAL);
12979 node.pos = token.pos;
12980 node.left = left;
12981 node.right = this.parse_expr5();
12982 var left = node;
12983 }
12984 else if (token.type == TOKEN_GTEQCI) {
12985 var node = Node(NODE_GEQUALCI);
12986 node.pos = token.pos;
12987 node.left = left;
12988 node.right = this.parse_expr5();
12989 var left = node;
12990 }
12991 else if (token.type == TOKEN_GTEQCS) {
12992 var node = Node(NODE_GEQUALCS);
12993 node.pos = token.pos;
12994 node.left = left;
12995 node.right = this.parse_expr5();
12996 var left = node;
12997 }
12998 else if (token.type == TOKEN_LT) {
12999 var node = Node(NODE_SMALLER);
13000 node.pos = token.pos;
13001 node.left = left;
13002 node.right = this.parse_expr5();
13003 var left = node;
13004 }
13005 else if (token.type == TOKEN_LTCI) {
13006 var node = Node(NODE_SMALLERCI);
13007 node.pos = token.pos;
13008 node.left = left;
13009 node.right = this.parse_expr5();
13010 var left = node;
13011 }
13012 else if (token.type == TOKEN_LTCS) {
13013 var node = Node(NODE_SMALLERCS);
13014 node.pos = token.pos;
13015 node.left = left;
13016 node.right = this.parse_expr5();
13017 var left = node;
13018 }
13019 else if (token.type == TOKEN_LTEQ) {
13020 var node = Node(NODE_SEQUAL);
13021 node.pos = token.pos;
13022 node.left = left;
13023 node.right = this.parse_expr5();
13024 var left = node;
13025 }
13026 else if (token.type == TOKEN_LTEQCI) {
13027 var node = Node(NODE_SEQUALCI);
13028 node.pos = token.pos;
13029 node.left = left;
13030 node.right = this.parse_expr5();
13031 var left = node;
13032 }
13033 else if (token.type == TOKEN_LTEQCS) {
13034 var node = Node(NODE_SEQUALCS);
13035 node.pos = token.pos;
13036 node.left = left;
13037 node.right = this.parse_expr5();
13038 var left = node;
13039 }
13040 else if (token.type == TOKEN_MATCH) {
13041 var node = Node(NODE_MATCH);
13042 node.pos = token.pos;
13043 node.left = left;
13044 node.right = this.parse_expr5();
13045 var left = node;
13046 }
13047 else if (token.type == TOKEN_MATCHCI) {
13048 var node = Node(NODE_MATCHCI);
13049 node.pos = token.pos;
13050 node.left = left;
13051 node.right = this.parse_expr5();
13052 var left = node;
13053 }
13054 else if (token.type == TOKEN_MATCHCS) {
13055 var node = Node(NODE_MATCHCS);
13056 node.pos = token.pos;
13057 node.left = left;
13058 node.right = this.parse_expr5();
13059 var left = node;
13060 }
13061 else if (token.type == TOKEN_NOMATCH) {
13062 var node = Node(NODE_NOMATCH);
13063 node.pos = token.pos;
13064 node.left = left;
13065 node.right = this.parse_expr5();
13066 var left = node;
13067 }
13068 else if (token.type == TOKEN_NOMATCHCI) {
13069 var node = Node(NODE_NOMATCHCI);
13070 node.pos = token.pos;
13071 node.left = left;
13072 node.right = this.parse_expr5();
13073 var left = node;
13074 }
13075 else if (token.type == TOKEN_NOMATCHCS) {
13076 var node = Node(NODE_NOMATCHCS);
13077 node.pos = token.pos;
13078 node.left = left;
13079 node.right = this.parse_expr5();
13080 var left = node;
13081 }
13082 else if (token.type == TOKEN_IS) {
13083 var node = Node(NODE_IS);
13084 node.pos = token.pos;
13085 node.left = left;
13086 node.right = this.parse_expr5();
13087 var left = node;
13088 }
13089 else if (token.type == TOKEN_ISCI) {
13090 var node = Node(NODE_ISCI);
13091 node.pos = token.pos;
13092 node.left = left;
13093 node.right = this.parse_expr5();
13094 var left = node;
13095 }
13096 else if (token.type == TOKEN_ISCS) {
13097 var node = Node(NODE_ISCS);
13098 node.pos = token.pos;
13099 node.left = left;
13100 node.right = this.parse_expr5();
13101 var left = node;
13102 }
13103 else if (token.type == TOKEN_ISNOT) {
13104 var node = Node(NODE_ISNOT);
13105 node.pos = token.pos;
13106 node.left = left;
13107 node.right = this.parse_expr5();
13108 var left = node;
13109 }
13110 else if (token.type == TOKEN_ISNOTCI) {
13111 var node = Node(NODE_ISNOTCI);
13112 node.pos = token.pos;
13113 node.left = left;
13114 node.right = this.parse_expr5();
13115 var left = node;
13116 }
13117 else if (token.type == TOKEN_ISNOTCS) {
13118 var node = Node(NODE_ISNOTCS);
13119 node.pos = token.pos;
13120 node.left = left;
13121 node.right = this.parse_expr5();
13122 var left = node;
13123 }
13124 else {
13125 this.reader.seek_set(pos);
13126 }
13127 return left;
13128}
13129
13130// expr5: expr6 + expr6 ..
13131// expr6 - expr6 ..
13132// expr6 . expr6 ..
13133// expr6 .. expr6 ..
13134ExprParser.prototype.parse_expr5 = function() {
13135 var left = this.parse_expr6();
13136 while (TRUE) {
13137 var pos = this.reader.tell();
13138 var token = this.tokenizer.get();
13139 if (token.type == TOKEN_PLUS) {
13140 var node = Node(NODE_ADD);
13141 node.pos = token.pos;
13142 node.left = left;
13143 node.right = this.parse_expr6();
13144 var left = node;
13145 }
13146 else if (token.type == TOKEN_MINUS) {
13147 var node = Node(NODE_SUBTRACT);
13148 node.pos = token.pos;
13149 node.left = left;
13150 node.right = this.parse_expr6();
13151 var left = node;
13152 }
13153 else if (token.type == TOKEN_DOTDOT) {
13154 // TODO check scriptversion?
13155 var node = Node(NODE_CONCAT);
13156 node.pos = token.pos;
13157 node.left = left;
13158 node.right = this.parse_expr6();
13159 var left = node;
13160 }
13161 else if (token.type == TOKEN_DOT) {
13162 // TODO check scriptversion?
13163 var node = Node(NODE_CONCAT);
13164 node.pos = token.pos;
13165 node.left = left;
13166 node.right = this.parse_expr6();
13167 var left = node;
13168 }
13169 else {
13170 this.reader.seek_set(pos);
13171 break;
13172 }
13173 }
13174 return left;
13175}
13176
13177// expr6: expr7 * expr7 ..
13178// expr7 / expr7 ..
13179// expr7 % expr7 ..
13180ExprParser.prototype.parse_expr6 = function() {
13181 var left = this.parse_expr7();
13182 while (TRUE) {
13183 var pos = this.reader.tell();
13184 var token = this.tokenizer.get();
13185 if (token.type == TOKEN_STAR) {
13186 var node = Node(NODE_MULTIPLY);
13187 node.pos = token.pos;
13188 node.left = left;
13189 node.right = this.parse_expr7();
13190 var left = node;
13191 }
13192 else if (token.type == TOKEN_SLASH) {
13193 var node = Node(NODE_DIVIDE);
13194 node.pos = token.pos;
13195 node.left = left;
13196 node.right = this.parse_expr7();
13197 var left = node;
13198 }
13199 else if (token.type == TOKEN_PERCENT) {
13200 var node = Node(NODE_REMAINDER);
13201 node.pos = token.pos;
13202 node.left = left;
13203 node.right = this.parse_expr7();
13204 var left = node;
13205 }
13206 else {
13207 this.reader.seek_set(pos);
13208 break;
13209 }
13210 }
13211 return left;
13212}
13213
13214// expr7: ! expr7
13215// - expr7
13216// + expr7
13217ExprParser.prototype.parse_expr7 = function() {
13218 var pos = this.reader.tell();
13219 var token = this.tokenizer.get();
13220 if (token.type == TOKEN_NOT) {
13221 var node = Node(NODE_NOT);
13222 node.pos = token.pos;
13223 node.left = this.parse_expr7();
13224 return node;
13225 }
13226 else if (token.type == TOKEN_MINUS) {
13227 var node = Node(NODE_MINUS);
13228 node.pos = token.pos;
13229 node.left = this.parse_expr7();
13230 return node;
13231 }
13232 else if (token.type == TOKEN_PLUS) {
13233 var node = Node(NODE_PLUS);
13234 node.pos = token.pos;
13235 node.left = this.parse_expr7();
13236 return node;
13237 }
13238 else {
13239 this.reader.seek_set(pos);
13240 var node = this.parse_expr8();
13241 return node;
13242 }
13243}
13244
13245// expr8: expr8[expr1]
13246// expr8[expr1 : expr1]
13247// expr8.name
13248// expr8->name(expr1, ...)
13249// expr8->s:user_func(expr1, ...)
13250// expr8->{lambda}(expr1, ...)
13251// expr8(expr1, ...)
13252ExprParser.prototype.parse_expr8 = function() {
13253 var left = this.parse_expr9();
13254 while (TRUE) {
13255 var pos = this.reader.tell();
13256 var c = this.reader.peek();
13257 var token = this.tokenizer.get();
13258 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
13259 var npos = token.pos;
13260 if (this.tokenizer.peek().type == TOKEN_COLON) {
13261 this.tokenizer.get();
13262 var node = Node(NODE_SLICE);
13263 node.pos = npos;
13264 node.left = left;
13265 node.rlist = [NIL, NIL];
13266 var token = this.tokenizer.peek();
13267 if (token.type != TOKEN_SQCLOSE) {
13268 node.rlist[1] = this.parse_expr1();
13269 }
13270 var token = this.tokenizer.get();
13271 if (token.type != TOKEN_SQCLOSE) {
13272 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13273 }
13274 var left = node;
13275 }
13276 else {
13277 var right = this.parse_expr1();
13278 if (this.tokenizer.peek().type == TOKEN_COLON) {
13279 this.tokenizer.get();
13280 var node = Node(NODE_SLICE);
13281 node.pos = npos;
13282 node.left = left;
13283 node.rlist = [right, NIL];
13284 var token = this.tokenizer.peek();
13285 if (token.type != TOKEN_SQCLOSE) {
13286 node.rlist[1] = this.parse_expr1();
13287 }
13288 var token = this.tokenizer.get();
13289 if (token.type != TOKEN_SQCLOSE) {
13290 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13291 }
13292 var left = node;
13293 }
13294 else {
13295 var node = Node(NODE_SUBSCRIPT);
13296 node.pos = npos;
13297 node.left = left;
13298 node.right = right;
13299 var token = this.tokenizer.get();
13300 if (token.type != TOKEN_SQCLOSE) {
13301 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13302 }
13303 var left = node;
13304 }
13305 }
13306 delete node;
13307 }
13308 else if (token.type == TOKEN_ARROW) {
13309 var funcname_or_lambda = this.parse_expr9();
13310 var token = this.tokenizer.get();
13311 if (token.type != TOKEN_POPEN) {
13312 throw Err("E107: Missing parentheses: lambda", token.pos);
13313 }
13314 var right = Node(NODE_CALL);
13315 right.pos = token.pos;
13316 right.left = funcname_or_lambda;
13317 right.rlist = this.parse_rlist();
13318 var node = Node(NODE_METHOD);
13319 node.pos = token.pos;
13320 node.left = left;
13321 node.right = right;
13322 var left = node;
13323 delete node;
13324 }
13325 else if (token.type == TOKEN_POPEN) {
13326 var node = Node(NODE_CALL);
13327 node.pos = token.pos;
13328 node.left = left;
13329 node.rlist = this.parse_rlist();
13330 var left = node;
13331 delete node;
13332 }
13333 else if (!iswhite(c) && token.type == TOKEN_DOT) {
13334 // TODO check scriptversion?
13335 var node = this.parse_dot(token, left);
13336 if (node === NIL) {
13337 this.reader.seek_set(pos);
13338 break;
13339 }
13340 var left = node;
13341 delete node;
13342 }
13343 else {
13344 this.reader.seek_set(pos);
13345 break;
13346 }
13347 }
13348 return left;
13349}
13350
13351ExprParser.prototype.parse_rlist = function() {
13352 var rlist = [];
13353 var token = this.tokenizer.peek();
13354 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
13355 this.tokenizer.get();
13356 }
13357 else {
13358 while (TRUE) {
13359 viml_add(rlist, this.parse_expr1());
13360 var token = this.tokenizer.get();
13361 if (token.type == TOKEN_COMMA) {
13362 // XXX: Vim allows foo(a, b, ). Lint should warn it.
13363 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
13364 this.tokenizer.get();
13365 break;
13366 }
13367 }
13368 else if (token.type == TOKEN_PCLOSE) {
13369 break;
13370 }
13371 else {
13372 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13373 }
13374 }
13375 }
13376 if (viml_len(rlist) > MAX_FUNC_ARGS) {
13377 // TODO: funcname E740: Too many arguments for function: %s
13378 throw Err("E740: Too many arguments for function", token.pos);
13379 }
13380 return rlist;
13381}
13382
13383// expr9: number
13384// "string"
13385// 'string'
13386// [expr1, ...]
13387// {expr1: expr1, ...}
13388// #{literal_key1: expr1, ...}
13389// {args -> expr1}
13390// &option
13391// (expr1)
13392// variable
13393// var{ria}ble
13394// $VAR
13395// @r
13396// function(expr1, ...)
13397// func{ti}on(expr1, ...)
13398ExprParser.prototype.parse_expr9 = function() {
13399 var pos = this.reader.tell();
13400 var token = this.tokenizer.get();
13401 var node = Node(-1);
13402 if (token.type == TOKEN_NUMBER) {
13403 var node = Node(NODE_NUMBER);
13404 node.pos = token.pos;
13405 node.value = token.value;
13406 }
13407 else if (token.type == TOKEN_BLOB) {
13408 var node = Node(NODE_BLOB);
13409 node.pos = token.pos;
13410 node.value = token.value;
13411 }
13412 else if (token.type == TOKEN_DQUOTE) {
13413 this.reader.seek_set(pos);
13414 var node = Node(NODE_STRING);
13415 node.pos = token.pos;
13416 node.value = "\"" + this.tokenizer.get_dstring() + "\"";
13417 }
13418 else if (token.type == TOKEN_SQUOTE) {
13419 this.reader.seek_set(pos);
13420 var node = Node(NODE_STRING);
13421 node.pos = token.pos;
13422 node.value = "'" + this.tokenizer.get_sstring() + "'";
13423 }
13424 else if (token.type == TOKEN_SQOPEN) {
13425 var node = Node(NODE_LIST);
13426 node.pos = token.pos;
13427 node.value = [];
13428 var token = this.tokenizer.peek();
13429 if (token.type == TOKEN_SQCLOSE) {
13430 this.tokenizer.get();
13431 }
13432 else {
13433 while (TRUE) {
13434 viml_add(node.value, this.parse_expr1());
13435 var token = this.tokenizer.peek();
13436 if (token.type == TOKEN_COMMA) {
13437 this.tokenizer.get();
13438 if (this.tokenizer.peek().type == TOKEN_SQCLOSE) {
13439 this.tokenizer.get();
13440 break;
13441 }
13442 }
13443 else if (token.type == TOKEN_SQCLOSE) {
13444 this.tokenizer.get();
13445 break;
13446 }
13447 else {
13448 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13449 }
13450 }
13451 }
13452 }
13453 else if (token.type == TOKEN_COPEN || token.type == TOKEN_LITCOPEN) {
13454 var is_litdict = token.type == TOKEN_LITCOPEN;
13455 var savepos = this.reader.tell();
13456 var nodepos = token.pos;
13457 var token = this.tokenizer.get();
13458 var lambda = token.type == TOKEN_ARROW;
13459 if (!lambda && !(token.type == TOKEN_SQUOTE || token.type == TOKEN_DQUOTE)) {
13460 // if the token type is stirng, we cannot peek next token and we can
13461 // assume it's not lambda.
13462 var token2 = this.tokenizer.peek();
13463 var lambda = token2.type == TOKEN_ARROW || token2.type == TOKEN_COMMA;
13464 }
13465 // fallback to dict or {expr} if true
13466 var fallback = FALSE;
13467 if (lambda) {
13468 // lambda {token,...} {->...} {token->...}
13469 var node = Node(NODE_LAMBDA);
13470 node.pos = nodepos;
13471 node.rlist = [];
13472 var named = {};
13473 while (TRUE) {
13474 if (token.type == TOKEN_ARROW) {
13475 break;
13476 }
13477 else if (token.type == TOKEN_IDENTIFIER) {
13478 if (!isargname(token.value)) {
13479 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
13480 }
13481 else if (viml_has_key(named, token.value)) {
13482 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
13483 }
13484 named[token.value] = 1;
13485 var varnode = Node(NODE_IDENTIFIER);
13486 varnode.pos = token.pos;
13487 varnode.value = token.value;
13488 // XXX: Vim doesn't skip white space before comma. {a ,b -> ...} => E475
13489 if (iswhite(this.reader.p(0)) && this.tokenizer.peek().type == TOKEN_COMMA) {
13490 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
13491 }
13492 var token = this.tokenizer.get();
13493 viml_add(node.rlist, varnode);
13494 if (token.type == TOKEN_COMMA) {
13495 // XXX: Vim allows last comma. {a, b, -> ...} => OK
13496 var token = this.tokenizer.peek();
13497 if (token.type == TOKEN_ARROW) {
13498 this.tokenizer.get();
13499 break;
13500 }
13501 }
13502 else if (token.type == TOKEN_ARROW) {
13503 break;
13504 }
13505 else {
13506 throw Err(viml_printf("unexpected token: %s, type: %d", token.value, token.type), token.pos);
13507 }
13508 }
13509 else if (token.type == TOKEN_DOTDOTDOT) {
13510 var varnode = Node(NODE_IDENTIFIER);
13511 varnode.pos = token.pos;
13512 varnode.value = token.value;
13513 viml_add(node.rlist, varnode);
13514 var token = this.tokenizer.peek();
13515 if (token.type == TOKEN_ARROW) {
13516 this.tokenizer.get();
13517 break;
13518 }
13519 else {
13520 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13521 }
13522 }
13523 else {
13524 var fallback = TRUE;
13525 break;
13526 }
13527 var token = this.tokenizer.get();
13528 }
13529 if (!fallback) {
13530 node.left = this.parse_expr1();
13531 var token = this.tokenizer.get();
13532 if (token.type != TOKEN_CCLOSE) {
13533 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13534 }
13535 return node;
13536 }
13537 }
13538 // dict
13539 var node = Node(NODE_DICT);
13540 node.pos = nodepos;
13541 node.value = [];
13542 this.reader.seek_set(savepos);
13543 var token = this.tokenizer.peek();
13544 if (token.type == TOKEN_CCLOSE) {
13545 this.tokenizer.get();
13546 return node;
13547 }
13548 while (1) {
13549 var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
13550 var token = this.tokenizer.get();
13551 if (token.type == TOKEN_CCLOSE) {
13552 if (!viml_empty(node.value)) {
13553 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13554 }
13555 this.reader.seek_set(pos);
13556 var node = this.parse_identifier();
13557 break;
13558 }
13559 if (token.type != TOKEN_COLON) {
13560 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13561 }
13562 var val = this.parse_expr1();
13563 viml_add(node.value, [key, val]);
13564 var token = this.tokenizer.get();
13565 if (token.type == TOKEN_COMMA) {
13566 if (this.tokenizer.peek().type == TOKEN_CCLOSE) {
13567 this.tokenizer.get();
13568 break;
13569 }
13570 }
13571 else if (token.type == TOKEN_CCLOSE) {
13572 break;
13573 }
13574 else {
13575 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13576 }
13577 }
13578 return node;
13579 }
13580 else if (token.type == TOKEN_POPEN) {
13581 var node = this.parse_expr1();
13582 var token = this.tokenizer.get();
13583 if (token.type != TOKEN_PCLOSE) {
13584 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13585 }
13586 }
13587 else if (token.type == TOKEN_OPTION) {
13588 var node = Node(NODE_OPTION);
13589 node.pos = token.pos;
13590 node.value = token.value;
13591 }
13592 else if (token.type == TOKEN_IDENTIFIER) {
13593 this.reader.seek_set(pos);
13594 var node = this.parse_identifier();
13595 }
13596 else if (FALSE && (token.type == TOKEN_COLON || token.type == TOKEN_SHARP)) {
13597 // XXX: no parse error but invalid expression
13598 this.reader.seek_set(pos);
13599 var node = this.parse_identifier();
13600 }
13601 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
13602 this.reader.seek_set(pos);
13603 var node = this.parse_identifier();
13604 }
13605 else if (token.type == TOKEN_IS || token.type == TOKEN_ISCS || token.type == TOKEN_ISNOT || token.type == TOKEN_ISNOTCS) {
13606 this.reader.seek_set(pos);
13607 var node = this.parse_identifier();
13608 }
13609 else if (token.type == TOKEN_ENV) {
13610 var node = Node(NODE_ENV);
13611 node.pos = token.pos;
13612 node.value = token.value;
13613 }
13614 else if (token.type == TOKEN_REG) {
13615 var node = Node(NODE_REG);
13616 node.pos = token.pos;
13617 node.value = token.value;
13618 }
13619 else {
13620 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13621 }
13622 return node;
13623}
13624
13625// SUBSCRIPT or CONCAT
13626// dict "." [0-9A-Za-z_]+ => (subscript dict key)
13627// str "." expr6 => (concat str expr6)
13628ExprParser.prototype.parse_dot = function(token, left) {
13629 if (left.type != NODE_IDENTIFIER && left.type != NODE_CURLYNAME && left.type != NODE_DICT && left.type != NODE_SUBSCRIPT && left.type != NODE_CALL && left.type != NODE_DOT) {
13630 return NIL;
13631 }
13632 if (!iswordc(this.reader.p(0))) {
13633 return NIL;
13634 }
13635 var pos = this.reader.getpos();
13636 var name = this.reader.read_word();
13637 if (isnamec(this.reader.p(0))) {
13638 // XXX: foo is str => ok, foo is obj => invalid expression
13639 // foo.s:bar or foo.bar#baz
13640 return NIL;
13641 }
13642 var node = Node(NODE_DOT);
13643 node.pos = token.pos;
13644 node.left = left;
13645 node.right = Node(NODE_IDENTIFIER);
13646 node.right.pos = pos;
13647 node.right.value = name;
13648 return node;
13649}
13650
13651// CONCAT
13652// str ".." expr6 => (concat str expr6)
13653ExprParser.prototype.parse_concat = function(token, left) {
13654 if (left.type != NODE_IDENTIFIER && left.type != NODE_CURLYNAME && left.type != NODE_DICT && left.type != NODE_SUBSCRIPT && left.type != NODE_CALL && left.type != NODE_DOT) {
13655 return NIL;
13656 }
13657 if (!iswordc(this.reader.p(0))) {
13658 return NIL;
13659 }
13660 var pos = this.reader.getpos();
13661 var name = this.reader.read_word();
13662 if (isnamec(this.reader.p(0))) {
13663 // XXX: foo is str => ok, foo is obj => invalid expression
13664 // foo.s:bar or foo.bar#baz
13665 return NIL;
13666 }
13667 var node = Node(NODE_CONCAT);
13668 node.pos = token.pos;
13669 node.left = left;
13670 node.right = Node(NODE_IDENTIFIER);
13671 node.right.pos = pos;
13672 node.right.value = name;
13673 return node;
13674}
13675
13676ExprParser.prototype.parse_identifier = function() {
13677 this.reader.skip_white();
13678 var npos = this.reader.getpos();
13679 var curly_parts = this.parse_curly_parts();
13680 if (viml_len(curly_parts) == 1 && curly_parts[0].type == NODE_CURLYNAMEPART) {
13681 var node = Node(NODE_IDENTIFIER);
13682 node.pos = npos;
13683 node.value = curly_parts[0].value;
13684 return node;
13685 }
13686 else {
13687 var node = Node(NODE_CURLYNAME);
13688 node.pos = npos;
13689 node.value = curly_parts;
13690 return node;
13691 }
13692}
13693
13694ExprParser.prototype.parse_curly_parts = function() {
13695 var curly_parts = [];
13696 var c = this.reader.peek();
13697 var pos = this.reader.getpos();
13698 if (c == "<" && viml_equalci(this.reader.peekn(5), "<SID>")) {
13699 var name = this.reader.getn(5);
13700 var node = Node(NODE_CURLYNAMEPART);
13701 node.curly = FALSE;
13702 // Keep backword compatibility for the curly attribute
13703 node.pos = pos;
13704 node.value = name;
13705 viml_add(curly_parts, node);
13706 }
13707 while (TRUE) {
13708 var c = this.reader.peek();
13709 if (isnamec(c)) {
13710 var pos = this.reader.getpos();
13711 var name = this.reader.read_name();
13712 var node = Node(NODE_CURLYNAMEPART);
13713 node.curly = FALSE;
13714 // Keep backword compatibility for the curly attribute
13715 node.pos = pos;
13716 node.value = name;
13717 viml_add(curly_parts, node);
13718 }
13719 else if (c == "{") {
13720 this.reader.get();
13721 var pos = this.reader.getpos();
13722 var node = Node(NODE_CURLYNAMEEXPR);
13723 node.curly = TRUE;
13724 // Keep backword compatibility for the curly attribute
13725 node.pos = pos;
13726 node.value = this.parse_expr1();
13727 viml_add(curly_parts, node);
13728 this.reader.skip_white();
13729 var c = this.reader.p(0);
13730 if (c != "}") {
13731 throw Err(viml_printf("unexpected token: %s", c), this.reader.getpos());
13732 }
13733 this.reader.seek_cur(1);
13734 }
13735 else {
13736 break;
13737 }
13738 }
13739 return curly_parts;
13740}
13741
13742function LvalueParser() { ExprParser.apply(this, arguments); this.__init__.apply(this, arguments); }
13743LvalueParser.prototype = Object.create(ExprParser.prototype);
13744LvalueParser.prototype.parse = function() {
13745 return this.parse_lv8();
13746}
13747
13748// expr8: expr8[expr1]
13749// expr8[expr1 : expr1]
13750// expr8.name
13751LvalueParser.prototype.parse_lv8 = function() {
13752 var left = this.parse_lv9();
13753 while (TRUE) {
13754 var pos = this.reader.tell();
13755 var c = this.reader.peek();
13756 var token = this.tokenizer.get();
13757 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
13758 var npos = token.pos;
13759 var node = Node(-1);
13760 if (this.tokenizer.peek().type == TOKEN_COLON) {
13761 this.tokenizer.get();
13762 var node = Node(NODE_SLICE);
13763 node.pos = npos;
13764 node.left = left;
13765 node.rlist = [NIL, NIL];
13766 var token = this.tokenizer.peek();
13767 if (token.type != TOKEN_SQCLOSE) {
13768 node.rlist[1] = this.parse_expr1();
13769 }
13770 var token = this.tokenizer.get();
13771 if (token.type != TOKEN_SQCLOSE) {
13772 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13773 }
13774 }
13775 else {
13776 var right = this.parse_expr1();
13777 if (this.tokenizer.peek().type == TOKEN_COLON) {
13778 this.tokenizer.get();
13779 var node = Node(NODE_SLICE);
13780 node.pos = npos;
13781 node.left = left;
13782 node.rlist = [right, NIL];
13783 var token = this.tokenizer.peek();
13784 if (token.type != TOKEN_SQCLOSE) {
13785 node.rlist[1] = this.parse_expr1();
13786 }
13787 var token = this.tokenizer.get();
13788 if (token.type != TOKEN_SQCLOSE) {
13789 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13790 }
13791 }
13792 else {
13793 var node = Node(NODE_SUBSCRIPT);
13794 node.pos = npos;
13795 node.left = left;
13796 node.right = right;
13797 var token = this.tokenizer.get();
13798 if (token.type != TOKEN_SQCLOSE) {
13799 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13800 }
13801 }
13802 }
13803 var left = node;
13804 delete node;
13805 }
13806 else if (!iswhite(c) && token.type == TOKEN_DOT) {
13807 var node = this.parse_dot(token, left);
13808 if (node === NIL) {
13809 this.reader.seek_set(pos);
13810 break;
13811 }
13812 var left = node;
13813 delete node;
13814 }
13815 else {
13816 this.reader.seek_set(pos);
13817 break;
13818 }
13819 }
13820 return left;
13821}
13822
13823// expr9: &option
13824// variable
13825// var{ria}ble
13826// $VAR
13827// @r
13828LvalueParser.prototype.parse_lv9 = function() {
13829 var pos = this.reader.tell();
13830 var token = this.tokenizer.get();
13831 var node = Node(-1);
13832 if (token.type == TOKEN_COPEN) {
13833 this.reader.seek_set(pos);
13834 var node = this.parse_identifier();
13835 }
13836 else if (token.type == TOKEN_OPTION) {
13837 var node = Node(NODE_OPTION);
13838 node.pos = token.pos;
13839 node.value = token.value;
13840 }
13841 else if (token.type == TOKEN_IDENTIFIER) {
13842 this.reader.seek_set(pos);
13843 var node = this.parse_identifier();
13844 }
13845 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
13846 this.reader.seek_set(pos);
13847 var node = this.parse_identifier();
13848 }
13849 else if (token.type == TOKEN_ENV) {
13850 var node = Node(NODE_ENV);
13851 node.pos = token.pos;
13852 node.value = token.value;
13853 }
13854 else if (token.type == TOKEN_REG) {
13855 var node = Node(NODE_REG);
13856 node.pos = token.pos;
13857 node.pos = token.pos;
13858 node.value = token.value;
13859 }
13860 else {
13861 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
13862 }
13863 return node;
13864}
13865
13866function StringReader() { this.__init__.apply(this, arguments); }
13867StringReader.prototype.__init__ = function(lines) {
13868 this.buf = [];
13869 this.pos = [];
13870 var lnum = 0;
13871 var offset = 0;
13872 while (lnum < viml_len(lines)) {
13873 var col = 0;
13874 var __c7 = viml_split(lines[lnum], "\\zs");
13875 for (var __i7 = 0; __i7 < __c7.length; ++__i7) {
13876 var c = __c7[__i7];
13877 viml_add(this.buf, c);
13878 viml_add(this.pos, [lnum + 1, col + 1, offset]);
13879 col += viml_len(c);
13880 offset += viml_len(c);
13881 }
13882 while (lnum + 1 < viml_len(lines) && viml_eqregh(lines[lnum + 1], "^\\s*\\\\")) {
13883 var skip = TRUE;
13884 var col = 0;
13885 var __c8 = viml_split(lines[lnum + 1], "\\zs");
13886 for (var __i8 = 0; __i8 < __c8.length; ++__i8) {
13887 var c = __c8[__i8];
13888 if (skip) {
13889 if (c == "\\") {
13890 var skip = FALSE;
13891 }
13892 }
13893 else {
13894 viml_add(this.buf, c);
13895 viml_add(this.pos, [lnum + 2, col + 1, offset]);
13896 }
13897 col += viml_len(c);
13898 offset += viml_len(c);
13899 }
13900 lnum += 1;
13901 offset += 1;
13902 }
13903 viml_add(this.buf, "<EOL>");
13904 viml_add(this.pos, [lnum + 1, col + 1, offset]);
13905 lnum += 1;
13906 offset += 1;
13907 }
13908 // for <EOF>
13909 viml_add(this.pos, [lnum + 1, 0, offset]);
13910 this.i = 0;
13911}
13912
13913StringReader.prototype.eof = function() {
13914 return this.i >= viml_len(this.buf);
13915}
13916
13917StringReader.prototype.tell = function() {
13918 return this.i;
13919}
13920
13921StringReader.prototype.seek_set = function(i) {
13922 this.i = i;
13923}
13924
13925StringReader.prototype.seek_cur = function(i) {
13926 this.i = this.i + i;
13927}
13928
13929StringReader.prototype.seek_end = function(i) {
13930 this.i = viml_len(this.buf) + i;
13931}
13932
13933StringReader.prototype.p = function(i) {
13934 if (this.i >= viml_len(this.buf)) {
13935 return "<EOF>";
13936 }
13937 return this.buf[this.i + i];
13938}
13939
13940StringReader.prototype.peek = function() {
13941 if (this.i >= viml_len(this.buf)) {
13942 return "<EOF>";
13943 }
13944 return this.buf[this.i];
13945}
13946
13947StringReader.prototype.get = function() {
13948 if (this.i >= viml_len(this.buf)) {
13949 return "<EOF>";
13950 }
13951 this.i += 1;
13952 return this.buf[this.i - 1];
13953}
13954
13955StringReader.prototype.peekn = function(n) {
13956 var pos = this.tell();
13957 var r = this.getn(n);
13958 this.seek_set(pos);
13959 return r;
13960}
13961
13962StringReader.prototype.getn = function(n) {
13963 var r = "";
13964 var j = 0;
13965 while (this.i < viml_len(this.buf) && (n < 0 || j < n)) {
13966 var c = this.buf[this.i];
13967 if (c == "<EOL>") {
13968 break;
13969 }
13970 r += c;
13971 this.i += 1;
13972 j += 1;
13973 }
13974 return r;
13975}
13976
13977StringReader.prototype.peekline = function() {
13978 return this.peekn(-1);
13979}
13980
13981StringReader.prototype.readline = function() {
13982 var r = this.getn(-1);
13983 this.get();
13984 return r;
13985}
13986
13987StringReader.prototype.getstr = function(begin, end) {
13988 var r = "";
13989 var __c9 = viml_range(begin.i, end.i - 1);
13990 for (var __i9 = 0; __i9 < __c9.length; ++__i9) {
13991 var i = __c9[__i9];
13992 if (i >= viml_len(this.buf)) {
13993 break;
13994 }
13995 var c = this.buf[i];
13996 if (c == "<EOL>") {
13997 var c = "\n";
13998 }
13999 r += c;
14000 }
14001 return r;
14002}
14003
14004StringReader.prototype.getpos = function() {
14005 var __tmp = this.pos[this.i];
14006 var lnum = __tmp[0];
14007 var col = __tmp[1];
14008 var offset = __tmp[2];
14009 return {"i":this.i, "lnum":lnum, "col":col, "offset":offset};
14010}
14011
14012StringReader.prototype.setpos = function(pos) {
14013 this.i = pos.i;
14014}
14015
14016StringReader.prototype.read_alpha = function() {
14017 var r = "";
14018 while (isalpha(this.peekn(1))) {
14019 r += this.getn(1);
14020 }
14021 return r;
14022}
14023
14024StringReader.prototype.read_alnum = function() {
14025 var r = "";
14026 while (isalnum(this.peekn(1))) {
14027 r += this.getn(1);
14028 }
14029 return r;
14030}
14031
14032StringReader.prototype.read_digit = function() {
14033 var r = "";
14034 while (isdigit(this.peekn(1))) {
14035 r += this.getn(1);
14036 }
14037 return r;
14038}
14039
14040StringReader.prototype.read_odigit = function() {
14041 var r = "";
14042 while (isodigit(this.peekn(1))) {
14043 r += this.getn(1);
14044 }
14045 return r;
14046}
14047
14048StringReader.prototype.read_blob = function() {
14049 var r = "";
14050 while (1) {
14051 var s = this.peekn(2);
14052 if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
14053 r += this.getn(2);
14054 }
14055 else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
14056 r += this.getn(1);
14057 }
14058 else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
14059 throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
14060 }
14061 else {
14062 break;
14063 }
14064 }
14065 return r;
14066}
14067
14068StringReader.prototype.read_xdigit = function() {
14069 var r = "";
14070 while (isxdigit(this.peekn(1))) {
14071 r += this.getn(1);
14072 }
14073 return r;
14074}
14075
14076StringReader.prototype.read_bdigit = function() {
14077 var r = "";
14078 while (this.peekn(1) == "0" || this.peekn(1) == "1") {
14079 r += this.getn(1);
14080 }
14081 return r;
14082}
14083
14084StringReader.prototype.read_integer = function() {
14085 var r = "";
14086 var c = this.peekn(1);
14087 if (c == "-" || c == "+") {
14088 var r = this.getn(1);
14089 }
14090 return r + this.read_digit();
14091}
14092
14093StringReader.prototype.read_word = function() {
14094 var r = "";
14095 while (iswordc(this.peekn(1))) {
14096 r += this.getn(1);
14097 }
14098 return r;
14099}
14100
14101StringReader.prototype.read_white = function() {
14102 var r = "";
14103 while (iswhite(this.peekn(1))) {
14104 r += this.getn(1);
14105 }
14106 return r;
14107}
14108
14109StringReader.prototype.read_nonwhite = function() {
14110 var r = "";
14111 var ch = this.peekn(1);
14112 while (!iswhite(ch) && ch != "") {
14113 r += this.getn(1);
14114 var ch = this.peekn(1);
14115 }
14116 return r;
14117}
14118
14119StringReader.prototype.read_name = function() {
14120 var r = "";
14121 while (isnamec(this.peekn(1))) {
14122 r += this.getn(1);
14123 }
14124 return r;
14125}
14126
14127StringReader.prototype.skip_white = function() {
14128 while (iswhite(this.peekn(1))) {
14129 this.seek_cur(1);
14130 }
14131}
14132
14133StringReader.prototype.skip_white_and_colon = function() {
14134 while (TRUE) {
14135 var c = this.peekn(1);
14136 if (!iswhite(c) && c != ":") {
14137 break;
14138 }
14139 this.seek_cur(1);
14140 }
14141}
14142
14143function Compiler() { this.__init__.apply(this, arguments); }
14144Compiler.prototype.__init__ = function() {
14145 this.indent = [""];
14146 this.lines = [];
14147}
14148
14149Compiler.prototype.out = function() {
14150 var a000 = Array.prototype.slice.call(arguments, 0);
14151 if (viml_len(a000) == 1) {
14152 if (a000[0][0] == ")") {
14153 this.lines[this.lines.length - 1] += a000[0];
14154 }
14155 else {
14156 viml_add(this.lines, this.indent[0] + a000[0]);
14157 }
14158 }
14159 else {
14160 viml_add(this.lines, this.indent[0] + viml_printf.apply(null, a000));
14161 }
14162}
14163
14164Compiler.prototype.incindent = function(s) {
14165 viml_insert(this.indent, this.indent[0] + s);
14166}
14167
14168Compiler.prototype.decindent = function() {
14169 viml_remove(this.indent, 0);
14170}
14171
14172Compiler.prototype.compile = function(node) {
14173 if (node.type == NODE_TOPLEVEL) {
14174 return this.compile_toplevel(node);
14175 }
14176 else if (node.type == NODE_COMMENT) {
14177 this.compile_comment(node);
14178 return NIL;
14179 }
14180 else if (node.type == NODE_EXCMD) {
14181 this.compile_excmd(node);
14182 return NIL;
14183 }
14184 else if (node.type == NODE_FUNCTION) {
14185 this.compile_function(node);
14186 return NIL;
14187 }
14188 else if (node.type == NODE_DELFUNCTION) {
14189 this.compile_delfunction(node);
14190 return NIL;
14191 }
14192 else if (node.type == NODE_RETURN) {
14193 this.compile_return(node);
14194 return NIL;
14195 }
14196 else if (node.type == NODE_EXCALL) {
14197 this.compile_excall(node);
14198 return NIL;
14199 }
14200 else if (node.type == NODE_EVAL) {
14201 this.compile_eval(node);
14202 return NIL;
14203 }
14204 else if (node.type == NODE_LET) {
14205 this.compile_let(node);
14206 return NIL;
14207 }
14208 else if (node.type == NODE_CONST) {
14209 this.compile_const(node);
14210 return NIL;
14211 }
14212 else if (node.type == NODE_UNLET) {
14213 this.compile_unlet(node);
14214 return NIL;
14215 }
14216 else if (node.type == NODE_LOCKVAR) {
14217 this.compile_lockvar(node);
14218 return NIL;
14219 }
14220 else if (node.type == NODE_UNLOCKVAR) {
14221 this.compile_unlockvar(node);
14222 return NIL;
14223 }
14224 else if (node.type == NODE_IF) {
14225 this.compile_if(node);
14226 return NIL;
14227 }
14228 else if (node.type == NODE_WHILE) {
14229 this.compile_while(node);
14230 return NIL;
14231 }
14232 else if (node.type == NODE_FOR) {
14233 this.compile_for(node);
14234 return NIL;
14235 }
14236 else if (node.type == NODE_CONTINUE) {
14237 this.compile_continue(node);
14238 return NIL;
14239 }
14240 else if (node.type == NODE_BREAK) {
14241 this.compile_break(node);
14242 return NIL;
14243 }
14244 else if (node.type == NODE_TRY) {
14245 this.compile_try(node);
14246 return NIL;
14247 }
14248 else if (node.type == NODE_THROW) {
14249 this.compile_throw(node);
14250 return NIL;
14251 }
14252 else if (node.type == NODE_ECHO) {
14253 this.compile_echo(node);
14254 return NIL;
14255 }
14256 else if (node.type == NODE_ECHON) {
14257 this.compile_echon(node);
14258 return NIL;
14259 }
14260 else if (node.type == NODE_ECHOHL) {
14261 this.compile_echohl(node);
14262 return NIL;
14263 }
14264 else if (node.type == NODE_ECHOMSG) {
14265 this.compile_echomsg(node);
14266 return NIL;
14267 }
14268 else if (node.type == NODE_ECHOERR) {
14269 this.compile_echoerr(node);
14270 return NIL;
14271 }
14272 else if (node.type == NODE_EXECUTE) {
14273 this.compile_execute(node);
14274 return NIL;
14275 }
14276 else if (node.type == NODE_TERNARY) {
14277 return this.compile_ternary(node);
14278 }
14279 else if (node.type == NODE_OR) {
14280 return this.compile_or(node);
14281 }
14282 else if (node.type == NODE_AND) {
14283 return this.compile_and(node);
14284 }
14285 else if (node.type == NODE_EQUAL) {
14286 return this.compile_equal(node);
14287 }
14288 else if (node.type == NODE_EQUALCI) {
14289 return this.compile_equalci(node);
14290 }
14291 else if (node.type == NODE_EQUALCS) {
14292 return this.compile_equalcs(node);
14293 }
14294 else if (node.type == NODE_NEQUAL) {
14295 return this.compile_nequal(node);
14296 }
14297 else if (node.type == NODE_NEQUALCI) {
14298 return this.compile_nequalci(node);
14299 }
14300 else if (node.type == NODE_NEQUALCS) {
14301 return this.compile_nequalcs(node);
14302 }
14303 else if (node.type == NODE_GREATER) {
14304 return this.compile_greater(node);
14305 }
14306 else if (node.type == NODE_GREATERCI) {
14307 return this.compile_greaterci(node);
14308 }
14309 else if (node.type == NODE_GREATERCS) {
14310 return this.compile_greatercs(node);
14311 }
14312 else if (node.type == NODE_GEQUAL) {
14313 return this.compile_gequal(node);
14314 }
14315 else if (node.type == NODE_GEQUALCI) {
14316 return this.compile_gequalci(node);
14317 }
14318 else if (node.type == NODE_GEQUALCS) {
14319 return this.compile_gequalcs(node);
14320 }
14321 else if (node.type == NODE_SMALLER) {
14322 return this.compile_smaller(node);
14323 }
14324 else if (node.type == NODE_SMALLERCI) {
14325 return this.compile_smallerci(node);
14326 }
14327 else if (node.type == NODE_SMALLERCS) {
14328 return this.compile_smallercs(node);
14329 }
14330 else if (node.type == NODE_SEQUAL) {
14331 return this.compile_sequal(node);
14332 }
14333 else if (node.type == NODE_SEQUALCI) {
14334 return this.compile_sequalci(node);
14335 }
14336 else if (node.type == NODE_SEQUALCS) {
14337 return this.compile_sequalcs(node);
14338 }
14339 else if (node.type == NODE_MATCH) {
14340 return this.compile_match(node);
14341 }
14342 else if (node.type == NODE_MATCHCI) {
14343 return this.compile_matchci(node);
14344 }
14345 else if (node.type == NODE_MATCHCS) {
14346 return this.compile_matchcs(node);
14347 }
14348 else if (node.type == NODE_NOMATCH) {
14349 return this.compile_nomatch(node);
14350 }
14351 else if (node.type == NODE_NOMATCHCI) {
14352 return this.compile_nomatchci(node);
14353 }
14354 else if (node.type == NODE_NOMATCHCS) {
14355 return this.compile_nomatchcs(node);
14356 }
14357 else if (node.type == NODE_IS) {
14358 return this.compile_is(node);
14359 }
14360 else if (node.type == NODE_ISCI) {
14361 return this.compile_isci(node);
14362 }
14363 else if (node.type == NODE_ISCS) {
14364 return this.compile_iscs(node);
14365 }
14366 else if (node.type == NODE_ISNOT) {
14367 return this.compile_isnot(node);
14368 }
14369 else if (node.type == NODE_ISNOTCI) {
14370 return this.compile_isnotci(node);
14371 }
14372 else if (node.type == NODE_ISNOTCS) {
14373 return this.compile_isnotcs(node);
14374 }
14375 else if (node.type == NODE_ADD) {
14376 return this.compile_add(node);
14377 }
14378 else if (node.type == NODE_SUBTRACT) {
14379 return this.compile_subtract(node);
14380 }
14381 else if (node.type == NODE_CONCAT) {
14382 return this.compile_concat(node);
14383 }
14384 else if (node.type == NODE_MULTIPLY) {
14385 return this.compile_multiply(node);
14386 }
14387 else if (node.type == NODE_DIVIDE) {
14388 return this.compile_divide(node);
14389 }
14390 else if (node.type == NODE_REMAINDER) {
14391 return this.compile_remainder(node);
14392 }
14393 else if (node.type == NODE_NOT) {
14394 return this.compile_not(node);
14395 }
14396 else if (node.type == NODE_PLUS) {
14397 return this.compile_plus(node);
14398 }
14399 else if (node.type == NODE_MINUS) {
14400 return this.compile_minus(node);
14401 }
14402 else if (node.type == NODE_SUBSCRIPT) {
14403 return this.compile_subscript(node);
14404 }
14405 else if (node.type == NODE_SLICE) {
14406 return this.compile_slice(node);
14407 }
14408 else if (node.type == NODE_DOT) {
14409 return this.compile_dot(node);
14410 }
14411 else if (node.type == NODE_METHOD) {
14412 return this.compile_method(node);
14413 }
14414 else if (node.type == NODE_CALL) {
14415 return this.compile_call(node);
14416 }
14417 else if (node.type == NODE_NUMBER) {
14418 return this.compile_number(node);
14419 }
14420 else if (node.type == NODE_BLOB) {
14421 return this.compile_blob(node);
14422 }
14423 else if (node.type == NODE_STRING) {
14424 return this.compile_string(node);
14425 }
14426 else if (node.type == NODE_LIST) {
14427 return this.compile_list(node);
14428 }
14429 else if (node.type == NODE_DICT) {
14430 return this.compile_dict(node);
14431 }
14432 else if (node.type == NODE_OPTION) {
14433 return this.compile_option(node);
14434 }
14435 else if (node.type == NODE_IDENTIFIER) {
14436 return this.compile_identifier(node);
14437 }
14438 else if (node.type == NODE_CURLYNAME) {
14439 return this.compile_curlyname(node);
14440 }
14441 else if (node.type == NODE_ENV) {
14442 return this.compile_env(node);
14443 }
14444 else if (node.type == NODE_REG) {
14445 return this.compile_reg(node);
14446 }
14447 else if (node.type == NODE_CURLYNAMEPART) {
14448 return this.compile_curlynamepart(node);
14449 }
14450 else if (node.type == NODE_CURLYNAMEEXPR) {
14451 return this.compile_curlynameexpr(node);
14452 }
14453 else if (node.type == NODE_LAMBDA) {
14454 return this.compile_lambda(node);
14455 }
14456 else if (node.type == NODE_HEREDOC) {
14457 return this.compile_heredoc(node);
14458 }
14459 else {
14460 throw viml_printf("Compiler: unknown node: %s", viml_string(node));
14461 }
14462 return NIL;
14463}
14464
14465Compiler.prototype.compile_body = function(body) {
14466 var __c10 = body;
14467 for (var __i10 = 0; __i10 < __c10.length; ++__i10) {
14468 var node = __c10[__i10];
14469 this.compile(node);
14470 }
14471}
14472
14473Compiler.prototype.compile_toplevel = function(node) {
14474 this.compile_body(node.body);
14475 return this.lines;
14476}
14477
14478Compiler.prototype.compile_comment = function(node) {
14479 this.out(";%s", node.str);
14480}
14481
14482Compiler.prototype.compile_excmd = function(node) {
14483 this.out("(excmd \"%s\")", viml_escape(node.str, "\\\""));
14484}
14485
14486Compiler.prototype.compile_function = function(node) {
14487 var left = this.compile(node.left);
14488 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
14489 var default_args = node.default_args.map((function(vval) { return this.compile(vval); }).bind(this));
14490 if (!viml_empty(rlist)) {
14491 var remaining = FALSE;
14492 if (rlist[rlist.length - 1] == "...") {
14493 viml_remove(rlist, -1);
14494 var remaining = TRUE;
14495 }
14496 var __c11 = viml_range(viml_len(rlist));
14497 for (var __i11 = 0; __i11 < __c11.length; ++__i11) {
14498 var i = __c11[__i11];
14499 if (i < viml_len(rlist) - viml_len(default_args)) {
14500 left += viml_printf(" %s", rlist[i]);
14501 }
14502 else {
14503 left += viml_printf(" (%s %s)", rlist[i], default_args[i + viml_len(default_args) - viml_len(rlist)]);
14504 }
14505 }
14506 if (remaining) {
14507 left += " . ...";
14508 }
14509 }
14510 this.out("(function (%s)", left);
14511 this.incindent(" ");
14512 this.compile_body(node.body);
14513 this.out(")");
14514 this.decindent();
14515}
14516
14517Compiler.prototype.compile_delfunction = function(node) {
14518 this.out("(delfunction %s)", this.compile(node.left));
14519}
14520
14521Compiler.prototype.compile_return = function(node) {
14522 if (node.left === NIL) {
14523 this.out("(return)");
14524 }
14525 else {
14526 this.out("(return %s)", this.compile(node.left));
14527 }
14528}
14529
14530Compiler.prototype.compile_excall = function(node) {
14531 this.out("(call %s)", this.compile(node.left));
14532}
14533
14534Compiler.prototype.compile_eval = function(node) {
14535 this.out("(eval %s)", this.compile(node.left));
14536}
14537
14538Compiler.prototype.compile_let = function(node) {
14539 var left = "";
14540 if (node.left !== NIL) {
14541 var left = this.compile(node.left);
14542 }
14543 else {
14544 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
14545 if (node.rest !== NIL) {
14546 left += " . " + this.compile(node.rest);
14547 }
14548 var left = "(" + left + ")";
14549 }
14550 var right = this.compile(node.right);
14551 this.out("(let %s %s %s)", node.op, left, right);
14552}
14553
14554// TODO: merge with s:Compiler.compile_let() ?
14555Compiler.prototype.compile_const = function(node) {
14556 var left = "";
14557 if (node.left !== NIL) {
14558 var left = this.compile(node.left);
14559 }
14560 else {
14561 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
14562 if (node.rest !== NIL) {
14563 left += " . " + this.compile(node.rest);
14564 }
14565 var left = "(" + left + ")";
14566 }
14567 var right = this.compile(node.right);
14568 this.out("(const %s %s %s)", node.op, left, right);
14569}
14570
14571Compiler.prototype.compile_unlet = function(node) {
14572 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14573 this.out("(unlet %s)", viml_join(list, " "));
14574}
14575
14576Compiler.prototype.compile_lockvar = function(node) {
14577 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14578 if (node.depth === NIL) {
14579 this.out("(lockvar %s)", viml_join(list, " "));
14580 }
14581 else {
14582 this.out("(lockvar %s %s)", node.depth, viml_join(list, " "));
14583 }
14584}
14585
14586Compiler.prototype.compile_unlockvar = function(node) {
14587 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14588 if (node.depth === NIL) {
14589 this.out("(unlockvar %s)", viml_join(list, " "));
14590 }
14591 else {
14592 this.out("(unlockvar %s %s)", node.depth, viml_join(list, " "));
14593 }
14594}
14595
14596Compiler.prototype.compile_if = function(node) {
14597 this.out("(if %s", this.compile(node.cond));
14598 this.incindent(" ");
14599 this.compile_body(node.body);
14600 this.decindent();
14601 var __c12 = node.elseif;
14602 for (var __i12 = 0; __i12 < __c12.length; ++__i12) {
14603 var enode = __c12[__i12];
14604 this.out(" elseif %s", this.compile(enode.cond));
14605 this.incindent(" ");
14606 this.compile_body(enode.body);
14607 this.decindent();
14608 }
14609 if (node._else !== NIL) {
14610 this.out(" else");
14611 this.incindent(" ");
14612 this.compile_body(node._else.body);
14613 this.decindent();
14614 }
14615 this.incindent(" ");
14616 this.out(")");
14617 this.decindent();
14618}
14619
14620Compiler.prototype.compile_while = function(node) {
14621 this.out("(while %s", this.compile(node.cond));
14622 this.incindent(" ");
14623 this.compile_body(node.body);
14624 this.out(")");
14625 this.decindent();
14626}
14627
14628Compiler.prototype.compile_for = function(node) {
14629 var left = "";
14630 if (node.left !== NIL) {
14631 var left = this.compile(node.left);
14632 }
14633 else {
14634 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
14635 if (node.rest !== NIL) {
14636 left += " . " + this.compile(node.rest);
14637 }
14638 var left = "(" + left + ")";
14639 }
14640 var right = this.compile(node.right);
14641 this.out("(for %s %s", left, right);
14642 this.incindent(" ");
14643 this.compile_body(node.body);
14644 this.out(")");
14645 this.decindent();
14646}
14647
14648Compiler.prototype.compile_continue = function(node) {
14649 this.out("(continue)");
14650}
14651
14652Compiler.prototype.compile_break = function(node) {
14653 this.out("(break)");
14654}
14655
14656Compiler.prototype.compile_try = function(node) {
14657 this.out("(try");
14658 this.incindent(" ");
14659 this.compile_body(node.body);
14660 var __c13 = node.catch;
14661 for (var __i13 = 0; __i13 < __c13.length; ++__i13) {
14662 var cnode = __c13[__i13];
14663 if (cnode.pattern !== NIL) {
14664 this.decindent();
14665 this.out(" catch /%s/", cnode.pattern);
14666 this.incindent(" ");
14667 this.compile_body(cnode.body);
14668 }
14669 else {
14670 this.decindent();
14671 this.out(" catch");
14672 this.incindent(" ");
14673 this.compile_body(cnode.body);
14674 }
14675 }
14676 if (node._finally !== NIL) {
14677 this.decindent();
14678 this.out(" finally");
14679 this.incindent(" ");
14680 this.compile_body(node._finally.body);
14681 }
14682 this.out(")");
14683 this.decindent();
14684}
14685
14686Compiler.prototype.compile_throw = function(node) {
14687 this.out("(throw %s)", this.compile(node.left));
14688}
14689
14690Compiler.prototype.compile_echo = function(node) {
14691 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14692 this.out("(echo %s)", viml_join(list, " "));
14693}
14694
14695Compiler.prototype.compile_echon = function(node) {
14696 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14697 this.out("(echon %s)", viml_join(list, " "));
14698}
14699
14700Compiler.prototype.compile_echohl = function(node) {
14701 this.out("(echohl \"%s\")", viml_escape(node.str, "\\\""));
14702}
14703
14704Compiler.prototype.compile_echomsg = function(node) {
14705 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14706 this.out("(echomsg %s)", viml_join(list, " "));
14707}
14708
14709Compiler.prototype.compile_echoerr = function(node) {
14710 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14711 this.out("(echoerr %s)", viml_join(list, " "));
14712}
14713
14714Compiler.prototype.compile_execute = function(node) {
14715 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
14716 this.out("(execute %s)", viml_join(list, " "));
14717}
14718
14719Compiler.prototype.compile_ternary = function(node) {
14720 return viml_printf("(?: %s %s %s)", this.compile(node.cond), this.compile(node.left), this.compile(node.right));
14721}
14722
14723Compiler.prototype.compile_or = function(node) {
14724 return viml_printf("(|| %s %s)", this.compile(node.left), this.compile(node.right));
14725}
14726
14727Compiler.prototype.compile_and = function(node) {
14728 return viml_printf("(&& %s %s)", this.compile(node.left), this.compile(node.right));
14729}
14730
14731Compiler.prototype.compile_equal = function(node) {
14732 return viml_printf("(== %s %s)", this.compile(node.left), this.compile(node.right));
14733}
14734
14735Compiler.prototype.compile_equalci = function(node) {
14736 return viml_printf("(==? %s %s)", this.compile(node.left), this.compile(node.right));
14737}
14738
14739Compiler.prototype.compile_equalcs = function(node) {
14740 return viml_printf("(==# %s %s)", this.compile(node.left), this.compile(node.right));
14741}
14742
14743Compiler.prototype.compile_nequal = function(node) {
14744 return viml_printf("(!= %s %s)", this.compile(node.left), this.compile(node.right));
14745}
14746
14747Compiler.prototype.compile_nequalci = function(node) {
14748 return viml_printf("(!=? %s %s)", this.compile(node.left), this.compile(node.right));
14749}
14750
14751Compiler.prototype.compile_nequalcs = function(node) {
14752 return viml_printf("(!=# %s %s)", this.compile(node.left), this.compile(node.right));
14753}
14754
14755Compiler.prototype.compile_greater = function(node) {
14756 return viml_printf("(> %s %s)", this.compile(node.left), this.compile(node.right));
14757}
14758
14759Compiler.prototype.compile_greaterci = function(node) {
14760 return viml_printf("(>? %s %s)", this.compile(node.left), this.compile(node.right));
14761}
14762
14763Compiler.prototype.compile_greatercs = function(node) {
14764 return viml_printf("(># %s %s)", this.compile(node.left), this.compile(node.right));
14765}
14766
14767Compiler.prototype.compile_gequal = function(node) {
14768 return viml_printf("(>= %s %s)", this.compile(node.left), this.compile(node.right));
14769}
14770
14771Compiler.prototype.compile_gequalci = function(node) {
14772 return viml_printf("(>=? %s %s)", this.compile(node.left), this.compile(node.right));
14773}
14774
14775Compiler.prototype.compile_gequalcs = function(node) {
14776 return viml_printf("(>=# %s %s)", this.compile(node.left), this.compile(node.right));
14777}
14778
14779Compiler.prototype.compile_smaller = function(node) {
14780 return viml_printf("(< %s %s)", this.compile(node.left), this.compile(node.right));
14781}
14782
14783Compiler.prototype.compile_smallerci = function(node) {
14784 return viml_printf("(<? %s %s)", this.compile(node.left), this.compile(node.right));
14785}
14786
14787Compiler.prototype.compile_smallercs = function(node) {
14788 return viml_printf("(<# %s %s)", this.compile(node.left), this.compile(node.right));
14789}
14790
14791Compiler.prototype.compile_sequal = function(node) {
14792 return viml_printf("(<= %s %s)", this.compile(node.left), this.compile(node.right));
14793}
14794
14795Compiler.prototype.compile_sequalci = function(node) {
14796 return viml_printf("(<=? %s %s)", this.compile(node.left), this.compile(node.right));
14797}
14798
14799Compiler.prototype.compile_sequalcs = function(node) {
14800 return viml_printf("(<=# %s %s)", this.compile(node.left), this.compile(node.right));
14801}
14802
14803Compiler.prototype.compile_match = function(node) {
14804 return viml_printf("(=~ %s %s)", this.compile(node.left), this.compile(node.right));
14805}
14806
14807Compiler.prototype.compile_matchci = function(node) {
14808 return viml_printf("(=~? %s %s)", this.compile(node.left), this.compile(node.right));
14809}
14810
14811Compiler.prototype.compile_matchcs = function(node) {
14812 return viml_printf("(=~# %s %s)", this.compile(node.left), this.compile(node.right));
14813}
14814
14815Compiler.prototype.compile_nomatch = function(node) {
14816 return viml_printf("(!~ %s %s)", this.compile(node.left), this.compile(node.right));
14817}
14818
14819Compiler.prototype.compile_nomatchci = function(node) {
14820 return viml_printf("(!~? %s %s)", this.compile(node.left), this.compile(node.right));
14821}
14822
14823Compiler.prototype.compile_nomatchcs = function(node) {
14824 return viml_printf("(!~# %s %s)", this.compile(node.left), this.compile(node.right));
14825}
14826
14827Compiler.prototype.compile_is = function(node) {
14828 return viml_printf("(is %s %s)", this.compile(node.left), this.compile(node.right));
14829}
14830
14831Compiler.prototype.compile_isci = function(node) {
14832 return viml_printf("(is? %s %s)", this.compile(node.left), this.compile(node.right));
14833}
14834
14835Compiler.prototype.compile_iscs = function(node) {
14836 return viml_printf("(is# %s %s)", this.compile(node.left), this.compile(node.right));
14837}
14838
14839Compiler.prototype.compile_isnot = function(node) {
14840 return viml_printf("(isnot %s %s)", this.compile(node.left), this.compile(node.right));
14841}
14842
14843Compiler.prototype.compile_isnotci = function(node) {
14844 return viml_printf("(isnot? %s %s)", this.compile(node.left), this.compile(node.right));
14845}
14846
14847Compiler.prototype.compile_isnotcs = function(node) {
14848 return viml_printf("(isnot# %s %s)", this.compile(node.left), this.compile(node.right));
14849}
14850
14851Compiler.prototype.compile_add = function(node) {
14852 return viml_printf("(+ %s %s)", this.compile(node.left), this.compile(node.right));
14853}
14854
14855Compiler.prototype.compile_subtract = function(node) {
14856 return viml_printf("(- %s %s)", this.compile(node.left), this.compile(node.right));
14857}
14858
14859Compiler.prototype.compile_concat = function(node) {
14860 return viml_printf("(concat %s %s)", this.compile(node.left), this.compile(node.right));
14861}
14862
14863Compiler.prototype.compile_multiply = function(node) {
14864 return viml_printf("(* %s %s)", this.compile(node.left), this.compile(node.right));
14865}
14866
14867Compiler.prototype.compile_divide = function(node) {
14868 return viml_printf("(/ %s %s)", this.compile(node.left), this.compile(node.right));
14869}
14870
14871Compiler.prototype.compile_remainder = function(node) {
14872 return viml_printf("(%% %s %s)", this.compile(node.left), this.compile(node.right));
14873}
14874
14875Compiler.prototype.compile_not = function(node) {
14876 return viml_printf("(! %s)", this.compile(node.left));
14877}
14878
14879Compiler.prototype.compile_plus = function(node) {
14880 return viml_printf("(+ %s)", this.compile(node.left));
14881}
14882
14883Compiler.prototype.compile_minus = function(node) {
14884 return viml_printf("(- %s)", this.compile(node.left));
14885}
14886
14887Compiler.prototype.compile_subscript = function(node) {
14888 return viml_printf("(subscript %s %s)", this.compile(node.left), this.compile(node.right));
14889}
14890
14891Compiler.prototype.compile_slice = function(node) {
14892 var r0 = node.rlist[0] === NIL ? "nil" : this.compile(node.rlist[0]);
14893 var r1 = node.rlist[1] === NIL ? "nil" : this.compile(node.rlist[1]);
14894 return viml_printf("(slice %s %s %s)", this.compile(node.left), r0, r1);
14895}
14896
14897Compiler.prototype.compile_dot = function(node) {
14898 return viml_printf("(dot %s %s)", this.compile(node.left), this.compile(node.right));
14899}
14900
14901Compiler.prototype.compile_method = function(node) {
14902 return viml_printf("(method %s %s)", this.compile(node.left), this.compile(node.right));
14903}
14904
14905Compiler.prototype.compile_call = function(node) {
14906 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
14907 if (viml_empty(rlist)) {
14908 return viml_printf("(%s)", this.compile(node.left));
14909 }
14910 else {
14911 return viml_printf("(%s %s)", this.compile(node.left), viml_join(rlist, " "));
14912 }
14913}
14914
14915Compiler.prototype.compile_number = function(node) {
14916 return node.value;
14917}
14918
14919Compiler.prototype.compile_blob = function(node) {
14920 return node.value;
14921}
14922
14923Compiler.prototype.compile_string = function(node) {
14924 return node.value;
14925}
14926
14927Compiler.prototype.compile_list = function(node) {
14928 var value = node.value.map((function(vval) { return this.compile(vval); }).bind(this));
14929 if (viml_empty(value)) {
14930 return "(list)";
14931 }
14932 else {
14933 return viml_printf("(list %s)", viml_join(value, " "));
14934 }
14935}
14936
14937Compiler.prototype.compile_dict = function(node) {
14938 var value = node.value.map((function(vval) { return "(" + this.compile(vval[0]) + " " + this.compile(vval[1]) + ")"; }).bind(this));
14939 if (viml_empty(value)) {
14940 return "(dict)";
14941 }
14942 else {
14943 return viml_printf("(dict %s)", viml_join(value, " "));
14944 }
14945}
14946
14947Compiler.prototype.compile_option = function(node) {
14948 return node.value;
14949}
14950
14951Compiler.prototype.compile_identifier = function(node) {
14952 return node.value;
14953}
14954
14955Compiler.prototype.compile_curlyname = function(node) {
14956 return viml_join(node.value.map((function(vval) { return this.compile(vval); }).bind(this)), "");
14957}
14958
14959Compiler.prototype.compile_env = function(node) {
14960 return node.value;
14961}
14962
14963Compiler.prototype.compile_reg = function(node) {
14964 return node.value;
14965}
14966
14967Compiler.prototype.compile_curlynamepart = function(node) {
14968 return node.value;
14969}
14970
14971Compiler.prototype.compile_curlynameexpr = function(node) {
14972 return "{" + this.compile(node.value) + "}";
14973}
14974
14975Compiler.prototype.escape_string = function(str) {
14976 var m = {"\n":"\\n", "\t":"\\t", "\r":"\\r"};
14977 var out = "\"";
14978 var __c14 = viml_range(viml_len(str));
14979 for (var __i14 = 0; __i14 < __c14.length; ++__i14) {
14980 var i = __c14[__i14];
14981 var c = str[i];
14982 if (viml_has_key(m, c)) {
14983 out += m[c];
14984 }
14985 else {
14986 out += c;
14987 }
14988 }
14989 out += "\"";
14990 return out;
14991}
14992
14993Compiler.prototype.compile_lambda = function(node) {
14994 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
14995 return viml_printf("(lambda (%s) %s)", viml_join(rlist, " "), this.compile(node.left));
14996}
14997
14998Compiler.prototype.compile_heredoc = function(node) {
14999 if (viml_empty(node.rlist)) {
15000 var rlist = "(list)";
15001 }
15002 else {
15003 var rlist = "(list " + viml_join(node.rlist.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
15004 }
15005 if (viml_empty(node.body)) {
15006 var body = "(list)";
15007 }
15008 else {
15009 var body = "(list " + viml_join(node.body.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
15010 }
15011 var op = this.escape_string(node.op);
15012 return viml_printf("(heredoc %s %s %s)", rlist, op, body);
15013}
15014
15015// TODO: under construction
15016function RegexpParser() { this.__init__.apply(this, arguments); }
15017RegexpParser.prototype.RE_VERY_NOMAGIC = 1;
15018RegexpParser.prototype.RE_NOMAGIC = 2;
15019RegexpParser.prototype.RE_MAGIC = 3;
15020RegexpParser.prototype.RE_VERY_MAGIC = 4;
15021RegexpParser.prototype.__init__ = function(reader, cmd, delim) {
15022 this.reader = reader;
15023 this.cmd = cmd;
15024 this.delim = delim;
15025 this.reg_magic = this.RE_MAGIC;
15026}
15027
15028RegexpParser.prototype.isend = function(c) {
15029 return c == "<EOF>" || c == "<EOL>" || c == this.delim;
15030}
15031
15032RegexpParser.prototype.parse_regexp = function() {
15033 var prevtoken = "";
15034 var ntoken = "";
15035 var ret = [];
15036 if (this.reader.peekn(4) == "\\%#=") {
15037 var epos = this.reader.getpos();
15038 var token = this.reader.getn(5);
15039 if (token != "\\%#=0" && token != "\\%#=1" && token != "\\%#=2") {
15040 throw Err("E864: \\%#= can only be followed by 0, 1, or 2", epos);
15041 }
15042 viml_add(ret, token);
15043 }
15044 while (!this.isend(this.reader.peek())) {
15045 var prevtoken = ntoken;
15046 var __tmp = this.get_token();
15047 var token = __tmp[0];
15048 var ntoken = __tmp[1];
15049 if (ntoken == "\\m") {
15050 this.reg_magic = this.RE_MAGIC;
15051 }
15052 else if (ntoken == "\\M") {
15053 this.reg_magic = this.RE_NOMAGIC;
15054 }
15055 else if (ntoken == "\\v") {
15056 this.reg_magic = this.RE_VERY_MAGIC;
15057 }
15058 else if (ntoken == "\\V") {
15059 this.reg_magic = this.RE_VERY_NOMAGIC;
15060 }
15061 else if (ntoken == "\\*") {
15062 // '*' is not magic as the very first character.
15063 if (prevtoken == "" || prevtoken == "\\^" || prevtoken == "\\&" || prevtoken == "\\|" || prevtoken == "\\(") {
15064 var ntoken = "*";
15065 }
15066 }
15067 else if (ntoken == "\\^") {
15068 // '^' is only magic as the very first character.
15069 if (this.reg_magic != this.RE_VERY_MAGIC && prevtoken != "" && prevtoken != "\\&" && prevtoken != "\\|" && prevtoken != "\\n" && prevtoken != "\\(" && prevtoken != "\\%(") {
15070 var ntoken = "^";
15071 }
15072 }
15073 else if (ntoken == "\\$") {
15074 // '$' is only magic as the very last character
15075 var pos = this.reader.tell();
15076 if (this.reg_magic != this.RE_VERY_MAGIC) {
15077 while (!this.isend(this.reader.peek())) {
15078 var __tmp = this.get_token();
15079 var t = __tmp[0];
15080 var n = __tmp[1];
15081 // XXX: Vim doesn't check \v and \V?
15082 if (n == "\\c" || n == "\\C" || n == "\\m" || n == "\\M" || n == "\\Z") {
15083 continue;
15084 }
15085 if (n != "\\|" && n != "\\&" && n != "\\n" && n != "\\)") {
15086 var ntoken = "$";
15087 }
15088 break;
15089 }
15090 }
15091 this.reader.seek_set(pos);
15092 }
15093 else if (ntoken == "\\?") {
15094 // '?' is literal in '?' command.
15095 if (this.cmd == "?") {
15096 var ntoken = "?";
15097 }
15098 }
15099 viml_add(ret, ntoken);
15100 }
15101 return ret;
15102}
15103
15104// @return [actual_token, normalized_token]
15105RegexpParser.prototype.get_token = function() {
15106 if (this.reg_magic == this.RE_VERY_MAGIC) {
15107 return this.get_token_very_magic();
15108 }
15109 else if (this.reg_magic == this.RE_MAGIC) {
15110 return this.get_token_magic();
15111 }
15112 else if (this.reg_magic == this.RE_NOMAGIC) {
15113 return this.get_token_nomagic();
15114 }
15115 else if (this.reg_magic == this.RE_VERY_NOMAGIC) {
15116 return this.get_token_very_nomagic();
15117 }
15118}
15119
15120RegexpParser.prototype.get_token_very_magic = function() {
15121 if (this.isend(this.reader.peek())) {
15122 return ["<END>", "<END>"];
15123 }
15124 var c = this.reader.get();
15125 if (c == "\\") {
15126 return this.get_token_backslash_common();
15127 }
15128 else if (c == "*") {
15129 return ["*", "\\*"];
15130 }
15131 else if (c == "+") {
15132 return ["+", "\\+"];
15133 }
15134 else if (c == "=") {
15135 return ["=", "\\="];
15136 }
15137 else if (c == "?") {
15138 return ["?", "\\?"];
15139 }
15140 else if (c == "{") {
15141 return this.get_token_brace("{");
15142 }
15143 else if (c == "@") {
15144 return this.get_token_at("@");
15145 }
15146 else if (c == "^") {
15147 return ["^", "\\^"];
15148 }
15149 else if (c == "$") {
15150 return ["$", "\\$"];
15151 }
15152 else if (c == ".") {
15153 return [".", "\\."];
15154 }
15155 else if (c == "<") {
15156 return ["<", "\\<"];
15157 }
15158 else if (c == ">") {
15159 return [">", "\\>"];
15160 }
15161 else if (c == "%") {
15162 return this.get_token_percent("%");
15163 }
15164 else if (c == "[") {
15165 return this.get_token_sq("[");
15166 }
15167 else if (c == "~") {
15168 return ["~", "\\~"];
15169 }
15170 else if (c == "|") {
15171 return ["|", "\\|"];
15172 }
15173 else if (c == "&") {
15174 return ["&", "\\&"];
15175 }
15176 else if (c == "(") {
15177 return ["(", "\\("];
15178 }
15179 else if (c == ")") {
15180 return [")", "\\)"];
15181 }
15182 return [c, c];
15183}
15184
15185RegexpParser.prototype.get_token_magic = function() {
15186 if (this.isend(this.reader.peek())) {
15187 return ["<END>", "<END>"];
15188 }
15189 var c = this.reader.get();
15190 if (c == "\\") {
15191 var pos = this.reader.tell();
15192 var c = this.reader.get();
15193 if (c == "+") {
15194 return ["\\+", "\\+"];
15195 }
15196 else if (c == "=") {
15197 return ["\\=", "\\="];
15198 }
15199 else if (c == "?") {
15200 return ["\\?", "\\?"];
15201 }
15202 else if (c == "{") {
15203 return this.get_token_brace("\\{");
15204 }
15205 else if (c == "@") {
15206 return this.get_token_at("\\@");
15207 }
15208 else if (c == "<") {
15209 return ["\\<", "\\<"];
15210 }
15211 else if (c == ">") {
15212 return ["\\>", "\\>"];
15213 }
15214 else if (c == "%") {
15215 return this.get_token_percent("\\%");
15216 }
15217 else if (c == "|") {
15218 return ["\\|", "\\|"];
15219 }
15220 else if (c == "&") {
15221 return ["\\&", "\\&"];
15222 }
15223 else if (c == "(") {
15224 return ["\\(", "\\("];
15225 }
15226 else if (c == ")") {
15227 return ["\\)", "\\)"];
15228 }
15229 this.reader.seek_set(pos);
15230 return this.get_token_backslash_common();
15231 }
15232 else if (c == "*") {
15233 return ["*", "\\*"];
15234 }
15235 else if (c == "^") {
15236 return ["^", "\\^"];
15237 }
15238 else if (c == "$") {
15239 return ["$", "\\$"];
15240 }
15241 else if (c == ".") {
15242 return [".", "\\."];
15243 }
15244 else if (c == "[") {
15245 return this.get_token_sq("[");
15246 }
15247 else if (c == "~") {
15248 return ["~", "\\~"];
15249 }
15250 return [c, c];
15251}
15252
15253RegexpParser.prototype.get_token_nomagic = function() {
15254 if (this.isend(this.reader.peek())) {
15255 return ["<END>", "<END>"];
15256 }
15257 var c = this.reader.get();
15258 if (c == "\\") {
15259 var pos = this.reader.tell();
15260 var c = this.reader.get();
15261 if (c == "*") {
15262 return ["\\*", "\\*"];
15263 }
15264 else if (c == "+") {
15265 return ["\\+", "\\+"];
15266 }
15267 else if (c == "=") {
15268 return ["\\=", "\\="];
15269 }
15270 else if (c == "?") {
15271 return ["\\?", "\\?"];
15272 }
15273 else if (c == "{") {
15274 return this.get_token_brace("\\{");
15275 }
15276 else if (c == "@") {
15277 return this.get_token_at("\\@");
15278 }
15279 else if (c == ".") {
15280 return ["\\.", "\\."];
15281 }
15282 else if (c == "<") {
15283 return ["\\<", "\\<"];
15284 }
15285 else if (c == ">") {
15286 return ["\\>", "\\>"];
15287 }
15288 else if (c == "%") {
15289 return this.get_token_percent("\\%");
15290 }
15291 else if (c == "~") {
15292 return ["\\~", "\\^"];
15293 }
15294 else if (c == "[") {
15295 return this.get_token_sq("\\[");
15296 }
15297 else if (c == "|") {
15298 return ["\\|", "\\|"];
15299 }
15300 else if (c == "&") {
15301 return ["\\&", "\\&"];
15302 }
15303 else if (c == "(") {
15304 return ["\\(", "\\("];
15305 }
15306 else if (c == ")") {
15307 return ["\\)", "\\)"];
15308 }
15309 this.reader.seek_set(pos);
15310 return this.get_token_backslash_common();
15311 }
15312 else if (c == "^") {
15313 return ["^", "\\^"];
15314 }
15315 else if (c == "$") {
15316 return ["$", "\\$"];
15317 }
15318 return [c, c];
15319}
15320
15321RegexpParser.prototype.get_token_very_nomagic = function() {
15322 if (this.isend(this.reader.peek())) {
15323 return ["<END>", "<END>"];
15324 }
15325 var c = this.reader.get();
15326 if (c == "\\") {
15327 var pos = this.reader.tell();
15328 var c = this.reader.get();
15329 if (c == "*") {
15330 return ["\\*", "\\*"];
15331 }
15332 else if (c == "+") {
15333 return ["\\+", "\\+"];
15334 }
15335 else if (c == "=") {
15336 return ["\\=", "\\="];
15337 }
15338 else if (c == "?") {
15339 return ["\\?", "\\?"];
15340 }
15341 else if (c == "{") {
15342 return this.get_token_brace("\\{");
15343 }
15344 else if (c == "@") {
15345 return this.get_token_at("\\@");
15346 }
15347 else if (c == "^") {
15348 return ["\\^", "\\^"];
15349 }
15350 else if (c == "$") {
15351 return ["\\$", "\\$"];
15352 }
15353 else if (c == "<") {
15354 return ["\\<", "\\<"];
15355 }
15356 else if (c == ">") {
15357 return ["\\>", "\\>"];
15358 }
15359 else if (c == "%") {
15360 return this.get_token_percent("\\%");
15361 }
15362 else if (c == "~") {
15363 return ["\\~", "\\~"];
15364 }
15365 else if (c == "[") {
15366 return this.get_token_sq("\\[");
15367 }
15368 else if (c == "|") {
15369 return ["\\|", "\\|"];
15370 }
15371 else if (c == "&") {
15372 return ["\\&", "\\&"];
15373 }
15374 else if (c == "(") {
15375 return ["\\(", "\\("];
15376 }
15377 else if (c == ")") {
15378 return ["\\)", "\\)"];
15379 }
15380 this.reader.seek_set(pos);
15381 return this.get_token_backslash_common();
15382 }
15383 return [c, c];
15384}
15385
15386RegexpParser.prototype.get_token_backslash_common = function() {
15387 var cclass = "iIkKfFpPsSdDxXoOwWhHaAlLuU";
15388 var c = this.reader.get();
15389 if (c == "\\") {
15390 return ["\\\\", "\\\\"];
15391 }
15392 else if (viml_stridx(cclass, c) != -1) {
15393 return ["\\" + c, "\\" + c];
15394 }
15395 else if (c == "_") {
15396 var epos = this.reader.getpos();
15397 var c = this.reader.get();
15398 if (viml_stridx(cclass, c) != -1) {
15399 return ["\\_" + c, "\\_ . c"];
15400 }
15401 else if (c == "^") {
15402 return ["\\_^", "\\_^"];
15403 }
15404 else if (c == "$") {
15405 return ["\\_$", "\\_$"];
15406 }
15407 else if (c == ".") {
15408 return ["\\_.", "\\_."];
15409 }
15410 else if (c == "[") {
15411 return this.get_token_sq("\\_[");
15412 }
15413 throw Err("E63: Invalid use of \\_", epos);
15414 }
15415 else if (viml_stridx("etrb", c) != -1) {
15416 return ["\\" + c, "\\" + c];
15417 }
15418 else if (viml_stridx("123456789", c) != -1) {
15419 return ["\\" + c, "\\" + c];
15420 }
15421 else if (c == "z") {
15422 var epos = this.reader.getpos();
15423 var c = this.reader.get();
15424 if (viml_stridx("123456789", c) != -1) {
15425 return ["\\z" + c, "\\z" + c];
15426 }
15427 else if (c == "s") {
15428 return ["\\zs", "\\zs"];
15429 }
15430 else if (c == "e") {
15431 return ["\\ze", "\\ze"];
15432 }
15433 else if (c == "(") {
15434 return ["\\z(", "\\z("];
15435 }
15436 throw Err("E68: Invalid character after \\z", epos);
15437 }
15438 else if (viml_stridx("cCmMvVZ", c) != -1) {
15439 return ["\\" + c, "\\" + c];
15440 }
15441 else if (c == "%") {
15442 var epos = this.reader.getpos();
15443 var c = this.reader.get();
15444 if (c == "d") {
15445 var r = this.getdecchrs();
15446 if (r != "") {
15447 return ["\\%d" + r, "\\%d" + r];
15448 }
15449 }
15450 else if (c == "o") {
15451 var r = this.getoctchrs();
15452 if (r != "") {
15453 return ["\\%o" + r, "\\%o" + r];
15454 }
15455 }
15456 else if (c == "x") {
15457 var r = this.gethexchrs(2);
15458 if (r != "") {
15459 return ["\\%x" + r, "\\%x" + r];
15460 }
15461 }
15462 else if (c == "u") {
15463 var r = this.gethexchrs(4);
15464 if (r != "") {
15465 return ["\\%u" + r, "\\%u" + r];
15466 }
15467 }
15468 else if (c == "U") {
15469 var r = this.gethexchrs(8);
15470 if (r != "") {
15471 return ["\\%U" + r, "\\%U" + r];
15472 }
15473 }
15474 throw Err("E678: Invalid character after \\%[dxouU]", epos);
15475 }
15476 return ["\\" + c, c];
15477}
15478
15479// \{}
15480RegexpParser.prototype.get_token_brace = function(pre) {
15481 var r = "";
15482 var minus = "";
15483 var comma = "";
15484 var n = "";
15485 var m = "";
15486 if (this.reader.p(0) == "-") {
15487 var minus = this.reader.get();
15488 r += minus;
15489 }
15490 if (isdigit(this.reader.p(0))) {
15491 var n = this.reader.read_digit();
15492 r += n;
15493 }
15494 if (this.reader.p(0) == ",") {
15495 var comma = this.rader.get();
15496 r += comma;
15497 }
15498 if (isdigit(this.reader.p(0))) {
15499 var m = this.reader.read_digit();
15500 r += m;
15501 }
15502 if (this.reader.p(0) == "\\") {
15503 r += this.reader.get();
15504 }
15505 if (this.reader.p(0) != "}") {
15506 throw Err("E554: Syntax error in \\{...}", this.reader.getpos());
15507 }
15508 this.reader.get();
15509 return [pre + r, "\\{" + minus + n + comma + m + "}"];
15510}
15511
15512// \[]
15513RegexpParser.prototype.get_token_sq = function(pre) {
15514 var start = this.reader.tell();
15515 var r = "";
15516 // Complement of range
15517 if (this.reader.p(0) == "^") {
15518 r += this.reader.get();
15519 }
15520 // At the start ']' and '-' mean the literal character.
15521 if (this.reader.p(0) == "]" || this.reader.p(0) == "-") {
15522 r += this.reader.get();
15523 }
15524 while (TRUE) {
15525 var startc = 0;
15526 var c = this.reader.p(0);
15527 if (this.isend(c)) {
15528 // If there is no matching ']', we assume the '[' is a normal character.
15529 this.reader.seek_set(start);
15530 return [pre, "["];
15531 }
15532 else if (c == "]") {
15533 this.reader.seek_cur(1);
15534 return [pre + r + "]", "\\[" + r + "]"];
15535 }
15536 else if (c == "[") {
15537 var e = this.get_token_sq_char_class();
15538 if (e == "") {
15539 var e = this.get_token_sq_equi_class();
15540 if (e == "") {
15541 var e = this.get_token_sq_coll_element();
15542 if (e == "") {
15543 var __tmp = this.get_token_sq_c();
15544 var e = __tmp[0];
15545 var startc = __tmp[1];
15546 }
15547 }
15548 }
15549 r += e;
15550 }
15551 else {
15552 var __tmp = this.get_token_sq_c();
15553 var e = __tmp[0];
15554 var startc = __tmp[1];
15555 r += e;
15556 }
15557 if (startc != 0 && this.reader.p(0) == "-" && !this.isend(this.reader.p(1)) && !(this.reader.p(1) == "\\" && this.reader.p(2) == "n")) {
15558 this.reader.seek_cur(1);
15559 r += "-";
15560 var c = this.reader.p(0);
15561 if (c == "[") {
15562 var e = this.get_token_sq_coll_element();
15563 if (e != "") {
15564 var endc = viml_char2nr(e[2]);
15565 }
15566 else {
15567 var __tmp = this.get_token_sq_c();
15568 var e = __tmp[0];
15569 var endc = __tmp[1];
15570 }
15571 r += e;
15572 }
15573 else {
15574 var __tmp = this.get_token_sq_c();
15575 var e = __tmp[0];
15576 var endc = __tmp[1];
15577 r += e;
15578 }
15579 if (startc > endc || endc > startc + 256) {
15580 throw Err("E16: Invalid range", this.reader.getpos());
15581 }
15582 }
15583 }
15584}
15585
15586// [c]
15587RegexpParser.prototype.get_token_sq_c = function() {
15588 var c = this.reader.p(0);
15589 if (c == "\\") {
15590 this.reader.seek_cur(1);
15591 var c = this.reader.p(0);
15592 if (c == "n") {
15593 this.reader.seek_cur(1);
15594 return ["\\n", 0];
15595 }
15596 else if (c == "r") {
15597 this.reader.seek_cur(1);
15598 return ["\\r", 13];
15599 }
15600 else if (c == "t") {
15601 this.reader.seek_cur(1);
15602 return ["\\t", 9];
15603 }
15604 else if (c == "e") {
15605 this.reader.seek_cur(1);
15606 return ["\\e", 27];
15607 }
15608 else if (c == "b") {
15609 this.reader.seek_cur(1);
15610 return ["\\b", 8];
15611 }
15612 else if (viml_stridx("]^-\\", c) != -1) {
15613 this.reader.seek_cur(1);
15614 return ["\\" + c, viml_char2nr(c)];
15615 }
15616 else if (viml_stridx("doxuU", c) != -1) {
15617 var __tmp = this.get_token_sq_coll_char();
15618 var c = __tmp[0];
15619 var n = __tmp[1];
15620 return [c, n];
15621 }
15622 else {
15623 return ["\\", viml_char2nr("\\")];
15624 }
15625 }
15626 else if (c == "-") {
15627 this.reader.seek_cur(1);
15628 return ["-", viml_char2nr("-")];
15629 }
15630 else {
15631 this.reader.seek_cur(1);
15632 return [c, viml_char2nr(c)];
15633 }
15634}
15635
15636// [\d123]
15637RegexpParser.prototype.get_token_sq_coll_char = function() {
15638 var pos = this.reader.tell();
15639 var c = this.reader.get();
15640 if (c == "d") {
15641 var r = this.getdecchrs();
15642 var n = viml_str2nr(r, 10);
15643 }
15644 else if (c == "o") {
15645 var r = this.getoctchrs();
15646 var n = viml_str2nr(r, 8);
15647 }
15648 else if (c == "x") {
15649 var r = this.gethexchrs(2);
15650 var n = viml_str2nr(r, 16);
15651 }
15652 else if (c == "u") {
15653 var r = this.gethexchrs(4);
15654 var n = viml_str2nr(r, 16);
15655 }
15656 else if (c == "U") {
15657 var r = this.gethexchrs(8);
15658 var n = viml_str2nr(r, 16);
15659 }
15660 else {
15661 var r = "";
15662 }
15663 if (r == "") {
15664 this.reader.seek_set(pos);
15665 return "\\";
15666 }
15667 return ["\\" + c + r, n];
15668}
15669
15670// [[.a.]]
15671RegexpParser.prototype.get_token_sq_coll_element = function() {
15672 if (this.reader.p(0) == "[" && this.reader.p(1) == "." && !this.isend(this.reader.p(2)) && this.reader.p(3) == "." && this.reader.p(4) == "]") {
15673 return this.reader.getn(5);
15674 }
15675 return "";
15676}
15677
15678// [[=a=]]
15679RegexpParser.prototype.get_token_sq_equi_class = function() {
15680 if (this.reader.p(0) == "[" && this.reader.p(1) == "=" && !this.isend(this.reader.p(2)) && this.reader.p(3) == "=" && this.reader.p(4) == "]") {
15681 return this.reader.getn(5);
15682 }
15683 return "";
15684}
15685
15686// [[:alpha:]]
15687RegexpParser.prototype.get_token_sq_char_class = function() {
15688 var class_names = ["alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "tab", "return", "backspace", "escape"];
15689 var pos = this.reader.tell();
15690 if (this.reader.p(0) == "[" && this.reader.p(1) == ":") {
15691 this.reader.seek_cur(2);
15692 var r = this.reader.read_alpha();
15693 if (this.reader.p(0) == ":" && this.reader.p(1) == "]") {
15694 this.reader.seek_cur(2);
15695 var __c15 = class_names;
15696 for (var __i15 = 0; __i15 < __c15.length; ++__i15) {
15697 var name = __c15[__i15];
15698 if (r == name) {
15699 return "[:" + name + ":]";
15700 }
15701 }
15702 }
15703 }
15704 this.reader.seek_set(pos);
15705 return "";
15706}
15707
15708// \@...
15709RegexpParser.prototype.get_token_at = function(pre) {
15710 var epos = this.reader.getpos();
15711 var c = this.reader.get();
15712 if (c == ">") {
15713 return [pre + ">", "\\@>"];
15714 }
15715 else if (c == "=") {
15716 return [pre + "=", "\\@="];
15717 }
15718 else if (c == "!") {
15719 return [pre + "!", "\\@!"];
15720 }
15721 else if (c == "<") {
15722 var c = this.reader.get();
15723 if (c == "=") {
15724 return [pre + "<=", "\\@<="];
15725 }
15726 else if (c == "!") {
15727 return [pre + "<!", "\\@<!"];
15728 }
15729 }
15730 throw Err("E64: @ follows nothing", epos);
15731}
15732
15733// \%...
15734RegexpParser.prototype.get_token_percent = function(pre) {
15735 var c = this.reader.get();
15736 if (c == "^") {
15737 return [pre + "^", "\\%^"];
15738 }
15739 else if (c == "$") {
15740 return [pre + "$", "\\%$"];
15741 }
15742 else if (c == "V") {
15743 return [pre + "V", "\\%V"];
15744 }
15745 else if (c == "#") {
15746 return [pre + "#", "\\%#"];
15747 }
15748 else if (c == "[") {
15749 return this.get_token_percent_sq(pre + "[");
15750 }
15751 else if (c == "(") {
15752 return [pre + "(", "\\%("];
15753 }
15754 else {
15755 return this.get_token_mlcv(pre);
15756 }
15757}
15758
15759// \%[]
15760RegexpParser.prototype.get_token_percent_sq = function(pre) {
15761 var r = "";
15762 while (TRUE) {
15763 var c = this.reader.peek();
15764 if (this.isend(c)) {
15765 throw Err("E69: Missing ] after \\%[", this.reader.getpos());
15766 }
15767 else if (c == "]") {
15768 if (r == "") {
15769 throw Err("E70: Empty \\%[", this.reader.getpos());
15770 }
15771 this.reader.seek_cur(1);
15772 break;
15773 }
15774 this.reader.seek_cur(1);
15775 r += c;
15776 }
15777 return [pre + r + "]", "\\%[" + r + "]"];
15778}
15779
15780// \%'m \%l \%c \%v
15781RegexpParser.prototype.get_token_mlvc = function(pre) {
15782 var r = "";
15783 var cmp = "";
15784 if (this.reader.p(0) == "<" || this.reader.p(0) == ">") {
15785 var cmp = this.reader.get();
15786 r += cmp;
15787 }
15788 if (this.reader.p(0) == "'") {
15789 r += this.reader.get();
15790 var c = this.reader.p(0);
15791 if (this.isend(c)) {
15792 // FIXME: Should be error? Vim allow this.
15793 var c = "";
15794 }
15795 else {
15796 var c = this.reader.get();
15797 }
15798 return [pre + r + c, "\\%" + cmp + "'" + c];
15799 }
15800 else if (isdigit(this.reader.p(0))) {
15801 var d = this.reader.read_digit();
15802 r += d;
15803 var c = this.reader.p(0);
15804 if (c == "l") {
15805 this.reader.get();
15806 return [pre + r + "l", "\\%" + cmp + d + "l"];
15807 }
15808 else if (c == "c") {
15809 this.reader.get();
15810 return [pre + r + "c", "\\%" + cmp + d + "c"];
15811 }
15812 else if (c == "v") {
15813 this.reader.get();
15814 return [pre + r + "v", "\\%" + cmp + d + "v"];
15815 }
15816 }
15817 throw Err("E71: Invalid character after %", this.reader.getpos());
15818}
15819
15820RegexpParser.prototype.getdecchrs = function() {
15821 return this.reader.read_digit();
15822}
15823
15824RegexpParser.prototype.getoctchrs = function() {
15825 return this.reader.read_odigit();
15826}
15827
15828RegexpParser.prototype.gethexchrs = function(n) {
15829 var r = "";
15830 var __c16 = viml_range(n);
15831 for (var __i16 = 0; __i16 < __c16.length; ++__i16) {
15832 var i = __c16[__i16];
15833 var c = this.reader.peek();
15834 if (!isxdigit(c)) {
15835 break;
15836 }
15837 r += this.reader.get();
15838 }
15839 return r;
15840}
15841
15842if (__webpack_require__.c[__webpack_require__.s] === module) {
15843 main();
15844}
15845else {
15846 module.exports = {
15847 VimLParser: VimLParser,
15848 StringReader: StringReader,
15849 Compiler: Compiler
15850 };
15851}
15852
15853
15854/***/ }),
15855/* 72 */
15856/***/ ((__unused_webpack_module, exports) => {
15857
15858"use strict";
15859
15860Object.defineProperty(exports, "__esModule", ({ value: true }));
15861exports.notIdentifierPattern = exports.expandPattern = exports.featurePattern = exports.commandPattern = exports.notFunctionPattern = exports.optionPattern = exports.builtinVariablePattern = exports.autocmdPattern = exports.highlightValuePattern = exports.highlightPattern = exports.highlightLinkPattern = exports.mapCommandPattern = exports.colorschemePattern = exports.wordNextPattern = exports.wordPrePattern = exports.builtinFunctionPattern = exports.keywordPattern = exports.commentPattern = exports.errorLinePattern = void 0;
15862exports.errorLinePattern = /[^:]+:\s*(.+?):\s*line\s*([0-9]+)\s*col\s*([0-9]+)/;
15863exports.commentPattern = /^[ \t]*("|')/;
15864exports.keywordPattern = /[\w#&$<>.:]/;
15865exports.builtinFunctionPattern = /^((<SID>|\b(v|g|b|s|l|a):)?[\w#&]+)[ \t]*\([^)]*\)/;
15866exports.wordPrePattern = /^.*?(((<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+)|(<SID>|<SID|<SI|<S|<|\b(v|g|b|s|l|a):))$/;
15867exports.wordNextPattern = /^((SID>|ID>|D>|>|<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+|(:[\w#&$.]+)).*?(\r\n|\r|\n)?$/;
15868exports.colorschemePattern = /\bcolorscheme[ \t]+\w*$/;
15869exports.mapCommandPattern = /^([ \t]*(\[ \t]*)?)\w*map[ \t]+/;
15870exports.highlightLinkPattern = /^[ \t]*(hi|highlight)[ \t]+link([ \t]+[^ \t]+)*[ \t]*$/;
15871exports.highlightPattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]*$/;
15872exports.highlightValuePattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]+([^ \t=]+)=[^ \t=]*$/;
15873exports.autocmdPattern = /^[ \t]*(au|autocmd)!?[ \t]+([^ \t,]+,)*[^ \t,]*$/;
15874exports.builtinVariablePattern = [
15875 /\bv:\w*$/,
15876];
15877exports.optionPattern = [
15878 /(^|[ \t]+)&\w*$/,
15879 /(^|[ \t]+)set(l|local|g|global)?[ \t]+\w+$/,
15880];
15881exports.notFunctionPattern = [
15882 /^[ \t]*\\$/,
15883 /^[ \t]*\w+$/,
15884 /^[ \t]*"/,
15885 /(let|set|colorscheme)[ \t][^ \t]*$/,
15886 /[^([,\\ \t\w#>]\w*$/,
15887 /^[ \t]*(hi|highlight)([ \t]+link)?([ \t]+[^ \t]+)*[ \t]*$/,
15888 exports.autocmdPattern,
15889];
15890exports.commandPattern = [
15891 /(^|[ \t]):\w+$/,
15892 /^[ \t]*\w+$/,
15893 /:?silent!?[ \t]\w+/,
15894];
15895exports.featurePattern = [
15896 /\bhas\([ \t]*["']\w*/,
15897];
15898exports.expandPattern = [
15899 /\bexpand\(['"]<\w*$/,
15900 /\bexpand\([ \t]*['"]\w*$/,
15901];
15902exports.notIdentifierPattern = [
15903 exports.commentPattern,
15904 /("|'):\w*$/,
15905 /^[ \t]*\\$/,
15906 /^[ \t]*call[ \t]+[^ \t()]*$/,
15907 /('|"|#|&|\$|<)\w*$/,
15908];
15909
15910
15911/***/ }),
15912/* 73 */
15913/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
15914
15915"use strict";
15916
15917Object.defineProperty(exports, "__esModule", ({ value: true }));
15918var constant_1 = __webpack_require__(64);
15919var conf;
15920exports.default = {
15921 init: function (config) {
15922 conf = config;
15923 },
15924 changeByKey: function (key, value) {
15925 if (conf) {
15926 conf[key] = value;
15927 }
15928 },
15929 get isNeovim() {
15930 return conf && conf.isNeovim || false;
15931 },
15932 get iskeyword() {
15933 return conf && conf.iskeyword || "";
15934 },
15935 get vimruntime() {
15936 return conf && conf.vimruntime || "";
15937 },
15938 get runtimepath() {
15939 return conf && conf.runtimepath || [];
15940 },
15941 get diagnostic() {
15942 return conf && conf.diagnostic || {
15943 enable: true,
15944 };
15945 },
15946 get snippetSupport() {
15947 return conf && conf.snippetSupport || false;
15948 },
15949 get suggest() {
15950 return conf && conf.suggest || {
15951 fromRuntimepath: false,
15952 fromVimruntime: true,
15953 };
15954 },
15955 get indexes() {
15956 var defaults = {
15957 runtimepath: true,
15958 gap: 100,
15959 count: 1,
15960 projectRootPatterns: constant_1.projectRootPatterns,
15961 };
15962 if (!conf || !conf.indexes) {
15963 return defaults;
15964 }
15965 if (conf.indexes.gap !== undefined) {
15966 defaults.gap = conf.indexes.gap;
15967 }
15968 if (conf.indexes.count !== undefined) {
15969 defaults.count = conf.indexes.count;
15970 }
15971 if (conf.indexes.projectRootPatterns !== undefined
15972 && Array.isArray(conf.indexes.projectRootPatterns)
15973 && conf.indexes.projectRootPatterns.length) {
15974 defaults.projectRootPatterns = conf.indexes.projectRootPatterns;
15975 }
15976 return defaults;
15977 },
15978 get capabilities() {
15979 return conf && conf.capabilities;
15980 }
15981};
15982
15983
15984/***/ }),
15985/* 74 */
15986/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
15987
15988"use strict";
15989
15990Object.defineProperty(exports, "__esModule", ({ value: true }));
15991exports.documents = void 0;
15992var vscode_languageserver_1 = __webpack_require__(2);
15993var vscode_languageserver_textdocument_1 = __webpack_require__(75);
15994// text document manager
15995exports.documents = new vscode_languageserver_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
15996
15997
15998/***/ }),
15999/* 75 */
16000/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
16001
16002"use strict";
16003__webpack_require__.r(__webpack_exports__);
16004/* harmony export */ __webpack_require__.d(__webpack_exports__, {
16005/* harmony export */ "TextDocument": () => (/* binding */ TextDocument)
16006/* harmony export */ });
16007/* --------------------------------------------------------------------------------------------
16008 * Copyright (c) Microsoft Corporation. All rights reserved.
16009 * Licensed under the MIT License. See License.txt in the project root for license information.
16010 * ------------------------------------------------------------------------------------------ */
16011
16012var FullTextDocument = /** @class */ (function () {
16013 function FullTextDocument(uri, languageId, version, content) {
16014 this._uri = uri;
16015 this._languageId = languageId;
16016 this._version = version;
16017 this._content = content;
16018 this._lineOffsets = undefined;
16019 }
16020 Object.defineProperty(FullTextDocument.prototype, "uri", {
16021 get: function () {
16022 return this._uri;
16023 },
16024 enumerable: true,
16025 configurable: true
16026 });
16027 Object.defineProperty(FullTextDocument.prototype, "languageId", {
16028 get: function () {
16029 return this._languageId;
16030 },
16031 enumerable: true,
16032 configurable: true
16033 });
16034 Object.defineProperty(FullTextDocument.prototype, "version", {
16035 get: function () {
16036 return this._version;
16037 },
16038 enumerable: true,
16039 configurable: true
16040 });
16041 FullTextDocument.prototype.getText = function (range) {
16042 if (range) {
16043 var start = this.offsetAt(range.start);
16044 var end = this.offsetAt(range.end);
16045 return this._content.substring(start, end);
16046 }
16047 return this._content;
16048 };
16049 FullTextDocument.prototype.update = function (changes, version) {
16050 for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
16051 var change = changes_1[_i];
16052 if (FullTextDocument.isIncremental(change)) {
16053 // makes sure start is before end
16054 var range = getWellformedRange(change.range);
16055 // update content
16056 var startOffset = this.offsetAt(range.start);
16057 var endOffset = this.offsetAt(range.end);
16058 this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
16059 // update the offsets
16060 var startLine = Math.max(range.start.line, 0);
16061 var endLine = Math.max(range.end.line, 0);
16062 var lineOffsets = this._lineOffsets;
16063 var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
16064 if (endLine - startLine === addedLineOffsets.length) {
16065 for (var i = 0, len = addedLineOffsets.length; i < len; i++) {
16066 lineOffsets[i + startLine + 1] = addedLineOffsets[i];
16067 }
16068 }
16069 else {
16070 if (addedLineOffsets.length < 10000) {
16071 lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));
16072 }
16073 else { // avoid too many arguments for splice
16074 this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
16075 }
16076 }
16077 var diff = change.text.length - (endOffset - startOffset);
16078 if (diff !== 0) {
16079 for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {
16080 lineOffsets[i] = lineOffsets[i] + diff;
16081 }
16082 }
16083 }
16084 else if (FullTextDocument.isFull(change)) {
16085 this._content = change.text;
16086 this._lineOffsets = undefined;
16087 }
16088 else {
16089 throw new Error('Unknown change event received');
16090 }
16091 }
16092 this._version = version;
16093 };
16094 FullTextDocument.prototype.getLineOffsets = function () {
16095 if (this._lineOffsets === undefined) {
16096 this._lineOffsets = computeLineOffsets(this._content, true);
16097 }
16098 return this._lineOffsets;
16099 };
16100 FullTextDocument.prototype.positionAt = function (offset) {
16101 offset = Math.max(Math.min(offset, this._content.length), 0);
16102 var lineOffsets = this.getLineOffsets();
16103 var low = 0, high = lineOffsets.length;
16104 if (high === 0) {
16105 return { line: 0, character: offset };
16106 }
16107 while (low < high) {
16108 var mid = Math.floor((low + high) / 2);
16109 if (lineOffsets[mid] > offset) {
16110 high = mid;
16111 }
16112 else {
16113 low = mid + 1;
16114 }
16115 }
16116 // low is the least x for which the line offset is larger than the current offset
16117 // or array.length if no line offset is larger than the current offset
16118 var line = low - 1;
16119 return { line: line, character: offset - lineOffsets[line] };
16120 };
16121 FullTextDocument.prototype.offsetAt = function (position) {
16122 var lineOffsets = this.getLineOffsets();
16123 if (position.line >= lineOffsets.length) {
16124 return this._content.length;
16125 }
16126 else if (position.line < 0) {
16127 return 0;
16128 }
16129 var lineOffset = lineOffsets[position.line];
16130 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
16131 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
16132 };
16133 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
16134 get: function () {
16135 return this.getLineOffsets().length;
16136 },
16137 enumerable: true,
16138 configurable: true
16139 });
16140 FullTextDocument.isIncremental = function (event) {
16141 var candidate = event;
16142 return candidate !== undefined && candidate !== null &&
16143 typeof candidate.text === 'string' && candidate.range !== undefined &&
16144 (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
16145 };
16146 FullTextDocument.isFull = function (event) {
16147 var candidate = event;
16148 return candidate !== undefined && candidate !== null &&
16149 typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
16150 };
16151 return FullTextDocument;
16152}());
16153var TextDocument;
16154(function (TextDocument) {
16155 /**
16156 * Creates a new text document.
16157 *
16158 * @param uri The document's uri.
16159 * @param languageId The document's language Id.
16160 * @param version The document's initial version number.
16161 * @param content The document's content.
16162 */
16163 function create(uri, languageId, version, content) {
16164 return new FullTextDocument(uri, languageId, version, content);
16165 }
16166 TextDocument.create = create;
16167 /**
16168 * Updates a TextDocument by modifing its content.
16169 *
16170 * @param document the document to update. Only documents created by TextDocument.create are valid inputs.
16171 * @param changes the changes to apply to the document.
16172 * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
16173 *
16174 */
16175 function update(document, changes, version) {
16176 if (document instanceof FullTextDocument) {
16177 document.update(changes, version);
16178 return document;
16179 }
16180 else {
16181 throw new Error('TextDocument.update: document must be created by TextDocument.create');
16182 }
16183 }
16184 TextDocument.update = update;
16185 function applyEdits(document, edits) {
16186 var text = document.getText();
16187 var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {
16188 var diff = a.range.start.line - b.range.start.line;
16189 if (diff === 0) {
16190 return a.range.start.character - b.range.start.character;
16191 }
16192 return diff;
16193 });
16194 var lastModifiedOffset = 0;
16195 var spans = [];
16196 for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {
16197 var e = sortedEdits_1[_i];
16198 var startOffset = document.offsetAt(e.range.start);
16199 if (startOffset < lastModifiedOffset) {
16200 throw new Error('Overlapping edit');
16201 }
16202 else if (startOffset > lastModifiedOffset) {
16203 spans.push(text.substring(lastModifiedOffset, startOffset));
16204 }
16205 if (e.newText.length) {
16206 spans.push(e.newText);
16207 }
16208 lastModifiedOffset = document.offsetAt(e.range.end);
16209 }
16210 spans.push(text.substr(lastModifiedOffset));
16211 return spans.join('');
16212 }
16213 TextDocument.applyEdits = applyEdits;
16214})(TextDocument || (TextDocument = {}));
16215function mergeSort(data, compare) {
16216 if (data.length <= 1) {
16217 // sorted
16218 return data;
16219 }
16220 var p = (data.length / 2) | 0;
16221 var left = data.slice(0, p);
16222 var right = data.slice(p);
16223 mergeSort(left, compare);
16224 mergeSort(right, compare);
16225 var leftIdx = 0;
16226 var rightIdx = 0;
16227 var i = 0;
16228 while (leftIdx < left.length && rightIdx < right.length) {
16229 var ret = compare(left[leftIdx], right[rightIdx]);
16230 if (ret <= 0) {
16231 // smaller_equal -> take left to preserve order
16232 data[i++] = left[leftIdx++];
16233 }
16234 else {
16235 // greater -> take right
16236 data[i++] = right[rightIdx++];
16237 }
16238 }
16239 while (leftIdx < left.length) {
16240 data[i++] = left[leftIdx++];
16241 }
16242 while (rightIdx < right.length) {
16243 data[i++] = right[rightIdx++];
16244 }
16245 return data;
16246}
16247function computeLineOffsets(text, isAtLineStart, textOffset) {
16248 if (textOffset === void 0) { textOffset = 0; }
16249 var result = isAtLineStart ? [textOffset] : [];
16250 for (var i = 0; i < text.length; i++) {
16251 var ch = text.charCodeAt(i);
16252 if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {
16253 if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {
16254 i++;
16255 }
16256 result.push(textOffset + i + 1);
16257 }
16258 }
16259 return result;
16260}
16261function getWellformedRange(range) {
16262 var start = range.start;
16263 var end = range.end;
16264 if (start.line > end.line || (start.line === end.line && start.character > end.character)) {
16265 return { start: end, end: start };
16266 }
16267 return range;
16268}
16269function getWellformedEdit(textEdit) {
16270 var range = getWellformedRange(textEdit.range);
16271 if (range !== textEdit.range) {
16272 return { newText: textEdit.newText, range: range };
16273 }
16274 return textEdit;
16275}
16276
16277
16278/***/ }),
16279/* 76 */
16280/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16281
16282"use strict";
16283
16284Object.defineProperty(exports, "__esModule", ({ value: true }));
16285var patterns_1 = __webpack_require__(72);
16286var builtin_1 = __webpack_require__(77);
16287var provider_1 = __webpack_require__(159);
16288function provider(line) {
16289 if (patterns_1.autocmdPattern.test(line)) {
16290 return builtin_1.builtinDocs.getVimAutocmds().filter(function (item) {
16291 return line.indexOf(item.label) === -1;
16292 });
16293 }
16294 return [];
16295}
16296provider_1.useProvider(provider);
16297
16298
16299/***/ }),
16300/* 77 */
16301/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
16302
16303"use strict";
16304
16305var __assign = (this && this.__assign) || function () {
16306 __assign = Object.assign || function(t) {
16307 for (var s, i = 1, n = arguments.length; i < n; i++) {
16308 s = arguments[i];
16309 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
16310 t[p] = s[p];
16311 }
16312 return t;
16313 };
16314 return __assign.apply(this, arguments);
16315};
16316var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
16317 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16318 return new (P || (P = Promise))(function (resolve, reject) {
16319 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
16320 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16321 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
16322 step((generator = generator.apply(thisArg, _arguments || [])).next());
16323 });
16324};
16325var __generator = (this && this.__generator) || function (thisArg, body) {
16326 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
16327 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
16328 function verb(n) { return function (v) { return step([n, v]); }; }
16329 function step(op) {
16330 if (f) throw new TypeError("Generator is already executing.");
16331 while (_) try {
16332 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
16333 if (y = 0, t) op = [op[0] & 2, t.value];
16334 switch (op[0]) {
16335 case 0: case 1: t = op; break;
16336 case 4: _.label++; return { value: op[1], done: false };
16337 case 5: _.label++; y = op[1]; op = [0]; continue;
16338 case 7: op = _.ops.pop(); _.trys.pop(); continue;
16339 default:
16340 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
16341 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
16342 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
16343 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
16344 if (t[2]) _.ops.pop();
16345 _.trys.pop(); continue;
16346 }
16347 op = body.call(thisArg, _);
16348 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
16349 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
16350 }
16351};
16352var __spreadArray = (this && this.__spreadArray) || function (to, from) {
16353 for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)
16354 to[j] = from[i];
16355 return to;
16356};
16357var __importDefault = (this && this.__importDefault) || function (mod) {
16358 return (mod && mod.__esModule) ? mod : { "default": mod };
16359};
16360Object.defineProperty(exports, "__esModule", ({ value: true }));
16361exports.builtinDocs = void 0;
16362/*
16363 * vim builtin completion items
16364 *
16365 * 1. functions
16366 * 2. options
16367 * 3. variables
16368 * 4. commands
16369 * 5. has features
16370 * 6. expand Keyword
16371 * 7. map args
16372 */
16373var fast_glob_1 = __importDefault(__webpack_require__(78));
16374var path_1 = __importDefault(__webpack_require__(23));
16375var vscode_languageserver_1 = __webpack_require__(2);
16376var logger_1 = __importDefault(__webpack_require__(155));
16377var patterns_1 = __webpack_require__(72);
16378var util_1 = __webpack_require__(66);
16379var builtin_docs_json_1 = __importDefault(__webpack_require__(158));
16380var config_1 = __importDefault(__webpack_require__(73));
16381var log = logger_1.default("builtin");
16382var Builtin = /** @class */ (function () {
16383 function Builtin() {
16384 // completion items
16385 this.vimPredefinedVariablesItems = [];
16386 this.vimOptionItems = [];
16387 this.vimBuiltinFunctionItems = [];
16388 this.vimBuiltinFunctionMap = {};
16389 this.vimCommandItems = [];
16390 this.vimMapArgsItems = [];
16391 this.vimFeatureItems = [];
16392 this.vimAutocmdItems = [];
16393 this.expandKeywordItems = [];
16394 this.colorschemeItems = [];
16395 this.highlightArgKeys = [];
16396 this.highlightArgValues = {};
16397 // signature help
16398 this.vimBuiltFunctionSignatureHelp = {};
16399 // documents
16400 this.vimBuiltFunctionDocuments = {};
16401 this.vimOptionDocuments = {};
16402 this.vimPredefinedVariableDocuments = {};
16403 this.vimCommandDocuments = {};
16404 this.vimFeatureDocuments = {};
16405 this.expandKeywordDocuments = {};
16406 }
16407 Builtin.prototype.init = function () {
16408 this.start();
16409 };
16410 Builtin.prototype.getPredefinedVimVariables = function () {
16411 return this.vimPredefinedVariablesItems;
16412 };
16413 Builtin.prototype.getVimOptions = function () {
16414 return this.vimOptionItems;
16415 };
16416 Builtin.prototype.getBuiltinVimFunctions = function () {
16417 return this.vimBuiltinFunctionItems;
16418 };
16419 Builtin.prototype.isBuiltinFunction = function (label) {
16420 return this.vimBuiltinFunctionMap[label];
16421 };
16422 Builtin.prototype.getExpandKeywords = function () {
16423 return this.expandKeywordItems;
16424 };
16425 Builtin.prototype.getVimCommands = function () {
16426 return this.vimCommandItems;
16427 };
16428 Builtin.prototype.getVimMapArgs = function () {
16429 return this.vimMapArgsItems;
16430 };
16431 Builtin.prototype.getVimFeatures = function () {
16432 return this.vimFeatureItems;
16433 };
16434 Builtin.prototype.getVimAutocmds = function () {
16435 return this.vimAutocmdItems;
16436 };
16437 Builtin.prototype.getColorschemes = function () {
16438 return this.colorschemeItems;
16439 };
16440 Builtin.prototype.getHighlightArgKeys = function () {
16441 return this.highlightArgKeys;
16442 };
16443 Builtin.prototype.getHighlightArgValues = function () {
16444 return this.highlightArgValues;
16445 };
16446 Builtin.prototype.getSignatureHelpByName = function (name, idx) {
16447 var params = this.vimBuiltFunctionSignatureHelp[name];
16448 if (params) {
16449 return {
16450 signatures: [{
16451 label: name + "(" + params[0] + ")" + (params[1] ? ": " + params[1] : ""),
16452 documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
16453 parameters: params[0].split("[")[0].split(",").map(function (param) {
16454 return {
16455 label: param.trim(),
16456 };
16457 }),
16458 }],
16459 activeSignature: 0,
16460 activeParameter: idx,
16461 };
16462 }
16463 return;
16464 };
16465 Builtin.prototype.getDocumentByCompletionItem = function (params) {
16466 var kind = params.kind;
16467 switch (kind) {
16468 case vscode_languageserver_1.CompletionItemKind.Variable:
16469 if (!this.vimPredefinedVariableDocuments[params.label]) {
16470 return params;
16471 }
16472 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimPredefinedVariableDocuments[params.label]) });
16473 case vscode_languageserver_1.CompletionItemKind.Property:
16474 if (!this.vimOptionDocuments[params.label]) {
16475 return params;
16476 }
16477 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimOptionDocuments[params.label]) });
16478 case vscode_languageserver_1.CompletionItemKind.Function:
16479 if (!this.vimBuiltFunctionDocuments[params.label]) {
16480 return params;
16481 }
16482 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[params.label]) });
16483 case vscode_languageserver_1.CompletionItemKind.EnumMember:
16484 if (!this.vimFeatureDocuments[params.label]) {
16485 return params;
16486 }
16487 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimFeatureDocuments[params.label]) });
16488 case vscode_languageserver_1.CompletionItemKind.Operator:
16489 if (!this.vimCommandDocuments[params.label]) {
16490 return params;
16491 }
16492 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimCommandDocuments[params.label]) });
16493 default:
16494 return params;
16495 }
16496 };
16497 Builtin.prototype.getHoverDocument = function (name, pre, next) {
16498 // builtin variables
16499 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, pre) && this.vimPredefinedVariableDocuments[name]) {
16500 return {
16501 contents: this.formatVimDocument(this.vimPredefinedVariableDocuments[name]),
16502 };
16503 // options
16504 }
16505 else if (util_1.isSomeMatchPattern(patterns_1.optionPattern, pre)
16506 && (this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)])) {
16507 return {
16508 contents: this.formatVimDocument(this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)]),
16509 };
16510 // builtin functions
16511 }
16512 else if (patterns_1.builtinFunctionPattern.test(next) && this.vimBuiltFunctionDocuments[name]) {
16513 return {
16514 contents: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
16515 };
16516 // has features
16517 }
16518 else if (util_1.isSomeMatchPattern(patterns_1.featurePattern, pre) && this.vimFeatureDocuments[name]) {
16519 return {
16520 contents: this.formatVimDocument(this.vimFeatureDocuments[name]),
16521 };
16522 // expand Keywords
16523 }
16524 else if (util_1.isSomeMatchPattern(patterns_1.expandPattern, pre) && this.expandKeywordDocuments["<" + name + ">"]) {
16525 return {
16526 contents: this.formatVimDocument(this.expandKeywordDocuments["<" + name + ">"]),
16527 };
16528 // command
16529 }
16530 else if (util_1.isSomeMatchPattern(patterns_1.commandPattern, pre) && this.vimCommandDocuments[name]) {
16531 return {
16532 contents: this.formatVimDocument(this.vimCommandDocuments[name]),
16533 };
16534 }
16535 };
16536 Builtin.prototype.start = function () {
16537 return __awaiter(this, void 0, void 0, function () {
16538 var runtimepath, data;
16539 var _this = this;
16540 return __generator(this, function (_a) {
16541 runtimepath = config_1.default.runtimepath;
16542 // get colorschemes
16543 if (runtimepath) {
16544 this.resolveColorschemes(runtimepath);
16545 }
16546 // get map args
16547 this.resolveMapArgs();
16548 // get highlight arg keys
16549 this.resolveHighlightArgKeys();
16550 // get highlight arg values
16551 this.resolveHighlightArgValues();
16552 try {
16553 data = builtin_docs_json_1.default;
16554 this.vimBuiltinFunctionItems = data.completionItems.functions;
16555 this.vimBuiltinFunctionItems.forEach(function (item) {
16556 if (!_this.vimBuiltinFunctionMap[item.label]) {
16557 _this.vimBuiltinFunctionMap[item.label] = true;
16558 }
16559 });
16560 this.vimBuiltFunctionDocuments = data.documents.functions;
16561 this.vimCommandItems = data.completionItems.commands;
16562 this.vimCommandDocuments = data.documents.commands;
16563 this.vimPredefinedVariablesItems = data.completionItems.variables;
16564 this.vimPredefinedVariableDocuments = data.documents.variables;
16565 this.vimOptionItems = data.completionItems.options;
16566 this.vimOptionDocuments = data.documents.options;
16567 this.vimFeatureItems = data.completionItems.features;
16568 this.vimAutocmdItems = data.completionItems.autocmds;
16569 this.vimFeatureDocuments = data.documents.features;
16570 this.expandKeywordItems = data.completionItems.expandKeywords;
16571 this.expandKeywordDocuments = data.documents.expandKeywords;
16572 this.vimBuiltFunctionSignatureHelp = data.signatureHelp;
16573 }
16574 catch (error) {
16575 log.error("[vimls]: parse docs/builtin-doc.json fail => " + (error.message || error));
16576 }
16577 return [2 /*return*/];
16578 });
16579 });
16580 };
16581 // format vim document to markdown
16582 Builtin.prototype.formatVimDocument = function (document) {
16583 var indent = 0;
16584 return {
16585 kind: vscode_languageserver_1.MarkupKind.Markdown,
16586 value: __spreadArray(__spreadArray([
16587 "```help"
16588 ], document.map(function (line) {
16589 if (indent === 0) {
16590 var m = line.match(/^([ \t]+)/);
16591 if (m) {
16592 indent = m[1].length;
16593 }
16594 }
16595 return line.replace(new RegExp("^[ \\t]{" + indent + "}", "g"), "").replace(/\t/g, " ");
16596 })), [
16597 "```",
16598 ]).join("\n"),
16599 };
16600 };
16601 Builtin.prototype.resolveMapArgs = function () {
16602 this.vimMapArgsItems = ["<buffer>", "<nowait>", "<silent>", "<script>", "<expr>", "<unique>"]
16603 .map(function (item) {
16604 return {
16605 label: item,
16606 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
16607 documentation: "",
16608 insertText: item,
16609 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
16610 };
16611 });
16612 };
16613 Builtin.prototype.resolveColorschemes = function (runtimepath) {
16614 return __awaiter(this, void 0, void 0, function () {
16615 var list, glob, colorschemes, error_1;
16616 return __generator(this, function (_a) {
16617 switch (_a.label) {
16618 case 0:
16619 list = runtimepath;
16620 if (config_1.default.vimruntime) {
16621 list.push(config_1.default.vimruntime);
16622 }
16623 glob = runtimepath.map(function (p) { return path_1.default.join(p.trim(), "colors/*.vim"); });
16624 colorschemes = [];
16625 _a.label = 1;
16626 case 1:
16627 _a.trys.push([1, 3, , 4]);
16628 return [4 /*yield*/, fast_glob_1.default(glob, { onlyFiles: false, deep: 0 })];
16629 case 2:
16630 colorschemes = _a.sent();
16631 return [3 /*break*/, 4];
16632 case 3:
16633 error_1 = _a.sent();
16634 log.warn([
16635 "Index Colorschemes Error: " + JSON.stringify(glob),
16636 "Error => " + (error_1.stack || error_1.message || error_1),
16637 ].join("\n"));
16638 return [3 /*break*/, 4];
16639 case 4:
16640 this.colorschemeItems = colorschemes.map(function (p) {
16641 var label = path_1.default.basename(p, ".vim");
16642 var item = {
16643 label: label,
16644 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
16645 insertText: label,
16646 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
16647 };
16648 return item;
16649 });
16650 return [2 /*return*/];
16651 }
16652 });
16653 });
16654 };
16655 Builtin.prototype.resolveHighlightArgKeys = function () {
16656 this.highlightArgKeys = [
16657 "cterm",
16658 "start",
16659 "stop",
16660 "ctermfg",
16661 "ctermbg",
16662 "gui",
16663 "font",
16664 "guifg",
16665 "guibg",
16666 "guisp",
16667 "blend",
16668 ]
16669 .map(function (item) {
16670 return {
16671 label: item,
16672 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
16673 documentation: "",
16674 insertText: item + "=${0}",
16675 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
16676 };
16677 });
16678 };
16679 Builtin.prototype.resolveHighlightArgValues = function () {
16680 var values = {
16681 "cterm": ["bold", "underline", "undercurl", "reverse", "inverse", "italic", "standout", "NONE"],
16682 "ctermfg ctermbg": [
16683 "Black",
16684 "DarkBlue",
16685 "DarkGreen",
16686 "DarkCyan",
16687 "DarkRed",
16688 "DarkMagenta",
16689 "Brown", "DarkYellow",
16690 "LightGray", "LightGrey", "Gray", "Grey",
16691 "DarkGray", "DarkGrey",
16692 "Blue", "LightBlue",
16693 "Green", "LightGreen",
16694 "Cyan", "LightCyan",
16695 "Red", "LightRed",
16696 "Magenta", "LightMagenta",
16697 "Yellow", "LightYellow",
16698 "White",
16699 ],
16700 "guifg guibg guisp": [
16701 "NONE",
16702 "bg",
16703 "background",
16704 "fg",
16705 "foreground",
16706 "Red", "LightRed", "DarkRed",
16707 "Green", "LightGreen", "DarkGreen", "SeaGreen",
16708 "Blue", "LightBlue", "DarkBlue", "SlateBlue",
16709 "Cyan", "LightCyan", "DarkCyan",
16710 "Magenta", "LightMagenta", "DarkMagenta",
16711 "Yellow", "LightYellow", "Brown", "DarkYellow",
16712 "Gray", "LightGray", "DarkGray",
16713 "Black", "White",
16714 "Orange", "Purple", "Violet",
16715 ],
16716 };
16717 var argValues = {};
16718 Object.keys(values).forEach(function (key) {
16719 var items = values[key].map(function (val) { return ({
16720 label: val,
16721 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
16722 documentation: "",
16723 insertText: val,
16724 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
16725 }); });
16726 key.split(" ").forEach(function (name) {
16727 argValues[name] = items;
16728 });
16729 });
16730 this.highlightArgValues = argValues;
16731 };
16732 return Builtin;
16733}());
16734exports.builtinDocs = new Builtin();
16735
16736
16737/***/ }),
16738/* 78 */
16739/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
16740
16741"use strict";
16742
16743const taskManager = __webpack_require__(79);
16744const async_1 = __webpack_require__(116);
16745const stream_1 = __webpack_require__(151);
16746const sync_1 = __webpack_require__(152);
16747const settings_1 = __webpack_require__(154);
16748const utils = __webpack_require__(80);
16749async function FastGlob(source, options) {
16750 assertPatternsInput(source);
16751 const works = getWorks(source, async_1.default, options);
16752 const result = await Promise.all(works);
16753 return utils.array.flatten(result);
16754}
16755// https://github.com/typescript-eslint/typescript-eslint/issues/60
16756// eslint-disable-next-line no-redeclare
16757(function (FastGlob) {
16758 function sync(source, options) {
16759 assertPatternsInput(source);
16760 const works = getWorks(source, sync_1.default, options);
16761 return utils.array.flatten(works);
16762 }
16763 FastGlob.sync = sync;
16764 function stream(source, options) {
16765 assertPatternsInput(source);
16766 const works = getWorks(source, stream_1.default, options);
16767 /**
16768 * The stream returned by the provider cannot work with an asynchronous iterator.
16769 * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
16770 * This affects performance (+25%). I don't see best solution right now.
16771 */
16772 return utils.stream.merge(works);
16773 }
16774 FastGlob.stream = stream;
16775 function generateTasks(source, options) {
16776 assertPatternsInput(source);
16777 const patterns = [].concat(source);
16778 const settings = new settings_1.default(options);
16779 return taskManager.generate(patterns, settings);
16780 }
16781 FastGlob.generateTasks = generateTasks;
16782 function isDynamicPattern(source, options) {
16783 assertPatternsInput(source);
16784 const settings = new settings_1.default(options);
16785 return utils.pattern.isDynamicPattern(source, settings);
16786 }
16787 FastGlob.isDynamicPattern = isDynamicPattern;
16788 function escapePath(source) {
16789 assertPatternsInput(source);
16790 return utils.path.escape(source);
16791 }
16792 FastGlob.escapePath = escapePath;
16793})(FastGlob || (FastGlob = {}));
16794function getWorks(source, _Provider, options) {
16795 const patterns = [].concat(source);
16796 const settings = new settings_1.default(options);
16797 const tasks = taskManager.generate(patterns, settings);
16798 const provider = new _Provider(settings);
16799 return tasks.map(provider.read, provider);
16800}
16801function assertPatternsInput(input) {
16802 const source = [].concat(input);
16803 const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
16804 if (!isValidSource) {
16805 throw new TypeError('Patterns must be a string (non empty) or an array of strings');
16806 }
16807}
16808module.exports = FastGlob;
16809
16810
16811/***/ }),
16812/* 79 */
16813/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16814
16815"use strict";
16816
16817Object.defineProperty(exports, "__esModule", ({ value: true }));
16818exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;
16819const utils = __webpack_require__(80);
16820function generate(patterns, settings) {
16821 const positivePatterns = getPositivePatterns(patterns);
16822 const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
16823 const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
16824 const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
16825 const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
16826 const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
16827 return staticTasks.concat(dynamicTasks);
16828}
16829exports.generate = generate;
16830function convertPatternsToTasks(positive, negative, dynamic) {
16831 const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
16832 // When we have a global group – there is no reason to divide the patterns into independent tasks.
16833 // In this case, the global task covers the rest.
16834 if ('.' in positivePatternsGroup) {
16835 const task = convertPatternGroupToTask('.', positive, negative, dynamic);
16836 return [task];
16837 }
16838 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
16839}
16840exports.convertPatternsToTasks = convertPatternsToTasks;
16841function getPositivePatterns(patterns) {
16842 return utils.pattern.getPositivePatterns(patterns);
16843}
16844exports.getPositivePatterns = getPositivePatterns;
16845function getNegativePatternsAsPositive(patterns, ignore) {
16846 const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
16847 const positive = negative.map(utils.pattern.convertToPositivePattern);
16848 return positive;
16849}
16850exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
16851function groupPatternsByBaseDirectory(patterns) {
16852 const group = {};
16853 return patterns.reduce((collection, pattern) => {
16854 const base = utils.pattern.getBaseDirectory(pattern);
16855 if (base in collection) {
16856 collection[base].push(pattern);
16857 }
16858 else {
16859 collection[base] = [pattern];
16860 }
16861 return collection;
16862 }, group);
16863}
16864exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
16865function convertPatternGroupsToTasks(positive, negative, dynamic) {
16866 return Object.keys(positive).map((base) => {
16867 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
16868 });
16869}
16870exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
16871function convertPatternGroupToTask(base, positive, negative, dynamic) {
16872 return {
16873 dynamic,
16874 positive,
16875 negative,
16876 base,
16877 patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
16878 };
16879}
16880exports.convertPatternGroupToTask = convertPatternGroupToTask;
16881
16882
16883/***/ }),
16884/* 80 */
16885/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16886
16887"use strict";
16888
16889Object.defineProperty(exports, "__esModule", ({ value: true }));
16890exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;
16891const array = __webpack_require__(81);
16892exports.array = array;
16893const errno = __webpack_require__(82);
16894exports.errno = errno;
16895const fs = __webpack_require__(83);
16896exports.fs = fs;
16897const path = __webpack_require__(84);
16898exports.path = path;
16899const pattern = __webpack_require__(85);
16900exports.pattern = pattern;
16901const stream = __webpack_require__(112);
16902exports.stream = stream;
16903const string = __webpack_require__(115);
16904exports.string = string;
16905
16906
16907/***/ }),
16908/* 81 */
16909/***/ ((__unused_webpack_module, exports) => {
16910
16911"use strict";
16912
16913Object.defineProperty(exports, "__esModule", ({ value: true }));
16914exports.splitWhen = exports.flatten = void 0;
16915function flatten(items) {
16916 return items.reduce((collection, item) => [].concat(collection, item), []);
16917}
16918exports.flatten = flatten;
16919function splitWhen(items, predicate) {
16920 const result = [[]];
16921 let groupIndex = 0;
16922 for (const item of items) {
16923 if (predicate(item)) {
16924 groupIndex++;
16925 result[groupIndex] = [];
16926 }
16927 else {
16928 result[groupIndex].push(item);
16929 }
16930 }
16931 return result;
16932}
16933exports.splitWhen = splitWhen;
16934
16935
16936/***/ }),
16937/* 82 */
16938/***/ ((__unused_webpack_module, exports) => {
16939
16940"use strict";
16941
16942Object.defineProperty(exports, "__esModule", ({ value: true }));
16943exports.isEnoentCodeError = void 0;
16944function isEnoentCodeError(error) {
16945 return error.code === 'ENOENT';
16946}
16947exports.isEnoentCodeError = isEnoentCodeError;
16948
16949
16950/***/ }),
16951/* 83 */
16952/***/ ((__unused_webpack_module, exports) => {
16953
16954"use strict";
16955
16956Object.defineProperty(exports, "__esModule", ({ value: true }));
16957exports.createDirentFromStats = void 0;
16958class DirentFromStats {
16959 constructor(name, stats) {
16960 this.name = name;
16961 this.isBlockDevice = stats.isBlockDevice.bind(stats);
16962 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
16963 this.isDirectory = stats.isDirectory.bind(stats);
16964 this.isFIFO = stats.isFIFO.bind(stats);
16965 this.isFile = stats.isFile.bind(stats);
16966 this.isSocket = stats.isSocket.bind(stats);
16967 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
16968 }
16969}
16970function createDirentFromStats(name, stats) {
16971 return new DirentFromStats(name, stats);
16972}
16973exports.createDirentFromStats = createDirentFromStats;
16974
16975
16976/***/ }),
16977/* 84 */
16978/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16979
16980"use strict";
16981
16982Object.defineProperty(exports, "__esModule", ({ value: true }));
16983exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;
16984const path = __webpack_require__(23);
16985const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
16986const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
16987/**
16988 * Designed to work only with simple paths: `dir\\file`.
16989 */
16990function unixify(filepath) {
16991 return filepath.replace(/\\/g, '/');
16992}
16993exports.unixify = unixify;
16994function makeAbsolute(cwd, filepath) {
16995 return path.resolve(cwd, filepath);
16996}
16997exports.makeAbsolute = makeAbsolute;
16998function escape(pattern) {
16999 return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
17000}
17001exports.escape = escape;
17002function removeLeadingDotSegment(entry) {
17003 // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
17004 // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
17005 if (entry.charAt(0) === '.') {
17006 const secondCharactery = entry.charAt(1);
17007 if (secondCharactery === '/' || secondCharactery === '\\') {
17008 return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
17009 }
17010 }
17011 return entry;
17012}
17013exports.removeLeadingDotSegment = removeLeadingDotSegment;
17014
17015
17016/***/ }),
17017/* 85 */
17018/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
17019
17020"use strict";
17021
17022Object.defineProperty(exports, "__esModule", ({ value: true }));
17023exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;
17024const path = __webpack_require__(23);
17025const globParent = __webpack_require__(86);
17026const micromatch = __webpack_require__(89);
17027const picomatch = __webpack_require__(106);
17028const GLOBSTAR = '**';
17029const ESCAPE_SYMBOL = '\\';
17030const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
17031const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
17032const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
17033const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
17034const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
17035function isStaticPattern(pattern, options = {}) {
17036 return !isDynamicPattern(pattern, options);
17037}
17038exports.isStaticPattern = isStaticPattern;
17039function isDynamicPattern(pattern, options = {}) {
17040 /**
17041 * A special case with an empty string is necessary for matching patterns that start with a forward slash.
17042 * An empty string cannot be a dynamic pattern.
17043 * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
17044 */
17045 if (pattern === '') {
17046 return false;
17047 }
17048 /**
17049 * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
17050 * filepath directly (without read directory).
17051 */
17052 if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
17053 return true;
17054 }
17055 if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
17056 return true;
17057 }
17058 if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
17059 return true;
17060 }
17061 if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
17062 return true;
17063 }
17064 return false;
17065}
17066exports.isDynamicPattern = isDynamicPattern;
17067function convertToPositivePattern(pattern) {
17068 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
17069}
17070exports.convertToPositivePattern = convertToPositivePattern;
17071function convertToNegativePattern(pattern) {
17072 return '!' + pattern;
17073}
17074exports.convertToNegativePattern = convertToNegativePattern;
17075function isNegativePattern(pattern) {
17076 return pattern.startsWith('!') && pattern[1] !== '(';
17077}
17078exports.isNegativePattern = isNegativePattern;
17079function isPositivePattern(pattern) {
17080 return !isNegativePattern(pattern);
17081}
17082exports.isPositivePattern = isPositivePattern;
17083function getNegativePatterns(patterns) {
17084 return patterns.filter(isNegativePattern);
17085}
17086exports.getNegativePatterns = getNegativePatterns;
17087function getPositivePatterns(patterns) {
17088 return patterns.filter(isPositivePattern);
17089}
17090exports.getPositivePatterns = getPositivePatterns;
17091function getBaseDirectory(pattern) {
17092 return globParent(pattern, { flipBackslashes: false });
17093}
17094exports.getBaseDirectory = getBaseDirectory;
17095function hasGlobStar(pattern) {
17096 return pattern.includes(GLOBSTAR);
17097}
17098exports.hasGlobStar = hasGlobStar;
17099function endsWithSlashGlobStar(pattern) {
17100 return pattern.endsWith('/' + GLOBSTAR);
17101}
17102exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
17103function isAffectDepthOfReadingPattern(pattern) {
17104 const basename = path.basename(pattern);
17105 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
17106}
17107exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
17108function expandPatternsWithBraceExpansion(patterns) {
17109 return patterns.reduce((collection, pattern) => {
17110 return collection.concat(expandBraceExpansion(pattern));
17111 }, []);
17112}
17113exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
17114function expandBraceExpansion(pattern) {
17115 return micromatch.braces(pattern, {
17116 expand: true,
17117 nodupes: true
17118 });
17119}
17120exports.expandBraceExpansion = expandBraceExpansion;
17121function getPatternParts(pattern, options) {
17122 let { parts } = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
17123 /**
17124 * The scan method returns an empty array in some cases.
17125 * See micromatch/picomatch#58 for more details.
17126 */
17127 if (parts.length === 0) {
17128 parts = [pattern];
17129 }
17130 /**
17131 * The scan method does not return an empty part for the pattern with a forward slash.
17132 * This is another part of micromatch/picomatch#58.
17133 */
17134 if (parts[0].startsWith('/')) {
17135 parts[0] = parts[0].slice(1);
17136 parts.unshift('');
17137 }
17138 return parts;
17139}
17140exports.getPatternParts = getPatternParts;
17141function makeRe(pattern, options) {
17142 return micromatch.makeRe(pattern, options);
17143}
17144exports.makeRe = makeRe;
17145function convertPatternsToRe(patterns, options) {
17146 return patterns.map((pattern) => makeRe(pattern, options));
17147}
17148exports.convertPatternsToRe = convertPatternsToRe;
17149function matchAny(entry, patternsRe) {
17150 return patternsRe.some((patternRe) => patternRe.test(entry));
17151}
17152exports.matchAny = matchAny;
17153
17154
17155/***/ }),
17156/* 86 */
17157/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17158
17159"use strict";
17160
17161
17162var isGlob = __webpack_require__(87);
17163var pathPosixDirname = __webpack_require__(23).posix.dirname;
17164var isWin32 = __webpack_require__(24).platform() === 'win32';
17165
17166var slash = '/';
17167var backslash = /\\/g;
17168var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
17169var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
17170var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
17171
17172/**
17173 * @param {string} str
17174 * @param {Object} opts
17175 * @param {boolean} [opts.flipBackslashes=true]
17176 */
17177module.exports = function globParent(str, opts) {
17178 var options = Object.assign({ flipBackslashes: true }, opts);
17179
17180 // flip windows path separators
17181 if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
17182 str = str.replace(backslash, slash);
17183 }
17184
17185 // special case for strings ending in enclosure containing path separator
17186 if (enclosure.test(str)) {
17187 str += slash;
17188 }
17189
17190 // preserves full path in case of trailing path separator
17191 str += 'a';
17192
17193 // remove path parts that are globby
17194 do {
17195 str = pathPosixDirname(str);
17196 } while (isGlob(str) || globby.test(str));
17197
17198 // remove escape chars and return result
17199 return str.replace(escaped, '$1');
17200};
17201
17202
17203/***/ }),
17204/* 87 */
17205/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17206
17207/*!
17208 * is-glob <https://github.com/jonschlinkert/is-glob>
17209 *
17210 * Copyright (c) 2014-2017, Jon Schlinkert.
17211 * Released under the MIT License.
17212 */
17213
17214var isExtglob = __webpack_require__(88);
17215var chars = { '{': '}', '(': ')', '[': ']'};
17216var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
17217var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
17218
17219module.exports = function isGlob(str, options) {
17220 if (typeof str !== 'string' || str === '') {
17221 return false;
17222 }
17223
17224 if (isExtglob(str)) {
17225 return true;
17226 }
17227
17228 var regex = strictRegex;
17229 var match;
17230
17231 // optionally relax regex
17232 if (options && options.strict === false) {
17233 regex = relaxedRegex;
17234 }
17235
17236 while ((match = regex.exec(str))) {
17237 if (match[2]) return true;
17238 var idx = match.index + match[0].length;
17239
17240 // if an open bracket/brace/paren is escaped,
17241 // set the index to the next closing character
17242 var open = match[1];
17243 var close = open ? chars[open] : null;
17244 if (open && close) {
17245 var n = str.indexOf(close, idx);
17246 if (n !== -1) {
17247 idx = n + 1;
17248 }
17249 }
17250
17251 str = str.slice(idx);
17252 }
17253 return false;
17254};
17255
17256
17257/***/ }),
17258/* 88 */
17259/***/ ((module) => {
17260
17261/*!
17262 * is-extglob <https://github.com/jonschlinkert/is-extglob>
17263 *
17264 * Copyright (c) 2014-2016, Jon Schlinkert.
17265 * Licensed under the MIT License.
17266 */
17267
17268module.exports = function isExtglob(str) {
17269 if (typeof str !== 'string' || str === '') {
17270 return false;
17271 }
17272
17273 var match;
17274 while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
17275 if (match[2]) return true;
17276 str = str.slice(match.index + match[0].length);
17277 }
17278
17279 return false;
17280};
17281
17282
17283/***/ }),
17284/* 89 */
17285/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17286
17287"use strict";
17288
17289
17290const util = __webpack_require__(10);
17291const braces = __webpack_require__(90);
17292const picomatch = __webpack_require__(100);
17293const utils = __webpack_require__(103);
17294const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
17295
17296/**
17297 * Returns an array of strings that match one or more glob patterns.
17298 *
17299 * ```js
17300 * const mm = require('micromatch');
17301 * // mm(list, patterns[, options]);
17302 *
17303 * console.log(mm(['a.js', 'a.txt'], ['*.js']));
17304 * //=> [ 'a.js' ]
17305 * ```
17306 * @param {String|Array<string>} list List of strings to match.
17307 * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
17308 * @param {Object} options See available [options](#options)
17309 * @return {Array} Returns an array of matches
17310 * @summary false
17311 * @api public
17312 */
17313
17314const micromatch = (list, patterns, options) => {
17315 patterns = [].concat(patterns);
17316 list = [].concat(list);
17317
17318 let omit = new Set();
17319 let keep = new Set();
17320 let items = new Set();
17321 let negatives = 0;
17322
17323 let onResult = state => {
17324 items.add(state.output);
17325 if (options && options.onResult) {
17326 options.onResult(state);
17327 }
17328 };
17329
17330 for (let i = 0; i < patterns.length; i++) {
17331 let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
17332 let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
17333 if (negated) negatives++;
17334
17335 for (let item of list) {
17336 let matched = isMatch(item, true);
17337
17338 let match = negated ? !matched.isMatch : matched.isMatch;
17339 if (!match) continue;
17340
17341 if (negated) {
17342 omit.add(matched.output);
17343 } else {
17344 omit.delete(matched.output);
17345 keep.add(matched.output);
17346 }
17347 }
17348 }
17349
17350 let result = negatives === patterns.length ? [...items] : [...keep];
17351 let matches = result.filter(item => !omit.has(item));
17352
17353 if (options && matches.length === 0) {
17354 if (options.failglob === true) {
17355 throw new Error(`No matches found for "${patterns.join(', ')}"`);
17356 }
17357
17358 if (options.nonull === true || options.nullglob === true) {
17359 return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
17360 }
17361 }
17362
17363 return matches;
17364};
17365
17366/**
17367 * Backwards compatibility
17368 */
17369
17370micromatch.match = micromatch;
17371
17372/**
17373 * Returns a matcher function from the given glob `pattern` and `options`.
17374 * The returned function takes a string to match as its only argument and returns
17375 * true if the string is a match.
17376 *
17377 * ```js
17378 * const mm = require('micromatch');
17379 * // mm.matcher(pattern[, options]);
17380 *
17381 * const isMatch = mm.matcher('*.!(*a)');
17382 * console.log(isMatch('a.a')); //=> false
17383 * console.log(isMatch('a.b')); //=> true
17384 * ```
17385 * @param {String} `pattern` Glob pattern
17386 * @param {Object} `options`
17387 * @return {Function} Returns a matcher function.
17388 * @api public
17389 */
17390
17391micromatch.matcher = (pattern, options) => picomatch(pattern, options);
17392
17393/**
17394 * Returns true if **any** of the given glob `patterns` match the specified `string`.
17395 *
17396 * ```js
17397 * const mm = require('micromatch');
17398 * // mm.isMatch(string, patterns[, options]);
17399 *
17400 * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
17401 * console.log(mm.isMatch('a.a', 'b.*')); //=> false
17402 * ```
17403 * @param {String} str The string to test.
17404 * @param {String|Array} patterns One or more glob patterns to use for matching.
17405 * @param {Object} [options] See available [options](#options).
17406 * @return {Boolean} Returns true if any patterns match `str`
17407 * @api public
17408 */
17409
17410micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
17411
17412/**
17413 * Backwards compatibility
17414 */
17415
17416micromatch.any = micromatch.isMatch;
17417
17418/**
17419 * Returns a list of strings that _**do not match any**_ of the given `patterns`.
17420 *
17421 * ```js
17422 * const mm = require('micromatch');
17423 * // mm.not(list, patterns[, options]);
17424 *
17425 * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
17426 * //=> ['b.b', 'c.c']
17427 * ```
17428 * @param {Array} `list` Array of strings to match.
17429 * @param {String|Array} `patterns` One or more glob pattern to use for matching.
17430 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17431 * @return {Array} Returns an array of strings that **do not match** the given patterns.
17432 * @api public
17433 */
17434
17435micromatch.not = (list, patterns, options = {}) => {
17436 patterns = [].concat(patterns).map(String);
17437 let result = new Set();
17438 let items = [];
17439
17440 let onResult = state => {
17441 if (options.onResult) options.onResult(state);
17442 items.push(state.output);
17443 };
17444
17445 let matches = micromatch(list, patterns, { ...options, onResult });
17446
17447 for (let item of items) {
17448 if (!matches.includes(item)) {
17449 result.add(item);
17450 }
17451 }
17452 return [...result];
17453};
17454
17455/**
17456 * Returns true if the given `string` contains the given pattern. Similar
17457 * to [.isMatch](#isMatch) but the pattern can match any part of the string.
17458 *
17459 * ```js
17460 * var mm = require('micromatch');
17461 * // mm.contains(string, pattern[, options]);
17462 *
17463 * console.log(mm.contains('aa/bb/cc', '*b'));
17464 * //=> true
17465 * console.log(mm.contains('aa/bb/cc', '*d'));
17466 * //=> false
17467 * ```
17468 * @param {String} `str` The string to match.
17469 * @param {String|Array} `patterns` Glob pattern to use for matching.
17470 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17471 * @return {Boolean} Returns true if the patter matches any part of `str`.
17472 * @api public
17473 */
17474
17475micromatch.contains = (str, pattern, options) => {
17476 if (typeof str !== 'string') {
17477 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
17478 }
17479
17480 if (Array.isArray(pattern)) {
17481 return pattern.some(p => micromatch.contains(str, p, options));
17482 }
17483
17484 if (typeof pattern === 'string') {
17485 if (isEmptyString(str) || isEmptyString(pattern)) {
17486 return false;
17487 }
17488
17489 if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
17490 return true;
17491 }
17492 }
17493
17494 return micromatch.isMatch(str, pattern, { ...options, contains: true });
17495};
17496
17497/**
17498 * Filter the keys of the given object with the given `glob` pattern
17499 * and `options`. Does not attempt to match nested keys. If you need this feature,
17500 * use [glob-object][] instead.
17501 *
17502 * ```js
17503 * const mm = require('micromatch');
17504 * // mm.matchKeys(object, patterns[, options]);
17505 *
17506 * const obj = { aa: 'a', ab: 'b', ac: 'c' };
17507 * console.log(mm.matchKeys(obj, '*b'));
17508 * //=> { ab: 'b' }
17509 * ```
17510 * @param {Object} `object` The object with keys to filter.
17511 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
17512 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17513 * @return {Object} Returns an object with only keys that match the given patterns.
17514 * @api public
17515 */
17516
17517micromatch.matchKeys = (obj, patterns, options) => {
17518 if (!utils.isObject(obj)) {
17519 throw new TypeError('Expected the first argument to be an object');
17520 }
17521 let keys = micromatch(Object.keys(obj), patterns, options);
17522 let res = {};
17523 for (let key of keys) res[key] = obj[key];
17524 return res;
17525};
17526
17527/**
17528 * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
17529 *
17530 * ```js
17531 * const mm = require('micromatch');
17532 * // mm.some(list, patterns[, options]);
17533 *
17534 * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
17535 * // true
17536 * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
17537 * // false
17538 * ```
17539 * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
17540 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
17541 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17542 * @return {Boolean} Returns true if any patterns match `str`
17543 * @api public
17544 */
17545
17546micromatch.some = (list, patterns, options) => {
17547 let items = [].concat(list);
17548
17549 for (let pattern of [].concat(patterns)) {
17550 let isMatch = picomatch(String(pattern), options);
17551 if (items.some(item => isMatch(item))) {
17552 return true;
17553 }
17554 }
17555 return false;
17556};
17557
17558/**
17559 * Returns true if every string in the given `list` matches
17560 * any of the given glob `patterns`.
17561 *
17562 * ```js
17563 * const mm = require('micromatch');
17564 * // mm.every(list, patterns[, options]);
17565 *
17566 * console.log(mm.every('foo.js', ['foo.js']));
17567 * // true
17568 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
17569 * // true
17570 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
17571 * // false
17572 * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
17573 * // false
17574 * ```
17575 * @param {String|Array} `list` The string or array of strings to test.
17576 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
17577 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17578 * @return {Boolean} Returns true if any patterns match `str`
17579 * @api public
17580 */
17581
17582micromatch.every = (list, patterns, options) => {
17583 let items = [].concat(list);
17584
17585 for (let pattern of [].concat(patterns)) {
17586 let isMatch = picomatch(String(pattern), options);
17587 if (!items.every(item => isMatch(item))) {
17588 return false;
17589 }
17590 }
17591 return true;
17592};
17593
17594/**
17595 * Returns true if **all** of the given `patterns` match
17596 * the specified string.
17597 *
17598 * ```js
17599 * const mm = require('micromatch');
17600 * // mm.all(string, patterns[, options]);
17601 *
17602 * console.log(mm.all('foo.js', ['foo.js']));
17603 * // true
17604 *
17605 * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
17606 * // false
17607 *
17608 * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
17609 * // true
17610 *
17611 * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
17612 * // true
17613 * ```
17614 * @param {String|Array} `str` The string to test.
17615 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
17616 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17617 * @return {Boolean} Returns true if any patterns match `str`
17618 * @api public
17619 */
17620
17621micromatch.all = (str, patterns, options) => {
17622 if (typeof str !== 'string') {
17623 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
17624 }
17625
17626 return [].concat(patterns).every(p => picomatch(p, options)(str));
17627};
17628
17629/**
17630 * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
17631 *
17632 * ```js
17633 * const mm = require('micromatch');
17634 * // mm.capture(pattern, string[, options]);
17635 *
17636 * console.log(mm.capture('test/*.js', 'test/foo.js'));
17637 * //=> ['foo']
17638 * console.log(mm.capture('test/*.js', 'foo/bar.css'));
17639 * //=> null
17640 * ```
17641 * @param {String} `glob` Glob pattern to use for matching.
17642 * @param {String} `input` String to match
17643 * @param {Object} `options` See available [options](#options) for changing how matches are performed
17644 * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
17645 * @api public
17646 */
17647
17648micromatch.capture = (glob, input, options) => {
17649 let posix = utils.isWindows(options);
17650 let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
17651 let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
17652
17653 if (match) {
17654 return match.slice(1).map(v => v === void 0 ? '' : v);
17655 }
17656};
17657
17658/**
17659 * Create a regular expression from the given glob `pattern`.
17660 *
17661 * ```js
17662 * const mm = require('micromatch');
17663 * // mm.makeRe(pattern[, options]);
17664 *
17665 * console.log(mm.makeRe('*.js'));
17666 * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
17667 * ```
17668 * @param {String} `pattern` A glob pattern to convert to regex.
17669 * @param {Object} `options`
17670 * @return {RegExp} Returns a regex created from the given pattern.
17671 * @api public
17672 */
17673
17674micromatch.makeRe = (...args) => picomatch.makeRe(...args);
17675
17676/**
17677 * Scan a glob pattern to separate the pattern into segments. Used
17678 * by the [split](#split) method.
17679 *
17680 * ```js
17681 * const mm = require('micromatch');
17682 * const state = mm.scan(pattern[, options]);
17683 * ```
17684 * @param {String} `pattern`
17685 * @param {Object} `options`
17686 * @return {Object} Returns an object with
17687 * @api public
17688 */
17689
17690micromatch.scan = (...args) => picomatch.scan(...args);
17691
17692/**
17693 * Parse a glob pattern to create the source string for a regular
17694 * expression.
17695 *
17696 * ```js
17697 * const mm = require('micromatch');
17698 * const state = mm(pattern[, options]);
17699 * ```
17700 * @param {String} `glob`
17701 * @param {Object} `options`
17702 * @return {Object} Returns an object with useful properties and output to be used as regex source string.
17703 * @api public
17704 */
17705
17706micromatch.parse = (patterns, options) => {
17707 let res = [];
17708 for (let pattern of [].concat(patterns || [])) {
17709 for (let str of braces(String(pattern), options)) {
17710 res.push(picomatch.parse(str, options));
17711 }
17712 }
17713 return res;
17714};
17715
17716/**
17717 * Process the given brace `pattern`.
17718 *
17719 * ```js
17720 * const { braces } = require('micromatch');
17721 * console.log(braces('foo/{a,b,c}/bar'));
17722 * //=> [ 'foo/(a|b|c)/bar' ]
17723 *
17724 * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
17725 * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
17726 * ```
17727 * @param {String} `pattern` String with brace pattern to process.
17728 * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
17729 * @return {Array}
17730 * @api public
17731 */
17732
17733micromatch.braces = (pattern, options) => {
17734 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
17735 if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
17736 return [pattern];
17737 }
17738 return braces(pattern, options);
17739};
17740
17741/**
17742 * Expand braces
17743 */
17744
17745micromatch.braceExpand = (pattern, options) => {
17746 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
17747 return micromatch.braces(pattern, { ...options, expand: true });
17748};
17749
17750/**
17751 * Expose micromatch
17752 */
17753
17754module.exports = micromatch;
17755
17756
17757/***/ }),
17758/* 90 */
17759/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17760
17761"use strict";
17762
17763
17764const stringify = __webpack_require__(91);
17765const compile = __webpack_require__(93);
17766const expand = __webpack_require__(97);
17767const parse = __webpack_require__(98);
17768
17769/**
17770 * Expand the given pattern or create a regex-compatible string.
17771 *
17772 * ```js
17773 * const braces = require('braces');
17774 * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
17775 * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
17776 * ```
17777 * @param {String} `str`
17778 * @param {Object} `options`
17779 * @return {String}
17780 * @api public
17781 */
17782
17783const braces = (input, options = {}) => {
17784 let output = [];
17785
17786 if (Array.isArray(input)) {
17787 for (let pattern of input) {
17788 let result = braces.create(pattern, options);
17789 if (Array.isArray(result)) {
17790 output.push(...result);
17791 } else {
17792 output.push(result);
17793 }
17794 }
17795 } else {
17796 output = [].concat(braces.create(input, options));
17797 }
17798
17799 if (options && options.expand === true && options.nodupes === true) {
17800 output = [...new Set(output)];
17801 }
17802 return output;
17803};
17804
17805/**
17806 * Parse the given `str` with the given `options`.
17807 *
17808 * ```js
17809 * // braces.parse(pattern, [, options]);
17810 * const ast = braces.parse('a/{b,c}/d');
17811 * console.log(ast);
17812 * ```
17813 * @param {String} pattern Brace pattern to parse
17814 * @param {Object} options
17815 * @return {Object} Returns an AST
17816 * @api public
17817 */
17818
17819braces.parse = (input, options = {}) => parse(input, options);
17820
17821/**
17822 * Creates a braces string from an AST, or an AST node.
17823 *
17824 * ```js
17825 * const braces = require('braces');
17826 * let ast = braces.parse('foo/{a,b}/bar');
17827 * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
17828 * ```
17829 * @param {String} `input` Brace pattern or AST.
17830 * @param {Object} `options`
17831 * @return {Array} Returns an array of expanded values.
17832 * @api public
17833 */
17834
17835braces.stringify = (input, options = {}) => {
17836 if (typeof input === 'string') {
17837 return stringify(braces.parse(input, options), options);
17838 }
17839 return stringify(input, options);
17840};
17841
17842/**
17843 * Compiles a brace pattern into a regex-compatible, optimized string.
17844 * This method is called by the main [braces](#braces) function by default.
17845 *
17846 * ```js
17847 * const braces = require('braces');
17848 * console.log(braces.compile('a/{b,c}/d'));
17849 * //=> ['a/(b|c)/d']
17850 * ```
17851 * @param {String} `input` Brace pattern or AST.
17852 * @param {Object} `options`
17853 * @return {Array} Returns an array of expanded values.
17854 * @api public
17855 */
17856
17857braces.compile = (input, options = {}) => {
17858 if (typeof input === 'string') {
17859 input = braces.parse(input, options);
17860 }
17861 return compile(input, options);
17862};
17863
17864/**
17865 * Expands a brace pattern into an array. This method is called by the
17866 * main [braces](#braces) function when `options.expand` is true. Before
17867 * using this method it's recommended that you read the [performance notes](#performance))
17868 * and advantages of using [.compile](#compile) instead.
17869 *
17870 * ```js
17871 * const braces = require('braces');
17872 * console.log(braces.expand('a/{b,c}/d'));
17873 * //=> ['a/b/d', 'a/c/d'];
17874 * ```
17875 * @param {String} `pattern` Brace pattern
17876 * @param {Object} `options`
17877 * @return {Array} Returns an array of expanded values.
17878 * @api public
17879 */
17880
17881braces.expand = (input, options = {}) => {
17882 if (typeof input === 'string') {
17883 input = braces.parse(input, options);
17884 }
17885
17886 let result = expand(input, options);
17887
17888 // filter out empty strings if specified
17889 if (options.noempty === true) {
17890 result = result.filter(Boolean);
17891 }
17892
17893 // filter out duplicates if specified
17894 if (options.nodupes === true) {
17895 result = [...new Set(result)];
17896 }
17897
17898 return result;
17899};
17900
17901/**
17902 * Processes a brace pattern and returns either an expanded array
17903 * (if `options.expand` is true), a highly optimized regex-compatible string.
17904 * This method is called by the main [braces](#braces) function.
17905 *
17906 * ```js
17907 * const braces = require('braces');
17908 * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
17909 * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
17910 * ```
17911 * @param {String} `pattern` Brace pattern
17912 * @param {Object} `options`
17913 * @return {Array} Returns an array of expanded values.
17914 * @api public
17915 */
17916
17917braces.create = (input, options = {}) => {
17918 if (input === '' || input.length < 3) {
17919 return [input];
17920 }
17921
17922 return options.expand !== true
17923 ? braces.compile(input, options)
17924 : braces.expand(input, options);
17925};
17926
17927/**
17928 * Expose "braces"
17929 */
17930
17931module.exports = braces;
17932
17933
17934/***/ }),
17935/* 91 */
17936/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
17937
17938"use strict";
17939
17940
17941const utils = __webpack_require__(92);
17942
17943module.exports = (ast, options = {}) => {
17944 let stringify = (node, parent = {}) => {
17945 let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
17946 let invalidNode = node.invalid === true && options.escapeInvalid === true;
17947 let output = '';
17948
17949 if (node.value) {
17950 if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
17951 return '\\' + node.value;
17952 }
17953 return node.value;
17954 }
17955
17956 if (node.value) {
17957 return node.value;
17958 }
17959
17960 if (node.nodes) {
17961 for (let child of node.nodes) {
17962 output += stringify(child);
17963 }
17964 }
17965 return output;
17966 };
17967
17968 return stringify(ast);
17969};
17970
17971
17972
17973/***/ }),
17974/* 92 */
17975/***/ ((__unused_webpack_module, exports) => {
17976
17977"use strict";
17978
17979
17980exports.isInteger = num => {
17981 if (typeof num === 'number') {
17982 return Number.isInteger(num);
17983 }
17984 if (typeof num === 'string' && num.trim() !== '') {
17985 return Number.isInteger(Number(num));
17986 }
17987 return false;
17988};
17989
17990/**
17991 * Find a node of the given type
17992 */
17993
17994exports.find = (node, type) => node.nodes.find(node => node.type === type);
17995
17996/**
17997 * Find a node of the given type
17998 */
17999
18000exports.exceedsLimit = (min, max, step = 1, limit) => {
18001 if (limit === false) return false;
18002 if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
18003 return ((Number(max) - Number(min)) / Number(step)) >= limit;
18004};
18005
18006/**
18007 * Escape the given node with '\\' before node.value
18008 */
18009
18010exports.escapeNode = (block, n = 0, type) => {
18011 let node = block.nodes[n];
18012 if (!node) return;
18013
18014 if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
18015 if (node.escaped !== true) {
18016 node.value = '\\' + node.value;
18017 node.escaped = true;
18018 }
18019 }
18020};
18021
18022/**
18023 * Returns true if the given brace node should be enclosed in literal braces
18024 */
18025
18026exports.encloseBrace = node => {
18027 if (node.type !== 'brace') return false;
18028 if ((node.commas >> 0 + node.ranges >> 0) === 0) {
18029 node.invalid = true;
18030 return true;
18031 }
18032 return false;
18033};
18034
18035/**
18036 * Returns true if a brace node is invalid.
18037 */
18038
18039exports.isInvalidBrace = block => {
18040 if (block.type !== 'brace') return false;
18041 if (block.invalid === true || block.dollar) return true;
18042 if ((block.commas >> 0 + block.ranges >> 0) === 0) {
18043 block.invalid = true;
18044 return true;
18045 }
18046 if (block.open !== true || block.close !== true) {
18047 block.invalid = true;
18048 return true;
18049 }
18050 return false;
18051};
18052
18053/**
18054 * Returns true if a node is an open or close node
18055 */
18056
18057exports.isOpenOrClose = node => {
18058 if (node.type === 'open' || node.type === 'close') {
18059 return true;
18060 }
18061 return node.open === true || node.close === true;
18062};
18063
18064/**
18065 * Reduce an array of text nodes.
18066 */
18067
18068exports.reduce = nodes => nodes.reduce((acc, node) => {
18069 if (node.type === 'text') acc.push(node.value);
18070 if (node.type === 'range') node.type = 'text';
18071 return acc;
18072}, []);
18073
18074/**
18075 * Flatten an array
18076 */
18077
18078exports.flatten = (...args) => {
18079 const result = [];
18080 const flat = arr => {
18081 for (let i = 0; i < arr.length; i++) {
18082 let ele = arr[i];
18083 Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
18084 }
18085 return result;
18086 };
18087 flat(args);
18088 return result;
18089};
18090
18091
18092/***/ }),
18093/* 93 */
18094/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18095
18096"use strict";
18097
18098
18099const fill = __webpack_require__(94);
18100const utils = __webpack_require__(92);
18101
18102const compile = (ast, options = {}) => {
18103 let walk = (node, parent = {}) => {
18104 let invalidBlock = utils.isInvalidBrace(parent);
18105 let invalidNode = node.invalid === true && options.escapeInvalid === true;
18106 let invalid = invalidBlock === true || invalidNode === true;
18107 let prefix = options.escapeInvalid === true ? '\\' : '';
18108 let output = '';
18109
18110 if (node.isOpen === true) {
18111 return prefix + node.value;
18112 }
18113 if (node.isClose === true) {
18114 return prefix + node.value;
18115 }
18116
18117 if (node.type === 'open') {
18118 return invalid ? (prefix + node.value) : '(';
18119 }
18120
18121 if (node.type === 'close') {
18122 return invalid ? (prefix + node.value) : ')';
18123 }
18124
18125 if (node.type === 'comma') {
18126 return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
18127 }
18128
18129 if (node.value) {
18130 return node.value;
18131 }
18132
18133 if (node.nodes && node.ranges > 0) {
18134 let args = utils.reduce(node.nodes);
18135 let range = fill(...args, { ...options, wrap: false, toRegex: true });
18136
18137 if (range.length !== 0) {
18138 return args.length > 1 && range.length > 1 ? `(${range})` : range;
18139 }
18140 }
18141
18142 if (node.nodes) {
18143 for (let child of node.nodes) {
18144 output += walk(child, node);
18145 }
18146 }
18147 return output;
18148 };
18149
18150 return walk(ast);
18151};
18152
18153module.exports = compile;
18154
18155
18156/***/ }),
18157/* 94 */
18158/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18159
18160"use strict";
18161/*!
18162 * fill-range <https://github.com/jonschlinkert/fill-range>
18163 *
18164 * Copyright (c) 2014-present, Jon Schlinkert.
18165 * Licensed under the MIT License.
18166 */
18167
18168
18169
18170const util = __webpack_require__(10);
18171const toRegexRange = __webpack_require__(95);
18172
18173const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
18174
18175const transform = toNumber => {
18176 return value => toNumber === true ? Number(value) : String(value);
18177};
18178
18179const isValidValue = value => {
18180 return typeof value === 'number' || (typeof value === 'string' && value !== '');
18181};
18182
18183const isNumber = num => Number.isInteger(+num);
18184
18185const zeros = input => {
18186 let value = `${input}`;
18187 let index = -1;
18188 if (value[0] === '-') value = value.slice(1);
18189 if (value === '0') return false;
18190 while (value[++index] === '0');
18191 return index > 0;
18192};
18193
18194const stringify = (start, end, options) => {
18195 if (typeof start === 'string' || typeof end === 'string') {
18196 return true;
18197 }
18198 return options.stringify === true;
18199};
18200
18201const pad = (input, maxLength, toNumber) => {
18202 if (maxLength > 0) {
18203 let dash = input[0] === '-' ? '-' : '';
18204 if (dash) input = input.slice(1);
18205 input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
18206 }
18207 if (toNumber === false) {
18208 return String(input);
18209 }
18210 return input;
18211};
18212
18213const toMaxLen = (input, maxLength) => {
18214 let negative = input[0] === '-' ? '-' : '';
18215 if (negative) {
18216 input = input.slice(1);
18217 maxLength--;
18218 }
18219 while (input.length < maxLength) input = '0' + input;
18220 return negative ? ('-' + input) : input;
18221};
18222
18223const toSequence = (parts, options) => {
18224 parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
18225 parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
18226
18227 let prefix = options.capture ? '' : '?:';
18228 let positives = '';
18229 let negatives = '';
18230 let result;
18231
18232 if (parts.positives.length) {
18233 positives = parts.positives.join('|');
18234 }
18235
18236 if (parts.negatives.length) {
18237 negatives = `-(${prefix}${parts.negatives.join('|')})`;
18238 }
18239
18240 if (positives && negatives) {
18241 result = `${positives}|${negatives}`;
18242 } else {
18243 result = positives || negatives;
18244 }
18245
18246 if (options.wrap) {
18247 return `(${prefix}${result})`;
18248 }
18249
18250 return result;
18251};
18252
18253const toRange = (a, b, isNumbers, options) => {
18254 if (isNumbers) {
18255 return toRegexRange(a, b, { wrap: false, ...options });
18256 }
18257
18258 let start = String.fromCharCode(a);
18259 if (a === b) return start;
18260
18261 let stop = String.fromCharCode(b);
18262 return `[${start}-${stop}]`;
18263};
18264
18265const toRegex = (start, end, options) => {
18266 if (Array.isArray(start)) {
18267 let wrap = options.wrap === true;
18268 let prefix = options.capture ? '' : '?:';
18269 return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
18270 }
18271 return toRegexRange(start, end, options);
18272};
18273
18274const rangeError = (...args) => {
18275 return new RangeError('Invalid range arguments: ' + util.inspect(...args));
18276};
18277
18278const invalidRange = (start, end, options) => {
18279 if (options.strictRanges === true) throw rangeError([start, end]);
18280 return [];
18281};
18282
18283const invalidStep = (step, options) => {
18284 if (options.strictRanges === true) {
18285 throw new TypeError(`Expected step "${step}" to be a number`);
18286 }
18287 return [];
18288};
18289
18290const fillNumbers = (start, end, step = 1, options = {}) => {
18291 let a = Number(start);
18292 let b = Number(end);
18293
18294 if (!Number.isInteger(a) || !Number.isInteger(b)) {
18295 if (options.strictRanges === true) throw rangeError([start, end]);
18296 return [];
18297 }
18298
18299 // fix negative zero
18300 if (a === 0) a = 0;
18301 if (b === 0) b = 0;
18302
18303 let descending = a > b;
18304 let startString = String(start);
18305 let endString = String(end);
18306 let stepString = String(step);
18307 step = Math.max(Math.abs(step), 1);
18308
18309 let padded = zeros(startString) || zeros(endString) || zeros(stepString);
18310 let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
18311 let toNumber = padded === false && stringify(start, end, options) === false;
18312 let format = options.transform || transform(toNumber);
18313
18314 if (options.toRegex && step === 1) {
18315 return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
18316 }
18317
18318 let parts = { negatives: [], positives: [] };
18319 let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
18320 let range = [];
18321 let index = 0;
18322
18323 while (descending ? a >= b : a <= b) {
18324 if (options.toRegex === true && step > 1) {
18325 push(a);
18326 } else {
18327 range.push(pad(format(a, index), maxLen, toNumber));
18328 }
18329 a = descending ? a - step : a + step;
18330 index++;
18331 }
18332
18333 if (options.toRegex === true) {
18334 return step > 1
18335 ? toSequence(parts, options)
18336 : toRegex(range, null, { wrap: false, ...options });
18337 }
18338
18339 return range;
18340};
18341
18342const fillLetters = (start, end, step = 1, options = {}) => {
18343 if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
18344 return invalidRange(start, end, options);
18345 }
18346
18347
18348 let format = options.transform || (val => String.fromCharCode(val));
18349 let a = `${start}`.charCodeAt(0);
18350 let b = `${end}`.charCodeAt(0);
18351
18352 let descending = a > b;
18353 let min = Math.min(a, b);
18354 let max = Math.max(a, b);
18355
18356 if (options.toRegex && step === 1) {
18357 return toRange(min, max, false, options);
18358 }
18359
18360 let range = [];
18361 let index = 0;
18362
18363 while (descending ? a >= b : a <= b) {
18364 range.push(format(a, index));
18365 a = descending ? a - step : a + step;
18366 index++;
18367 }
18368
18369 if (options.toRegex === true) {
18370 return toRegex(range, null, { wrap: false, options });
18371 }
18372
18373 return range;
18374};
18375
18376const fill = (start, end, step, options = {}) => {
18377 if (end == null && isValidValue(start)) {
18378 return [start];
18379 }
18380
18381 if (!isValidValue(start) || !isValidValue(end)) {
18382 return invalidRange(start, end, options);
18383 }
18384
18385 if (typeof step === 'function') {
18386 return fill(start, end, 1, { transform: step });
18387 }
18388
18389 if (isObject(step)) {
18390 return fill(start, end, 0, step);
18391 }
18392
18393 let opts = { ...options };
18394 if (opts.capture === true) opts.wrap = true;
18395 step = step || opts.step || 1;
18396
18397 if (!isNumber(step)) {
18398 if (step != null && !isObject(step)) return invalidStep(step, opts);
18399 return fill(start, end, 1, step);
18400 }
18401
18402 if (isNumber(start) && isNumber(end)) {
18403 return fillNumbers(start, end, step, opts);
18404 }
18405
18406 return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
18407};
18408
18409module.exports = fill;
18410
18411
18412/***/ }),
18413/* 95 */
18414/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18415
18416"use strict";
18417/*!
18418 * to-regex-range <https://github.com/micromatch/to-regex-range>
18419 *
18420 * Copyright (c) 2015-present, Jon Schlinkert.
18421 * Released under the MIT License.
18422 */
18423
18424
18425
18426const isNumber = __webpack_require__(96);
18427
18428const toRegexRange = (min, max, options) => {
18429 if (isNumber(min) === false) {
18430 throw new TypeError('toRegexRange: expected the first argument to be a number');
18431 }
18432
18433 if (max === void 0 || min === max) {
18434 return String(min);
18435 }
18436
18437 if (isNumber(max) === false) {
18438 throw new TypeError('toRegexRange: expected the second argument to be a number.');
18439 }
18440
18441 let opts = { relaxZeros: true, ...options };
18442 if (typeof opts.strictZeros === 'boolean') {
18443 opts.relaxZeros = opts.strictZeros === false;
18444 }
18445
18446 let relax = String(opts.relaxZeros);
18447 let shorthand = String(opts.shorthand);
18448 let capture = String(opts.capture);
18449 let wrap = String(opts.wrap);
18450 let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
18451
18452 if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
18453 return toRegexRange.cache[cacheKey].result;
18454 }
18455
18456 let a = Math.min(min, max);
18457 let b = Math.max(min, max);
18458
18459 if (Math.abs(a - b) === 1) {
18460 let result = min + '|' + max;
18461 if (opts.capture) {
18462 return `(${result})`;
18463 }
18464 if (opts.wrap === false) {
18465 return result;
18466 }
18467 return `(?:${result})`;
18468 }
18469
18470 let isPadded = hasPadding(min) || hasPadding(max);
18471 let state = { min, max, a, b };
18472 let positives = [];
18473 let negatives = [];
18474
18475 if (isPadded) {
18476 state.isPadded = isPadded;
18477 state.maxLen = String(state.max).length;
18478 }
18479
18480 if (a < 0) {
18481 let newMin = b < 0 ? Math.abs(b) : 1;
18482 negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
18483 a = state.a = 0;
18484 }
18485
18486 if (b >= 0) {
18487 positives = splitToPatterns(a, b, state, opts);
18488 }
18489
18490 state.negatives = negatives;
18491 state.positives = positives;
18492 state.result = collatePatterns(negatives, positives, opts);
18493
18494 if (opts.capture === true) {
18495 state.result = `(${state.result})`;
18496 } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
18497 state.result = `(?:${state.result})`;
18498 }
18499
18500 toRegexRange.cache[cacheKey] = state;
18501 return state.result;
18502};
18503
18504function collatePatterns(neg, pos, options) {
18505 let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
18506 let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
18507 let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
18508 let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
18509 return subpatterns.join('|');
18510}
18511
18512function splitToRanges(min, max) {
18513 let nines = 1;
18514 let zeros = 1;
18515
18516 let stop = countNines(min, nines);
18517 let stops = new Set([max]);
18518
18519 while (min <= stop && stop <= max) {
18520 stops.add(stop);
18521 nines += 1;
18522 stop = countNines(min, nines);
18523 }
18524
18525 stop = countZeros(max + 1, zeros) - 1;
18526
18527 while (min < stop && stop <= max) {
18528 stops.add(stop);
18529 zeros += 1;
18530 stop = countZeros(max + 1, zeros) - 1;
18531 }
18532
18533 stops = [...stops];
18534 stops.sort(compare);
18535 return stops;
18536}
18537
18538/**
18539 * Convert a range to a regex pattern
18540 * @param {Number} `start`
18541 * @param {Number} `stop`
18542 * @return {String}
18543 */
18544
18545function rangeToPattern(start, stop, options) {
18546 if (start === stop) {
18547 return { pattern: start, count: [], digits: 0 };
18548 }
18549
18550 let zipped = zip(start, stop);
18551 let digits = zipped.length;
18552 let pattern = '';
18553 let count = 0;
18554
18555 for (let i = 0; i < digits; i++) {
18556 let [startDigit, stopDigit] = zipped[i];
18557
18558 if (startDigit === stopDigit) {
18559 pattern += startDigit;
18560
18561 } else if (startDigit !== '0' || stopDigit !== '9') {
18562 pattern += toCharacterClass(startDigit, stopDigit, options);
18563
18564 } else {
18565 count++;
18566 }
18567 }
18568
18569 if (count) {
18570 pattern += options.shorthand === true ? '\\d' : '[0-9]';
18571 }
18572
18573 return { pattern, count: [count], digits };
18574}
18575
18576function splitToPatterns(min, max, tok, options) {
18577 let ranges = splitToRanges(min, max);
18578 let tokens = [];
18579 let start = min;
18580 let prev;
18581
18582 for (let i = 0; i < ranges.length; i++) {
18583 let max = ranges[i];
18584 let obj = rangeToPattern(String(start), String(max), options);
18585 let zeros = '';
18586
18587 if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
18588 if (prev.count.length > 1) {
18589 prev.count.pop();
18590 }
18591
18592 prev.count.push(obj.count[0]);
18593 prev.string = prev.pattern + toQuantifier(prev.count);
18594 start = max + 1;
18595 continue;
18596 }
18597
18598 if (tok.isPadded) {
18599 zeros = padZeros(max, tok, options);
18600 }
18601
18602 obj.string = zeros + obj.pattern + toQuantifier(obj.count);
18603 tokens.push(obj);
18604 start = max + 1;
18605 prev = obj;
18606 }
18607
18608 return tokens;
18609}
18610
18611function filterPatterns(arr, comparison, prefix, intersection, options) {
18612 let result = [];
18613
18614 for (let ele of arr) {
18615 let { string } = ele;
18616
18617 // only push if _both_ are negative...
18618 if (!intersection && !contains(comparison, 'string', string)) {
18619 result.push(prefix + string);
18620 }
18621
18622 // or _both_ are positive
18623 if (intersection && contains(comparison, 'string', string)) {
18624 result.push(prefix + string);
18625 }
18626 }
18627 return result;
18628}
18629
18630/**
18631 * Zip strings
18632 */
18633
18634function zip(a, b) {
18635 let arr = [];
18636 for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
18637 return arr;
18638}
18639
18640function compare(a, b) {
18641 return a > b ? 1 : b > a ? -1 : 0;
18642}
18643
18644function contains(arr, key, val) {
18645 return arr.some(ele => ele[key] === val);
18646}
18647
18648function countNines(min, len) {
18649 return Number(String(min).slice(0, -len) + '9'.repeat(len));
18650}
18651
18652function countZeros(integer, zeros) {
18653 return integer - (integer % Math.pow(10, zeros));
18654}
18655
18656function toQuantifier(digits) {
18657 let [start = 0, stop = ''] = digits;
18658 if (stop || start > 1) {
18659 return `{${start + (stop ? ',' + stop : '')}}`;
18660 }
18661 return '';
18662}
18663
18664function toCharacterClass(a, b, options) {
18665 return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
18666}
18667
18668function hasPadding(str) {
18669 return /^-?(0+)\d/.test(str);
18670}
18671
18672function padZeros(value, tok, options) {
18673 if (!tok.isPadded) {
18674 return value;
18675 }
18676
18677 let diff = Math.abs(tok.maxLen - String(value).length);
18678 let relax = options.relaxZeros !== false;
18679
18680 switch (diff) {
18681 case 0:
18682 return '';
18683 case 1:
18684 return relax ? '0?' : '0';
18685 case 2:
18686 return relax ? '0{0,2}' : '00';
18687 default: {
18688 return relax ? `0{0,${diff}}` : `0{${diff}}`;
18689 }
18690 }
18691}
18692
18693/**
18694 * Cache
18695 */
18696
18697toRegexRange.cache = {};
18698toRegexRange.clearCache = () => (toRegexRange.cache = {});
18699
18700/**
18701 * Expose `toRegexRange`
18702 */
18703
18704module.exports = toRegexRange;
18705
18706
18707/***/ }),
18708/* 96 */
18709/***/ ((module) => {
18710
18711"use strict";
18712/*!
18713 * is-number <https://github.com/jonschlinkert/is-number>
18714 *
18715 * Copyright (c) 2014-present, Jon Schlinkert.
18716 * Released under the MIT License.
18717 */
18718
18719
18720
18721module.exports = function(num) {
18722 if (typeof num === 'number') {
18723 return num - num === 0;
18724 }
18725 if (typeof num === 'string' && num.trim() !== '') {
18726 return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
18727 }
18728 return false;
18729};
18730
18731
18732/***/ }),
18733/* 97 */
18734/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18735
18736"use strict";
18737
18738
18739const fill = __webpack_require__(94);
18740const stringify = __webpack_require__(91);
18741const utils = __webpack_require__(92);
18742
18743const append = (queue = '', stash = '', enclose = false) => {
18744 let result = [];
18745
18746 queue = [].concat(queue);
18747 stash = [].concat(stash);
18748
18749 if (!stash.length) return queue;
18750 if (!queue.length) {
18751 return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
18752 }
18753
18754 for (let item of queue) {
18755 if (Array.isArray(item)) {
18756 for (let value of item) {
18757 result.push(append(value, stash, enclose));
18758 }
18759 } else {
18760 for (let ele of stash) {
18761 if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
18762 result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
18763 }
18764 }
18765 }
18766 return utils.flatten(result);
18767};
18768
18769const expand = (ast, options = {}) => {
18770 let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
18771
18772 let walk = (node, parent = {}) => {
18773 node.queue = [];
18774
18775 let p = parent;
18776 let q = parent.queue;
18777
18778 while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
18779 p = p.parent;
18780 q = p.queue;
18781 }
18782
18783 if (node.invalid || node.dollar) {
18784 q.push(append(q.pop(), stringify(node, options)));
18785 return;
18786 }
18787
18788 if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
18789 q.push(append(q.pop(), ['{}']));
18790 return;
18791 }
18792
18793 if (node.nodes && node.ranges > 0) {
18794 let args = utils.reduce(node.nodes);
18795
18796 if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
18797 throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
18798 }
18799
18800 let range = fill(...args, options);
18801 if (range.length === 0) {
18802 range = stringify(node, options);
18803 }
18804
18805 q.push(append(q.pop(), range));
18806 node.nodes = [];
18807 return;
18808 }
18809
18810 let enclose = utils.encloseBrace(node);
18811 let queue = node.queue;
18812 let block = node;
18813
18814 while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
18815 block = block.parent;
18816 queue = block.queue;
18817 }
18818
18819 for (let i = 0; i < node.nodes.length; i++) {
18820 let child = node.nodes[i];
18821
18822 if (child.type === 'comma' && node.type === 'brace') {
18823 if (i === 1) queue.push('');
18824 queue.push('');
18825 continue;
18826 }
18827
18828 if (child.type === 'close') {
18829 q.push(append(q.pop(), queue, enclose));
18830 continue;
18831 }
18832
18833 if (child.value && child.type !== 'open') {
18834 queue.push(append(queue.pop(), child.value));
18835 continue;
18836 }
18837
18838 if (child.nodes) {
18839 walk(child, node);
18840 }
18841 }
18842
18843 return queue;
18844 };
18845
18846 return utils.flatten(walk(ast));
18847};
18848
18849module.exports = expand;
18850
18851
18852/***/ }),
18853/* 98 */
18854/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
18855
18856"use strict";
18857
18858
18859const stringify = __webpack_require__(91);
18860
18861/**
18862 * Constants
18863 */
18864
18865const {
18866 MAX_LENGTH,
18867 CHAR_BACKSLASH, /* \ */
18868 CHAR_BACKTICK, /* ` */
18869 CHAR_COMMA, /* , */
18870 CHAR_DOT, /* . */
18871 CHAR_LEFT_PARENTHESES, /* ( */
18872 CHAR_RIGHT_PARENTHESES, /* ) */
18873 CHAR_LEFT_CURLY_BRACE, /* { */
18874 CHAR_RIGHT_CURLY_BRACE, /* } */
18875 CHAR_LEFT_SQUARE_BRACKET, /* [ */
18876 CHAR_RIGHT_SQUARE_BRACKET, /* ] */
18877 CHAR_DOUBLE_QUOTE, /* " */
18878 CHAR_SINGLE_QUOTE, /* ' */
18879 CHAR_NO_BREAK_SPACE,
18880 CHAR_ZERO_WIDTH_NOBREAK_SPACE
18881} = __webpack_require__(99);
18882
18883/**
18884 * parse
18885 */
18886
18887const parse = (input, options = {}) => {
18888 if (typeof input !== 'string') {
18889 throw new TypeError('Expected a string');
18890 }
18891
18892 let opts = options || {};
18893 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
18894 if (input.length > max) {
18895 throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
18896 }
18897
18898 let ast = { type: 'root', input, nodes: [] };
18899 let stack = [ast];
18900 let block = ast;
18901 let prev = ast;
18902 let brackets = 0;
18903 let length = input.length;
18904 let index = 0;
18905 let depth = 0;
18906 let value;
18907 let memo = {};
18908
18909 /**
18910 * Helpers
18911 */
18912
18913 const advance = () => input[index++];
18914 const push = node => {
18915 if (node.type === 'text' && prev.type === 'dot') {
18916 prev.type = 'text';
18917 }
18918
18919 if (prev && prev.type === 'text' && node.type === 'text') {
18920 prev.value += node.value;
18921 return;
18922 }
18923
18924 block.nodes.push(node);
18925 node.parent = block;
18926 node.prev = prev;
18927 prev = node;
18928 return node;
18929 };
18930
18931 push({ type: 'bos' });
18932
18933 while (index < length) {
18934 block = stack[stack.length - 1];
18935 value = advance();
18936
18937 /**
18938 * Invalid chars
18939 */
18940
18941 if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
18942 continue;
18943 }
18944
18945 /**
18946 * Escaped chars
18947 */
18948
18949 if (value === CHAR_BACKSLASH) {
18950 push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
18951 continue;
18952 }
18953
18954 /**
18955 * Right square bracket (literal): ']'
18956 */
18957
18958 if (value === CHAR_RIGHT_SQUARE_BRACKET) {
18959 push({ type: 'text', value: '\\' + value });
18960 continue;
18961 }
18962
18963 /**
18964 * Left square bracket: '['
18965 */
18966
18967 if (value === CHAR_LEFT_SQUARE_BRACKET) {
18968 brackets++;
18969
18970 let closed = true;
18971 let next;
18972
18973 while (index < length && (next = advance())) {
18974 value += next;
18975
18976 if (next === CHAR_LEFT_SQUARE_BRACKET) {
18977 brackets++;
18978 continue;
18979 }
18980
18981 if (next === CHAR_BACKSLASH) {
18982 value += advance();
18983 continue;
18984 }
18985
18986 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
18987 brackets--;
18988
18989 if (brackets === 0) {
18990 break;
18991 }
18992 }
18993 }
18994
18995 push({ type: 'text', value });
18996 continue;
18997 }
18998
18999 /**
19000 * Parentheses
19001 */
19002
19003 if (value === CHAR_LEFT_PARENTHESES) {
19004 block = push({ type: 'paren', nodes: [] });
19005 stack.push(block);
19006 push({ type: 'text', value });
19007 continue;
19008 }
19009
19010 if (value === CHAR_RIGHT_PARENTHESES) {
19011 if (block.type !== 'paren') {
19012 push({ type: 'text', value });
19013 continue;
19014 }
19015 block = stack.pop();
19016 push({ type: 'text', value });
19017 block = stack[stack.length - 1];
19018 continue;
19019 }
19020
19021 /**
19022 * Quotes: '|"|`
19023 */
19024
19025 if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
19026 let open = value;
19027 let next;
19028
19029 if (options.keepQuotes !== true) {
19030 value = '';
19031 }
19032
19033 while (index < length && (next = advance())) {
19034 if (next === CHAR_BACKSLASH) {
19035 value += next + advance();
19036 continue;
19037 }
19038
19039 if (next === open) {
19040 if (options.keepQuotes === true) value += next;
19041 break;
19042 }
19043
19044 value += next;
19045 }
19046
19047 push({ type: 'text', value });
19048 continue;
19049 }
19050
19051 /**
19052 * Left curly brace: '{'
19053 */
19054
19055 if (value === CHAR_LEFT_CURLY_BRACE) {
19056 depth++;
19057
19058 let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
19059 let brace = {
19060 type: 'brace',
19061 open: true,
19062 close: false,
19063 dollar,
19064 depth,
19065 commas: 0,
19066 ranges: 0,
19067 nodes: []
19068 };
19069
19070 block = push(brace);
19071 stack.push(block);
19072 push({ type: 'open', value });
19073 continue;
19074 }
19075
19076 /**
19077 * Right curly brace: '}'
19078 */
19079
19080 if (value === CHAR_RIGHT_CURLY_BRACE) {
19081 if (block.type !== 'brace') {
19082 push({ type: 'text', value });
19083 continue;
19084 }
19085
19086 let type = 'close';
19087 block = stack.pop();
19088 block.close = true;
19089
19090 push({ type, value });
19091 depth--;
19092
19093 block = stack[stack.length - 1];
19094 continue;
19095 }
19096
19097 /**
19098 * Comma: ','
19099 */
19100
19101 if (value === CHAR_COMMA && depth > 0) {
19102 if (block.ranges > 0) {
19103 block.ranges = 0;
19104 let open = block.nodes.shift();
19105 block.nodes = [open, { type: 'text', value: stringify(block) }];
19106 }
19107
19108 push({ type: 'comma', value });
19109 block.commas++;
19110 continue;
19111 }
19112
19113 /**
19114 * Dot: '.'
19115 */
19116
19117 if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
19118 let siblings = block.nodes;
19119
19120 if (depth === 0 || siblings.length === 0) {
19121 push({ type: 'text', value });
19122 continue;
19123 }
19124
19125 if (prev.type === 'dot') {
19126 block.range = [];
19127 prev.value += value;
19128 prev.type = 'range';
19129
19130 if (block.nodes.length !== 3 && block.nodes.length !== 5) {
19131 block.invalid = true;
19132 block.ranges = 0;
19133 prev.type = 'text';
19134 continue;
19135 }
19136
19137 block.ranges++;
19138 block.args = [];
19139 continue;
19140 }
19141
19142 if (prev.type === 'range') {
19143 siblings.pop();
19144
19145 let before = siblings[siblings.length - 1];
19146 before.value += prev.value + value;
19147 prev = before;
19148 block.ranges--;
19149 continue;
19150 }
19151
19152 push({ type: 'dot', value });
19153 continue;
19154 }
19155
19156 /**
19157 * Text
19158 */
19159
19160 push({ type: 'text', value });
19161 }
19162
19163 // Mark imbalanced braces and brackets as invalid
19164 do {
19165 block = stack.pop();
19166
19167 if (block.type !== 'root') {
19168 block.nodes.forEach(node => {
19169 if (!node.nodes) {
19170 if (node.type === 'open') node.isOpen = true;
19171 if (node.type === 'close') node.isClose = true;
19172 if (!node.nodes) node.type = 'text';
19173 node.invalid = true;
19174 }
19175 });
19176
19177 // get the location of the block on parent.nodes (block's siblings)
19178 let parent = stack[stack.length - 1];
19179 let index = parent.nodes.indexOf(block);
19180 // replace the (invalid) block with it's nodes
19181 parent.nodes.splice(index, 1, ...block.nodes);
19182 }
19183 } while (stack.length > 0);
19184
19185 push({ type: 'eos' });
19186 return ast;
19187};
19188
19189module.exports = parse;
19190
19191
19192/***/ }),
19193/* 99 */
19194/***/ ((module) => {
19195
19196"use strict";
19197
19198
19199module.exports = {
19200 MAX_LENGTH: 1024 * 64,
19201
19202 // Digits
19203 CHAR_0: '0', /* 0 */
19204 CHAR_9: '9', /* 9 */
19205
19206 // Alphabet chars.
19207 CHAR_UPPERCASE_A: 'A', /* A */
19208 CHAR_LOWERCASE_A: 'a', /* a */
19209 CHAR_UPPERCASE_Z: 'Z', /* Z */
19210 CHAR_LOWERCASE_Z: 'z', /* z */
19211
19212 CHAR_LEFT_PARENTHESES: '(', /* ( */
19213 CHAR_RIGHT_PARENTHESES: ')', /* ) */
19214
19215 CHAR_ASTERISK: '*', /* * */
19216
19217 // Non-alphabetic chars.
19218 CHAR_AMPERSAND: '&', /* & */
19219 CHAR_AT: '@', /* @ */
19220 CHAR_BACKSLASH: '\\', /* \ */
19221 CHAR_BACKTICK: '`', /* ` */
19222 CHAR_CARRIAGE_RETURN: '\r', /* \r */
19223 CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
19224 CHAR_COLON: ':', /* : */
19225 CHAR_COMMA: ',', /* , */
19226 CHAR_DOLLAR: '$', /* . */
19227 CHAR_DOT: '.', /* . */
19228 CHAR_DOUBLE_QUOTE: '"', /* " */
19229 CHAR_EQUAL: '=', /* = */
19230 CHAR_EXCLAMATION_MARK: '!', /* ! */
19231 CHAR_FORM_FEED: '\f', /* \f */
19232 CHAR_FORWARD_SLASH: '/', /* / */
19233 CHAR_HASH: '#', /* # */
19234 CHAR_HYPHEN_MINUS: '-', /* - */
19235 CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
19236 CHAR_LEFT_CURLY_BRACE: '{', /* { */
19237 CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
19238 CHAR_LINE_FEED: '\n', /* \n */
19239 CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
19240 CHAR_PERCENT: '%', /* % */
19241 CHAR_PLUS: '+', /* + */
19242 CHAR_QUESTION_MARK: '?', /* ? */
19243 CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
19244 CHAR_RIGHT_CURLY_BRACE: '}', /* } */
19245 CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
19246 CHAR_SEMICOLON: ';', /* ; */
19247 CHAR_SINGLE_QUOTE: '\'', /* ' */
19248 CHAR_SPACE: ' ', /* */
19249 CHAR_TAB: '\t', /* \t */
19250 CHAR_UNDERSCORE: '_', /* _ */
19251 CHAR_VERTICAL_LINE: '|', /* | */
19252 CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
19253};
19254
19255
19256/***/ }),
19257/* 100 */
19258/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19259
19260"use strict";
19261
19262
19263module.exports = __webpack_require__(101);
19264
19265
19266/***/ }),
19267/* 101 */
19268/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19269
19270"use strict";
19271
19272
19273const path = __webpack_require__(23);
19274const scan = __webpack_require__(102);
19275const parse = __webpack_require__(105);
19276const utils = __webpack_require__(103);
19277
19278/**
19279 * Creates a matcher function from one or more glob patterns. The
19280 * returned function takes a string to match as its first argument,
19281 * and returns true if the string is a match. The returned matcher
19282 * function also takes a boolean as the second argument that, when true,
19283 * returns an object with additional information.
19284 *
19285 * ```js
19286 * const picomatch = require('picomatch');
19287 * // picomatch(glob[, options]);
19288 *
19289 * const isMatch = picomatch('*.!(*a)');
19290 * console.log(isMatch('a.a')); //=> false
19291 * console.log(isMatch('a.b')); //=> true
19292 * ```
19293 * @name picomatch
19294 * @param {String|Array} `globs` One or more glob patterns.
19295 * @param {Object=} `options`
19296 * @return {Function=} Returns a matcher function.
19297 * @api public
19298 */
19299
19300const picomatch = (glob, options, returnState = false) => {
19301 if (Array.isArray(glob)) {
19302 let fns = glob.map(input => picomatch(input, options, returnState));
19303 return str => {
19304 for (let isMatch of fns) {
19305 let state = isMatch(str);
19306 if (state) return state;
19307 }
19308 return false;
19309 };
19310 }
19311
19312 if (typeof glob !== 'string' || glob === '') {
19313 throw new TypeError('Expected pattern to be a non-empty string');
19314 }
19315
19316 let opts = options || {};
19317 let posix = utils.isWindows(options);
19318 let regex = picomatch.makeRe(glob, options, false, true);
19319 let state = regex.state;
19320 delete regex.state;
19321
19322 let isIgnored = () => false;
19323 if (opts.ignore) {
19324 let ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
19325 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
19326 }
19327
19328 const matcher = (input, returnObject = false) => {
19329 let { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
19330 let result = { glob, state, regex, posix, input, output, match, isMatch };
19331
19332 if (typeof opts.onResult === 'function') {
19333 opts.onResult(result);
19334 }
19335
19336 if (isMatch === false) {
19337 result.isMatch = false;
19338 return returnObject ? result : false;
19339 }
19340
19341 if (isIgnored(input)) {
19342 if (typeof opts.onIgnore === 'function') {
19343 opts.onIgnore(result);
19344 }
19345 result.isMatch = false;
19346 return returnObject ? result : false;
19347 }
19348
19349 if (typeof opts.onMatch === 'function') {
19350 opts.onMatch(result);
19351 }
19352 return returnObject ? result : true;
19353 };
19354
19355 if (returnState) {
19356 matcher.state = state;
19357 }
19358
19359 return matcher;
19360};
19361
19362/**
19363 * Test `input` with the given `regex`. This is used by the main
19364 * `picomatch()` function to test the input string.
19365 *
19366 * ```js
19367 * const picomatch = require('picomatch');
19368 * // picomatch.test(input, regex[, options]);
19369 *
19370 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
19371 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
19372 * ```
19373 * @param {String} `input` String to test.
19374 * @param {RegExp} `regex`
19375 * @return {Object} Returns an object with matching info.
19376 * @api public
19377 */
19378
19379picomatch.test = (input, regex, options, { glob, posix } = {}) => {
19380 if (typeof input !== 'string') {
19381 throw new TypeError('Expected input to be a string');
19382 }
19383
19384 if (input === '') {
19385 return { isMatch: false, output: '' };
19386 }
19387
19388 let opts = options || {};
19389 let format = opts.format || (posix ? utils.toPosixSlashes : null);
19390 let match = input === glob;
19391 let output = (match && format) ? format(input) : input;
19392
19393 if (match === false) {
19394 output = format ? format(input) : input;
19395 match = output === glob;
19396 }
19397
19398 if (match === false || opts.capture === true) {
19399 if (opts.matchBase === true || opts.basename === true) {
19400 match = picomatch.matchBase(input, regex, options, posix);
19401 } else {
19402 match = regex.exec(output);
19403 }
19404 }
19405
19406 return { isMatch: !!match, match, output };
19407};
19408
19409/**
19410 * Match the basename of a filepath.
19411 *
19412 * ```js
19413 * const picomatch = require('picomatch');
19414 * // picomatch.matchBase(input, glob[, options]);
19415 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
19416 * ```
19417 * @param {String} `input` String to test.
19418 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
19419 * @return {Boolean}
19420 * @api public
19421 */
19422
19423picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
19424 let regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
19425 return regex.test(path.basename(input));
19426};
19427
19428/**
19429 * Returns true if **any** of the given glob `patterns` match the specified `string`.
19430 *
19431 * ```js
19432 * const picomatch = require('picomatch');
19433 * // picomatch.isMatch(string, patterns[, options]);
19434 *
19435 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
19436 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
19437 * ```
19438 * @param {String|Array} str The string to test.
19439 * @param {String|Array} patterns One or more glob patterns to use for matching.
19440 * @param {Object} [options] See available [options](#options).
19441 * @return {Boolean} Returns true if any patterns match `str`
19442 * @api public
19443 */
19444
19445picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
19446
19447/**
19448 * Parse a glob pattern to create the source string for a regular
19449 * expression.
19450 *
19451 * ```js
19452 * const picomatch = require('picomatch');
19453 * const result = picomatch.parse(glob[, options]);
19454 * ```
19455 * @param {String} `glob`
19456 * @param {Object} `options`
19457 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
19458 * @api public
19459 */
19460
19461picomatch.parse = (glob, options) => parse(glob, options);
19462
19463/**
19464 * Scan a glob pattern to separate the pattern into segments.
19465 *
19466 * ```js
19467 * const picomatch = require('picomatch');
19468 * // picomatch.scan(input[, options]);
19469 *
19470 * const result = picomatch.scan('!./foo/*.js');
19471 * console.log(result);
19472 * // { prefix: '!./',
19473 * // input: '!./foo/*.js',
19474 * // base: 'foo',
19475 * // glob: '*.js',
19476 * // negated: true,
19477 * // isGlob: true }
19478 * ```
19479 * @param {String} `input` Glob pattern to scan.
19480 * @param {Object} `options`
19481 * @return {Object} Returns an object with
19482 * @api public
19483 */
19484
19485picomatch.scan = (input, options) => scan(input, options);
19486
19487/**
19488 * Create a regular expression from a glob pattern.
19489 *
19490 * ```js
19491 * const picomatch = require('picomatch');
19492 * // picomatch.makeRe(input[, options]);
19493 *
19494 * console.log(picomatch.makeRe('*.js'));
19495 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19496 * ```
19497 * @param {String} `input` A glob pattern to convert to regex.
19498 * @param {Object} `options`
19499 * @return {RegExp} Returns a regex created from the given pattern.
19500 * @api public
19501 */
19502
19503picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
19504 if (!input || typeof input !== 'string') {
19505 throw new TypeError('Expected a non-empty string');
19506 }
19507
19508 let opts = options || {};
19509 let prepend = opts.contains ? '' : '^';
19510 let append = opts.contains ? '' : '$';
19511 let state = { negated: false, fastpaths: true };
19512 let prefix = '';
19513 let output;
19514
19515 if (input.startsWith('./')) {
19516 input = input.slice(2);
19517 prefix = state.prefix = './';
19518 }
19519
19520 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
19521 output = parse.fastpaths(input, options);
19522 }
19523
19524 if (output === void 0) {
19525 state = picomatch.parse(input, options);
19526 state.prefix = prefix + (state.prefix || '');
19527 output = state.output;
19528 }
19529
19530 if (returnOutput === true) {
19531 return output;
19532 }
19533
19534 let source = `${prepend}(?:${output})${append}`;
19535 if (state && state.negated === true) {
19536 source = `^(?!${source}).*$`;
19537 }
19538
19539 let regex = picomatch.toRegex(source, options);
19540 if (returnState === true) {
19541 regex.state = state;
19542 }
19543
19544 return regex;
19545};
19546
19547/**
19548 * Create a regular expression from the given regex source string.
19549 *
19550 * ```js
19551 * const picomatch = require('picomatch');
19552 * // picomatch.toRegex(source[, options]);
19553 *
19554 * const { output } = picomatch.parse('*.js');
19555 * console.log(picomatch.toRegex(output));
19556 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19557 * ```
19558 * @param {String} `source` Regular expression source string.
19559 * @param {Object} `options`
19560 * @return {RegExp}
19561 * @api public
19562 */
19563
19564picomatch.toRegex = (source, options) => {
19565 try {
19566 let opts = options || {};
19567 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
19568 } catch (err) {
19569 if (options && options.debug === true) throw err;
19570 return /$^/;
19571 }
19572};
19573
19574/**
19575 * Picomatch constants.
19576 * @return {Object}
19577 */
19578
19579picomatch.constants = __webpack_require__(104);
19580
19581/**
19582 * Expose "picomatch"
19583 */
19584
19585module.exports = picomatch;
19586
19587
19588/***/ }),
19589/* 102 */
19590/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19591
19592"use strict";
19593
19594
19595const utils = __webpack_require__(103);
19596
19597const {
19598 CHAR_ASTERISK, /* * */
19599 CHAR_AT, /* @ */
19600 CHAR_BACKWARD_SLASH, /* \ */
19601 CHAR_COMMA, /* , */
19602 CHAR_DOT, /* . */
19603 CHAR_EXCLAMATION_MARK, /* ! */
19604 CHAR_FORWARD_SLASH, /* / */
19605 CHAR_LEFT_CURLY_BRACE, /* { */
19606 CHAR_LEFT_PARENTHESES, /* ( */
19607 CHAR_LEFT_SQUARE_BRACKET, /* [ */
19608 CHAR_PLUS, /* + */
19609 CHAR_QUESTION_MARK, /* ? */
19610 CHAR_RIGHT_CURLY_BRACE, /* } */
19611 CHAR_RIGHT_PARENTHESES, /* ) */
19612 CHAR_RIGHT_SQUARE_BRACKET /* ] */
19613} = __webpack_require__(104);
19614
19615const isPathSeparator = code => {
19616 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
19617};
19618
19619/**
19620 * Quickly scans a glob pattern and returns an object with a handful of
19621 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
19622 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
19623 *
19624 * ```js
19625 * const pm = require('picomatch');
19626 * console.log(pm.scan('foo/bar/*.js'));
19627 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
19628 * ```
19629 * @param {String} `str`
19630 * @param {Object} `options`
19631 * @return {Object} Returns an object with tokens and regex source string.
19632 * @api public
19633 */
19634
19635module.exports = (input, options) => {
19636 let opts = options || {};
19637 let length = input.length - 1;
19638 let index = -1;
19639 let start = 0;
19640 let lastIndex = 0;
19641 let isGlob = false;
19642 let backslashes = false;
19643 let negated = false;
19644 let braces = 0;
19645 let prev;
19646 let code;
19647
19648 let braceEscaped = false;
19649
19650 let eos = () => index >= length;
19651 let advance = () => {
19652 prev = code;
19653 return input.charCodeAt(++index);
19654 };
19655
19656 while (index < length) {
19657 code = advance();
19658 let next;
19659
19660 if (code === CHAR_BACKWARD_SLASH) {
19661 backslashes = true;
19662 next = advance();
19663
19664 if (next === CHAR_LEFT_CURLY_BRACE) {
19665 braceEscaped = true;
19666 }
19667 continue;
19668 }
19669
19670 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
19671 braces++;
19672
19673 while (!eos() && (next = advance())) {
19674 if (next === CHAR_BACKWARD_SLASH) {
19675 backslashes = true;
19676 next = advance();
19677 continue;
19678 }
19679
19680 if (next === CHAR_LEFT_CURLY_BRACE) {
19681 braces++;
19682 continue;
19683 }
19684
19685 if (!braceEscaped && next === CHAR_DOT && (next = advance()) === CHAR_DOT) {
19686 isGlob = true;
19687 break;
19688 }
19689
19690 if (!braceEscaped && next === CHAR_COMMA) {
19691 isGlob = true;
19692 break;
19693 }
19694
19695 if (next === CHAR_RIGHT_CURLY_BRACE) {
19696 braces--;
19697 if (braces === 0) {
19698 braceEscaped = false;
19699 break;
19700 }
19701 }
19702 }
19703 }
19704
19705 if (code === CHAR_FORWARD_SLASH) {
19706 if (prev === CHAR_DOT && index === (start + 1)) {
19707 start += 2;
19708 continue;
19709 }
19710
19711 lastIndex = index + 1;
19712 continue;
19713 }
19714
19715 if (code === CHAR_ASTERISK) {
19716 isGlob = true;
19717 break;
19718 }
19719
19720 if (code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK) {
19721 isGlob = true;
19722 break;
19723 }
19724
19725 if (code === CHAR_LEFT_SQUARE_BRACKET) {
19726 while (!eos() && (next = advance())) {
19727 if (next === CHAR_BACKWARD_SLASH) {
19728 backslashes = true;
19729 next = advance();
19730 continue;
19731 }
19732
19733 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
19734 isGlob = true;
19735 break;
19736 }
19737 }
19738 }
19739
19740 let isExtglobChar = code === CHAR_PLUS
19741 || code === CHAR_AT
19742 || code === CHAR_EXCLAMATION_MARK;
19743
19744 if (isExtglobChar && input.charCodeAt(index + 1) === CHAR_LEFT_PARENTHESES) {
19745 isGlob = true;
19746 break;
19747 }
19748
19749 if (code === CHAR_EXCLAMATION_MARK && index === start) {
19750 negated = true;
19751 start++;
19752 continue;
19753 }
19754
19755 if (code === CHAR_LEFT_PARENTHESES) {
19756 while (!eos() && (next = advance())) {
19757 if (next === CHAR_BACKWARD_SLASH) {
19758 backslashes = true;
19759 next = advance();
19760 continue;
19761 }
19762
19763 if (next === CHAR_RIGHT_PARENTHESES) {
19764 isGlob = true;
19765 break;
19766 }
19767 }
19768 }
19769
19770 if (isGlob) {
19771 break;
19772 }
19773 }
19774
19775 let prefix = '';
19776 let orig = input;
19777 let base = input;
19778 let glob = '';
19779
19780 if (start > 0) {
19781 prefix = input.slice(0, start);
19782 input = input.slice(start);
19783 lastIndex -= start;
19784 }
19785
19786 if (base && isGlob === true && lastIndex > 0) {
19787 base = input.slice(0, lastIndex);
19788 glob = input.slice(lastIndex);
19789 } else if (isGlob === true) {
19790 base = '';
19791 glob = input;
19792 } else {
19793 base = input;
19794 }
19795
19796 if (base && base !== '' && base !== '/' && base !== input) {
19797 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
19798 base = base.slice(0, -1);
19799 }
19800 }
19801
19802 if (opts.unescape === true) {
19803 if (glob) glob = utils.removeBackslashes(glob);
19804
19805 if (base && backslashes === true) {
19806 base = utils.removeBackslashes(base);
19807 }
19808 }
19809
19810 return { prefix, input: orig, base, glob, negated, isGlob };
19811};
19812
19813
19814/***/ }),
19815/* 103 */
19816/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
19817
19818"use strict";
19819
19820
19821const path = __webpack_require__(23);
19822const win32 = process.platform === 'win32';
19823const {
19824 REGEX_SPECIAL_CHARS,
19825 REGEX_SPECIAL_CHARS_GLOBAL,
19826 REGEX_REMOVE_BACKSLASH
19827} = __webpack_require__(104);
19828
19829exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
19830exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
19831exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
19832exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
19833exports.toPosixSlashes = str => str.replace(/\\/g, '/');
19834
19835exports.removeBackslashes = str => {
19836 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
19837 return match === '\\' ? '' : match;
19838 });
19839}
19840
19841exports.supportsLookbehinds = () => {
19842 let segs = process.version.slice(1).split('.');
19843 if (segs.length === 3 && +segs[0] >= 9 || (+segs[0] === 8 && +segs[1] >= 10)) {
19844 return true;
19845 }
19846 return false;
19847};
19848
19849exports.isWindows = options => {
19850 if (options && typeof options.windows === 'boolean') {
19851 return options.windows;
19852 }
19853 return win32 === true || path.sep === '\\';
19854};
19855
19856exports.escapeLast = (input, char, lastIdx) => {
19857 let idx = input.lastIndexOf(char, lastIdx);
19858 if (idx === -1) return input;
19859 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
19860 return input.slice(0, idx) + '\\' + input.slice(idx);
19861};
19862
19863
19864/***/ }),
19865/* 104 */
19866/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
19867
19868"use strict";
19869
19870
19871const path = __webpack_require__(23);
19872const WIN_SLASH = '\\\\/';
19873const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
19874
19875/**
19876 * Posix glob regex
19877 */
19878
19879const DOT_LITERAL = '\\.';
19880const PLUS_LITERAL = '\\+';
19881const QMARK_LITERAL = '\\?';
19882const SLASH_LITERAL = '\\/';
19883const ONE_CHAR = '(?=.)';
19884const QMARK = '[^/]';
19885const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
19886const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
19887const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
19888const NO_DOT = `(?!${DOT_LITERAL})`;
19889const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
19890const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
19891const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
19892const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
19893const STAR = `${QMARK}*?`;
19894
19895const POSIX_CHARS = {
19896 DOT_LITERAL,
19897 PLUS_LITERAL,
19898 QMARK_LITERAL,
19899 SLASH_LITERAL,
19900 ONE_CHAR,
19901 QMARK,
19902 END_ANCHOR,
19903 DOTS_SLASH,
19904 NO_DOT,
19905 NO_DOTS,
19906 NO_DOT_SLASH,
19907 NO_DOTS_SLASH,
19908 QMARK_NO_DOT,
19909 STAR,
19910 START_ANCHOR
19911};
19912
19913/**
19914 * Windows glob regex
19915 */
19916
19917const WINDOWS_CHARS = {
19918 ...POSIX_CHARS,
19919
19920 SLASH_LITERAL: `[${WIN_SLASH}]`,
19921 QMARK: WIN_NO_SLASH,
19922 STAR: `${WIN_NO_SLASH}*?`,
19923 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
19924 NO_DOT: `(?!${DOT_LITERAL})`,
19925 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
19926 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
19927 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
19928 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
19929 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
19930 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
19931};
19932
19933/**
19934 * POSIX Bracket Regex
19935 */
19936
19937const POSIX_REGEX_SOURCE = {
19938 alnum: 'a-zA-Z0-9',
19939 alpha: 'a-zA-Z',
19940 ascii: '\\x00-\\x7F',
19941 blank: ' \\t',
19942 cntrl: '\\x00-\\x1F\\x7F',
19943 digit: '0-9',
19944 graph: '\\x21-\\x7E',
19945 lower: 'a-z',
19946 print: '\\x20-\\x7E ',
19947 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
19948 space: ' \\t\\r\\n\\v\\f',
19949 upper: 'A-Z',
19950 word: 'A-Za-z0-9_',
19951 xdigit: 'A-Fa-f0-9'
19952};
19953
19954module.exports = {
19955 MAX_LENGTH: 1024 * 64,
19956 POSIX_REGEX_SOURCE,
19957
19958 // regular expressions
19959 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
19960 REGEX_NON_SPECIAL_CHAR: /^[^@![\].,$*+?^{}()|\\/]+/,
19961 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
19962 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
19963 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
19964 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
19965
19966 // Replace globs with equivalent patterns to reduce parsing time.
19967 REPLACEMENTS: {
19968 '***': '*',
19969 '**/**': '**',
19970 '**/**/**': '**'
19971 },
19972
19973 // Digits
19974 CHAR_0: 48, /* 0 */
19975 CHAR_9: 57, /* 9 */
19976
19977 // Alphabet chars.
19978 CHAR_UPPERCASE_A: 65, /* A */
19979 CHAR_LOWERCASE_A: 97, /* a */
19980 CHAR_UPPERCASE_Z: 90, /* Z */
19981 CHAR_LOWERCASE_Z: 122, /* z */
19982
19983 CHAR_LEFT_PARENTHESES: 40, /* ( */
19984 CHAR_RIGHT_PARENTHESES: 41, /* ) */
19985
19986 CHAR_ASTERISK: 42, /* * */
19987
19988 // Non-alphabetic chars.
19989 CHAR_AMPERSAND: 38, /* & */
19990 CHAR_AT: 64, /* @ */
19991 CHAR_BACKWARD_SLASH: 92, /* \ */
19992 CHAR_CARRIAGE_RETURN: 13, /* \r */
19993 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
19994 CHAR_COLON: 58, /* : */
19995 CHAR_COMMA: 44, /* , */
19996 CHAR_DOT: 46, /* . */
19997 CHAR_DOUBLE_QUOTE: 34, /* " */
19998 CHAR_EQUAL: 61, /* = */
19999 CHAR_EXCLAMATION_MARK: 33, /* ! */
20000 CHAR_FORM_FEED: 12, /* \f */
20001 CHAR_FORWARD_SLASH: 47, /* / */
20002 CHAR_GRAVE_ACCENT: 96, /* ` */
20003 CHAR_HASH: 35, /* # */
20004 CHAR_HYPHEN_MINUS: 45, /* - */
20005 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
20006 CHAR_LEFT_CURLY_BRACE: 123, /* { */
20007 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
20008 CHAR_LINE_FEED: 10, /* \n */
20009 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
20010 CHAR_PERCENT: 37, /* % */
20011 CHAR_PLUS: 43, /* + */
20012 CHAR_QUESTION_MARK: 63, /* ? */
20013 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
20014 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
20015 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
20016 CHAR_SEMICOLON: 59, /* ; */
20017 CHAR_SINGLE_QUOTE: 39, /* ' */
20018 CHAR_SPACE: 32, /* */
20019 CHAR_TAB: 9, /* \t */
20020 CHAR_UNDERSCORE: 95, /* _ */
20021 CHAR_VERTICAL_LINE: 124, /* | */
20022 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
20023
20024 SEP: path.sep,
20025
20026 /**
20027 * Create EXTGLOB_CHARS
20028 */
20029
20030 extglobChars(chars) {
20031 return {
20032 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
20033 '?': { type: 'qmark', open: '(?:', close: ')?' },
20034 '+': { type: 'plus', open: '(?:', close: ')+' },
20035 '*': { type: 'star', open: '(?:', close: ')*' },
20036 '@': { type: 'at', open: '(?:', close: ')' }
20037 };
20038 },
20039
20040 /**
20041 * Create GLOB_CHARS
20042 */
20043
20044 globChars(win32) {
20045 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
20046 }
20047};
20048
20049
20050/***/ }),
20051/* 105 */
20052/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
20053
20054"use strict";
20055
20056
20057const utils = __webpack_require__(103);
20058const constants = __webpack_require__(104);
20059
20060/**
20061 * Constants
20062 */
20063
20064const {
20065 MAX_LENGTH,
20066 POSIX_REGEX_SOURCE,
20067 REGEX_NON_SPECIAL_CHAR,
20068 REGEX_SPECIAL_CHARS_BACKREF,
20069 REPLACEMENTS
20070} = constants;
20071
20072/**
20073 * Helpers
20074 */
20075
20076const expandRange = (args, options) => {
20077 if (typeof options.expandRange === 'function') {
20078 return options.expandRange(...args, options);
20079 }
20080
20081 args.sort();
20082 let value = `[${args.join('-')}]`;
20083
20084 try {
20085 /* eslint-disable no-new */
20086 new RegExp(value);
20087 } catch (ex) {
20088 return args.map(v => utils.escapeRegex(v)).join('..');
20089 }
20090
20091 return value;
20092};
20093
20094const negate = state => {
20095 let count = 1;
20096
20097 while (state.peek() === '!' && (state.peek(2) !== '(' || state.peek(3) === '?')) {
20098 state.advance();
20099 state.start++;
20100 count++;
20101 }
20102
20103 if (count % 2 === 0) {
20104 return false;
20105 }
20106
20107 state.negated = true;
20108 state.start++;
20109 return true;
20110};
20111
20112/**
20113 * Create the message for a syntax error
20114 */
20115
20116const syntaxError = (type, char) => {
20117 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
20118};
20119
20120/**
20121 * Parse the given input string.
20122 * @param {String} input
20123 * @param {Object} options
20124 * @return {Object}
20125 */
20126
20127const parse = (input, options) => {
20128 if (typeof input !== 'string') {
20129 throw new TypeError('Expected a string');
20130 }
20131
20132 input = REPLACEMENTS[input] || input;
20133
20134 let opts = { ...options };
20135 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
20136 let len = input.length;
20137 if (len > max) {
20138 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
20139 }
20140
20141 let bos = { type: 'bos', value: '', output: opts.prepend || '' };
20142 let tokens = [bos];
20143
20144 let capture = opts.capture ? '' : '?:';
20145 let win32 = utils.isWindows(options);
20146
20147 // create constants based on platform, for windows or posix
20148 const PLATFORM_CHARS = constants.globChars(win32);
20149 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
20150
20151 const {
20152 DOT_LITERAL,
20153 PLUS_LITERAL,
20154 SLASH_LITERAL,
20155 ONE_CHAR,
20156 DOTS_SLASH,
20157 NO_DOT,
20158 NO_DOT_SLASH,
20159 NO_DOTS_SLASH,
20160 QMARK,
20161 QMARK_NO_DOT,
20162 STAR,
20163 START_ANCHOR
20164 } = PLATFORM_CHARS;
20165
20166 const globstar = (opts) => {
20167 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
20168 };
20169
20170 let nodot = opts.dot ? '' : NO_DOT;
20171 let star = opts.bash === true ? globstar(opts) : STAR;
20172 let qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
20173
20174 if (opts.capture) {
20175 star = `(${star})`;
20176 }
20177
20178 // minimatch options support
20179 if (typeof opts.noext === 'boolean') {
20180 opts.noextglob = opts.noext;
20181 }
20182
20183 let state = {
20184 index: -1,
20185 start: 0,
20186 consumed: '',
20187 output: '',
20188 backtrack: false,
20189 brackets: 0,
20190 braces: 0,
20191 parens: 0,
20192 quotes: 0,
20193 tokens
20194 };
20195
20196 let extglobs = [];
20197 let stack = [];
20198 let prev = bos;
20199 let value;
20200
20201 /**
20202 * Tokenizing helpers
20203 */
20204
20205 const eos = () => state.index === len - 1;
20206 const peek = state.peek = (n = 1) => input[state.index + n];
20207 const advance = state.advance = () => input[++state.index];
20208 const append = token => {
20209 state.output += token.output != null ? token.output : token.value;
20210 state.consumed += token.value || '';
20211 };
20212
20213 const increment = type => {
20214 state[type]++;
20215 stack.push(type);
20216 };
20217
20218 const decrement = type => {
20219 state[type]--;
20220 stack.pop();
20221 };
20222
20223 /**
20224 * Push tokens onto the tokens array. This helper speeds up
20225 * tokenizing by 1) helping us avoid backtracking as much as possible,
20226 * and 2) helping us avoid creating extra tokens when consecutive
20227 * characters are plain text. This improves performance and simplifies
20228 * lookbehinds.
20229 */
20230
20231 const push = tok => {
20232 if (prev.type === 'globstar') {
20233 let isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
20234 let isExtglob = extglobs.length && (tok.type === 'pipe' || tok.type === 'paren');
20235 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
20236 state.output = state.output.slice(0, -prev.output.length);
20237 prev.type = 'star';
20238 prev.value = '*';
20239 prev.output = star;
20240 state.output += prev.output;
20241 }
20242 }
20243
20244 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
20245 extglobs[extglobs.length - 1].inner += tok.value;
20246 }
20247
20248 if (tok.value || tok.output) append(tok);
20249 if (prev && prev.type === 'text' && tok.type === 'text') {
20250 prev.value += tok.value;
20251 return;
20252 }
20253
20254 tok.prev = prev;
20255 tokens.push(tok);
20256 prev = tok;
20257 };
20258
20259 const extglobOpen = (type, value) => {
20260 let token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
20261
20262 token.prev = prev;
20263 token.parens = state.parens;
20264 token.output = state.output;
20265 let output = (opts.capture ? '(' : '') + token.open;
20266
20267 push({ type, value, output: state.output ? '' : ONE_CHAR });
20268 push({ type: 'paren', extglob: true, value: advance(), output });
20269 increment('parens');
20270 extglobs.push(token);
20271 };
20272
20273 const extglobClose = token => {
20274 let output = token.close + (opts.capture ? ')' : '');
20275
20276 if (token.type === 'negate') {
20277 let extglobStar = star;
20278
20279 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
20280 extglobStar = globstar(opts);
20281 }
20282
20283 if (extglobStar !== star || eos() || /^\)+$/.test(input.slice(state.index + 1))) {
20284 output = token.close = ')$))' + extglobStar;
20285 }
20286
20287 if (token.prev.type === 'bos' && eos()) {
20288 state.negatedExtglob = true;
20289 }
20290 }
20291
20292 push({ type: 'paren', extglob: true, value, output });
20293 decrement('parens');
20294 };
20295
20296 if (opts.fastpaths !== false && !/(^[*!]|[/{[()\]}"])/.test(input)) {
20297 let backslashes = false;
20298
20299 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
20300 if (first === '\\') {
20301 backslashes = true;
20302 return m;
20303 }
20304
20305 if (first === '?') {
20306 if (esc) {
20307 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
20308 }
20309 if (index === 0) {
20310 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
20311 }
20312 return QMARK.repeat(chars.length);
20313 }
20314
20315 if (first === '.') {
20316 return DOT_LITERAL.repeat(chars.length);
20317 }
20318
20319 if (first === '*') {
20320 if (esc) {
20321 return esc + first + (rest ? star : '');
20322 }
20323 return star;
20324 }
20325 return esc ? m : '\\' + m;
20326 });
20327
20328 if (backslashes === true) {
20329 if (opts.unescape === true) {
20330 output = output.replace(/\\/g, '');
20331 } else {
20332 output = output.replace(/\\+/g, m => {
20333 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
20334 });
20335 }
20336 }
20337
20338 state.output = output;
20339 return state;
20340 }
20341
20342 /**
20343 * Tokenize input until we reach end-of-string
20344 */
20345
20346 while (!eos()) {
20347 value = advance();
20348
20349 if (value === '\u0000') {
20350 continue;
20351 }
20352
20353 /**
20354 * Escaped characters
20355 */
20356
20357 if (value === '\\') {
20358 let next = peek();
20359
20360 if (next === '/' && opts.bash !== true) {
20361 continue;
20362 }
20363
20364 if (next === '.' || next === ';') {
20365 continue;
20366 }
20367
20368 if (!next) {
20369 value += '\\';
20370 push({ type: 'text', value });
20371 continue;
20372 }
20373
20374 // collapse slashes to reduce potential for exploits
20375 let match = /^\\+/.exec(input.slice(state.index + 1));
20376 let slashes = 0;
20377
20378 if (match && match[0].length > 2) {
20379 slashes = match[0].length;
20380 state.index += slashes;
20381 if (slashes % 2 !== 0) {
20382 value += '\\';
20383 }
20384 }
20385
20386 if (opts.unescape === true) {
20387 value = advance() || '';
20388 } else {
20389 value += advance() || '';
20390 }
20391
20392 if (state.brackets === 0) {
20393 push({ type: 'text', value });
20394 continue;
20395 }
20396 }
20397
20398 /**
20399 * If we're inside a regex character class, continue
20400 * until we reach the closing bracket.
20401 */
20402
20403 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
20404 if (opts.posix !== false && value === ':') {
20405 let inner = prev.value.slice(1);
20406 if (inner.includes('[')) {
20407 prev.posix = true;
20408
20409 if (inner.includes(':')) {
20410 let idx = prev.value.lastIndexOf('[');
20411 let pre = prev.value.slice(0, idx);
20412 let rest = prev.value.slice(idx + 2);
20413 let posix = POSIX_REGEX_SOURCE[rest];
20414 if (posix) {
20415 prev.value = pre + posix;
20416 state.backtrack = true;
20417 advance();
20418
20419 if (!bos.output && tokens.indexOf(prev) === 1) {
20420 bos.output = ONE_CHAR;
20421 }
20422 continue;
20423 }
20424 }
20425 }
20426 }
20427
20428 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
20429 value = '\\' + value;
20430 }
20431
20432 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
20433 value = '\\' + value;
20434 }
20435
20436 if (opts.posix === true && value === '!' && prev.value === '[') {
20437 value = '^';
20438 }
20439
20440 prev.value += value;
20441 append({ value });
20442 continue;
20443 }
20444
20445 /**
20446 * If we're inside a quoted string, continue
20447 * until we reach the closing double quote.
20448 */
20449
20450 if (state.quotes === 1 && value !== '"') {
20451 value = utils.escapeRegex(value);
20452 prev.value += value;
20453 append({ value });
20454 continue;
20455 }
20456
20457 /**
20458 * Double quotes
20459 */
20460
20461 if (value === '"') {
20462 state.quotes = state.quotes === 1 ? 0 : 1;
20463 if (opts.keepQuotes === true) {
20464 push({ type: 'text', value });
20465 }
20466 continue;
20467 }
20468
20469 /**
20470 * Parentheses
20471 */
20472
20473 if (value === '(') {
20474 push({ type: 'paren', value });
20475 increment('parens');
20476 continue;
20477 }
20478
20479 if (value === ')') {
20480 if (state.parens === 0 && opts.strictBrackets === true) {
20481 throw new SyntaxError(syntaxError('opening', '('));
20482 }
20483
20484 let extglob = extglobs[extglobs.length - 1];
20485 if (extglob && state.parens === extglob.parens + 1) {
20486 extglobClose(extglobs.pop());
20487 continue;
20488 }
20489
20490 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
20491 decrement('parens');
20492 continue;
20493 }
20494
20495 /**
20496 * Brackets
20497 */
20498
20499 if (value === '[') {
20500 if (opts.nobracket === true || !input.slice(state.index + 1).includes(']')) {
20501 if (opts.nobracket !== true && opts.strictBrackets === true) {
20502 throw new SyntaxError(syntaxError('closing', ']'));
20503 }
20504
20505 value = '\\' + value;
20506 } else {
20507 increment('brackets');
20508 }
20509
20510 push({ type: 'bracket', value });
20511 continue;
20512 }
20513
20514 if (value === ']') {
20515 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
20516 push({ type: 'text', value, output: '\\' + value });
20517 continue;
20518 }
20519
20520 if (state.brackets === 0) {
20521 if (opts.strictBrackets === true) {
20522 throw new SyntaxError(syntaxError('opening', '['));
20523 }
20524
20525 push({ type: 'text', value, output: '\\' + value });
20526 continue;
20527 }
20528
20529 decrement('brackets');
20530
20531 let prevValue = prev.value.slice(1);
20532 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
20533 value = '/' + value;
20534 }
20535
20536 prev.value += value;
20537 append({ value });
20538
20539 // when literal brackets are explicitly disabled
20540 // assume we should match with a regex character class
20541 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
20542 continue;
20543 }
20544
20545 let escaped = utils.escapeRegex(prev.value);
20546 state.output = state.output.slice(0, -prev.value.length);
20547
20548 // when literal brackets are explicitly enabled
20549 // assume we should escape the brackets to match literal characters
20550 if (opts.literalBrackets === true) {
20551 state.output += escaped;
20552 prev.value = escaped;
20553 continue;
20554 }
20555
20556 // when the user specifies nothing, try to match both
20557 prev.value = `(${capture}${escaped}|${prev.value})`;
20558 state.output += prev.value;
20559 continue;
20560 }
20561
20562 /**
20563 * Braces
20564 */
20565
20566 if (value === '{' && opts.nobrace !== true) {
20567 push({ type: 'brace', value, output: '(' });
20568 increment('braces');
20569 continue;
20570 }
20571
20572 if (value === '}') {
20573 if (opts.nobrace === true || state.braces === 0) {
20574 push({ type: 'text', value, output: '\\' + value });
20575 continue;
20576 }
20577
20578 let output = ')';
20579
20580 if (state.dots === true) {
20581 let arr = tokens.slice();
20582 let range = [];
20583
20584 for (let i = arr.length - 1; i >= 0; i--) {
20585 tokens.pop();
20586 if (arr[i].type === 'brace') {
20587 break;
20588 }
20589 if (arr[i].type !== 'dots') {
20590 range.unshift(arr[i].value);
20591 }
20592 }
20593
20594 output = expandRange(range, opts);
20595 state.backtrack = true;
20596 }
20597
20598 push({ type: 'brace', value, output });
20599 decrement('braces');
20600 continue;
20601 }
20602
20603 /**
20604 * Pipes
20605 */
20606
20607 if (value === '|') {
20608 if (extglobs.length > 0) {
20609 extglobs[extglobs.length - 1].conditions++;
20610 }
20611 push({ type: 'text', value });
20612 continue;
20613 }
20614
20615 /**
20616 * Commas
20617 */
20618
20619 if (value === ',') {
20620 let output = value;
20621
20622 if (state.braces > 0 && stack[stack.length - 1] === 'braces') {
20623 output = '|';
20624 }
20625
20626 push({ type: 'comma', value, output });
20627 continue;
20628 }
20629
20630 /**
20631 * Slashes
20632 */
20633
20634 if (value === '/') {
20635 // if the beginning of the glob is "./", advance the start
20636 // to the current index, and don't add the "./" characters
20637 // to the state. This greatly simplifies lookbehinds when
20638 // checking for BOS characters like "!" and "." (not "./")
20639 if (prev.type === 'dot' && state.index === 1) {
20640 state.start = state.index + 1;
20641 state.consumed = '';
20642 state.output = '';
20643 tokens.pop();
20644 prev = bos; // reset "prev" to the first token
20645 continue;
20646 }
20647
20648 push({ type: 'slash', value, output: SLASH_LITERAL });
20649 continue;
20650 }
20651
20652 /**
20653 * Dots
20654 */
20655
20656 if (value === '.') {
20657 if (state.braces > 0 && prev.type === 'dot') {
20658 if (prev.value === '.') prev.output = DOT_LITERAL;
20659 prev.type = 'dots';
20660 prev.output += value;
20661 prev.value += value;
20662 state.dots = true;
20663 continue;
20664 }
20665
20666 push({ type: 'dot', value, output: DOT_LITERAL });
20667 continue;
20668 }
20669
20670 /**
20671 * Question marks
20672 */
20673
20674 if (value === '?') {
20675 if (prev && prev.type === 'paren') {
20676 let next = peek();
20677 let output = value;
20678
20679 if (next === '<' && !utils.supportsLookbehinds()) {
20680 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
20681 }
20682
20683 if (prev.value === '(' && !/[!=<:]/.test(next) || (next === '<' && !/[!=]/.test(peek(2)))) {
20684 output = '\\' + value;
20685 }
20686
20687 push({ type: 'text', value, output });
20688 continue;
20689 }
20690
20691 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20692 extglobOpen('qmark', value);
20693 continue;
20694 }
20695
20696 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
20697 push({ type: 'qmark', value, output: QMARK_NO_DOT });
20698 continue;
20699 }
20700
20701 push({ type: 'qmark', value, output: QMARK });
20702 continue;
20703 }
20704
20705 /**
20706 * Exclamation
20707 */
20708
20709 if (value === '!') {
20710 if (opts.noextglob !== true && peek() === '(') {
20711 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
20712 extglobOpen('negate', value);
20713 continue;
20714 }
20715 }
20716
20717 if (opts.nonegate !== true && state.index === 0) {
20718 negate(state);
20719 continue;
20720 }
20721 }
20722
20723 /**
20724 * Plus
20725 */
20726
20727 if (value === '+') {
20728 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20729 extglobOpen('plus', value);
20730 continue;
20731 }
20732
20733 if (prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) {
20734 let output = prev.extglob === true ? '\\' + value : value;
20735 push({ type: 'plus', value, output });
20736 continue;
20737 }
20738
20739 // use regex behavior inside parens
20740 if (state.parens > 0 && opts.regex !== false) {
20741 push({ type: 'plus', value });
20742 continue;
20743 }
20744
20745 push({ type: 'plus', value: PLUS_LITERAL });
20746 continue;
20747 }
20748
20749 /**
20750 * Plain text
20751 */
20752
20753 if (value === '@') {
20754 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20755 push({ type: 'at', value, output: '' });
20756 continue;
20757 }
20758
20759 push({ type: 'text', value });
20760 continue;
20761 }
20762
20763 /**
20764 * Plain text
20765 */
20766
20767 if (value !== '*') {
20768 if (value === '$' || value === '^') {
20769 value = '\\' + value;
20770 }
20771
20772 let match = REGEX_NON_SPECIAL_CHAR.exec(input.slice(state.index + 1));
20773 if (match) {
20774 value += match[0];
20775 state.index += match[0].length;
20776 }
20777
20778 push({ type: 'text', value });
20779 continue;
20780 }
20781
20782 /**
20783 * Stars
20784 */
20785
20786 if (prev && (prev.type === 'globstar' || prev.star === true)) {
20787 prev.type = 'star';
20788 prev.star = true;
20789 prev.value += value;
20790 prev.output = star;
20791 state.backtrack = true;
20792 state.consumed += value;
20793 continue;
20794 }
20795
20796 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20797 extglobOpen('star', value);
20798 continue;
20799 }
20800
20801 if (prev.type === 'star') {
20802 if (opts.noglobstar === true) {
20803 state.consumed += value;
20804 continue;
20805 }
20806
20807 let prior = prev.prev;
20808 let before = prior.prev;
20809 let isStart = prior.type === 'slash' || prior.type === 'bos';
20810 let afterStar = before && (before.type === 'star' || before.type === 'globstar');
20811
20812 if (opts.bash === true && (!isStart || (!eos() && peek() !== '/'))) {
20813 push({ type: 'star', value, output: '' });
20814 continue;
20815 }
20816
20817 let isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
20818 let isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
20819 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
20820 push({ type: 'star', value, output: '' });
20821 continue;
20822 }
20823
20824 // strip consecutive `/**/`
20825 while (input.slice(state.index + 1, state.index + 4) === '/**') {
20826 let after = input[state.index + 4];
20827 if (after && after !== '/') {
20828 break;
20829 }
20830 state.consumed += '/**';
20831 state.index += 3;
20832 }
20833
20834 if (prior.type === 'bos' && eos()) {
20835 prev.type = 'globstar';
20836 prev.value += value;
20837 prev.output = globstar(opts);
20838 state.output = prev.output;
20839 state.consumed += value;
20840 continue;
20841 }
20842
20843 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
20844 state.output = state.output.slice(0, -(prior.output + prev.output).length);
20845 prior.output = '(?:' + prior.output;
20846
20847 prev.type = 'globstar';
20848 prev.output = globstar(opts) + '|$)';
20849 prev.value += value;
20850
20851 state.output += prior.output + prev.output;
20852 state.consumed += value;
20853 continue;
20854 }
20855
20856 let next = peek();
20857 if (prior.type === 'slash' && prior.prev.type !== 'bos' && next === '/') {
20858 let end = peek(2) !== void 0 ? '|$' : '';
20859
20860 state.output = state.output.slice(0, -(prior.output + prev.output).length);
20861 prior.output = '(?:' + prior.output;
20862
20863 prev.type = 'globstar';
20864 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
20865 prev.value += value;
20866
20867 state.output += prior.output + prev.output;
20868 state.consumed += value + advance();
20869
20870 push({ type: 'slash', value, output: '' });
20871 continue;
20872 }
20873
20874 if (prior.type === 'bos' && next === '/') {
20875 prev.type = 'globstar';
20876 prev.value += value;
20877 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
20878 state.output = prev.output;
20879 state.consumed += value + advance();
20880 push({ type: 'slash', value, output: '' });
20881 continue;
20882 }
20883
20884 // remove single star from output
20885 state.output = state.output.slice(0, -prev.output.length);
20886
20887 // reset previous token to globstar
20888 prev.type = 'globstar';
20889 prev.output = globstar(opts);
20890 prev.value += value;
20891
20892 // reset output with globstar
20893 state.output += prev.output;
20894 state.consumed += value;
20895 continue;
20896 }
20897
20898 let token = { type: 'star', value, output: star };
20899
20900 if (opts.bash === true) {
20901 token.output = '.*?';
20902 if (prev.type === 'bos' || prev.type === 'slash') {
20903 token.output = nodot + token.output;
20904 }
20905 push(token);
20906 continue;
20907 }
20908
20909 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
20910 token.output = value;
20911 push(token);
20912 continue;
20913 }
20914
20915 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
20916 if (prev.type === 'dot') {
20917 state.output += NO_DOT_SLASH;
20918 prev.output += NO_DOT_SLASH;
20919
20920 } else if (opts.dot === true) {
20921 state.output += NO_DOTS_SLASH;
20922 prev.output += NO_DOTS_SLASH;
20923
20924 } else {
20925 state.output += nodot;
20926 prev.output += nodot;
20927 }
20928
20929 if (peek() !== '*') {
20930 state.output += ONE_CHAR;
20931 prev.output += ONE_CHAR;
20932 }
20933 }
20934
20935 push(token);
20936 }
20937
20938 while (state.brackets > 0) {
20939 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
20940 state.output = utils.escapeLast(state.output, '[');
20941 decrement('brackets');
20942 }
20943
20944 while (state.parens > 0) {
20945 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
20946 state.output = utils.escapeLast(state.output, '(');
20947 decrement('parens');
20948 }
20949
20950 while (state.braces > 0) {
20951 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
20952 state.output = utils.escapeLast(state.output, '{');
20953 decrement('braces');
20954 }
20955
20956 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
20957 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
20958 }
20959
20960 // rebuild the output if we had to backtrack at any point
20961 if (state.backtrack === true) {
20962 state.output = '';
20963
20964 for (let token of state.tokens) {
20965 state.output += token.output != null ? token.output : token.value;
20966
20967 if (token.suffix) {
20968 state.output += token.suffix;
20969 }
20970 }
20971 }
20972
20973 return state;
20974};
20975
20976/**
20977 * Fast paths for creating regular expressions for common glob patterns.
20978 * This can significantly speed up processing and has very little downside
20979 * impact when none of the fast paths match.
20980 */
20981
20982parse.fastpaths = (input, options) => {
20983 let opts = { ...options };
20984 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
20985 let len = input.length;
20986 if (len > max) {
20987 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
20988 }
20989
20990 input = REPLACEMENTS[input] || input;
20991 let win32 = utils.isWindows(options);
20992
20993 // create constants based on platform, for windows or posix
20994 const {
20995 DOT_LITERAL,
20996 SLASH_LITERAL,
20997 ONE_CHAR,
20998 DOTS_SLASH,
20999 NO_DOT,
21000 NO_DOTS,
21001 NO_DOTS_SLASH,
21002 STAR,
21003 START_ANCHOR
21004 } = constants.globChars(win32);
21005
21006 let capture = opts.capture ? '' : '?:';
21007 let star = opts.bash === true ? '.*?' : STAR;
21008 let nodot = opts.dot ? NO_DOTS : NO_DOT;
21009 let slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
21010
21011 if (opts.capture) {
21012 star = `(${star})`;
21013 }
21014
21015 const globstar = (opts) => {
21016 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
21017 };
21018
21019 const create = str => {
21020 switch (str) {
21021 case '*':
21022 return `${nodot}${ONE_CHAR}${star}`;
21023
21024 case '.*':
21025 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
21026
21027 case '*.*':
21028 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21029
21030 case '*/*':
21031 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
21032
21033 case '**':
21034 return nodot + globstar(opts);
21035
21036 case '**/*':
21037 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
21038
21039 case '**/*.*':
21040 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21041
21042 case '**/.*':
21043 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
21044
21045 default: {
21046 let match = /^(.*?)\.(\w+)$/.exec(str);
21047 if (!match) return;
21048
21049 let source = create(match[1], options);
21050 if (!source) return;
21051
21052 return source + DOT_LITERAL + match[2];
21053 }
21054 }
21055 };
21056
21057 let output = create(input);
21058 if (output && opts.strictSlashes !== true) {
21059 output += `${SLASH_LITERAL}?`;
21060 }
21061
21062 return output;
21063};
21064
21065module.exports = parse;
21066
21067
21068/***/ }),
21069/* 106 */
21070/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21071
21072"use strict";
21073
21074
21075module.exports = __webpack_require__(107);
21076
21077
21078/***/ }),
21079/* 107 */
21080/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21081
21082"use strict";
21083
21084
21085const path = __webpack_require__(23);
21086const scan = __webpack_require__(108);
21087const parse = __webpack_require__(111);
21088const utils = __webpack_require__(109);
21089const constants = __webpack_require__(110);
21090const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
21091
21092/**
21093 * Creates a matcher function from one or more glob patterns. The
21094 * returned function takes a string to match as its first argument,
21095 * and returns true if the string is a match. The returned matcher
21096 * function also takes a boolean as the second argument that, when true,
21097 * returns an object with additional information.
21098 *
21099 * ```js
21100 * const picomatch = require('picomatch');
21101 * // picomatch(glob[, options]);
21102 *
21103 * const isMatch = picomatch('*.!(*a)');
21104 * console.log(isMatch('a.a')); //=> false
21105 * console.log(isMatch('a.b')); //=> true
21106 * ```
21107 * @name picomatch
21108 * @param {String|Array} `globs` One or more glob patterns.
21109 * @param {Object=} `options`
21110 * @return {Function=} Returns a matcher function.
21111 * @api public
21112 */
21113
21114const picomatch = (glob, options, returnState = false) => {
21115 if (Array.isArray(glob)) {
21116 const fns = glob.map(input => picomatch(input, options, returnState));
21117 const arrayMatcher = str => {
21118 for (const isMatch of fns) {
21119 const state = isMatch(str);
21120 if (state) return state;
21121 }
21122 return false;
21123 };
21124 return arrayMatcher;
21125 }
21126
21127 const isState = isObject(glob) && glob.tokens && glob.input;
21128
21129 if (glob === '' || (typeof glob !== 'string' && !isState)) {
21130 throw new TypeError('Expected pattern to be a non-empty string');
21131 }
21132
21133 const opts = options || {};
21134 const posix = utils.isWindows(options);
21135 const regex = isState
21136 ? picomatch.compileRe(glob, options)
21137 : picomatch.makeRe(glob, options, false, true);
21138
21139 const state = regex.state;
21140 delete regex.state;
21141
21142 let isIgnored = () => false;
21143 if (opts.ignore) {
21144 const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
21145 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
21146 }
21147
21148 const matcher = (input, returnObject = false) => {
21149 const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
21150 const result = { glob, state, regex, posix, input, output, match, isMatch };
21151
21152 if (typeof opts.onResult === 'function') {
21153 opts.onResult(result);
21154 }
21155
21156 if (isMatch === false) {
21157 result.isMatch = false;
21158 return returnObject ? result : false;
21159 }
21160
21161 if (isIgnored(input)) {
21162 if (typeof opts.onIgnore === 'function') {
21163 opts.onIgnore(result);
21164 }
21165 result.isMatch = false;
21166 return returnObject ? result : false;
21167 }
21168
21169 if (typeof opts.onMatch === 'function') {
21170 opts.onMatch(result);
21171 }
21172 return returnObject ? result : true;
21173 };
21174
21175 if (returnState) {
21176 matcher.state = state;
21177 }
21178
21179 return matcher;
21180};
21181
21182/**
21183 * Test `input` with the given `regex`. This is used by the main
21184 * `picomatch()` function to test the input string.
21185 *
21186 * ```js
21187 * const picomatch = require('picomatch');
21188 * // picomatch.test(input, regex[, options]);
21189 *
21190 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
21191 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
21192 * ```
21193 * @param {String} `input` String to test.
21194 * @param {RegExp} `regex`
21195 * @return {Object} Returns an object with matching info.
21196 * @api public
21197 */
21198
21199picomatch.test = (input, regex, options, { glob, posix } = {}) => {
21200 if (typeof input !== 'string') {
21201 throw new TypeError('Expected input to be a string');
21202 }
21203
21204 if (input === '') {
21205 return { isMatch: false, output: '' };
21206 }
21207
21208 const opts = options || {};
21209 const format = opts.format || (posix ? utils.toPosixSlashes : null);
21210 let match = input === glob;
21211 let output = (match && format) ? format(input) : input;
21212
21213 if (match === false) {
21214 output = format ? format(input) : input;
21215 match = output === glob;
21216 }
21217
21218 if (match === false || opts.capture === true) {
21219 if (opts.matchBase === true || opts.basename === true) {
21220 match = picomatch.matchBase(input, regex, options, posix);
21221 } else {
21222 match = regex.exec(output);
21223 }
21224 }
21225
21226 return { isMatch: Boolean(match), match, output };
21227};
21228
21229/**
21230 * Match the basename of a filepath.
21231 *
21232 * ```js
21233 * const picomatch = require('picomatch');
21234 * // picomatch.matchBase(input, glob[, options]);
21235 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
21236 * ```
21237 * @param {String} `input` String to test.
21238 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
21239 * @return {Boolean}
21240 * @api public
21241 */
21242
21243picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
21244 const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
21245 return regex.test(path.basename(input));
21246};
21247
21248/**
21249 * Returns true if **any** of the given glob `patterns` match the specified `string`.
21250 *
21251 * ```js
21252 * const picomatch = require('picomatch');
21253 * // picomatch.isMatch(string, patterns[, options]);
21254 *
21255 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
21256 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
21257 * ```
21258 * @param {String|Array} str The string to test.
21259 * @param {String|Array} patterns One or more glob patterns to use for matching.
21260 * @param {Object} [options] See available [options](#options).
21261 * @return {Boolean} Returns true if any patterns match `str`
21262 * @api public
21263 */
21264
21265picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
21266
21267/**
21268 * Parse a glob pattern to create the source string for a regular
21269 * expression.
21270 *
21271 * ```js
21272 * const picomatch = require('picomatch');
21273 * const result = picomatch.parse(pattern[, options]);
21274 * ```
21275 * @param {String} `pattern`
21276 * @param {Object} `options`
21277 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
21278 * @api public
21279 */
21280
21281picomatch.parse = (pattern, options) => {
21282 if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
21283 return parse(pattern, { ...options, fastpaths: false });
21284};
21285
21286/**
21287 * Scan a glob pattern to separate the pattern into segments.
21288 *
21289 * ```js
21290 * const picomatch = require('picomatch');
21291 * // picomatch.scan(input[, options]);
21292 *
21293 * const result = picomatch.scan('!./foo/*.js');
21294 * console.log(result);
21295 * { prefix: '!./',
21296 * input: '!./foo/*.js',
21297 * start: 3,
21298 * base: 'foo',
21299 * glob: '*.js',
21300 * isBrace: false,
21301 * isBracket: false,
21302 * isGlob: true,
21303 * isExtglob: false,
21304 * isGlobstar: false,
21305 * negated: true }
21306 * ```
21307 * @param {String} `input` Glob pattern to scan.
21308 * @param {Object} `options`
21309 * @return {Object} Returns an object with
21310 * @api public
21311 */
21312
21313picomatch.scan = (input, options) => scan(input, options);
21314
21315/**
21316 * Create a regular expression from a parsed glob pattern.
21317 *
21318 * ```js
21319 * const picomatch = require('picomatch');
21320 * const state = picomatch.parse('*.js');
21321 * // picomatch.compileRe(state[, options]);
21322 *
21323 * console.log(picomatch.compileRe(state));
21324 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
21325 * ```
21326 * @param {String} `state` The object returned from the `.parse` method.
21327 * @param {Object} `options`
21328 * @return {RegExp} Returns a regex created from the given pattern.
21329 * @api public
21330 */
21331
21332picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
21333 if (returnOutput === true) {
21334 return parsed.output;
21335 }
21336
21337 const opts = options || {};
21338 const prepend = opts.contains ? '' : '^';
21339 const append = opts.contains ? '' : '$';
21340
21341 let source = `${prepend}(?:${parsed.output})${append}`;
21342 if (parsed && parsed.negated === true) {
21343 source = `^(?!${source}).*$`;
21344 }
21345
21346 const regex = picomatch.toRegex(source, options);
21347 if (returnState === true) {
21348 regex.state = parsed;
21349 }
21350
21351 return regex;
21352};
21353
21354picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
21355 if (!input || typeof input !== 'string') {
21356 throw new TypeError('Expected a non-empty string');
21357 }
21358
21359 const opts = options || {};
21360 let parsed = { negated: false, fastpaths: true };
21361 let prefix = '';
21362 let output;
21363
21364 if (input.startsWith('./')) {
21365 input = input.slice(2);
21366 prefix = parsed.prefix = './';
21367 }
21368
21369 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
21370 output = parse.fastpaths(input, options);
21371 }
21372
21373 if (output === undefined) {
21374 parsed = parse(input, options);
21375 parsed.prefix = prefix + (parsed.prefix || '');
21376 } else {
21377 parsed.output = output;
21378 }
21379
21380 return picomatch.compileRe(parsed, options, returnOutput, returnState);
21381};
21382
21383/**
21384 * Create a regular expression from the given regex source string.
21385 *
21386 * ```js
21387 * const picomatch = require('picomatch');
21388 * // picomatch.toRegex(source[, options]);
21389 *
21390 * const { output } = picomatch.parse('*.js');
21391 * console.log(picomatch.toRegex(output));
21392 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
21393 * ```
21394 * @param {String} `source` Regular expression source string.
21395 * @param {Object} `options`
21396 * @return {RegExp}
21397 * @api public
21398 */
21399
21400picomatch.toRegex = (source, options) => {
21401 try {
21402 const opts = options || {};
21403 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
21404 } catch (err) {
21405 if (options && options.debug === true) throw err;
21406 return /$^/;
21407 }
21408};
21409
21410/**
21411 * Picomatch constants.
21412 * @return {Object}
21413 */
21414
21415picomatch.constants = constants;
21416
21417/**
21418 * Expose "picomatch"
21419 */
21420
21421module.exports = picomatch;
21422
21423
21424/***/ }),
21425/* 108 */
21426/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21427
21428"use strict";
21429
21430
21431const utils = __webpack_require__(109);
21432const {
21433 CHAR_ASTERISK, /* * */
21434 CHAR_AT, /* @ */
21435 CHAR_BACKWARD_SLASH, /* \ */
21436 CHAR_COMMA, /* , */
21437 CHAR_DOT, /* . */
21438 CHAR_EXCLAMATION_MARK, /* ! */
21439 CHAR_FORWARD_SLASH, /* / */
21440 CHAR_LEFT_CURLY_BRACE, /* { */
21441 CHAR_LEFT_PARENTHESES, /* ( */
21442 CHAR_LEFT_SQUARE_BRACKET, /* [ */
21443 CHAR_PLUS, /* + */
21444 CHAR_QUESTION_MARK, /* ? */
21445 CHAR_RIGHT_CURLY_BRACE, /* } */
21446 CHAR_RIGHT_PARENTHESES, /* ) */
21447 CHAR_RIGHT_SQUARE_BRACKET /* ] */
21448} = __webpack_require__(110);
21449
21450const isPathSeparator = code => {
21451 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
21452};
21453
21454const depth = token => {
21455 if (token.isPrefix !== true) {
21456 token.depth = token.isGlobstar ? Infinity : 1;
21457 }
21458};
21459
21460/**
21461 * Quickly scans a glob pattern and returns an object with a handful of
21462 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
21463 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
21464 *
21465 * ```js
21466 * const pm = require('picomatch');
21467 * console.log(pm.scan('foo/bar/*.js'));
21468 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
21469 * ```
21470 * @param {String} `str`
21471 * @param {Object} `options`
21472 * @return {Object} Returns an object with tokens and regex source string.
21473 * @api public
21474 */
21475
21476const scan = (input, options) => {
21477 const opts = options || {};
21478
21479 const length = input.length - 1;
21480 const scanToEnd = opts.parts === true || opts.scanToEnd === true;
21481 const slashes = [];
21482 const tokens = [];
21483 const parts = [];
21484
21485 let str = input;
21486 let index = -1;
21487 let start = 0;
21488 let lastIndex = 0;
21489 let isBrace = false;
21490 let isBracket = false;
21491 let isGlob = false;
21492 let isExtglob = false;
21493 let isGlobstar = false;
21494 let braceEscaped = false;
21495 let backslashes = false;
21496 let negated = false;
21497 let finished = false;
21498 let braces = 0;
21499 let prev;
21500 let code;
21501 let token = { value: '', depth: 0, isGlob: false };
21502
21503 const eos = () => index >= length;
21504 const peek = () => str.charCodeAt(index + 1);
21505 const advance = () => {
21506 prev = code;
21507 return str.charCodeAt(++index);
21508 };
21509
21510 while (index < length) {
21511 code = advance();
21512 let next;
21513
21514 if (code === CHAR_BACKWARD_SLASH) {
21515 backslashes = token.backslashes = true;
21516 code = advance();
21517
21518 if (code === CHAR_LEFT_CURLY_BRACE) {
21519 braceEscaped = true;
21520 }
21521 continue;
21522 }
21523
21524 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
21525 braces++;
21526
21527 while (eos() !== true && (code = advance())) {
21528 if (code === CHAR_BACKWARD_SLASH) {
21529 backslashes = token.backslashes = true;
21530 advance();
21531 continue;
21532 }
21533
21534 if (code === CHAR_LEFT_CURLY_BRACE) {
21535 braces++;
21536 continue;
21537 }
21538
21539 if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
21540 isBrace = token.isBrace = true;
21541 isGlob = token.isGlob = true;
21542 finished = true;
21543
21544 if (scanToEnd === true) {
21545 continue;
21546 }
21547
21548 break;
21549 }
21550
21551 if (braceEscaped !== true && code === CHAR_COMMA) {
21552 isBrace = token.isBrace = true;
21553 isGlob = token.isGlob = true;
21554 finished = true;
21555
21556 if (scanToEnd === true) {
21557 continue;
21558 }
21559
21560 break;
21561 }
21562
21563 if (code === CHAR_RIGHT_CURLY_BRACE) {
21564 braces--;
21565
21566 if (braces === 0) {
21567 braceEscaped = false;
21568 isBrace = token.isBrace = true;
21569 finished = true;
21570 break;
21571 }
21572 }
21573 }
21574
21575 if (scanToEnd === true) {
21576 continue;
21577 }
21578
21579 break;
21580 }
21581
21582 if (code === CHAR_FORWARD_SLASH) {
21583 slashes.push(index);
21584 tokens.push(token);
21585 token = { value: '', depth: 0, isGlob: false };
21586
21587 if (finished === true) continue;
21588 if (prev === CHAR_DOT && index === (start + 1)) {
21589 start += 2;
21590 continue;
21591 }
21592
21593 lastIndex = index + 1;
21594 continue;
21595 }
21596
21597 if (opts.noext !== true) {
21598 const isExtglobChar = code === CHAR_PLUS
21599 || code === CHAR_AT
21600 || code === CHAR_ASTERISK
21601 || code === CHAR_QUESTION_MARK
21602 || code === CHAR_EXCLAMATION_MARK;
21603
21604 if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
21605 isGlob = token.isGlob = true;
21606 isExtglob = token.isExtglob = true;
21607 finished = true;
21608
21609 if (scanToEnd === true) {
21610 while (eos() !== true && (code = advance())) {
21611 if (code === CHAR_BACKWARD_SLASH) {
21612 backslashes = token.backslashes = true;
21613 code = advance();
21614 continue;
21615 }
21616
21617 if (code === CHAR_RIGHT_PARENTHESES) {
21618 isGlob = token.isGlob = true;
21619 finished = true;
21620 break;
21621 }
21622 }
21623 continue;
21624 }
21625 break;
21626 }
21627 }
21628
21629 if (code === CHAR_ASTERISK) {
21630 if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
21631 isGlob = token.isGlob = true;
21632 finished = true;
21633
21634 if (scanToEnd === true) {
21635 continue;
21636 }
21637 break;
21638 }
21639
21640 if (code === CHAR_QUESTION_MARK) {
21641 isGlob = token.isGlob = true;
21642 finished = true;
21643
21644 if (scanToEnd === true) {
21645 continue;
21646 }
21647 break;
21648 }
21649
21650 if (code === CHAR_LEFT_SQUARE_BRACKET) {
21651 while (eos() !== true && (next = advance())) {
21652 if (next === CHAR_BACKWARD_SLASH) {
21653 backslashes = token.backslashes = true;
21654 advance();
21655 continue;
21656 }
21657
21658 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
21659 isBracket = token.isBracket = true;
21660 isGlob = token.isGlob = true;
21661 finished = true;
21662
21663 if (scanToEnd === true) {
21664 continue;
21665 }
21666 break;
21667 }
21668 }
21669 }
21670
21671 if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
21672 negated = token.negated = true;
21673 start++;
21674 continue;
21675 }
21676
21677 if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
21678 isGlob = token.isGlob = true;
21679
21680 if (scanToEnd === true) {
21681 while (eos() !== true && (code = advance())) {
21682 if (code === CHAR_LEFT_PARENTHESES) {
21683 backslashes = token.backslashes = true;
21684 code = advance();
21685 continue;
21686 }
21687
21688 if (code === CHAR_RIGHT_PARENTHESES) {
21689 finished = true;
21690 break;
21691 }
21692 }
21693 continue;
21694 }
21695 break;
21696 }
21697
21698 if (isGlob === true) {
21699 finished = true;
21700
21701 if (scanToEnd === true) {
21702 continue;
21703 }
21704
21705 break;
21706 }
21707 }
21708
21709 if (opts.noext === true) {
21710 isExtglob = false;
21711 isGlob = false;
21712 }
21713
21714 let base = str;
21715 let prefix = '';
21716 let glob = '';
21717
21718 if (start > 0) {
21719 prefix = str.slice(0, start);
21720 str = str.slice(start);
21721 lastIndex -= start;
21722 }
21723
21724 if (base && isGlob === true && lastIndex > 0) {
21725 base = str.slice(0, lastIndex);
21726 glob = str.slice(lastIndex);
21727 } else if (isGlob === true) {
21728 base = '';
21729 glob = str;
21730 } else {
21731 base = str;
21732 }
21733
21734 if (base && base !== '' && base !== '/' && base !== str) {
21735 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
21736 base = base.slice(0, -1);
21737 }
21738 }
21739
21740 if (opts.unescape === true) {
21741 if (glob) glob = utils.removeBackslashes(glob);
21742
21743 if (base && backslashes === true) {
21744 base = utils.removeBackslashes(base);
21745 }
21746 }
21747
21748 const state = {
21749 prefix,
21750 input,
21751 start,
21752 base,
21753 glob,
21754 isBrace,
21755 isBracket,
21756 isGlob,
21757 isExtglob,
21758 isGlobstar,
21759 negated
21760 };
21761
21762 if (opts.tokens === true) {
21763 state.maxDepth = 0;
21764 if (!isPathSeparator(code)) {
21765 tokens.push(token);
21766 }
21767 state.tokens = tokens;
21768 }
21769
21770 if (opts.parts === true || opts.tokens === true) {
21771 let prevIndex;
21772
21773 for (let idx = 0; idx < slashes.length; idx++) {
21774 const n = prevIndex ? prevIndex + 1 : start;
21775 const i = slashes[idx];
21776 const value = input.slice(n, i);
21777 if (opts.tokens) {
21778 if (idx === 0 && start !== 0) {
21779 tokens[idx].isPrefix = true;
21780 tokens[idx].value = prefix;
21781 } else {
21782 tokens[idx].value = value;
21783 }
21784 depth(tokens[idx]);
21785 state.maxDepth += tokens[idx].depth;
21786 }
21787 if (idx !== 0 || value !== '') {
21788 parts.push(value);
21789 }
21790 prevIndex = i;
21791 }
21792
21793 if (prevIndex && prevIndex + 1 < input.length) {
21794 const value = input.slice(prevIndex + 1);
21795 parts.push(value);
21796
21797 if (opts.tokens) {
21798 tokens[tokens.length - 1].value = value;
21799 depth(tokens[tokens.length - 1]);
21800 state.maxDepth += tokens[tokens.length - 1].depth;
21801 }
21802 }
21803
21804 state.slashes = slashes;
21805 state.parts = parts;
21806 }
21807
21808 return state;
21809};
21810
21811module.exports = scan;
21812
21813
21814/***/ }),
21815/* 109 */
21816/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
21817
21818"use strict";
21819
21820
21821const path = __webpack_require__(23);
21822const win32 = process.platform === 'win32';
21823const {
21824 REGEX_BACKSLASH,
21825 REGEX_REMOVE_BACKSLASH,
21826 REGEX_SPECIAL_CHARS,
21827 REGEX_SPECIAL_CHARS_GLOBAL
21828} = __webpack_require__(110);
21829
21830exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
21831exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
21832exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
21833exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
21834exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
21835
21836exports.removeBackslashes = str => {
21837 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
21838 return match === '\\' ? '' : match;
21839 });
21840};
21841
21842exports.supportsLookbehinds = () => {
21843 const segs = process.version.slice(1).split('.').map(Number);
21844 if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
21845 return true;
21846 }
21847 return false;
21848};
21849
21850exports.isWindows = options => {
21851 if (options && typeof options.windows === 'boolean') {
21852 return options.windows;
21853 }
21854 return win32 === true || path.sep === '\\';
21855};
21856
21857exports.escapeLast = (input, char, lastIdx) => {
21858 const idx = input.lastIndexOf(char, lastIdx);
21859 if (idx === -1) return input;
21860 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
21861 return `${input.slice(0, idx)}\\${input.slice(idx)}`;
21862};
21863
21864exports.removePrefix = (input, state = {}) => {
21865 let output = input;
21866 if (output.startsWith('./')) {
21867 output = output.slice(2);
21868 state.prefix = './';
21869 }
21870 return output;
21871};
21872
21873exports.wrapOutput = (input, state = {}, options = {}) => {
21874 const prepend = options.contains ? '' : '^';
21875 const append = options.contains ? '' : '$';
21876
21877 let output = `${prepend}(?:${input})${append}`;
21878 if (state.negated === true) {
21879 output = `(?:^(?!${output}).*$)`;
21880 }
21881 return output;
21882};
21883
21884
21885/***/ }),
21886/* 110 */
21887/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
21888
21889"use strict";
21890
21891
21892const path = __webpack_require__(23);
21893const WIN_SLASH = '\\\\/';
21894const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
21895
21896/**
21897 * Posix glob regex
21898 */
21899
21900const DOT_LITERAL = '\\.';
21901const PLUS_LITERAL = '\\+';
21902const QMARK_LITERAL = '\\?';
21903const SLASH_LITERAL = '\\/';
21904const ONE_CHAR = '(?=.)';
21905const QMARK = '[^/]';
21906const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
21907const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
21908const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
21909const NO_DOT = `(?!${DOT_LITERAL})`;
21910const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
21911const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
21912const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
21913const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
21914const STAR = `${QMARK}*?`;
21915
21916const POSIX_CHARS = {
21917 DOT_LITERAL,
21918 PLUS_LITERAL,
21919 QMARK_LITERAL,
21920 SLASH_LITERAL,
21921 ONE_CHAR,
21922 QMARK,
21923 END_ANCHOR,
21924 DOTS_SLASH,
21925 NO_DOT,
21926 NO_DOTS,
21927 NO_DOT_SLASH,
21928 NO_DOTS_SLASH,
21929 QMARK_NO_DOT,
21930 STAR,
21931 START_ANCHOR
21932};
21933
21934/**
21935 * Windows glob regex
21936 */
21937
21938const WINDOWS_CHARS = {
21939 ...POSIX_CHARS,
21940
21941 SLASH_LITERAL: `[${WIN_SLASH}]`,
21942 QMARK: WIN_NO_SLASH,
21943 STAR: `${WIN_NO_SLASH}*?`,
21944 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
21945 NO_DOT: `(?!${DOT_LITERAL})`,
21946 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
21947 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
21948 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
21949 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
21950 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
21951 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
21952};
21953
21954/**
21955 * POSIX Bracket Regex
21956 */
21957
21958const POSIX_REGEX_SOURCE = {
21959 alnum: 'a-zA-Z0-9',
21960 alpha: 'a-zA-Z',
21961 ascii: '\\x00-\\x7F',
21962 blank: ' \\t',
21963 cntrl: '\\x00-\\x1F\\x7F',
21964 digit: '0-9',
21965 graph: '\\x21-\\x7E',
21966 lower: 'a-z',
21967 print: '\\x20-\\x7E ',
21968 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
21969 space: ' \\t\\r\\n\\v\\f',
21970 upper: 'A-Z',
21971 word: 'A-Za-z0-9_',
21972 xdigit: 'A-Fa-f0-9'
21973};
21974
21975module.exports = {
21976 MAX_LENGTH: 1024 * 64,
21977 POSIX_REGEX_SOURCE,
21978
21979 // regular expressions
21980 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
21981 REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
21982 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
21983 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
21984 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
21985 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
21986
21987 // Replace globs with equivalent patterns to reduce parsing time.
21988 REPLACEMENTS: {
21989 '***': '*',
21990 '**/**': '**',
21991 '**/**/**': '**'
21992 },
21993
21994 // Digits
21995 CHAR_0: 48, /* 0 */
21996 CHAR_9: 57, /* 9 */
21997
21998 // Alphabet chars.
21999 CHAR_UPPERCASE_A: 65, /* A */
22000 CHAR_LOWERCASE_A: 97, /* a */
22001 CHAR_UPPERCASE_Z: 90, /* Z */
22002 CHAR_LOWERCASE_Z: 122, /* z */
22003
22004 CHAR_LEFT_PARENTHESES: 40, /* ( */
22005 CHAR_RIGHT_PARENTHESES: 41, /* ) */
22006
22007 CHAR_ASTERISK: 42, /* * */
22008
22009 // Non-alphabetic chars.
22010 CHAR_AMPERSAND: 38, /* & */
22011 CHAR_AT: 64, /* @ */
22012 CHAR_BACKWARD_SLASH: 92, /* \ */
22013 CHAR_CARRIAGE_RETURN: 13, /* \r */
22014 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
22015 CHAR_COLON: 58, /* : */
22016 CHAR_COMMA: 44, /* , */
22017 CHAR_DOT: 46, /* . */
22018 CHAR_DOUBLE_QUOTE: 34, /* " */
22019 CHAR_EQUAL: 61, /* = */
22020 CHAR_EXCLAMATION_MARK: 33, /* ! */
22021 CHAR_FORM_FEED: 12, /* \f */
22022 CHAR_FORWARD_SLASH: 47, /* / */
22023 CHAR_GRAVE_ACCENT: 96, /* ` */
22024 CHAR_HASH: 35, /* # */
22025 CHAR_HYPHEN_MINUS: 45, /* - */
22026 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
22027 CHAR_LEFT_CURLY_BRACE: 123, /* { */
22028 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
22029 CHAR_LINE_FEED: 10, /* \n */
22030 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
22031 CHAR_PERCENT: 37, /* % */
22032 CHAR_PLUS: 43, /* + */
22033 CHAR_QUESTION_MARK: 63, /* ? */
22034 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
22035 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
22036 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
22037 CHAR_SEMICOLON: 59, /* ; */
22038 CHAR_SINGLE_QUOTE: 39, /* ' */
22039 CHAR_SPACE: 32, /* */
22040 CHAR_TAB: 9, /* \t */
22041 CHAR_UNDERSCORE: 95, /* _ */
22042 CHAR_VERTICAL_LINE: 124, /* | */
22043 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
22044
22045 SEP: path.sep,
22046
22047 /**
22048 * Create EXTGLOB_CHARS
22049 */
22050
22051 extglobChars(chars) {
22052 return {
22053 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
22054 '?': { type: 'qmark', open: '(?:', close: ')?' },
22055 '+': { type: 'plus', open: '(?:', close: ')+' },
22056 '*': { type: 'star', open: '(?:', close: ')*' },
22057 '@': { type: 'at', open: '(?:', close: ')' }
22058 };
22059 },
22060
22061 /**
22062 * Create GLOB_CHARS
22063 */
22064
22065 globChars(win32) {
22066 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
22067 }
22068};
22069
22070
22071/***/ }),
22072/* 111 */
22073/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
22074
22075"use strict";
22076
22077
22078const constants = __webpack_require__(110);
22079const utils = __webpack_require__(109);
22080
22081/**
22082 * Constants
22083 */
22084
22085const {
22086 MAX_LENGTH,
22087 POSIX_REGEX_SOURCE,
22088 REGEX_NON_SPECIAL_CHARS,
22089 REGEX_SPECIAL_CHARS_BACKREF,
22090 REPLACEMENTS
22091} = constants;
22092
22093/**
22094 * Helpers
22095 */
22096
22097const expandRange = (args, options) => {
22098 if (typeof options.expandRange === 'function') {
22099 return options.expandRange(...args, options);
22100 }
22101
22102 args.sort();
22103 const value = `[${args.join('-')}]`;
22104
22105 try {
22106 /* eslint-disable-next-line no-new */
22107 new RegExp(value);
22108 } catch (ex) {
22109 return args.map(v => utils.escapeRegex(v)).join('..');
22110 }
22111
22112 return value;
22113};
22114
22115/**
22116 * Create the message for a syntax error
22117 */
22118
22119const syntaxError = (type, char) => {
22120 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
22121};
22122
22123/**
22124 * Parse the given input string.
22125 * @param {String} input
22126 * @param {Object} options
22127 * @return {Object}
22128 */
22129
22130const parse = (input, options) => {
22131 if (typeof input !== 'string') {
22132 throw new TypeError('Expected a string');
22133 }
22134
22135 input = REPLACEMENTS[input] || input;
22136
22137 const opts = { ...options };
22138 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
22139
22140 let len = input.length;
22141 if (len > max) {
22142 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
22143 }
22144
22145 const bos = { type: 'bos', value: '', output: opts.prepend || '' };
22146 const tokens = [bos];
22147
22148 const capture = opts.capture ? '' : '?:';
22149 const win32 = utils.isWindows(options);
22150
22151 // create constants based on platform, for windows or posix
22152 const PLATFORM_CHARS = constants.globChars(win32);
22153 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
22154
22155 const {
22156 DOT_LITERAL,
22157 PLUS_LITERAL,
22158 SLASH_LITERAL,
22159 ONE_CHAR,
22160 DOTS_SLASH,
22161 NO_DOT,
22162 NO_DOT_SLASH,
22163 NO_DOTS_SLASH,
22164 QMARK,
22165 QMARK_NO_DOT,
22166 STAR,
22167 START_ANCHOR
22168 } = PLATFORM_CHARS;
22169
22170 const globstar = (opts) => {
22171 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
22172 };
22173
22174 const nodot = opts.dot ? '' : NO_DOT;
22175 const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
22176 let star = opts.bash === true ? globstar(opts) : STAR;
22177
22178 if (opts.capture) {
22179 star = `(${star})`;
22180 }
22181
22182 // minimatch options support
22183 if (typeof opts.noext === 'boolean') {
22184 opts.noextglob = opts.noext;
22185 }
22186
22187 const state = {
22188 input,
22189 index: -1,
22190 start: 0,
22191 dot: opts.dot === true,
22192 consumed: '',
22193 output: '',
22194 prefix: '',
22195 backtrack: false,
22196 negated: false,
22197 brackets: 0,
22198 braces: 0,
22199 parens: 0,
22200 quotes: 0,
22201 globstar: false,
22202 tokens
22203 };
22204
22205 input = utils.removePrefix(input, state);
22206 len = input.length;
22207
22208 const extglobs = [];
22209 const braces = [];
22210 const stack = [];
22211 let prev = bos;
22212 let value;
22213
22214 /**
22215 * Tokenizing helpers
22216 */
22217
22218 const eos = () => state.index === len - 1;
22219 const peek = state.peek = (n = 1) => input[state.index + n];
22220 const advance = state.advance = () => input[++state.index];
22221 const remaining = () => input.slice(state.index + 1);
22222 const consume = (value = '', num = 0) => {
22223 state.consumed += value;
22224 state.index += num;
22225 };
22226 const append = token => {
22227 state.output += token.output != null ? token.output : token.value;
22228 consume(token.value);
22229 };
22230
22231 const negate = () => {
22232 let count = 1;
22233
22234 while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
22235 advance();
22236 state.start++;
22237 count++;
22238 }
22239
22240 if (count % 2 === 0) {
22241 return false;
22242 }
22243
22244 state.negated = true;
22245 state.start++;
22246 return true;
22247 };
22248
22249 const increment = type => {
22250 state[type]++;
22251 stack.push(type);
22252 };
22253
22254 const decrement = type => {
22255 state[type]--;
22256 stack.pop();
22257 };
22258
22259 /**
22260 * Push tokens onto the tokens array. This helper speeds up
22261 * tokenizing by 1) helping us avoid backtracking as much as possible,
22262 * and 2) helping us avoid creating extra tokens when consecutive
22263 * characters are plain text. This improves performance and simplifies
22264 * lookbehinds.
22265 */
22266
22267 const push = tok => {
22268 if (prev.type === 'globstar') {
22269 const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
22270 const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
22271
22272 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
22273 state.output = state.output.slice(0, -prev.output.length);
22274 prev.type = 'star';
22275 prev.value = '*';
22276 prev.output = star;
22277 state.output += prev.output;
22278 }
22279 }
22280
22281 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
22282 extglobs[extglobs.length - 1].inner += tok.value;
22283 }
22284
22285 if (tok.value || tok.output) append(tok);
22286 if (prev && prev.type === 'text' && tok.type === 'text') {
22287 prev.value += tok.value;
22288 prev.output = (prev.output || '') + tok.value;
22289 return;
22290 }
22291
22292 tok.prev = prev;
22293 tokens.push(tok);
22294 prev = tok;
22295 };
22296
22297 const extglobOpen = (type, value) => {
22298 const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
22299
22300 token.prev = prev;
22301 token.parens = state.parens;
22302 token.output = state.output;
22303 const output = (opts.capture ? '(' : '') + token.open;
22304
22305 increment('parens');
22306 push({ type, value, output: state.output ? '' : ONE_CHAR });
22307 push({ type: 'paren', extglob: true, value: advance(), output });
22308 extglobs.push(token);
22309 };
22310
22311 const extglobClose = token => {
22312 let output = token.close + (opts.capture ? ')' : '');
22313
22314 if (token.type === 'negate') {
22315 let extglobStar = star;
22316
22317 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
22318 extglobStar = globstar(opts);
22319 }
22320
22321 if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
22322 output = token.close = `)$))${extglobStar}`;
22323 }
22324
22325 if (token.prev.type === 'bos' && eos()) {
22326 state.negatedExtglob = true;
22327 }
22328 }
22329
22330 push({ type: 'paren', extglob: true, value, output });
22331 decrement('parens');
22332 };
22333
22334 /**
22335 * Fast paths
22336 */
22337
22338 if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
22339 let backslashes = false;
22340
22341 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
22342 if (first === '\\') {
22343 backslashes = true;
22344 return m;
22345 }
22346
22347 if (first === '?') {
22348 if (esc) {
22349 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
22350 }
22351 if (index === 0) {
22352 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
22353 }
22354 return QMARK.repeat(chars.length);
22355 }
22356
22357 if (first === '.') {
22358 return DOT_LITERAL.repeat(chars.length);
22359 }
22360
22361 if (first === '*') {
22362 if (esc) {
22363 return esc + first + (rest ? star : '');
22364 }
22365 return star;
22366 }
22367 return esc ? m : `\\${m}`;
22368 });
22369
22370 if (backslashes === true) {
22371 if (opts.unescape === true) {
22372 output = output.replace(/\\/g, '');
22373 } else {
22374 output = output.replace(/\\+/g, m => {
22375 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
22376 });
22377 }
22378 }
22379
22380 if (output === input && opts.contains === true) {
22381 state.output = input;
22382 return state;
22383 }
22384
22385 state.output = utils.wrapOutput(output, state, options);
22386 return state;
22387 }
22388
22389 /**
22390 * Tokenize input until we reach end-of-string
22391 */
22392
22393 while (!eos()) {
22394 value = advance();
22395
22396 if (value === '\u0000') {
22397 continue;
22398 }
22399
22400 /**
22401 * Escaped characters
22402 */
22403
22404 if (value === '\\') {
22405 const next = peek();
22406
22407 if (next === '/' && opts.bash !== true) {
22408 continue;
22409 }
22410
22411 if (next === '.' || next === ';') {
22412 continue;
22413 }
22414
22415 if (!next) {
22416 value += '\\';
22417 push({ type: 'text', value });
22418 continue;
22419 }
22420
22421 // collapse slashes to reduce potential for exploits
22422 const match = /^\\+/.exec(remaining());
22423 let slashes = 0;
22424
22425 if (match && match[0].length > 2) {
22426 slashes = match[0].length;
22427 state.index += slashes;
22428 if (slashes % 2 !== 0) {
22429 value += '\\';
22430 }
22431 }
22432
22433 if (opts.unescape === true) {
22434 value = advance() || '';
22435 } else {
22436 value += advance() || '';
22437 }
22438
22439 if (state.brackets === 0) {
22440 push({ type: 'text', value });
22441 continue;
22442 }
22443 }
22444
22445 /**
22446 * If we're inside a regex character class, continue
22447 * until we reach the closing bracket.
22448 */
22449
22450 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
22451 if (opts.posix !== false && value === ':') {
22452 const inner = prev.value.slice(1);
22453 if (inner.includes('[')) {
22454 prev.posix = true;
22455
22456 if (inner.includes(':')) {
22457 const idx = prev.value.lastIndexOf('[');
22458 const pre = prev.value.slice(0, idx);
22459 const rest = prev.value.slice(idx + 2);
22460 const posix = POSIX_REGEX_SOURCE[rest];
22461 if (posix) {
22462 prev.value = pre + posix;
22463 state.backtrack = true;
22464 advance();
22465
22466 if (!bos.output && tokens.indexOf(prev) === 1) {
22467 bos.output = ONE_CHAR;
22468 }
22469 continue;
22470 }
22471 }
22472 }
22473 }
22474
22475 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
22476 value = `\\${value}`;
22477 }
22478
22479 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
22480 value = `\\${value}`;
22481 }
22482
22483 if (opts.posix === true && value === '!' && prev.value === '[') {
22484 value = '^';
22485 }
22486
22487 prev.value += value;
22488 append({ value });
22489 continue;
22490 }
22491
22492 /**
22493 * If we're inside a quoted string, continue
22494 * until we reach the closing double quote.
22495 */
22496
22497 if (state.quotes === 1 && value !== '"') {
22498 value = utils.escapeRegex(value);
22499 prev.value += value;
22500 append({ value });
22501 continue;
22502 }
22503
22504 /**
22505 * Double quotes
22506 */
22507
22508 if (value === '"') {
22509 state.quotes = state.quotes === 1 ? 0 : 1;
22510 if (opts.keepQuotes === true) {
22511 push({ type: 'text', value });
22512 }
22513 continue;
22514 }
22515
22516 /**
22517 * Parentheses
22518 */
22519
22520 if (value === '(') {
22521 increment('parens');
22522 push({ type: 'paren', value });
22523 continue;
22524 }
22525
22526 if (value === ')') {
22527 if (state.parens === 0 && opts.strictBrackets === true) {
22528 throw new SyntaxError(syntaxError('opening', '('));
22529 }
22530
22531 const extglob = extglobs[extglobs.length - 1];
22532 if (extglob && state.parens === extglob.parens + 1) {
22533 extglobClose(extglobs.pop());
22534 continue;
22535 }
22536
22537 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
22538 decrement('parens');
22539 continue;
22540 }
22541
22542 /**
22543 * Square brackets
22544 */
22545
22546 if (value === '[') {
22547 if (opts.nobracket === true || !remaining().includes(']')) {
22548 if (opts.nobracket !== true && opts.strictBrackets === true) {
22549 throw new SyntaxError(syntaxError('closing', ']'));
22550 }
22551
22552 value = `\\${value}`;
22553 } else {
22554 increment('brackets');
22555 }
22556
22557 push({ type: 'bracket', value });
22558 continue;
22559 }
22560
22561 if (value === ']') {
22562 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
22563 push({ type: 'text', value, output: `\\${value}` });
22564 continue;
22565 }
22566
22567 if (state.brackets === 0) {
22568 if (opts.strictBrackets === true) {
22569 throw new SyntaxError(syntaxError('opening', '['));
22570 }
22571
22572 push({ type: 'text', value, output: `\\${value}` });
22573 continue;
22574 }
22575
22576 decrement('brackets');
22577
22578 const prevValue = prev.value.slice(1);
22579 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
22580 value = `/${value}`;
22581 }
22582
22583 prev.value += value;
22584 append({ value });
22585
22586 // when literal brackets are explicitly disabled
22587 // assume we should match with a regex character class
22588 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
22589 continue;
22590 }
22591
22592 const escaped = utils.escapeRegex(prev.value);
22593 state.output = state.output.slice(0, -prev.value.length);
22594
22595 // when literal brackets are explicitly enabled
22596 // assume we should escape the brackets to match literal characters
22597 if (opts.literalBrackets === true) {
22598 state.output += escaped;
22599 prev.value = escaped;
22600 continue;
22601 }
22602
22603 // when the user specifies nothing, try to match both
22604 prev.value = `(${capture}${escaped}|${prev.value})`;
22605 state.output += prev.value;
22606 continue;
22607 }
22608
22609 /**
22610 * Braces
22611 */
22612
22613 if (value === '{' && opts.nobrace !== true) {
22614 increment('braces');
22615
22616 const open = {
22617 type: 'brace',
22618 value,
22619 output: '(',
22620 outputIndex: state.output.length,
22621 tokensIndex: state.tokens.length
22622 };
22623
22624 braces.push(open);
22625 push(open);
22626 continue;
22627 }
22628
22629 if (value === '}') {
22630 const brace = braces[braces.length - 1];
22631
22632 if (opts.nobrace === true || !brace) {
22633 push({ type: 'text', value, output: value });
22634 continue;
22635 }
22636
22637 let output = ')';
22638
22639 if (brace.dots === true) {
22640 const arr = tokens.slice();
22641 const range = [];
22642
22643 for (let i = arr.length - 1; i >= 0; i--) {
22644 tokens.pop();
22645 if (arr[i].type === 'brace') {
22646 break;
22647 }
22648 if (arr[i].type !== 'dots') {
22649 range.unshift(arr[i].value);
22650 }
22651 }
22652
22653 output = expandRange(range, opts);
22654 state.backtrack = true;
22655 }
22656
22657 if (brace.comma !== true && brace.dots !== true) {
22658 const out = state.output.slice(0, brace.outputIndex);
22659 const toks = state.tokens.slice(brace.tokensIndex);
22660 brace.value = brace.output = '\\{';
22661 value = output = '\\}';
22662 state.output = out;
22663 for (const t of toks) {
22664 state.output += (t.output || t.value);
22665 }
22666 }
22667
22668 push({ type: 'brace', value, output });
22669 decrement('braces');
22670 braces.pop();
22671 continue;
22672 }
22673
22674 /**
22675 * Pipes
22676 */
22677
22678 if (value === '|') {
22679 if (extglobs.length > 0) {
22680 extglobs[extglobs.length - 1].conditions++;
22681 }
22682 push({ type: 'text', value });
22683 continue;
22684 }
22685
22686 /**
22687 * Commas
22688 */
22689
22690 if (value === ',') {
22691 let output = value;
22692
22693 const brace = braces[braces.length - 1];
22694 if (brace && stack[stack.length - 1] === 'braces') {
22695 brace.comma = true;
22696 output = '|';
22697 }
22698
22699 push({ type: 'comma', value, output });
22700 continue;
22701 }
22702
22703 /**
22704 * Slashes
22705 */
22706
22707 if (value === '/') {
22708 // if the beginning of the glob is "./", advance the start
22709 // to the current index, and don't add the "./" characters
22710 // to the state. This greatly simplifies lookbehinds when
22711 // checking for BOS characters like "!" and "." (not "./")
22712 if (prev.type === 'dot' && state.index === state.start + 1) {
22713 state.start = state.index + 1;
22714 state.consumed = '';
22715 state.output = '';
22716 tokens.pop();
22717 prev = bos; // reset "prev" to the first token
22718 continue;
22719 }
22720
22721 push({ type: 'slash', value, output: SLASH_LITERAL });
22722 continue;
22723 }
22724
22725 /**
22726 * Dots
22727 */
22728
22729 if (value === '.') {
22730 if (state.braces > 0 && prev.type === 'dot') {
22731 if (prev.value === '.') prev.output = DOT_LITERAL;
22732 const brace = braces[braces.length - 1];
22733 prev.type = 'dots';
22734 prev.output += value;
22735 prev.value += value;
22736 brace.dots = true;
22737 continue;
22738 }
22739
22740 if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
22741 push({ type: 'text', value, output: DOT_LITERAL });
22742 continue;
22743 }
22744
22745 push({ type: 'dot', value, output: DOT_LITERAL });
22746 continue;
22747 }
22748
22749 /**
22750 * Question marks
22751 */
22752
22753 if (value === '?') {
22754 const isGroup = prev && prev.value === '(';
22755 if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
22756 extglobOpen('qmark', value);
22757 continue;
22758 }
22759
22760 if (prev && prev.type === 'paren') {
22761 const next = peek();
22762 let output = value;
22763
22764 if (next === '<' && !utils.supportsLookbehinds()) {
22765 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
22766 }
22767
22768 if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
22769 output = `\\${value}`;
22770 }
22771
22772 push({ type: 'text', value, output });
22773 continue;
22774 }
22775
22776 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
22777 push({ type: 'qmark', value, output: QMARK_NO_DOT });
22778 continue;
22779 }
22780
22781 push({ type: 'qmark', value, output: QMARK });
22782 continue;
22783 }
22784
22785 /**
22786 * Exclamation
22787 */
22788
22789 if (value === '!') {
22790 if (opts.noextglob !== true && peek() === '(') {
22791 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
22792 extglobOpen('negate', value);
22793 continue;
22794 }
22795 }
22796
22797 if (opts.nonegate !== true && state.index === 0) {
22798 negate();
22799 continue;
22800 }
22801 }
22802
22803 /**
22804 * Plus
22805 */
22806
22807 if (value === '+') {
22808 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
22809 extglobOpen('plus', value);
22810 continue;
22811 }
22812
22813 if ((prev && prev.value === '(') || opts.regex === false) {
22814 push({ type: 'plus', value, output: PLUS_LITERAL });
22815 continue;
22816 }
22817
22818 if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
22819 push({ type: 'plus', value });
22820 continue;
22821 }
22822
22823 push({ type: 'plus', value: PLUS_LITERAL });
22824 continue;
22825 }
22826
22827 /**
22828 * Plain text
22829 */
22830
22831 if (value === '@') {
22832 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
22833 push({ type: 'at', extglob: true, value, output: '' });
22834 continue;
22835 }
22836
22837 push({ type: 'text', value });
22838 continue;
22839 }
22840
22841 /**
22842 * Plain text
22843 */
22844
22845 if (value !== '*') {
22846 if (value === '$' || value === '^') {
22847 value = `\\${value}`;
22848 }
22849
22850 const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
22851 if (match) {
22852 value += match[0];
22853 state.index += match[0].length;
22854 }
22855
22856 push({ type: 'text', value });
22857 continue;
22858 }
22859
22860 /**
22861 * Stars
22862 */
22863
22864 if (prev && (prev.type === 'globstar' || prev.star === true)) {
22865 prev.type = 'star';
22866 prev.star = true;
22867 prev.value += value;
22868 prev.output = star;
22869 state.backtrack = true;
22870 state.globstar = true;
22871 consume(value);
22872 continue;
22873 }
22874
22875 let rest = remaining();
22876 if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
22877 extglobOpen('star', value);
22878 continue;
22879 }
22880
22881 if (prev.type === 'star') {
22882 if (opts.noglobstar === true) {
22883 consume(value);
22884 continue;
22885 }
22886
22887 const prior = prev.prev;
22888 const before = prior.prev;
22889 const isStart = prior.type === 'slash' || prior.type === 'bos';
22890 const afterStar = before && (before.type === 'star' || before.type === 'globstar');
22891
22892 if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
22893 push({ type: 'star', value, output: '' });
22894 continue;
22895 }
22896
22897 const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
22898 const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
22899 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
22900 push({ type: 'star', value, output: '' });
22901 continue;
22902 }
22903
22904 // strip consecutive `/**/`
22905 while (rest.slice(0, 3) === '/**') {
22906 const after = input[state.index + 4];
22907 if (after && after !== '/') {
22908 break;
22909 }
22910 rest = rest.slice(3);
22911 consume('/**', 3);
22912 }
22913
22914 if (prior.type === 'bos' && eos()) {
22915 prev.type = 'globstar';
22916 prev.value += value;
22917 prev.output = globstar(opts);
22918 state.output = prev.output;
22919 state.globstar = true;
22920 consume(value);
22921 continue;
22922 }
22923
22924 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
22925 state.output = state.output.slice(0, -(prior.output + prev.output).length);
22926 prior.output = `(?:${prior.output}`;
22927
22928 prev.type = 'globstar';
22929 prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
22930 prev.value += value;
22931 state.globstar = true;
22932 state.output += prior.output + prev.output;
22933 consume(value);
22934 continue;
22935 }
22936
22937 if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
22938 const end = rest[1] !== void 0 ? '|$' : '';
22939
22940 state.output = state.output.slice(0, -(prior.output + prev.output).length);
22941 prior.output = `(?:${prior.output}`;
22942
22943 prev.type = 'globstar';
22944 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
22945 prev.value += value;
22946
22947 state.output += prior.output + prev.output;
22948 state.globstar = true;
22949
22950 consume(value + advance());
22951
22952 push({ type: 'slash', value: '/', output: '' });
22953 continue;
22954 }
22955
22956 if (prior.type === 'bos' && rest[0] === '/') {
22957 prev.type = 'globstar';
22958 prev.value += value;
22959 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
22960 state.output = prev.output;
22961 state.globstar = true;
22962 consume(value + advance());
22963 push({ type: 'slash', value: '/', output: '' });
22964 continue;
22965 }
22966
22967 // remove single star from output
22968 state.output = state.output.slice(0, -prev.output.length);
22969
22970 // reset previous token to globstar
22971 prev.type = 'globstar';
22972 prev.output = globstar(opts);
22973 prev.value += value;
22974
22975 // reset output with globstar
22976 state.output += prev.output;
22977 state.globstar = true;
22978 consume(value);
22979 continue;
22980 }
22981
22982 const token = { type: 'star', value, output: star };
22983
22984 if (opts.bash === true) {
22985 token.output = '.*?';
22986 if (prev.type === 'bos' || prev.type === 'slash') {
22987 token.output = nodot + token.output;
22988 }
22989 push(token);
22990 continue;
22991 }
22992
22993 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
22994 token.output = value;
22995 push(token);
22996 continue;
22997 }
22998
22999 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
23000 if (prev.type === 'dot') {
23001 state.output += NO_DOT_SLASH;
23002 prev.output += NO_DOT_SLASH;
23003
23004 } else if (opts.dot === true) {
23005 state.output += NO_DOTS_SLASH;
23006 prev.output += NO_DOTS_SLASH;
23007
23008 } else {
23009 state.output += nodot;
23010 prev.output += nodot;
23011 }
23012
23013 if (peek() !== '*') {
23014 state.output += ONE_CHAR;
23015 prev.output += ONE_CHAR;
23016 }
23017 }
23018
23019 push(token);
23020 }
23021
23022 while (state.brackets > 0) {
23023 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
23024 state.output = utils.escapeLast(state.output, '[');
23025 decrement('brackets');
23026 }
23027
23028 while (state.parens > 0) {
23029 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
23030 state.output = utils.escapeLast(state.output, '(');
23031 decrement('parens');
23032 }
23033
23034 while (state.braces > 0) {
23035 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
23036 state.output = utils.escapeLast(state.output, '{');
23037 decrement('braces');
23038 }
23039
23040 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
23041 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
23042 }
23043
23044 // rebuild the output if we had to backtrack at any point
23045 if (state.backtrack === true) {
23046 state.output = '';
23047
23048 for (const token of state.tokens) {
23049 state.output += token.output != null ? token.output : token.value;
23050
23051 if (token.suffix) {
23052 state.output += token.suffix;
23053 }
23054 }
23055 }
23056
23057 return state;
23058};
23059
23060/**
23061 * Fast paths for creating regular expressions for common glob patterns.
23062 * This can significantly speed up processing and has very little downside
23063 * impact when none of the fast paths match.
23064 */
23065
23066parse.fastpaths = (input, options) => {
23067 const opts = { ...options };
23068 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
23069 const len = input.length;
23070 if (len > max) {
23071 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
23072 }
23073
23074 input = REPLACEMENTS[input] || input;
23075 const win32 = utils.isWindows(options);
23076
23077 // create constants based on platform, for windows or posix
23078 const {
23079 DOT_LITERAL,
23080 SLASH_LITERAL,
23081 ONE_CHAR,
23082 DOTS_SLASH,
23083 NO_DOT,
23084 NO_DOTS,
23085 NO_DOTS_SLASH,
23086 STAR,
23087 START_ANCHOR
23088 } = constants.globChars(win32);
23089
23090 const nodot = opts.dot ? NO_DOTS : NO_DOT;
23091 const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
23092 const capture = opts.capture ? '' : '?:';
23093 const state = { negated: false, prefix: '' };
23094 let star = opts.bash === true ? '.*?' : STAR;
23095
23096 if (opts.capture) {
23097 star = `(${star})`;
23098 }
23099
23100 const globstar = (opts) => {
23101 if (opts.noglobstar === true) return star;
23102 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
23103 };
23104
23105 const create = str => {
23106 switch (str) {
23107 case '*':
23108 return `${nodot}${ONE_CHAR}${star}`;
23109
23110 case '.*':
23111 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
23112
23113 case '*.*':
23114 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
23115
23116 case '*/*':
23117 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
23118
23119 case '**':
23120 return nodot + globstar(opts);
23121
23122 case '**/*':
23123 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
23124
23125 case '**/*.*':
23126 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
23127
23128 case '**/.*':
23129 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
23130
23131 default: {
23132 const match = /^(.*?)\.(\w+)$/.exec(str);
23133 if (!match) return;
23134
23135 const source = create(match[1]);
23136 if (!source) return;
23137
23138 return source + DOT_LITERAL + match[2];
23139 }
23140 }
23141 };
23142
23143 const output = utils.removePrefix(input, state);
23144 let source = create(output);
23145
23146 if (source && opts.strictSlashes !== true) {
23147 source += `${SLASH_LITERAL}?`;
23148 }
23149
23150 return source;
23151};
23152
23153module.exports = parse;
23154
23155
23156/***/ }),
23157/* 112 */
23158/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23159
23160"use strict";
23161
23162Object.defineProperty(exports, "__esModule", ({ value: true }));
23163exports.merge = void 0;
23164const merge2 = __webpack_require__(113);
23165function merge(streams) {
23166 const mergedStream = merge2(streams);
23167 streams.forEach((stream) => {
23168 stream.once('error', (error) => mergedStream.emit('error', error));
23169 });
23170 mergedStream.once('close', () => propagateCloseEventToSources(streams));
23171 mergedStream.once('end', () => propagateCloseEventToSources(streams));
23172 return mergedStream;
23173}
23174exports.merge = merge;
23175function propagateCloseEventToSources(streams) {
23176 streams.forEach((stream) => stream.emit('close'));
23177}
23178
23179
23180/***/ }),
23181/* 113 */
23182/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
23183
23184"use strict";
23185
23186/*
23187 * merge2
23188 * https://github.com/teambition/merge2
23189 *
23190 * Copyright (c) 2014-2016 Teambition
23191 * Licensed under the MIT license.
23192 */
23193const Stream = __webpack_require__(114)
23194const PassThrough = Stream.PassThrough
23195const slice = Array.prototype.slice
23196
23197module.exports = merge2
23198
23199function merge2 () {
23200 const streamsQueue = []
23201 let merging = false
23202 const args = slice.call(arguments)
23203 let options = args[args.length - 1]
23204
23205 if (options && !Array.isArray(options) && options.pipe == null) args.pop()
23206 else options = {}
23207
23208 const doEnd = options.end !== false
23209 if (options.objectMode == null) options.objectMode = true
23210 if (options.highWaterMark == null) options.highWaterMark = 64 * 1024
23211 const mergedStream = PassThrough(options)
23212
23213 function addStream () {
23214 for (let i = 0, len = arguments.length; i < len; i++) {
23215 streamsQueue.push(pauseStreams(arguments[i], options))
23216 }
23217 mergeStream()
23218 return this
23219 }
23220
23221 function mergeStream () {
23222 if (merging) return
23223 merging = true
23224
23225 let streams = streamsQueue.shift()
23226 if (!streams) {
23227 process.nextTick(endStream)
23228 return
23229 }
23230 if (!Array.isArray(streams)) streams = [streams]
23231
23232 let pipesCount = streams.length + 1
23233
23234 function next () {
23235 if (--pipesCount > 0) return
23236 merging = false
23237 mergeStream()
23238 }
23239
23240 function pipe (stream) {
23241 function onend () {
23242 stream.removeListener('merge2UnpipeEnd', onend)
23243 stream.removeListener('end', onend)
23244 next()
23245 }
23246 // skip ended stream
23247 if (stream._readableState.endEmitted) return next()
23248
23249 stream.on('merge2UnpipeEnd', onend)
23250 stream.on('end', onend)
23251 stream.pipe(mergedStream, { end: false })
23252 // compatible for old stream
23253 stream.resume()
23254 }
23255
23256 for (let i = 0; i < streams.length; i++) pipe(streams[i])
23257
23258 next()
23259 }
23260
23261 function endStream () {
23262 merging = false
23263 // emit 'queueDrain' when all streams merged.
23264 mergedStream.emit('queueDrain')
23265 return doEnd && mergedStream.end()
23266 }
23267
23268 mergedStream.setMaxListeners(0)
23269 mergedStream.add = addStream
23270 mergedStream.on('unpipe', function (stream) {
23271 stream.emit('merge2UnpipeEnd')
23272 })
23273
23274 if (args.length) addStream.apply(null, args)
23275 return mergedStream
23276}
23277
23278// check and pause streams for pipe.
23279function pauseStreams (streams, options) {
23280 if (!Array.isArray(streams)) {
23281 // Backwards-compat with old-style streams
23282 if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options))
23283 if (!streams._readableState || !streams.pause || !streams.pipe) {
23284 throw new Error('Only readable stream can be merged.')
23285 }
23286 streams.pause()
23287 } else {
23288 for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options)
23289 }
23290 return streams
23291}
23292
23293
23294/***/ }),
23295/* 114 */
23296/***/ ((module) => {
23297
23298"use strict";
23299module.exports = require("stream");;
23300
23301/***/ }),
23302/* 115 */
23303/***/ ((__unused_webpack_module, exports) => {
23304
23305"use strict";
23306
23307Object.defineProperty(exports, "__esModule", ({ value: true }));
23308exports.isEmpty = exports.isString = void 0;
23309function isString(input) {
23310 return typeof input === 'string';
23311}
23312exports.isString = isString;
23313function isEmpty(input) {
23314 return input === '';
23315}
23316exports.isEmpty = isEmpty;
23317
23318
23319/***/ }),
23320/* 116 */
23321/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23322
23323"use strict";
23324
23325Object.defineProperty(exports, "__esModule", ({ value: true }));
23326const stream_1 = __webpack_require__(117);
23327const provider_1 = __webpack_require__(144);
23328class ProviderAsync extends provider_1.default {
23329 constructor() {
23330 super(...arguments);
23331 this._reader = new stream_1.default(this._settings);
23332 }
23333 read(task) {
23334 const root = this._getRootDirectory(task);
23335 const options = this._getReaderOptions(task);
23336 const entries = [];
23337 return new Promise((resolve, reject) => {
23338 const stream = this.api(root, task, options);
23339 stream.once('error', reject);
23340 stream.on('data', (entry) => entries.push(options.transform(entry)));
23341 stream.once('end', () => resolve(entries));
23342 });
23343 }
23344 api(root, task, options) {
23345 if (task.dynamic) {
23346 return this._reader.dynamic(root, options);
23347 }
23348 return this._reader.static(task.patterns, options);
23349 }
23350}
23351exports.default = ProviderAsync;
23352
23353
23354/***/ }),
23355/* 117 */
23356/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23357
23358"use strict";
23359
23360Object.defineProperty(exports, "__esModule", ({ value: true }));
23361const stream_1 = __webpack_require__(114);
23362const fsStat = __webpack_require__(118);
23363const fsWalk = __webpack_require__(123);
23364const reader_1 = __webpack_require__(143);
23365class ReaderStream extends reader_1.default {
23366 constructor() {
23367 super(...arguments);
23368 this._walkStream = fsWalk.walkStream;
23369 this._stat = fsStat.stat;
23370 }
23371 dynamic(root, options) {
23372 return this._walkStream(root, options);
23373 }
23374 static(patterns, options) {
23375 const filepaths = patterns.map(this._getFullEntryPath, this);
23376 const stream = new stream_1.PassThrough({ objectMode: true });
23377 stream._write = (index, _enc, done) => {
23378 return this._getEntry(filepaths[index], patterns[index], options)
23379 .then((entry) => {
23380 if (entry !== null && options.entryFilter(entry)) {
23381 stream.push(entry);
23382 }
23383 if (index === filepaths.length - 1) {
23384 stream.end();
23385 }
23386 done();
23387 })
23388 .catch(done);
23389 };
23390 for (let i = 0; i < filepaths.length; i++) {
23391 stream.write(i);
23392 }
23393 return stream;
23394 }
23395 _getEntry(filepath, pattern, options) {
23396 return this._getStat(filepath)
23397 .then((stats) => this._makeEntry(stats, pattern))
23398 .catch((error) => {
23399 if (options.errorFilter(error)) {
23400 return null;
23401 }
23402 throw error;
23403 });
23404 }
23405 _getStat(filepath) {
23406 return new Promise((resolve, reject) => {
23407 this._stat(filepath, this._fsStatSettings, (error, stats) => {
23408 return error === null ? resolve(stats) : reject(error);
23409 });
23410 });
23411 }
23412}
23413exports.default = ReaderStream;
23414
23415
23416/***/ }),
23417/* 118 */
23418/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23419
23420"use strict";
23421
23422Object.defineProperty(exports, "__esModule", ({ value: true }));
23423const async = __webpack_require__(119);
23424const sync = __webpack_require__(120);
23425const settings_1 = __webpack_require__(121);
23426exports.Settings = settings_1.default;
23427function stat(path, optionsOrSettingsOrCallback, callback) {
23428 if (typeof optionsOrSettingsOrCallback === 'function') {
23429 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
23430 }
23431 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
23432}
23433exports.stat = stat;
23434function statSync(path, optionsOrSettings) {
23435 const settings = getSettings(optionsOrSettings);
23436 return sync.read(path, settings);
23437}
23438exports.statSync = statSync;
23439function getSettings(settingsOrOptions = {}) {
23440 if (settingsOrOptions instanceof settings_1.default) {
23441 return settingsOrOptions;
23442 }
23443 return new settings_1.default(settingsOrOptions);
23444}
23445
23446
23447/***/ }),
23448/* 119 */
23449/***/ ((__unused_webpack_module, exports) => {
23450
23451"use strict";
23452
23453Object.defineProperty(exports, "__esModule", ({ value: true }));
23454function read(path, settings, callback) {
23455 settings.fs.lstat(path, (lstatError, lstat) => {
23456 if (lstatError !== null) {
23457 return callFailureCallback(callback, lstatError);
23458 }
23459 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
23460 return callSuccessCallback(callback, lstat);
23461 }
23462 settings.fs.stat(path, (statError, stat) => {
23463 if (statError !== null) {
23464 if (settings.throwErrorOnBrokenSymbolicLink) {
23465 return callFailureCallback(callback, statError);
23466 }
23467 return callSuccessCallback(callback, lstat);
23468 }
23469 if (settings.markSymbolicLink) {
23470 stat.isSymbolicLink = () => true;
23471 }
23472 callSuccessCallback(callback, stat);
23473 });
23474 });
23475}
23476exports.read = read;
23477function callFailureCallback(callback, error) {
23478 callback(error);
23479}
23480function callSuccessCallback(callback, result) {
23481 callback(null, result);
23482}
23483
23484
23485/***/ }),
23486/* 120 */
23487/***/ ((__unused_webpack_module, exports) => {
23488
23489"use strict";
23490
23491Object.defineProperty(exports, "__esModule", ({ value: true }));
23492function read(path, settings) {
23493 const lstat = settings.fs.lstatSync(path);
23494 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
23495 return lstat;
23496 }
23497 try {
23498 const stat = settings.fs.statSync(path);
23499 if (settings.markSymbolicLink) {
23500 stat.isSymbolicLink = () => true;
23501 }
23502 return stat;
23503 }
23504 catch (error) {
23505 if (!settings.throwErrorOnBrokenSymbolicLink) {
23506 return lstat;
23507 }
23508 throw error;
23509 }
23510}
23511exports.read = read;
23512
23513
23514/***/ }),
23515/* 121 */
23516/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23517
23518"use strict";
23519
23520Object.defineProperty(exports, "__esModule", ({ value: true }));
23521const fs = __webpack_require__(122);
23522class Settings {
23523 constructor(_options = {}) {
23524 this._options = _options;
23525 this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
23526 this.fs = fs.createFileSystemAdapter(this._options.fs);
23527 this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
23528 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
23529 }
23530 _getValue(option, value) {
23531 return option === undefined ? value : option;
23532 }
23533}
23534exports.default = Settings;
23535
23536
23537/***/ }),
23538/* 122 */
23539/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23540
23541"use strict";
23542
23543Object.defineProperty(exports, "__esModule", ({ value: true }));
23544const fs = __webpack_require__(60);
23545exports.FILE_SYSTEM_ADAPTER = {
23546 lstat: fs.lstat,
23547 stat: fs.stat,
23548 lstatSync: fs.lstatSync,
23549 statSync: fs.statSync
23550};
23551function createFileSystemAdapter(fsMethods) {
23552 if (fsMethods === undefined) {
23553 return exports.FILE_SYSTEM_ADAPTER;
23554 }
23555 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
23556}
23557exports.createFileSystemAdapter = createFileSystemAdapter;
23558
23559
23560/***/ }),
23561/* 123 */
23562/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23563
23564"use strict";
23565
23566Object.defineProperty(exports, "__esModule", ({ value: true }));
23567const async_1 = __webpack_require__(124);
23568const stream_1 = __webpack_require__(139);
23569const sync_1 = __webpack_require__(140);
23570const settings_1 = __webpack_require__(142);
23571exports.Settings = settings_1.default;
23572function walk(directory, optionsOrSettingsOrCallback, callback) {
23573 if (typeof optionsOrSettingsOrCallback === 'function') {
23574 return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
23575 }
23576 new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
23577}
23578exports.walk = walk;
23579function walkSync(directory, optionsOrSettings) {
23580 const settings = getSettings(optionsOrSettings);
23581 const provider = new sync_1.default(directory, settings);
23582 return provider.read();
23583}
23584exports.walkSync = walkSync;
23585function walkStream(directory, optionsOrSettings) {
23586 const settings = getSettings(optionsOrSettings);
23587 const provider = new stream_1.default(directory, settings);
23588 return provider.read();
23589}
23590exports.walkStream = walkStream;
23591function getSettings(settingsOrOptions = {}) {
23592 if (settingsOrOptions instanceof settings_1.default) {
23593 return settingsOrOptions;
23594 }
23595 return new settings_1.default(settingsOrOptions);
23596}
23597
23598
23599/***/ }),
23600/* 124 */
23601/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23602
23603"use strict";
23604
23605Object.defineProperty(exports, "__esModule", ({ value: true }));
23606const async_1 = __webpack_require__(125);
23607class AsyncProvider {
23608 constructor(_root, _settings) {
23609 this._root = _root;
23610 this._settings = _settings;
23611 this._reader = new async_1.default(this._root, this._settings);
23612 this._storage = new Set();
23613 }
23614 read(callback) {
23615 this._reader.onError((error) => {
23616 callFailureCallback(callback, error);
23617 });
23618 this._reader.onEntry((entry) => {
23619 this._storage.add(entry);
23620 });
23621 this._reader.onEnd(() => {
23622 callSuccessCallback(callback, [...this._storage]);
23623 });
23624 this._reader.read();
23625 }
23626}
23627exports.default = AsyncProvider;
23628function callFailureCallback(callback, error) {
23629 callback(error);
23630}
23631function callSuccessCallback(callback, entries) {
23632 callback(null, entries);
23633}
23634
23635
23636/***/ }),
23637/* 125 */
23638/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23639
23640"use strict";
23641
23642Object.defineProperty(exports, "__esModule", ({ value: true }));
23643const events_1 = __webpack_require__(70);
23644const fsScandir = __webpack_require__(126);
23645const fastq = __webpack_require__(135);
23646const common = __webpack_require__(137);
23647const reader_1 = __webpack_require__(138);
23648class AsyncReader extends reader_1.default {
23649 constructor(_root, _settings) {
23650 super(_root, _settings);
23651 this._settings = _settings;
23652 this._scandir = fsScandir.scandir;
23653 this._emitter = new events_1.EventEmitter();
23654 this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
23655 this._isFatalError = false;
23656 this._isDestroyed = false;
23657 this._queue.drain = () => {
23658 if (!this._isFatalError) {
23659 this._emitter.emit('end');
23660 }
23661 };
23662 }
23663 read() {
23664 this._isFatalError = false;
23665 this._isDestroyed = false;
23666 setImmediate(() => {
23667 this._pushToQueue(this._root, this._settings.basePath);
23668 });
23669 return this._emitter;
23670 }
23671 destroy() {
23672 if (this._isDestroyed) {
23673 throw new Error('The reader is already destroyed');
23674 }
23675 this._isDestroyed = true;
23676 this._queue.killAndDrain();
23677 }
23678 onEntry(callback) {
23679 this._emitter.on('entry', callback);
23680 }
23681 onError(callback) {
23682 this._emitter.once('error', callback);
23683 }
23684 onEnd(callback) {
23685 this._emitter.once('end', callback);
23686 }
23687 _pushToQueue(directory, base) {
23688 const queueItem = { directory, base };
23689 this._queue.push(queueItem, (error) => {
23690 if (error !== null) {
23691 this._handleError(error);
23692 }
23693 });
23694 }
23695 _worker(item, done) {
23696 this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
23697 if (error !== null) {
23698 return done(error, undefined);
23699 }
23700 for (const entry of entries) {
23701 this._handleEntry(entry, item.base);
23702 }
23703 done(null, undefined);
23704 });
23705 }
23706 _handleError(error) {
23707 if (!common.isFatalError(this._settings, error)) {
23708 return;
23709 }
23710 this._isFatalError = true;
23711 this._isDestroyed = true;
23712 this._emitter.emit('error', error);
23713 }
23714 _handleEntry(entry, base) {
23715 if (this._isDestroyed || this._isFatalError) {
23716 return;
23717 }
23718 const fullpath = entry.path;
23719 if (base !== undefined) {
23720 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
23721 }
23722 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
23723 this._emitEntry(entry);
23724 }
23725 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
23726 this._pushToQueue(fullpath, entry.path);
23727 }
23728 }
23729 _emitEntry(entry) {
23730 this._emitter.emit('entry', entry);
23731 }
23732}
23733exports.default = AsyncReader;
23734
23735
23736/***/ }),
23737/* 126 */
23738/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23739
23740"use strict";
23741
23742Object.defineProperty(exports, "__esModule", ({ value: true }));
23743const async = __webpack_require__(127);
23744const sync = __webpack_require__(132);
23745const settings_1 = __webpack_require__(133);
23746exports.Settings = settings_1.default;
23747function scandir(path, optionsOrSettingsOrCallback, callback) {
23748 if (typeof optionsOrSettingsOrCallback === 'function') {
23749 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
23750 }
23751 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
23752}
23753exports.scandir = scandir;
23754function scandirSync(path, optionsOrSettings) {
23755 const settings = getSettings(optionsOrSettings);
23756 return sync.read(path, settings);
23757}
23758exports.scandirSync = scandirSync;
23759function getSettings(settingsOrOptions = {}) {
23760 if (settingsOrOptions instanceof settings_1.default) {
23761 return settingsOrOptions;
23762 }
23763 return new settings_1.default(settingsOrOptions);
23764}
23765
23766
23767/***/ }),
23768/* 127 */
23769/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23770
23771"use strict";
23772
23773Object.defineProperty(exports, "__esModule", ({ value: true }));
23774const fsStat = __webpack_require__(118);
23775const rpl = __webpack_require__(128);
23776const constants_1 = __webpack_require__(129);
23777const utils = __webpack_require__(130);
23778function read(directory, settings, callback) {
23779 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
23780 return readdirWithFileTypes(directory, settings, callback);
23781 }
23782 return readdir(directory, settings, callback);
23783}
23784exports.read = read;
23785function readdirWithFileTypes(directory, settings, callback) {
23786 settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
23787 if (readdirError !== null) {
23788 return callFailureCallback(callback, readdirError);
23789 }
23790 const entries = dirents.map((dirent) => ({
23791 dirent,
23792 name: dirent.name,
23793 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
23794 }));
23795 if (!settings.followSymbolicLinks) {
23796 return callSuccessCallback(callback, entries);
23797 }
23798 const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
23799 rpl(tasks, (rplError, rplEntries) => {
23800 if (rplError !== null) {
23801 return callFailureCallback(callback, rplError);
23802 }
23803 callSuccessCallback(callback, rplEntries);
23804 });
23805 });
23806}
23807exports.readdirWithFileTypes = readdirWithFileTypes;
23808function makeRplTaskEntry(entry, settings) {
23809 return (done) => {
23810 if (!entry.dirent.isSymbolicLink()) {
23811 return done(null, entry);
23812 }
23813 settings.fs.stat(entry.path, (statError, stats) => {
23814 if (statError !== null) {
23815 if (settings.throwErrorOnBrokenSymbolicLink) {
23816 return done(statError);
23817 }
23818 return done(null, entry);
23819 }
23820 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
23821 return done(null, entry);
23822 });
23823 };
23824}
23825function readdir(directory, settings, callback) {
23826 settings.fs.readdir(directory, (readdirError, names) => {
23827 if (readdirError !== null) {
23828 return callFailureCallback(callback, readdirError);
23829 }
23830 const filepaths = names.map((name) => `${directory}${settings.pathSegmentSeparator}${name}`);
23831 const tasks = filepaths.map((filepath) => {
23832 return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
23833 });
23834 rpl(tasks, (rplError, results) => {
23835 if (rplError !== null) {
23836 return callFailureCallback(callback, rplError);
23837 }
23838 const entries = [];
23839 names.forEach((name, index) => {
23840 const stats = results[index];
23841 const entry = {
23842 name,
23843 path: filepaths[index],
23844 dirent: utils.fs.createDirentFromStats(name, stats)
23845 };
23846 if (settings.stats) {
23847 entry.stats = stats;
23848 }
23849 entries.push(entry);
23850 });
23851 callSuccessCallback(callback, entries);
23852 });
23853 });
23854}
23855exports.readdir = readdir;
23856function callFailureCallback(callback, error) {
23857 callback(error);
23858}
23859function callSuccessCallback(callback, result) {
23860 callback(null, result);
23861}
23862
23863
23864/***/ }),
23865/* 128 */
23866/***/ ((module) => {
23867
23868module.exports = runParallel
23869
23870function runParallel (tasks, cb) {
23871 var results, pending, keys
23872 var isSync = true
23873
23874 if (Array.isArray(tasks)) {
23875 results = []
23876 pending = tasks.length
23877 } else {
23878 keys = Object.keys(tasks)
23879 results = {}
23880 pending = keys.length
23881 }
23882
23883 function done (err) {
23884 function end () {
23885 if (cb) cb(err, results)
23886 cb = null
23887 }
23888 if (isSync) process.nextTick(end)
23889 else end()
23890 }
23891
23892 function each (i, err, result) {
23893 results[i] = result
23894 if (--pending === 0 || err) {
23895 done(err)
23896 }
23897 }
23898
23899 if (!pending) {
23900 // empty
23901 done(null)
23902 } else if (keys) {
23903 // object
23904 keys.forEach(function (key) {
23905 tasks[key](function (err, result) { each(key, err, result) })
23906 })
23907 } else {
23908 // array
23909 tasks.forEach(function (task, i) {
23910 task(function (err, result) { each(i, err, result) })
23911 })
23912 }
23913
23914 isSync = false
23915}
23916
23917
23918/***/ }),
23919/* 129 */
23920/***/ ((__unused_webpack_module, exports) => {
23921
23922"use strict";
23923
23924Object.defineProperty(exports, "__esModule", ({ value: true }));
23925const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
23926const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
23927const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
23928const SUPPORTED_MAJOR_VERSION = 10;
23929const SUPPORTED_MINOR_VERSION = 10;
23930const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
23931const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
23932/**
23933 * IS `true` for Node.js 10.10 and greater.
23934 */
23935exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
23936
23937
23938/***/ }),
23939/* 130 */
23940/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23941
23942"use strict";
23943
23944Object.defineProperty(exports, "__esModule", ({ value: true }));
23945const fs = __webpack_require__(131);
23946exports.fs = fs;
23947
23948
23949/***/ }),
23950/* 131 */
23951/***/ ((__unused_webpack_module, exports) => {
23952
23953"use strict";
23954
23955Object.defineProperty(exports, "__esModule", ({ value: true }));
23956class DirentFromStats {
23957 constructor(name, stats) {
23958 this.name = name;
23959 this.isBlockDevice = stats.isBlockDevice.bind(stats);
23960 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
23961 this.isDirectory = stats.isDirectory.bind(stats);
23962 this.isFIFO = stats.isFIFO.bind(stats);
23963 this.isFile = stats.isFile.bind(stats);
23964 this.isSocket = stats.isSocket.bind(stats);
23965 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
23966 }
23967}
23968function createDirentFromStats(name, stats) {
23969 return new DirentFromStats(name, stats);
23970}
23971exports.createDirentFromStats = createDirentFromStats;
23972
23973
23974/***/ }),
23975/* 132 */
23976/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
23977
23978"use strict";
23979
23980Object.defineProperty(exports, "__esModule", ({ value: true }));
23981const fsStat = __webpack_require__(118);
23982const constants_1 = __webpack_require__(129);
23983const utils = __webpack_require__(130);
23984function read(directory, settings) {
23985 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
23986 return readdirWithFileTypes(directory, settings);
23987 }
23988 return readdir(directory, settings);
23989}
23990exports.read = read;
23991function readdirWithFileTypes(directory, settings) {
23992 const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
23993 return dirents.map((dirent) => {
23994 const entry = {
23995 dirent,
23996 name: dirent.name,
23997 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
23998 };
23999 if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
24000 try {
24001 const stats = settings.fs.statSync(entry.path);
24002 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
24003 }
24004 catch (error) {
24005 if (settings.throwErrorOnBrokenSymbolicLink) {
24006 throw error;
24007 }
24008 }
24009 }
24010 return entry;
24011 });
24012}
24013exports.readdirWithFileTypes = readdirWithFileTypes;
24014function readdir(directory, settings) {
24015 const names = settings.fs.readdirSync(directory);
24016 return names.map((name) => {
24017 const entryPath = `${directory}${settings.pathSegmentSeparator}${name}`;
24018 const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
24019 const entry = {
24020 name,
24021 path: entryPath,
24022 dirent: utils.fs.createDirentFromStats(name, stats)
24023 };
24024 if (settings.stats) {
24025 entry.stats = stats;
24026 }
24027 return entry;
24028 });
24029}
24030exports.readdir = readdir;
24031
24032
24033/***/ }),
24034/* 133 */
24035/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24036
24037"use strict";
24038
24039Object.defineProperty(exports, "__esModule", ({ value: true }));
24040const path = __webpack_require__(23);
24041const fsStat = __webpack_require__(118);
24042const fs = __webpack_require__(134);
24043class Settings {
24044 constructor(_options = {}) {
24045 this._options = _options;
24046 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
24047 this.fs = fs.createFileSystemAdapter(this._options.fs);
24048 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
24049 this.stats = this._getValue(this._options.stats, false);
24050 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
24051 this.fsStatSettings = new fsStat.Settings({
24052 followSymbolicLink: this.followSymbolicLinks,
24053 fs: this.fs,
24054 throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
24055 });
24056 }
24057 _getValue(option, value) {
24058 return option === undefined ? value : option;
24059 }
24060}
24061exports.default = Settings;
24062
24063
24064/***/ }),
24065/* 134 */
24066/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24067
24068"use strict";
24069
24070Object.defineProperty(exports, "__esModule", ({ value: true }));
24071const fs = __webpack_require__(60);
24072exports.FILE_SYSTEM_ADAPTER = {
24073 lstat: fs.lstat,
24074 stat: fs.stat,
24075 lstatSync: fs.lstatSync,
24076 statSync: fs.statSync,
24077 readdir: fs.readdir,
24078 readdirSync: fs.readdirSync
24079};
24080function createFileSystemAdapter(fsMethods) {
24081 if (fsMethods === undefined) {
24082 return exports.FILE_SYSTEM_ADAPTER;
24083 }
24084 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
24085}
24086exports.createFileSystemAdapter = createFileSystemAdapter;
24087
24088
24089/***/ }),
24090/* 135 */
24091/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
24092
24093"use strict";
24094
24095
24096var reusify = __webpack_require__(136)
24097
24098function fastqueue (context, worker, concurrency) {
24099 if (typeof context === 'function') {
24100 concurrency = worker
24101 worker = context
24102 context = null
24103 }
24104
24105 var cache = reusify(Task)
24106 var queueHead = null
24107 var queueTail = null
24108 var _running = 0
24109
24110 var self = {
24111 push: push,
24112 drain: noop,
24113 saturated: noop,
24114 pause: pause,
24115 paused: false,
24116 concurrency: concurrency,
24117 running: running,
24118 resume: resume,
24119 idle: idle,
24120 length: length,
24121 unshift: unshift,
24122 empty: noop,
24123 kill: kill,
24124 killAndDrain: killAndDrain
24125 }
24126
24127 return self
24128
24129 function running () {
24130 return _running
24131 }
24132
24133 function pause () {
24134 self.paused = true
24135 }
24136
24137 function length () {
24138 var current = queueHead
24139 var counter = 0
24140
24141 while (current) {
24142 current = current.next
24143 counter++
24144 }
24145
24146 return counter
24147 }
24148
24149 function resume () {
24150 if (!self.paused) return
24151 self.paused = false
24152 for (var i = 0; i < self.concurrency; i++) {
24153 _running++
24154 release()
24155 }
24156 }
24157
24158 function idle () {
24159 return _running === 0 && self.length() === 0
24160 }
24161
24162 function push (value, done) {
24163 var current = cache.get()
24164
24165 current.context = context
24166 current.release = release
24167 current.value = value
24168 current.callback = done || noop
24169
24170 if (_running === self.concurrency || self.paused) {
24171 if (queueTail) {
24172 queueTail.next = current
24173 queueTail = current
24174 } else {
24175 queueHead = current
24176 queueTail = current
24177 self.saturated()
24178 }
24179 } else {
24180 _running++
24181 worker.call(context, current.value, current.worked)
24182 }
24183 }
24184
24185 function unshift (value, done) {
24186 var current = cache.get()
24187
24188 current.context = context
24189 current.release = release
24190 current.value = value
24191 current.callback = done || noop
24192
24193 if (_running === self.concurrency || self.paused) {
24194 if (queueHead) {
24195 current.next = queueHead
24196 queueHead = current
24197 } else {
24198 queueHead = current
24199 queueTail = current
24200 self.saturated()
24201 }
24202 } else {
24203 _running++
24204 worker.call(context, current.value, current.worked)
24205 }
24206 }
24207
24208 function release (holder) {
24209 if (holder) {
24210 cache.release(holder)
24211 }
24212 var next = queueHead
24213 if (next) {
24214 if (!self.paused) {
24215 if (queueTail === queueHead) {
24216 queueTail = null
24217 }
24218 queueHead = next.next
24219 next.next = null
24220 worker.call(context, next.value, next.worked)
24221 if (queueTail === null) {
24222 self.empty()
24223 }
24224 } else {
24225 _running--
24226 }
24227 } else if (--_running === 0) {
24228 self.drain()
24229 }
24230 }
24231
24232 function kill () {
24233 queueHead = null
24234 queueTail = null
24235 self.drain = noop
24236 }
24237
24238 function killAndDrain () {
24239 queueHead = null
24240 queueTail = null
24241 self.drain()
24242 self.drain = noop
24243 }
24244}
24245
24246function noop () {}
24247
24248function Task () {
24249 this.value = null
24250 this.callback = noop
24251 this.next = null
24252 this.release = noop
24253 this.context = null
24254
24255 var self = this
24256
24257 this.worked = function worked (err, result) {
24258 var callback = self.callback
24259 self.value = null
24260 self.callback = noop
24261 callback.call(self.context, err, result)
24262 self.release(self)
24263 }
24264}
24265
24266module.exports = fastqueue
24267
24268
24269/***/ }),
24270/* 136 */
24271/***/ ((module) => {
24272
24273"use strict";
24274
24275
24276function reusify (Constructor) {
24277 var head = new Constructor()
24278 var tail = head
24279
24280 function get () {
24281 var current = head
24282
24283 if (current.next) {
24284 head = current.next
24285 } else {
24286 head = new Constructor()
24287 tail = head
24288 }
24289
24290 current.next = null
24291
24292 return current
24293 }
24294
24295 function release (obj) {
24296 tail.next = obj
24297 tail = obj
24298 }
24299
24300 return {
24301 get: get,
24302 release: release
24303 }
24304}
24305
24306module.exports = reusify
24307
24308
24309/***/ }),
24310/* 137 */
24311/***/ ((__unused_webpack_module, exports) => {
24312
24313"use strict";
24314
24315Object.defineProperty(exports, "__esModule", ({ value: true }));
24316function isFatalError(settings, error) {
24317 if (settings.errorFilter === null) {
24318 return true;
24319 }
24320 return !settings.errorFilter(error);
24321}
24322exports.isFatalError = isFatalError;
24323function isAppliedFilter(filter, value) {
24324 return filter === null || filter(value);
24325}
24326exports.isAppliedFilter = isAppliedFilter;
24327function replacePathSegmentSeparator(filepath, separator) {
24328 return filepath.split(/[\\/]/).join(separator);
24329}
24330exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
24331function joinPathSegments(a, b, separator) {
24332 if (a === '') {
24333 return b;
24334 }
24335 return a + separator + b;
24336}
24337exports.joinPathSegments = joinPathSegments;
24338
24339
24340/***/ }),
24341/* 138 */
24342/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24343
24344"use strict";
24345
24346Object.defineProperty(exports, "__esModule", ({ value: true }));
24347const common = __webpack_require__(137);
24348class Reader {
24349 constructor(_root, _settings) {
24350 this._root = _root;
24351 this._settings = _settings;
24352 this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
24353 }
24354}
24355exports.default = Reader;
24356
24357
24358/***/ }),
24359/* 139 */
24360/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24361
24362"use strict";
24363
24364Object.defineProperty(exports, "__esModule", ({ value: true }));
24365const stream_1 = __webpack_require__(114);
24366const async_1 = __webpack_require__(125);
24367class StreamProvider {
24368 constructor(_root, _settings) {
24369 this._root = _root;
24370 this._settings = _settings;
24371 this._reader = new async_1.default(this._root, this._settings);
24372 this._stream = new stream_1.Readable({
24373 objectMode: true,
24374 read: () => { },
24375 destroy: this._reader.destroy.bind(this._reader)
24376 });
24377 }
24378 read() {
24379 this._reader.onError((error) => {
24380 this._stream.emit('error', error);
24381 });
24382 this._reader.onEntry((entry) => {
24383 this._stream.push(entry);
24384 });
24385 this._reader.onEnd(() => {
24386 this._stream.push(null);
24387 });
24388 this._reader.read();
24389 return this._stream;
24390 }
24391}
24392exports.default = StreamProvider;
24393
24394
24395/***/ }),
24396/* 140 */
24397/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24398
24399"use strict";
24400
24401Object.defineProperty(exports, "__esModule", ({ value: true }));
24402const sync_1 = __webpack_require__(141);
24403class SyncProvider {
24404 constructor(_root, _settings) {
24405 this._root = _root;
24406 this._settings = _settings;
24407 this._reader = new sync_1.default(this._root, this._settings);
24408 }
24409 read() {
24410 return this._reader.read();
24411 }
24412}
24413exports.default = SyncProvider;
24414
24415
24416/***/ }),
24417/* 141 */
24418/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24419
24420"use strict";
24421
24422Object.defineProperty(exports, "__esModule", ({ value: true }));
24423const fsScandir = __webpack_require__(126);
24424const common = __webpack_require__(137);
24425const reader_1 = __webpack_require__(138);
24426class SyncReader extends reader_1.default {
24427 constructor() {
24428 super(...arguments);
24429 this._scandir = fsScandir.scandirSync;
24430 this._storage = new Set();
24431 this._queue = new Set();
24432 }
24433 read() {
24434 this._pushToQueue(this._root, this._settings.basePath);
24435 this._handleQueue();
24436 return [...this._storage];
24437 }
24438 _pushToQueue(directory, base) {
24439 this._queue.add({ directory, base });
24440 }
24441 _handleQueue() {
24442 for (const item of this._queue.values()) {
24443 this._handleDirectory(item.directory, item.base);
24444 }
24445 }
24446 _handleDirectory(directory, base) {
24447 try {
24448 const entries = this._scandir(directory, this._settings.fsScandirSettings);
24449 for (const entry of entries) {
24450 this._handleEntry(entry, base);
24451 }
24452 }
24453 catch (error) {
24454 this._handleError(error);
24455 }
24456 }
24457 _handleError(error) {
24458 if (!common.isFatalError(this._settings, error)) {
24459 return;
24460 }
24461 throw error;
24462 }
24463 _handleEntry(entry, base) {
24464 const fullpath = entry.path;
24465 if (base !== undefined) {
24466 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
24467 }
24468 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
24469 this._pushToStorage(entry);
24470 }
24471 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
24472 this._pushToQueue(fullpath, entry.path);
24473 }
24474 }
24475 _pushToStorage(entry) {
24476 this._storage.add(entry);
24477 }
24478}
24479exports.default = SyncReader;
24480
24481
24482/***/ }),
24483/* 142 */
24484/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24485
24486"use strict";
24487
24488Object.defineProperty(exports, "__esModule", ({ value: true }));
24489const path = __webpack_require__(23);
24490const fsScandir = __webpack_require__(126);
24491class Settings {
24492 constructor(_options = {}) {
24493 this._options = _options;
24494 this.basePath = this._getValue(this._options.basePath, undefined);
24495 this.concurrency = this._getValue(this._options.concurrency, Infinity);
24496 this.deepFilter = this._getValue(this._options.deepFilter, null);
24497 this.entryFilter = this._getValue(this._options.entryFilter, null);
24498 this.errorFilter = this._getValue(this._options.errorFilter, null);
24499 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
24500 this.fsScandirSettings = new fsScandir.Settings({
24501 followSymbolicLinks: this._options.followSymbolicLinks,
24502 fs: this._options.fs,
24503 pathSegmentSeparator: this._options.pathSegmentSeparator,
24504 stats: this._options.stats,
24505 throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
24506 });
24507 }
24508 _getValue(option, value) {
24509 return option === undefined ? value : option;
24510 }
24511}
24512exports.default = Settings;
24513
24514
24515/***/ }),
24516/* 143 */
24517/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24518
24519"use strict";
24520
24521Object.defineProperty(exports, "__esModule", ({ value: true }));
24522const path = __webpack_require__(23);
24523const fsStat = __webpack_require__(118);
24524const utils = __webpack_require__(80);
24525class Reader {
24526 constructor(_settings) {
24527 this._settings = _settings;
24528 this._fsStatSettings = new fsStat.Settings({
24529 followSymbolicLink: this._settings.followSymbolicLinks,
24530 fs: this._settings.fs,
24531 throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
24532 });
24533 }
24534 _getFullEntryPath(filepath) {
24535 return path.resolve(this._settings.cwd, filepath);
24536 }
24537 _makeEntry(stats, pattern) {
24538 const entry = {
24539 name: pattern,
24540 path: pattern,
24541 dirent: utils.fs.createDirentFromStats(pattern, stats)
24542 };
24543 if (this._settings.stats) {
24544 entry.stats = stats;
24545 }
24546 return entry;
24547 }
24548 _isFatalError(error) {
24549 return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
24550 }
24551}
24552exports.default = Reader;
24553
24554
24555/***/ }),
24556/* 144 */
24557/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24558
24559"use strict";
24560
24561Object.defineProperty(exports, "__esModule", ({ value: true }));
24562const path = __webpack_require__(23);
24563const deep_1 = __webpack_require__(145);
24564const entry_1 = __webpack_require__(148);
24565const error_1 = __webpack_require__(149);
24566const entry_2 = __webpack_require__(150);
24567class Provider {
24568 constructor(_settings) {
24569 this._settings = _settings;
24570 this.errorFilter = new error_1.default(this._settings);
24571 this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
24572 this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
24573 this.entryTransformer = new entry_2.default(this._settings);
24574 }
24575 _getRootDirectory(task) {
24576 return path.resolve(this._settings.cwd, task.base);
24577 }
24578 _getReaderOptions(task) {
24579 const basePath = task.base === '.' ? '' : task.base;
24580 return {
24581 basePath,
24582 pathSegmentSeparator: '/',
24583 concurrency: this._settings.concurrency,
24584 deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
24585 entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
24586 errorFilter: this.errorFilter.getFilter(),
24587 followSymbolicLinks: this._settings.followSymbolicLinks,
24588 fs: this._settings.fs,
24589 stats: this._settings.stats,
24590 throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
24591 transform: this.entryTransformer.getTransformer()
24592 };
24593 }
24594 _getMicromatchOptions() {
24595 return {
24596 dot: this._settings.dot,
24597 matchBase: this._settings.baseNameMatch,
24598 nobrace: !this._settings.braceExpansion,
24599 nocase: !this._settings.caseSensitiveMatch,
24600 noext: !this._settings.extglob,
24601 noglobstar: !this._settings.globstar,
24602 posix: true,
24603 strictSlashes: false
24604 };
24605 }
24606}
24607exports.default = Provider;
24608
24609
24610/***/ }),
24611/* 145 */
24612/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24613
24614"use strict";
24615
24616Object.defineProperty(exports, "__esModule", ({ value: true }));
24617const utils = __webpack_require__(80);
24618const partial_1 = __webpack_require__(146);
24619class DeepFilter {
24620 constructor(_settings, _micromatchOptions) {
24621 this._settings = _settings;
24622 this._micromatchOptions = _micromatchOptions;
24623 }
24624 getFilter(basePath, positive, negative) {
24625 const matcher = this._getMatcher(positive);
24626 const negativeRe = this._getNegativePatternsRe(negative);
24627 return (entry) => this._filter(basePath, entry, matcher, negativeRe);
24628 }
24629 _getMatcher(patterns) {
24630 return new partial_1.default(patterns, this._settings, this._micromatchOptions);
24631 }
24632 _getNegativePatternsRe(patterns) {
24633 const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
24634 return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
24635 }
24636 _filter(basePath, entry, matcher, negativeRe) {
24637 if (this._isSkippedByDeep(basePath, entry.path)) {
24638 return false;
24639 }
24640 if (this._isSkippedSymbolicLink(entry)) {
24641 return false;
24642 }
24643 const filepath = utils.path.removeLeadingDotSegment(entry.path);
24644 if (this._isSkippedByPositivePatterns(filepath, matcher)) {
24645 return false;
24646 }
24647 return this._isSkippedByNegativePatterns(filepath, negativeRe);
24648 }
24649 _isSkippedByDeep(basePath, entryPath) {
24650 /**
24651 * Avoid unnecessary depth calculations when it doesn't matter.
24652 */
24653 if (this._settings.deep === Infinity) {
24654 return false;
24655 }
24656 return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
24657 }
24658 _getEntryLevel(basePath, entryPath) {
24659 const entryPathDepth = entryPath.split('/').length;
24660 if (basePath === '') {
24661 return entryPathDepth;
24662 }
24663 const basePathDepth = basePath.split('/').length;
24664 return entryPathDepth - basePathDepth;
24665 }
24666 _isSkippedSymbolicLink(entry) {
24667 return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
24668 }
24669 _isSkippedByPositivePatterns(entryPath, matcher) {
24670 return !this._settings.baseNameMatch && !matcher.match(entryPath);
24671 }
24672 _isSkippedByNegativePatterns(entryPath, patternsRe) {
24673 return !utils.pattern.matchAny(entryPath, patternsRe);
24674 }
24675}
24676exports.default = DeepFilter;
24677
24678
24679/***/ }),
24680/* 146 */
24681/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24682
24683"use strict";
24684
24685Object.defineProperty(exports, "__esModule", ({ value: true }));
24686const matcher_1 = __webpack_require__(147);
24687class PartialMatcher extends matcher_1.default {
24688 match(filepath) {
24689 const parts = filepath.split('/');
24690 const levels = parts.length;
24691 const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
24692 for (const pattern of patterns) {
24693 const section = pattern.sections[0];
24694 /**
24695 * In this case, the pattern has a globstar and we must read all directories unconditionally,
24696 * but only if the level has reached the end of the first group.
24697 *
24698 * fixtures/{a,b}/**
24699 * ^ true/false ^ always true
24700 */
24701 if (!pattern.complete && levels > section.length) {
24702 return true;
24703 }
24704 const match = parts.every((part, index) => {
24705 const segment = pattern.segments[index];
24706 if (segment.dynamic && segment.patternRe.test(part)) {
24707 return true;
24708 }
24709 if (!segment.dynamic && segment.pattern === part) {
24710 return true;
24711 }
24712 return false;
24713 });
24714 if (match) {
24715 return true;
24716 }
24717 }
24718 return false;
24719 }
24720}
24721exports.default = PartialMatcher;
24722
24723
24724/***/ }),
24725/* 147 */
24726/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24727
24728"use strict";
24729
24730Object.defineProperty(exports, "__esModule", ({ value: true }));
24731const utils = __webpack_require__(80);
24732class Matcher {
24733 constructor(_patterns, _settings, _micromatchOptions) {
24734 this._patterns = _patterns;
24735 this._settings = _settings;
24736 this._micromatchOptions = _micromatchOptions;
24737 this._storage = [];
24738 this._fillStorage();
24739 }
24740 _fillStorage() {
24741 /**
24742 * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
24743 * So, before expand patterns with brace expansion into separated patterns.
24744 */
24745 const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
24746 for (const pattern of patterns) {
24747 const segments = this._getPatternSegments(pattern);
24748 const sections = this._splitSegmentsIntoSections(segments);
24749 this._storage.push({
24750 complete: sections.length <= 1,
24751 pattern,
24752 segments,
24753 sections
24754 });
24755 }
24756 }
24757 _getPatternSegments(pattern) {
24758 const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
24759 return parts.map((part) => {
24760 const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
24761 if (!dynamic) {
24762 return {
24763 dynamic: false,
24764 pattern: part
24765 };
24766 }
24767 return {
24768 dynamic: true,
24769 pattern: part,
24770 patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
24771 };
24772 });
24773 }
24774 _splitSegmentsIntoSections(segments) {
24775 return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
24776 }
24777}
24778exports.default = Matcher;
24779
24780
24781/***/ }),
24782/* 148 */
24783/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24784
24785"use strict";
24786
24787Object.defineProperty(exports, "__esModule", ({ value: true }));
24788const utils = __webpack_require__(80);
24789class EntryFilter {
24790 constructor(_settings, _micromatchOptions) {
24791 this._settings = _settings;
24792 this._micromatchOptions = _micromatchOptions;
24793 this.index = new Map();
24794 }
24795 getFilter(positive, negative) {
24796 const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
24797 const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
24798 return (entry) => this._filter(entry, positiveRe, negativeRe);
24799 }
24800 _filter(entry, positiveRe, negativeRe) {
24801 if (this._settings.unique && this._isDuplicateEntry(entry)) {
24802 return false;
24803 }
24804 if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
24805 return false;
24806 }
24807 if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
24808 return false;
24809 }
24810 const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
24811 const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
24812 if (this._settings.unique && isMatched) {
24813 this._createIndexRecord(entry);
24814 }
24815 return isMatched;
24816 }
24817 _isDuplicateEntry(entry) {
24818 return this.index.has(entry.path);
24819 }
24820 _createIndexRecord(entry) {
24821 this.index.set(entry.path, undefined);
24822 }
24823 _onlyFileFilter(entry) {
24824 return this._settings.onlyFiles && !entry.dirent.isFile();
24825 }
24826 _onlyDirectoryFilter(entry) {
24827 return this._settings.onlyDirectories && !entry.dirent.isDirectory();
24828 }
24829 _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
24830 if (!this._settings.absolute) {
24831 return false;
24832 }
24833 const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
24834 return utils.pattern.matchAny(fullpath, patternsRe);
24835 }
24836 _isMatchToPatterns(entryPath, patternsRe) {
24837 const filepath = utils.path.removeLeadingDotSegment(entryPath);
24838 return utils.pattern.matchAny(filepath, patternsRe);
24839 }
24840}
24841exports.default = EntryFilter;
24842
24843
24844/***/ }),
24845/* 149 */
24846/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24847
24848"use strict";
24849
24850Object.defineProperty(exports, "__esModule", ({ value: true }));
24851const utils = __webpack_require__(80);
24852class ErrorFilter {
24853 constructor(_settings) {
24854 this._settings = _settings;
24855 }
24856 getFilter() {
24857 return (error) => this._isNonFatalError(error);
24858 }
24859 _isNonFatalError(error) {
24860 return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
24861 }
24862}
24863exports.default = ErrorFilter;
24864
24865
24866/***/ }),
24867/* 150 */
24868/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24869
24870"use strict";
24871
24872Object.defineProperty(exports, "__esModule", ({ value: true }));
24873const utils = __webpack_require__(80);
24874class EntryTransformer {
24875 constructor(_settings) {
24876 this._settings = _settings;
24877 }
24878 getTransformer() {
24879 return (entry) => this._transform(entry);
24880 }
24881 _transform(entry) {
24882 let filepath = entry.path;
24883 if (this._settings.absolute) {
24884 filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
24885 filepath = utils.path.unixify(filepath);
24886 }
24887 if (this._settings.markDirectories && entry.dirent.isDirectory()) {
24888 filepath += '/';
24889 }
24890 if (!this._settings.objectMode) {
24891 return filepath;
24892 }
24893 return Object.assign(Object.assign({}, entry), { path: filepath });
24894 }
24895}
24896exports.default = EntryTransformer;
24897
24898
24899/***/ }),
24900/* 151 */
24901/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24902
24903"use strict";
24904
24905Object.defineProperty(exports, "__esModule", ({ value: true }));
24906const stream_1 = __webpack_require__(114);
24907const stream_2 = __webpack_require__(117);
24908const provider_1 = __webpack_require__(144);
24909class ProviderStream extends provider_1.default {
24910 constructor() {
24911 super(...arguments);
24912 this._reader = new stream_2.default(this._settings);
24913 }
24914 read(task) {
24915 const root = this._getRootDirectory(task);
24916 const options = this._getReaderOptions(task);
24917 const source = this.api(root, task, options);
24918 const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
24919 source
24920 .once('error', (error) => destination.emit('error', error))
24921 .on('data', (entry) => destination.emit('data', options.transform(entry)))
24922 .once('end', () => destination.emit('end'));
24923 destination
24924 .once('close', () => source.destroy());
24925 return destination;
24926 }
24927 api(root, task, options) {
24928 if (task.dynamic) {
24929 return this._reader.dynamic(root, options);
24930 }
24931 return this._reader.static(task.patterns, options);
24932 }
24933}
24934exports.default = ProviderStream;
24935
24936
24937/***/ }),
24938/* 152 */
24939/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24940
24941"use strict";
24942
24943Object.defineProperty(exports, "__esModule", ({ value: true }));
24944const sync_1 = __webpack_require__(153);
24945const provider_1 = __webpack_require__(144);
24946class ProviderSync extends provider_1.default {
24947 constructor() {
24948 super(...arguments);
24949 this._reader = new sync_1.default(this._settings);
24950 }
24951 read(task) {
24952 const root = this._getRootDirectory(task);
24953 const options = this._getReaderOptions(task);
24954 const entries = this.api(root, task, options);
24955 return entries.map(options.transform);
24956 }
24957 api(root, task, options) {
24958 if (task.dynamic) {
24959 return this._reader.dynamic(root, options);
24960 }
24961 return this._reader.static(task.patterns, options);
24962 }
24963}
24964exports.default = ProviderSync;
24965
24966
24967/***/ }),
24968/* 153 */
24969/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
24970
24971"use strict";
24972
24973Object.defineProperty(exports, "__esModule", ({ value: true }));
24974const fsStat = __webpack_require__(118);
24975const fsWalk = __webpack_require__(123);
24976const reader_1 = __webpack_require__(143);
24977class ReaderSync extends reader_1.default {
24978 constructor() {
24979 super(...arguments);
24980 this._walkSync = fsWalk.walkSync;
24981 this._statSync = fsStat.statSync;
24982 }
24983 dynamic(root, options) {
24984 return this._walkSync(root, options);
24985 }
24986 static(patterns, options) {
24987 const entries = [];
24988 for (const pattern of patterns) {
24989 const filepath = this._getFullEntryPath(pattern);
24990 const entry = this._getEntry(filepath, pattern, options);
24991 if (entry === null || !options.entryFilter(entry)) {
24992 continue;
24993 }
24994 entries.push(entry);
24995 }
24996 return entries;
24997 }
24998 _getEntry(filepath, pattern, options) {
24999 try {
25000 const stats = this._getStat(filepath);
25001 return this._makeEntry(stats, pattern);
25002 }
25003 catch (error) {
25004 if (options.errorFilter(error)) {
25005 return null;
25006 }
25007 throw error;
25008 }
25009 }
25010 _getStat(filepath) {
25011 return this._statSync(filepath, this._fsStatSettings);
25012 }
25013}
25014exports.default = ReaderSync;
25015
25016
25017/***/ }),
25018/* 154 */
25019/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25020
25021"use strict";
25022
25023Object.defineProperty(exports, "__esModule", ({ value: true }));
25024exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
25025const fs = __webpack_require__(60);
25026const os = __webpack_require__(24);
25027const CPU_COUNT = os.cpus().length;
25028exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
25029 lstat: fs.lstat,
25030 lstatSync: fs.lstatSync,
25031 stat: fs.stat,
25032 statSync: fs.statSync,
25033 readdir: fs.readdir,
25034 readdirSync: fs.readdirSync
25035};
25036class Settings {
25037 constructor(_options = {}) {
25038 this._options = _options;
25039 this.absolute = this._getValue(this._options.absolute, false);
25040 this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
25041 this.braceExpansion = this._getValue(this._options.braceExpansion, true);
25042 this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
25043 this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
25044 this.cwd = this._getValue(this._options.cwd, process.cwd());
25045 this.deep = this._getValue(this._options.deep, Infinity);
25046 this.dot = this._getValue(this._options.dot, false);
25047 this.extglob = this._getValue(this._options.extglob, true);
25048 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
25049 this.fs = this._getFileSystemMethods(this._options.fs);
25050 this.globstar = this._getValue(this._options.globstar, true);
25051 this.ignore = this._getValue(this._options.ignore, []);
25052 this.markDirectories = this._getValue(this._options.markDirectories, false);
25053 this.objectMode = this._getValue(this._options.objectMode, false);
25054 this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
25055 this.onlyFiles = this._getValue(this._options.onlyFiles, true);
25056 this.stats = this._getValue(this._options.stats, false);
25057 this.suppressErrors = this._getValue(this._options.suppressErrors, false);
25058 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
25059 this.unique = this._getValue(this._options.unique, true);
25060 if (this.onlyDirectories) {
25061 this.onlyFiles = false;
25062 }
25063 if (this.stats) {
25064 this.objectMode = true;
25065 }
25066 }
25067 _getValue(option, value) {
25068 return option === undefined ? value : option;
25069 }
25070 _getFileSystemMethods(methods = {}) {
25071 return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
25072 }
25073}
25074exports.default = Settings;
25075
25076
25077/***/ }),
25078/* 155 */
25079/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25080
25081"use strict";
25082
25083Object.defineProperty(exports, "__esModule", ({ value: true }));
25084var connection_1 = __webpack_require__(156);
25085function default_1(name) {
25086 return {
25087 log: function (message) {
25088 connection_1.connection.console.log(name + ": " + message);
25089 },
25090 info: function (message) {
25091 connection_1.connection.console.info(name + ": " + message);
25092 },
25093 warn: function (message) {
25094 connection_1.connection.console.warn(name + ": " + message);
25095 },
25096 error: function (message) {
25097 connection_1.connection.console.error(name + ": " + message);
25098 },
25099 showErrorMessage: function (message) {
25100 connection_1.connection.window.showErrorMessage(message);
25101 }
25102 };
25103}
25104exports.default = default_1;
25105
25106
25107/***/ }),
25108/* 156 */
25109/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25110
25111"use strict";
25112
25113Object.defineProperty(exports, "__esModule", ({ value: true }));
25114exports.connection = void 0;
25115var node_1 = __webpack_require__(157);
25116// create connection by command argv
25117exports.connection = node_1.createConnection();
25118
25119
25120/***/ }),
25121/* 157 */
25122/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
25123
25124"use strict";
25125/* --------------------------------------------------------------------------------------------
25126 * Copyright (c) Microsoft Corporation. All rights reserved.
25127 * Licensed under the MIT License. See License.txt in the project root for license information.
25128 * ----------------------------------------------------------------------------------------- */
25129
25130
25131module.exports = __webpack_require__(2);
25132
25133/***/ }),
25134/* 158 */
25135/***/ ((module) => {
25136
25137"use strict";
25138module.exports = JSON.parse('{"completionItems":{"commands":[{"label":"range","kind":24,"detail":"{range}","documentation":"go to last line in {range}","sortText":"00004","insertText":"range","insertTextFormat":1},{"label":"!","kind":24,"detail":"!","documentation":"filter lines or execute an external command","sortText":"00004","insertText":"!","insertTextFormat":1},{"label":"!!","kind":24,"detail":"!!","documentation":"repeat last \\":!\\" command","sortText":"00004","insertText":"!!","insertTextFormat":1},{"label":"#","kind":24,"detail":"#","documentation":"same as \\":number\\"","sortText":"00004","insertText":"#","insertTextFormat":1},{"label":"&","kind":24,"detail":"&","documentation":"repeat last \\":substitute\\"","sortText":"00004","insertText":"&","insertTextFormat":1},{"label":"star","kind":24,"detail":"*","documentation":"execute contents of a register","sortText":"00004","insertText":"star","insertTextFormat":1},{"label":"<","kind":24,"detail":"<","documentation":"shift lines one \'shiftwidth\' left","sortText":"00004","insertText":"<","insertTextFormat":1},{"label":"=","kind":24,"detail":"=","documentation":"print the cursor line number","sortText":"00004","insertText":"=","insertTextFormat":1},{"label":">","kind":24,"detail":">","documentation":"shift lines one \'shiftwidth\' right","sortText":"00004","insertText":">","insertTextFormat":1},{"label":"@","kind":24,"detail":"@","documentation":"execute contents of a register","sortText":"00004","insertText":"@","insertTextFormat":1},{"label":"@@","kind":24,"detail":"@@","documentation":"repeat the previous \\":@\\"","sortText":"00004","insertText":"@@","insertTextFormat":1},{"label":"Next","kind":24,"detail":"N[ext]","documentation":"go to previous file in the argument list","sortText":"00004","insertText":"Next","insertTextFormat":1},{"label":"append","kind":24,"detail":"a[ppend]","documentation":"append text","sortText":"00004","insertText":"append","insertTextFormat":1},{"label":"abbreviate","kind":24,"detail":"ab[breviate]","documentation":"enter abbreviation","sortText":"00004","insertText":"abbreviate","insertTextFormat":1},{"label":"abclear","kind":24,"detail":"abc[lear]","documentation":"remove all abbreviations","sortText":"00004","insertText":"abclear","insertTextFormat":1},{"label":"aboveleft","kind":24,"detail":"abo[veleft]","documentation":"make split window appear left or above","sortText":"00004","insertText":"aboveleft","insertTextFormat":1},{"label":"all","kind":24,"detail":"al[l]","documentation":"open a window for each file in the argument list","sortText":"00004","insertText":"all","insertTextFormat":1},{"label":"amenu","kind":24,"detail":"am[enu]","documentation":"enter new menu item for all modes","sortText":"00004","insertText":"amenu","insertTextFormat":1},{"label":"anoremenu","kind":24,"detail":"an[oremenu]","documentation":"enter a new menu for all modes that will not be remapped","sortText":"00004","insertText":"anoremenu","insertTextFormat":1},{"label":"args","kind":24,"detail":"ar[gs]","documentation":"print the argument list","sortText":"00004","insertText":"args","insertTextFormat":1},{"label":"argadd","kind":24,"detail":"arga[dd]","documentation":"add items to the argument list","sortText":"00004","insertText":"argadd","insertTextFormat":1},{"label":"argdelete","kind":24,"detail":"argd[elete]","documentation":"delete items from the argument list","sortText":"00004","insertText":"argdelete","insertTextFormat":1},{"label":"argedit","kind":24,"detail":"arge[dit]","documentation":"add item to the argument list and edit it","sortText":"00004","insertText":"argedit","insertTextFormat":1},{"label":"argdo","kind":24,"detail":"argdo","documentation":"do a command on all items in the argument list","sortText":"00004","insertText":"argdo","insertTextFormat":1},{"label":"argglobal","kind":24,"detail":"argg[lobal]","documentation":"define the global argument list","sortText":"00004","insertText":"argglobal","insertTextFormat":1},{"label":"arglocal","kind":24,"detail":"argl[ocal]","documentation":"define a local argument list","sortText":"00004","insertText":"arglocal","insertTextFormat":1},{"label":"argument","kind":24,"detail":"argu[ment]","documentation":"go to specific file in the argument list","sortText":"00004","insertText":"argument","insertTextFormat":1},{"label":"ascii","kind":24,"detail":"as[cii]","documentation":"print ascii value of character under the cursor","sortText":"00004","insertText":"ascii","insertTextFormat":1},{"label":"autocmd","kind":24,"detail":"au[tocmd]","documentation":"enter or show autocommands","sortText":"00004","insertText":"autocmd","insertTextFormat":1},{"label":"augroup","kind":24,"detail":"aug[roup]","documentation":"select the autocommand group to use","sortText":"00004","insertText":"augroup","insertTextFormat":1},{"label":"aunmenu","kind":24,"detail":"aun[menu]","documentation":"remove menu for all modes","sortText":"00004","insertText":"aunmenu","insertTextFormat":1},{"label":"buffer","kind":24,"detail":"b[uffer]","documentation":"go to specific buffer in the buffer list","sortText":"00004","insertText":"buffer","insertTextFormat":1},{"label":"bNext","kind":24,"detail":"bN[ext]","documentation":"go to previous buffer in the buffer list","sortText":"00004","insertText":"bNext","insertTextFormat":1},{"label":"ball","kind":24,"detail":"ba[ll]","documentation":"open a window for each buffer in the buffer list","sortText":"00004","insertText":"ball","insertTextFormat":1},{"label":"badd","kind":24,"detail":"bad[d]","documentation":"add buffer to the buffer list","sortText":"00004","insertText":"badd","insertTextFormat":1},{"label":"bdelete","kind":24,"detail":"bd[elete]","documentation":"remove a buffer from the buffer list","sortText":"00004","insertText":"bdelete","insertTextFormat":1},{"label":"behave","kind":24,"detail":"be[have]","documentation":"set mouse and selection behavior","sortText":"00004","insertText":"behave","insertTextFormat":1},{"label":"belowright","kind":24,"detail":"bel[owright]","documentation":"make split window appear right or below","sortText":"00004","insertText":"belowright","insertTextFormat":1},{"label":"bfirst","kind":24,"detail":"bf[irst]","documentation":"go to first buffer in the buffer list","sortText":"00004","insertText":"bfirst","insertTextFormat":1},{"label":"blast","kind":24,"detail":"bl[ast]","documentation":"go to last buffer in the buffer list","sortText":"00004","insertText":"blast","insertTextFormat":1},{"label":"bmodified","kind":24,"detail":"bm[odified]","documentation":"go to next buffer in the buffer list that has been modified","sortText":"00004","insertText":"bmodified","insertTextFormat":1},{"label":"bnext","kind":24,"detail":"bn[ext]","documentation":"go to next buffer in the buffer list","sortText":"00004","insertText":"bnext","insertTextFormat":1},{"label":"botright","kind":24,"detail":"bo[tright]","documentation":"make split window appear at bottom or far right","sortText":"00004","insertText":"botright","insertTextFormat":1},{"label":"bprevious","kind":24,"detail":"bp[revious]","documentation":"go to previous buffer in the buffer list","sortText":"00004","insertText":"bprevious","insertTextFormat":1},{"label":"brewind","kind":24,"detail":"br[ewind]","documentation":"go to first buffer in the buffer list","sortText":"00004","insertText":"brewind","insertTextFormat":1},{"label":"break","kind":24,"detail":"brea[k]","documentation":"break out of while loop","sortText":"00004","insertText":"break","insertTextFormat":1},{"label":"breakadd","kind":24,"detail":"breaka[dd]","documentation":"add a debugger breakpoint","sortText":"00004","insertText":"breakadd","insertTextFormat":1},{"label":"breakdel","kind":24,"detail":"breakd[el]","documentation":"delete a debugger breakpoint","sortText":"00004","insertText":"breakdel","insertTextFormat":1},{"label":"breaklist","kind":24,"detail":"breakl[ist]","documentation":"list debugger breakpoints","sortText":"00004","insertText":"breaklist","insertTextFormat":1},{"label":"browse","kind":24,"detail":"bro[wse]","documentation":"use file selection dialog","sortText":"00004","insertText":"browse","insertTextFormat":1},{"label":"bufdo","kind":24,"detail":"bufdo","documentation":"execute command in each listed buffer","sortText":"00004","insertText":"bufdo","insertTextFormat":1},{"label":"buffers","kind":24,"detail":"buffers","documentation":"list all files in the buffer list","sortText":"00004","insertText":"buffers","insertTextFormat":1},{"label":"bunload","kind":24,"detail":"bun[load]","documentation":"unload a specific buffer","sortText":"00004","insertText":"bunload","insertTextFormat":1},{"label":"bwipeout","kind":24,"detail":"bw[ipeout]","documentation":"really delete a buffer","sortText":"00004","insertText":"bwipeout","insertTextFormat":1},{"label":"change","kind":24,"detail":"c[hange]","documentation":"replace a line or series of lines","sortText":"00004","insertText":"change","insertTextFormat":1},{"label":"cNext","kind":24,"detail":"cN[ext]","documentation":"go to previous error","sortText":"00004","insertText":"cNext","insertTextFormat":1},{"label":"cNfile","kind":24,"detail":"cNf[ile]","documentation":"go to last error in previous file","sortText":"00004","insertText":"cNfile","insertTextFormat":1},{"label":"cabbrev","kind":24,"detail":"ca[bbrev]","documentation":"like \\":abbreviate\\" but for Command-line mode","sortText":"00004","insertText":"cabbrev","insertTextFormat":1},{"label":"cabclear","kind":24,"detail":"cabc[lear]","documentation":"clear all abbreviations for Command-line mode","sortText":"00004","insertText":"cabclear","insertTextFormat":1},{"label":"cabove","kind":24,"detail":"cabo[ve]","documentation":"go to error above current line","sortText":"00004","insertText":"cabove","insertTextFormat":1},{"label":"caddbuffer","kind":24,"detail":"cad[dbuffer]","documentation":"add errors from buffer","sortText":"00004","insertText":"caddbuffer","insertTextFormat":1},{"label":"caddexpr","kind":24,"detail":"cadde[xpr]","documentation":"add errors from expr","sortText":"00004","insertText":"caddexpr","insertTextFormat":1},{"label":"caddfile","kind":24,"detail":"caddf[ile]","documentation":"add error message to current quickfix list","sortText":"00004","insertText":"caddfile","insertTextFormat":1},{"label":"call","kind":24,"detail":"cal[l]","documentation":"call a function","sortText":"00004","insertText":"call","insertTextFormat":1},{"label":"catch","kind":24,"detail":"cat[ch]","documentation":"part of a :try command","sortText":"00004","insertText":"catch","insertTextFormat":1},{"label":"cbelow","kind":24,"detail":"cbe[low]","documentation":"go to error below current line","sortText":"00004","insertText":"cbelow","insertTextFormat":1},{"label":"cbottom","kind":24,"detail":"cbo[ttom]","documentation":"scroll to the bottom of the quickfix window","sortText":"00004","insertText":"cbottom","insertTextFormat":1},{"label":"cbuffer","kind":24,"detail":"cb[uffer]","documentation":"parse error messages and jump to first error","sortText":"00004","insertText":"cbuffer","insertTextFormat":1},{"label":"cc","kind":24,"detail":"cc","documentation":"go to specific error","sortText":"00004","insertText":"cc","insertTextFormat":1},{"label":"cclose","kind":24,"detail":"ccl[ose]","documentation":"close quickfix window","sortText":"00004","insertText":"cclose","insertTextFormat":1},{"label":"cd","kind":24,"detail":"cd","documentation":"change directory","sortText":"00004","insertText":"cd","insertTextFormat":1},{"label":"cdo","kind":24,"detail":"cdo","documentation":"execute command in each valid error list entry","sortText":"00004","insertText":"cdo","insertTextFormat":1},{"label":"cfdo","kind":24,"detail":"cfd[o]","documentation":"execute command in each file in error list","sortText":"00004","insertText":"cfdo","insertTextFormat":1},{"label":"center","kind":24,"detail":"ce[nter]","documentation":"format lines at the center","sortText":"00004","insertText":"center","insertTextFormat":1},{"label":"cexpr","kind":24,"detail":"cex[pr]","documentation":"read errors from expr and jump to first","sortText":"00004","insertText":"cexpr","insertTextFormat":1},{"label":"cfile","kind":24,"detail":"cf[ile]","documentation":"read file with error messages and jump to first","sortText":"00004","insertText":"cfile","insertTextFormat":1},{"label":"cfirst","kind":24,"detail":"cfir[st]","documentation":"go to the specified error, default first one","sortText":"00004","insertText":"cfirst","insertTextFormat":1},{"label":"cgetbuffer","kind":24,"detail":"cgetb[uffer]","documentation":"get errors from buffer","sortText":"00004","insertText":"cgetbuffer","insertTextFormat":1},{"label":"cgetexpr","kind":24,"detail":"cgete[xpr]","documentation":"get errors from expr","sortText":"00004","insertText":"cgetexpr","insertTextFormat":1},{"label":"cgetfile","kind":24,"detail":"cg[etfile]","documentation":"read file with error messages","sortText":"00004","insertText":"cgetfile","insertTextFormat":1},{"label":"changes","kind":24,"detail":"changes","documentation":"print the change list","sortText":"00004","insertText":"changes","insertTextFormat":1},{"label":"chdir","kind":24,"detail":"chd[ir]","documentation":"change directory","sortText":"00004","insertText":"chdir","insertTextFormat":1},{"label":"checkpath","kind":24,"detail":"che[ckpath]","documentation":"list included files","sortText":"00004","insertText":"checkpath","insertTextFormat":1},{"label":"checktime","kind":24,"detail":"checkt[ime]","documentation":"check timestamp of loaded buffers","sortText":"00004","insertText":"checktime","insertTextFormat":1},{"label":"chistory","kind":24,"detail":"chi[story]","documentation":"list the error lists","sortText":"00004","insertText":"chistory","insertTextFormat":1},{"label":"clast","kind":24,"detail":"cla[st]","documentation":"go to the specified error, default last one","sortText":"00004","insertText":"clast","insertTextFormat":1},{"label":"clearjumps","kind":24,"detail":"cle[arjumps]","documentation":"clear the jump list","sortText":"00004","insertText":"clearjumps","insertTextFormat":1},{"label":"clist","kind":24,"detail":"cl[ist]","documentation":"list all errors","sortText":"00004","insertText":"clist","insertTextFormat":1},{"label":"close","kind":24,"detail":"clo[se]","documentation":"close current window","sortText":"00004","insertText":"close","insertTextFormat":1},{"label":"cmap","kind":24,"detail":"cm[ap]","documentation":"like \\":map\\" but for Command-line mode","sortText":"00004","insertText":"cmap","insertTextFormat":1},{"label":"cmapclear","kind":24,"detail":"cmapc[lear]","documentation":"clear all mappings for Command-line mode","sortText":"00004","insertText":"cmapclear","insertTextFormat":1},{"label":"cmenu","kind":24,"detail":"cme[nu]","documentation":"add menu for Command-line mode","sortText":"00004","insertText":"cmenu","insertTextFormat":1},{"label":"cnext","kind":24,"detail":"cn[ext]","documentation":"go to next error","sortText":"00004","insertText":"cnext","insertTextFormat":1},{"label":"cnewer","kind":24,"detail":"cnew[er]","documentation":"go to newer error list","sortText":"00004","insertText":"cnewer","insertTextFormat":1},{"label":"cnfile","kind":24,"detail":"cnf[ile]","documentation":"go to first error in next file","sortText":"00004","insertText":"cnfile","insertTextFormat":1},{"label":"cnoremap","kind":24,"detail":"cno[remap]","documentation":"like \\":noremap\\" but for Command-line mode","sortText":"00004","insertText":"cnoremap","insertTextFormat":1},{"label":"cnoreabbrev","kind":24,"detail":"cnorea[bbrev]","documentation":"like \\":noreabbrev\\" but for Command-line mode","sortText":"00004","insertText":"cnoreabbrev","insertTextFormat":1},{"label":"cnoremenu","kind":24,"detail":"cnoreme[nu]","documentation":"like \\":noremenu\\" but for Command-line mode","sortText":"00004","insertText":"cnoremenu","insertTextFormat":1},{"label":"copy","kind":24,"detail":"co[py]","documentation":"copy lines","sortText":"00004","insertText":"copy","insertTextFormat":1},{"label":"colder","kind":24,"detail":"col[der]","documentation":"go to older error list","sortText":"00004","insertText":"colder","insertTextFormat":1},{"label":"colorscheme","kind":24,"detail":"colo[rscheme]","documentation":"load a specific color scheme","sortText":"00004","insertText":"colorscheme","insertTextFormat":1},{"label":"command","kind":24,"detail":"com[mand]","documentation":"create user-defined command","sortText":"00004","insertText":"command","insertTextFormat":1},{"label":"comclear","kind":24,"detail":"comc[lear]","documentation":"clear all user-defined commands","sortText":"00004","insertText":"comclear","insertTextFormat":1},{"label":"compiler","kind":24,"detail":"comp[iler]","documentation":"do settings for a specific compiler","sortText":"00004","insertText":"compiler","insertTextFormat":1},{"label":"continue","kind":24,"detail":"con[tinue]","documentation":"go back to :while","sortText":"00004","insertText":"continue","insertTextFormat":1},{"label":"confirm","kind":24,"detail":"conf[irm]","documentation":"prompt user when confirmation required","sortText":"00004","insertText":"confirm","insertTextFormat":1},{"label":"const","kind":24,"detail":"cons[t]","documentation":"create a variable as a constant","sortText":"00004","insertText":"const","insertTextFormat":1},{"label":"copen","kind":24,"detail":"cope[n]","documentation":"open quickfix window","sortText":"00004","insertText":"copen","insertTextFormat":1},{"label":"cprevious","kind":24,"detail":"cp[revious]","documentation":"go to previous error","sortText":"00004","insertText":"cprevious","insertTextFormat":1},{"label":"cpfile","kind":24,"detail":"cpf[ile]","documentation":"go to last error in previous file","sortText":"00004","insertText":"cpfile","insertTextFormat":1},{"label":"cquit","kind":24,"detail":"cq[uit]","documentation":"quit Vim with an error code","sortText":"00004","insertText":"cquit","insertTextFormat":1},{"label":"crewind","kind":24,"detail":"cr[ewind]","documentation":"go to the specified error, default first one","sortText":"00004","insertText":"crewind","insertTextFormat":1},{"label":"cscope","kind":24,"detail":"cs[cope]","documentation":"execute cscope command","sortText":"00004","insertText":"cscope","insertTextFormat":1},{"label":"cstag","kind":24,"detail":"cst[ag]","documentation":"use cscope to jump to a tag","sortText":"00004","insertText":"cstag","insertTextFormat":1},{"label":"cunmap","kind":24,"detail":"cu[nmap]","documentation":"like \\":unmap\\" but for Command-line mode","sortText":"00004","insertText":"cunmap","insertTextFormat":1},{"label":"cunabbrev","kind":24,"detail":"cuna[bbrev]","documentation":"like \\":unabbrev\\" but for Command-line mode","sortText":"00004","insertText":"cunabbrev","insertTextFormat":1},{"label":"cunmenu","kind":24,"detail":"cunme[nu]","documentation":"remove menu for Command-line mode","sortText":"00004","insertText":"cunmenu","insertTextFormat":1},{"label":"cwindow","kind":24,"detail":"cw[indow]","documentation":"open or close quickfix window","sortText":"00004","insertText":"cwindow","insertTextFormat":1},{"label":"delete","kind":24,"detail":"d[elete]","documentation":"delete lines","sortText":"00004","insertText":"delete","insertTextFormat":1},{"label":"delmarks","kind":24,"detail":"delm[arks]","documentation":"delete marks","sortText":"00004","insertText":"delmarks","insertTextFormat":1},{"label":"debug","kind":24,"detail":"deb[ug]","documentation":"run a command in debugging mode","sortText":"00004","insertText":"debug","insertTextFormat":1},{"label":"debuggreedy","kind":24,"detail":"debugg[reedy]","documentation":"read debug mode commands from normal input","sortText":"00004","insertText":"debuggreedy","insertTextFormat":1},{"label":"delcommand","kind":24,"detail":"delc[ommand]","documentation":"delete user-defined command","sortText":"00004","insertText":"delcommand","insertTextFormat":1},{"label":"delfunction","kind":24,"detail":"delf[unction]","documentation":"delete a user function","sortText":"00004","insertText":"delfunction","insertTextFormat":1},{"label":"diffupdate","kind":24,"detail":"dif[fupdate]","documentation":"update \'diff\' buffers","sortText":"00004","insertText":"diffupdate","insertTextFormat":1},{"label":"diffget","kind":24,"detail":"diffg[et]","documentation":"remove differences in current buffer","sortText":"00004","insertText":"diffget","insertTextFormat":1},{"label":"diffoff","kind":24,"detail":"diffo[ff]","documentation":"switch off diff mode","sortText":"00004","insertText":"diffoff","insertTextFormat":1},{"label":"diffpatch","kind":24,"detail":"diffp[atch]","documentation":"apply a patch and show differences","sortText":"00004","insertText":"diffpatch","insertTextFormat":1},{"label":"diffput","kind":24,"detail":"diffpu[t]","documentation":"remove differences in other buffer","sortText":"00004","insertText":"diffput","insertTextFormat":1},{"label":"diffsplit","kind":24,"detail":"diffs[plit]","documentation":"show differences with another file","sortText":"00004","insertText":"diffsplit","insertTextFormat":1},{"label":"diffthis","kind":24,"detail":"diffthis","documentation":"make current window a diff window","sortText":"00004","insertText":"diffthis","insertTextFormat":1},{"label":"digraphs","kind":24,"detail":"dig[raphs]","documentation":"show or enter digraphs","sortText":"00004","insertText":"digraphs","insertTextFormat":1},{"label":"display","kind":24,"detail":"di[splay]","documentation":"display registers","sortText":"00004","insertText":"display","insertTextFormat":1},{"label":"djump","kind":24,"detail":"dj[ump]","documentation":"jump to #define","sortText":"00004","insertText":"djump","insertTextFormat":1},{"label":"dl","kind":24,"detail":"dl","documentation":"short for |:delete| with the \'l\' flag","sortText":"00004","insertText":"dl","insertTextFormat":1},{"label":"del","kind":24,"detail":"del[ete]l","documentation":"short for |:delete| with the \'l\' flag","sortText":"00004","insertText":"del","insertTextFormat":1},{"label":"dlist","kind":24,"detail":"dli[st]","documentation":"list #defines","sortText":"00004","insertText":"dlist","insertTextFormat":1},{"label":"doautocmd","kind":24,"detail":"do[autocmd]","documentation":"apply autocommands to current buffer","sortText":"00004","insertText":"doautocmd","insertTextFormat":1},{"label":"doautoall","kind":24,"detail":"doautoa[ll]","documentation":"apply autocommands for all loaded buffers","sortText":"00004","insertText":"doautoall","insertTextFormat":1},{"label":"dp","kind":24,"detail":"d[elete]p","documentation":"short for |:delete| with the \'p\' flag","sortText":"00004","insertText":"dp","insertTextFormat":1},{"label":"drop","kind":24,"detail":"dr[op]","documentation":"jump to window editing file or edit file in current window","sortText":"00004","insertText":"drop","insertTextFormat":1},{"label":"dsearch","kind":24,"detail":"ds[earch]","documentation":"list one #define","sortText":"00004","insertText":"dsearch","insertTextFormat":1},{"label":"dsplit","kind":24,"detail":"dsp[lit]","documentation":"split window and jump to #define","sortText":"00004","insertText":"dsplit","insertTextFormat":1},{"label":"edit","kind":24,"detail":"e[dit]","documentation":"edit a file","sortText":"00004","insertText":"edit","insertTextFormat":1},{"label":"earlier","kind":24,"detail":"ea[rlier]","documentation":"go to older change, undo","sortText":"00004","insertText":"earlier","insertTextFormat":1},{"label":"echo","kind":24,"detail":"ec[ho]","documentation":"echoes the result of expressions","sortText":"00004","insertText":"echo","insertTextFormat":1},{"label":"echoerr","kind":24,"detail":"echoe[rr]","documentation":"like :echo, show like an error and use history","sortText":"00004","insertText":"echoerr","insertTextFormat":1},{"label":"echohl","kind":24,"detail":"echoh[l]","documentation":"set highlighting for echo commands","sortText":"00004","insertText":"echohl","insertTextFormat":1},{"label":"echomsg","kind":24,"detail":"echom[sg]","documentation":"same as :echo, put message in history","sortText":"00004","insertText":"echomsg","insertTextFormat":1},{"label":"echon","kind":24,"detail":"echon","documentation":"same as :echo, but without <EOL>","sortText":"00004","insertText":"echon","insertTextFormat":1},{"label":"else","kind":24,"detail":"el[se]","documentation":"part of an :if command","sortText":"00004","insertText":"else","insertTextFormat":1},{"label":"elseif","kind":24,"detail":"elsei[f]","documentation":"part of an :if command","sortText":"00004","insertText":"elseif","insertTextFormat":1},{"label":"emenu","kind":24,"detail":"em[enu]","documentation":"execute a menu by name","sortText":"00004","insertText":"emenu","insertTextFormat":1},{"label":"endif","kind":24,"detail":"en[dif]","documentation":"end previous :if","sortText":"00004","insertText":"endif","insertTextFormat":1},{"label":"endfor","kind":24,"detail":"endfo[r]","documentation":"end previous :for","sortText":"00004","insertText":"endfor","insertTextFormat":1},{"label":"endfunction","kind":24,"detail":"endf[unction]","documentation":"end of a user function","sortText":"00004","insertText":"endfunction","insertTextFormat":1},{"label":"endtry","kind":24,"detail":"endt[ry]","documentation":"end previous :try","sortText":"00004","insertText":"endtry","insertTextFormat":1},{"label":"endwhile","kind":24,"detail":"endw[hile]","documentation":"end previous :while","sortText":"00004","insertText":"endwhile","insertTextFormat":1},{"label":"enew","kind":24,"detail":"ene[w]","documentation":"edit a new, unnamed buffer","sortText":"00004","insertText":"enew","insertTextFormat":1},{"label":"ex","kind":24,"detail":"ex","documentation":"same as \\":edit\\"","sortText":"00004","insertText":"ex","insertTextFormat":1},{"label":"execute","kind":24,"detail":"exe[cute]","documentation":"execute result of expressions","sortText":"00004","insertText":"execute","insertTextFormat":1},{"label":"exit","kind":24,"detail":"exi[t]","documentation":"same as \\":xit\\"","sortText":"00004","insertText":"exit","insertTextFormat":1},{"label":"exusage","kind":24,"detail":"exu[sage]","documentation":"overview of Ex commands","sortText":"00004","insertText":"exusage","insertTextFormat":1},{"label":"file","kind":24,"detail":"f[ile]","documentation":"show or set the current file name","sortText":"00004","insertText":"file","insertTextFormat":1},{"label":"files","kind":24,"detail":"files","documentation":"list all files in the buffer list","sortText":"00004","insertText":"files","insertTextFormat":1},{"label":"filetype","kind":24,"detail":"filet[ype]","documentation":"switch file type detection on/off","sortText":"00004","insertText":"filetype","insertTextFormat":1},{"label":"filter","kind":24,"detail":"filt[er]","documentation":"filter output of following command","sortText":"00004","insertText":"filter","insertTextFormat":1},{"label":"find","kind":24,"detail":"fin[d]","documentation":"find file in \'path\' and edit it","sortText":"00004","insertText":"find","insertTextFormat":1},{"label":"finally","kind":24,"detail":"fina[lly]","documentation":"part of a :try command","sortText":"00004","insertText":"finally","insertTextFormat":1},{"label":"finish","kind":24,"detail":"fini[sh]","documentation":"quit sourcing a Vim script","sortText":"00004","insertText":"finish","insertTextFormat":1},{"label":"first","kind":24,"detail":"fir[st]","documentation":"go to the first file in the argument list","sortText":"00004","insertText":"first","insertTextFormat":1},{"label":"fold","kind":24,"detail":"fo[ld]","documentation":"create a fold","sortText":"00004","insertText":"fold","insertTextFormat":1},{"label":"foldclose","kind":24,"detail":"foldc[lose]","documentation":"close folds","sortText":"00004","insertText":"foldclose","insertTextFormat":1},{"label":"folddoopen","kind":24,"detail":"foldd[oopen]","documentation":"execute command on lines not in a closed fold","sortText":"00004","insertText":"folddoopen","insertTextFormat":1},{"label":"folddoclosed","kind":24,"detail":"folddoc[losed]","documentation":"execute command on lines in a closed fold","sortText":"00004","insertText":"folddoclosed","insertTextFormat":1},{"label":"foldopen","kind":24,"detail":"foldo[pen]","documentation":"open folds","sortText":"00004","insertText":"foldopen","insertTextFormat":1},{"label":"for","kind":24,"detail":"for","documentation":"for loop","sortText":"00004","insertText":"for","insertTextFormat":1},{"label":"function","kind":24,"detail":"fu[nction]","documentation":"define a user function","sortText":"00004","insertText":"function","insertTextFormat":1},{"label":"global","kind":24,"detail":"g[lobal]","documentation":"execute commands for matching lines","sortText":"00004","insertText":"global","insertTextFormat":1},{"label":"goto","kind":24,"detail":"go[to]","documentation":"go to byte in the buffer","sortText":"00004","insertText":"goto","insertTextFormat":1},{"label":"grep","kind":24,"detail":"gr[ep]","documentation":"run \'grepprg\' and jump to first match","sortText":"00004","insertText":"grep","insertTextFormat":1},{"label":"grepadd","kind":24,"detail":"grepa[dd]","documentation":"like :grep, but append to current list","sortText":"00004","insertText":"grepadd","insertTextFormat":1},{"label":"gui","kind":24,"detail":"gu[i]","documentation":"start the GUI","sortText":"00004","insertText":"gui","insertTextFormat":1},{"label":"gvim","kind":24,"detail":"gv[im]","documentation":"start the GUI","sortText":"00004","insertText":"gvim","insertTextFormat":1},{"label":"hardcopy","kind":24,"detail":"ha[rdcopy]","documentation":"send text to the printer","sortText":"00004","insertText":"hardcopy","insertTextFormat":1},{"label":"help","kind":24,"detail":"h[elp]","documentation":"open a help window","sortText":"00004","insertText":"help","insertTextFormat":1},{"label":"helpclose","kind":24,"detail":"helpc[lose]","documentation":"close one help window","sortText":"00004","insertText":"helpclose","insertTextFormat":1},{"label":"helpgrep","kind":24,"detail":"helpg[rep]","documentation":"like \\":grep\\" but searches help files","sortText":"00004","insertText":"helpgrep","insertTextFormat":1},{"label":"helptags","kind":24,"detail":"helpt[ags]","documentation":"generate help tags for a directory","sortText":"00004","insertText":"helptags","insertTextFormat":1},{"label":"highlight","kind":24,"detail":"hi[ghlight]","documentation":"specify highlighting methods","sortText":"00004","insertText":"highlight","insertTextFormat":1},{"label":"hide","kind":24,"detail":"hid[e]","documentation":"hide current buffer for a command","sortText":"00004","insertText":"hide","insertTextFormat":1},{"label":"history","kind":24,"detail":"his[tory]","documentation":"print a history list","sortText":"00004","insertText":"history","insertTextFormat":1},{"label":"insert","kind":24,"detail":"i[nsert]","documentation":"insert text","sortText":"00004","insertText":"insert","insertTextFormat":1},{"label":"iabbrev","kind":24,"detail":"ia[bbrev]","documentation":"like \\":abbrev\\" but for Insert mode","sortText":"00004","insertText":"iabbrev","insertTextFormat":1},{"label":"iabclear","kind":24,"detail":"iabc[lear]","documentation":"like \\":abclear\\" but for Insert mode","sortText":"00004","insertText":"iabclear","insertTextFormat":1},{"label":"if","kind":24,"detail":"if","documentation":"execute commands when condition met","sortText":"00004","insertText":"if","insertTextFormat":1},{"label":"ijump","kind":24,"detail":"ij[ump]","documentation":"jump to definition of identifier","sortText":"00004","insertText":"ijump","insertTextFormat":1},{"label":"ilist","kind":24,"detail":"il[ist]","documentation":"list lines where identifier matches","sortText":"00004","insertText":"ilist","insertTextFormat":1},{"label":"imap","kind":24,"detail":"im[ap]","documentation":"like \\":map\\" but for Insert mode","sortText":"00004","insertText":"imap","insertTextFormat":1},{"label":"imapclear","kind":24,"detail":"imapc[lear]","documentation":"like \\":mapclear\\" but for Insert mode","sortText":"00004","insertText":"imapclear","insertTextFormat":1},{"label":"imenu","kind":24,"detail":"ime[nu]","documentation":"add menu for Insert mode","sortText":"00004","insertText":"imenu","insertTextFormat":1},{"label":"inoremap","kind":24,"detail":"ino[remap]","documentation":"like \\":noremap\\" but for Insert mode","sortText":"00004","insertText":"inoremap","insertTextFormat":1},{"label":"inoreabbrev","kind":24,"detail":"inorea[bbrev]","documentation":"like \\":noreabbrev\\" but for Insert mode","sortText":"00004","insertText":"inoreabbrev","insertTextFormat":1},{"label":"inoremenu","kind":24,"detail":"inoreme[nu]","documentation":"like \\":noremenu\\" but for Insert mode","sortText":"00004","insertText":"inoremenu","insertTextFormat":1},{"label":"intro","kind":24,"detail":"int[ro]","documentation":"print the introductory message","sortText":"00004","insertText":"intro","insertTextFormat":1},{"label":"isearch","kind":24,"detail":"is[earch]","documentation":"list one line where identifier matches","sortText":"00004","insertText":"isearch","insertTextFormat":1},{"label":"isplit","kind":24,"detail":"isp[lit]","documentation":"split window and jump to definition of identifier","sortText":"00004","insertText":"isplit","insertTextFormat":1},{"label":"iunmap","kind":24,"detail":"iu[nmap]","documentation":"like \\":unmap\\" but for Insert mode","sortText":"00004","insertText":"iunmap","insertTextFormat":1},{"label":"iunabbrev","kind":24,"detail":"iuna[bbrev]","documentation":"like \\":unabbrev\\" but for Insert mode","sortText":"00004","insertText":"iunabbrev","insertTextFormat":1},{"label":"iunmenu","kind":24,"detail":"iunme[nu]","documentation":"remove menu for Insert mode","sortText":"00004","insertText":"iunmenu","insertTextFormat":1},{"label":"join","kind":24,"detail":"j[oin]","documentation":"join lines","sortText":"00004","insertText":"join","insertTextFormat":1},{"label":"jumps","kind":24,"detail":"ju[mps]","documentation":"print the jump list","sortText":"00004","insertText":"jumps","insertTextFormat":1},{"label":"k","kind":24,"detail":"k","documentation":"set a mark","sortText":"00004","insertText":"k","insertTextFormat":1},{"label":"keepalt","kind":24,"detail":"keepa[lt]","documentation":"following command keeps the alternate file","sortText":"00004","insertText":"keepalt","insertTextFormat":1},{"label":"keepmarks","kind":24,"detail":"kee[pmarks]","documentation":"following command keeps marks where they are","sortText":"00004","insertText":"keepmarks","insertTextFormat":1},{"label":"keepjumps","kind":24,"detail":"keepj[umps]","documentation":"following command keeps jumplist and marks","sortText":"00004","insertText":"keepjumps","insertTextFormat":1},{"label":"keeppatterns","kind":24,"detail":"keepp[atterns]","documentation":"following command keeps search pattern history","sortText":"00004","insertText":"keeppatterns","insertTextFormat":1},{"label":"lNext","kind":24,"detail":"lN[ext]","documentation":"go to previous entry in location list","sortText":"00004","insertText":"lNext","insertTextFormat":1},{"label":"lNfile","kind":24,"detail":"lNf[ile]","documentation":"go to last entry in previous file","sortText":"00004","insertText":"lNfile","insertTextFormat":1},{"label":"list","kind":24,"detail":"l[ist]","documentation":"print lines","sortText":"00004","insertText":"list","insertTextFormat":1},{"label":"labove","kind":24,"detail":"lab[ove]","documentation":"go to location above current line","sortText":"00004","insertText":"labove","insertTextFormat":1},{"label":"laddexpr","kind":24,"detail":"lad[dexpr]","documentation":"add locations from expr","sortText":"00004","insertText":"laddexpr","insertTextFormat":1},{"label":"laddbuffer","kind":24,"detail":"laddb[uffer]","documentation":"add locations from buffer","sortText":"00004","insertText":"laddbuffer","insertTextFormat":1},{"label":"laddfile","kind":24,"detail":"laddf[ile]","documentation":"add locations to current location list","sortText":"00004","insertText":"laddfile","insertTextFormat":1},{"label":"last","kind":24,"detail":"la[st]","documentation":"go to the last file in the argument list","sortText":"00004","insertText":"last","insertTextFormat":1},{"label":"language","kind":24,"detail":"lan[guage]","documentation":"set the language (locale)","sortText":"00004","insertText":"language","insertTextFormat":1},{"label":"later","kind":24,"detail":"lat[er]","documentation":"go to newer change, redo","sortText":"00004","insertText":"later","insertTextFormat":1},{"label":"lbelow","kind":24,"detail":"lbe[low]","documentation":"go to location below current line","sortText":"00004","insertText":"lbelow","insertTextFormat":1},{"label":"lbottom","kind":24,"detail":"lbo[ttom]","documentation":"scroll to the bottom of the location window","sortText":"00004","insertText":"lbottom","insertTextFormat":1},{"label":"lbuffer","kind":24,"detail":"lb[uffer]","documentation":"parse locations and jump to first location","sortText":"00004","insertText":"lbuffer","insertTextFormat":1},{"label":"lcd","kind":24,"detail":"lc[d]","documentation":"change directory locally","sortText":"00004","insertText":"lcd","insertTextFormat":1},{"label":"lchdir","kind":24,"detail":"lch[dir]","documentation":"change directory locally","sortText":"00004","insertText":"lchdir","insertTextFormat":1},{"label":"lclose","kind":24,"detail":"lcl[ose]","documentation":"close location window","sortText":"00004","insertText":"lclose","insertTextFormat":1},{"label":"lcscope","kind":24,"detail":"lcs[cope]","documentation":"like \\":cscope\\" but uses location list","sortText":"00004","insertText":"lcscope","insertTextFormat":1},{"label":"ldo","kind":24,"detail":"ld[o]","documentation":"execute command in valid location list entries","sortText":"00004","insertText":"ldo","insertTextFormat":1},{"label":"lfdo","kind":24,"detail":"lfd[o]","documentation":"execute command in each file in location list","sortText":"00004","insertText":"lfdo","insertTextFormat":1},{"label":"left","kind":24,"detail":"le[ft]","documentation":"left align lines","sortText":"00004","insertText":"left","insertTextFormat":1},{"label":"leftabove","kind":24,"detail":"lefta[bove]","documentation":"make split window appear left or above","sortText":"00004","insertText":"leftabove","insertTextFormat":1},{"label":"let","kind":24,"detail":"let","documentation":"assign a value to a variable or option","sortText":"00004","insertText":"let","insertTextFormat":1},{"label":"lexpr","kind":24,"detail":"lex[pr]","documentation":"read locations from expr and jump to first","sortText":"00004","insertText":"lexpr","insertTextFormat":1},{"label":"lfile","kind":24,"detail":"lf[ile]","documentation":"read file with locations and jump to first","sortText":"00004","insertText":"lfile","insertTextFormat":1},{"label":"lfirst","kind":24,"detail":"lfir[st]","documentation":"go to the specified location, default first one","sortText":"00004","insertText":"lfirst","insertTextFormat":1},{"label":"lgetbuffer","kind":24,"detail":"lgetb[uffer]","documentation":"get locations from buffer","sortText":"00004","insertText":"lgetbuffer","insertTextFormat":1},{"label":"lgetexpr","kind":24,"detail":"lgete[xpr]","documentation":"get locations from expr","sortText":"00004","insertText":"lgetexpr","insertTextFormat":1},{"label":"lgetfile","kind":24,"detail":"lg[etfile]","documentation":"read file with locations","sortText":"00004","insertText":"lgetfile","insertTextFormat":1},{"label":"lgrep","kind":24,"detail":"lgr[ep]","documentation":"run \'grepprg\' and jump to first match","sortText":"00004","insertText":"lgrep","insertTextFormat":1},{"label":"lgrepadd","kind":24,"detail":"lgrepa[dd]","documentation":"like :grep, but append to current list","sortText":"00004","insertText":"lgrepadd","insertTextFormat":1},{"label":"lhelpgrep","kind":24,"detail":"lh[elpgrep]","documentation":"like \\":helpgrep\\" but uses location list","sortText":"00004","insertText":"lhelpgrep","insertTextFormat":1},{"label":"lhistory","kind":24,"detail":"lhi[story]","documentation":"list the location lists","sortText":"00004","insertText":"lhistory","insertTextFormat":1},{"label":"ll","kind":24,"detail":"ll","documentation":"go to specific location","sortText":"00004","insertText":"ll","insertTextFormat":1},{"label":"llast","kind":24,"detail":"lla[st]","documentation":"go to the specified location, default last one","sortText":"00004","insertText":"llast","insertTextFormat":1},{"label":"llist","kind":24,"detail":"lli[st]","documentation":"list all locations","sortText":"00004","insertText":"llist","insertTextFormat":1},{"label":"lmake","kind":24,"detail":"lmak[e]","documentation":"execute external command \'makeprg\' and parse error messages","sortText":"00004","insertText":"lmake","insertTextFormat":1},{"label":"lmap","kind":24,"detail":"lm[ap]","documentation":"like \\":map!\\" but includes Lang-Arg mode","sortText":"00004","insertText":"lmap","insertTextFormat":1},{"label":"lmapclear","kind":24,"detail":"lmapc[lear]","documentation":"like \\":mapclear!\\" but includes Lang-Arg mode","sortText":"00004","insertText":"lmapclear","insertTextFormat":1},{"label":"lnext","kind":24,"detail":"lne[xt]","documentation":"go to next location","sortText":"00004","insertText":"lnext","insertTextFormat":1},{"label":"lnewer","kind":24,"detail":"lnew[er]","documentation":"go to newer location list","sortText":"00004","insertText":"lnewer","insertTextFormat":1},{"label":"lnfile","kind":24,"detail":"lnf[ile]","documentation":"go to first location in next file","sortText":"00004","insertText":"lnfile","insertTextFormat":1},{"label":"lnoremap","kind":24,"detail":"ln[oremap]","documentation":"like \\":noremap!\\" but includes Lang-Arg mode","sortText":"00004","insertText":"lnoremap","insertTextFormat":1},{"label":"loadkeymap","kind":24,"detail":"loadk[eymap]","documentation":"load the following keymaps until EOF","sortText":"00004","insertText":"loadkeymap","insertTextFormat":1},{"label":"loadview","kind":24,"detail":"lo[adview]","documentation":"load view for current window from a file","sortText":"00004","insertText":"loadview","insertTextFormat":1},{"label":"lockmarks","kind":24,"detail":"loc[kmarks]","documentation":"following command keeps marks where they are","sortText":"00004","insertText":"lockmarks","insertTextFormat":1},{"label":"lockvar","kind":24,"detail":"lockv[ar]","documentation":"lock variables","sortText":"00004","insertText":"lockvar","insertTextFormat":1},{"label":"lolder","kind":24,"detail":"lol[der]","documentation":"go to older location list","sortText":"00004","insertText":"lolder","insertTextFormat":1},{"label":"lopen","kind":24,"detail":"lope[n]","documentation":"open location window","sortText":"00004","insertText":"lopen","insertTextFormat":1},{"label":"lprevious","kind":24,"detail":"lp[revious]","documentation":"go to previous location","sortText":"00004","insertText":"lprevious","insertTextFormat":1},{"label":"lpfile","kind":24,"detail":"lpf[ile]","documentation":"go to last location in previous file","sortText":"00004","insertText":"lpfile","insertTextFormat":1},{"label":"lrewind","kind":24,"detail":"lr[ewind]","documentation":"go to the specified location, default first one","sortText":"00004","insertText":"lrewind","insertTextFormat":1},{"label":"ls","kind":24,"detail":"ls","documentation":"list all buffers","sortText":"00004","insertText":"ls","insertTextFormat":1},{"label":"ltag","kind":24,"detail":"lt[ag]","documentation":"jump to tag and add matching tags to the location list","sortText":"00004","insertText":"ltag","insertTextFormat":1},{"label":"lunmap","kind":24,"detail":"lu[nmap]","documentation":"like \\":unmap!\\" but includes Lang-Arg mode","sortText":"00004","insertText":"lunmap","insertTextFormat":1},{"label":"lua","kind":24,"detail":"lua","documentation":"execute |Lua| command","sortText":"00004","insertText":"lua","insertTextFormat":1},{"label":"luado","kind":24,"detail":"luad[o]","documentation":"execute Lua command for each line","sortText":"00004","insertText":"luado","insertTextFormat":1},{"label":"luafile","kind":24,"detail":"luaf[ile]","documentation":"execute |Lua| script file","sortText":"00004","insertText":"luafile","insertTextFormat":1},{"label":"lvimgrep","kind":24,"detail":"lv[imgrep]","documentation":"search for pattern in files","sortText":"00004","insertText":"lvimgrep","insertTextFormat":1},{"label":"lvimgrepadd","kind":24,"detail":"lvimgrepa[dd]","documentation":"like :vimgrep, but append to current list","sortText":"00004","insertText":"lvimgrepadd","insertTextFormat":1},{"label":"lwindow","kind":24,"detail":"lw[indow]","documentation":"open or close location window","sortText":"00004","insertText":"lwindow","insertTextFormat":1},{"label":"move","kind":24,"detail":"m[ove]","documentation":"move lines","sortText":"00004","insertText":"move","insertTextFormat":1},{"label":"mark","kind":24,"detail":"ma[rk]","documentation":"set a mark","sortText":"00004","insertText":"mark","insertTextFormat":1},{"label":"make","kind":24,"detail":"mak[e]","documentation":"execute external command \'makeprg\' and parse error messages","sortText":"00004","insertText":"make","insertTextFormat":1},{"label":"map","kind":24,"detail":"map","documentation":"show or enter a mapping","sortText":"00004","insertText":"map","insertTextFormat":1},{"label":"mapclear","kind":24,"detail":"mapc[lear]","documentation":"clear all mappings for Normal and Visual mode","sortText":"00004","insertText":"mapclear","insertTextFormat":1},{"label":"marks","kind":24,"detail":"marks","documentation":"list all marks","sortText":"00004","insertText":"marks","insertTextFormat":1},{"label":"match","kind":24,"detail":"mat[ch]","documentation":"define a match to highlight","sortText":"00004","insertText":"match","insertTextFormat":1},{"label":"menu","kind":24,"detail":"me[nu]","documentation":"enter a new menu item","sortText":"00004","insertText":"menu","insertTextFormat":1},{"label":"menutranslate","kind":24,"detail":"menut[ranslate]","documentation":"add a menu translation item","sortText":"00004","insertText":"menutranslate","insertTextFormat":1},{"label":"messages","kind":24,"detail":"mes[sages]","documentation":"view previously displayed messages","sortText":"00004","insertText":"messages","insertTextFormat":1},{"label":"mkexrc","kind":24,"detail":"mk[exrc]","documentation":"write current mappings and settings to a file","sortText":"00004","insertText":"mkexrc","insertTextFormat":1},{"label":"mksession","kind":24,"detail":"mks[ession]","documentation":"write session info to a file","sortText":"00004","insertText":"mksession","insertTextFormat":1},{"label":"mkspell","kind":24,"detail":"mksp[ell]","documentation":"produce .spl spell file","sortText":"00004","insertText":"mkspell","insertTextFormat":1},{"label":"mkvimrc","kind":24,"detail":"mkv[imrc]","documentation":"write current mappings and settings to a file","sortText":"00004","insertText":"mkvimrc","insertTextFormat":1},{"label":"mkview","kind":24,"detail":"mkvie[w]","documentation":"write view of current window to a file","sortText":"00004","insertText":"mkview","insertTextFormat":1},{"label":"mode","kind":24,"detail":"mod[e]","documentation":"show or change the screen mode","sortText":"00004","insertText":"mode","insertTextFormat":1},{"label":"next","kind":24,"detail":"n[ext]","documentation":"go to next file in the argument list","sortText":"00004","insertText":"next","insertTextFormat":1},{"label":"new","kind":24,"detail":"new","documentation":"create a new empty window","sortText":"00004","insertText":"new","insertTextFormat":1},{"label":"nmap","kind":24,"detail":"nm[ap]","documentation":"like \\":map\\" but for Normal mode","sortText":"00004","insertText":"nmap","insertTextFormat":1},{"label":"nmapclear","kind":24,"detail":"nmapc[lear]","documentation":"clear all mappings for Normal mode","sortText":"00004","insertText":"nmapclear","insertTextFormat":1},{"label":"nmenu","kind":24,"detail":"nme[nu]","documentation":"add menu for Normal mode","sortText":"00004","insertText":"nmenu","insertTextFormat":1},{"label":"nnoremap","kind":24,"detail":"nn[oremap]","documentation":"like \\":noremap\\" but for Normal mode","sortText":"00004","insertText":"nnoremap","insertTextFormat":1},{"label":"nnoremenu","kind":24,"detail":"nnoreme[nu]","documentation":"like \\":noremenu\\" but for Normal mode","sortText":"00004","insertText":"nnoremenu","insertTextFormat":1},{"label":"noautocmd","kind":24,"detail":"noa[utocmd]","documentation":"following commands don\'t trigger autocommands","sortText":"00004","insertText":"noautocmd","insertTextFormat":1},{"label":"noremap","kind":24,"detail":"no[remap]","documentation":"enter a mapping that will not be remapped","sortText":"00004","insertText":"noremap","insertTextFormat":1},{"label":"nohlsearch","kind":24,"detail":"noh[lsearch]","documentation":"suspend \'hlsearch\' highlighting","sortText":"00004","insertText":"nohlsearch","insertTextFormat":1},{"label":"noreabbrev","kind":24,"detail":"norea[bbrev]","documentation":"enter an abbreviation that will not be remapped","sortText":"00004","insertText":"noreabbrev","insertTextFormat":1},{"label":"noremenu","kind":24,"detail":"noreme[nu]","documentation":"enter a menu that will not be remapped","sortText":"00004","insertText":"noremenu","insertTextFormat":1},{"label":"normal","kind":24,"detail":"norm[al]","documentation":"execute Normal mode commands","sortText":"00004","insertText":"normal","insertTextFormat":1},{"label":"noswapfile","kind":24,"detail":"nos[wapfile]","documentation":"following commands don\'t create a swap file","sortText":"00004","insertText":"noswapfile","insertTextFormat":1},{"label":"number","kind":24,"detail":"nu[mber]","documentation":"print lines with line number","sortText":"00004","insertText":"number","insertTextFormat":1},{"label":"nunmap","kind":24,"detail":"nun[map]","documentation":"like \\":unmap\\" but for Normal mode","sortText":"00004","insertText":"nunmap","insertTextFormat":1},{"label":"nunmenu","kind":24,"detail":"nunme[nu]","documentation":"remove menu for Normal mode","sortText":"00004","insertText":"nunmenu","insertTextFormat":1},{"label":"oldfiles","kind":24,"detail":"ol[dfiles]","documentation":"list files that have marks in the |shada| file","sortText":"00004","insertText":"oldfiles","insertTextFormat":1},{"label":"omap","kind":24,"detail":"om[ap]","documentation":"like \\":map\\" but for Operator-pending mode","sortText":"00004","insertText":"omap","insertTextFormat":1},{"label":"omapclear","kind":24,"detail":"omapc[lear]","documentation":"remove all mappings for Operator-pending mode","sortText":"00004","insertText":"omapclear","insertTextFormat":1},{"label":"omenu","kind":24,"detail":"ome[nu]","documentation":"add menu for Operator-pending mode","sortText":"00004","insertText":"omenu","insertTextFormat":1},{"label":"only","kind":24,"detail":"on[ly]","documentation":"close all windows except the current one","sortText":"00004","insertText":"only","insertTextFormat":1},{"label":"onoremap","kind":24,"detail":"ono[remap]","documentation":"like \\":noremap\\" but for Operator-pending mode","sortText":"00004","insertText":"onoremap","insertTextFormat":1},{"label":"onoremenu","kind":24,"detail":"onoreme[nu]","documentation":"like \\":noremenu\\" but for Operator-pending mode","sortText":"00004","insertText":"onoremenu","insertTextFormat":1},{"label":"options","kind":24,"detail":"opt[ions]","documentation":"open the options-window","sortText":"00004","insertText":"options","insertTextFormat":1},{"label":"ounmap","kind":24,"detail":"ou[nmap]","documentation":"like \\":unmap\\" but for Operator-pending mode","sortText":"00004","insertText":"ounmap","insertTextFormat":1},{"label":"ounmenu","kind":24,"detail":"ounme[nu]","documentation":"remove menu for Operator-pending mode","sortText":"00004","insertText":"ounmenu","insertTextFormat":1},{"label":"ownsyntax","kind":24,"detail":"ow[nsyntax]","documentation":"set new local syntax highlight for this window","sortText":"00004","insertText":"ownsyntax","insertTextFormat":1},{"label":"packadd","kind":24,"detail":"pa[ckadd]","documentation":"add a plugin from \'packpath\'","sortText":"00004","insertText":"packadd","insertTextFormat":1},{"label":"packloadall","kind":24,"detail":"packl[oadall]","documentation":"load all packages under \'packpath\'","sortText":"00004","insertText":"packloadall","insertTextFormat":1},{"label":"pclose","kind":24,"detail":"pc[lose]","documentation":"close preview window","sortText":"00004","insertText":"pclose","insertTextFormat":1},{"label":"pedit","kind":24,"detail":"ped[it]","documentation":"edit file in the preview window","sortText":"00004","insertText":"pedit","insertTextFormat":1},{"label":"print","kind":24,"detail":"p[rint]","documentation":"print lines","sortText":"00004","insertText":"print","insertTextFormat":1},{"label":"profdel","kind":24,"detail":"profd[el]","documentation":"stop profiling a function or script","sortText":"00004","insertText":"profdel","insertTextFormat":1},{"label":"profile","kind":24,"detail":"prof[ile]","documentation":"profiling functions and scripts","sortText":"00004","insertText":"profile","insertTextFormat":1},{"label":"promptfind","kind":24,"detail":"pro[mptfind]","documentation":"open GUI dialog for searching","sortText":"00004","insertText":"promptfind","insertTextFormat":1},{"label":"promptrepl","kind":24,"detail":"promptr[epl]","documentation":"open GUI dialog for search/replace","sortText":"00004","insertText":"promptrepl","insertTextFormat":1},{"label":"pop","kind":24,"detail":"po[p]","documentation":"jump to older entry in tag stack","sortText":"00004","insertText":"pop","insertTextFormat":1},{"label":"popup","kind":24,"detail":"popu[p]","documentation":"popup a menu by name","sortText":"00004","insertText":"popup","insertTextFormat":1},{"label":"ppop","kind":24,"detail":"pp[op]","documentation":"\\":pop\\" in preview window","sortText":"00004","insertText":"ppop","insertTextFormat":1},{"label":"preserve","kind":24,"detail":"pre[serve]","documentation":"write all text to swap file","sortText":"00004","insertText":"preserve","insertTextFormat":1},{"label":"previous","kind":24,"detail":"prev[ious]","documentation":"go to previous file in argument list","sortText":"00004","insertText":"previous","insertTextFormat":1},{"label":"psearch","kind":24,"detail":"ps[earch]","documentation":"like \\":ijump\\" but shows match in preview window","sortText":"00004","insertText":"psearch","insertTextFormat":1},{"label":"ptag","kind":24,"detail":"pt[ag]","documentation":"show tag in preview window","sortText":"00004","insertText":"ptag","insertTextFormat":1},{"label":"ptNext","kind":24,"detail":"ptN[ext]","documentation":"|:tNext| in preview window","sortText":"00004","insertText":"ptNext","insertTextFormat":1},{"label":"ptfirst","kind":24,"detail":"ptf[irst]","documentation":"|:trewind| in preview window","sortText":"00004","insertText":"ptfirst","insertTextFormat":1},{"label":"ptjump","kind":24,"detail":"ptj[ump]","documentation":"|:tjump| and show tag in preview window","sortText":"00004","insertText":"ptjump","insertTextFormat":1},{"label":"ptlast","kind":24,"detail":"ptl[ast]","documentation":"|:tlast| in preview window","sortText":"00004","insertText":"ptlast","insertTextFormat":1},{"label":"ptnext","kind":24,"detail":"ptn[ext]","documentation":"|:tnext| in preview window","sortText":"00004","insertText":"ptnext","insertTextFormat":1},{"label":"ptprevious","kind":24,"detail":"ptp[revious]","documentation":"|:tprevious| in preview window","sortText":"00004","insertText":"ptprevious","insertTextFormat":1},{"label":"ptrewind","kind":24,"detail":"ptr[ewind]","documentation":"|:trewind| in preview window","sortText":"00004","insertText":"ptrewind","insertTextFormat":1},{"label":"ptselect","kind":24,"detail":"pts[elect]","documentation":"|:tselect| and show tag in preview window","sortText":"00004","insertText":"ptselect","insertTextFormat":1},{"label":"put","kind":24,"detail":"pu[t]","documentation":"insert contents of register in the text","sortText":"00004","insertText":"put","insertTextFormat":1},{"label":"pwd","kind":24,"detail":"pw[d]","documentation":"print current directory","sortText":"00004","insertText":"pwd","insertTextFormat":1},{"label":"py3","kind":24,"detail":"py3","documentation":"execute Python 3 command","sortText":"00004","insertText":"py3","insertTextFormat":1},{"label":"python3","kind":24,"detail":"python3","documentation":"same as :py3","sortText":"00004","insertText":"python3","insertTextFormat":1},{"label":"py3do","kind":24,"detail":"py3d[o]","documentation":"execute Python 3 command for each line","sortText":"00004","insertText":"py3do","insertTextFormat":1},{"label":"py3file","kind":24,"detail":"py3f[ile]","documentation":"execute Python 3 script file","sortText":"00004","insertText":"py3file","insertTextFormat":1},{"label":"python","kind":24,"detail":"py[thon]","documentation":"execute Python command","sortText":"00004","insertText":"python","insertTextFormat":1},{"label":"pydo","kind":24,"detail":"pyd[o]","documentation":"execute Python command for each line","sortText":"00004","insertText":"pydo","insertTextFormat":1},{"label":"pyfile","kind":24,"detail":"pyf[ile]","documentation":"execute Python script file","sortText":"00004","insertText":"pyfile","insertTextFormat":1},{"label":"pyx","kind":24,"detail":"pyx","documentation":"execute |python_x| command","sortText":"00004","insertText":"pyx","insertTextFormat":1},{"label":"pythonx","kind":24,"detail":"pythonx","documentation":"same as :pyx","sortText":"00004","insertText":"pythonx","insertTextFormat":1},{"label":"pyxdo","kind":24,"detail":"pyxd[o]","documentation":"execute |python_x| command for each line","sortText":"00004","insertText":"pyxdo","insertTextFormat":1},{"label":"pyxfile","kind":24,"detail":"pyxf[ile]","documentation":"execute |python_x| script file","sortText":"00004","insertText":"pyxfile","insertTextFormat":1},{"label":"quit","kind":24,"detail":"q[uit]","documentation":"quit current window (when one window quit Vim)","sortText":"00004","insertText":"quit","insertTextFormat":1},{"label":"quitall","kind":24,"detail":"quita[ll]","documentation":"quit Vim","sortText":"00004","insertText":"quitall","insertTextFormat":1},{"label":"qall","kind":24,"detail":"qa[ll]","documentation":"quit Vim","sortText":"00004","insertText":"qall","insertTextFormat":1},{"label":"read","kind":24,"detail":"r[ead]","documentation":"read file into the text","sortText":"00004","insertText":"read","insertTextFormat":1},{"label":"recover","kind":24,"detail":"rec[over]","documentation":"recover a file from a swap file","sortText":"00004","insertText":"recover","insertTextFormat":1},{"label":"redo","kind":24,"detail":"red[o]","documentation":"redo one undone change","sortText":"00004","insertText":"redo","insertTextFormat":1},{"label":"redir","kind":24,"detail":"redi[r]","documentation":"redirect messages to a file or register","sortText":"00004","insertText":"redir","insertTextFormat":1},{"label":"redraw","kind":24,"detail":"redr[aw]","documentation":"force a redraw of the display","sortText":"00004","insertText":"redraw","insertTextFormat":1},{"label":"redrawstatus","kind":24,"detail":"redraws[tatus]","documentation":"force a redraw of the status line(s)","sortText":"00004","insertText":"redrawstatus","insertTextFormat":1},{"label":"redrawtabline","kind":24,"detail":"redrawt[abline]","documentation":"force a redraw of the tabline","sortText":"00004","insertText":"redrawtabline","insertTextFormat":1},{"label":"registers","kind":24,"detail":"reg[isters]","documentation":"display the contents of registers","sortText":"00004","insertText":"registers","insertTextFormat":1},{"label":"resize","kind":24,"detail":"res[ize]","documentation":"change current window height","sortText":"00004","insertText":"resize","insertTextFormat":1},{"label":"retab","kind":24,"detail":"ret[ab]","documentation":"change tab size","sortText":"00004","insertText":"retab","insertTextFormat":1},{"label":"return","kind":24,"detail":"retu[rn]","documentation":"return from a user function","sortText":"00004","insertText":"return","insertTextFormat":1},{"label":"rewind","kind":24,"detail":"rew[ind]","documentation":"go to the first file in the argument list","sortText":"00004","insertText":"rewind","insertTextFormat":1},{"label":"right","kind":24,"detail":"ri[ght]","documentation":"right align text","sortText":"00004","insertText":"right","insertTextFormat":1},{"label":"rightbelow","kind":24,"detail":"rightb[elow]","documentation":"make split window appear right or below","sortText":"00004","insertText":"rightbelow","insertTextFormat":1},{"label":"rshada","kind":24,"detail":"rsh[ada]","documentation":"read from |shada| file","sortText":"00004","insertText":"rshada","insertTextFormat":1},{"label":"ruby","kind":24,"detail":"rub[y]","documentation":"execute Ruby command","sortText":"00004","insertText":"ruby","insertTextFormat":1},{"label":"rubydo","kind":24,"detail":"rubyd[o]","documentation":"execute Ruby command for each line","sortText":"00004","insertText":"rubydo","insertTextFormat":1},{"label":"rubyfile","kind":24,"detail":"rubyf[ile]","documentation":"execute Ruby script file","sortText":"00004","insertText":"rubyfile","insertTextFormat":1},{"label":"rundo","kind":24,"detail":"rund[o]","documentation":"read undo information from a file","sortText":"00004","insertText":"rundo","insertTextFormat":1},{"label":"runtime","kind":24,"detail":"ru[ntime]","documentation":"source vim scripts in \'runtimepath\'","sortText":"00004","insertText":"runtime","insertTextFormat":1},{"label":"substitute","kind":24,"detail":"s[ubstitute]","documentation":"find and replace text","sortText":"00004","insertText":"substitute","insertTextFormat":1},{"label":"sNext","kind":24,"detail":"sN[ext]","documentation":"split window and go to previous file in argument list","sortText":"00004","insertText":"sNext","insertTextFormat":1},{"label":"sandbox","kind":24,"detail":"san[dbox]","documentation":"execute a command in the sandbox","sortText":"00004","insertText":"sandbox","insertTextFormat":1},{"label":"sargument","kind":24,"detail":"sa[rgument]","documentation":"split window and go to specific file in argument list","sortText":"00004","insertText":"sargument","insertTextFormat":1},{"label":"sall","kind":24,"detail":"sal[l]","documentation":"open a window for each file in argument list","sortText":"00004","insertText":"sall","insertTextFormat":1},{"label":"saveas","kind":24,"detail":"sav[eas]","documentation":"save file under another name.","sortText":"00004","insertText":"saveas","insertTextFormat":1},{"label":"sbuffer","kind":24,"detail":"sb[uffer]","documentation":"split window and go to specific file in the buffer list","sortText":"00004","insertText":"sbuffer","insertTextFormat":1},{"label":"sbNext","kind":24,"detail":"sbN[ext]","documentation":"split window and go to previous file in the buffer list","sortText":"00004","insertText":"sbNext","insertTextFormat":1},{"label":"sball","kind":24,"detail":"sba[ll]","documentation":"open a window for each file in the buffer list","sortText":"00004","insertText":"sball","insertTextFormat":1},{"label":"sbfirst","kind":24,"detail":"sbf[irst]","documentation":"split window and go to first file in the buffer list","sortText":"00004","insertText":"sbfirst","insertTextFormat":1},{"label":"sblast","kind":24,"detail":"sbl[ast]","documentation":"split window and go to last file in buffer list","sortText":"00004","insertText":"sblast","insertTextFormat":1},{"label":"sbmodified","kind":24,"detail":"sbm[odified]","documentation":"split window and go to modified file in the buffer list","sortText":"00004","insertText":"sbmodified","insertTextFormat":1},{"label":"sbnext","kind":24,"detail":"sbn[ext]","documentation":"split window and go to next file in the buffer list","sortText":"00004","insertText":"sbnext","insertTextFormat":1},{"label":"sbprevious","kind":24,"detail":"sbp[revious]","documentation":"split window and go to previous file in the buffer list","sortText":"00004","insertText":"sbprevious","insertTextFormat":1},{"label":"sbrewind","kind":24,"detail":"sbr[ewind]","documentation":"split window and go to first file in the buffer list","sortText":"00004","insertText":"sbrewind","insertTextFormat":1},{"label":"scriptnames","kind":24,"detail":"scr[iptnames]","documentation":"list names of all sourced Vim scripts","sortText":"00004","insertText":"scriptnames","insertTextFormat":1},{"label":"scriptencoding","kind":24,"detail":"scripte[ncoding]","documentation":"encoding used in sourced Vim script","sortText":"00004","insertText":"scriptencoding","insertTextFormat":1},{"label":"scriptversion","kind":24,"detail":"scriptv[ersion]","documentation":"version of Vim script used","sortText":"00004","insertText":"scriptversion","insertTextFormat":1},{"label":"scscope","kind":24,"detail":"scs[cope]","documentation":"split window and execute cscope command","sortText":"00004","insertText":"scscope","insertTextFormat":1},{"label":"set","kind":24,"detail":"se[t]","documentation":"show or set options","sortText":"00004","insertText":"set","insertTextFormat":1},{"label":"setfiletype","kind":24,"detail":"setf[iletype]","documentation":"set \'filetype\', unless it was set already","sortText":"00004","insertText":"setfiletype","insertTextFormat":1},{"label":"setglobal","kind":24,"detail":"setg[lobal]","documentation":"show global values of options","sortText":"00004","insertText":"setglobal","insertTextFormat":1},{"label":"setlocal","kind":24,"detail":"setl[ocal]","documentation":"show or set options locally","sortText":"00004","insertText":"setlocal","insertTextFormat":1},{"label":"sfind","kind":24,"detail":"sf[ind]","documentation":"split current window and edit file in \'path\'","sortText":"00004","insertText":"sfind","insertTextFormat":1},{"label":"sfirst","kind":24,"detail":"sfir[st]","documentation":"split window and go to first file in the argument list","sortText":"00004","insertText":"sfirst","insertTextFormat":1},{"label":"sign","kind":24,"detail":"sig[n]","documentation":"manipulate signs","sortText":"00004","insertText":"sign","insertTextFormat":1},{"label":"silent","kind":24,"detail":"sil[ent]","documentation":"run a command silently","sortText":"00004","insertText":"silent","insertTextFormat":1},{"label":"sleep","kind":24,"detail":"sl[eep]","documentation":"do nothing for a few seconds","sortText":"00004","insertText":"sleep","insertTextFormat":1},{"label":"slast","kind":24,"detail":"sla[st]","documentation":"split window and go to last file in the argument list","sortText":"00004","insertText":"slast","insertTextFormat":1},{"label":"smagic","kind":24,"detail":"sm[agic]","documentation":":substitute with \'magic\'","sortText":"00004","insertText":"smagic","insertTextFormat":1},{"label":"smap","kind":24,"detail":"smap","documentation":"like \\":map\\" but for Select mode","sortText":"00004","insertText":"smap","insertTextFormat":1},{"label":"smapclear","kind":24,"detail":"smapc[lear]","documentation":"remove all mappings for Select mode","sortText":"00004","insertText":"smapclear","insertTextFormat":1},{"label":"smenu","kind":24,"detail":"sme[nu]","documentation":"add menu for Select mode","sortText":"00004","insertText":"smenu","insertTextFormat":1},{"label":"snext","kind":24,"detail":"sn[ext]","documentation":"split window and go to next file in the argument list","sortText":"00004","insertText":"snext","insertTextFormat":1},{"label":"snomagic","kind":24,"detail":"sno[magic]","documentation":":substitute with \'nomagic\'","sortText":"00004","insertText":"snomagic","insertTextFormat":1},{"label":"snoremap","kind":24,"detail":"snor[emap]","documentation":"like \\":noremap\\" but for Select mode","sortText":"00004","insertText":"snoremap","insertTextFormat":1},{"label":"snoremenu","kind":24,"detail":"snoreme[nu]","documentation":"like \\":noremenu\\" but for Select mode","sortText":"00004","insertText":"snoremenu","insertTextFormat":1},{"label":"sort","kind":24,"detail":"sor[t]","documentation":"sort lines","sortText":"00004","insertText":"sort","insertTextFormat":1},{"label":"source","kind":24,"detail":"so[urce]","documentation":"read Vim or Ex commands from a file","sortText":"00004","insertText":"source","insertTextFormat":1},{"label":"spelldump","kind":24,"detail":"spelld[ump]","documentation":"split window and fill with all correct words","sortText":"00004","insertText":"spelldump","insertTextFormat":1},{"label":"spellgood","kind":24,"detail":"spe[llgood]","documentation":"add good word for spelling","sortText":"00004","insertText":"spellgood","insertTextFormat":1},{"label":"spellinfo","kind":24,"detail":"spelli[nfo]","documentation":"show info about loaded spell files","sortText":"00004","insertText":"spellinfo","insertTextFormat":1},{"label":"spellrare","kind":24,"detail":"spellra[re]","documentation":"add rare word for spelling","sortText":"00004","insertText":"spellrare","insertTextFormat":1},{"label":"spellrepall","kind":24,"detail":"spellr[epall]","documentation":"replace all bad words like last |z=|","sortText":"00004","insertText":"spellrepall","insertTextFormat":1},{"label":"spellundo","kind":24,"detail":"spellu[ndo]","documentation":"remove good or bad word","sortText":"00004","insertText":"spellundo","insertTextFormat":1},{"label":"spellwrong","kind":24,"detail":"spellw[rong]","documentation":"add spelling mistake","sortText":"00004","insertText":"spellwrong","insertTextFormat":1},{"label":"split","kind":24,"detail":"sp[lit]","documentation":"split current window","sortText":"00004","insertText":"split","insertTextFormat":1},{"label":"sprevious","kind":24,"detail":"spr[evious]","documentation":"split window and go to previous file in the argument list","sortText":"00004","insertText":"sprevious","insertTextFormat":1},{"label":"srewind","kind":24,"detail":"sre[wind]","documentation":"split window and go to first file in the argument list","sortText":"00004","insertText":"srewind","insertTextFormat":1},{"label":"stop","kind":24,"detail":"st[op]","documentation":"suspend the editor or escape to a shell","sortText":"00004","insertText":"stop","insertTextFormat":1},{"label":"stag","kind":24,"detail":"sta[g]","documentation":"split window and jump to a tag","sortText":"00004","insertText":"stag","insertTextFormat":1},{"label":"startinsert","kind":24,"detail":"star[tinsert]","documentation":"start Insert mode","sortText":"00004","insertText":"startinsert","insertTextFormat":1},{"label":"startgreplace","kind":24,"detail":"startg[replace]","documentation":"start Virtual Replace mode","sortText":"00004","insertText":"startgreplace","insertTextFormat":1},{"label":"startreplace","kind":24,"detail":"startr[eplace]","documentation":"start Replace mode","sortText":"00004","insertText":"startreplace","insertTextFormat":1},{"label":"stopinsert","kind":24,"detail":"stopi[nsert]","documentation":"stop Insert mode","sortText":"00004","insertText":"stopinsert","insertTextFormat":1},{"label":"stjump","kind":24,"detail":"stj[ump]","documentation":"do \\":tjump\\" and split window","sortText":"00004","insertText":"stjump","insertTextFormat":1},{"label":"stselect","kind":24,"detail":"sts[elect]","documentation":"do \\":tselect\\" and split window","sortText":"00004","insertText":"stselect","insertTextFormat":1},{"label":"sunhide","kind":24,"detail":"sun[hide]","documentation":"same as \\":unhide\\"","sortText":"00004","insertText":"sunhide","insertTextFormat":1},{"label":"sunmap","kind":24,"detail":"sunm[ap]","documentation":"like \\":unmap\\" but for Select mode","sortText":"00004","insertText":"sunmap","insertTextFormat":1},{"label":"sunmenu","kind":24,"detail":"sunme[nu]","documentation":"remove menu for Select mode","sortText":"00004","insertText":"sunmenu","insertTextFormat":1},{"label":"suspend","kind":24,"detail":"sus[pend]","documentation":"same as \\":stop\\"","sortText":"00004","insertText":"suspend","insertTextFormat":1},{"label":"sview","kind":24,"detail":"sv[iew]","documentation":"split window and edit file read-only","sortText":"00004","insertText":"sview","insertTextFormat":1},{"label":"swapname","kind":24,"detail":"sw[apname]","documentation":"show the name of the current swap file","sortText":"00004","insertText":"swapname","insertTextFormat":1},{"label":"syntax","kind":24,"detail":"sy[ntax]","documentation":"syntax highlighting","sortText":"00004","insertText":"syntax","insertTextFormat":1},{"label":"syntime","kind":24,"detail":"synti[me]","documentation":"measure syntax highlighting speed","sortText":"00004","insertText":"syntime","insertTextFormat":1},{"label":"syncbind","kind":24,"detail":"sync[bind]","documentation":"sync scroll binding","sortText":"00004","insertText":"syncbind","insertTextFormat":1},{"label":"t","kind":24,"detail":"t","documentation":"same as \\":copy\\"","sortText":"00004","insertText":"t","insertTextFormat":1},{"label":"tNext","kind":24,"detail":"tN[ext]","documentation":"jump to previous matching tag","sortText":"00004","insertText":"tNext","insertTextFormat":1},{"label":"tabNext","kind":24,"detail":"tabN[ext]","documentation":"go to previous tab page","sortText":"00004","insertText":"tabNext","insertTextFormat":1},{"label":"tabclose","kind":24,"detail":"tabc[lose]","documentation":"close current tab page","sortText":"00004","insertText":"tabclose","insertTextFormat":1},{"label":"tabdo","kind":24,"detail":"tabdo","documentation":"execute command in each tab page","sortText":"00004","insertText":"tabdo","insertTextFormat":1},{"label":"tabedit","kind":24,"detail":"tabe[dit]","documentation":"edit a file in a new tab page","sortText":"00004","insertText":"tabedit","insertTextFormat":1},{"label":"tabfind","kind":24,"detail":"tabf[ind]","documentation":"find file in \'path\', edit it in a new tab page","sortText":"00004","insertText":"tabfind","insertTextFormat":1},{"label":"tabfirst","kind":24,"detail":"tabfir[st]","documentation":"go to first tab page","sortText":"00004","insertText":"tabfirst","insertTextFormat":1},{"label":"tablast","kind":24,"detail":"tabl[ast]","documentation":"go to last tab page","sortText":"00004","insertText":"tablast","insertTextFormat":1},{"label":"tabmove","kind":24,"detail":"tabm[ove]","documentation":"move tab page to other position","sortText":"00004","insertText":"tabmove","insertTextFormat":1},{"label":"tabnew","kind":24,"detail":"tabnew","documentation":"edit a file in a new tab page","sortText":"00004","insertText":"tabnew","insertTextFormat":1},{"label":"tabnext","kind":24,"detail":"tabn[ext]","documentation":"go to next tab page","sortText":"00004","insertText":"tabnext","insertTextFormat":1},{"label":"tabonly","kind":24,"detail":"tabo[nly]","documentation":"close all tab pages except the current one","sortText":"00004","insertText":"tabonly","insertTextFormat":1},{"label":"tabprevious","kind":24,"detail":"tabp[revious]","documentation":"go to previous tab page","sortText":"00004","insertText":"tabprevious","insertTextFormat":1},{"label":"tabrewind","kind":24,"detail":"tabr[ewind]","documentation":"go to first tab page","sortText":"00004","insertText":"tabrewind","insertTextFormat":1},{"label":"tabs","kind":24,"detail":"tabs","documentation":"list the tab pages and what they contain","sortText":"00004","insertText":"tabs","insertTextFormat":1},{"label":"tab","kind":24,"detail":"tab","documentation":"create new tab when opening new window","sortText":"00004","insertText":"tab","insertTextFormat":1},{"label":"tag","kind":24,"detail":"ta[g]","documentation":"jump to tag","sortText":"00004","insertText":"tag","insertTextFormat":1},{"label":"tags","kind":24,"detail":"tags","documentation":"show the contents of the tag stack","sortText":"00004","insertText":"tags","insertTextFormat":1},{"label":"tcd","kind":24,"detail":"tcd","documentation":"change directory for tab page","sortText":"00004","insertText":"tcd","insertTextFormat":1},{"label":"tchdir","kind":24,"detail":"tch[dir]","documentation":"change directory for tab page","sortText":"00004","insertText":"tchdir","insertTextFormat":1},{"label":"terminal","kind":24,"detail":"te[rminal]","documentation":"open a terminal buffer","sortText":"00004","insertText":"terminal","insertTextFormat":1},{"label":"tfirst","kind":24,"detail":"tf[irst]","documentation":"jump to first matching tag","sortText":"00004","insertText":"tfirst","insertTextFormat":1},{"label":"throw","kind":24,"detail":"th[row]","documentation":"throw an exception","sortText":"00004","insertText":"throw","insertTextFormat":1},{"label":"tjump","kind":24,"detail":"tj[ump]","documentation":"like \\":tselect\\", but jump directly when there is only one match","sortText":"00004","insertText":"tjump","insertTextFormat":1},{"label":"tlast","kind":24,"detail":"tl[ast]","documentation":"jump to last matching tag","sortText":"00004","insertText":"tlast","insertTextFormat":1},{"label":"tmapclear","kind":24,"detail":"tmapc[lear]","documentation":"remove all mappings for Terminal-Job mode","sortText":"00004","insertText":"tmapclear","insertTextFormat":1},{"label":"tmap","kind":24,"detail":"tma[p]","documentation":"like \\":map\\" but for Terminal-Job mode","sortText":"00004","insertText":"tmap","insertTextFormat":1},{"label":"tmenu","kind":24,"detail":"tm[enu]","documentation":"define menu tooltip","sortText":"00004","insertText":"tmenu","insertTextFormat":1},{"label":"tnext","kind":24,"detail":"tn[ext]","documentation":"jump to next matching tag","sortText":"00004","insertText":"tnext","insertTextFormat":1},{"label":"tnoremap","kind":24,"detail":"tno[remap]","documentation":"like \\":noremap\\" but for Terminal-Job mode","sortText":"00004","insertText":"tnoremap","insertTextFormat":1},{"label":"topleft","kind":24,"detail":"to[pleft]","documentation":"make split window appear at top or far left","sortText":"00004","insertText":"topleft","insertTextFormat":1},{"label":"tprevious","kind":24,"detail":"tp[revious]","documentation":"jump to previous matching tag","sortText":"00004","insertText":"tprevious","insertTextFormat":1},{"label":"trewind","kind":24,"detail":"tr[ewind]","documentation":"jump to first matching tag","sortText":"00004","insertText":"trewind","insertTextFormat":1},{"label":"try","kind":24,"detail":"try","documentation":"execute commands, abort on error or exception","sortText":"00004","insertText":"try","insertTextFormat":1},{"label":"tselect","kind":24,"detail":"ts[elect]","documentation":"list matching tags and select one","sortText":"00004","insertText":"tselect","insertTextFormat":1},{"label":"tunmap","kind":24,"detail":"tunma[p]","documentation":"like \\":unmap\\" but for Terminal-Job mode","sortText":"00004","insertText":"tunmap","insertTextFormat":1},{"label":"tunmenu","kind":24,"detail":"tu[nmenu]","documentation":"remove menu tooltip","sortText":"00004","insertText":"tunmenu","insertTextFormat":1},{"label":"undo","kind":24,"detail":"u[ndo]","documentation":"undo last change(s)","sortText":"00004","insertText":"undo","insertTextFormat":1},{"label":"undojoin","kind":24,"detail":"undoj[oin]","documentation":"join next change with previous undo block","sortText":"00004","insertText":"undojoin","insertTextFormat":1},{"label":"undolist","kind":24,"detail":"undol[ist]","documentation":"list leafs of the undo tree","sortText":"00004","insertText":"undolist","insertTextFormat":1},{"label":"unabbreviate","kind":24,"detail":"una[bbreviate]","documentation":"remove abbreviation","sortText":"00004","insertText":"unabbreviate","insertTextFormat":1},{"label":"unhide","kind":24,"detail":"unh[ide]","documentation":"open a window for each loaded file in the buffer list","sortText":"00004","insertText":"unhide","insertTextFormat":1},{"label":"unlet","kind":24,"detail":"unl[et]","documentation":"delete variable","sortText":"00004","insertText":"unlet","insertTextFormat":1},{"label":"unlockvar","kind":24,"detail":"unlo[ckvar]","documentation":"unlock variables","sortText":"00004","insertText":"unlockvar","insertTextFormat":1},{"label":"unmap","kind":24,"detail":"unm[ap]","documentation":"remove mapping","sortText":"00004","insertText":"unmap","insertTextFormat":1},{"label":"unmenu","kind":24,"detail":"unme[nu]","documentation":"remove menu","sortText":"00004","insertText":"unmenu","insertTextFormat":1},{"label":"unsilent","kind":24,"detail":"uns[ilent]","documentation":"run a command not silently","sortText":"00004","insertText":"unsilent","insertTextFormat":1},{"label":"update","kind":24,"detail":"up[date]","documentation":"write buffer if modified","sortText":"00004","insertText":"update","insertTextFormat":1},{"label":"vglobal","kind":24,"detail":"v[global]","documentation":"execute commands for not matching lines","sortText":"00004","insertText":"vglobal","insertTextFormat":1},{"label":"version","kind":24,"detail":"ve[rsion]","documentation":"print version number and other info","sortText":"00004","insertText":"version","insertTextFormat":1},{"label":"verbose","kind":24,"detail":"verb[ose]","documentation":"execute command with \'verbose\' set","sortText":"00004","insertText":"verbose","insertTextFormat":1},{"label":"vertical","kind":24,"detail":"vert[ical]","documentation":"make following command split vertically","sortText":"00004","insertText":"vertical","insertTextFormat":1},{"label":"vimgrep","kind":24,"detail":"vim[grep]","documentation":"search for pattern in files","sortText":"00004","insertText":"vimgrep","insertTextFormat":1},{"label":"vimgrepadd","kind":24,"detail":"vimgrepa[dd]","documentation":"like :vimgrep, but append to current list","sortText":"00004","insertText":"vimgrepadd","insertTextFormat":1},{"label":"visual","kind":24,"detail":"vi[sual]","documentation":"same as \\":edit\\", but turns off \\"Ex\\" mode","sortText":"00004","insertText":"visual","insertTextFormat":1},{"label":"viusage","kind":24,"detail":"viu[sage]","documentation":"overview of Normal mode commands","sortText":"00004","insertText":"viusage","insertTextFormat":1},{"label":"view","kind":24,"detail":"vie[w]","documentation":"edit a file read-only","sortText":"00004","insertText":"view","insertTextFormat":1},{"label":"vmap","kind":24,"detail":"vm[ap]","documentation":"like \\":map\\" but for Visual+Select mode","sortText":"00004","insertText":"vmap","insertTextFormat":1},{"label":"vmapclear","kind":24,"detail":"vmapc[lear]","documentation":"remove all mappings for Visual+Select mode","sortText":"00004","insertText":"vmapclear","insertTextFormat":1},{"label":"vmenu","kind":24,"detail":"vme[nu]","documentation":"add menu for Visual+Select mode","sortText":"00004","insertText":"vmenu","insertTextFormat":1},{"label":"vnew","kind":24,"detail":"vne[w]","documentation":"create a new empty window, vertically split","sortText":"00004","insertText":"vnew","insertTextFormat":1},{"label":"vnoremap","kind":24,"detail":"vn[oremap]","documentation":"like \\":noremap\\" but for Visual+Select mode","sortText":"00004","insertText":"vnoremap","insertTextFormat":1},{"label":"vnoremenu","kind":24,"detail":"vnoreme[nu]","documentation":"like \\":noremenu\\" but for Visual+Select mode","sortText":"00004","insertText":"vnoremenu","insertTextFormat":1},{"label":"vsplit","kind":24,"detail":"vs[plit]","documentation":"split current window vertically","sortText":"00004","insertText":"vsplit","insertTextFormat":1},{"label":"vunmap","kind":24,"detail":"vu[nmap]","documentation":"like \\":unmap\\" but for Visual+Select mode","sortText":"00004","insertText":"vunmap","insertTextFormat":1},{"label":"vunmenu","kind":24,"detail":"vunme[nu]","documentation":"remove menu for Visual+Select mode","sortText":"00004","insertText":"vunmenu","insertTextFormat":1},{"label":"windo","kind":24,"detail":"windo","documentation":"execute command in each window","sortText":"00004","insertText":"windo","insertTextFormat":1},{"label":"write","kind":24,"detail":"w[rite]","documentation":"write to a file","sortText":"00004","insertText":"write","insertTextFormat":1},{"label":"wNext","kind":24,"detail":"wN[ext]","documentation":"write to a file and go to previous file in argument list","sortText":"00004","insertText":"wNext","insertTextFormat":1},{"label":"wall","kind":24,"detail":"wa[ll]","documentation":"write all (changed) buffers","sortText":"00004","insertText":"wall","insertTextFormat":1},{"label":"while","kind":24,"detail":"wh[ile]","documentation":"execute loop for as long as condition met","sortText":"00004","insertText":"while","insertTextFormat":1},{"label":"winsize","kind":24,"detail":"wi[nsize]","documentation":"get or set window size (obsolete)","sortText":"00004","insertText":"winsize","insertTextFormat":1},{"label":"wincmd","kind":24,"detail":"winc[md]","documentation":"execute a Window (CTRL-W) command","sortText":"00004","insertText":"wincmd","insertTextFormat":1},{"label":"winpos","kind":24,"detail":"winp[os]","documentation":"get or set window position","sortText":"00004","insertText":"winpos","insertTextFormat":1},{"label":"wnext","kind":24,"detail":"wn[ext]","documentation":"write to a file and go to next file in argument list","sortText":"00004","insertText":"wnext","insertTextFormat":1},{"label":"wprevious","kind":24,"detail":"wp[revious]","documentation":"write to a file and go to previous file in argument list","sortText":"00004","insertText":"wprevious","insertTextFormat":1},{"label":"wq","kind":24,"detail":"wq","documentation":"write to a file and quit window or Vim","sortText":"00004","insertText":"wq","insertTextFormat":1},{"label":"wqall","kind":24,"detail":"wqa[ll]","documentation":"write all changed buffers and quit Vim","sortText":"00004","insertText":"wqall","insertTextFormat":1},{"label":"wshada","kind":24,"detail":"wsh[ada]","documentation":"write to ShaDa file","sortText":"00004","insertText":"wshada","insertTextFormat":1},{"label":"wundo","kind":24,"detail":"wu[ndo]","documentation":"write undo information to a file","sortText":"00004","insertText":"wundo","insertTextFormat":1},{"label":"xit","kind":24,"detail":"x[it]","documentation":"write if buffer changed and quit window or Vim","sortText":"00004","insertText":"xit","insertTextFormat":1},{"label":"xall","kind":24,"detail":"xa[ll]","documentation":"same as \\":wqall\\"","sortText":"00004","insertText":"xall","insertTextFormat":1},{"label":"xmapclear","kind":24,"detail":"xmapc[lear]","documentation":"remove all mappings for Visual mode","sortText":"00004","insertText":"xmapclear","insertTextFormat":1},{"label":"xmap","kind":24,"detail":"xm[ap]","documentation":"like \\":map\\" but for Visual mode","sortText":"00004","insertText":"xmap","insertTextFormat":1},{"label":"xmenu","kind":24,"detail":"xme[nu]","documentation":"add menu for Visual mode","sortText":"00004","insertText":"xmenu","insertTextFormat":1},{"label":"xnoremap","kind":24,"detail":"xn[oremap]","documentation":"like \\":noremap\\" but for Visual mode","sortText":"00004","insertText":"xnoremap","insertTextFormat":1},{"label":"xnoremenu","kind":24,"detail":"xnoreme[nu]","documentation":"like \\":noremenu\\" but for Visual mode","sortText":"00004","insertText":"xnoremenu","insertTextFormat":1},{"label":"xunmap","kind":24,"detail":"xu[nmap]","documentation":"like \\":unmap\\" but for Visual mode","sortText":"00004","insertText":"xunmap","insertTextFormat":1},{"label":"xunmenu","kind":24,"detail":"xunme[nu]","documentation":"remove menu for Visual mode","sortText":"00004","insertText":"xunmenu","insertTextFormat":1},{"label":"yank","kind":24,"detail":"y[ank]","documentation":"yank lines into a register","sortText":"00004","insertText":"yank","insertTextFormat":1},{"label":"z","kind":24,"detail":"z","documentation":"print some lines","sortText":"00004","insertText":"z","insertTextFormat":1},{"label":"~","kind":24,"detail":"~","documentation":"repeat last \\":substitute\\"","sortText":"00004","insertText":"~","insertTextFormat":1},{"label":"Print","kind":24,"detail":"P[rint]","documentation":"print lines","sortText":"00004","insertText":"Print","insertTextFormat":1},{"label":"X","kind":24,"detail":"X","documentation":"ask for encryption key","sortText":"00004","insertText":"X","insertTextFormat":1},{"label":"cafter","kind":24,"detail":"caf[ter]","documentation":"go to error after current cursor","sortText":"00004","insertText":"cafter","insertTextFormat":1},{"label":"cbefore","kind":24,"detail":"cbef[ore]","documentation":"go to error before current cursor","sortText":"00004","insertText":"cbefore","insertTextFormat":1},{"label":"fixdel","kind":24,"detail":"fix[del]","documentation":"set key code of <Del>","sortText":"00004","insertText":"fixdel","insertTextFormat":1},{"label":"helpfind","kind":24,"detail":"helpf[ind]","documentation":"dialog to open a help window","sortText":"00004","insertText":"helpfind","insertTextFormat":1},{"label":"lafter","kind":24,"detail":"laf[ter]","documentation":"go to location after current cursor","sortText":"00004","insertText":"lafter","insertTextFormat":1},{"label":"lbefore","kind":24,"detail":"lbef[ore]","documentation":"go to location before current cursor","sortText":"00004","insertText":"lbefore","insertTextFormat":1},{"label":"mzscheme","kind":24,"detail":"mz[scheme]","documentation":"execute MzScheme command","sortText":"00004","insertText":"mzscheme","insertTextFormat":1},{"label":"mzfile","kind":24,"detail":"mzf[ile]","documentation":"execute MzScheme script file","sortText":"00004","insertText":"mzfile","insertTextFormat":1},{"label":"nbclose","kind":24,"detail":"nbc[lose]","documentation":"close the current Netbeans session","sortText":"00004","insertText":"nbclose","insertTextFormat":1},{"label":"nbkey","kind":24,"detail":"nb[key]","documentation":"pass a key to Netbeans","sortText":"00004","insertText":"nbkey","insertTextFormat":1},{"label":"nbstart","kind":24,"detail":"nbs[art]","documentation":"start a new Netbeans session","sortText":"00004","insertText":"nbstart","insertTextFormat":1},{"label":"open","kind":24,"detail":"o[pen]","documentation":"start open mode (not implemented)","sortText":"00004","insertText":"open","insertTextFormat":1},{"label":"perl","kind":24,"detail":"pe[rl]","documentation":"execute Perl command","sortText":"00004","insertText":"perl","insertTextFormat":1},{"label":"perldo","kind":24,"detail":"perld[o]","documentation":"execute Perl command for each line","sortText":"00004","insertText":"perldo","insertTextFormat":1},{"label":"rviminfo","kind":24,"detail":"rv[iminfo]","documentation":"read from viminfo file","sortText":"00004","insertText":"rviminfo","insertTextFormat":1},{"label":"shell","kind":24,"detail":"sh[ell]","documentation":"escape to a shell","sortText":"00004","insertText":"shell","insertTextFormat":1},{"label":"simalt","kind":24,"detail":"sim[alt]","documentation":"Win32 GUI: simulate Windows ALT key","sortText":"00004","insertText":"simalt","insertTextFormat":1},{"label":"smile","kind":24,"detail":"smi[le]","documentation":"make the user happy","sortText":"00004","insertText":"smile","insertTextFormat":1},{"label":"tcl","kind":24,"detail":"tc[l]","documentation":"execute Tcl command","sortText":"00004","insertText":"tcl","insertTextFormat":1},{"label":"tcldo","kind":24,"detail":"tcld[o]","documentation":"execute Tcl command for each line","sortText":"00004","insertText":"tcldo","insertTextFormat":1},{"label":"tclfile","kind":24,"detail":"tclf[ile]","documentation":"execute Tcl script file","sortText":"00004","insertText":"tclfile","insertTextFormat":1},{"label":"tearoff","kind":24,"detail":"te[aroff]","documentation":"tear-off a menu","sortText":"00004","insertText":"tearoff","insertTextFormat":1},{"label":"tlmenu","kind":24,"detail":"tlm[enu]","documentation":"add menu for Terminal-Job mode","sortText":"00004","insertText":"tlmenu","insertTextFormat":1},{"label":"tlnoremenu","kind":24,"detail":"tln[oremenu]","documentation":"like \\":noremenu\\" but for Terminal-Job mode","sortText":"00004","insertText":"tlnoremenu","insertTextFormat":1},{"label":"tlunmenu","kind":24,"detail":"tlu[nmenu]","documentation":"remove menu for Terminal-Job mode","sortText":"00004","insertText":"tlunmenu","insertTextFormat":1},{"label":"wviminfo","kind":24,"detail":"wv[iminfo]","documentation":"write to viminfo file","sortText":"00004","insertText":"wviminfo","insertTextFormat":1},{"label":"xrestore","kind":24,"detail":"xr[estore]","documentation":"restores the X server connection","sortText":"00004","insertText":"xrestore","insertTextFormat":1}],"functions":[{"label":"abs","kind":3,"detail":"Float","sortText":"00004","insertText":"abs(${1:expr})${0}","insertTextFormat":2},{"label":"acos","kind":3,"detail":"Float","sortText":"00004","insertText":"acos(${1:expr})${0}","insertTextFormat":2},{"label":"add","kind":3,"detail":"List","sortText":"00004","insertText":"add(${1:list}, ${2:item})${0}","insertTextFormat":2},{"label":"and","kind":3,"detail":"Number","sortText":"00004","insertText":"and(${1:expr}, ${2:expr})${0}","insertTextFormat":2},{"label":"api_info","kind":3,"detail":"Dict","sortText":"00004","insertText":"api_info(${0})","insertTextFormat":2},{"label":"append","kind":3,"detail":"Number","sortText":"00004","insertText":"append(${1:lnum}, ${2:string})${0}","insertTextFormat":2},{"label":"append","kind":3,"detail":"Number","sortText":"00004","insertText":"append(${1:lnum}, ${2:list})${0}","insertTextFormat":2},{"label":"argc","kind":3,"detail":"Number","sortText":"00004","insertText":"argc(${1})${0}","insertTextFormat":2},{"label":"argidx","kind":3,"detail":"Number","sortText":"00004","insertText":"argidx(${0})","insertTextFormat":2},{"label":"arglistid","kind":3,"detail":"Number","sortText":"00004","insertText":"arglistid(${1})${0}","insertTextFormat":2},{"label":"argv","kind":3,"detail":"String","sortText":"00004","insertText":"argv(${1:nr})${0}","insertTextFormat":2},{"label":"argv","kind":3,"detail":"List","sortText":"00004","insertText":"argv(${1})${0}","insertTextFormat":2},{"label":"assert_beeps","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_beeps(${1:cmd})${0}","insertTextFormat":2},{"label":"assert_equal","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_equal(${1:exp}, ${2:act})${0}","insertTextFormat":2},{"label":"assert_equalfile","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_equalfile(${1:fname}-${2:one}, ${3:fname}-${4:two})${0}","insertTextFormat":2},{"label":"assert_exception","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_exception(${1:error})${0}","insertTextFormat":2},{"label":"assert_fails","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_fails(${1:cmd})${0}","insertTextFormat":2},{"label":"assert_false","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_false(${1:actual})${0}","insertTextFormat":2},{"label":"assert_inrange","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_inrange(${1:lower}, ${2:upper}, ${3:actual})${0}","insertTextFormat":2},{"label":"assert_match","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_match(${1:pat}, ${2:text})${0}","insertTextFormat":2},{"label":"assert_notequal","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_notequal(${1:exp}, ${2:act})${0}","insertTextFormat":2},{"label":"assert_notmatch","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_notmatch(${1:pat}, ${2:text})${0}","insertTextFormat":2},{"label":"assert_report","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_report(${1:msg})${0}","insertTextFormat":2},{"label":"assert_true","kind":3,"detail":"Number","sortText":"00004","insertText":"assert_true(${1:actual})${0}","insertTextFormat":2},{"label":"asin","kind":3,"detail":"Float","sortText":"00004","insertText":"asin(${1:expr})${0}","insertTextFormat":2},{"label":"atan","kind":3,"detail":"Float","sortText":"00004","insertText":"atan(${1:expr})${0}","insertTextFormat":2},{"label":"atan2","kind":3,"detail":"Float","sortText":"00004","insertText":"atan2(${1:expr}, ${2:expr})${0}","insertTextFormat":2},{"label":"browse","kind":3,"detail":"String","sortText":"00004","insertText":"browse(${1:save}, ${2:title}, ${3:initdir}, ${4:default})${0}","insertTextFormat":2},{"label":"browsedir","kind":3,"detail":"String","sortText":"00004","insertText":"browsedir(${1:title}, ${2:initdir})${0}","insertTextFormat":2},{"label":"bufadd","kind":3,"detail":"Number","sortText":"00004","insertText":"bufadd(${1:name})${0}","insertTextFormat":2},{"label":"bufexists","kind":3,"detail":"Number","sortText":"00004","insertText":"bufexists(${1:expr})${0}","insertTextFormat":2},{"label":"buflisted","kind":3,"detail":"Number","sortText":"00004","insertText":"buflisted(${1:expr})${0}","insertTextFormat":2},{"label":"bufload","kind":3,"detail":"Number","sortText":"00004","insertText":"bufload(${1:expr})${0}","insertTextFormat":2},{"label":"bufloaded","kind":3,"detail":"Number","sortText":"00004","insertText":"bufloaded(${1:expr})${0}","insertTextFormat":2},{"label":"bufname","kind":3,"detail":"String","sortText":"00004","insertText":"bufname(${1})${0}","insertTextFormat":2},{"label":"bufnr","kind":3,"detail":"Number","sortText":"00004","insertText":"bufnr(${1})${0}","insertTextFormat":2},{"label":"bufwinid","kind":3,"detail":"Number","sortText":"00004","insertText":"bufwinid(${1:expr})${0}","insertTextFormat":2},{"label":"bufwinnr","kind":3,"detail":"Number","sortText":"00004","insertText":"bufwinnr(${1:expr})${0}","insertTextFormat":2},{"label":"byte2line","kind":3,"detail":"Number","sortText":"00004","insertText":"byte2line(${1:byte})${0}","insertTextFormat":2},{"label":"byteidx","kind":3,"detail":"Number","sortText":"00004","insertText":"byteidx(${1:expr}, ${2:nr})${0}","insertTextFormat":2},{"label":"byteidxcomp","kind":3,"detail":"Number","sortText":"00004","insertText":"byteidxcomp(${1:expr}, ${2:nr})${0}","insertTextFormat":2},{"label":"call","kind":3,"detail":"any","sortText":"00004","insertText":"call(${1:func}, ${2:arglist})${0}","insertTextFormat":2},{"label":"ceil","kind":3,"detail":"Float","sortText":"00004","insertText":"ceil(${1:expr})${0}","insertTextFormat":2},{"label":"changenr","kind":3,"detail":"Number","sortText":"00004","insertText":"changenr(${0})","insertTextFormat":2},{"label":"chanclose","kind":3,"detail":"Number","sortText":"00004","insertText":"chanclose(${1:id})${0}","insertTextFormat":2},{"label":"chansend","kind":3,"detail":"Number","sortText":"00004","insertText":"chansend(${1:id}, ${2:data})${0}","insertTextFormat":2},{"label":"char2nr","kind":3,"detail":"Number","sortText":"00004","insertText":"char2nr(${1:expr})${0}","insertTextFormat":2},{"label":"cindent","kind":3,"detail":"Number","sortText":"00004","insertText":"cindent(${1:lnum})${0}","insertTextFormat":2},{"label":"clearmatches","kind":3,"detail":"none","sortText":"00004","insertText":"clearmatches(${0})","insertTextFormat":2},{"label":"col","kind":3,"detail":"Number","sortText":"00004","insertText":"col(${1:expr})${0}","insertTextFormat":2},{"label":"complete","kind":3,"detail":"none","sortText":"00004","insertText":"complete(${1:startcol}, ${2:matches})${0}","insertTextFormat":2},{"label":"complete_add","kind":3,"detail":"Number","sortText":"00004","insertText":"complete_add(${1:expr})${0}","insertTextFormat":2},{"label":"complete_check","kind":3,"detail":"Number","sortText":"00004","insertText":"complete_check(${0})","insertTextFormat":2},{"label":"complete_info","kind":3,"detail":"Dict","sortText":"00004","insertText":"complete_info(${1})${0}","insertTextFormat":2},{"label":"confirm","kind":3,"detail":"Number","sortText":"00004","insertText":"confirm(${1:msg})${0}","insertTextFormat":2},{"label":"copy","kind":3,"detail":"any","sortText":"00004","insertText":"copy(${1:expr})${0}","insertTextFormat":2},{"label":"cos","kind":3,"detail":"Float","sortText":"00004","insertText":"cos(${1:expr})${0}","insertTextFormat":2},{"label":"cosh","kind":3,"detail":"Float","sortText":"00004","insertText":"cosh(${1:expr})${0}","insertTextFormat":2},{"label":"count","kind":3,"detail":"Number","sortText":"00004","insertText":"count(${1:list}, ${2:expr})${0}","insertTextFormat":2},{"label":"cscope_connection","kind":3,"detail":"Number","sortText":"00004","insertText":"cscope_connection(${1})${0}","insertTextFormat":2},{"label":"ctxget","kind":3,"detail":"Dict","sortText":"00004","insertText":"ctxget(${1})${0}","insertTextFormat":2},{"label":"ctxpop","kind":3,"detail":"none","sortText":"00004","insertText":"ctxpop(${0})","insertTextFormat":2},{"label":"ctxpush","kind":3,"detail":"none","sortText":"00004","insertText":"ctxpush(${1})${0}","insertTextFormat":2},{"label":"ctxset","kind":3,"detail":"none","sortText":"00004","insertText":"ctxset(${1:context})${0}","insertTextFormat":2},{"label":"ctxsize","kind":3,"detail":"Number","sortText":"00004","insertText":"ctxsize(${0})","insertTextFormat":2},{"label":"cursor","kind":3,"detail":"Number","sortText":"00004","insertText":"cursor(${1:lnum}, ${2:col})${0}","insertTextFormat":2},{"label":"cursor","kind":3,"detail":"Number","sortText":"00004","insertText":"cursor(${1:list})${0}","insertTextFormat":2},{"label":"debugbreak","kind":3,"detail":"Number","sortText":"00004","insertText":"debugbreak(${1:pid})${0}","insertTextFormat":2},{"label":"deepcopy","kind":3,"detail":"any","sortText":"00004","insertText":"deepcopy(${1:expr})${0}","insertTextFormat":2},{"label":"delete","kind":3,"detail":"Number","sortText":"00004","insertText":"delete(${1:fname})${0}","insertTextFormat":2},{"label":"deletebufline","kind":3,"detail":"Number","sortText":"00004","insertText":"deletebufline(${1:expr}, ${2:first})${0}","insertTextFormat":2},{"label":"dictwatcheradd","kind":3,"detail":"Start","sortText":"00004","insertText":"dictwatcheradd(${1:dict}, ${2:pattern}, ${3:callback})${0}","insertTextFormat":2},{"label":"dictwatcherdel","kind":3,"detail":"Stop","sortText":"00004","insertText":"dictwatcherdel(${1:dict}, ${2:pattern}, ${3:callback})${0}","insertTextFormat":2},{"label":"did_filetype","kind":3,"detail":"Number","sortText":"00004","insertText":"did_filetype(${0})","insertTextFormat":2},{"label":"diff_filler","kind":3,"detail":"Number","sortText":"00004","insertText":"diff_filler(${1:lnum})${0}","insertTextFormat":2},{"label":"diff_hlID","kind":3,"detail":"Number","sortText":"00004","insertText":"diff_hlID(${1:lnum}, ${2:col})${0}","insertTextFormat":2},{"label":"empty","kind":3,"detail":"Number","sortText":"00004","insertText":"empty(${1:expr})${0}","insertTextFormat":2},{"label":"environ","kind":3,"detail":"Dict","sortText":"00004","insertText":"environ(${0})","insertTextFormat":2},{"label":"escape","kind":3,"detail":"String","sortText":"00004","insertText":"escape(${1:string}, ${2:chars})${0}","insertTextFormat":2},{"label":"eval","kind":3,"detail":"any","sortText":"00004","insertText":"eval(${1:string})${0}","insertTextFormat":2},{"label":"eventhandler","kind":3,"detail":"Number","sortText":"00004","insertText":"eventhandler(${0})","insertTextFormat":2},{"label":"executable","kind":3,"detail":"Number","sortText":"00004","insertText":"executable(${1:expr})${0}","insertTextFormat":2},{"label":"execute","kind":3,"detail":"String","sortText":"00004","insertText":"execute(${1:command})${0}","insertTextFormat":2},{"label":"exepath","kind":3,"detail":"String","sortText":"00004","insertText":"exepath(${1:expr})${0}","insertTextFormat":2},{"label":"exists","kind":3,"detail":"Number","sortText":"00004","insertText":"exists(${1:expr})${0}","insertTextFormat":2},{"label":"extend","kind":3,"detail":"List/Dict","sortText":"00004","insertText":"extend(${1:expr1}, ${2:expr2})${0}","insertTextFormat":2},{"label":"exp","kind":3,"detail":"Float","sortText":"00004","insertText":"exp(${1:expr})${0}","insertTextFormat":2},{"label":"expand","kind":3,"detail":"any","sortText":"00004","insertText":"expand(${1:expr})${0}","insertTextFormat":2},{"label":"expandcmd","kind":3,"detail":"String","sortText":"00004","insertText":"expandcmd(${1:expr})${0}","insertTextFormat":2},{"label":"feedkeys","kind":3,"detail":"Number","sortText":"00004","insertText":"feedkeys(${1:string})${0}","insertTextFormat":2},{"label":"filereadable","kind":3,"detail":"Number","sortText":"00004","insertText":"filereadable(${1:file})${0}","insertTextFormat":2},{"label":"filewritable","kind":3,"detail":"Number","sortText":"00004","insertText":"filewritable(${1:file})${0}","insertTextFormat":2},{"label":"filter","kind":3,"detail":"List/Dict","sortText":"00004","insertText":"filter(${1:expr1}, ${2:expr2})${0}","insertTextFormat":2},{"label":"finddir","kind":3,"detail":"String","sortText":"00004","insertText":"finddir(${1:name})${0}","insertTextFormat":2},{"label":"findfile","kind":3,"detail":"String","sortText":"00004","insertText":"findfile(${1:name})${0}","insertTextFormat":2},{"label":"float2nr","kind":3,"detail":"Number","sortText":"00004","insertText":"float2nr(${1:expr})${0}","insertTextFormat":2},{"label":"floor","kind":3,"detail":"Float","sortText":"00004","insertText":"floor(${1:expr})${0}","insertTextFormat":2},{"label":"fmod","kind":3,"detail":"Float","sortText":"00004","insertText":"fmod(${1:expr1}, ${2:expr2})${0}","insertTextFormat":2},{"label":"fnameescape","kind":3,"detail":"String","sortText":"00004","insertText":"fnameescape(${1:fname})${0}","insertTextFormat":2},{"label":"fnamemodify","kind":3,"detail":"String","sortText":"00004","insertText":"fnamemodify(${1:fname}, ${2:mods})${0}","insertTextFormat":2},{"label":"foldclosed","kind":3,"detail":"Number","sortText":"00004","insertText":"foldclosed(${1:lnum})${0}","insertTextFormat":2},{"label":"foldclosedend","kind":3,"detail":"Number","sortText":"00004","insertText":"foldclosedend(${1:lnum})${0}","insertTextFormat":2},{"label":"foldlevel","kind":3,"detail":"Number","sortText":"00004","insertText":"foldlevel(${1:lnum})${0}","insertTextFormat":2},{"label":"foldtext","kind":3,"detail":"String","sortText":"00004","insertText":"foldtext(${0})","insertTextFormat":2},{"label":"foldtextresult","kind":3,"detail":"String","sortText":"00004","insertText":"foldtextresult(${1:lnum})${0}","insertTextFormat":2},{"label":"foreground","kind":3,"detail":"Number","sortText":"00004","insertText":"foreground(${0})","insertTextFormat":2},{"label":"funcref","kind":3,"detail":"Funcref","sortText":"00004","insertText":"funcref(${1:name})${0}","insertTextFormat":2},{"label":"function","kind":3,"detail":"Funcref","sortText":"00004","insertText":"function(${1:name})${0}","insertTextFormat":2},{"label":"garbagecollect","kind":3,"detail":"none","sortText":"00004","insertText":"garbagecollect(${1})${0}","insertTextFormat":2},{"label":"get","kind":3,"detail":"any","sortText":"00004","insertText":"get(${1:list}, ${2:idx})${0}","insertTextFormat":2},{"label":"get","kind":3,"detail":"any","sortText":"00004","insertText":"get(${1:dict}, ${2:key})${0}","insertTextFormat":2},{"label":"get","kind":3,"detail":"any","sortText":"00004","insertText":"get(${1:func}, ${2:what})${0}","insertTextFormat":2},{"label":"getbufinfo","kind":3,"detail":"List","sortText":"00004","insertText":"getbufinfo(${1})${0}","insertTextFormat":2},{"label":"getbufline","kind":3,"detail":"List","sortText":"00004","insertText":"getbufline(${1:expr}, ${2:lnum})${0}","insertTextFormat":2},{"label":"getbufvar","kind":3,"detail":"any","sortText":"00004","insertText":"getbufvar(${1:expr}, ${2:varname})${0}","insertTextFormat":2},{"label":"getchangelist","kind":3,"detail":"List","sortText":"00004","insertText":"getchangelist(${1:expr})${0}","insertTextFormat":2},{"label":"getchar","kind":3,"detail":"Number","sortText":"00004","insertText":"getchar(${1})${0}","insertTextFormat":2},{"label":"getcharmod","kind":3,"detail":"Number","sortText":"00004","insertText":"getcharmod(${0})","insertTextFormat":2},{"label":"getcharsearch","kind":3,"detail":"Dict","sortText":"00004","insertText":"getcharsearch(${0})","insertTextFormat":2},{"label":"getcmdline","kind":3,"detail":"String","sortText":"00004","insertText":"getcmdline(${0})","insertTextFormat":2},{"label":"getcmdpos","kind":3,"detail":"Number","sortText":"00004","insertText":"getcmdpos(${0})","insertTextFormat":2},{"label":"getcmdtype","kind":3,"detail":"String","sortText":"00004","insertText":"getcmdtype(${0})","insertTextFormat":2},{"label":"getcmdwintype","kind":3,"detail":"String","sortText":"00004","insertText":"getcmdwintype(${0})","insertTextFormat":2},{"label":"getcompletion","kind":3,"detail":"List","sortText":"00004","insertText":"getcompletion(${1:pat}, ${2:type})${0}","insertTextFormat":2},{"label":"getcurpos","kind":3,"detail":"List","sortText":"00004","insertText":"getcurpos(${0})","insertTextFormat":2},{"label":"getcwd","kind":3,"detail":"String","sortText":"00004","insertText":"getcwd(${1})${0}","insertTextFormat":2},{"label":"getenv","kind":3,"detail":"String","sortText":"00004","insertText":"getenv(${1:name})${0}","insertTextFormat":2},{"label":"getfontname","kind":3,"detail":"String","sortText":"00004","insertText":"getfontname(${1})${0}","insertTextFormat":2},{"label":"getfperm","kind":3,"detail":"String","sortText":"00004","insertText":"getfperm(${1:fname})${0}","insertTextFormat":2},{"label":"getfsize","kind":3,"detail":"Number","sortText":"00004","insertText":"getfsize(${1:fname})${0}","insertTextFormat":2},{"label":"getftime","kind":3,"detail":"Number","sortText":"00004","insertText":"getftime(${1:fname})${0}","insertTextFormat":2},{"label":"getftype","kind":3,"detail":"String","sortText":"00004","insertText":"getftype(${1:fname})${0}","insertTextFormat":2},{"label":"getjumplist","kind":3,"detail":"List","sortText":"00004","insertText":"getjumplist(${1})${0}","insertTextFormat":2},{"label":"getline","kind":3,"detail":"String","sortText":"00004","insertText":"getline(${1:lnum})${0}","insertTextFormat":2},{"label":"getline","kind":3,"detail":"List","sortText":"00004","insertText":"getline(${1:lnum}, ${2:end})${0}","insertTextFormat":2},{"label":"getloclist","kind":3,"detail":"List","sortText":"00004","insertText":"getloclist(${1:nr})${0}","insertTextFormat":2},{"label":"getmatches","kind":3,"detail":"List","sortText":"00004","insertText":"getmatches(${0})","insertTextFormat":2},{"label":"getpid","kind":3,"detail":"Number","sortText":"00004","insertText":"getpid(${0})","insertTextFormat":2},{"label":"getpos","kind":3,"detail":"List","sortText":"00004","insertText":"getpos(${1:expr})${0}","insertTextFormat":2},{"label":"getqflist","kind":3,"detail":"List","sortText":"00004","insertText":"getqflist(${1})${0}","insertTextFormat":2},{"label":"getreg","kind":3,"detail":"String","sortText":"00004","insertText":"getreg(${1})${0}","insertTextFormat":2},{"label":"getregtype","kind":3,"detail":"String","sortText":"00004","insertText":"getregtype(${1})${0}","insertTextFormat":2},{"label":"gettabinfo","kind":3,"detail":"List","sortText":"00004","insertText":"gettabinfo(${1})${0}","insertTextFormat":2},{"label":"gettabvar","kind":3,"detail":"any","sortText":"00004","insertText":"gettabvar(${1:nr}, ${2:varname})${0}","insertTextFormat":2},{"label":"gettabwinvar","kind":3,"detail":"any","sortText":"00004","insertText":"gettabwinvar(${1:tabnr}, ${2:winnr}, ${3:name})${0}","insertTextFormat":2},{"label":"gettagstack","kind":3,"detail":"Dict","sortText":"00004","insertText":"gettagstack(${1})${0}","insertTextFormat":2},{"label":"getwininfo","kind":3,"detail":"List","sortText":"00004","insertText":"getwininfo(${1})${0}","insertTextFormat":2},{"label":"getwinpos","kind":3,"detail":"List","sortText":"00004","insertText":"getwinpos(${1})${0}","insertTextFormat":2},{"label":"getwinposx","kind":3,"detail":"Number","sortText":"00004","insertText":"getwinposx(${0})","insertTextFormat":2},{"label":"getwinposy","kind":3,"detail":"Number","sortText":"00004","insertText":"getwinposy(${0})","insertTextFormat":2},{"label":"getwinvar","kind":3,"detail":"any","sortText":"00004","insertText":"getwinvar(${1:nr}, ${2:varname})${0}","insertTextFormat":2},{"label":"glob","kind":3,"detail":"any","sortText":"00004","insertText":"glob(${1:expr})${0}","insertTextFormat":2},{"label":"glob2regpat","kind":3,"detail":"String","sortText":"00004","insertText":"glob2regpat(${1:expr})${0}","insertTextFormat":2},{"label":"globpath","kind":3,"detail":"String","sortText":"00004","insertText":"globpath(${1:path}, ${2:expr})${0}","insertTextFormat":2},{"label":"has","kind":3,"detail":"Number","sortText":"00004","insertText":"has(${1:feature})${0}","insertTextFormat":2},{"label":"has_key","kind":3,"detail":"Number","sortText":"00004","insertText":"has_key(${1:dict}, ${2:key})${0}","insertTextFormat":2},{"label":"haslocaldir","kind":3,"detail":"Number","sortText":"00004","insertText":"haslocaldir(${1})${0}","insertTextFormat":2},{"label":"hasmapto","kind":3,"detail":"Number","sortText":"00004","insertText":"hasmapto(${1:what})${0}","insertTextFormat":2},{"label":"histadd","kind":3,"detail":"String","sortText":"00004","insertText":"histadd(${1:history}, ${2:item})${0}","insertTextFormat":2},{"label":"histdel","kind":3,"detail":"String","sortText":"00004","insertText":"histdel(${1:history})${0}","insertTextFormat":2},{"label":"histget","kind":3,"detail":"String","sortText":"00004","insertText":"histget(${1:history})${0}","insertTextFormat":2},{"label":"histnr","kind":3,"detail":"Number","sortText":"00004","insertText":"histnr(${1:history})${0}","insertTextFormat":2},{"label":"hlexists","kind":3,"detail":"Number","sortText":"00004","insertText":"hlexists(${1:name})${0}","insertTextFormat":2},{"label":"hlID","kind":3,"detail":"Number","sortText":"00004","insertText":"hlID(${1:name})${0}","insertTextFormat":2},{"label":"hostname","kind":3,"detail":"String","sortText":"00004","insertText":"hostname(${0})","insertTextFormat":2},{"label":"iconv","kind":3,"detail":"String","sortText":"00004","insertText":"iconv(${1:expr}, ${2:from}, ${3:to})${0}","insertTextFormat":2},{"label":"indent","kind":3,"detail":"Number","sortText":"00004","insertText":"indent(${1:lnum})${0}","insertTextFormat":2},{"label":"index","kind":3,"detail":"Number","sortText":"00004","insertText":"index(${1:list}, ${2:expr})${0}","insertTextFormat":2},{"label":"input","kind":3,"detail":"String","sortText":"00004","insertText":"input(${1:prompt})${0}","insertTextFormat":2},{"label":"inputlist","kind":3,"detail":"Number","sortText":"00004","insertText":"inputlist(${1:textlist})${0}","insertTextFormat":2},{"label":"inputrestore","kind":3,"detail":"Number","sortText":"00004","insertText":"inputrestore(${0})","insertTextFormat":2},{"label":"inputsave","kind":3,"detail":"Number","sortText":"00004","insertText":"inputsave(${0})","insertTextFormat":2},{"label":"inputsecret","kind":3,"detail":"String","sortText":"00004","insertText":"inputsecret(${1:prompt})${0}","insertTextFormat":2},{"label":"insert","kind":3,"detail":"List","sortText":"00004","insertText":"insert(${1:list}, ${2:item})${0}","insertTextFormat":2},{"label":"invert","kind":3,"detail":"Number","sortText":"00004","insertText":"invert(${1:expr})${0}","insertTextFormat":2},{"label":"isdirectory","kind":3,"detail":"Number","sortText":"00004","insertText":"isdirectory(${1:directory})${0}","insertTextFormat":2},{"label":"isinf","kind":3,"detail":"Number","sortText":"00004","insertText":"isinf(${1:expr})${0}","insertTextFormat":2},{"label":"islocked","kind":3,"detail":"Number","sortText":"00004","insertText":"islocked(${1:expr})${0}","insertTextFormat":2},{"label":"isnan","kind":3,"detail":"Number","sortText":"00004","insertText":"isnan(${1:expr})${0}","insertTextFormat":2},{"label":"id","kind":3,"detail":"String","sortText":"00004","insertText":"id(${1:expr})${0}","insertTextFormat":2},{"label":"items","kind":3,"detail":"List","sortText":"00004","insertText":"items(${1:dict})${0}","insertTextFormat":2},{"label":"jobpid","kind":3,"detail":"Number","sortText":"00004","insertText":"jobpid(${1:id})${0}","insertTextFormat":2},{"label":"jobresize","kind":3,"detail":"Number","sortText":"00004","insertText":"jobresize(${1:id}, ${2:width}, ${3:height})${0}","insertTextFormat":2},{"label":"jobstart","kind":3,"detail":"Number","sortText":"00004","insertText":"jobstart(${1:cmd})${0}","insertTextFormat":2},{"label":"jobstop","kind":3,"detail":"Number","sortText":"00004","insertText":"jobstop(${1:id})${0}","insertTextFormat":2},{"label":"jobwait","kind":3,"detail":"Number","sortText":"00004","insertText":"jobwait(${1:ids})${0}","insertTextFormat":2},{"label":"join","kind":3,"detail":"String","sortText":"00004","insertText":"join(${1:list})${0}","insertTextFormat":2},{"label":"json_decode","kind":3,"detail":"any","sortText":"00004","insertText":"json_decode(${1:expr})${0}","insertTextFormat":2},{"label":"json_encode","kind":3,"detail":"String","sortText":"00004","insertText":"json_encode(${1:expr})${0}","insertTextFormat":2},{"label":"keys","kind":3,"detail":"List","sortText":"00004","insertText":"keys(${1:dict})${0}","insertTextFormat":2},{"label":"len","kind":3,"detail":"Number","sortText":"00004","insertText":"len(${1:expr})${0}","insertTextFormat":2},{"label":"libcall","kind":3,"detail":"String","sortText":"00004","insertText":"libcall(${1:lib}, ${2:func}, ${3:arg})${0}","insertTextFormat":2},{"label":"libcallnr","kind":3,"detail":"Number","sortText":"00004","insertText":"libcallnr(${1:lib}, ${2:func}, ${3:arg})${0}","insertTextFormat":2},{"label":"line","kind":3,"detail":"Number","sortText":"00004","insertText":"line(${1:expr})${0}","insertTextFormat":2},{"label":"line2byte","kind":3,"detail":"Number","sortText":"00004","insertText":"line2byte(${1:lnum})${0}","insertTextFormat":2},{"label":"lispindent","kind":3,"detail":"Number","sortText":"00004","insertText":"lispindent(${1:lnum})${0}","insertTextFormat":2},{"label":"list2str","kind":3,"detail":"String","sortText":"00004","insertText":"list2str(${1:list})${0}","insertTextFormat":2},{"label":"localtime","kind":3,"detail":"Number","sortText":"00004","insertText":"localtime(${0})","insertTextFormat":2},{"label":"log","kind":3,"detail":"Float","sortText":"00004","insertText":"log(${1:expr})${0}","insertTextFormat":2},{"label":"log10","kind":3,"detail":"Float","sortText":"00004","insertText":"log10(${1:expr})${0}","insertTextFormat":2},{"label":"luaeval","kind":3,"detail":"any","sortText":"00004","insertText":"luaeval(${1:expr})${0}","insertTextFormat":2},{"label":"map","kind":3,"detail":"List/Dict","sortText":"00004","insertText":"map(${1:expr1}, ${2:expr2})${0}","insertTextFormat":2},{"label":"maparg","kind":3,"detail":"String","sortText":"00004","insertText":"maparg(${1:name})${0}","insertTextFormat":2},{"label":"mapcheck","kind":3,"detail":"String","sortText":"00004","insertText":"mapcheck(${1:name})${0}","insertTextFormat":2},{"label":"match","kind":3,"detail":"Number","sortText":"00004","insertText":"match(${1:expr}, ${2:pat})${0}","insertTextFormat":2},{"label":"matchadd","kind":3,"detail":"Number","sortText":"00004","insertText":"matchadd(${1:group}, ${2:pattern})${0}","insertTextFormat":2},{"label":"matchaddpos","kind":3,"detail":"Number","sortText":"00004","insertText":"matchaddpos(${1:group}, ${2:list})${0}","insertTextFormat":2},{"label":"matcharg","kind":3,"detail":"List","sortText":"00004","insertText":"matcharg(${1:nr})${0}","insertTextFormat":2},{"label":"matchdelete","kind":3,"detail":"Number","sortText":"00004","insertText":"matchdelete(${1:id})${0}","insertTextFormat":2},{"label":"matchend","kind":3,"detail":"Number","sortText":"00004","insertText":"matchend(${1:expr}, ${2:pat})${0}","insertTextFormat":2},{"label":"matchlist","kind":3,"detail":"List","sortText":"00004","insertText":"matchlist(${1:expr}, ${2:pat})${0}","insertTextFormat":2},{"label":"matchstr","kind":3,"detail":"String","sortText":"00004","insertText":"matchstr(${1:expr}, ${2:pat})${0}","insertTextFormat":2},{"label":"matchstrpos","kind":3,"detail":"List","sortText":"00004","insertText":"matchstrpos(${1:expr}, ${2:pat})${0}","insertTextFormat":2},{"label":"max","kind":3,"detail":"Number","sortText":"00004","insertText":"max(${1:expr})${0}","insertTextFormat":2},{"label":"min","kind":3,"detail":"Number","sortText":"00004","insertText":"min(${1:expr})${0}","insertTextFormat":2},{"label":"mkdir","kind":3,"detail":"Number","sortText":"00004","insertText":"mkdir(${1:name})${0}","insertTextFormat":2},{"label":"mode","kind":3,"detail":"String","sortText":"00004","insertText":"mode(${1})${0}","insertTextFormat":2},{"label":"msgpackdump","kind":3,"detail":"List","sortText":"00004","insertText":"msgpackdump(${1:list})${0}","insertTextFormat":2},{"label":"msgpackparse","kind":3,"detail":"List","sortText":"00004","insertText":"msgpackparse(${1:list})${0}","insertTextFormat":2},{"label":"nextnonblank","kind":3,"detail":"Number","sortText":"00004","insertText":"nextnonblank(${1:lnum})${0}","insertTextFormat":2},{"label":"nr2char","kind":3,"detail":"String","sortText":"00004","insertText":"nr2char(${1:expr})${0}","insertTextFormat":2},{"label":"or","kind":3,"detail":"Number","sortText":"00004","insertText":"or(${1:expr}, ${2:expr})${0}","insertTextFormat":2},{"label":"pathshorten","kind":3,"detail":"String","sortText":"00004","insertText":"pathshorten(${1:expr})${0}","insertTextFormat":2},{"label":"pow","kind":3,"detail":"Float","sortText":"00004","insertText":"pow(${1:x}, ${2:y})${0}","insertTextFormat":2},{"label":"prevnonblank","kind":3,"detail":"Number","sortText":"00004","insertText":"prevnonblank(${1:lnum})${0}","insertTextFormat":2},{"label":"printf","kind":3,"detail":"String","sortText":"00004","insertText":"printf(${1:fmt}, ${2:expr1}...)${0}","insertTextFormat":2},{"label":"prompt_addtext","kind":3,"detail":"none","sortText":"00004","insertText":"prompt_addtext(${1:buf}, ${2:expr})${0}","insertTextFormat":2},{"label":"prompt_setcallback","kind":3,"detail":"none","sortText":"00004","insertText":"prompt_setcallback(${1:buf}, ${2:expr})${0}","insertTextFormat":2},{"label":"prompt_setinterrupt","kind":3,"detail":"none","sortText":"00004","insertText":"prompt_setinterrupt(${1:buf}, ${2:text})${0}","insertTextFormat":2},{"label":"prompt_setprompt","kind":3,"detail":"none","sortText":"00004","insertText":"prompt_setprompt(${1:buf}, ${2:text})${0}","insertTextFormat":2},{"label":"pum_getpos","kind":3,"detail":"Dict","sortText":"00004","insertText":"pum_getpos(${0})","insertTextFormat":2},{"label":"pumvisible","kind":3,"detail":"Number","sortText":"00004","insertText":"pumvisible(${0})","insertTextFormat":2},{"label":"pyeval","kind":3,"detail":"any","sortText":"00004","insertText":"pyeval(${1:expr})${0}","insertTextFormat":2},{"label":"py3eval","kind":3,"detail":"any","sortText":"00004","insertText":"py3eval(${1:expr})${0}","insertTextFormat":2},{"label":"pyxeval","kind":3,"detail":"any","sortText":"00004","insertText":"pyxeval(${1:expr})${0}","insertTextFormat":2},{"label":"range","kind":3,"detail":"List","sortText":"00004","insertText":"range(${1:expr})${0}","insertTextFormat":2},{"label":"readdir","kind":3,"detail":"List","sortText":"00004","insertText":"readdir(${1:dir})${0}","insertTextFormat":2},{"label":"readfile","kind":3,"detail":"List","sortText":"00004","insertText":"readfile(${1:fname})${0}","insertTextFormat":2},{"label":"reg_executing","kind":3,"detail":"String","sortText":"00004","insertText":"reg_executing(${0})","insertTextFormat":2},{"label":"reg_recording","kind":3,"detail":"String","sortText":"00004","insertText":"reg_recording(${0})","insertTextFormat":2},{"label":"reltime","kind":3,"detail":"List","sortText":"00004","insertText":"reltime(${1})${0}","insertTextFormat":2},{"label":"reltimefloat","kind":3,"detail":"Float","sortText":"00004","insertText":"reltimefloat(${1:time})${0}","insertTextFormat":2},{"label":"reltimestr","kind":3,"detail":"String","sortText":"00004","insertText":"reltimestr(${1:time})${0}","insertTextFormat":2},{"label":"remote_expr","kind":3,"detail":"String","sortText":"00004","insertText":"remote_expr(${1:server}, ${2:string})${0}","insertTextFormat":2},{"label":"remote_foreground","kind":3,"detail":"Number","sortText":"00004","insertText":"remote_foreground(${1:server})${0}","insertTextFormat":2},{"label":"remote_peek","kind":3,"detail":"Number","sortText":"00004","insertText":"remote_peek(${1:serverid})${0}","insertTextFormat":2},{"label":"remote_read","kind":3,"detail":"String","sortText":"00004","insertText":"remote_read(${1:serverid})${0}","insertTextFormat":2},{"label":"remote_send","kind":3,"detail":"String","sortText":"00004","insertText":"remote_send(${1:server}, ${2:string})${0}","insertTextFormat":2},{"label":"remote_startserver","kind":3,"detail":"none","sortText":"00004","insertText":"remote_startserver(${1:name})${0}","insertTextFormat":2},{"label":"remove","kind":3,"detail":"any","sortText":"00004","insertText":"remove(${1:list}, ${2:idx})${0}","insertTextFormat":2},{"label":"remove","kind":3,"detail":"any","sortText":"00004","insertText":"remove(${1:dict}, ${2:key})${0}","insertTextFormat":2},{"label":"rename","kind":3,"detail":"Number","sortText":"00004","insertText":"rename(${1:from}, ${2:to})${0}","insertTextFormat":2},{"label":"repeat","kind":3,"detail":"String","sortText":"00004","insertText":"repeat(${1:expr}, ${2:count})${0}","insertTextFormat":2},{"label":"resolve","kind":3,"detail":"String","sortText":"00004","insertText":"resolve(${1:filename})${0}","insertTextFormat":2},{"label":"reverse","kind":3,"detail":"List","sortText":"00004","insertText":"reverse(${1:list})${0}","insertTextFormat":2},{"label":"round","kind":3,"detail":"Float","sortText":"00004","insertText":"round(${1:expr})${0}","insertTextFormat":2},{"label":"rpcnotify","kind":3,"detail":"Sends","sortText":"00004","insertText":"rpcnotify(${1:channel}, ${2:event})${0}","insertTextFormat":2},{"label":"rpcrequest","kind":3,"detail":"Sends","sortText":"00004","insertText":"rpcrequest(${1:channel}, ${2:method})${0}","insertTextFormat":2},{"label":"screenattr","kind":3,"detail":"Number","sortText":"00004","insertText":"screenattr(${1:row}, ${2:col})${0}","insertTextFormat":2},{"label":"screenchar","kind":3,"detail":"Number","sortText":"00004","insertText":"screenchar(${1:row}, ${2:col})${0}","insertTextFormat":2},{"label":"screencol","kind":3,"detail":"Number","sortText":"00004","insertText":"screencol(${0})","insertTextFormat":2},{"label":"screenpos","kind":3,"detail":"Dict","sortText":"00004","insertText":"screenpos(${1:winid}, ${2:lnum}, ${3:col})${0}","insertTextFormat":2},{"label":"screenrow","kind":3,"detail":"Number","sortText":"00004","insertText":"screenrow(${0})","insertTextFormat":2},{"label":"search","kind":3,"detail":"Number","sortText":"00004","insertText":"search(${1:pattern})${0}","insertTextFormat":2},{"label":"searchdecl","kind":3,"detail":"Number","sortText":"00004","insertText":"searchdecl(${1:name})${0}","insertTextFormat":2},{"label":"searchpair","kind":3,"detail":"Number","sortText":"00004","insertText":"searchpair(${1:start}, ${2:middle}, ${3:end})${0}","insertTextFormat":2},{"label":"searchpairpos","kind":3,"detail":"List","sortText":"00004","insertText":"searchpairpos(${1:start}, ${2:middle}, ${3:end})${0}","insertTextFormat":2},{"label":"searchpos","kind":3,"detail":"List","sortText":"00004","insertText":"searchpos(${1:pattern})${0}","insertTextFormat":2},{"label":"server2client","kind":3,"detail":"Number","sortText":"00004","insertText":"server2client(${1:clientid}, ${2:string})${0}","insertTextFormat":2},{"label":"serverlist","kind":3,"detail":"String","sortText":"00004","insertText":"serverlist(${0})","insertTextFormat":2},{"label":"setbufline","kind":3,"detail":"Number","sortText":"00004","insertText":"setbufline(${1:expr}, ${2:lnum}, ${3:line})${0}","insertTextFormat":2},{"label":"setbufvar","kind":3,"detail":"set","sortText":"00004","insertText":"setbufvar(${1:expr}, ${2:varname}, ${3:val})${0}","insertTextFormat":2},{"label":"setcharsearch","kind":3,"detail":"Dict","sortText":"00004","insertText":"setcharsearch(${1:dict})${0}","insertTextFormat":2},{"label":"setcmdpos","kind":3,"detail":"Number","sortText":"00004","insertText":"setcmdpos(${1:pos})${0}","insertTextFormat":2},{"label":"setenv","kind":3,"detail":"none","sortText":"00004","insertText":"setenv(${1:name}, ${2:val})${0}","insertTextFormat":2},{"label":"setline","kind":3,"detail":"Number","sortText":"00004","insertText":"setline(${1:lnum}, ${2:line})${0}","insertTextFormat":2},{"label":"setloclist","kind":3,"detail":"Number","sortText":"00004","insertText":"setloclist(${1:nr}, ${2:list})${0}","insertTextFormat":2},{"label":"setmatches","kind":3,"detail":"Number","sortText":"00004","insertText":"setmatches(${1:list})${0}","insertTextFormat":2},{"label":"setpos","kind":3,"detail":"Number","sortText":"00004","insertText":"setpos(${1:expr}, ${2:list})${0}","insertTextFormat":2},{"label":"setreg","kind":3,"detail":"Number","sortText":"00004","insertText":"setreg(${1:n}, ${2:v})${0}","insertTextFormat":2},{"label":"settabvar","kind":3,"detail":"set","sortText":"00004","insertText":"settabvar(${1:nr}, ${2:varname}, ${3:val})${0}","insertTextFormat":2},{"label":"settabwinvar","kind":3,"detail":"set","sortText":"00004","insertText":"settabwinvar(${1:tabnr}, ${2:winnr}, ${3:varname}, ${4:val})${0}","insertTextFormat":2},{"label":"settagstack","kind":3,"detail":"Number","sortText":"00004","insertText":"settagstack(${1:nr}, ${2:dict})${0}","insertTextFormat":2},{"label":"setwinvar","kind":3,"detail":"set","sortText":"00004","insertText":"setwinvar(${1:nr}, ${2:varname}, ${3:val})${0}","insertTextFormat":2},{"label":"sha256","kind":3,"detail":"String","sortText":"00004","insertText":"sha256(${1:string})${0}","insertTextFormat":2},{"label":"shellescape","kind":3,"detail":"String","sortText":"00004","insertText":"shellescape(${1:string})${0}","insertTextFormat":2},{"label":"shiftwidth","kind":3,"detail":"Number","sortText":"00004","insertText":"shiftwidth(${0})","insertTextFormat":2},{"label":"sign_define","kind":3,"detail":"Number","sortText":"00004","insertText":"sign_define(${1:name})${0}","insertTextFormat":2},{"label":"sign_getdefined","kind":3,"detail":"List","sortText":"00004","insertText":"sign_getdefined(${1})${0}","insertTextFormat":2},{"label":"sign_getplaced","kind":3,"detail":"List","sortText":"00004","insertText":"sign_getplaced(${1})${0}","insertTextFormat":2},{"label":"sign_jump","kind":3,"detail":"Number","sortText":"00004","insertText":"sign_jump(${1:id}, ${2:group}, ${3:expr})${0}","insertTextFormat":2},{"label":"sign_place","kind":3,"detail":"Number","sortText":"00004","insertText":"sign_place(${1:id}, ${2:group}, ${3:name}, ${4:expr})${0}","insertTextFormat":2},{"label":"sign_undefine","kind":3,"detail":"Number","sortText":"00004","insertText":"sign_undefine(${1})${0}","insertTextFormat":2},{"label":"sign_unplace","kind":3,"detail":"Number","sortText":"00004","insertText":"sign_unplace(${1:group})${0}","insertTextFormat":2},{"label":"simplify","kind":3,"detail":"String","sortText":"00004","insertText":"simplify(${1:filename})${0}","insertTextFormat":2},{"label":"sin","kind":3,"detail":"Float","sortText":"00004","insertText":"sin(${1:expr})${0}","insertTextFormat":2},{"label":"sinh","kind":3,"detail":"Float","sortText":"00004","insertText":"sinh(${1:expr})${0}","insertTextFormat":2},{"label":"sockconnect","kind":3,"detail":"Number","sortText":"00004","insertText":"sockconnect(${1:mode}, ${2:address})${0}","insertTextFormat":2},{"label":"sort","kind":3,"detail":"List","sortText":"00004","insertText":"sort(${1:list})${0}","insertTextFormat":2},{"label":"soundfold","kind":3,"detail":"String","sortText":"00004","insertText":"soundfold(${1:word})${0}","insertTextFormat":2},{"label":"spellbadword","kind":3,"detail":"String","sortText":"00004","insertText":"spellbadword(${0})","insertTextFormat":2},{"label":"spellsuggest","kind":3,"detail":"List","sortText":"00004","insertText":"spellsuggest(${1:word})${0}","insertTextFormat":2},{"label":"split","kind":3,"detail":"List","sortText":"00004","insertText":"split(${1:expr})${0}","insertTextFormat":2},{"label":"sqrt","kind":3,"detail":"Float","sortText":"00004","insertText":"sqrt(${1:expr})${0}","insertTextFormat":2},{"label":"stdioopen","kind":3,"detail":"Number","sortText":"00004","insertText":"stdioopen(${1:dict})${0}","insertTextFormat":2},{"label":"stdpath","kind":3,"detail":"String/List","sortText":"00004","insertText":"stdpath(${1:what})${0}","insertTextFormat":2},{"label":"str2float","kind":3,"detail":"Float","sortText":"00004","insertText":"str2float(${1:expr})${0}","insertTextFormat":2},{"label":"str2list","kind":3,"detail":"List","sortText":"00004","insertText":"str2list(${1:expr})${0}","insertTextFormat":2},{"label":"str2nr","kind":3,"detail":"Number","sortText":"00004","insertText":"str2nr(${1:expr})${0}","insertTextFormat":2},{"label":"strchars","kind":3,"detail":"Number","sortText":"00004","insertText":"strchars(${1:expr})${0}","insertTextFormat":2},{"label":"strcharpart","kind":3,"detail":"String","sortText":"00004","insertText":"strcharpart(${1:str}, ${2:start})${0}","insertTextFormat":2},{"label":"strdisplaywidth","kind":3,"detail":"Number","sortText":"00004","insertText":"strdisplaywidth(${1:expr})${0}","insertTextFormat":2},{"label":"strftime","kind":3,"detail":"String","sortText":"00004","insertText":"strftime(${1:format})${0}","insertTextFormat":2},{"label":"strgetchar","kind":3,"detail":"Number","sortText":"00004","insertText":"strgetchar(${1:str}, ${2:index})${0}","insertTextFormat":2},{"label":"stridx","kind":3,"detail":"Number","sortText":"00004","insertText":"stridx(${1:haystack}, ${2:needle})${0}","insertTextFormat":2},{"label":"string","kind":3,"detail":"String","sortText":"00004","insertText":"string(${1:expr})${0}","insertTextFormat":2},{"label":"strlen","kind":3,"detail":"Number","sortText":"00004","insertText":"strlen(${1:expr})${0}","insertTextFormat":2},{"label":"strpart","kind":3,"detail":"String","sortText":"00004","insertText":"strpart(${1:str}, ${2:start})${0}","insertTextFormat":2},{"label":"strridx","kind":3,"detail":"Number","sortText":"00004","insertText":"strridx(${1:haystack}, ${2:needle})${0}","insertTextFormat":2},{"label":"strtrans","kind":3,"detail":"String","sortText":"00004","insertText":"strtrans(${1:expr})${0}","insertTextFormat":2},{"label":"strwidth","kind":3,"detail":"Number","sortText":"00004","insertText":"strwidth(${1:expr})${0}","insertTextFormat":2},{"label":"submatch","kind":3,"detail":"String","sortText":"00004","insertText":"submatch(${1:nr})${0}","insertTextFormat":2},{"label":"substitute","kind":3,"detail":"String","sortText":"00004","insertText":"substitute(${1:expr}, ${2:pat}, ${3:sub}, ${4:flags})${0}","insertTextFormat":2},{"label":"swapinfo","kind":3,"detail":"Dict","sortText":"00004","insertText":"swapinfo(${1:fname})${0}","insertTextFormat":2},{"label":"swapname","kind":3,"detail":"String","sortText":"00004","insertText":"swapname(${1:expr})${0}","insertTextFormat":2},{"label":"synID","kind":3,"detail":"Number","sortText":"00004","insertText":"synID(${1:lnum}, ${2:col}, ${3:trans})${0}","insertTextFormat":2},{"label":"synIDattr","kind":3,"detail":"String","sortText":"00004","insertText":"synIDattr(${1:synID}, ${2:what})${0}","insertTextFormat":2},{"label":"synIDtrans","kind":3,"detail":"Number","sortText":"00004","insertText":"synIDtrans(${1:synID})${0}","insertTextFormat":2},{"label":"synconcealed","kind":3,"detail":"List","sortText":"00004","insertText":"synconcealed(${1:lnum}, ${2:col})${0}","insertTextFormat":2},{"label":"synstack","kind":3,"detail":"List","sortText":"00004","insertText":"synstack(${1:lnum}, ${2:col})${0}","insertTextFormat":2},{"label":"system","kind":3,"detail":"String","sortText":"00004","insertText":"system(${1:cmd})${0}","insertTextFormat":2},{"label":"systemlist","kind":3,"detail":"List","sortText":"00004","insertText":"systemlist(${1:cmd})${0}","insertTextFormat":2},{"label":"tabpagebuflist","kind":3,"detail":"List","sortText":"00004","insertText":"tabpagebuflist(${1})${0}","insertTextFormat":2},{"label":"tabpagenr","kind":3,"detail":"Number","sortText":"00004","insertText":"tabpagenr(${1})${0}","insertTextFormat":2},{"label":"tabpagewinnr","kind":3,"detail":"Number","sortText":"00004","insertText":"tabpagewinnr(${1:tabarg})${0}","insertTextFormat":2},{"label":"taglist","kind":3,"detail":"List","sortText":"00004","insertText":"taglist(${1:expr})${0}","insertTextFormat":2},{"label":"tagfiles","kind":3,"detail":"List","sortText":"00004","insertText":"tagfiles(${0})","insertTextFormat":2},{"label":"tan","kind":3,"detail":"Float","sortText":"00004","insertText":"tan(${1:expr})${0}","insertTextFormat":2},{"label":"tanh","kind":3,"detail":"Float","sortText":"00004","insertText":"tanh(${1:expr})${0}","insertTextFormat":2},{"label":"tempname","kind":3,"detail":"String","sortText":"00004","insertText":"tempname(${0})","insertTextFormat":2},{"label":"test_garbagecollect_now","kind":3,"detail":"none","sortText":"00004","insertText":"test_garbagecollect_now(${0})","insertTextFormat":2},{"label":"timer_info","kind":3,"detail":"List","sortText":"00004","insertText":"timer_info(${1})${0}","insertTextFormat":2},{"label":"timer_pause","kind":3,"detail":"none","sortText":"00004","insertText":"timer_pause(${1:id}, ${2:pause})${0}","insertTextFormat":2},{"label":"timer_start","kind":3,"detail":"Number","sortText":"00004","insertText":"timer_start(${1:time}, ${2:callback})${0}","insertTextFormat":2},{"label":"timer_stop","kind":3,"detail":"none","sortText":"00004","insertText":"timer_stop(${1:timer})${0}","insertTextFormat":2},{"label":"timer_stopall","kind":3,"detail":"none","sortText":"00004","insertText":"timer_stopall(${0})","insertTextFormat":2},{"label":"tolower","kind":3,"detail":"String","sortText":"00004","insertText":"tolower(${1:expr})${0}","insertTextFormat":2},{"label":"toupper","kind":3,"detail":"String","sortText":"00004","insertText":"toupper(${1:expr})${0}","insertTextFormat":2},{"label":"tr","kind":3,"detail":"String","sortText":"00004","insertText":"tr(${1:src}, ${2:fromstr}, ${3:tostr})${0}","insertTextFormat":2},{"label":"trim","kind":3,"detail":"String","sortText":"00004","insertText":"trim(${1:text})${0}","insertTextFormat":2},{"label":"trunc","kind":3,"detail":"Float","sortText":"00004","insertText":"trunc(${1:expr})${0}","insertTextFormat":2},{"label":"type","kind":3,"detail":"Number","sortText":"00004","insertText":"type(${1:name})${0}","insertTextFormat":2},{"label":"undofile","kind":3,"detail":"String","sortText":"00004","insertText":"undofile(${1:name})${0}","insertTextFormat":2},{"label":"undotree","kind":3,"detail":"List","sortText":"00004","insertText":"undotree(${0})","insertTextFormat":2},{"label":"uniq","kind":3,"detail":"List","sortText":"00004","insertText":"uniq(${1:list})${0}","insertTextFormat":2},{"label":"values","kind":3,"detail":"List","sortText":"00004","insertText":"values(${1:dict})${0}","insertTextFormat":2},{"label":"virtcol","kind":3,"detail":"Number","sortText":"00004","insertText":"virtcol(${1:expr})${0}","insertTextFormat":2},{"label":"visualmode","kind":3,"detail":"String","sortText":"00004","insertText":"visualmode(${1})${0}","insertTextFormat":2},{"label":"wait","kind":3,"detail":"Number","sortText":"00004","insertText":"wait(${1:timeout}, ${2:condition})${0}","insertTextFormat":2},{"label":"wildmenumode","kind":3,"detail":"Number","sortText":"00004","insertText":"wildmenumode(${0})","insertTextFormat":2},{"label":"win_findbuf","kind":3,"detail":"List","sortText":"00004","insertText":"win_findbuf(${1:bufnr})${0}","insertTextFormat":2},{"label":"win_getid","kind":3,"detail":"Number","sortText":"00004","insertText":"win_getid(${1})${0}","insertTextFormat":2},{"label":"win_gotoid","kind":3,"detail":"Number","sortText":"00004","insertText":"win_gotoid(${1:expr})${0}","insertTextFormat":2},{"label":"win_id2tabwin","kind":3,"detail":"List","sortText":"00004","insertText":"win_id2tabwin(${1:expr})${0}","insertTextFormat":2},{"label":"win_id2win","kind":3,"detail":"Number","sortText":"00004","insertText":"win_id2win(${1:expr})${0}","insertTextFormat":2},{"label":"win_screenpos","kind":3,"detail":"List","sortText":"00004","insertText":"win_screenpos(${1:nr})${0}","insertTextFormat":2},{"label":"winbufnr","kind":3,"detail":"Number","sortText":"00004","insertText":"winbufnr(${1:nr})${0}","insertTextFormat":2},{"label":"wincol","kind":3,"detail":"Number","sortText":"00004","insertText":"wincol(${0})","insertTextFormat":2},{"label":"winheight","kind":3,"detail":"Number","sortText":"00004","insertText":"winheight(${1:nr})${0}","insertTextFormat":2},{"label":"winlayout","kind":3,"detail":"List","sortText":"00004","insertText":"winlayout(${1})${0}","insertTextFormat":2},{"label":"winline","kind":3,"detail":"Number","sortText":"00004","insertText":"winline(${0})","insertTextFormat":2},{"label":"winnr","kind":3,"detail":"Number","sortText":"00004","insertText":"winnr(${1})${0}","insertTextFormat":2},{"label":"winrestcmd","kind":3,"detail":"String","sortText":"00004","insertText":"winrestcmd(${0})","insertTextFormat":2},{"label":"winrestview","kind":3,"detail":"none","sortText":"00004","insertText":"winrestview(${1:dict})${0}","insertTextFormat":2},{"label":"winsaveview","kind":3,"detail":"Dict","sortText":"00004","insertText":"winsaveview(${0})","insertTextFormat":2},{"label":"winwidth","kind":3,"detail":"Number","sortText":"00004","insertText":"winwidth(${1:nr})${0}","insertTextFormat":2},{"label":"wordcount","kind":3,"detail":"Dict","sortText":"00004","insertText":"wordcount(${0})","insertTextFormat":2},{"label":"writefile","kind":3,"detail":"Number","sortText":"00004","insertText":"writefile(${1:list}, ${2:fname})${0}","insertTextFormat":2},{"label":"xor","kind":3,"detail":"Number","sortText":"00004","insertText":"xor(${1:expr}, ${2:expr})${0}","insertTextFormat":2},{"label":"nvim__id","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__id(${1:obj})${0}","insertTextFormat":2},{"label":"nvim__id_array","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__id_array(${1:arr})${0}","insertTextFormat":2},{"label":"nvim__id_dictionary","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__id_dictionary(${1:dct})${0}","insertTextFormat":2},{"label":"nvim__id_float","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__id_float(${1:flt})${0}","insertTextFormat":2},{"label":"nvim__inspect_cell","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__inspect_cell(${1:grid}, ${2:row}, ${3:col})${0}","insertTextFormat":2},{"label":"nvim__put_attr","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__put_attr(${1:id}, ${2:c0}, ${3:c1})${0}","insertTextFormat":2},{"label":"nvim__stats","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__stats(${0})","insertTextFormat":2},{"label":"nvim_call_atomic","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_call_atomic(${1:calls})${0}","insertTextFormat":2},{"label":"nvim_call_dict_function","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_call_dict_function(${1:dict}, ${2:fn}, ${3:args})${0}","insertTextFormat":2},{"label":"nvim_call_function","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_call_function(${1:fn}, ${2:args})${0}","insertTextFormat":2},{"label":"nvim_command","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_command(${1:command})${0}","insertTextFormat":2},{"label":"nvim_create_buf","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_create_buf(${1:listed}, ${2:scratch})${0}","insertTextFormat":2},{"label":"nvim_create_namespace","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_create_namespace(${1:name})${0}","insertTextFormat":2},{"label":"nvim_del_current_line","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_del_current_line(${0})","insertTextFormat":2},{"label":"nvim_del_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_del_keymap(${1:mode}, ${2:lhs})${0}","insertTextFormat":2},{"label":"nvim_del_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_del_var(${1:name})${0}","insertTextFormat":2},{"label":"nvim_err_write","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_err_write(${1:str})${0}","insertTextFormat":2},{"label":"nvim_err_writeln","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_err_writeln(${1:str})${0}","insertTextFormat":2},{"label":"nvim_eval","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_eval(${1:expr})${0}","insertTextFormat":2},{"label":"nvim_exec","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_exec(${1:src}, ${2:output})${0}","insertTextFormat":2},{"label":"nvim_exec_lua","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_exec_lua(${1:code}, ${2:args})${0}","insertTextFormat":2},{"label":"nvim_feedkeys","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_feedkeys(${1:keys}, ${2:mode}, ${3:escape_csi})${0}","insertTextFormat":2},{"label":"nvim_get_api_info","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_api_info(${0})","insertTextFormat":2},{"label":"nvim_get_chan_info","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_chan_info(${1:chan})${0}","insertTextFormat":2},{"label":"nvim_get_color_by_name","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_color_by_name(${1:name})${0}","insertTextFormat":2},{"label":"nvim_get_color_map","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_color_map(${0})","insertTextFormat":2},{"label":"nvim_get_commands","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_commands(${1:opts})${0}","insertTextFormat":2},{"label":"nvim_get_context","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_context(${1:opts})${0}","insertTextFormat":2},{"label":"nvim_get_current_buf","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_current_buf(${0})","insertTextFormat":2},{"label":"nvim_get_current_line","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_current_line(${0})","insertTextFormat":2},{"label":"nvim_get_current_tabpage","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_current_tabpage(${0})","insertTextFormat":2},{"label":"nvim_get_current_win","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_current_win(${0})","insertTextFormat":2},{"label":"nvim_get_hl_by_id","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_hl_by_id(${1:hl_id}, ${2:rgb})${0}","insertTextFormat":2},{"label":"nvim_get_hl_by_name","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_hl_by_name(${1:name}, ${2:rgb})${0}","insertTextFormat":2},{"label":"nvim_get_hl_id_by_name","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_hl_id_by_name(${1:name})${0}","insertTextFormat":2},{"label":"nvim_get_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_keymap(${1:mode})${0}","insertTextFormat":2},{"label":"nvim_get_mode","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_mode(${0})","insertTextFormat":2},{"label":"nvim_get_namespaces","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_namespaces(${0})","insertTextFormat":2},{"label":"nvim_get_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_option(${1:name})${0}","insertTextFormat":2},{"label":"nvim_get_proc","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_proc(${1:pid})${0}","insertTextFormat":2},{"label":"nvim_get_proc_children","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_proc_children(${1:pid})${0}","insertTextFormat":2},{"label":"nvim_get_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_var(${1:name})${0}","insertTextFormat":2},{"label":"nvim_get_vvar","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_get_vvar(${1:name})${0}","insertTextFormat":2},{"label":"nvim_input","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_input(${1:keys})${0}","insertTextFormat":2},{"label":"nvim_input_mouse","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_input_mouse(${1:button}, ${2:action}, ${3:modifier}, ${4:grid}, ${5:row}, ${6:col})${0}","insertTextFormat":2},{"label":"nvim_list_bufs","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_bufs(${0})","insertTextFormat":2},{"label":"nvim_list_chans","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_chans(${0})","insertTextFormat":2},{"label":"nvim_list_runtime_paths","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_runtime_paths(${0})","insertTextFormat":2},{"label":"nvim_list_tabpages","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_tabpages(${0})","insertTextFormat":2},{"label":"nvim_list_uis","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_uis(${0})","insertTextFormat":2},{"label":"nvim_list_wins","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_list_wins(${0})","insertTextFormat":2},{"label":"nvim_load_context","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_load_context(${1:dict})${0}","insertTextFormat":2},{"label":"nvim_open_win","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_open_win(${1:buffer}, ${2:enter}, ${3:config})${0}","insertTextFormat":2},{"label":"nvim_out_write","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_out_write(${1:str})${0}","insertTextFormat":2},{"label":"nvim_parse_expression","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_parse_expression(${1:expr}, ${2:flags}, ${3:highlight})${0}","insertTextFormat":2},{"label":"nvim_paste","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_paste(${1:data}, ${2:crlf}, ${3:phase})${0}","insertTextFormat":2},{"label":"nvim_put","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_put(${1:lines}, ${2:type}, ${3:after}, ${4:follow})${0}","insertTextFormat":2},{"label":"nvim_replace_termcodes","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_replace_termcodes(${1:str}, ${2:from_part}, ${3:do_lt}, ${4:special})${0}","insertTextFormat":2},{"label":"nvim_select_popupmenu_item","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_select_popupmenu_item(${1:item}, ${2:insert}, ${3:finish}, ${4:opts})${0}","insertTextFormat":2},{"label":"nvim_set_client_info","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_client_info(${1:name}, ${2:version}, ${3:type}, ${4:methods}, ${5:attributes})${0}","insertTextFormat":2},{"label":"nvim_set_current_buf","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_current_buf(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_set_current_dir","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_current_dir(${1:dir})${0}","insertTextFormat":2},{"label":"nvim_set_current_line","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_current_line(${1:line})${0}","insertTextFormat":2},{"label":"nvim_set_current_tabpage","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_current_tabpage(${1:tabpage})${0}","insertTextFormat":2},{"label":"nvim_set_current_win","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_current_win(${1:window})${0}","insertTextFormat":2},{"label":"nvim_set_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_keymap(${1:mode}, ${2:lhs}, ${3:rhs}, ${4:opts})${0}","insertTextFormat":2},{"label":"nvim_set_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_option(${1:name}, ${2:value})${0}","insertTextFormat":2},{"label":"nvim_set_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_var(${1:name}, ${2:value})${0}","insertTextFormat":2},{"label":"nvim_set_vvar","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_set_vvar(${1:name}, ${2:value})${0}","insertTextFormat":2},{"label":"nvim_strwidth","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_strwidth(${1:text})${0}","insertTextFormat":2},{"label":"nvim_subscribe","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_subscribe(${1:event})${0}","insertTextFormat":2},{"label":"nvim_unsubscribe","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_unsubscribe(${1:event})${0}","insertTextFormat":2},{"label":"nvim__buf_redraw_range","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__buf_redraw_range(${1:buffer}, ${2:first}, ${3:last})${0}","insertTextFormat":2},{"label":"nvim__buf_set_luahl","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__buf_set_luahl(${1:buffer}, ${2:opts})${0}","insertTextFormat":2},{"label":"nvim__buf_stats","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim__buf_stats(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_add_highlight","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_add_highlight(${1:buffer}, ${2:ns_id}, ${3:hl_group}, ${4:line}, ${5:col_start}, ${6:col_end})${0}","insertTextFormat":2},{"label":"nvim_buf_attach","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_attach(${1:buffer}, ${2:send_buffer}, ${3:opts})${0}","insertTextFormat":2},{"label":"nvim_buf_clear_namespace","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_clear_namespace(${1:buffer}, ${2:ns_id}, ${3:line_start}, ${4:line_end})${0}","insertTextFormat":2},{"label":"nvim_buf_del_extmark","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_del_extmark(${1:buffer}, ${2:ns_id}, ${3:id})${0}","insertTextFormat":2},{"label":"nvim_buf_del_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_del_keymap(${1:buffer}, ${2:mode}, ${3:lhs})${0}","insertTextFormat":2},{"label":"nvim_buf_del_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_del_var(${1:buffer}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_buf_detach","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_detach(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_get_changedtick","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_changedtick(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_get_commands","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_commands(${1:buffer}, ${2:opts})${0}","insertTextFormat":2},{"label":"nvim_buf_get_extmark_by_id","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_extmark_by_id(${1:buffer}, ${2:ns_id}, ${3:id})${0}","insertTextFormat":2},{"label":"nvim_buf_get_extmarks","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_extmarks(${1:buffer}, ${2:ns_id}, ${3:start}, ${4:end}, ${5:opts})${0}","insertTextFormat":2},{"label":"nvim_buf_get_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_keymap(${1:buffer}, ${2:mode})${0}","insertTextFormat":2},{"label":"nvim_buf_get_lines","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_lines(${1:buffer}, ${2:start}, ${3:end}, ${4:strict_indexing})${0}","insertTextFormat":2},{"label":"nvim_buf_get_mark","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_mark(${1:buffer}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_buf_get_name","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_name(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_get_offset","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_offset(${1:buffer}, ${2:index})${0}","insertTextFormat":2},{"label":"nvim_buf_get_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_option(${1:buffer}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_buf_get_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_var(${1:buffer}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_buf_get_virtual_text","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_get_virtual_text(${1:buffer}, ${2:lnum})${0}","insertTextFormat":2},{"label":"nvim_buf_is_loaded","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_is_loaded(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_is_valid","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_is_valid(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_line_count","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_line_count(${1:buffer})${0}","insertTextFormat":2},{"label":"nvim_buf_set_extmark","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_extmark(${1:buffer}, ${2:ns_id}, ${3:id}, ${4:line}, ${5:col}, ${6:opts})${0}","insertTextFormat":2},{"label":"nvim_buf_set_keymap","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_keymap(${1:buffer}, ${2:mode}, ${3:lhs}, ${4:rhs}, ${5:opts})${0}","insertTextFormat":2},{"label":"nvim_buf_set_lines","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_lines(${1:buffer}, ${2:start}, ${3:end}, ${4:strict_indexing}, ${5:replacement})${0}","insertTextFormat":2},{"label":"nvim_buf_set_name","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_name(${1:buffer}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_buf_set_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_option(${1:buffer}, ${2:name}, ${3:value})${0}","insertTextFormat":2},{"label":"nvim_buf_set_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_var(${1:buffer}, ${2:name}, ${3:value})${0}","insertTextFormat":2},{"label":"nvim_buf_set_virtual_text","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_buf_set_virtual_text(${1:buffer}, ${2:ns_id}, ${3:line}, ${4:chunks}, ${5:opts})${0}","insertTextFormat":2},{"label":"nvim_win_close","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_close(${1:window}, ${2:force})${0}","insertTextFormat":2},{"label":"nvim_win_del_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_del_var(${1:window}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_win_get_buf","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_buf(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_config","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_config(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_cursor","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_cursor(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_height","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_height(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_number","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_number(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_option(${1:window}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_win_get_position","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_position(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_tabpage","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_tabpage(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_get_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_var(${1:window}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_win_get_width","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_get_width(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_is_valid","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_is_valid(${1:window})${0}","insertTextFormat":2},{"label":"nvim_win_set_buf","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_buf(${1:window}, ${2:buffer})${0}","insertTextFormat":2},{"label":"nvim_win_set_config","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_config(${1:window}, ${2:config})${0}","insertTextFormat":2},{"label":"nvim_win_set_cursor","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_cursor(${1:window}, ${2:pos})${0}","insertTextFormat":2},{"label":"nvim_win_set_height","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_height(${1:window}, ${2:height})${0}","insertTextFormat":2},{"label":"nvim_win_set_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_option(${1:window}, ${2:name}, ${3:value})${0}","insertTextFormat":2},{"label":"nvim_win_set_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_var(${1:window}, ${2:name}, ${3:value})${0}","insertTextFormat":2},{"label":"nvim_win_set_width","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_win_set_width(${1:window}, ${2:width})${0}","insertTextFormat":2},{"label":"nvim_tabpage_del_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_del_var(${1:tabpage}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_tabpage_get_number","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_get_number(${1:tabpage})${0}","insertTextFormat":2},{"label":"nvim_tabpage_get_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_get_var(${1:tabpage}, ${2:name})${0}","insertTextFormat":2},{"label":"nvim_tabpage_get_win","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_get_win(${1:tabpage})${0}","insertTextFormat":2},{"label":"nvim_tabpage_is_valid","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_is_valid(${1:tabpage})${0}","insertTextFormat":2},{"label":"nvim_tabpage_list_wins","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_list_wins(${1:tabpage})${0}","insertTextFormat":2},{"label":"nvim_tabpage_set_var","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_tabpage_set_var(${1:tabpage}, ${2:name}, ${3:value})${0}","insertTextFormat":2},{"label":"nvim_ui_attach","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_attach(${1:width}, ${2:height}, ${3:options})${0}","insertTextFormat":2},{"label":"nvim_ui_detach","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_detach(${0})","insertTextFormat":2},{"label":"nvim_ui_pum_set_height","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_pum_set_height(${1:height})${0}","insertTextFormat":2},{"label":"nvim_ui_set_option","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_set_option(${1:name}, ${2:value})${0}","insertTextFormat":2},{"label":"nvim_ui_try_resize","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_try_resize(${1:width}, ${2:height})${0}","insertTextFormat":2},{"label":"nvim_ui_try_resize_grid","kind":3,"detail":"","documentation":"","sortText":"00004","insertText":"nvim_ui_try_resize_grid(${1:grid}, ${2:width}, ${3:height})${0}","insertTextFormat":2},{"label":"balloon_gettext","kind":3,"detail":"String","sortText":"00004","insertText":"balloon_gettext(${0})","insertTextFormat":2},{"label":"balloon_show","kind":3,"detail":"none","sortText":"00004","insertText":"balloon_show(${1:expr})${0}","insertTextFormat":2},{"label":"balloon_split","kind":3,"detail":"List","sortText":"00004","insertText":"balloon_split(${1:msg})${0}","insertTextFormat":2},{"label":"ch_canread","kind":3,"detail":"Number","sortText":"00004","insertText":"ch_canread(${1:handle})${0}","insertTextFormat":2},{"label":"ch_close","kind":3,"detail":"none","sortText":"00004","insertText":"ch_close(${1:handle})${0}","insertTextFormat":2},{"label":"ch_close_in","kind":3,"detail":"none","sortText":"00004","insertText":"ch_close_in(${1:handle})${0}","insertTextFormat":2},{"label":"ch_evalexpr","kind":3,"detail":"any","sortText":"00004","insertText":"ch_evalexpr(${1:handle}, ${2:expr})${0}","insertTextFormat":2},{"label":"ch_evalraw","kind":3,"detail":"any","sortText":"00004","insertText":"ch_evalraw(${1:handle}, ${2:string})${0}","insertTextFormat":2},{"label":"ch_getbufnr","kind":3,"detail":"Number","sortText":"00004","insertText":"ch_getbufnr(${1:handle}, ${2:what})${0}","insertTextFormat":2},{"label":"ch_getjob","kind":3,"detail":"Job","sortText":"00004","insertText":"ch_getjob(${1:channel})${0}","insertTextFormat":2},{"label":"ch_info","kind":3,"detail":"String","sortText":"00004","insertText":"ch_info(${1:handle})${0}","insertTextFormat":2},{"label":"ch_log","kind":3,"detail":"none","sortText":"00004","insertText":"ch_log(${1:msg})${0}","insertTextFormat":2},{"label":"ch_logfile","kind":3,"detail":"none","sortText":"00004","insertText":"ch_logfile(${1:fname})${0}","insertTextFormat":2},{"label":"ch_open","kind":3,"detail":"Channel","sortText":"00004","insertText":"ch_open(${1:address})${0}","insertTextFormat":2},{"label":"ch_read","kind":3,"detail":"String","sortText":"00004","insertText":"ch_read(${1:handle})${0}","insertTextFormat":2},{"label":"ch_readblob","kind":3,"detail":"Blob","sortText":"00004","insertText":"ch_readblob(${1:handle})${0}","insertTextFormat":2},{"label":"ch_readraw","kind":3,"detail":"String","sortText":"00004","insertText":"ch_readraw(${1:handle})${0}","insertTextFormat":2},{"label":"ch_sendexpr","kind":3,"detail":"any","sortText":"00004","insertText":"ch_sendexpr(${1:handle}, ${2:expr})${0}","insertTextFormat":2},{"label":"ch_sendraw","kind":3,"detail":"any","sortText":"00004","insertText":"ch_sendraw(${1:handle}, ${2:expr})${0}","insertTextFormat":2},{"label":"ch_setoptions","kind":3,"detail":"none","sortText":"00004","insertText":"ch_setoptions(${1:handle}, ${2:options})${0}","insertTextFormat":2},{"label":"ch_status","kind":3,"detail":"String","sortText":"00004","insertText":"ch_status(${1:handle})${0}","insertTextFormat":2},{"label":"chdir","kind":3,"detail":"String","sortText":"00004","insertText":"chdir(${1:dir})${0}","insertTextFormat":2},{"label":"getimstatus","kind":3,"detail":"Number","sortText":"00004","insertText":"getimstatus(${0})","insertTextFormat":2},{"label":"getmousepos","kind":3,"detail":"Dict","sortText":"00004","insertText":"getmousepos(${0})","insertTextFormat":2},{"label":"inputdialog","kind":3,"detail":"String","sortText":"00004","insertText":"inputdialog(${1:prompt})${0}","insertTextFormat":2},{"label":"interrupt","kind":3,"detail":"none","sortText":"00004","insertText":"interrupt(${0})","insertTextFormat":2},{"label":"job_getchannel","kind":3,"detail":"Channel","sortText":"00004","insertText":"job_getchannel(${1:job})${0}","insertTextFormat":2},{"label":"job_info","kind":3,"detail":"Dict","sortText":"00004","insertText":"job_info(${1})${0}","insertTextFormat":2},{"label":"job_setoptions","kind":3,"detail":"none","sortText":"00004","insertText":"job_setoptions(${1:job}, ${2:options})${0}","insertTextFormat":2},{"label":"job_start","kind":3,"detail":"Job","sortText":"00004","insertText":"job_start(${1:command})${0}","insertTextFormat":2},{"label":"job_status","kind":3,"detail":"String","sortText":"00004","insertText":"job_status(${1:job})${0}","insertTextFormat":2},{"label":"job_stop","kind":3,"detail":"Number","sortText":"00004","insertText":"job_stop(${1:job})${0}","insertTextFormat":2},{"label":"js_decode","kind":3,"detail":"any","sortText":"00004","insertText":"js_decode(${1:string})${0}","insertTextFormat":2},{"label":"js_encode","kind":3,"detail":"String","sortText":"00004","insertText":"js_encode(${1:expr})${0}","insertTextFormat":2},{"label":"listener_add","kind":3,"detail":"Number","sortText":"00004","insertText":"listener_add(${1:callback})${0}","insertTextFormat":2},{"label":"listener_flush","kind":3,"detail":"none","sortText":"00004","insertText":"listener_flush(${1})${0}","insertTextFormat":2},{"label":"listener_remove","kind":3,"detail":"none","sortText":"00004","insertText":"listener_remove(${1:id})${0}","insertTextFormat":2},{"label":"mzeval","kind":3,"detail":"any","sortText":"00004","insertText":"mzeval(${1:expr})${0}","insertTextFormat":2},{"label":"perleval","kind":3,"detail":"any","sortText":"00004","insertText":"perleval(${1:expr})${0}","insertTextFormat":2},{"label":"popup_atcursor","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_atcursor(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_beval","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_beval(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_clear","kind":3,"detail":"none","sortText":"00004","insertText":"popup_clear(${0})","insertTextFormat":2},{"label":"popup_close","kind":3,"detail":"none","sortText":"00004","insertText":"popup_close(${1:id})${0}","insertTextFormat":2},{"label":"popup_create","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_create(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_dialog","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_dialog(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_filter_menu","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_filter_menu(${1:id}, ${2:key})${0}","insertTextFormat":2},{"label":"popup_filter_yesno","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_filter_yesno(${1:id}, ${2:key})${0}","insertTextFormat":2},{"label":"popup_findinfo","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_findinfo(${0})","insertTextFormat":2},{"label":"popup_findpreview","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_findpreview(${0})","insertTextFormat":2},{"label":"popup_getoptions","kind":3,"detail":"Dict","sortText":"00004","insertText":"popup_getoptions(${1:id})${0}","insertTextFormat":2},{"label":"popup_getpos","kind":3,"detail":"Dict","sortText":"00004","insertText":"popup_getpos(${1:id})${0}","insertTextFormat":2},{"label":"popup_hide","kind":3,"detail":"none","sortText":"00004","insertText":"popup_hide(${1:id})${0}","insertTextFormat":2},{"label":"popup_menu","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_menu(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_move","kind":3,"detail":"none","sortText":"00004","insertText":"popup_move(${1:id}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_notification","kind":3,"detail":"Number","sortText":"00004","insertText":"popup_notification(${1:what}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_show","kind":3,"detail":"none","sortText":"00004","insertText":"popup_show(${1:id})${0}","insertTextFormat":2},{"label":"popup_setoptions","kind":3,"detail":"none","sortText":"00004","insertText":"popup_setoptions(${1:id}, ${2:options})${0}","insertTextFormat":2},{"label":"popup_settext","kind":3,"detail":"none","sortText":"00004","insertText":"popup_settext(${1:id}, ${2:text})${0}","insertTextFormat":2},{"label":"prop_add","kind":3,"detail":"none","sortText":"00004","insertText":"prop_add(${1:lnum}, ${2:col}, ${3:props})${0}","insertTextFormat":2},{"label":"prop_clear","kind":3,"detail":"none","sortText":"00004","insertText":"prop_clear(${1:lnum})${0}","insertTextFormat":2},{"label":"prop_find","kind":3,"detail":"Dict","sortText":"00004","insertText":"prop_find(${1:props})${0}","insertTextFormat":2},{"label":"prop_list","kind":3,"detail":"List","sortText":"00004","insertText":"prop_list(${1:lnum})${0}","insertTextFormat":2},{"label":"prop_remove","kind":3,"detail":"Number","sortText":"00004","insertText":"prop_remove(${1:props})${0}","insertTextFormat":2},{"label":"prop_type_add","kind":3,"detail":"none","sortText":"00004","insertText":"prop_type_add(${1:name}, ${2:props})${0}","insertTextFormat":2},{"label":"prop_type_change","kind":3,"detail":"none","sortText":"00004","insertText":"prop_type_change(${1:name}, ${2:props})${0}","insertTextFormat":2},{"label":"prop_type_delete","kind":3,"detail":"none","sortText":"00004","insertText":"prop_type_delete(${1:name})${0}","insertTextFormat":2},{"label":"prop_type_get","kind":3,"detail":"Dict","sortText":"00004","insertText":"prop_type_get(${1})${0}","insertTextFormat":2},{"label":"prop_type_list","kind":3,"detail":"List","sortText":"00004","insertText":"prop_type_list(${1})${0}","insertTextFormat":2},{"label":"rand","kind":3,"detail":"Number","sortText":"00004","insertText":"rand(${1})${0}","insertTextFormat":2},{"label":"rubyeval","kind":3,"detail":"any","sortText":"00004","insertText":"rubyeval(${1:expr})${0}","insertTextFormat":2},{"label":"screenchars","kind":3,"detail":"List","sortText":"00004","insertText":"screenchars(${1:row}, ${2:col})${0}","insertTextFormat":2},{"label":"screenstring","kind":3,"detail":"String","sortText":"00004","insertText":"screenstring(${1:row}, ${2:col})${0}","insertTextFormat":2},{"label":"searchpair","kind":3,"detail":"Number","sortText":"00004","insertText":"searchpair(${1:start}, ${2:middle}, ${3:end})${0}","insertTextFormat":2},{"label":"searchpairpos","kind":3,"detail":"List","sortText":"00004","insertText":"searchpairpos(${1:start}, ${2:middle}, ${3:end})${0}","insertTextFormat":2},{"label":"sign_placelist","kind":3,"detail":"List","sortText":"00004","insertText":"sign_placelist(${1:list})${0}","insertTextFormat":2},{"label":"sign_unplacelist","kind":3,"detail":"List","sortText":"00004","insertText":"sign_unplacelist(${1:list})${0}","insertTextFormat":2},{"label":"sound_clear","kind":3,"detail":"none","sortText":"00004","insertText":"sound_clear(${0})","insertTextFormat":2},{"label":"sound_playevent","kind":3,"detail":"Number","sortText":"00004","insertText":"sound_playevent(${1:name})${0}","insertTextFormat":2},{"label":"sound_playfile","kind":3,"detail":"Number","sortText":"00004","insertText":"sound_playfile(${1:path})${0}","insertTextFormat":2},{"label":"sound_stop","kind":3,"detail":"none","sortText":"00004","insertText":"sound_stop(${1:id})${0}","insertTextFormat":2},{"label":"srand","kind":3,"detail":"List","sortText":"00004","insertText":"srand(${1})${0}","insertTextFormat":2},{"label":"state","kind":3,"detail":"String","sortText":"00004","insertText":"state(${1})${0}","insertTextFormat":2},{"label":"strptime","kind":3,"detail":"Number","sortText":"00004","insertText":"strptime(${1:format}, ${2:timestring})${0}","insertTextFormat":2},{"label":"term_dumpdiff","kind":3,"detail":"Number","sortText":"00004","insertText":"term_dumpdiff(${1:filename}, ${2:filename})${0}","insertTextFormat":2},{"label":"term_dumpload","kind":3,"detail":"Number","sortText":"00004","insertText":"term_dumpload(${1:filename})${0}","insertTextFormat":2},{"label":"term_dumpwrite","kind":3,"detail":"none","sortText":"00004","insertText":"term_dumpwrite(${1:buf}, ${2:filename})${0}","insertTextFormat":2},{"label":"term_getaltscreen","kind":3,"detail":"Number","sortText":"00004","insertText":"term_getaltscreen(${1:buf})${0}","insertTextFormat":2},{"label":"term_getansicolors","kind":3,"detail":"List","sortText":"00004","insertText":"term_getansicolors(${1:buf})${0}","insertTextFormat":2},{"label":"term_getattr","kind":3,"detail":"Number","sortText":"00004","insertText":"term_getattr(${1:attr}, ${2:what})${0}","insertTextFormat":2},{"label":"term_getcursor","kind":3,"detail":"List","sortText":"00004","insertText":"term_getcursor(${1:buf})${0}","insertTextFormat":2},{"label":"term_getjob","kind":3,"detail":"Job","sortText":"00004","insertText":"term_getjob(${1:buf})${0}","insertTextFormat":2},{"label":"term_getline","kind":3,"detail":"String","sortText":"00004","insertText":"term_getline(${1:buf}, ${2:row})${0}","insertTextFormat":2},{"label":"term_getscrolled","kind":3,"detail":"Number","sortText":"00004","insertText":"term_getscrolled(${1:buf})${0}","insertTextFormat":2},{"label":"term_getsize","kind":3,"detail":"List","sortText":"00004","insertText":"term_getsize(${1:buf})${0}","insertTextFormat":2},{"label":"term_getstatus","kind":3,"detail":"String","sortText":"00004","insertText":"term_getstatus(${1:buf})${0}","insertTextFormat":2},{"label":"term_gettitle","kind":3,"detail":"String","sortText":"00004","insertText":"term_gettitle(${1:buf})${0}","insertTextFormat":2},{"label":"term_gettty","kind":3,"detail":"String","sortText":"00004","insertText":"term_gettty(${1:buf},)${0}","insertTextFormat":2},{"label":"term_list","kind":3,"detail":"List","sortText":"00004","insertText":"term_list(${0})","insertTextFormat":2},{"label":"term_scrape","kind":3,"detail":"List","sortText":"00004","insertText":"term_scrape(${1:buf}, ${2:row})${0}","insertTextFormat":2},{"label":"term_sendkeys","kind":3,"detail":"none","sortText":"00004","insertText":"term_sendkeys(${1:buf}, ${2:keys})${0}","insertTextFormat":2},{"label":"term_setapi","kind":3,"detail":"none","sortText":"00004","insertText":"term_setapi(${1:buf}, ${2:expr})${0}","insertTextFormat":2},{"label":"term_setansicolors","kind":3,"detail":"none","sortText":"00004","insertText":"term_setansicolors(${1:buf}, ${2:colors})${0}","insertTextFormat":2},{"label":"term_setkill","kind":3,"detail":"none","sortText":"00004","insertText":"term_setkill(${1:buf}, ${2:how})${0}","insertTextFormat":2},{"label":"term_setrestore","kind":3,"detail":"none","sortText":"00004","insertText":"term_setrestore(${1:buf}, ${2:command})${0}","insertTextFormat":2},{"label":"term_setsize","kind":3,"detail":"none","sortText":"00004","insertText":"term_setsize(${1:buf}, ${2:rows}, ${3:cols})${0}","insertTextFormat":2},{"label":"term_start","kind":3,"detail":"Number","sortText":"00004","insertText":"term_start(${1:cmd})${0}","insertTextFormat":2},{"label":"term_wait","kind":3,"detail":"Number","sortText":"00004","insertText":"term_wait(${1:buf})${0}","insertTextFormat":2},{"label":"test_alloc_fail","kind":3,"detail":"none","sortText":"00004","insertText":"test_alloc_fail(${1:id}, ${2:countdown}, ${3:repeat})${0}","insertTextFormat":2},{"label":"test_autochdir","kind":3,"detail":"none","sortText":"00004","insertText":"test_autochdir(${0})","insertTextFormat":2},{"label":"test_feedinput","kind":3,"detail":"none","sortText":"00004","insertText":"test_feedinput(${1:string})${0}","insertTextFormat":2},{"label":"test_garbagecollect_soon","kind":3,"detail":"none","sortText":"00004","insertText":"test_garbagecollect_soon(${0})","insertTextFormat":2},{"label":"test_getvalue","kind":3,"detail":"any","sortText":"00004","insertText":"test_getvalue(${1:string})${0}","insertTextFormat":2},{"label":"test_ignore_error","kind":3,"detail":"none","sortText":"00004","insertText":"test_ignore_error(${1:expr})${0}","insertTextFormat":2},{"label":"test_null_blob","kind":3,"detail":"Blob","sortText":"00004","insertText":"test_null_blob(${0})","insertTextFormat":2},{"label":"test_null_channel","kind":3,"detail":"Channel","sortText":"00004","insertText":"test_null_channel(${0})","insertTextFormat":2},{"label":"test_null_dict","kind":3,"detail":"Dict","sortText":"00004","insertText":"test_null_dict(${0})","insertTextFormat":2},{"label":"test_null_job","kind":3,"detail":"Job","sortText":"00004","insertText":"test_null_job(${0})","insertTextFormat":2},{"label":"test_null_list","kind":3,"detail":"List","sortText":"00004","insertText":"test_null_list(${0})","insertTextFormat":2},{"label":"test_null_partial","kind":3,"detail":"Funcref","sortText":"00004","insertText":"test_null_partial(${0})","insertTextFormat":2},{"label":"test_null_string","kind":3,"detail":"String","sortText":"00004","insertText":"test_null_string(${0})","insertTextFormat":2},{"label":"test_option_not_set","kind":3,"detail":"none","sortText":"00004","insertText":"test_option_not_set(${1:name})${0}","insertTextFormat":2},{"label":"test_override","kind":3,"detail":"none","sortText":"00004","insertText":"test_override(${1:expr}, ${2:val})${0}","insertTextFormat":2},{"label":"test_refcount","kind":3,"detail":"Number","sortText":"00004","insertText":"test_refcount(${1:expr})${0}","insertTextFormat":2},{"label":"test_scrollbar","kind":3,"detail":"none","sortText":"00004","insertText":"test_scrollbar(${1:which}, ${2:value}, ${3:dragging})${0}","insertTextFormat":2},{"label":"test_setmouse","kind":3,"detail":"none","sortText":"00004","insertText":"test_setmouse(${1:row}, ${2:col})${0}","insertTextFormat":2},{"label":"test_settime","kind":3,"detail":"none","sortText":"00004","insertText":"test_settime(${1:expr})${0}","insertTextFormat":2},{"label":"win_execute","kind":3,"detail":"String","sortText":"00004","insertText":"win_execute(${1:id}, ${2:command})${0}","insertTextFormat":2},{"label":"win_splitmove","kind":3,"detail":"Number","sortText":"00004","insertText":"win_splitmove(${1:nr}, ${2:target})${0}","insertTextFormat":2}],"variables":[{"label":"v:beval_col","kind":6,"sortText":"00004","insertText":"beval_col","insertTextFormat":1},{"label":"v:beval_bufnr","kind":6,"sortText":"00004","insertText":"beval_bufnr","insertTextFormat":1},{"label":"v:beval_lnum","kind":6,"sortText":"00004","insertText":"beval_lnum","insertTextFormat":1},{"label":"v:beval_text","kind":6,"sortText":"00004","insertText":"beval_text","insertTextFormat":1},{"label":"v:beval_winnr","kind":6,"sortText":"00004","insertText":"beval_winnr","insertTextFormat":1},{"label":"v:beval_winid","kind":6,"sortText":"00004","insertText":"beval_winid","insertTextFormat":1},{"label":"v:char","kind":6,"sortText":"00004","insertText":"char","insertTextFormat":1},{"label":"v:cmdarg","kind":6,"sortText":"00004","insertText":"cmdarg","insertTextFormat":1},{"label":"v:cmdbang","kind":6,"sortText":"00004","insertText":"cmdbang","insertTextFormat":1},{"label":"v:count","kind":6,"sortText":"00004","insertText":"count","insertTextFormat":1},{"label":"v:count1","kind":6,"sortText":"00004","insertText":"count1","insertTextFormat":1},{"label":"v:ctype","kind":6,"sortText":"00004","insertText":"ctype","insertTextFormat":1},{"label":"v:dying","kind":6,"sortText":"00004","insertText":"dying","insertTextFormat":1},{"label":"v:exiting","kind":6,"sortText":"00004","insertText":"exiting","insertTextFormat":1},{"label":"v:echospace","kind":6,"sortText":"00004","insertText":"echospace","insertTextFormat":1},{"label":"v:errmsg","kind":6,"sortText":"00004","insertText":"errmsg","insertTextFormat":1},{"label":"v:errors","kind":6,"sortText":"00004","insertText":"errors","insertTextFormat":1},{"label":"v:event","kind":6,"sortText":"00004","insertText":"event","insertTextFormat":1},{"label":"v:exception","kind":6,"sortText":"00004","insertText":"exception","insertTextFormat":1},{"label":"v:false","kind":6,"sortText":"00004","insertText":"false","insertTextFormat":1},{"label":"v:fcs_reason","kind":6,"sortText":"00004","insertText":"fcs_reason","insertTextFormat":1},{"label":"v:fcs_choice","kind":6,"sortText":"00004","insertText":"fcs_choice","insertTextFormat":1},{"label":"v:fname_in","kind":6,"sortText":"00004","insertText":"fname_in","insertTextFormat":1},{"label":"v:fname_out","kind":6,"sortText":"00004","insertText":"fname_out","insertTextFormat":1},{"label":"v:fname_new","kind":6,"sortText":"00004","insertText":"fname_new","insertTextFormat":1},{"label":"v:fname_diff","kind":6,"sortText":"00004","insertText":"fname_diff","insertTextFormat":1},{"label":"v:folddashes","kind":6,"sortText":"00004","insertText":"folddashes","insertTextFormat":1},{"label":"v:foldlevel","kind":6,"sortText":"00004","insertText":"foldlevel","insertTextFormat":1},{"label":"v:foldend","kind":6,"sortText":"00004","insertText":"foldend","insertTextFormat":1},{"label":"v:foldstart","kind":6,"sortText":"00004","insertText":"foldstart","insertTextFormat":1},{"label":"v:hlsearch","kind":6,"sortText":"00004","insertText":"hlsearch","insertTextFormat":1},{"label":"v:insertmode","kind":6,"sortText":"00004","insertText":"insertmode","insertTextFormat":1},{"label":"v:key","kind":6,"sortText":"00004","insertText":"key","insertTextFormat":1},{"label":"v:lang","kind":6,"sortText":"00004","insertText":"lang","insertTextFormat":1},{"label":"v:lc_time","kind":6,"sortText":"00004","insertText":"lc_time","insertTextFormat":1},{"label":"v:lnum","kind":6,"sortText":"00004","insertText":"lnum","insertTextFormat":1},{"label":"v:lua","kind":6,"sortText":"00004","insertText":"lua","insertTextFormat":1},{"label":"v:mouse_win","kind":6,"sortText":"00004","insertText":"mouse_win","insertTextFormat":1},{"label":"v:mouse_winid","kind":6,"sortText":"00004","insertText":"mouse_winid","insertTextFormat":1},{"label":"v:mouse_lnum","kind":6,"sortText":"00004","insertText":"mouse_lnum","insertTextFormat":1},{"label":"v:mouse_col","kind":6,"sortText":"00004","insertText":"mouse_col","insertTextFormat":1},{"label":"v:msgpack_types","kind":6,"sortText":"00004","insertText":"msgpack_types","insertTextFormat":1},{"label":"v:null","kind":6,"sortText":"00004","insertText":"null","insertTextFormat":1},{"label":"v:oldfiles","kind":6,"sortText":"00004","insertText":"oldfiles","insertTextFormat":1},{"label":"v:option_new","kind":6,"sortText":"00004","insertText":"option_new","insertTextFormat":1},{"label":"v:option_old","kind":6,"sortText":"00004","insertText":"option_old","insertTextFormat":1},{"label":"v:option_type","kind":6,"sortText":"00004","insertText":"option_type","insertTextFormat":1},{"label":"v:operator","kind":6,"sortText":"00004","insertText":"operator","insertTextFormat":1},{"label":"v:prevcount","kind":6,"sortText":"00004","insertText":"prevcount","insertTextFormat":1},{"label":"v:profiling","kind":6,"sortText":"00004","insertText":"profiling","insertTextFormat":1},{"label":"v:progname","kind":6,"sortText":"00004","insertText":"progname","insertTextFormat":1},{"label":"v:progpath","kind":6,"sortText":"00004","insertText":"progpath","insertTextFormat":1},{"label":"v:register","kind":6,"sortText":"00004","insertText":"register","insertTextFormat":1},{"label":"v:scrollstart","kind":6,"sortText":"00004","insertText":"scrollstart","insertTextFormat":1},{"label":"v:servername","kind":6,"sortText":"00004","insertText":"servername","insertTextFormat":1},{"label":"v:searchforward","kind":6,"sortText":"00004","insertText":"searchforward","insertTextFormat":1},{"label":"v:shell_error","kind":6,"sortText":"00004","insertText":"shell_error","insertTextFormat":1},{"label":"v:statusmsg","kind":6,"sortText":"00004","insertText":"statusmsg","insertTextFormat":1},{"label":"v:stderr","kind":6,"sortText":"00004","insertText":"stderr","insertTextFormat":1},{"label":"v:swapname","kind":6,"sortText":"00004","insertText":"swapname","insertTextFormat":1},{"label":"v:swapchoice","kind":6,"sortText":"00004","insertText":"swapchoice","insertTextFormat":1},{"label":"v:swapcommand","kind":6,"sortText":"00004","insertText":"swapcommand","insertTextFormat":1},{"label":"v:t_bool","kind":6,"sortText":"00004","insertText":"t_bool","insertTextFormat":1},{"label":"v:t_dict","kind":6,"sortText":"00004","insertText":"t_dict","insertTextFormat":1},{"label":"v:t_float","kind":6,"sortText":"00004","insertText":"t_float","insertTextFormat":1},{"label":"v:t_func","kind":6,"sortText":"00004","insertText":"t_func","insertTextFormat":1},{"label":"v:t_list","kind":6,"sortText":"00004","insertText":"t_list","insertTextFormat":1},{"label":"v:t_number","kind":6,"sortText":"00004","insertText":"t_number","insertTextFormat":1},{"label":"v:t_string","kind":6,"sortText":"00004","insertText":"t_string","insertTextFormat":1},{"label":"v:termresponse","kind":6,"sortText":"00004","insertText":"termresponse","insertTextFormat":1},{"label":"v:testing","kind":6,"sortText":"00004","insertText":"testing","insertTextFormat":1},{"label":"v:this_session","kind":6,"sortText":"00004","insertText":"this_session","insertTextFormat":1},{"label":"v:throwpoint","kind":6,"sortText":"00004","insertText":"throwpoint","insertTextFormat":1},{"label":"v:true","kind":6,"sortText":"00004","insertText":"true","insertTextFormat":1},{"label":"v:val","kind":6,"sortText":"00004","insertText":"val","insertTextFormat":1},{"label":"v:version","kind":6,"sortText":"00004","insertText":"version","insertTextFormat":1},{"label":"v:vim_did_enter","kind":6,"sortText":"00004","insertText":"vim_did_enter","insertTextFormat":1},{"label":"v:warningmsg","kind":6,"sortText":"00004","insertText":"warningmsg","insertTextFormat":1},{"label":"v:windowid","kind":6,"sortText":"00004","insertText":"windowid","insertTextFormat":1},{"label":"v:argv","kind":6,"sortText":"00004","insertText":"argv","insertTextFormat":1},{"label":"v:none","kind":6,"sortText":"00004","insertText":"none","insertTextFormat":1},{"label":"v:t_channel","kind":6,"sortText":"00004","insertText":"t_channel","insertTextFormat":1},{"label":"v:t_job","kind":6,"sortText":"00004","insertText":"t_job","insertTextFormat":1},{"label":"v:t_none","kind":6,"sortText":"00004","insertText":"t_none","insertTextFormat":1},{"label":"v:t_blob","kind":6,"sortText":"00004","insertText":"t_blob","insertTextFormat":1},{"label":"v:termblinkresp","kind":6,"sortText":"00004","insertText":"termblinkresp","insertTextFormat":1},{"label":"v:termstyleresp","kind":6,"sortText":"00004","insertText":"termstyleresp","insertTextFormat":1},{"label":"v:termrbgresp","kind":6,"sortText":"00004","insertText":"termrbgresp","insertTextFormat":1},{"label":"v:termrfgresp","kind":6,"sortText":"00004","insertText":"termrfgresp","insertTextFormat":1},{"label":"v:termu7resp","kind":6,"sortText":"00004","insertText":"termu7resp","insertTextFormat":1},{"label":"v:versionlong","kind":6,"sortText":"00004","insertText":"versionlong","insertTextFormat":1}],"options":[{"label":"aleph","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"aleph","insertTextFormat":1},{"label":"allowrevins","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"allowrevins","insertTextFormat":1},{"label":"ambiwidth","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"ambiwidth","insertTextFormat":1},{"label":"autochdir","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"autochdir","insertTextFormat":1},{"label":"arabic","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"arabic","insertTextFormat":1},{"label":"arabicshape","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"arabicshape","insertTextFormat":1},{"label":"autoindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"autoindent","insertTextFormat":1},{"label":"autowrite","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"autowrite","insertTextFormat":1},{"label":"autowriteall","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"autowriteall","insertTextFormat":1},{"label":"background","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"background","insertTextFormat":1},{"label":"backspace","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"backspace","insertTextFormat":1},{"label":"backup","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"backup","insertTextFormat":1},{"label":"backupcopy","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"backupcopy","insertTextFormat":1},{"label":"backupdir","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"backupdir","insertTextFormat":1},{"label":"backupext","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"backupext","insertTextFormat":1},{"label":"backupskip","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"backupskip","insertTextFormat":1},{"label":"balloondelay","kind":10,"detail":"Removed.","documentation":"","sortText":"00004","insertText":"balloondelay","insertTextFormat":1},{"label":"ballooneval","kind":10,"detail":"Removed.","documentation":"","sortText":"00004","insertText":"ballooneval","insertTextFormat":1},{"label":"balloonexpr","kind":10,"detail":"Removed.","documentation":"","sortText":"00004","insertText":"balloonexpr","insertTextFormat":1},{"label":"belloff","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"belloff","insertTextFormat":1},{"label":"binary","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"binary","insertTextFormat":1},{"label":"bomb","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"bomb","insertTextFormat":1},{"label":"breakat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"breakat","insertTextFormat":1},{"label":"breakindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"breakindent","insertTextFormat":1},{"label":"breakindentopt","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"breakindentopt","insertTextFormat":1},{"label":"browsedir","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"browsedir","insertTextFormat":1},{"label":"bufhidden","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"bufhidden","insertTextFormat":1},{"label":"buflisted","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"buflisted","insertTextFormat":1},{"label":"buftype","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"buftype","insertTextFormat":1},{"label":"casemap","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"casemap","insertTextFormat":1},{"label":"cdpath","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cdpath","insertTextFormat":1},{"label":"cedit","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cedit","insertTextFormat":1},{"label":"channel","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"channel","insertTextFormat":1},{"label":"charconvert","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"charconvert","insertTextFormat":1},{"label":"cindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cindent","insertTextFormat":1},{"label":"cinkeys","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cinkeys","insertTextFormat":1},{"label":"cinoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cinoptions","insertTextFormat":1},{"label":"cinwords","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cinwords","insertTextFormat":1},{"label":"clipboard","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"clipboard","insertTextFormat":1},{"label":"cmdheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"cmdheight","insertTextFormat":1},{"label":"cmdwinheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"cmdwinheight","insertTextFormat":1},{"label":"colorcolumn","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"colorcolumn","insertTextFormat":1},{"label":"columns","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"columns","insertTextFormat":1},{"label":"comments","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"comments","insertTextFormat":1},{"label":"commentstring","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"commentstring","insertTextFormat":1},{"label":"complete","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"complete","insertTextFormat":1},{"label":"completefunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"completefunc","insertTextFormat":1},{"label":"completeopt","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"completeopt","insertTextFormat":1},{"label":"concealcursor","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"concealcursor","insertTextFormat":1},{"label":"conceallevel","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"conceallevel","insertTextFormat":1},{"label":"confirm","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"confirm","insertTextFormat":1},{"label":"copyindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"copyindent","insertTextFormat":1},{"label":"cpoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cpoptions","insertTextFormat":1},{"label":"cscopepathcomp","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"cscopepathcomp","insertTextFormat":1},{"label":"cscopeprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cscopeprg","insertTextFormat":1},{"label":"cscopequickfix","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cscopequickfix","insertTextFormat":1},{"label":"cscoperelative","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cscoperelative","insertTextFormat":1},{"label":"cscopetag","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cscopetag","insertTextFormat":1},{"label":"cscopetagorder","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"cscopetagorder","insertTextFormat":1},{"label":"cursorbind","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cursorbind","insertTextFormat":1},{"label":"cursorcolumn","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cursorcolumn","insertTextFormat":1},{"label":"cursorline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cursorline","insertTextFormat":1},{"label":"debug","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"debug","insertTextFormat":1},{"label":"define","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"define","insertTextFormat":1},{"label":"delcombine","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"delcombine","insertTextFormat":1},{"label":"dictionary","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"dictionary","insertTextFormat":1},{"label":"diff","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"diff","insertTextFormat":1},{"label":"diffexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"diffexpr","insertTextFormat":1},{"label":"diffopt","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"diffopt","insertTextFormat":1},{"label":"digraph","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"digraph","insertTextFormat":1},{"label":"directory","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"directory","insertTextFormat":1},{"label":"display","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"display","insertTextFormat":1},{"label":"eadirection","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"eadirection","insertTextFormat":1},{"label":"emoji","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"emoji","insertTextFormat":1},{"label":"endofline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"endofline","insertTextFormat":1},{"label":"equalalways","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"equalalways","insertTextFormat":1},{"label":"equalprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"equalprg","insertTextFormat":1},{"label":"errorbells","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"errorbells","insertTextFormat":1},{"label":"errorfile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"errorfile","insertTextFormat":1},{"label":"errorformat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"errorformat","insertTextFormat":1},{"label":"expandtab","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"expandtab","insertTextFormat":1},{"label":"fileencoding","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"fileencoding","insertTextFormat":1},{"label":"fileencodings","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"fileencodings","insertTextFormat":1},{"label":"fileformat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"fileformat","insertTextFormat":1},{"label":"fileformats","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"fileformats","insertTextFormat":1},{"label":"fileignorecase","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"fileignorecase","insertTextFormat":1},{"label":"filetype","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"filetype","insertTextFormat":1},{"label":"fillchars","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"fillchars","insertTextFormat":1},{"label":"fixendofline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"fixendofline","insertTextFormat":1},{"label":"foldclose","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldclose","insertTextFormat":1},{"label":"foldcolumn","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldcolumn","insertTextFormat":1},{"label":"foldenable","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"foldenable","insertTextFormat":1},{"label":"foldexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldexpr","insertTextFormat":1},{"label":"foldignore","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldignore","insertTextFormat":1},{"label":"foldlevel","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"foldlevel","insertTextFormat":1},{"label":"foldlevelstart","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"foldlevelstart","insertTextFormat":1},{"label":"foldmarker","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldmarker","insertTextFormat":1},{"label":"foldmethod","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldmethod","insertTextFormat":1},{"label":"foldminlines","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"foldminlines","insertTextFormat":1},{"label":"foldnestmax","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"foldnestmax","insertTextFormat":1},{"label":"foldopen","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldopen","insertTextFormat":1},{"label":"foldtext","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"foldtext","insertTextFormat":1},{"label":"formatexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"formatexpr","insertTextFormat":1},{"label":"formatlistpat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"formatlistpat","insertTextFormat":1},{"label":"formatoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"formatoptions","insertTextFormat":1},{"label":"formatprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"formatprg","insertTextFormat":1},{"label":"fsync","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"fsync","insertTextFormat":1},{"label":"gdefault","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"gdefault","insertTextFormat":1},{"label":"grepformat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"grepformat","insertTextFormat":1},{"label":"grepprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"grepprg","insertTextFormat":1},{"label":"guicursor","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guicursor","insertTextFormat":1},{"label":"guifont","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guifont","insertTextFormat":1},{"label":"guifontwide","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guifontwide","insertTextFormat":1},{"label":"guioptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guioptions","insertTextFormat":1},{"label":"guitablabel","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guitablabel","insertTextFormat":1},{"label":"guitabtooltip","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"guitabtooltip","insertTextFormat":1},{"label":"helpfile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"helpfile","insertTextFormat":1},{"label":"helpheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"helpheight","insertTextFormat":1},{"label":"helplang","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"helplang","insertTextFormat":1},{"label":"hidden","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"hidden","insertTextFormat":1},{"label":"history","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"history","insertTextFormat":1},{"label":"hkmap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"hkmap","insertTextFormat":1},{"label":"hkmapp","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"hkmapp","insertTextFormat":1},{"label":"hlsearch","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"hlsearch","insertTextFormat":1},{"label":"icon","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"icon","insertTextFormat":1},{"label":"iconstring","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"iconstring","insertTextFormat":1},{"label":"ignorecase","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"ignorecase","insertTextFormat":1},{"label":"imcmdline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"imcmdline","insertTextFormat":1},{"label":"imdisable","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"imdisable","insertTextFormat":1},{"label":"iminsert","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"iminsert","insertTextFormat":1},{"label":"imsearch","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"imsearch","insertTextFormat":1},{"label":"inccommand","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"inccommand","insertTextFormat":1},{"label":"include","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"include","insertTextFormat":1},{"label":"includeexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"includeexpr","insertTextFormat":1},{"label":"incsearch","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"incsearch","insertTextFormat":1},{"label":"indentexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"indentexpr","insertTextFormat":1},{"label":"indentkeys","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"indentkeys","insertTextFormat":1},{"label":"infercase","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"infercase","insertTextFormat":1},{"label":"insertmode","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"insertmode","insertTextFormat":1},{"label":"isfname","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"isfname","insertTextFormat":1},{"label":"isident","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"isident","insertTextFormat":1},{"label":"iskeyword","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"iskeyword","insertTextFormat":1},{"label":"isprint","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"isprint","insertTextFormat":1},{"label":"jumpoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"jumpoptions","insertTextFormat":1},{"label":"joinspaces","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"joinspaces","insertTextFormat":1},{"label":"keymap","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"keymap","insertTextFormat":1},{"label":"keymodel","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"keymodel","insertTextFormat":1},{"label":"keywordprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"keywordprg","insertTextFormat":1},{"label":"langmap","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"langmap","insertTextFormat":1},{"label":"langmenu","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"langmenu","insertTextFormat":1},{"label":"langremap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"langremap","insertTextFormat":1},{"label":"laststatus","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"laststatus","insertTextFormat":1},{"label":"lazyredraw","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"lazyredraw","insertTextFormat":1},{"label":"linebreak","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"linebreak","insertTextFormat":1},{"label":"lines","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"lines","insertTextFormat":1},{"label":"linespace","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"linespace","insertTextFormat":1},{"label":"lisp","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"lisp","insertTextFormat":1},{"label":"lispwords","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"lispwords","insertTextFormat":1},{"label":"list","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"list","insertTextFormat":1},{"label":"listchars","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"listchars","insertTextFormat":1},{"label":"loadplugins","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"loadplugins","insertTextFormat":1},{"label":"magic","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"magic","insertTextFormat":1},{"label":"makeef","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"makeef","insertTextFormat":1},{"label":"makeencoding","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"makeencoding","insertTextFormat":1},{"label":"makeprg","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"makeprg","insertTextFormat":1},{"label":"matchpairs","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"matchpairs","insertTextFormat":1},{"label":"matchtime","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"matchtime","insertTextFormat":1},{"label":"maxcombine","kind":10,"detail":"Removed.","documentation":"","sortText":"00004","insertText":"maxcombine","insertTextFormat":1},{"label":"maxfuncdepth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"maxfuncdepth","insertTextFormat":1},{"label":"maxmapdepth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"maxmapdepth","insertTextFormat":1},{"label":"maxmempattern","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"maxmempattern","insertTextFormat":1},{"label":"menuitems","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"menuitems","insertTextFormat":1},{"label":"mkspellmem","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mkspellmem","insertTextFormat":1},{"label":"modeline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"modeline","insertTextFormat":1},{"label":"modelineexpr","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"modelineexpr","insertTextFormat":1},{"label":"modelines","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"modelines","insertTextFormat":1},{"label":"modifiable","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"modifiable","insertTextFormat":1},{"label":"modified","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"modified","insertTextFormat":1},{"label":"more","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"more","insertTextFormat":1},{"label":"mouse","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mouse","insertTextFormat":1},{"label":"mousefocus","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"mousefocus","insertTextFormat":1},{"label":"mousehide","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"mousehide","insertTextFormat":1},{"label":"mousemodel","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mousemodel","insertTextFormat":1},{"label":"mouseshape","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mouseshape","insertTextFormat":1},{"label":"mousetime","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"mousetime","insertTextFormat":1},{"label":"nrformats","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"nrformats","insertTextFormat":1},{"label":"number","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"number","insertTextFormat":1},{"label":"numberwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"numberwidth","insertTextFormat":1},{"label":"omnifunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"omnifunc","insertTextFormat":1},{"label":"opendevice","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"opendevice","insertTextFormat":1},{"label":"operatorfunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"operatorfunc","insertTextFormat":1},{"label":"packpath","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"packpath","insertTextFormat":1},{"label":"paragraphs","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"paragraphs","insertTextFormat":1},{"label":"paste","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"paste","insertTextFormat":1},{"label":"pastetoggle","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"pastetoggle","insertTextFormat":1},{"label":"patchexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"patchexpr","insertTextFormat":1},{"label":"patchmode","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"patchmode","insertTextFormat":1},{"label":"path","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"path","insertTextFormat":1},{"label":"preserveindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"preserveindent","insertTextFormat":1},{"label":"previewheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"previewheight","insertTextFormat":1},{"label":"previewwindow","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"previewwindow","insertTextFormat":1},{"label":"printdevice","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printdevice","insertTextFormat":1},{"label":"printencoding","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printencoding","insertTextFormat":1},{"label":"printexpr","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printexpr","insertTextFormat":1},{"label":"printfont","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printfont","insertTextFormat":1},{"label":"printheader","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printheader","insertTextFormat":1},{"label":"printmbcharset","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printmbcharset","insertTextFormat":1},{"label":"printmbfont","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printmbfont","insertTextFormat":1},{"label":"printoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"printoptions","insertTextFormat":1},{"label":"prompt","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"prompt","insertTextFormat":1},{"label":"pumblend","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"pumblend","insertTextFormat":1},{"label":"pumheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"pumheight","insertTextFormat":1},{"label":"pumwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"pumwidth","insertTextFormat":1},{"label":"pyxversion","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"pyxversion","insertTextFormat":1},{"label":"quoteescape","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"quoteescape","insertTextFormat":1},{"label":"readonly","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"readonly","insertTextFormat":1},{"label":"redrawdebug","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"redrawdebug","insertTextFormat":1},{"label":"redrawtime","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"redrawtime","insertTextFormat":1},{"label":"regexpengine","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"regexpengine","insertTextFormat":1},{"label":"relativenumber","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"relativenumber","insertTextFormat":1},{"label":"remap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"remap","insertTextFormat":1},{"label":"report","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"report","insertTextFormat":1},{"label":"revins","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"revins","insertTextFormat":1},{"label":"rightleft","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"rightleft","insertTextFormat":1},{"label":"rightleftcmd","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"rightleftcmd","insertTextFormat":1},{"label":"ruler","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"ruler","insertTextFormat":1},{"label":"rulerformat","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"rulerformat","insertTextFormat":1},{"label":"runtimepath","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"runtimepath","insertTextFormat":1},{"label":"scroll","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"scroll","insertTextFormat":1},{"label":"scrollback","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"scrollback","insertTextFormat":1},{"label":"scrollbind","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"scrollbind","insertTextFormat":1},{"label":"scrolljump","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"scrolljump","insertTextFormat":1},{"label":"scrolloff","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"scrolloff","insertTextFormat":1},{"label":"scrollopt","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"scrollopt","insertTextFormat":1},{"label":"sections","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"sections","insertTextFormat":1},{"label":"secure","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"secure","insertTextFormat":1},{"label":"selection","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"selection","insertTextFormat":1},{"label":"selectmode","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"selectmode","insertTextFormat":1},{"label":"sessionoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"sessionoptions","insertTextFormat":1},{"label":"shada","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shada","insertTextFormat":1},{"label":"shadafile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shadafile","insertTextFormat":1},{"label":"shell","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shell","insertTextFormat":1},{"label":"shellcmdflag","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellcmdflag","insertTextFormat":1},{"label":"shellpipe","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellpipe","insertTextFormat":1},{"label":"shellquote","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellquote","insertTextFormat":1},{"label":"shellredir","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellredir","insertTextFormat":1},{"label":"shelltemp","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"shelltemp","insertTextFormat":1},{"label":"shellxescape","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellxescape","insertTextFormat":1},{"label":"shellxquote","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shellxquote","insertTextFormat":1},{"label":"shiftround","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"shiftround","insertTextFormat":1},{"label":"shiftwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"shiftwidth","insertTextFormat":1},{"label":"shortmess","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"shortmess","insertTextFormat":1},{"label":"showbreak","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"showbreak","insertTextFormat":1},{"label":"showcmd","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"showcmd","insertTextFormat":1},{"label":"showfulltag","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"showfulltag","insertTextFormat":1},{"label":"showmatch","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"showmatch","insertTextFormat":1},{"label":"showmode","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"showmode","insertTextFormat":1},{"label":"showtabline","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"showtabline","insertTextFormat":1},{"label":"sidescroll","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"sidescroll","insertTextFormat":1},{"label":"sidescrolloff","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"sidescrolloff","insertTextFormat":1},{"label":"signcolumn","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"signcolumn","insertTextFormat":1},{"label":"smartcase","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"smartcase","insertTextFormat":1},{"label":"smartindent","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"smartindent","insertTextFormat":1},{"label":"smarttab","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"smarttab","insertTextFormat":1},{"label":"softtabstop","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"softtabstop","insertTextFormat":1},{"label":"spell","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"spell","insertTextFormat":1},{"label":"spellcapcheck","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"spellcapcheck","insertTextFormat":1},{"label":"spellfile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"spellfile","insertTextFormat":1},{"label":"spelllang","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"spelllang","insertTextFormat":1},{"label":"spellsuggest","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"spellsuggest","insertTextFormat":1},{"label":"splitbelow","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"splitbelow","insertTextFormat":1},{"label":"splitright","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"splitright","insertTextFormat":1},{"label":"startofline","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"startofline","insertTextFormat":1},{"label":"statusline","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"statusline","insertTextFormat":1},{"label":"suffixes","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"suffixes","insertTextFormat":1},{"label":"swapfile","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"swapfile","insertTextFormat":1},{"label":"switchbuf","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"switchbuf","insertTextFormat":1},{"label":"synmaxcol","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"synmaxcol","insertTextFormat":1},{"label":"syntax","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"syntax","insertTextFormat":1},{"label":"tabline","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"tabline","insertTextFormat":1},{"label":"tabpagemax","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"tabpagemax","insertTextFormat":1},{"label":"tabstop","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"tabstop","insertTextFormat":1},{"label":"tagbsearch","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"tagbsearch","insertTextFormat":1},{"label":"tagcase","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"tagcase","insertTextFormat":1},{"label":"tagfunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"tagfunc","insertTextFormat":1},{"label":"taglength","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"taglength","insertTextFormat":1},{"label":"tagrelative","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"tagrelative","insertTextFormat":1},{"label":"tags","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"tags","insertTextFormat":1},{"label":"tagstack","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"tagstack","insertTextFormat":1},{"label":"termbidi","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"termbidi","insertTextFormat":1},{"label":"termguicolors","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"termguicolors","insertTextFormat":1},{"label":"terse","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"terse","insertTextFormat":1},{"label":"textwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"textwidth","insertTextFormat":1},{"label":"thesaurus","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"thesaurus","insertTextFormat":1},{"label":"tildeop","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"tildeop","insertTextFormat":1},{"label":"timeout","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"timeout","insertTextFormat":1},{"label":"ttimeout","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"ttimeout","insertTextFormat":1},{"label":"timeoutlen","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"timeoutlen","insertTextFormat":1},{"label":"ttimeoutlen","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"ttimeoutlen","insertTextFormat":1},{"label":"title","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"title","insertTextFormat":1},{"label":"titlelen","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"titlelen","insertTextFormat":1},{"label":"titlestring","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"titlestring","insertTextFormat":1},{"label":"ttyfast","kind":10,"detail":"Removed.","documentation":"","sortText":"00004","insertText":"ttyfast","insertTextFormat":1},{"label":"undodir","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"undodir","insertTextFormat":1},{"label":"undofile","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"undofile","insertTextFormat":1},{"label":"undolevels","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"undolevels","insertTextFormat":1},{"label":"undoreload","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"undoreload","insertTextFormat":1},{"label":"updatecount","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"updatecount","insertTextFormat":1},{"label":"updatetime","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"updatetime","insertTextFormat":1},{"label":"verbose","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"verbose","insertTextFormat":1},{"label":"verbosefile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"verbosefile","insertTextFormat":1},{"label":"viewdir","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"viewdir","insertTextFormat":1},{"label":"viewoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"viewoptions","insertTextFormat":1},{"label":"virtualedit","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"virtualedit","insertTextFormat":1},{"label":"visualbell","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"visualbell","insertTextFormat":1},{"label":"warn","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"warn","insertTextFormat":1},{"label":"whichwrap","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"whichwrap","insertTextFormat":1},{"label":"wildchar","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"wildchar","insertTextFormat":1},{"label":"wildcharm","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"wildcharm","insertTextFormat":1},{"label":"wildignore","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"wildignore","insertTextFormat":1},{"label":"wildignorecase","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"wildignorecase","insertTextFormat":1},{"label":"wildmenu","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"wildmenu","insertTextFormat":1},{"label":"wildmode","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"wildmode","insertTextFormat":1},{"label":"wildoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"wildoptions","insertTextFormat":1},{"label":"winaltkeys","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"winaltkeys","insertTextFormat":1},{"label":"winblend","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"winblend","insertTextFormat":1},{"label":"window","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"window","insertTextFormat":1},{"label":"winheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"winheight","insertTextFormat":1},{"label":"winhighlight","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"winhighlight","insertTextFormat":1},{"label":"winfixheight","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"winfixheight","insertTextFormat":1},{"label":"winfixwidth","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"winfixwidth","insertTextFormat":1},{"label":"winminheight","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"winminheight","insertTextFormat":1},{"label":"winminwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"winminwidth","insertTextFormat":1},{"label":"winwidth","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"winwidth","insertTextFormat":1},{"label":"wrap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"wrap","insertTextFormat":1},{"label":"wrapmargin","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"wrapmargin","insertTextFormat":1},{"label":"wrapscan","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"wrapscan","insertTextFormat":1},{"label":"write","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"write","insertTextFormat":1},{"label":"writeany","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"writeany","insertTextFormat":1},{"label":"writebackup","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"writebackup","insertTextFormat":1},{"label":"writedelay","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"writedelay","insertTextFormat":1},{"label":"altkeymap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"altkeymap","insertTextFormat":1},{"label":"antialias","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"antialias","insertTextFormat":1},{"label":"balloonevalterm","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"balloonevalterm","insertTextFormat":1},{"label":"bioskey","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"bioskey","insertTextFormat":1},{"label":"compatible","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"compatible","insertTextFormat":1},{"label":"completeslash","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"completeslash","insertTextFormat":1},{"label":"completepopup","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"completepopup","insertTextFormat":1},{"label":"conskey","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"conskey","insertTextFormat":1},{"label":"cryptmethod","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cryptmethod","insertTextFormat":1},{"label":"cscopeverbose","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"cscopeverbose","insertTextFormat":1},{"label":"cursorlineopt","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"cursorlineopt","insertTextFormat":1},{"label":"edcompatible","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"edcompatible","insertTextFormat":1},{"label":"encoding","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"encoding","insertTextFormat":1},{"label":"esckeys","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"esckeys","insertTextFormat":1},{"label":"exrc","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"exrc","insertTextFormat":1},{"label":"fkmap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"fkmap","insertTextFormat":1},{"label":"guiheadroom","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"guiheadroom","insertTextFormat":1},{"label":"guipty","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"guipty","insertTextFormat":1},{"label":"highlight","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"highlight","insertTextFormat":1},{"label":"imactivatefunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"imactivatefunc","insertTextFormat":1},{"label":"imactivatekey","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"imactivatekey","insertTextFormat":1},{"label":"imstatusfunc","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"imstatusfunc","insertTextFormat":1},{"label":"imstyle","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"imstyle","insertTextFormat":1},{"label":"key","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"key","insertTextFormat":1},{"label":"langnoremap","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"langnoremap","insertTextFormat":1},{"label":"luadll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"luadll","insertTextFormat":1},{"label":"macatsui","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"macatsui","insertTextFormat":1},{"label":"maxmem","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"maxmem","insertTextFormat":1},{"label":"maxmemtot","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"maxmemtot","insertTextFormat":1},{"label":"mzschemedll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mzschemedll","insertTextFormat":1},{"label":"mzschemegcdll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"mzschemegcdll","insertTextFormat":1},{"label":"mzquantum","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"mzquantum","insertTextFormat":1},{"label":"osfiletype","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"osfiletype","insertTextFormat":1},{"label":"perldll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"perldll","insertTextFormat":1},{"label":"previewpopup","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"previewpopup","insertTextFormat":1},{"label":"pythondll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"pythondll","insertTextFormat":1},{"label":"pythonhome","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"pythonhome","insertTextFormat":1},{"label":"renderoptions","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"renderoptions","insertTextFormat":1},{"label":"restorescreen","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"restorescreen","insertTextFormat":1},{"label":"rubydll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"rubydll","insertTextFormat":1},{"label":"scrollfocus","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"scrollfocus","insertTextFormat":1},{"label":"shelltype","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"shelltype","insertTextFormat":1},{"label":"shortname","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"shortname","insertTextFormat":1},{"label":"swapsync","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"swapsync","insertTextFormat":1},{"label":"tcldll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"tcldll","insertTextFormat":1},{"label":"term","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"term","insertTextFormat":1},{"label":"termencoding","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"termencoding","insertTextFormat":1},{"label":"termwinkey","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"termwinkey","insertTextFormat":1},{"label":"termwinscroll","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"termwinscroll","insertTextFormat":1},{"label":"termwinsize","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"termwinsize","insertTextFormat":1},{"label":"termwintype","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"termwintype","insertTextFormat":1},{"label":"textauto","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"textauto","insertTextFormat":1},{"label":"textmode","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"textmode","insertTextFormat":1},{"label":"toolbar","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"toolbar","insertTextFormat":1},{"label":"toolbariconsize","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"toolbariconsize","insertTextFormat":1},{"label":"ttybuiltin","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"ttybuiltin","insertTextFormat":1},{"label":"ttymouse","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"ttymouse","insertTextFormat":1},{"label":"ttyscroll","kind":10,"detail":"number","documentation":"","sortText":"00004","insertText":"ttyscroll","insertTextFormat":1},{"label":"ttytype","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"ttytype","insertTextFormat":1},{"label":"varsofttabstop","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"varsofttabstop","insertTextFormat":1},{"label":"vartabstop","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"vartabstop","insertTextFormat":1},{"label":"viminfo","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"viminfo","insertTextFormat":1},{"label":"viminfofile","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"viminfofile","insertTextFormat":1},{"label":"weirdinvert","kind":10,"detail":"boolean","documentation":"","sortText":"00004","insertText":"weirdinvert","insertTextFormat":1},{"label":"wincolor","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"wincolor","insertTextFormat":1},{"label":"winptydll","kind":10,"detail":"string","documentation":"","sortText":"00004","insertText":"winptydll","insertTextFormat":1}],"features":[{"label":"acl","kind":20,"documentation":"","sortText":"00004","insertText":"acl","insertTextFormat":1},{"label":"bsd","kind":20,"documentation":"","sortText":"00004","insertText":"bsd","insertTextFormat":1},{"label":"iconv","kind":20,"documentation":"","sortText":"00004","insertText":"iconv","insertTextFormat":1},{"label":"+shellslash","kind":20,"documentation":"","sortText":"00004","insertText":"+shellslash","insertTextFormat":1},{"label":"clipboard","kind":20,"documentation":"","sortText":"00004","insertText":"clipboard","insertTextFormat":1},{"label":"mac","kind":20,"documentation":"","sortText":"00004","insertText":"mac","insertTextFormat":1},{"label":"nvim","kind":20,"documentation":"","sortText":"00004","insertText":"nvim","insertTextFormat":1},{"label":"python2","kind":20,"documentation":"","sortText":"00004","insertText":"python2","insertTextFormat":1},{"label":"python3","kind":20,"documentation":"","sortText":"00004","insertText":"python3","insertTextFormat":1},{"label":"pythonx","kind":20,"documentation":"","sortText":"00004","insertText":"pythonx","insertTextFormat":1},{"label":"ttyin","kind":20,"documentation":"","sortText":"00004","insertText":"ttyin","insertTextFormat":1},{"label":"ttyout","kind":20,"documentation":"","sortText":"00004","insertText":"ttyout","insertTextFormat":1},{"label":"unix","kind":20,"documentation":"","sortText":"00004","insertText":"unix","insertTextFormat":1},{"label":"vim_starting","kind":20,"documentation":"","sortText":"00004","insertText":"vim_starting","insertTextFormat":1},{"label":"win32","kind":20,"documentation":"","sortText":"00004","insertText":"win32","insertTextFormat":1},{"label":"win64","kind":20,"documentation":"","sortText":"00004","insertText":"win64","insertTextFormat":1},{"label":"wsl","kind":20,"documentation":"","sortText":"00004","insertText":"wsl","insertTextFormat":1},{"label":"all_builtin_terms","kind":20,"documentation":"","sortText":"00004","insertText":"all_builtin_terms","insertTextFormat":1},{"label":"amiga","kind":20,"documentation":"","sortText":"00004","insertText":"amiga","insertTextFormat":1},{"label":"arabic","kind":20,"documentation":"","sortText":"00004","insertText":"arabic","insertTextFormat":1},{"label":"arp","kind":20,"documentation":"","sortText":"00004","insertText":"arp","insertTextFormat":1},{"label":"autocmd","kind":20,"documentation":"","sortText":"00004","insertText":"autocmd","insertTextFormat":1},{"label":"autochdir","kind":20,"documentation":"","sortText":"00004","insertText":"autochdir","insertTextFormat":1},{"label":"autoservername","kind":20,"documentation":"","sortText":"00004","insertText":"autoservername","insertTextFormat":1},{"label":"balloon_eval","kind":20,"documentation":"","sortText":"00004","insertText":"balloon_eval","insertTextFormat":1},{"label":"balloon_multiline","kind":20,"documentation":"","sortText":"00004","insertText":"balloon_multiline","insertTextFormat":1},{"label":"beos","kind":20,"documentation":"","sortText":"00004","insertText":"beos","insertTextFormat":1},{"label":"browse","kind":20,"documentation":"","sortText":"00004","insertText":"browse","insertTextFormat":1},{"label":"browsefilter","kind":20,"documentation":"","sortText":"00004","insertText":"browsefilter","insertTextFormat":1},{"label":"builtin_terms","kind":20,"documentation":"","sortText":"00004","insertText":"builtin_terms","insertTextFormat":1},{"label":"byte_offset","kind":20,"documentation":"","sortText":"00004","insertText":"byte_offset","insertTextFormat":1},{"label":"cindent","kind":20,"documentation":"","sortText":"00004","insertText":"cindent","insertTextFormat":1},{"label":"clientserver","kind":20,"documentation":"","sortText":"00004","insertText":"clientserver","insertTextFormat":1},{"label":"clipboard_working","kind":20,"documentation":"","sortText":"00004","insertText":"clipboard_working","insertTextFormat":1},{"label":"cmdline_compl","kind":20,"documentation":"","sortText":"00004","insertText":"cmdline_compl","insertTextFormat":1},{"label":"cmdline_hist","kind":20,"documentation":"","sortText":"00004","insertText":"cmdline_hist","insertTextFormat":1},{"label":"cmdline_info","kind":20,"documentation":"","sortText":"00004","insertText":"cmdline_info","insertTextFormat":1},{"label":"comments","kind":20,"documentation":"","sortText":"00004","insertText":"comments","insertTextFormat":1},{"label":"compatible","kind":20,"documentation":"","sortText":"00004","insertText":"compatible","insertTextFormat":1},{"label":"conpty","kind":20,"documentation":"","sortText":"00004","insertText":"conpty","insertTextFormat":1},{"label":"cryptv","kind":20,"documentation":"","sortText":"00004","insertText":"cryptv","insertTextFormat":1},{"label":"cscope","kind":20,"documentation":"","sortText":"00004","insertText":"cscope","insertTextFormat":1},{"label":"cursorbind","kind":20,"documentation":"","sortText":"00004","insertText":"cursorbind","insertTextFormat":1},{"label":"debug","kind":20,"documentation":"","sortText":"00004","insertText":"debug","insertTextFormat":1},{"label":"dialog_con","kind":20,"documentation":"","sortText":"00004","insertText":"dialog_con","insertTextFormat":1},{"label":"dialog_gui","kind":20,"documentation":"","sortText":"00004","insertText":"dialog_gui","insertTextFormat":1},{"label":"diff","kind":20,"documentation":"","sortText":"00004","insertText":"diff","insertTextFormat":1},{"label":"digraphs","kind":20,"documentation":"","sortText":"00004","insertText":"digraphs","insertTextFormat":1},{"label":"directx","kind":20,"documentation":"","sortText":"00004","insertText":"directx","insertTextFormat":1},{"label":"dnd","kind":20,"documentation":"","sortText":"00004","insertText":"dnd","insertTextFormat":1},{"label":"ebcdic","kind":20,"documentation":"","sortText":"00004","insertText":"ebcdic","insertTextFormat":1},{"label":"emacs_tags","kind":20,"documentation":"","sortText":"00004","insertText":"emacs_tags","insertTextFormat":1},{"label":"eval","kind":20,"documentation":"","sortText":"00004","insertText":"eval","insertTextFormat":1},{"label":"true,","kind":20,"documentation":"","sortText":"00004","insertText":"true,","insertTextFormat":1},{"label":"ex_extra","kind":20,"documentation":"","sortText":"00004","insertText":"ex_extra","insertTextFormat":1},{"label":"extra_search","kind":20,"documentation":"","sortText":"00004","insertText":"extra_search","insertTextFormat":1},{"label":"farsi","kind":20,"documentation":"","sortText":"00004","insertText":"farsi","insertTextFormat":1},{"label":"file_in_path","kind":20,"documentation":"","sortText":"00004","insertText":"file_in_path","insertTextFormat":1},{"label":"filterpipe","kind":20,"documentation":"","sortText":"00004","insertText":"filterpipe","insertTextFormat":1},{"label":"read/write/filter","kind":20,"documentation":"","sortText":"00004","insertText":"read/write/filter","insertTextFormat":1},{"label":"find_in_path","kind":20,"documentation":"","sortText":"00004","insertText":"find_in_path","insertTextFormat":1},{"label":"float","kind":20,"documentation":"","sortText":"00004","insertText":"float","insertTextFormat":1},{"label":"fname_case","kind":20,"documentation":"","sortText":"00004","insertText":"fname_case","insertTextFormat":1},{"label":"Windows","kind":20,"documentation":"","sortText":"00004","insertText":"Windows","insertTextFormat":1},{"label":"folding","kind":20,"documentation":"","sortText":"00004","insertText":"folding","insertTextFormat":1},{"label":"footer","kind":20,"documentation":"","sortText":"00004","insertText":"footer","insertTextFormat":1},{"label":"fork","kind":20,"documentation":"","sortText":"00004","insertText":"fork","insertTextFormat":1},{"label":"gettext","kind":20,"documentation":"","sortText":"00004","insertText":"gettext","insertTextFormat":1},{"label":"gui","kind":20,"documentation":"","sortText":"00004","insertText":"gui","insertTextFormat":1},{"label":"gui_athena","kind":20,"documentation":"","sortText":"00004","insertText":"gui_athena","insertTextFormat":1},{"label":"gui_gnome","kind":20,"documentation":"","sortText":"00004","insertText":"gui_gnome","insertTextFormat":1},{"label":"gui_gtk","kind":20,"documentation":"","sortText":"00004","insertText":"gui_gtk","insertTextFormat":1},{"label":"gui_gtk2","kind":20,"documentation":"","sortText":"00004","insertText":"gui_gtk2","insertTextFormat":1},{"label":"gui_gtk3","kind":20,"documentation":"","sortText":"00004","insertText":"gui_gtk3","insertTextFormat":1},{"label":"gui_mac","kind":20,"documentation":"","sortText":"00004","insertText":"gui_mac","insertTextFormat":1},{"label":"gui_motif","kind":20,"documentation":"","sortText":"00004","insertText":"gui_motif","insertTextFormat":1},{"label":"gui_photon","kind":20,"documentation":"","sortText":"00004","insertText":"gui_photon","insertTextFormat":1},{"label":"gui_running","kind":20,"documentation":"","sortText":"00004","insertText":"gui_running","insertTextFormat":1},{"label":"gui_win32","kind":20,"documentation":"","sortText":"00004","insertText":"gui_win32","insertTextFormat":1},{"label":"gui_win32s","kind":20,"documentation":"","sortText":"00004","insertText":"gui_win32s","insertTextFormat":1},{"label":"hangul_input","kind":20,"documentation":"","sortText":"00004","insertText":"hangul_input","insertTextFormat":1},{"label":"hpux","kind":20,"documentation":"","sortText":"00004","insertText":"hpux","insertTextFormat":1},{"label":"insert_expand","kind":20,"documentation":"","sortText":"00004","insertText":"insert_expand","insertTextFormat":1},{"label":"Insert","kind":20,"documentation":"","sortText":"00004","insertText":"Insert","insertTextFormat":1},{"label":"jumplist","kind":20,"documentation":"","sortText":"00004","insertText":"jumplist","insertTextFormat":1},{"label":"keymap","kind":20,"documentation":"","sortText":"00004","insertText":"keymap","insertTextFormat":1},{"label":"lambda","kind":20,"documentation":"","sortText":"00004","insertText":"lambda","insertTextFormat":1},{"label":"langmap","kind":20,"documentation":"","sortText":"00004","insertText":"langmap","insertTextFormat":1},{"label":"libcall","kind":20,"documentation":"","sortText":"00004","insertText":"libcall","insertTextFormat":1},{"label":"linebreak","kind":20,"documentation":"","sortText":"00004","insertText":"linebreak","insertTextFormat":1},{"label":"\'breakindent\'","kind":20,"documentation":"","sortText":"00004","insertText":"\'breakindent\'","insertTextFormat":1},{"label":"linux","kind":20,"documentation":"","sortText":"00004","insertText":"linux","insertTextFormat":1},{"label":"lispindent","kind":20,"documentation":"","sortText":"00004","insertText":"lispindent","insertTextFormat":1},{"label":"listcmds","kind":20,"documentation":"","sortText":"00004","insertText":"listcmds","insertTextFormat":1},{"label":"and","kind":20,"documentation":"","sortText":"00004","insertText":"and","insertTextFormat":1},{"label":"localmap","kind":20,"documentation":"","sortText":"00004","insertText":"localmap","insertTextFormat":1},{"label":"lua","kind":20,"documentation":"","sortText":"00004","insertText":"lua","insertTextFormat":1},{"label":"macunix","kind":20,"documentation":"","sortText":"00004","insertText":"macunix","insertTextFormat":1},{"label":"menu","kind":20,"documentation":"","sortText":"00004","insertText":"menu","insertTextFormat":1},{"label":"mksession","kind":20,"documentation":"","sortText":"00004","insertText":"mksession","insertTextFormat":1},{"label":"modify_fname","kind":20,"documentation":"","sortText":"00004","insertText":"modify_fname","insertTextFormat":1},{"label":"(always","kind":20,"documentation":"","sortText":"00004","insertText":"(always","insertTextFormat":1},{"label":"mouse","kind":20,"documentation":"","sortText":"00004","insertText":"mouse","insertTextFormat":1},{"label":"mouse_dec","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_dec","insertTextFormat":1},{"label":"mouse_gpm","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_gpm","insertTextFormat":1},{"label":"mouse_gpm_enabled","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_gpm_enabled","insertTextFormat":1},{"label":"mouse_netterm","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_netterm","insertTextFormat":1},{"label":"mouse_pterm","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_pterm","insertTextFormat":1},{"label":"mouse_sysmouse","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_sysmouse","insertTextFormat":1},{"label":"mouse_sgr","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_sgr","insertTextFormat":1},{"label":"mouse_urxvt","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_urxvt","insertTextFormat":1},{"label":"mouse_xterm","kind":20,"documentation":"","sortText":"00004","insertText":"mouse_xterm","insertTextFormat":1},{"label":"mouseshape","kind":20,"documentation":"","sortText":"00004","insertText":"mouseshape","insertTextFormat":1},{"label":"multi_byte","kind":20,"documentation":"","sortText":"00004","insertText":"multi_byte","insertTextFormat":1},{"label":"multi_byte_encoding","kind":20,"documentation":"","sortText":"00004","insertText":"multi_byte_encoding","insertTextFormat":1},{"label":"multi_byte_ime","kind":20,"documentation":"","sortText":"00004","insertText":"multi_byte_ime","insertTextFormat":1},{"label":"multi_lang","kind":20,"documentation":"","sortText":"00004","insertText":"multi_lang","insertTextFormat":1},{"label":"mzscheme","kind":20,"documentation":"","sortText":"00004","insertText":"mzscheme","insertTextFormat":1},{"label":"netbeans_enabled","kind":20,"documentation":"","sortText":"00004","insertText":"netbeans_enabled","insertTextFormat":1},{"label":"netbeans_intg","kind":20,"documentation":"","sortText":"00004","insertText":"netbeans_intg","insertTextFormat":1},{"label":"num64","kind":20,"documentation":"","sortText":"00004","insertText":"num64","insertTextFormat":1},{"label":"ole","kind":20,"documentation":"","sortText":"00004","insertText":"ole","insertTextFormat":1},{"label":"osx","kind":20,"documentation":"","sortText":"00004","insertText":"osx","insertTextFormat":1},{"label":"osxdarwin","kind":20,"documentation":"","sortText":"00004","insertText":"osxdarwin","insertTextFormat":1},{"label":"packages","kind":20,"documentation":"","sortText":"00004","insertText":"packages","insertTextFormat":1},{"label":"path_extra","kind":20,"documentation":"","sortText":"00004","insertText":"path_extra","insertTextFormat":1},{"label":"perl","kind":20,"documentation":"","sortText":"00004","insertText":"perl","insertTextFormat":1},{"label":"persistent_undo","kind":20,"documentation":"","sortText":"00004","insertText":"persistent_undo","insertTextFormat":1},{"label":"postscript","kind":20,"documentation":"","sortText":"00004","insertText":"postscript","insertTextFormat":1},{"label":"printer","kind":20,"documentation":"","sortText":"00004","insertText":"printer","insertTextFormat":1},{"label":"profile","kind":20,"documentation":"","sortText":"00004","insertText":"profile","insertTextFormat":1},{"label":"python","kind":20,"documentation":"","sortText":"00004","insertText":"python","insertTextFormat":1},{"label":"python_compiled","kind":20,"documentation":"","sortText":"00004","insertText":"python_compiled","insertTextFormat":1},{"label":"python_dynamic","kind":20,"documentation":"","sortText":"00004","insertText":"python_dynamic","insertTextFormat":1},{"label":"python3_compiled","kind":20,"documentation":"","sortText":"00004","insertText":"python3_compiled","insertTextFormat":1},{"label":"python3_dynamic","kind":20,"documentation":"","sortText":"00004","insertText":"python3_dynamic","insertTextFormat":1},{"label":"qnx","kind":20,"documentation":"","sortText":"00004","insertText":"qnx","insertTextFormat":1},{"label":"quickfix","kind":20,"documentation":"","sortText":"00004","insertText":"quickfix","insertTextFormat":1},{"label":"reltime","kind":20,"documentation":"","sortText":"00004","insertText":"reltime","insertTextFormat":1},{"label":"rightleft","kind":20,"documentation":"","sortText":"00004","insertText":"rightleft","insertTextFormat":1},{"label":"ruby","kind":20,"documentation":"","sortText":"00004","insertText":"ruby","insertTextFormat":1},{"label":"scrollbind","kind":20,"documentation":"","sortText":"00004","insertText":"scrollbind","insertTextFormat":1},{"label":"showcmd","kind":20,"documentation":"","sortText":"00004","insertText":"showcmd","insertTextFormat":1},{"label":"signs","kind":20,"documentation":"","sortText":"00004","insertText":"signs","insertTextFormat":1},{"label":"smartindent","kind":20,"documentation":"","sortText":"00004","insertText":"smartindent","insertTextFormat":1},{"label":"sound","kind":20,"documentation":"","sortText":"00004","insertText":"sound","insertTextFormat":1},{"label":"spell","kind":20,"documentation":"","sortText":"00004","insertText":"spell","insertTextFormat":1},{"label":"startuptime","kind":20,"documentation":"","sortText":"00004","insertText":"startuptime","insertTextFormat":1},{"label":"statusline","kind":20,"documentation":"","sortText":"00004","insertText":"statusline","insertTextFormat":1},{"label":"sun","kind":20,"documentation":"","sortText":"00004","insertText":"sun","insertTextFormat":1},{"label":"sun_workshop","kind":20,"documentation":"","sortText":"00004","insertText":"sun_workshop","insertTextFormat":1},{"label":"syntax","kind":20,"documentation":"","sortText":"00004","insertText":"syntax","insertTextFormat":1},{"label":"syntax_items","kind":20,"documentation":"","sortText":"00004","insertText":"syntax_items","insertTextFormat":1},{"label":"current","kind":20,"documentation":"","sortText":"00004","insertText":"current","insertTextFormat":1},{"label":"system","kind":20,"documentation":"","sortText":"00004","insertText":"system","insertTextFormat":1},{"label":"tag_binary","kind":20,"documentation":"","sortText":"00004","insertText":"tag_binary","insertTextFormat":1},{"label":"tag_old_static","kind":20,"documentation":"","sortText":"00004","insertText":"tag_old_static","insertTextFormat":1},{"label":"tcl","kind":20,"documentation":"","sortText":"00004","insertText":"tcl","insertTextFormat":1},{"label":"termguicolors","kind":20,"documentation":"","sortText":"00004","insertText":"termguicolors","insertTextFormat":1},{"label":"terminal","kind":20,"documentation":"","sortText":"00004","insertText":"terminal","insertTextFormat":1},{"label":"terminfo","kind":20,"documentation":"","sortText":"00004","insertText":"terminfo","insertTextFormat":1},{"label":"termresponse","kind":20,"documentation":"","sortText":"00004","insertText":"termresponse","insertTextFormat":1},{"label":"textobjects","kind":20,"documentation":"","sortText":"00004","insertText":"textobjects","insertTextFormat":1},{"label":"textprop","kind":20,"documentation":"","sortText":"00004","insertText":"textprop","insertTextFormat":1},{"label":"tgetent","kind":20,"documentation":"","sortText":"00004","insertText":"tgetent","insertTextFormat":1},{"label":"or","kind":20,"documentation":"","sortText":"00004","insertText":"or","insertTextFormat":1},{"label":"timers","kind":20,"documentation":"","sortText":"00004","insertText":"timers","insertTextFormat":1},{"label":"title","kind":20,"documentation":"","sortText":"00004","insertText":"title","insertTextFormat":1},{"label":"toolbar","kind":20,"documentation":"","sortText":"00004","insertText":"toolbar","insertTextFormat":1},{"label":"unnamedplus","kind":20,"documentation":"","sortText":"00004","insertText":"unnamedplus","insertTextFormat":1},{"label":"user_commands","kind":20,"documentation":"","sortText":"00004","insertText":"user_commands","insertTextFormat":1},{"label":"vartabs","kind":20,"documentation":"","sortText":"00004","insertText":"vartabs","insertTextFormat":1},{"label":"vcon","kind":20,"documentation":"","sortText":"00004","insertText":"vcon","insertTextFormat":1},{"label":"\'termguicolors\'.","kind":20,"documentation":"","sortText":"00004","insertText":"\'termguicolors\'.","insertTextFormat":1},{"label":"vertsplit","kind":20,"documentation":"","sortText":"00004","insertText":"vertsplit","insertTextFormat":1},{"label":"viminfo","kind":20,"documentation":"","sortText":"00004","insertText":"viminfo","insertTextFormat":1},{"label":"vimscript-1","kind":20,"documentation":"","sortText":"00004","insertText":"vimscript-1","insertTextFormat":1},{"label":"vimscript-2","kind":20,"documentation":"","sortText":"00004","insertText":"vimscript-2","insertTextFormat":1},{"label":"vimscript-3","kind":20,"documentation":"","sortText":"00004","insertText":"vimscript-3","insertTextFormat":1},{"label":"virtualedit","kind":20,"documentation":"","sortText":"00004","insertText":"virtualedit","insertTextFormat":1},{"label":"visual","kind":20,"documentation":"","sortText":"00004","insertText":"visual","insertTextFormat":1},{"label":"visualextra","kind":20,"documentation":"","sortText":"00004","insertText":"visualextra","insertTextFormat":1},{"label":"true)","kind":20,"documentation":"","sortText":"00004","insertText":"true)","insertTextFormat":1},{"label":"vms","kind":20,"documentation":"","sortText":"00004","insertText":"vms","insertTextFormat":1},{"label":"vreplace","kind":20,"documentation":"","sortText":"00004","insertText":"vreplace","insertTextFormat":1},{"label":"vtp","kind":20,"documentation":"","sortText":"00004","insertText":"vtp","insertTextFormat":1},{"label":"out","kind":20,"documentation":"","sortText":"00004","insertText":"out","insertTextFormat":1},{"label":"wildignore","kind":20,"documentation":"","sortText":"00004","insertText":"wildignore","insertTextFormat":1},{"label":"wildmenu","kind":20,"documentation":"","sortText":"00004","insertText":"wildmenu","insertTextFormat":1},{"label":"win16","kind":20,"documentation":"","sortText":"00004","insertText":"win16","insertTextFormat":1},{"label":"64","kind":20,"documentation":"","sortText":"00004","insertText":"64","insertTextFormat":1},{"label":"win32unix","kind":20,"documentation":"","sortText":"00004","insertText":"win32unix","insertTextFormat":1},{"label":"win95","kind":20,"documentation":"","sortText":"00004","insertText":"win95","insertTextFormat":1},{"label":"winaltkeys","kind":20,"documentation":"","sortText":"00004","insertText":"winaltkeys","insertTextFormat":1},{"label":"windows","kind":20,"documentation":"","sortText":"00004","insertText":"windows","insertTextFormat":1},{"label":"writebackup","kind":20,"documentation":"","sortText":"00004","insertText":"writebackup","insertTextFormat":1},{"label":"xfontset","kind":20,"documentation":"","sortText":"00004","insertText":"xfontset","insertTextFormat":1},{"label":"xim","kind":20,"documentation":"","sortText":"00004","insertText":"xim","insertTextFormat":1},{"label":"xpm","kind":20,"documentation":"","sortText":"00004","insertText":"xpm","insertTextFormat":1},{"label":"xpm_w32","kind":20,"documentation":"","sortText":"00004","insertText":"xpm_w32","insertTextFormat":1},{"label":"backward","kind":20,"documentation":"","sortText":"00004","insertText":"backward","insertTextFormat":1},{"label":"xsmp","kind":20,"documentation":"","sortText":"00004","insertText":"xsmp","insertTextFormat":1},{"label":"xsmp_interact","kind":20,"documentation":"","sortText":"00004","insertText":"xsmp_interact","insertTextFormat":1},{"label":"xterm_clipboard","kind":20,"documentation":"","sortText":"00004","insertText":"xterm_clipboard","insertTextFormat":1},{"label":"xterm_save","kind":20,"documentation":"","sortText":"00004","insertText":"xterm_save","insertTextFormat":1},{"label":"xterm","kind":20,"documentation":"","sortText":"00004","insertText":"xterm","insertTextFormat":1},{"label":"x11","kind":20,"documentation":"","sortText":"00004","insertText":"x11","insertTextFormat":1}],"expandKeywords":[{"label":"<cfile>","kind":14,"documentation":"file name under the cursor","sortText":"00004","insertText":"<cfile>","insertTextFormat":1},{"label":"<afile>","kind":14,"documentation":"autocmd file name","sortText":"00004","insertText":"<afile>","insertTextFormat":1},{"label":"<abuf>","kind":14,"documentation":"autocmd buffer number (as a String!)","sortText":"00004","insertText":"<abuf>","insertTextFormat":1},{"label":"<amatch>","kind":14,"documentation":"autocmd matched name","sortText":"00004","insertText":"<amatch>","insertTextFormat":1},{"label":"<sfile>","kind":14,"documentation":"sourced script file or function name","sortText":"00004","insertText":"<sfile>","insertTextFormat":1},{"label":"<slnum>","kind":14,"documentation":"sourced script file line number","sortText":"00004","insertText":"<slnum>","insertTextFormat":1},{"label":"<cword>","kind":14,"documentation":"word under the cursor","sortText":"00004","insertText":"<cword>","insertTextFormat":1},{"label":"<cWORD>","kind":14,"documentation":"WORD under the cursor","sortText":"00004","insertText":"<cWORD>","insertTextFormat":1},{"label":"<client>","kind":14,"documentation":"the {clientid} of the last received message `server2client()`","sortText":"00004","insertText":"<client>","insertTextFormat":1}],"autocmds":[{"label":"BufNewFile","kind":20,"documentation":"starting to edit a file that doesn\'t exist","sortText":"00004","insertText":"BufNewFile","insertTextFormat":1},{"label":"BufReadPre","kind":20,"documentation":"starting to edit a new buffer, before reading the file","sortText":"00004","insertText":"BufReadPre","insertTextFormat":1},{"label":"BufRead","kind":20,"documentation":"starting to edit a new buffer, after reading the file","sortText":"00004","insertText":"BufRead","insertTextFormat":1},{"label":"BufReadPost","kind":20,"documentation":"starting to edit a new buffer, after reading the file","sortText":"00004","insertText":"BufReadPost","insertTextFormat":1},{"label":"BufReadCmd","kind":20,"documentation":"before starting to edit a new buffer |Cmd-event|","sortText":"00004","insertText":"BufReadCmd","insertTextFormat":1},{"label":"FileReadPre","kind":20,"documentation":"before reading a file with a \\":read\\" command","sortText":"00004","insertText":"FileReadPre","insertTextFormat":1},{"label":"FileReadPost","kind":20,"documentation":"after reading a file with a \\":read\\" command","sortText":"00004","insertText":"FileReadPost","insertTextFormat":1},{"label":"FileReadCmd","kind":20,"documentation":"before reading a file with a \\":read\\" command |Cmd-event|","sortText":"00004","insertText":"FileReadCmd","insertTextFormat":1},{"label":"FilterReadPre","kind":20,"documentation":"before reading a file from a filter command","sortText":"00004","insertText":"FilterReadPre","insertTextFormat":1},{"label":"FilterReadPost","kind":20,"documentation":"after reading a file from a filter command","sortText":"00004","insertText":"FilterReadPost","insertTextFormat":1},{"label":"StdinReadPre","kind":20,"documentation":"before reading from stdin into the buffer","sortText":"00004","insertText":"StdinReadPre","insertTextFormat":1},{"label":"StdinReadPost","kind":20,"documentation":"After reading from the stdin into the buffer","sortText":"00004","insertText":"StdinReadPost","insertTextFormat":1},{"label":"BufWrite","kind":20,"documentation":"starting to write the whole buffer to a file","sortText":"00004","insertText":"BufWrite","insertTextFormat":1},{"label":"BufWritePre","kind":20,"documentation":"starting to write the whole buffer to a file","sortText":"00004","insertText":"BufWritePre","insertTextFormat":1},{"label":"BufWritePost","kind":20,"documentation":"after writing the whole buffer to a file","sortText":"00004","insertText":"BufWritePost","insertTextFormat":1},{"label":"BufWriteCmd","kind":20,"documentation":"before writing the whole buffer to a file |Cmd-event|","sortText":"00004","insertText":"BufWriteCmd","insertTextFormat":1},{"label":"FileWritePre","kind":20,"documentation":"starting to write part of a buffer to a file","sortText":"00004","insertText":"FileWritePre","insertTextFormat":1},{"label":"FileWritePost","kind":20,"documentation":"after writing part of a buffer to a file","sortText":"00004","insertText":"FileWritePost","insertTextFormat":1},{"label":"FileWriteCmd","kind":20,"documentation":"before writing part of a buffer to a file |Cmd-event|","sortText":"00004","insertText":"FileWriteCmd","insertTextFormat":1},{"label":"FileAppendPre","kind":20,"documentation":"starting to append to a file","sortText":"00004","insertText":"FileAppendPre","insertTextFormat":1},{"label":"FileAppendPost","kind":20,"documentation":"after appending to a file","sortText":"00004","insertText":"FileAppendPost","insertTextFormat":1},{"label":"FileAppendCmd","kind":20,"documentation":"before appending to a file |Cmd-event|","sortText":"00004","insertText":"FileAppendCmd","insertTextFormat":1},{"label":"FilterWritePre","kind":20,"documentation":"starting to write a file for a filter command or diff","sortText":"00004","insertText":"FilterWritePre","insertTextFormat":1},{"label":"FilterWritePost","kind":20,"documentation":"after writing a file for a filter command or diff","sortText":"00004","insertText":"FilterWritePost","insertTextFormat":1},{"label":"BufAdd","kind":20,"documentation":"just after adding a buffer to the buffer list","sortText":"00004","insertText":"BufAdd","insertTextFormat":1},{"label":"BufDelete","kind":20,"documentation":"before deleting a buffer from the buffer list","sortText":"00004","insertText":"BufDelete","insertTextFormat":1},{"label":"BufWipeout","kind":20,"documentation":"before completely deleting a buffer","sortText":"00004","insertText":"BufWipeout","insertTextFormat":1},{"label":"BufFilePre","kind":20,"documentation":"before changing the name of the current buffer","sortText":"00004","insertText":"BufFilePre","insertTextFormat":1},{"label":"BufFilePost","kind":20,"documentation":"after changing the name of the current buffer","sortText":"00004","insertText":"BufFilePost","insertTextFormat":1},{"label":"BufEnter","kind":20,"documentation":"after entering a buffer","sortText":"00004","insertText":"BufEnter","insertTextFormat":1},{"label":"BufLeave","kind":20,"documentation":"before leaving to another buffer","sortText":"00004","insertText":"BufLeave","insertTextFormat":1},{"label":"BufWinEnter","kind":20,"documentation":"after a buffer is displayed in a window","sortText":"00004","insertText":"BufWinEnter","insertTextFormat":1},{"label":"BufWinLeave","kind":20,"documentation":"before a buffer is removed from a window","sortText":"00004","insertText":"BufWinLeave","insertTextFormat":1},{"label":"BufUnload","kind":20,"documentation":"before unloading a buffer","sortText":"00004","insertText":"BufUnload","insertTextFormat":1},{"label":"BufHidden","kind":20,"documentation":"just after a buffer has become hidden","sortText":"00004","insertText":"BufHidden","insertTextFormat":1},{"label":"BufNew","kind":20,"documentation":"just after creating a new buffer","sortText":"00004","insertText":"BufNew","insertTextFormat":1},{"label":"SwapExists","kind":20,"documentation":"detected an existing swap file","sortText":"00004","insertText":"SwapExists","insertTextFormat":1},{"label":"TermOpen","kind":20,"documentation":"starting a terminal job","sortText":"00004","insertText":"TermOpen","insertTextFormat":1},{"label":"TermEnter","kind":20,"documentation":"entering Terminal-mode","sortText":"00004","insertText":"TermEnter","insertTextFormat":1},{"label":"TermLeave","kind":20,"documentation":"leaving Terminal-mode","sortText":"00004","insertText":"TermLeave","insertTextFormat":1},{"label":"TermClose","kind":20,"documentation":"stopping a terminal job","sortText":"00004","insertText":"TermClose","insertTextFormat":1},{"label":"ChanOpen","kind":20,"documentation":"after a channel opened","sortText":"00004","insertText":"ChanOpen","insertTextFormat":1},{"label":"ChanInfo","kind":20,"documentation":"after a channel has its state changed","sortText":"00004","insertText":"ChanInfo","insertTextFormat":1},{"label":"FileType","kind":20,"documentation":"when the \'filetype\' option has been set","sortText":"00004","insertText":"FileType","insertTextFormat":1},{"label":"Syntax","kind":20,"documentation":"when the \'syntax\' option has been set","sortText":"00004","insertText":"Syntax","insertTextFormat":1},{"label":"OptionSet","kind":20,"documentation":"after setting any option","sortText":"00004","insertText":"OptionSet","insertTextFormat":1},{"label":"VimEnter","kind":20,"documentation":"after doing all the startup stuff","sortText":"00004","insertText":"VimEnter","insertTextFormat":1},{"label":"UIEnter","kind":20,"documentation":"after a UI attaches","sortText":"00004","insertText":"UIEnter","insertTextFormat":1},{"label":"UILeave","kind":20,"documentation":"after a UI detaches","sortText":"00004","insertText":"UILeave","insertTextFormat":1},{"label":"TermResponse","kind":20,"documentation":"after the terminal response to t_RV is received","sortText":"00004","insertText":"TermResponse","insertTextFormat":1},{"label":"QuitPre","kind":20,"documentation":"when using `:quit`, before deciding whether to exit","sortText":"00004","insertText":"QuitPre","insertTextFormat":1},{"label":"ExitPre","kind":20,"documentation":"when using a command that may make Vim exit","sortText":"00004","insertText":"ExitPre","insertTextFormat":1},{"label":"VimLeavePre","kind":20,"documentation":"before exiting Nvim, before writing the shada file","sortText":"00004","insertText":"VimLeavePre","insertTextFormat":1},{"label":"VimLeave","kind":20,"documentation":"before exiting Nvim, after writing the shada file","sortText":"00004","insertText":"VimLeave","insertTextFormat":1},{"label":"VimResume","kind":20,"documentation":"after Nvim is resumed","sortText":"00004","insertText":"VimResume","insertTextFormat":1},{"label":"VimSuspend","kind":20,"documentation":"before Nvim is suspended","sortText":"00004","insertText":"VimSuspend","insertTextFormat":1},{"label":"DiffUpdated","kind":20,"documentation":"after diffs have been updated","sortText":"00004","insertText":"DiffUpdated","insertTextFormat":1},{"label":"DirChanged","kind":20,"documentation":"after the |current-directory| was changed","sortText":"00004","insertText":"DirChanged","insertTextFormat":1},{"label":"FileChangedShell","kind":20,"documentation":"Vim notices that a file changed since editing started","sortText":"00004","insertText":"FileChangedShell","insertTextFormat":1},{"label":"FileChangedShellPost","kind":20,"documentation":"after handling a file changed since editing started","sortText":"00004","insertText":"FileChangedShellPost","insertTextFormat":1},{"label":"FileChangedRO","kind":20,"documentation":"before making the first change to a read-only file","sortText":"00004","insertText":"FileChangedRO","insertTextFormat":1},{"label":"ShellCmdPost","kind":20,"documentation":"after executing a shell command","sortText":"00004","insertText":"ShellCmdPost","insertTextFormat":1},{"label":"ShellFilterPost","kind":20,"documentation":"after filtering with a shell command","sortText":"00004","insertText":"ShellFilterPost","insertTextFormat":1},{"label":"CmdUndefined","kind":20,"documentation":"a user command is used but it isn\'t defined","sortText":"00004","insertText":"CmdUndefined","insertTextFormat":1},{"label":"FuncUndefined","kind":20,"documentation":"a user function is used but it isn\'t defined","sortText":"00004","insertText":"FuncUndefined","insertTextFormat":1},{"label":"SpellFileMissing","kind":20,"documentation":"a spell file is used but it can\'t be found","sortText":"00004","insertText":"SpellFileMissing","insertTextFormat":1},{"label":"SourcePre","kind":20,"documentation":"before sourcing a Vim script","sortText":"00004","insertText":"SourcePre","insertTextFormat":1},{"label":"SourcePost","kind":20,"documentation":"after sourcing a Vim script","sortText":"00004","insertText":"SourcePost","insertTextFormat":1},{"label":"SourceCmd","kind":20,"documentation":"before sourcing a Vim script |Cmd-event|","sortText":"00004","insertText":"SourceCmd","insertTextFormat":1},{"label":"VimResized","kind":20,"documentation":"after the Vim window size changed","sortText":"00004","insertText":"VimResized","insertTextFormat":1},{"label":"FocusGained","kind":20,"documentation":"Nvim got focus","sortText":"00004","insertText":"FocusGained","insertTextFormat":1},{"label":"FocusLost","kind":20,"documentation":"Nvim lost focus","sortText":"00004","insertText":"FocusLost","insertTextFormat":1},{"label":"CursorHold","kind":20,"documentation":"the user doesn\'t press a key for a while","sortText":"00004","insertText":"CursorHold","insertTextFormat":1},{"label":"CursorHoldI","kind":20,"documentation":"the user doesn\'t press a key for a while in Insert mode","sortText":"00004","insertText":"CursorHoldI","insertTextFormat":1},{"label":"CursorMoved","kind":20,"documentation":"the cursor was moved in Normal mode","sortText":"00004","insertText":"CursorMoved","insertTextFormat":1},{"label":"CursorMovedI","kind":20,"documentation":"the cursor was moved in Insert mode","sortText":"00004","insertText":"CursorMovedI","insertTextFormat":1},{"label":"WinClosed","kind":20,"documentation":"after closing a window","sortText":"00004","insertText":"WinClosed","insertTextFormat":1},{"label":"WinNew","kind":20,"documentation":"after creating a new window","sortText":"00004","insertText":"WinNew","insertTextFormat":1},{"label":"WinEnter","kind":20,"documentation":"after entering another window","sortText":"00004","insertText":"WinEnter","insertTextFormat":1},{"label":"WinLeave","kind":20,"documentation":"before leaving a window","sortText":"00004","insertText":"WinLeave","insertTextFormat":1},{"label":"TabEnter","kind":20,"documentation":"after entering another tab page","sortText":"00004","insertText":"TabEnter","insertTextFormat":1},{"label":"TabLeave","kind":20,"documentation":"before leaving a tab page","sortText":"00004","insertText":"TabLeave","insertTextFormat":1},{"label":"TabNew","kind":20,"documentation":"when creating a new tab page","sortText":"00004","insertText":"TabNew","insertTextFormat":1},{"label":"TabNewEntered","kind":20,"documentation":"after entering a new tab page","sortText":"00004","insertText":"TabNewEntered","insertTextFormat":1},{"label":"TabClosed","kind":20,"documentation":"after closing a tab page","sortText":"00004","insertText":"TabClosed","insertTextFormat":1},{"label":"CmdlineChanged","kind":20,"documentation":"after a change was made to the command-line text","sortText":"00004","insertText":"CmdlineChanged","insertTextFormat":1},{"label":"CmdlineEnter","kind":20,"documentation":"after entering cmdline mode","sortText":"00004","insertText":"CmdlineEnter","insertTextFormat":1},{"label":"CmdlineLeave","kind":20,"documentation":"before leaving cmdline mode","sortText":"00004","insertText":"CmdlineLeave","insertTextFormat":1},{"label":"CmdwinEnter","kind":20,"documentation":"after entering the command-line window","sortText":"00004","insertText":"CmdwinEnter","insertTextFormat":1},{"label":"CmdwinLeave","kind":20,"documentation":"before leaving the command-line window","sortText":"00004","insertText":"CmdwinLeave","insertTextFormat":1},{"label":"InsertEnter","kind":20,"documentation":"starting Insert mode","sortText":"00004","insertText":"InsertEnter","insertTextFormat":1},{"label":"InsertChange","kind":20,"documentation":"when typing <Insert> while in Insert or Replace mode","sortText":"00004","insertText":"InsertChange","insertTextFormat":1},{"label":"InsertLeave","kind":20,"documentation":"when leaving Insert mode","sortText":"00004","insertText":"InsertLeave","insertTextFormat":1},{"label":"InsertCharPre","kind":20,"documentation":"when a character was typed in Insert mode, before","sortText":"00004","insertText":"InsertCharPre","insertTextFormat":1},{"label":"TextYankPost","kind":20,"documentation":"when some text is yanked or deleted","sortText":"00004","insertText":"TextYankPost","insertTextFormat":1},{"label":"TextChanged","kind":20,"documentation":"after a change was made to the text in Normal mode","sortText":"00004","insertText":"TextChanged","insertTextFormat":1},{"label":"TextChangedI","kind":20,"documentation":"after a change was made to the text in Insert mode","sortText":"00004","insertText":"TextChangedI","insertTextFormat":1},{"label":"TextChangedP","kind":20,"documentation":"after a change was made to the text in Insert mode","sortText":"00004","insertText":"TextChangedP","insertTextFormat":1},{"label":"ColorSchemePre","kind":20,"documentation":"before loading a color scheme","sortText":"00004","insertText":"ColorSchemePre","insertTextFormat":1},{"label":"ColorScheme","kind":20,"documentation":"after loading a color scheme","sortText":"00004","insertText":"ColorScheme","insertTextFormat":1},{"label":"RemoteReply","kind":20,"documentation":"a reply from a server Vim was received","sortText":"00004","insertText":"RemoteReply","insertTextFormat":1},{"label":"QuickFixCmdPre","kind":20,"documentation":"before a quickfix command is run","sortText":"00004","insertText":"QuickFixCmdPre","insertTextFormat":1},{"label":"QuickFixCmdPost","kind":20,"documentation":"after a quickfix command is run","sortText":"00004","insertText":"QuickFixCmdPost","insertTextFormat":1},{"label":"SessionLoadPost","kind":20,"documentation":"after loading a session file","sortText":"00004","insertText":"SessionLoadPost","insertTextFormat":1},{"label":"MenuPopup","kind":20,"documentation":"just before showing the popup menu","sortText":"00004","insertText":"MenuPopup","insertTextFormat":1},{"label":"CompleteChanged","kind":20,"documentation":"after popup menu changed, not fired on popup menu hide","sortText":"00004","insertText":"CompleteChanged","insertTextFormat":1},{"label":"CompleteDonePre","kind":20,"documentation":"after Insert mode completion is done, before clearing","sortText":"00004","insertText":"CompleteDonePre","insertTextFormat":1},{"label":"CompleteDone","kind":20,"documentation":"after Insert mode completion is done, after clearing","sortText":"00004","insertText":"CompleteDone","insertTextFormat":1},{"label":"User","kind":20,"documentation":"to be used in combination with \\":doautocmd\\"","sortText":"00004","insertText":"User","insertTextFormat":1},{"label":"Signal","kind":20,"documentation":"after Nvim receives a signal","sortText":"00004","insertText":"Signal","insertTextFormat":1},{"label":"BufCreate","kind":20,"documentation":"just after adding a buffer to the buffer list","sortText":"00004","insertText":"BufCreate","insertTextFormat":1},{"label":"EncodingChanged","kind":20,"documentation":"after the \'encoding\' option has been changed","sortText":"00004","insertText":"EncodingChanged","insertTextFormat":1},{"label":"TermChanged","kind":20,"documentation":"after the value of \'term\' has changed","sortText":"00004","insertText":"TermChanged","insertTextFormat":1},{"label":"GUIEnter","kind":20,"documentation":"after starting the GUI successfully","sortText":"00004","insertText":"GUIEnter","insertTextFormat":1},{"label":"GUIFailed","kind":20,"documentation":"after starting the GUI failed","sortText":"00004","insertText":"GUIFailed","insertTextFormat":1},{"label":"TerminalOpen","kind":20,"documentation":"after a terminal buffer was created","sortText":"00004","insertText":"TerminalOpen","insertTextFormat":1},{"label":"TerminalWinOpen","kind":20,"documentation":"after a terminal buffer was created in a new window","sortText":"00004","insertText":"TerminalWinOpen","insertTextFormat":1},{"label":"SafeState","kind":20,"documentation":"nothing pending, going to wait for the user to type a","sortText":"00004","insertText":"SafeState","insertTextFormat":1},{"label":"SafeStateAgain","kind":20,"documentation":"repeated SafeState","sortText":"00004","insertText":"SafeStateAgain","insertTextFormat":1}]},"signatureHelp":{"abs":["{expr}","Float"],"acos":["{expr}","Float"],"add":["{list}, {item}","List"],"and":["{expr}, {expr}","Number"],"append":["{lnum}, {list}","Number"],"appendbufline":["{expr}, {lnum}, {text}","Number"],"argc":["[{winid}]","Number"],"argidx":["","Number"],"arglistid":["[{winnr} [, {tabnr}]]","Number"],"argv":["[-1, {winid}]","List"],"assert_beeps":["{cmd}","Number"],"assert_equal":["{exp}, {act} [, {msg}]","Number"],"assert_equalfile":["{fname-one}, {fname-two}","Number"],"assert_exception":["{error} [, {msg}]","Number"],"assert_fails":["{cmd} [, {error}]","Number"],"assert_false":["{actual} [, {msg}]","Number"],"assert_inrange":["{lower}, {upper}, {actual} [, {msg}]","Number"],"assert_match":["{pat}, {text} [, {msg}]","Number"],"assert_notequal":["{exp}, {act} [, {msg}]","Number"],"assert_notmatch":["{pat}, {text} [, {msg}]","Number"],"assert_report":["{msg}","Number"],"assert_true":["{actual} [, {msg}]","Number"],"asin":["{expr}","Float"],"atan":["{expr}","Float"],"atan2":["{expr}, {expr}","Float"],"balloon_gettext":["","String"],"balloon_show":["{expr}","none"],"balloon_split":["{msg}","List"],"browse":["{save}, {title}, {initdir}, {default}","String"],"browsedir":["{title}, {initdir}","String"],"bufadd":["{name}","Number"],"bufexists":["{expr}","Number"],"buflisted":["{expr}","Number"],"bufload":["{expr}","Number"],"bufloaded":["{expr}","Number"],"bufname":["[{expr}]","String"],"bufnr":["[{expr} [, {create}]]","Number"],"bufwinid":["{expr}","Number"],"bufwinnr":["{expr}","Number"],"byte2line":["{byte}","Number"],"byteidx":["{expr}, {nr}","Number"],"byteidxcomp":["{expr}, {nr}","Number"],"call":["{func}, {arglist} [, {dict}]","any"],"ceil":["{expr}","Float"],"ch_canread":["{handle}","Number"],"ch_close":["{handle}","none"],"ch_close_in":["{handle}","none"],"ch_evalexpr":["{handle}, {expr} [, {options}]","any"],"ch_evalraw":["{handle}, {string} [, {options}]","any"],"ch_getbufnr":["{handle}, {what}","Number"],"ch_getjob":["{channel}","Job"],"ch_info":["{handle}","String"],"ch_log":["{msg} [, {handle}]","none"],"ch_logfile":["{fname} [, {mode}]","none"],"ch_open":["{address} [, {options}]","Channel"],"ch_read":["{handle} [, {options}]","String"],"ch_readblob":["{handle} [, {options}]","Blob"],"ch_readraw":["{handle} [, {options}]","String"],"ch_sendexpr":["{handle}, {expr} [, {options}]","any"],"ch_sendraw":["{handle}, {expr} [, {options}]","any"],"ch_setoptions":["{handle}, {options}","none"],"ch_status":["{handle} [, {options}]","String"],"changenr":["","Number"],"char2nr":["{expr}[, {utf8}]","Number"],"chdir":["{dir}","String"],"cindent":["{lnum}","Number"],"clearmatches":["","none"],"col":["{expr}","Number"],"complete":["{startcol}, {matches}","none"],"complete_add":["{expr}","Number"],"complete_check":["","Number"],"complete_info":["[{what}]","Dict"],"confirm":["{msg} [, {choices} [, {default} [, {type}]]]","Number"],"copy":["{expr}","any"],"cos":["{expr}","Float"],"cosh":["{expr}","Float"],"count":["{list}, {expr} [, {ic} [, {start}]]","Number"],"cscope_connection":["[{num}, {dbpath} [, {prepend}]]","Number"],"cursor":["{list}","Number"],"debugbreak":["{pid}","Number"],"deepcopy":["{expr} [, {noref}]","any"],"delete":["{fname} [, {flags}]","Number"],"deletebufline":["{expr}, {first}[, {last}]","Number"],"did_filetype":["","Number"],"diff_filler":["{lnum}","Number"],"diff_hlID":["{lnum}, {col}","Number"],"empty":["{expr}","Number"],"environ":["","Dict"],"escape":["{string}, {chars}","String"],"eval":["{string}","any"],"eventhandler":["","Number"],"executable":["{expr}","Number"],"execute":["{command}","String"],"exepath":["{expr}","String"],"exists":["{expr}","Number"],"extend":["{expr1}, {expr2} [, {expr3}]","List/Dict"],"exp":["{expr}","Float"],"expand":["{expr} [, {nosuf} [, {list}]]","any"],"expandcmd":["{expr}","String"],"feedkeys":["{string} [, {mode}]","Number"],"filereadable":["{file}","Number"],"filewritable":["{file}","Number"],"filter":["{expr1}, {expr2}","List/Dict"],"finddir":["{name} [, {path} [, {count}]]","String"],"findfile":["{name} [, {path} [, {count}]]","String"],"float2nr":["{expr}","Number"],"floor":["{expr}","Float"],"fmod":["{expr1}, {expr2}","Float"],"fnameescape":["{fname}","String"],"fnamemodify":["{fname}, {mods}","String"],"foldclosed":["{lnum}","Number"],"foldclosedend":["{lnum}","Number"],"foldlevel":["{lnum}","Number"],"foldtext":["","String"],"foldtextresult":["{lnum}","String"],"foreground":["","Number"],"funcref":["{name} [, {arglist}] [, {dict}]","Funcref"],"function":["{name} [, {arglist}] [, {dict}]","Funcref"],"garbagecollect":["[{atexit}]","none"],"get":["{func}, {what}","any"],"getbufinfo":["[{expr}]","List"],"getbufline":["{expr}, {lnum} [, {end}]","List"],"getbufvar":["{expr}, {varname} [, {def}]","any"],"getchangelist":["{expr}","List"],"getchar":["[expr]","Number"],"getcharmod":["","Number"],"getcharsearch":["","Dict"],"getcmdline":["","String"],"getcmdpos":["","Number"],"getcmdtype":["","String"],"getcmdwintype":["","String"],"getcompletion":["{pat}, {type} [, {filtered}]","List"],"getcurpos":["","List"],"getcwd":["[{winnr} [, {tabnr}]]","String"],"getenv":["{name}","String"],"getfontname":["[{name}]","String"],"getfperm":["{fname}","String"],"getfsize":["{fname}","Number"],"getftime":["{fname}","Number"],"getftype":["{fname}","String"],"getimstatus":["","Number"],"getjumplist":["[{winnr} [, {tabnr}]]","List"],"getline":["{lnum}, {end}","List"],"getloclist":["{nr} [, {what}]","List"],"getmatches":["","List"],"getmousepos":["","Dict"],"getpid":["","Number"],"getpos":["{expr}","List"],"getqflist":["[{what}]","List"],"getreg":["[{regname} [, 1 [, {list}]]]","String"],"getregtype":["[{regname}]","String"],"gettabinfo":["[{expr}]","List"],"gettabvar":["{nr}, {varname} [, {def}]","any"],"gettabwinvar":["{tabnr}, {winnr}, {name} [, {def}]","any"],"gettagstack":["[{nr}]","Dict"],"getwininfo":["[{winid}]","List"],"getwinpos":["[{timeout}]","List"],"getwinposx":["","Number"],"getwinposy":["","Number"],"getwinvar":["{nr}, {varname} [, {def}]","any"],"glob":["{expr} [, {nosuf} [, {list} [, {alllinks}]]]","any"],"glob2regpat":["{expr}","String"],"globpath":["{path}, {expr} [, {nosuf} [, {list} [, {alllinks}]]]","String"],"has":["{feature}","Number"],"has_key":["{dict}, {key}","Number"],"haslocaldir":["[{winnr} [, {tabnr}]]","Number"],"hasmapto":["{what} [, {mode} [, {abbr}]]","Number"],"histadd":["{history}, {item}","String"],"histdel":["{history} [, {item}]","String"],"histget":["{history} [, {index}]","String"],"histnr":["{history}","Number"],"hlexists":["{name}","Number"],"hlID":["{name}","Number"],"hostname":["","String"],"iconv":["{expr}, {from}, {to}","String"],"indent":["{lnum}","Number"],"index":["{list}, {expr} [, {start} [, {ic}]]","Number"],"input":["{prompt} [, {text} [, {completion}]]","String"],"inputdialog":["{prompt} [, {text} [, {completion}]]","String"],"inputlist":["{textlist}","Number"],"inputrestore":["","Number"],"inputsave":["","Number"],"inputsecret":["{prompt} [, {text}]","String"],"insert":["{list}, {item} [, {idx}]","List"],"interrupt":["","none"],"invert":["{expr}","Number"],"isdirectory":["{directory}","Number"],"isinf":["{expr}","Number"],"islocked":["{expr}","Number"],"isnan":["{expr}","Number"],"items":["{dict}","List"],"job_getchannel":["{job}","Channel"],"job_info":["[{job}]","Dict"],"job_setoptions":["{job}, {options}","none"],"job_start":["{command} [, {options}]","Job"],"job_status":["{job}","String"],"job_stop":["{job} [, {how}]","Number"],"join":["{list} [, {sep}]","String"],"js_decode":["{string}","any"],"js_encode":["{expr}","String"],"json_decode":["{expr}","any"],"json_encode":["{expr}","String"],"keys":["{dict}","List"],"len":["{expr}","Number"],"libcall":["{lib}, {func}, {arg}","String"],"libcallnr":["{lib}, {func}, {arg}","Number"],"line":["{expr}","Number"],"line2byte":["{lnum}","Number"],"lispindent":["{lnum}","Number"],"list2str":["{list} [, {utf8}]","String"],"listener_add":["{callback} [, {buf}]","Number"],"listener_flush":["[{buf}]","none"],"listener_remove":["{id}","none"],"localtime":["","Number"],"log":["{expr}","Float"],"log10":["{expr}","Float"],"luaeval":["{expr}[, {expr}]","any"],"map":["{expr1}, {expr2}","List/Dict"],"maparg":["{name}[, {mode} [, {abbr} [, {dict}]]]","String"],"mapcheck":["{name}[, {mode} [, {abbr}]]","String"],"match":["{expr}, {pat}[, {start}[, {count}]]","Number"],"matchadd":["{group}, {pattern}[, {priority}[, {id}]]","Number"],"matchaddpos":["{group}, {list}[, {priority}[, {id}]]","Number"],"matcharg":["{nr}","List"],"matchdelete":["{id}","Number"],"matchend":["{expr}, {pat}[, {start}[, {count}]]","Number"],"matchlist":["{expr}, {pat}[, {start}[, {count}]]","List"],"matchstr":["{expr}, {pat}[, {start}[, {count}]]","String"],"matchstrpos":["{expr}, {pat}[, {start}[, {count}]]","List"],"max":["{expr}","Number"],"min":["{expr}","Number"],"mkdir":["{name} [, {path} [, {prot}]]","Number"],"mode":["[expr]","String"],"mzeval":["{expr}","any"],"nextnonblank":["{lnum}","Number"],"nr2char":["{expr}[, {utf8}]","String"],"or":["{expr}, {expr}","Number"],"pathshorten":["{expr}","String"],"perleval":["{expr}","any"],"popup_atcursor":["{what}, {options}","Number"],"popup_beval":["{what}, {options}","Number"],"popup_clear":["","none"],"popup_close":["{id} [, {result}]","none"],"popup_create":["{what}, {options}","Number"],"popup_dialog":["{what}, {options}","Number"],"popup_filter_menu":["{id}, {key}","Number"],"popup_filter_yesno":["{id}, {key}","Number"],"popup_findinfo":["","Number"],"popup_findpreview":["","Number"],"popup_getoptions":["{id}","Dict"],"popup_getpos":["{id}","Dict"],"popup_hide":["{id}","none"],"popup_menu":["{what}, {options}","Number"],"popup_move":["{id}, {options}","none"],"popup_notification":["{what}, {options}","Number"],"popup_show":["{id}","none"],"popup_setoptions":["{id}, {options}","none"],"popup_settext":["{id}, {text}","none"],"pow":["{x}, {y}","Float"],"prevnonblank":["{lnum}","Number"],"printf":["{fmt}, {expr1}...","String"],"prompt_setcallback":["{buf}, {expr}","none"],"prompt_setinterrupt":["{buf}, {text}","none"],"prompt_setprompt":["{buf}, {text}","none"],"prop_add":["{lnum}, {col}, {props}","none"],"prop_clear":["{lnum} [, {lnum-end} [, {props}]]","none"],"prop_find":["{props} [, {direction}]","Dict"],"prop_list":["{lnum} [, {props}","List"],"prop_remove":["{props} [, {lnum} [, {lnum-end}]]","Number"],"prop_type_add":["{name}, {props}","none"],"prop_type_change":["{name}, {props}","none"],"prop_type_delete":["{name} [, {props}]","none"],"prop_type_get":["[{name} [, {props}]","Dict"],"prop_type_list":["[{props}]","List"],"pum_getpos":["","Dict"],"pumvisible":["","Number"],"pyeval":["{expr}","any"],"py3eval":["{expr}","any"],"pyxeval":["{expr}","any"],"rand":["[{expr}]","Number"],"range":["{expr} [, {max} [, {stride}]]","List"],"readdir":["{dir} [, {expr}]","List"],"readfile":["{fname} [, {binary} [, {max}]]","List"],"reg_executing":["","String"],"reg_recording":["","String"],"reltime":["[{start} [, {end}]]","List"],"reltimefloat":["{time}","Float"],"reltimestr":["{time}","String"],"remote_expr":["{server}, {string} [, {idvar} [, {timeout}]]","String"],"remote_foreground":["{server}","Number"],"remote_peek":["{serverid} [, {retvar}]","Number"],"remote_read":["{serverid} [, {timeout}]","String"],"remote_send":["{server}, {string} [, {idvar}]","String"],"remote_startserver":["{name}","none"],"remove":["{dict}, {key}","any"],"rename":["{from}, {to}","Number"],"repeat":["{expr}, {count}","String"],"resolve":["{filename}","String"],"reverse":["{list}","List"],"round":["{expr}","Float"],"rubyeval":["{expr}","any"],"screenattr":["{row}, {col}","Number"],"screenchar":["{row}, {col}","Number"],"screenchars":["{row}, {col}","List"],"screencol":["","Number"],"screenpos":["{winid}, {lnum}, {col}","Dict"],"screenrow":["","Number"],"screenstring":["{row}, {col}","String"],"search":["{pattern} [, {flags} [, {stopline} [, {timeout}]]]","Number"],"searchdecl":["{name} [, {global} [, {thisblock}]]","Number"],"searchpair":["{start}, {middle}, {end} [, {flags} [, {skip} [...]]]","Number"],"searchpairpos":["{start}, {middle}, {end} [, {flags} [, {skip} [...]]]","List"],"searchpos":["{pattern} [, {flags} [, {stopline} [, {timeout}]]]","List"],"server2client":["{clientid}, {string}","Number"],"serverlist":["","String"],"setbufline":[" {expr}, {lnum}, {line}","Number"],"setbufvar":["{expr}, {varname}, {val}","set"],"setcharsearch":["{dict}","Dict"],"setcmdpos":["{pos}","Number"],"setenv":["{name}, {val}","none"],"setfperm":["{fname}, {mode}","Number"],"setline":["{lnum}, {line}","Number"],"setloclist":["{nr}, {list}[, {action}[, {what}]]","Number"],"setmatches":["{list}","Number"],"setpos":["{expr}, {list}","Number"],"setqflist":["{list} [, {action} [, {what}]]","Number"],"setreg":["{n}, {v}[, {opt}]","Number"],"settabvar":["{nr}, {varname}, {val}","set"],"settabwinvar":["{tabnr}, {winnr}, {varname}, {val}","set"],"settagstack":["{nr}, {dict} [, {action}]","Number"],"setwinvar":["{nr}, {varname}, {val}","set"],"sha256":["{string}","String"],"shellescape":["{string} [, {special}]","String"],"shiftwidth":["","Number"],"sign_define":["{name} [, {dict}]","Number"],"sign_getdefined":["[{name}]","List"],"sign_getplaced":["[{expr} [, {dict}]]","List"],"sign_jump":["{id}, {group}, {expr}","Number"],"sign_place":["{id}, {group}, {name}, {expr} [, {dict}]","Number"],"sign_placelist":["{list}","List"],"sign_undefine":["[{name}]","Number"],"sign_unplace":["{group} [, {dict}]","Number"],"sign_unplacelist":["{list}","List"],"simplify":["{filename}","String"],"sin":["{expr}","Float"],"sinh":["{expr}","Float"],"sort":["{list} [, {func} [, {dict}]]","List"],"sound_clear":["","none"],"sound_playevent":["{name} [, {callback}]","Number"],"sound_playfile":["{path} [, {callback}]","Number"],"sound_stop":["{id}","none"],"soundfold":["{word}","String"],"spellbadword":["","String"],"spellsuggest":["{word} [, {max} [, {capital}]]","List"],"split":["{expr} [, {pat} [, {keepempty}]]","List"],"sqrt":["{expr}","Float"],"srand":["[{expr}]","List"],"state":["[{what}]","String"],"str2float":["{expr}","Float"],"str2list":["{expr} [, {utf8}]","List"],"str2nr":["{expr} [, {base}]","Number"],"strchars":["{expr} [, {skipcc}]","Number"],"strcharpart":["{str}, {start} [, {len}]","String"],"strdisplaywidth":["{expr} [, {col}]","Number"],"strftime":["{format} [, {time}]","String"],"strgetchar":["{str}, {index}","Number"],"stridx":["{haystack}, {needle} [, {start}]","Number"],"string":["{expr}","String"],"strlen":["{expr}","Number"],"strpart":["{str}, {start} [, {len}]","String"],"strptime":["{format}, {timestring}","Number"],"strridx":["{haystack}, {needle} [, {start}]","Number"],"strtrans":["{expr}","String"],"strwidth":["{expr}","Number"],"submatch":["{nr} [, {list}]","String"],"substitute":["{expr}, {pat}, {sub}, {flags}","String"],"swapinfo":["{fname}","Dict"],"swapname":["{expr}","String"],"synID":["{lnum}, {col}, {trans}","Number"],"synIDattr":["{synID}, {what} [, {mode}]","String"],"synIDtrans":["{synID}","Number"],"synconcealed":["{lnum}, {col}","List"],"synstack":["{lnum}, {col}","List"],"system":["{cmd} [, {input}]","String"],"systemlist":["{cmd} [, {input}]","List"],"tabpagebuflist":["[{arg}]","List"],"tabpagenr":["[{arg}]","Number"],"tabpagewinnr":["{tabarg}[, {arg}]","Number"],"taglist":["{expr}[, {filename}]","List"],"tagfiles":["","List"],"tan":["{expr}","Float"],"tanh":["{expr}","Float"],"tempname":["","String"],"term_dumpdiff":["{filename}, {filename} [, {options}]","Number"],"term_dumpload":["{filename} [, {options}]","Number"],"term_dumpwrite":["{buf}, {filename} [, {options}]","none"],"term_getaltscreen":["{buf}","Number"],"term_getansicolors":["{buf}","List"],"term_getattr":["{attr}, {what}","Number"],"term_getcursor":["{buf}","List"],"term_getjob":["{buf}","Job"],"term_getline":["{buf}, {row}","String"],"term_getscrolled":["{buf}","Number"],"term_getsize":["{buf}","List"],"term_getstatus":["{buf}","String"],"term_gettitle":["{buf}","String"],"term_gettty":["{buf}, [{input}]","String"],"term_list":["","List"],"term_scrape":["{buf}, {row}","List"],"term_sendkeys":["{buf}, {keys}","none"],"term_setapi":["{buf}, {expr}","none"],"term_setansicolors":["{buf}, {colors}","none"],"term_setkill":["{buf}, {how}","none"],"term_setrestore":["{buf}, {command}","none"],"term_setsize":["{buf}, {rows}, {cols}","none"],"term_start":["{cmd} [, {options}]","Number"],"term_wait":["{buf} [, {time}]","Number"],"test_alloc_fail":["{id}, {countdown}, {repeat}","none"],"test_autochdir":["","none"],"test_feedinput":["{string}","none"],"test_garbagecollect_now":["","none"],"test_garbagecollect_soon":["","none"],"test_getvalue":["{string}","any"],"test_ignore_error":["{expr}","none"],"test_null_blob":["","Blob"],"test_null_channel":["","Channel"],"test_null_dict":["","Dict"],"test_null_job":["","Job"],"test_null_list":["","List"],"test_null_partial":["","Funcref"],"test_null_string":["","String"],"test_option_not_set":["{name}","none"],"test_override":["{expr}, {val}","none"],"test_refcount":["{expr}","Number"],"test_scrollbar":["{which}, {value}, {dragging}","none"],"test_setmouse":["{row}, {col}","none"],"test_settime":["{expr}","none"],"timer_info":["[{id}]","List"],"timer_pause":["{id}, {pause}","none"],"timer_start":["{time}, {callback} [, {options}]","Number"],"timer_stop":["{timer}","none"],"timer_stopall":["","none"],"tolower":["{expr}","String"],"toupper":["{expr}","String"],"tr":["{src}, {fromstr}, {tostr}","String"],"trim":["{text} [, {mask}]","String"],"trunc":["{expr}","Float"],"type":["{name}","Number"],"undofile":["{name}","String"],"undotree":["","List"],"uniq":["{list} [, {func} [, {dict}]]","List"],"values":["{dict}","List"],"virtcol":["{expr}","Number"],"visualmode":["[expr]","String"],"wildmenumode":["","Number"],"win_execute":["{id}, {command} [, {silent}]","String"],"win_findbuf":["{bufnr}","List"],"win_getid":["[{win} [, {tab}]]","Number"],"win_gotoid":["{expr}","Number"],"win_id2tabwin":["{expr}","List"],"win_id2win":["{expr}","Number"],"win_screenpos":["{nr}","List"],"win_splitmove":["{nr}, {target} [, {options}]","Number"],"winbufnr":["{nr}","Number"],"wincol":["","Number"],"winheight":["{nr}","Number"],"winlayout":["[{tabnr}]","List"],"winline":["","Number"],"winnr":["[{expr}]","Number"],"winrestcmd":["","String"],"winrestview":["{dict}","none"],"winsaveview":["","Dict"],"winwidth":["{nr}","Number"],"wordcount":["","Dict"],"writefile":["{list}, {fname} [, {flags}]","Number"],"xor":["{expr}, {expr}","Number"],"api_info":["","Dict"],"chanclose":["{id}[, {stream}]","Number"],"chansend":["{id}, {data}","Number"],"ctxget":["[{index}]","Dict"],"ctxpop":["","none"],"ctxpush":["[{types}]","none"],"ctxset":["{context}[, {index}]","none"],"ctxsize":["","Number"],"dictwatcheradd":["{dict}, {pattern}, {callback}","Start"],"dictwatcherdel":["{dict}, {pattern}, {callback}","Stop"],"id":["{expr}","String"],"jobpid":["{id}","Number"],"jobresize":["{id}, {width}, {height}","Number"],"jobstart":["{cmd}[, {opts}]","Number"],"jobstop":["{id}","Number"],"jobwait":["{ids}[, {timeout}]","Number"],"msgpackdump":["{list}","List"],"msgpackparse":["{list}","List"],"prompt_addtext":["{buf}, {expr}","none"],"rpcnotify":["{channel}, {event}[, {args}...]","Sends"],"rpcrequest":["{channel}, {method}[, {args}...]","Sends"],"sockconnect":["{mode}, {address} [, {opts}]","Number"],"stdioopen":["{dict}","Number"],"stdpath":["{what}","String/List"],"wait":["{timeout}, {condition}[, {interval}]","Number"],"nvim__id":["{obj}",""],"nvim__id_array":["{arr}",""],"nvim__id_dictionary":["{dct}",""],"nvim__id_float":["{flt}",""],"nvim__inspect_cell":["{grid}, {row}, {col}",""],"nvim__put_attr":["{id}, {c0}, {c1}",""],"nvim__stats":["",""],"nvim_call_atomic":["{calls}",""],"nvim_call_dict_function":["{dict}, {fn}, {args}",""],"nvim_call_function":["{fn}, {args}",""],"nvim_command":["{command}",""],"nvim_create_buf":["{listed}, {scratch}",""],"nvim_create_namespace":["{name}",""],"nvim_del_current_line":["",""],"nvim_del_keymap":["{mode}, {lhs}",""],"nvim_del_var":["{name}",""],"nvim_err_write":["{str}",""],"nvim_err_writeln":["{str}",""],"nvim_eval":["{expr}",""],"nvim_exec":["{src}, {output}",""],"nvim_exec_lua":["{code}, {args}",""],"nvim_feedkeys":["{keys}, {mode}, {escape_csi}",""],"nvim_get_api_info":["",""],"nvim_get_chan_info":["{chan}",""],"nvim_get_color_by_name":["{name}",""],"nvim_get_color_map":["",""],"nvim_get_commands":["{opts}",""],"nvim_get_context":["{opts}",""],"nvim_get_current_buf":["",""],"nvim_get_current_line":["",""],"nvim_get_current_tabpage":["",""],"nvim_get_current_win":["",""],"nvim_get_hl_by_id":["{hl_id}, {rgb}",""],"nvim_get_hl_by_name":["{name}, {rgb}",""],"nvim_get_hl_id_by_name":["{name}",""],"nvim_get_keymap":["{mode}",""],"nvim_get_mode":["",""],"nvim_get_namespaces":["",""],"nvim_get_option":["{name}",""],"nvim_get_proc":["{pid}",""],"nvim_get_proc_children":["{pid}",""],"nvim_get_var":["{name}",""],"nvim_get_vvar":["{name}",""],"nvim_input":["{keys}",""],"nvim_input_mouse":["{button}, {action}, {modifier}, {grid}, {row}, {col}",""],"nvim_list_bufs":["",""],"nvim_list_chans":["",""],"nvim_list_runtime_paths":["",""],"nvim_list_tabpages":["",""],"nvim_list_uis":["",""],"nvim_list_wins":["",""],"nvim_load_context":["{dict}",""],"nvim_open_win":["{buffer}, {enter}, {config}",""],"nvim_out_write":["{str}",""],"nvim_parse_expression":["{expr}, {flags}, {highlight}",""],"nvim_paste":["{data}, {crlf}, {phase}",""],"nvim_put":["{lines}, {type}, {after}, {follow}",""],"nvim_replace_termcodes":["{str}, {from_part}, {do_lt}, {special}",""],"nvim_select_popupmenu_item":["{item}, {insert}, {finish}, {opts}",""],"nvim_set_client_info":["{name}, {version}, {type}, {methods}, {attributes}",""],"nvim_set_current_buf":["{buffer}",""],"nvim_set_current_dir":["{dir}",""],"nvim_set_current_line":["{line}",""],"nvim_set_current_tabpage":["{tabpage}",""],"nvim_set_current_win":["{window}",""],"nvim_set_keymap":["{mode}, {lhs}, {rhs}, {opts}",""],"nvim_set_option":["{name}, {value}",""],"nvim_set_var":["{name}, {value}",""],"nvim_set_vvar":["{name}, {value}",""],"nvim_strwidth":["{text}",""],"nvim_subscribe":["{event}",""],"nvim_unsubscribe":["{event}",""],"nvim__buf_redraw_range":["{buffer}, {first}, {last}",""],"nvim__buf_set_luahl":["{buffer}, {opts}",""],"nvim__buf_stats":["{buffer}",""],"nvim_buf_add_highlight":["{buffer}, {ns_id}, {hl_group}, {line}, {col_start}, {col_end}",""],"nvim_buf_attach":["{buffer}, {send_buffer}, {opts}",""],"nvim_buf_clear_namespace":["{buffer}, {ns_id}, {line_start}, {line_end}",""],"nvim_buf_del_extmark":["{buffer}, {ns_id}, {id}",""],"nvim_buf_del_keymap":["{buffer}, {mode}, {lhs}",""],"nvim_buf_del_var":["{buffer}, {name}",""],"nvim_buf_detach":["{buffer}",""],"nvim_buf_get_changedtick":["{buffer}",""],"nvim_buf_get_commands":["{buffer}, {opts}",""],"nvim_buf_get_extmark_by_id":["{buffer}, {ns_id}, {id}",""],"nvim_buf_get_extmarks":["{buffer}, {ns_id}, {start}, {end}, {opts}",""],"nvim_buf_get_keymap":["{buffer}, {mode}",""],"nvim_buf_get_lines":["{buffer}, {start}, {end}, {strict_indexing}",""],"nvim_buf_get_mark":["{buffer}, {name}",""],"nvim_buf_get_name":["{buffer}",""],"nvim_buf_get_offset":["{buffer}, {index}",""],"nvim_buf_get_option":["{buffer}, {name}",""],"nvim_buf_get_var":["{buffer}, {name}",""],"nvim_buf_get_virtual_text":["{buffer}, {lnum}",""],"nvim_buf_is_loaded":["{buffer}",""],"nvim_buf_is_valid":["{buffer}",""],"nvim_buf_line_count":["{buffer}",""],"nvim_buf_set_extmark":["{buffer}, {ns_id}, {id}, {line}, {col}, {opts}",""],"nvim_buf_set_keymap":["{buffer}, {mode}, {lhs}, {rhs}, {opts}",""],"nvim_buf_set_lines":["{buffer}, {start}, {end}, {strict_indexing}, {replacement}",""],"nvim_buf_set_name":["{buffer}, {name}",""],"nvim_buf_set_option":["{buffer}, {name}, {value}",""],"nvim_buf_set_var":["{buffer}, {name}, {value}",""],"nvim_buf_set_virtual_text":["{buffer}, {ns_id}, {line}, {chunks}, {opts}",""],"nvim_win_close":["{window}, {force}",""],"nvim_win_del_var":["{window}, {name}",""],"nvim_win_get_buf":["{window}",""],"nvim_win_get_config":["{window}",""],"nvim_win_get_cursor":["{window}",""],"nvim_win_get_height":["{window}",""],"nvim_win_get_number":["{window}",""],"nvim_win_get_option":["{window}, {name}",""],"nvim_win_get_position":["{window}",""],"nvim_win_get_tabpage":["{window}",""],"nvim_win_get_var":["{window}, {name}",""],"nvim_win_get_width":["{window}",""],"nvim_win_is_valid":["{window}",""],"nvim_win_set_buf":["{window}, {buffer}",""],"nvim_win_set_config":["{window}, {config}",""],"nvim_win_set_cursor":["{window}, {pos}",""],"nvim_win_set_height":["{window}, {height}",""],"nvim_win_set_option":["{window}, {name}, {value}",""],"nvim_win_set_var":["{window}, {name}, {value}",""],"nvim_win_set_width":["{window}, {width}",""],"nvim_tabpage_del_var":["{tabpage}, {name}",""],"nvim_tabpage_get_number":["{tabpage}",""],"nvim_tabpage_get_var":["{tabpage}, {name}",""],"nvim_tabpage_get_win":["{tabpage}",""],"nvim_tabpage_is_valid":["{tabpage}",""],"nvim_tabpage_list_wins":["{tabpage}",""],"nvim_tabpage_set_var":["{tabpage}, {name}, {value}",""],"nvim_ui_attach":["{width}, {height}, {options}",""],"nvim_ui_detach":["",""],"nvim_ui_pum_set_height":["{height}",""],"nvim_ui_set_option":["{name}, {value}",""],"nvim_ui_try_resize":["{width}, {height}",""],"nvim_ui_try_resize_grid":["{grid}, {width}, {height}",""]},"documents":{"commands":{"range":["go to last line in {range}"],"!":["filter lines or execute an external command"],"!!":["repeat last \\":!\\" command"],"#":["same as \\":number\\""],"&":["repeat last \\":substitute\\""],"star":["execute contents of a register"],"<":["shift lines one \'shiftwidth\' left"],"=":["print the cursor line number"],">":["shift lines one \'shiftwidth\' right"],"@":["execute contents of a register"],"@@":["repeat the previous \\":@\\""],"Next":["go to previous file in the argument list"],"append":["append text"],"abbreviate":["enter abbreviation"],"abclear":["remove all abbreviations"],"aboveleft":["make split window appear left or above"],"all":["open a window for each file in the argument","\\t\\t\\t\\tlist"],"amenu":["enter new menu item for all modes"],"anoremenu":["enter a new menu for all modes that will not","\\t\\t\\t\\tbe remapped"],"args":["print the argument list"],"argadd":["add items to the argument list"],"argdelete":["delete items from the argument list"],"argedit":["add item to the argument list and edit it"],"argdo":["do a command on all items in the argument list"],"argglobal":["define the global argument list"],"arglocal":["define a local argument list"],"argument":["go to specific file in the argument list"],"ascii":["print ascii value of character under the cursor"],"autocmd":["enter or show autocommands"],"augroup":["select the autocommand group to use"],"aunmenu":["remove menu for all modes"],"buffer":["go to specific buffer in the buffer list"],"bNext":["go to previous buffer in the buffer list"],"ball":["open a window for each buffer in the buffer list"],"badd":["add buffer to the buffer list"],"bdelete":["remove a buffer from the buffer list"],"behave":["set mouse and selection behavior"],"belowright":["make split window appear right or below"],"bfirst":["go to first buffer in the buffer list"],"blast":["go to last buffer in the buffer list"],"bmodified":["go to next buffer in the buffer list that has","\\t\\t\\t\\tbeen modified"],"bnext":["go to next buffer in the buffer list"],"botright":["make split window appear at bottom or far right"],"bprevious":["go to previous buffer in the buffer list"],"brewind":["go to first buffer in the buffer list"],"break":["break out of while loop"],"breakadd":["add a debugger breakpoint"],"breakdel":["delete a debugger breakpoint"],"breaklist":["list debugger breakpoints"],"browse":["use file selection dialog"],"bufdo":["execute command in each listed buffer"],"buffers":["list all files in the buffer list"],"bunload":["unload a specific buffer"],"bwipeout":["really delete a buffer"],"change":["replace a line or series of lines"],"cNext":["go to previous error"],"cNfile":["go to last error in previous file"],"cabbrev":["like \\":abbreviate\\" but for Command-line mode"],"cabclear":["clear all abbreviations for Command-line mode"],"cabove":["go to error above current line"],"caddbuffer":["add errors from buffer"],"caddexpr":["add errors from expr"],"caddfile":["add error message to current quickfix list"],"call":["call a function"],"catch":["part of a :try command"],"cbelow":["go to error below current line"],"cbottom":["scroll to the bottom of the quickfix window"],"cbuffer":["parse error messages and jump to first error"],"cc":["go to specific error"],"cclose":["close quickfix window"],"cd":["change directory"],"cdo":["execute command in each valid error list entry"],"cfdo":["execute command in each file in error list"],"center":["format lines at the center"],"cexpr":["read errors from expr and jump to first"],"cfile":["read file with error messages and jump to first"],"cfirst":["go to the specified error, default first one"],"cgetbuffer":["get errors from buffer"],"cgetexpr":["get errors from expr"],"cgetfile":["read file with error messages"],"changes":["print the change list"],"chdir":["change directory"],"checkpath":["list included files"],"checktime":["check timestamp of loaded buffers"],"chistory":["list the error lists"],"clast":["go to the specified error, default last one"],"clearjumps":["clear the jump list"],"clist":["list all errors"],"close":["close current window"],"cmap":["like \\":map\\" but for Command-line mode"],"cmapclear":["clear all mappings for Command-line mode"],"cmenu":["add menu for Command-line mode"],"cnext":["go to next error"],"cnewer":["go to newer error list"],"cnfile":["go to first error in next file"],"cnoremap":["like \\":noremap\\" but for Command-line mode"],"cnoreabbrev":["like \\":noreabbrev\\" but for Command-line mode"],"cnoremenu":["like \\":noremenu\\" but for Command-line mode"],"copy":["copy lines"],"colder":["go to older error list"],"colorscheme":["load a specific color scheme"],"command":["create user-defined command"],"comclear":["clear all user-defined commands"],"compiler":["do settings for a specific compiler"],"continue":["go back to :while"],"confirm":["prompt user when confirmation required"],"const":["create a variable as a constant"],"copen":["open quickfix window"],"cprevious":["go to previous error"],"cpfile":["go to last error in previous file"],"cquit":["quit Vim with an error code"],"crewind":["go to the specified error, default first one"],"cscope":["execute cscope command"],"cstag":["use cscope to jump to a tag"],"cunmap":["like \\":unmap\\" but for Command-line mode"],"cunabbrev":["like \\":unabbrev\\" but for Command-line mode"],"cunmenu":["remove menu for Command-line mode"],"cwindow":["open or close quickfix window"],"delete":["delete lines"],"delmarks":["delete marks"],"debug":["run a command in debugging mode"],"debuggreedy":["read debug mode commands from normal input"],"delcommand":["delete user-defined command"],"delfunction":["delete a user function"],"diffupdate":["update \'diff\' buffers"],"diffget":["remove differences in current buffer"],"diffoff":["switch off diff mode"],"diffpatch":["apply a patch and show differences"],"diffput":["remove differences in other buffer"],"diffsplit":["show differences with another file"],"diffthis":["make current window a diff window"],"digraphs":["show or enter digraphs"],"display":["display registers"],"djump":["jump to #define"],"dl":["short for |:delete| with the \'l\' flag"],"del":["short for |:delete| with the \'l\' flag"],"dlist":["list #defines"],"doautocmd":["apply autocommands to current buffer"],"doautoall":["apply autocommands for all loaded buffers"],"dp":["short for |:delete| with the \'p\' flag"],"drop":["jump to window editing file or edit file in","\\t\\t\\t\\tcurrent window"],"dsearch":["list one #define"],"dsplit":["split window and jump to #define"],"edit":["edit a file"],"earlier":["go to older change, undo"],"echo":["echoes the result of expressions"],"echoerr":["like :echo, show like an error and use history"],"echohl":["set highlighting for echo commands"],"echomsg":["same as :echo, put message in history"],"echon":["same as :echo, but without <EOL>"],"else":["part of an :if command"],"elseif":["part of an :if command"],"emenu":["execute a menu by name"],"endif":["end previous :if"],"endfor":["end previous :for"],"endfunction":["end of a user function"],"endtry":["end previous :try"],"endwhile":["end previous :while"],"enew":["edit a new, unnamed buffer"],"ex":["same as \\":edit\\""],"execute":["execute result of expressions"],"exit":["same as \\":xit\\""],"exusage":["overview of Ex commands"],"file":["show or set the current file name"],"files":["list all files in the buffer list"],"filetype":["switch file type detection on/off"],"filter":["filter output of following command"],"find":["find file in \'path\' and edit it"],"finally":["part of a :try command"],"finish":["quit sourcing a Vim script"],"first":["go to the first file in the argument list"],"fold":["create a fold"],"foldclose":["close folds"],"folddoopen":["execute command on lines not in a closed fold"],"folddoclosed":["execute command on lines in a closed fold"],"foldopen":["open folds"],"for":["for loop"],"function":["define a user function"],"global":["execute commands for matching lines"],"goto":["go to byte in the buffer"],"grep":["run \'grepprg\' and jump to first match"],"grepadd":["like :grep, but append to current list"],"gui":["start the GUI"],"gvim":["start the GUI"],"hardcopy":["send text to the printer"],"help":["open a help window"],"helpclose":["close one help window"],"helpgrep":["like \\":grep\\" but searches help files"],"helptags":["generate help tags for a directory"],"highlight":["specify highlighting methods"],"hide":["hide current buffer for a command"],"history":["print a history list"],"insert":["insert text"],"iabbrev":["like \\":abbrev\\" but for Insert mode"],"iabclear":["like \\":abclear\\" but for Insert mode"],"if":["execute commands when condition met"],"ijump":["jump to definition of identifier"],"ilist":["list lines where identifier matches"],"imap":["like \\":map\\" but for Insert mode"],"imapclear":["like \\":mapclear\\" but for Insert mode"],"imenu":["add menu for Insert mode"],"inoremap":["like \\":noremap\\" but for Insert mode"],"inoreabbrev":["like \\":noreabbrev\\" but for Insert mode"],"inoremenu":["like \\":noremenu\\" but for Insert mode"],"intro":["print the introductory message"],"isearch":["list one line where identifier matches"],"isplit":["split window and jump to definition of","\\t\\t\\t\\tidentifier"],"iunmap":["like \\":unmap\\" but for Insert mode"],"iunabbrev":["like \\":unabbrev\\" but for Insert mode"],"iunmenu":["remove menu for Insert mode"],"join":["join lines"],"jumps":["print the jump list"],"k":["set a mark"],"keepalt":["following command keeps the alternate file"],"keepmarks":["following command keeps marks where they are"],"keepjumps":["following command keeps jumplist and marks"],"keeppatterns":["following command keeps search pattern history"],"lNext":["go to previous entry in location list"],"lNfile":["go to last entry in previous file"],"list":["print lines"],"labove":["go to location above current line"],"laddexpr":["add locations from expr"],"laddbuffer":["add locations from buffer"],"laddfile":["add locations to current location list"],"last":["go to the last file in the argument list"],"language":["set the language (locale)"],"later":["go to newer change, redo"],"lbelow":["go to location below current line"],"lbottom":["scroll to the bottom of the location window"],"lbuffer":["parse locations and jump to first location"],"lcd":["change directory locally"],"lchdir":["change directory locally"],"lclose":["close location window"],"lcscope":["like \\":cscope\\" but uses location list"],"ldo":["execute command in valid location list entries"],"lfdo":["execute command in each file in location list"],"left":["left align lines"],"leftabove":["make split window appear left or above"],"let":["assign a value to a variable or option"],"lexpr":["read locations from expr and jump to first"],"lfile":["read file with locations and jump to first"],"lfirst":["go to the specified location, default first one"],"lgetbuffer":["get locations from buffer"],"lgetexpr":["get locations from expr"],"lgetfile":["read file with locations"],"lgrep":["run \'grepprg\' and jump to first match"],"lgrepadd":["like :grep, but append to current list"],"lhelpgrep":["like \\":helpgrep\\" but uses location list"],"lhistory":["list the location lists"],"ll":["go to specific location"],"llast":["go to the specified location, default last one"],"llist":["list all locations"],"lmake":["execute external command \'makeprg\' and parse","\\t\\t\\t\\terror messages"],"lmap":["like \\":map!\\" but includes Lang-Arg mode"],"lmapclear":["like \\":mapclear!\\" but includes Lang-Arg mode"],"lnext":["go to next location"],"lnewer":["go to newer location list"],"lnfile":["go to first location in next file"],"lnoremap":["like \\":noremap!\\" but includes Lang-Arg mode"],"loadkeymap":["load the following keymaps until EOF"],"loadview":["load view for current window from a file"],"lockmarks":["following command keeps marks where they are"],"lockvar":["lock variables"],"lolder":["go to older location list"],"lopen":["open location window"],"lprevious":["go to previous location"],"lpfile":["go to last location in previous file"],"lrewind":["go to the specified location, default first one"],"ls":["list all buffers"],"ltag":["jump to tag and add matching tags to the","\\t\\t\\t\\tlocation list"],"lunmap":["like \\":unmap!\\" but includes Lang-Arg mode"],"lua":["execute |Lua| command"],"luado":["execute Lua command for each line"],"luafile":["execute |Lua| script file"],"lvimgrep":["search for pattern in files"],"lvimgrepadd":["like :vimgrep, but append to current list"],"lwindow":["open or close location window"],"move":["move lines"],"mark":["set a mark"],"make":["execute external command \'makeprg\' and parse","\\t\\t\\t\\terror messages"],"map":["show or enter a mapping"],"mapclear":["clear all mappings for Normal and Visual mode"],"marks":["list all marks"],"match":["define a match to highlight"],"menu":["enter a new menu item"],"menutranslate":["add a menu translation item"],"messages":["view previously displayed messages"],"mkexrc":["write current mappings and settings to a file"],"mksession":["write session info to a file"],"mkspell":["produce .spl spell file"],"mkvimrc":["write current mappings and settings to a file"],"mkview":["write view of current window to a file"],"mode":["show or change the screen mode"],"next":["go to next file in the argument list"],"new":["create a new empty window"],"nmap":["like \\":map\\" but for Normal mode"],"nmapclear":["clear all mappings for Normal mode"],"nmenu":["add menu for Normal mode"],"nnoremap":["like \\":noremap\\" but for Normal mode"],"nnoremenu":["like \\":noremenu\\" but for Normal mode"],"noautocmd":["following commands don\'t trigger autocommands"],"noremap":["enter a mapping that will not be remapped"],"nohlsearch":["suspend \'hlsearch\' highlighting"],"noreabbrev":["enter an abbreviation that will not be","\\t\\t\\t\\tremapped"],"noremenu":["enter a menu that will not be remapped"],"normal":["execute Normal mode commands"],"noswapfile":["following commands don\'t create a swap file"],"number":["print lines with line number"],"nunmap":["like \\":unmap\\" but for Normal mode"],"nunmenu":["remove menu for Normal mode"],"oldfiles":["list files that have marks in the |shada| file"],"omap":["like \\":map\\" but for Operator-pending mode"],"omapclear":["remove all mappings for Operator-pending mode"],"omenu":["add menu for Operator-pending mode"],"only":["close all windows except the current one"],"onoremap":["like \\":noremap\\" but for Operator-pending mode"],"onoremenu":["like \\":noremenu\\" but for Operator-pending mode"],"options":["open the options-window"],"ounmap":["like \\":unmap\\" but for Operator-pending mode"],"ounmenu":["remove menu for Operator-pending mode"],"ownsyntax":["set new local syntax highlight for this window"],"packadd":["add a plugin from \'packpath\'"],"packloadall":["load all packages under \'packpath\'"],"pclose":["close preview window"],"pedit":["edit file in the preview window"],"print":["print lines"],"profdel":["stop profiling a function or script"],"profile":["profiling functions and scripts"],"promptfind":["open GUI dialog for searching"],"promptrepl":["open GUI dialog for search/replace"],"pop":["jump to older entry in tag stack"],"popup":["popup a menu by name"],"ppop":["\\":pop\\" in preview window"],"preserve":["write all text to swap file"],"previous":["go to previous file in argument list"],"psearch":["like \\":ijump\\" but shows match in preview window"],"ptag":["show tag in preview window"],"ptNext":["|:tNext| in preview window"],"ptfirst":["|:trewind| in preview window"],"ptjump":["|:tjump| and show tag in preview window"],"ptlast":["|:tlast| in preview window"],"ptnext":["|:tnext| in preview window"],"ptprevious":["|:tprevious| in preview window"],"ptrewind":["|:trewind| in preview window"],"ptselect":["|:tselect| and show tag in preview window"],"put":["insert contents of register in the text"],"pwd":["print current directory"],"py3":["execute Python 3 command"],"python3":["same as :py3"],"py3do":["execute Python 3 command for each line"],"py3file":["execute Python 3 script file"],"python":["execute Python command"],"pydo":["execute Python command for each line"],"pyfile":["execute Python script file"],"pyx":["execute |python_x| command"],"pythonx":["same as :pyx"],"pyxdo":["execute |python_x| command for each line"],"pyxfile":["execute |python_x| script file"],"quit":["quit current window (when one window quit Vim)"],"quitall":["quit Vim"],"qall":["quit Vim"],"read":["read file into the text"],"recover":["recover a file from a swap file"],"redo":["redo one undone change"],"redir":["redirect messages to a file or register"],"redraw":["force a redraw of the display"],"redrawstatus":["force a redraw of the status line(s)"],"redrawtabline":["force a redraw of the tabline"],"registers":["display the contents of registers"],"resize":["change current window height"],"retab":["change tab size"],"return":["return from a user function"],"rewind":["go to the first file in the argument list"],"right":["right align text"],"rightbelow":["make split window appear right or below"],"rshada":["read from |shada| file"],"ruby":["execute Ruby command"],"rubydo":["execute Ruby command for each line"],"rubyfile":["execute Ruby script file"],"rundo":["read undo information from a file"],"runtime":["source vim scripts in \'runtimepath\'"],"substitute":["find and replace text"],"sNext":["split window and go to previous file in","\\t\\t\\t\\targument list"],"sandbox":["execute a command in the sandbox"],"sargument":["split window and go to specific file in","\\t\\t\\t\\targument list"],"sall":["open a window for each file in argument list"],"saveas":["save file under another name."],"sbuffer":["split window and go to specific file in the","\\t\\t\\t\\tbuffer list"],"sbNext":["split window and go to previous file in the","\\t\\t\\t\\tbuffer list"],"sball":["open a window for each file in the buffer list"],"sbfirst":["split window and go to first file in the","\\t\\t\\t\\tbuffer list"],"sblast":["split window and go to last file in buffer","\\t\\t\\t\\tlist"],"sbmodified":["split window and go to modified file in the","\\t\\t\\t\\tbuffer list"],"sbnext":["split window and go to next file in the buffer","\\t\\t\\t\\tlist"],"sbprevious":["split window and go to previous file in the","\\t\\t\\t\\tbuffer list"],"sbrewind":["split window and go to first file in the","\\t\\t\\t\\tbuffer list"],"scriptnames":["list names of all sourced Vim scripts"],"scriptencoding":["encoding used in sourced Vim script"],"scriptversion":["version of Vim script used"],"scscope":["split window and execute cscope command"],"set":["show or set options"],"setfiletype":["set \'filetype\', unless it was set already"],"setglobal":["show global values of options"],"setlocal":["show or set options locally"],"sfind":["split current window and edit file in \'path\'"],"sfirst":["split window and go to first file in the","\\t\\t\\t\\targument list"],"sign":["manipulate signs"],"silent":["run a command silently"],"sleep":["do nothing for a few seconds"],"slast":["split window and go to last file in the","\\t\\t\\t\\targument list"],"smagic":[":substitute with \'magic\'"],"smap":["like \\":map\\" but for Select mode"],"smapclear":["remove all mappings for Select mode"],"smenu":["add menu for Select mode"],"snext":["split window and go to next file in the","\\t\\t\\t\\targument list"],"snomagic":[":substitute with \'nomagic\'"],"snoremap":["like \\":noremap\\" but for Select mode"],"snoremenu":["like \\":noremenu\\" but for Select mode"],"sort":["sort lines"],"source":["read Vim or Ex commands from a file"],"spelldump":["split window and fill with all correct words"],"spellgood":["add good word for spelling"],"spellinfo":["show info about loaded spell files"],"spellrare":["add rare word for spelling"],"spellrepall":["replace all bad words like last |z=|"],"spellundo":["remove good or bad word"],"spellwrong":["add spelling mistake"],"split":["split current window"],"sprevious":["split window and go to previous file in the","\\t\\t\\t\\targument list"],"srewind":["split window and go to first file in the","\\t\\t\\t\\targument list"],"stop":["suspend the editor or escape to a shell"],"stag":["split window and jump to a tag"],"startinsert":["start Insert mode"],"startgreplace":["start Virtual Replace mode"],"startreplace":["start Replace mode"],"stopinsert":["stop Insert mode"],"stjump":["do \\":tjump\\" and split window"],"stselect":["do \\":tselect\\" and split window"],"sunhide":["same as \\":unhide\\""],"sunmap":["like \\":unmap\\" but for Select mode"],"sunmenu":["remove menu for Select mode"],"suspend":["same as \\":stop\\""],"sview":["split window and edit file read-only"],"swapname":["show the name of the current swap file"],"syntax":["syntax highlighting"],"syntime":["measure syntax highlighting speed"],"syncbind":["sync scroll binding"],"t":["same as \\":copy\\""],"tNext":["jump to previous matching tag"],"tabNext":["go to previous tab page"],"tabclose":["close current tab page"],"tabdo":["execute command in each tab page"],"tabedit":["edit a file in a new tab page"],"tabfind":["find file in \'path\', edit it in a new tab page"],"tabfirst":["go to first tab page"],"tablast":["go to last tab page"],"tabmove":["move tab page to other position"],"tabnew":["edit a file in a new tab page"],"tabnext":["go to next tab page"],"tabonly":["close all tab pages except the current one"],"tabprevious":["go to previous tab page"],"tabrewind":["go to first tab page"],"tabs":["list the tab pages and what they contain"],"tab":["create new tab when opening new window"],"tag":["jump to tag"],"tags":["show the contents of the tag stack"],"tcd":["change directory for tab page"],"tchdir":["change directory for tab page"],"terminal":["open a terminal buffer"],"tfirst":["jump to first matching tag"],"throw":["throw an exception"],"tjump":["like \\":tselect\\", but jump directly when there","\\t\\t\\t\\tis only one match"],"tlast":["jump to last matching tag"],"tmapclear":["remove all mappings for Terminal-Job mode"],"tmap":["like \\":map\\" but for Terminal-Job mode"],"tmenu":["define menu tooltip"],"tnext":["jump to next matching tag"],"tnoremap":["like \\":noremap\\" but for Terminal-Job mode"],"topleft":["make split window appear at top or far left"],"tprevious":["jump to previous matching tag"],"trewind":["jump to first matching tag"],"try":["execute commands, abort on error or exception"],"tselect":["list matching tags and select one"],"tunmap":["like \\":unmap\\" but for Terminal-Job mode"],"tunmenu":["remove menu tooltip"],"undo":["undo last change(s)"],"undojoin":["join next change with previous undo block"],"undolist":["list leafs of the undo tree"],"unabbreviate":["remove abbreviation"],"unhide":["open a window for each loaded file in the","\\t\\t\\t\\tbuffer list"],"unlet":["delete variable"],"unlockvar":["unlock variables"],"unmap":["remove mapping"],"unmenu":["remove menu"],"unsilent":["run a command not silently"],"update":["write buffer if modified"],"vglobal":["execute commands for not matching lines"],"version":["print version number and other info"],"verbose":["execute command with \'verbose\' set"],"vertical":["make following command split vertically"],"vimgrep":["search for pattern in files"],"vimgrepadd":["like :vimgrep, but append to current list"],"visual":["same as \\":edit\\", but turns off \\"Ex\\" mode"],"viusage":["overview of Normal mode commands"],"view":["edit a file read-only"],"vmap":["like \\":map\\" but for Visual+Select mode"],"vmapclear":["remove all mappings for Visual+Select mode"],"vmenu":["add menu for Visual+Select mode"],"vnew":["create a new empty window, vertically split"],"vnoremap":["like \\":noremap\\" but for Visual+Select mode"],"vnoremenu":["like \\":noremenu\\" but for Visual+Select mode"],"vsplit":["split current window vertically"],"vunmap":["like \\":unmap\\" but for Visual+Select mode"],"vunmenu":["remove menu for Visual+Select mode"],"windo":["execute command in each window"],"write":["write to a file"],"wNext":["write to a file and go to previous file in","\\t\\t\\t\\targument list"],"wall":["write all (changed) buffers"],"while":["execute loop for as long as condition met"],"winsize":["get or set window size (obsolete)"],"wincmd":["execute a Window (CTRL-W) command"],"winpos":["get or set window position"],"wnext":["write to a file and go to next file in","\\t\\t\\t\\targument list"],"wprevious":["write to a file and go to previous file in","\\t\\t\\t\\targument list"],"wq":["write to a file and quit window or Vim"],"wqall":["write all changed buffers and quit Vim"],"wshada":["write to ShaDa file"],"wundo":["write undo information to a file"],"xit":["write if buffer changed and quit window or Vim"],"xall":["same as \\":wqall\\""],"xmapclear":["remove all mappings for Visual mode"],"xmap":["like \\":map\\" but for Visual mode"],"xmenu":["add menu for Visual mode"],"xnoremap":["like \\":noremap\\" but for Visual mode"],"xnoremenu":["like \\":noremenu\\" but for Visual mode"],"xunmap":["like \\":unmap\\" but for Visual mode"],"xunmenu":["remove menu for Visual mode"],"yank":["yank lines into a register"],"z":["print some lines"],"~":["repeat last \\":substitute\\""],"Print":["print lines"],"X":["ask for encryption key"],"cafter":["go to error after current cursor"],"cbefore":["go to error before current cursor"],"fixdel":["set key code of <Del>"],"helpfind":["dialog to open a help window"],"lafter":["go to location after current cursor"],"lbefore":["go to location before current cursor"],"mzscheme":["execute MzScheme command"],"mzfile":["execute MzScheme script file"],"nbclose":["close the current Netbeans session"],"nbkey":["pass a key to Netbeans"],"nbstart":["start a new Netbeans session"],"open":["start open mode (not implemented)"],"perl":["execute Perl command"],"perldo":["execute Perl command for each line"],"rviminfo":["read from viminfo file"],"shell":["escape to a shell"],"simalt":["Win32 GUI: simulate Windows ALT key"],"smile":["make the user happy"],"tcl":["execute Tcl command"],"tcldo":["execute Tcl command for each line"],"tclfile":["execute Tcl script file"],"tearoff":["tear-off a menu"],"tlmenu":["add menu for Terminal-Job mode"],"tlnoremenu":["like \\":noremenu\\" but for Terminal-Job mode"],"tlunmenu":["remove menu for Terminal-Job mode"],"wviminfo":["write to viminfo file"],"xrestore":["restores the X server connection"]},"functions":{"abs":["\\t\\tReturn the absolute value of {expr}. When {expr} evaluates to","\\t\\ta |Float| abs() returns a |Float|. When {expr} can be","\\t\\tconverted to a |Number| abs() returns a |Number|. Otherwise","\\t\\tabs() gives an error message and returns -1.","\\t\\tExamples: >","\\t\\t\\techo abs(1.456)","<\\t\\t\\t1.456 >","\\t\\t\\techo abs(-5.456)","<\\t\\t\\t5.456 >","\\t\\t\\techo abs(-4)","<\\t\\t\\t4",""],"acos":["\\t\\tReturn the arc cosine of {expr} measured in radians, as a","\\t\\t|Float| in the range of [0, pi].","\\t\\t{expr} must evaluate to a |Float| or a |Number| in the range","\\t\\t[-1, 1].","\\t\\tExamples: >","\\t\\t\\t:echo acos(0)","<\\t\\t\\t1.570796 >","\\t\\t\\t:echo acos(-0.5)","<\\t\\t\\t2.094395",""],"add":["\\t\\tAppend the item {expr} to |List| {list}. Returns the","\\t\\tresulting |List|. Examples: >","\\t\\t\\t:let alist = add([1, 2, 3], item)","\\t\\t\\t:call add(mylist, \\"woodstock\\")","<\\t\\tNote that when {expr} is a |List| it is appended as a single","\\t\\titem. Use |extend()| to concatenate |Lists|.","\\t\\tUse |insert()| to add an item at another position.",""],"and":["\\t\\tBitwise AND on the two arguments. The arguments are converted","\\t\\tto a number. A List, Dict or Float argument causes an error.","\\t\\tExample: >","\\t\\t\\t:let flag = and(bits, 0x80)"],"api_info":["\\t\\tReturns Dictionary of |api-metadata|.","","\\t\\tView it in a nice human-readable format: >","\\t\\t :lua print(vim.inspect(vim.fn.api_info()))"],"append":["\\t\\tWhen {text} is a |List|: Append each item of the |List| as a","\\t\\ttext line below line {lnum} in the current buffer.","\\t\\tOtherwise append {text} as one text line below line {lnum} in","\\t\\tthe current buffer.","\\t\\t{lnum} can be zero to insert a line before the first one.","\\t\\tReturns 1 for failure ({lnum} out of range or out of memory),","\\t\\t0 for success. Example: >","\\t\\t\\t:let failed = append(line(\'$\'), \\"# THE END\\")","\\t\\t\\t:let failed = append(0, [\\"Chapter 1\\", \\"the beginning\\"])"],"appendbufline":["\\t\\tLike |append()| but append the text in buffer {expr}.","","\\t\\tFor the use of {expr}, see |bufname()|.","","\\t\\t{lnum} is used like with |append()|. Note that using |line()|","\\t\\twould use the current buffer, not the one appending to.","\\t\\tUse \\"$\\" to append at the end of the buffer.","","\\t\\tOn success 0 is returned, on failure 1 is returned.","","\\t\\tIf {expr} is not a valid buffer or {lnum} is not valid, an","\\t\\terror message is given. Example: >","\\t\\t\\t:let failed = appendbufline(13, 0, \\"# THE START\\")","<"],"argc":["\\t\\tThe result is the number of files in the argument list. See","\\t\\t|arglist|.","\\t\\tIf {winid} is not supplied, the argument list of the current","\\t\\twindow is used.","\\t\\tIf {winid} is -1, the global argument list is used.","\\t\\tOtherwise {winid} specifies the window of which the argument","\\t\\tlist is used: either the window number or the window ID.","\\t\\tReturns -1 if the {winid} argument is invalid.",""],"argidx":["\\t\\tthe first file. argc() - 1 is the last one. See |arglist|.",""],"arglistid":["\\t\\tReturn the argument list ID. This is a number which","\\t\\tidentifies the argument list being used. Zero is used for the","\\t\\tglobal argument list. See |arglist|.","\\t\\tReturns -1 if the arguments are invalid.","","\\t\\tWithout arguments use the current window.","\\t\\tWith {winnr} only use this window in the current tab page.","\\t\\tWith {winnr} and {tabnr} use the window in the specified tab","\\t\\tpage.","\\t\\t{winnr} can be the window number or the |window-ID|.",""],"argv":["\\t\\tThe result is the {nr}th file in the argument list. See","\\t\\t|arglist|. \\"argv(0)\\" is the first one. Example: >","\\t:let i = 0","\\t:while i < argc()","\\t: let f = escape(fnameescape(argv(i)), \'.\')","\\t: exe \'amenu Arg.\' . f . \' :e \' . f . \'<CR>\'","\\t: let i = i + 1","\\t:endwhile","<\\t\\tWithout the {nr} argument, or when {nr} is -1, a |List| with","\\t\\tthe whole |arglist| is returned.","","\\t\\tThe {winid} argument specifies the window ID, see |argc()|."],"assert_beeps":["\\t\\tRun {cmd} and add an error message to |v:errors| if it does","\\t\\tNOT produce a beep or visual bell.","\\t\\tAlso see |assert_fails()| and |assert-return|.",""],"assert_equal":["\\t\\tWhen {expected} and {actual} are not equal an error message is","\\t\\tadded to |v:errors| and 1 is returned. Otherwise zero is","\\t\\treturned |assert-return|.","\\t\\tThere is no automatic conversion, the String \\"4\\" is different","\\t\\tfrom the Number 4. And the number 4 is different from the","\\t\\tFloat 4.0. The value of \'ignorecase\' is not used here, case","\\t\\talways matters.","\\t\\tWhen {msg} is omitted an error in the form \\"Expected","\\t\\t{expected} but got {actual}\\" is produced.","\\t\\tExample: >","\\tassert_equal(\'foo\', \'bar\')","<\\t\\tWill result in a string to be added to |v:errors|:","\\ttest.vim line 12: Expected \'foo\' but got \'bar\' ~",""],"assert_equalfile":["\\t\\tWhen the files {fname-one} and {fname-two} do not contain","\\t\\texactly the same text an error message is added to |v:errors|.","\\t\\tAlso see |assert-return|.","\\t\\tWhen {fname-one} or {fname-two} does not exist the error will","\\t\\tmention that."],"assert_exception":["\\t\\tWhen v:exception does not contain the string {error} an error","\\t\\tmessage is added to |v:errors|. Also see |assert-return|.","\\t\\tThis can be used to assert that a command throws an exception.","\\t\\tUsing the error number, followed by a colon, avoids problems","\\t\\twith translations: >","\\t\\t\\ttry","\\t\\t\\t commandthatfails","\\t\\t\\t call assert_false(1, \'command should have failed\')","\\t\\t\\tcatch","\\t\\t\\t call assert_exception(\'E492:\')","\\t\\t\\tendtry"],"assert_fails":["\\t\\tRun {cmd} and add an error message to |v:errors| if it does","\\t\\tNOT produce an error. Also see |assert-return|.","\\t\\tWhen {error} is given it must match in |v:errmsg|.","\\t\\tNote that beeping is not considered an error, and some failing","\\t\\tcommands only beep. Use |assert_beeps()| for those."],"assert_false":["\\t\\tWhen {actual} is not false an error message is added to","\\t\\t|v:errors|, like with |assert_equal()|.","\\t\\tAlso see |assert-return|.","\\t\\tA value is false when it is zero or |v:false|. When \\"{actual}\\"","\\t\\tis not a number or |v:false| the assert fails.","\\t\\tWhen {msg} is omitted an error in the form","\\t\\t\\"Expected False but got {actual}\\" is produced."],"assert_inrange":["\\t\\tThis asserts number and |Float| values. When {actual} is lower","\\t\\tthan {lower} or higher than {upper} an error message is added","\\t\\tto |v:errors|. Also see |assert-return|.","\\t\\tWhen {msg} is omitted an error in the form","\\t\\t\\"Expected range {lower} - {upper}, but got {actual}\\" is","\\t\\tproduced.",""],"assert_match":["\\t\\tWhen {pattern} does not match {actual} an error message is","\\t\\tadded to |v:errors|. Also see |assert-return|.","","\\t\\t{pattern} is used as with |=~|: The matching is always done","\\t\\tlike \'magic\' was set and \'cpoptions\' is empty, no matter what","\\t\\tthe actual value of \'magic\' or \'cpoptions\' is.","","\\t\\t{actual} is used as a string, automatic conversion applies.","\\t\\tUse \\"^\\" and \\"$\\" to match with the start and end of the text.","\\t\\tUse both to match the whole text.","","\\t\\tWhen {msg} is omitted an error in the form","\\t\\t\\"Pattern {pattern} does not match {actual}\\" is produced.","\\t\\tExample: >","\\tassert_match(\'^f.*o$\', \'foobar\')","<\\t\\tWill result in a string to be added to |v:errors|:","\\ttest.vim line 12: Pattern \'^f.*o$\' does not match \'foobar\' ~",""],"assert_notequal":["\\t\\tThe opposite of `assert_equal()`: add an error message to","\\t\\t|v:errors| when {expected} and {actual} are equal.","\\t\\tAlso see |assert-return|.",""],"assert_notmatch":["\\t\\tThe opposite of `assert_match()`: add an error message to","\\t\\t|v:errors| when {pattern} matches {actual}.","\\t\\tAlso see |assert-return|."],"assert_report":["\\t\\tReport a test failure directly, using {msg}.","\\t\\tAlways returns one."],"assert_true":["\\t\\tWhen {actual} is not true an error message is added to","\\t\\t|v:errors|, like with |assert_equal()|.","\\t\\tAlso see |assert-return|.","\\t\\tA value is |TRUE| when it is a non-zero number or |v:true|.","\\t\\tWhen {actual} is not a number or |v:true| the assert fails.","\\t\\tWhen {msg} is omitted an error in the form \\"Expected True but","\\t\\tgot {actual}\\" is produced."],"asin":["\\t\\tReturn the arc sine of {expr} measured in radians, as a |Float|","\\t\\tin the range of [-pi/2, pi/2].","\\t\\t{expr} must evaluate to a |Float| or a |Number| in the range","\\t\\t[-1, 1].","\\t\\tExamples: >","\\t\\t\\t:echo asin(0.8)","<\\t\\t\\t0.927295 >","\\t\\t\\t:echo asin(-0.5)","<\\t\\t\\t-0.523599",""],"atan":["\\t\\tReturn the principal value of the arc tangent of {expr}, in","\\t\\tthe range [-pi/2, +pi/2] radians, as a |Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo atan(100)","<\\t\\t\\t1.560797 >","\\t\\t\\t:echo atan(-4.01)","<\\t\\t\\t-1.326405",""],"atan2":["\\t\\tReturn the arc tangent of {expr1} / {expr2}, measured in","\\t\\tradians, as a |Float| in the range [-pi, pi].","\\t\\t{expr1} and {expr2} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo atan2(-1, 1)","<\\t\\t\\t-0.785398 >","\\t\\t\\t:echo atan2(1, -1)","<\\t\\t\\t2.356194","",""],"browse":["\\t\\tPut up a file requester. This only works when \\"has(\\"browse\\")\\"","\\t\\treturns |TRUE| (only in some GUI versions).","\\t\\tThe input fields are:","\\t\\t {save}\\twhen |TRUE|, select file to write","\\t\\t {title}\\ttitle for the requester","\\t\\t {initdir}\\tdirectory to start browsing in","\\t\\t {default}\\tdefault file name","\\t\\tWhen the \\"Cancel\\" button is hit, something went wrong, or","\\t\\tbrowsing is not possible, an empty string is returned.",""],"browsedir":["\\t\\tPut up a directory requester. This only works when","\\t\\t\\"has(\\"browse\\")\\" returns |TRUE| (only in some GUI versions).","\\t\\tOn systems where a directory browser is not supported a file","\\t\\tbrowser is used. In that case: select a file in the directory","\\t\\tto be used.","\\t\\tThe input fields are:","\\t\\t {title}\\ttitle for the requester","\\t\\t {initdir}\\tdirectory to start browsing in","\\t\\tWhen the \\"Cancel\\" button is hit, something went wrong, or","\\t\\tbrowsing is not possible, an empty string is returned."],"bufadd":["\\t\\tAdd a buffer to the buffer list with {name}.","\\t\\tIf a buffer for file {name} already exists, return that buffer","\\t\\tnumber. Otherwise return the buffer number of the newly","\\t\\tcreated buffer. When {name} is an empty string then a new","\\t\\tbuffer is always created.","\\t\\tThe buffer will not have\' \'buflisted\' set."],"bufexists":["\\t\\tThe result is a Number, which is |TRUE| if a buffer called","\\t\\t{expr} exists.","\\t\\tIf the {expr} argument is a number, buffer numbers are used.","\\t\\tNumber zero is the alternate buffer for the current window.","","\\t\\tIf the {expr} argument is a string it must match a buffer name","\\t\\texactly. The name can be:","\\t\\t- Relative to the current directory.","\\t\\t- A full path.","\\t\\t- The name of a buffer with \'buftype\' set to \\"nofile\\".","\\t\\t- A URL name.","\\t\\tUnlisted buffers will be found.","\\t\\tNote that help files are listed by their short name in the","\\t\\toutput of |:buffers|, but bufexists() requires using their","\\t\\tlong name to be able to find them.","\\t\\tbufexists() may report a buffer exists, but to use the name","\\t\\twith a |:buffer| command you may need to use |expand()|. Esp","\\t\\tfor MS-Windows 8.3 names in the form \\"c:\\\\DOCUME~1\\"","\\t\\tUse \\"bufexists(0)\\" to test for the existence of an alternate","\\t\\tfile name."],"buflisted":["\\t\\tThe result is a Number, which is |TRUE| if a buffer called","\\t\\t{expr} exists and is listed (has the \'buflisted\' option set).","\\t\\tThe {expr} argument is used like with |bufexists()|."],"bufload":["\\t\\tEnsure the buffer {expr} is loaded. When the buffer name","\\t\\trefers to an existing file then the file is read. Otherwise","\\t\\tthe buffer will be empty. If the buffer was already loaded","\\t\\tthen there is no change.","\\t\\tIf there is an existing swap file for the file of the buffer,","\\t\\tthere will be no dialog, the buffer will be loaded anyway.","\\t\\tThe {expr} argument is used like with |bufexists()|."],"bufloaded":["\\t\\tThe result is a Number, which is |TRUE| if a buffer called","\\t\\t{expr} exists and is loaded (shown in a window or hidden).","\\t\\tThe {expr} argument is used like with |bufexists()|."],"bufname":["\\t\\tThe result is the name of a buffer, as it is displayed by the","\\t\\t\\":ls\\" command.","+\\t\\tIf {expr} is omitted the current buffer is used.","\\t\\tIf {expr} is a Number, that buffer number\'s name is given.","\\t\\tNumber zero is the alternate buffer for the current window.","\\t\\tIf {expr} is a String, it is used as a |file-pattern| to match","\\t\\twith the buffer names. This is always done like \'magic\' is","\\t\\tset and \'cpoptions\' is empty. When there is more than one","\\t\\tmatch an empty string is returned.","\\t\\t\\"\\" or \\"%\\" can be used for the current buffer, \\"#\\" for the","\\t\\talternate buffer.","\\t\\tA full match is preferred, otherwise a match at the start, end","\\t\\tor middle of the buffer name is accepted. If you only want a","\\t\\tfull match then put \\"^\\" at the start and \\"$\\" at the end of the","\\t\\tpattern.","\\t\\tListed buffers are found first. If there is a single match","\\t\\twith a listed buffer, that one is returned. Next unlisted","\\t\\tbuffers are searched for.","\\t\\tIf the {expr} is a String, but you want to use it as a buffer","\\t\\tnumber, force it to be a Number by adding zero to it: >","\\t\\t\\t:echo bufname(\\"3\\" + 0)","<\\t\\tIf the buffer doesn\'t exist, or doesn\'t have a name, an empty","\\t\\tstring is returned. >","\\tbufname(\\"#\\")\\t\\talternate buffer name","\\tbufname(3)\\t\\tname of buffer 3","\\tbufname(\\"%\\")\\t\\tname of current buffer","\\tbufname(\\"file2\\")\\tname of buffer where \\"file2\\" matches.",""],"bufnr":["\\t\\tThe result is the number of a buffer, as it is displayed by","\\t\\tthe \\":ls\\" command. For the use of {expr}, see |bufname()|","\\t\\tabove.","\\t\\tIf the buffer doesn\'t exist, -1 is returned. Or, if the","\\t\\t{create} argument is present and not zero, a new, unlisted,","\\t\\tbuffer is created and its number is returned.","\\t\\tbufnr(\\"$\\") is the last buffer: >","\\t\\t\\t:let last_buffer = bufnr(\\"$\\")","<\\t\\tThe result is a Number, which is the highest buffer number","\\t\\tof existing buffers. Note that not all buffers with a smaller","\\t\\tnumber necessarily exist, because \\":bwipeout\\" may have removed","\\t\\tthem. Use bufexists() to test for the existence of a buffer."],"bufwinid":["\\t\\tThe result is a Number, which is the |window-ID| of the first","\\t\\twindow associated with buffer {expr}. For the use of {expr},","\\t\\tsee |bufname()| above. If buffer {expr} doesn\'t exist or","\\t\\tthere is no such window, -1 is returned. Example: >","","\\techo \\"A window containing buffer 1 is \\" . (bufwinid(1))","<","\\t\\tOnly deals with the current tab page."],"bufwinnr":["\\t\\tThe result is a Number, which is the number of the first","\\t\\twindow associated with buffer {expr}. For the use of {expr},","\\t\\tsee |bufname()| above. If buffer {expr} doesn\'t exist or","\\t\\tthere is no such window, -1 is returned. Example: >","","\\techo \\"A window containing buffer 1 is \\" . (bufwinnr(1))","","<\\t\\tThe number can be used with |CTRL-W_w| and \\":wincmd w\\"","\\t\\t|:wincmd|.","\\t\\tOnly deals with the current tab page.",""],"byte2line":["\\t\\tReturn the line number that contains the character at byte","\\t\\tcount {byte} in the current buffer. This includes the","\\t\\tend-of-line character, depending on the \'fileformat\' option","\\t\\tfor the current buffer. The first character has byte count","\\t\\tone.","\\t\\tAlso see |line2byte()|, |go| and |:goto|."],"byteidx":["\\t\\tReturn byte index of the {nr}\'th character in the string","\\t\\t{expr}. Use zero for the first character, it returns zero.","\\t\\tThis function is only useful when there are multibyte","\\t\\tcharacters, otherwise the returned value is equal to {nr}.","\\t\\tComposing characters are not counted separately, their byte","\\t\\tlength is added to the preceding base character. See","\\t\\t|byteidxcomp()| below for counting composing characters","\\t\\tseparately.","\\t\\tExample : >","\\t\\t\\techo matchstr(str, \\".\\", byteidx(str, 3))","<\\t\\twill display the fourth character. Another way to do the","\\t\\tsame: >","\\t\\t\\tlet s = strpart(str, byteidx(str, 3))","\\t\\t\\techo strpart(s, 0, byteidx(s, 1))","<\\t\\tAlso see |strgetchar()| and |strcharpart()|.","","\\t\\tIf there are less than {nr} characters -1 is returned.","\\t\\tIf there are exactly {nr} characters the length of the string","\\t\\tin bytes is returned."],"byteidxcomp":["\\t\\tLike byteidx(), except that a composing character is counted","\\t\\tas a separate character. Example: >","\\t\\t\\tlet s = \'e\' . nr2char(0x301)","\\t\\t\\techo byteidx(s, 1)","\\t\\t\\techo byteidxcomp(s, 1)","\\t\\t\\techo byteidxcomp(s, 2)","<\\t\\tThe first and third echo result in 3 (\'e\' plus composing","\\t\\tcharacter is 3 bytes), the second echo results in 1 (\'e\' is","\\t\\tone byte)."],"call":["\\t\\tCall function {func} with the items in |List| {arglist} as","\\t\\targuments.","\\t\\t{func} can either be a |Funcref| or the name of a function.","\\t\\ta:firstline and a:lastline are set to the cursor line.","\\t\\tReturns the return value of the called function.","\\t\\t{dict} is for functions with the \\"dict\\" attribute. It will be","\\t\\tused to set the local variable \\"self\\". |Dictionary-function|"],"ceil":["\\t\\tReturn the smallest integral value greater than or equal to","\\t\\t{expr} as a |Float| (round up).","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\techo ceil(1.456)","<\\t\\t\\t2.0 >","\\t\\t\\techo ceil(-5.456)","<\\t\\t\\t-5.0 >","\\t\\t\\techo ceil(4.0)","<\\t\\t\\t4.0"],"changenr":["\\t\\tReturn the number of the most recent change. This is the same","\\t\\tnumber as what is displayed with |:undolist| and can be used","\\t\\twith the |:undo| command.","\\t\\tWhen a change was made it is the number of that change. After","\\t\\tredo it is the number of the redone change. After undo it is","\\t\\tone less than the number of the undone change."],"chanclose":["\\t\\tClose a channel or a specific stream associated with it.","\\t\\tFor a job, {stream} can be one of \\"stdin\\", \\"stdout\\",","\\t\\t\\"stderr\\" or \\"rpc\\" (closes stdin/stdout for a job started","\\t\\twith `\\"rpc\\":v:true`) If {stream} is omitted, all streams","\\t\\tare closed. If the channel is a pty, this will then close the","\\t\\tpty master, sending SIGHUP to the job process.","\\t\\tFor a socket, there is only one stream, and {stream} should be","\\t\\tommited."],"chansend":["\\t\\tSend data to channel {id}. For a job, it writes it to the","\\t\\tstdin of the process. For the stdio channel |channel-stdio|,","\\t\\tit writes to Nvim\'s stdout. Returns the number of bytes","\\t\\twritten if the write succeeded, 0 otherwise.","\\t\\tSee |channel-bytes| for more information.","","\\t\\t{data} may be a string, string convertible, or a list. If","\\t\\t{data} is a list, the items will be joined by newlines; any","\\t\\tnewlines in an item will be sent as NUL. To send a final","\\t\\tnewline, include a final empty string. Example: >","\\t\\t\\t:call chansend(id, [\\"abc\\", \\"123\\\\n456\\", \\"\\"])","< \\t\\twill send \\"abc<NL>123<NUL>456<NL>\\".","","\\t\\tchansend() writes raw data, not RPC messages. If the channel","\\t\\twas created with `\\"rpc\\":v:true` then the channel expects RPC","\\t\\tmessages, use |rpcnotify()| and |rpcrequest()| instead.",""],"char2nr":["\\t\\tReturn number value of the first char in {expr}. Examples: >","\\t\\t\\tchar2nr(\\" \\")\\t\\treturns 32","\\t\\t\\tchar2nr(\\"ABC\\")\\t\\treturns 65","\\t\\t\\tchar2nr(\\"á\\")\\t\\treturns 225","\\t\\t\\tchar2nr(\\"á\\"[0])\\t\\treturns 195","\\t\\t\\tchar2nr(\\"\\\\<M-x>\\")\\treturns 128","<\\t\\tNon-ASCII characters are always treated as UTF-8 characters.","\\t\\t{utf8} is ignored, it exists only for backwards-compatibility.","\\t\\tA combining character is a separate character.","\\t\\t|nr2char()| does the opposite."],"cindent":["\\t\\tGet the amount of indent for line {lnum} according the C","\\t\\tindenting rules, as with \'cindent\'.","\\t\\tThe indent is counted in spaces, the value of \'tabstop\' is","\\t\\trelevant. {lnum} is used just like in |getline()|.","\\t\\tWhen {lnum} is invalid -1 is returned.","\\t\\tSee |C-indenting|."],"clearmatches":["\\t\\tClears all matches previously defined for the current window","\\t\\tby |matchadd()| and the |:match| commands.",""],"col":["\\t\\tposition given with {expr}. The accepted positions are:","\\t\\t .\\t the cursor position","\\t\\t $\\t the end of the cursor line (the result is the","\\t\\t\\t number of bytes in the cursor line plus one)","\\t\\t \'x\\t position of mark x (if the mark is not set, 0 is","\\t\\t\\t returned)","\\t\\t v In Visual mode: the start of the Visual area (the","\\t\\t\\t cursor is the end). When not in Visual mode","\\t\\t\\t returns the cursor position. Differs from |\'<| in","\\t\\t\\t that it\'s updated right away.","\\t\\tAdditionally {expr} can be [lnum, col]: a |List| with the line","\\t\\tand column number. Most useful when the column is \\"$\\", to get","\\t\\tthe last column of a specific line. When \\"lnum\\" or \\"col\\" is","\\t\\tout of range then col() returns zero.","\\t\\tTo get the line number use |line()|. To get both use","\\t\\t|getpos()|.","\\t\\tFor the screen column position use |virtcol()|.","\\t\\tNote that only marks in the current file can be used.","\\t\\tExamples: >","\\t\\t\\tcol(\\".\\")\\t\\tcolumn of cursor","\\t\\t\\tcol(\\"$\\")\\t\\tlength of cursor line plus one","\\t\\t\\tcol(\\"\'t\\")\\t\\tcolumn of mark t","\\t\\t\\tcol(\\"\'\\" . markname)\\tcolumn of mark markname","<\\t\\tThe first column is 1. 0 is returned for an error.","\\t\\tFor an uppercase mark the column may actually be in another","\\t\\tbuffer.","\\t\\tFor the cursor position, when \'virtualedit\' is active, the","\\t\\tcolumn is one higher if the cursor is after the end of the","\\t\\tline. This can be used to obtain the column in Insert mode: >","\\t\\t\\t:imap <F2> <C-O>:let save_ve = &ve<CR>","\\t\\t\\t\\t\\\\<C-O>:set ve=all<CR>","\\t\\t\\t\\t\\\\<C-O>:echo col(\\".\\") . \\"\\\\n\\" <Bar>","\\t\\t\\t\\t\\\\let &ve = save_ve<CR>","<"],"complete":["\\t\\tSet the matches for Insert mode completion.","\\t\\tCan only be used in Insert mode. You need to use a mapping","\\t\\twith CTRL-R = (see |i_CTRL-R|). It does not work after CTRL-O","\\t\\tor with an expression mapping.","\\t\\t{startcol} is the byte offset in the line where the completed","\\t\\ttext start. The text up to the cursor is the original text","\\t\\tthat will be replaced by the matches. Use col(\'.\') for an","\\t\\tempty string. \\"col(\'.\') - 1\\" will replace one character by a","\\t\\tmatch.","\\t\\t{matches} must be a |List|. Each |List| item is one match.","\\t\\tSee |complete-items| for the kind of items that are possible.","\\t\\tNote that the after calling this function you need to avoid","\\t\\tinserting anything that would cause completion to stop.","\\t\\tThe match can be selected with CTRL-N and CTRL-P as usual with","\\t\\tInsert mode completion. The popup menu will appear if","\\t\\tspecified, see |ins-completion-menu|.","\\t\\tExample: >","\\tinoremap <F5> <C-R>=ListMonths()<CR>","","\\tfunc! ListMonths()","\\t call complete(col(\'.\'), [\'January\', \'February\', \'March\',","\\t\\t\\\\ \'April\', \'May\', \'June\', \'July\', \'August\', \'September\',","\\t\\t\\\\ \'October\', \'November\', \'December\'])","\\t return \'\'","\\tendfunc","<\\t\\tThis isn\'t very useful, but it shows how it works. Note that","\\t\\tan empty string is returned to avoid a zero being inserted."],"complete_add":["\\t\\tAdd {expr} to the list of matches. Only to be used by the","\\t\\tfunction specified with the \'completefunc\' option.","\\t\\tReturns 0 for failure (empty string or out of memory),","\\t\\t1 when the match was added, 2 when the match was already in","\\t\\tthe list.","\\t\\tSee |complete-functions| for an explanation of {expr}. It is","\\t\\tthe same as one item in the list that \'omnifunc\' would return."],"complete_check":["\\t\\tCheck for a key typed while looking for completion matches.","\\t\\tThis is to be used when looking for matches takes some time.","\\t\\tReturns |TRUE| when searching for matches is to be aborted,","\\t\\tzero otherwise.","\\t\\tOnly to be used by the function specified with the","\\t\\t\'completefunc\' option.",""],"complete_info":["\\t\\tReturns a Dictionary with information about Insert mode","\\t\\tcompletion. See |ins-completion|.","\\t\\tThe items are:","\\t\\t mode\\t\\tCurrent completion mode name string.","\\t\\t\\t\\tSee |complete_info_mode| for the values.","\\t\\t pum_visible\\t|TRUE| if popup menu is visible.","\\t\\t\\t\\tSee |pumvisible()|.","\\t\\t items\\tList of completion matches. Each item is a","\\t\\t\\t\\tdictionary containing the entries \\"word\\",","\\t\\t\\t\\t\\"abbr\\", \\"menu\\", \\"kind\\", \\"info\\" and \\"user_data\\".","\\t\\t\\t\\tSee |complete-items|.","\\t\\t selected\\tSelected item index. First index is zero.","\\t\\t\\t\\tIndex is -1 if no item is selected (showing","\\t\\t\\t\\ttyped text only)","\\t\\t inserted\\tInserted string. [NOT IMPLEMENT YET]","","\\t\\t\\t\\t\\t\\t\\t*complete_info_mode*","\\t\\tmode values are:","\\t\\t \\"\\"\\t\\t Not in completion mode","\\t\\t \\"keyword\\"\\t Keyword completion |i_CTRL-X_CTRL-N|","\\t\\t \\"ctrl_x\\"\\t Just pressed CTRL-X |i_CTRL-X|","\\t\\t \\"whole_line\\"\\t Whole lines |i_CTRL-X_CTRL-L|","\\t\\t \\"files\\"\\t File names |i_CTRL-X_CTRL-F|","\\t\\t \\"tags\\"\\t Tags |i_CTRL-X_CTRL-]|","\\t\\t \\"path_defines\\" Definition completion |i_CTRL-X_CTRL-D|","\\t\\t \\"path_patterns\\" Include completion |i_CTRL-X_CTRL-I|","\\t\\t \\"dictionary\\"\\t Dictionary |i_CTRL-X_CTRL-K|","\\t\\t \\"thesaurus\\"\\t Thesaurus |i_CTRL-X_CTRL-T|","\\t\\t \\"cmdline\\"\\t Vim Command line |i_CTRL-X_CTRL-V|","\\t\\t \\"function\\"\\t User defined completion |i_CTRL-X_CTRL-U|","\\t\\t \\"omni\\"\\t Omni completion |i_CTRL-X_CTRL-O|","\\t\\t \\"spell\\"\\t Spelling suggestions |i_CTRL-X_s|","\\t\\t \\"eval\\" |complete()| completion","\\t\\t \\"unknown\\"\\t Other internal modes","","\\t\\tIf the optional {what} list argument is supplied, then only","\\t\\tthe items listed in {what} are returned. Unsupported items in","\\t\\t{what} are silently ignored.","","\\t\\tTo get the position and size of the popup menu, see","\\t\\t|pum_getpos()|. It\'s also available in |v:event| during the","\\t\\t|CompleteChanged| event.","","\\t\\tExamples: >","\\t\\t\\t\\" Get all items","\\t\\t\\tcall complete_info()","\\t\\t\\t\\" Get only \'mode\'","\\t\\t\\tcall complete_info([\'mode\'])","\\t\\t\\t\\" Get only \'mode\' and \'pum_visible\'","\\t\\t\\tcall complete_info([\'mode\', \'pum_visible\'])","<"],"confirm":["\\t\\tConfirm() offers the user a dialog, from which a choice can be","\\t\\tmade. It returns the number of the choice. For the first","\\t\\tchoice this is 1.","","\\t\\t{msg} is displayed in a dialog with {choices} as the","\\t\\talternatives. When {choices} is missing or empty, \\"&OK\\" is","\\t\\tused (and translated).","\\t\\t{msg} is a String, use \'\\\\n\' to include a newline. Only on","\\t\\tsome systems the string is wrapped when it doesn\'t fit.","","\\t\\t{choices} is a String, with the individual choices separated","\\t\\tby \'\\\\n\', e.g. >","\\t\\t\\tconfirm(\\"Save changes?\\", \\"&Yes\\\\n&No\\\\n&Cancel\\")","<\\t\\tThe letter after the \'&\' is the shortcut key for that choice.","\\t\\tThus you can type \'c\' to select \\"Cancel\\". The shortcut does","\\t\\tnot need to be the first letter: >","\\t\\t\\tconfirm(\\"file has been modified\\", \\"&Save\\\\nSave &All\\")","<\\t\\tFor the console, the first letter of each choice is used as","\\t\\tthe default shortcut key.","","\\t\\tThe optional {default} argument is the number of the choice","\\t\\tthat is made if the user hits <CR>. Use 1 to make the first","\\t\\tchoice the default one. Use 0 to not set a default. If","\\t\\t{default} is omitted, 1 is used.","","\\t\\tThe optional {type} argument gives the type of dialog. This","\\t\\tis only used for the icon of the Win32 GUI. It can be one of","\\t\\tthese values: \\"Error\\", \\"Question\\", \\"Info\\", \\"Warning\\" or","\\t\\t\\"Generic\\". Only the first character is relevant.","\\t\\tWhen {type} is omitted, \\"Generic\\" is used.","","\\t\\tIf the user aborts the dialog by pressing <Esc>, CTRL-C,","\\t\\tor another valid interrupt key, confirm() returns 0.","","\\t\\tAn example: >"," :let choice = confirm(\\"What do you want?\\", \\"&Apples\\\\n&Oranges\\\\n&Bananas\\", 2)"," :if choice == 0"," :\\techo \\"make up your mind!\\""," :elseif choice == 3"," :\\techo \\"tasteful\\""," :else"," :\\techo \\"I prefer bananas myself.\\""," :endif","<\\t\\tIn a GUI dialog, buttons are used. The layout of the buttons","\\t\\tdepends on the \'v\' flag in \'guioptions\'. If it is included,","\\t\\tthe buttons are always put vertically. Otherwise, confirm()","\\t\\ttries to put the buttons in one horizontal line. If they","\\t\\tdon\'t fit, a vertical layout is used anyway. For some systems","\\t\\tthe horizontal layout is always used.",""],"copy":["\\t\\tdifferent from using {expr} directly.","\\t\\tWhen {expr} is a |List| a shallow copy is created. This means","\\t\\tthat the original |List| can be changed without changing the","\\t\\tcopy, and vice versa. But the items are identical, thus","\\t\\tchanging an item changes the contents of both |Lists|.","\\t\\tA |Dictionary| is copied in a similar way as a |List|.","\\t\\tAlso see |deepcopy()|."],"cos":["\\t\\tReturn the cosine of {expr}, measured in radians, as a |Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo cos(100)","<\\t\\t\\t0.862319 >","\\t\\t\\t:echo cos(-4.01)","<\\t\\t\\t-0.646043",""],"cosh":["\\t\\tReturn the hyperbolic cosine of {expr} as a |Float| in the range","\\t\\t[1, inf].","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo cosh(0.5)","<\\t\\t\\t1.127626 >","\\t\\t\\t:echo cosh(-0.5)","<\\t\\t\\t-1.127626",""],"count":["\\t\\tReturn the number of times an item with value {expr} appears","\\t\\tin |String|, |List| or |Dictionary| {comp}.","","\\t\\tIf {start} is given then start with the item with this index.","\\t\\t{start} can only be used with a |List|.","","\\t\\tWhen {ic} is given and it\'s |TRUE| then case is ignored.","","\\t\\tWhen {comp} is a string then the number of not overlapping","\\t\\toccurrences of {expr} is returned. Zero is returned when","\\t\\t{expr} is an empty string.",""],"cscope_connection":["\\t\\tChecks for the existence of a |cscope| connection. If no","\\t\\tparameters are specified, then the function returns:","\\t\\t\\t0, if cscope was not available (not compiled in), or","\\t\\t\\t if there are no cscope connections;","\\t\\t\\t1, if there is at least one cscope connection.","","\\t\\tIf parameters are specified, then the value of {num}","\\t\\tdetermines how existence of a cscope connection is checked:","","\\t\\t{num}\\tDescription of existence check","\\t\\t-----\\t------------------------------","\\t\\t0\\tSame as no parameters (e.g., \\"cscope_connection()\\").","\\t\\t1\\tIgnore {prepend}, and use partial string matches for","\\t\\t\\t{dbpath}.","\\t\\t2\\tIgnore {prepend}, and use exact string matches for","\\t\\t\\t{dbpath}.","\\t\\t3\\tUse {prepend}, use partial string matches for both","\\t\\t\\t{dbpath} and {prepend}.","\\t\\t4\\tUse {prepend}, use exact string matches for both","\\t\\t\\t{dbpath} and {prepend}.","","\\t\\tNote: All string comparisons are case sensitive!","","\\t\\tExamples. Suppose we had the following (from \\":cs show\\"): >",""," # pid database name\\t\\t\\tprepend path"," 0 27664 cscope.out\\t\\t\\t\\t/usr/local","<","\\t\\tInvocation\\t\\t\\t\\t\\tReturn Val ~","\\t\\t----------\\t\\t\\t\\t\\t---------- >","\\t\\tcscope_connection()\\t\\t\\t\\t\\t1","\\t\\tcscope_connection(1, \\"out\\")\\t\\t\\t\\t1","\\t\\tcscope_connection(2, \\"out\\")\\t\\t\\t\\t0","\\t\\tcscope_connection(3, \\"out\\")\\t\\t\\t\\t0","\\t\\tcscope_connection(3, \\"out\\", \\"local\\")\\t\\t\\t1","\\t\\tcscope_connection(4, \\"out\\")\\t\\t\\t\\t0","\\t\\tcscope_connection(4, \\"out\\", \\"local\\")\\t\\t\\t0","\\t\\tcscope_connection(4, \\"cscope.out\\", \\"/usr/local\\")\\t1","<"],"ctxget":["\\t\\tReturns a |Dictionary| representing the |context| at {index}","\\t\\tfrom the top of the |context-stack| (see |context-dict|).","\\t\\tIf {index} is not given, it is assumed to be 0 (i.e.: top)."],"ctxpop":["\\t\\tPops and restores the |context| at the top of the","\\t\\t|context-stack|."],"ctxpush":["\\t\\tPushes the current editor state (|context|) on the","\\t\\t|context-stack|.","\\t\\tIf {types} is given and is a |List| of |String|s, it specifies","\\t\\twhich |context-types| to include in the pushed context.","\\t\\tOtherwise, all context types are included."],"ctxset":["\\t\\tSets the |context| at {index} from the top of the","\\t\\t|context-stack| to that represented by {context}.","\\t\\t{context} is a Dictionary with context data (|context-dict|).","\\t\\tIf {index} is not given, it is assumed to be 0 (i.e.: top)."],"ctxsize":["\\t\\tReturns the size of the |context-stack|."],"cursor":["\\t\\tPositions the cursor at the column (byte count) {col} in the","\\t\\tline {lnum}. The first column is one.","","\\t\\tWhen there is one argument {list} this is used as a |List|","\\t\\twith two, three or four item:","\\t\\t\\t[{lnum}, {col}]","\\t\\t\\t[{lnum}, {col}, {off}]","\\t\\t\\t[{lnum}, {col}, {off}, {curswant}]","\\t\\tThis is like the return value of |getpos()| or |getcurpos()|,","\\t\\tbut without the first item.","","\\t\\tDoes not change the jumplist.","\\t\\tIf {lnum} is greater than the number of lines in the buffer,","\\t\\tthe cursor will be positioned at the last line in the buffer.","\\t\\tIf {lnum} is zero, the cursor will stay in the current line.","\\t\\tIf {col} is greater than the number of bytes in the line,","\\t\\tthe cursor will be positioned at the last character in the","\\t\\tline.","\\t\\tIf {col} is zero, the cursor will stay in the current column.","\\t\\tIf {curswant} is given it is used to set the preferred column","\\t\\tfor vertical movement. Otherwise {col} is used.","","\\t\\tWhen \'virtualedit\' is used {off} specifies the offset in","\\t\\tscreen columns from the start of the character. E.g., a","\\t\\tposition within a <Tab> or after the last character.","\\t\\tReturns 0 when the position could be set, -1 otherwise.",""],"deepcopy":["\\t\\tMake a copy of {expr}. For Numbers and Strings this isn\'t","\\t\\tdifferent from using {expr} directly.","\\t\\tWhen {expr} is a |List| a full copy is created. This means","\\t\\tthat the original |List| can be changed without changing the","\\t\\tcopy, and vice versa. When an item is a |List|, a copy for it","\\t\\tis made, recursively. Thus changing an item in the copy does","\\t\\tnot change the contents of the original |List|.","\\t\\tWhen {noref} is omitted or zero a contained |List| or","\\t\\t|Dictionary| is only copied once. All references point to","\\t\\tthis single copy. With {noref} set to 1 every occurrence of a","\\t\\t|List| or |Dictionary| results in a new copy. This also means","\\t\\tthat a cyclic reference causes deepcopy() to fail.","\\t\\t\\t\\t\\t\\t\\t\\t*E724*","\\t\\tNesting is possible up to 100 levels. When there is an item","\\t\\tthat refers back to a higher level making a deep copy with","\\t\\t{noref} set to 1 will fail.","\\t\\tAlso see |copy()|."],"delete":["\\t\\tWithout {flags} or with {flags} empty: Deletes the file by the","\\t\\tname {fname}. This also works when {fname} is a symbolic link.","\\t\\tA symbolic link itself is deleted, not what it points to.","","\\t\\tWhen {flags} is \\"d\\": Deletes the directory by the name","\\t\\t{fname}. This fails when directory {fname} is not empty.","","\\t\\tWhen {flags} is \\"rf\\": Deletes the directory by the name","\\t\\t{fname} and everything in it, recursively. BE CAREFUL!","\\t\\tNote: on MS-Windows it is not possible to delete a directory","\\t\\tthat is being used.","","\\t\\tThe result is a Number, which is 0 if the delete operation was","\\t\\tsuccessful and -1 when the deletion failed or partly failed."],"deletebufline":["\\t\\tDelete lines {first} to {last} (inclusive) from buffer {expr}.","\\t\\tIf {last} is omitted then delete line {first} only.","\\t\\tOn success 0 is returned, on failure 1 is returned.","","\\t\\tFor the use of {expr}, see |bufname()| above.","","\\t\\t{first} and {last} are used like with |setline()|. Note that","\\t\\twhen using |line()| this refers to the current buffer. Use \\"$\\"","\\t\\tto refer to the last line in buffer {expr}."],"dictwatcheradd":["\\t\\tAdds a watcher to a dictionary. A dictionary watcher is","\\t\\tidentified by three components:","","\\t\\t- A dictionary({dict});","\\t\\t- A key pattern({pattern}).","\\t\\t- A function({callback}).","","\\t\\tAfter this is called, every change on {dict} and on keys","\\t\\tmatching {pattern} will result in {callback} being invoked.","","\\t\\tFor example, to watch all global variables: >","\\t\\t\\tsilent! call dictwatcherdel(g:, \'*\', \'OnDictChanged\')","\\t\\t\\tfunction! OnDictChanged(d,k,z)","\\t\\t\\t echomsg string(a:k) string(a:z)","\\t\\t\\tendfunction","\\t\\t\\tcall dictwatcheradd(g:, \'*\', \'OnDictChanged\')","<","\\t\\tFor now {pattern} only accepts very simple patterns that can","\\t\\tcontain a \'*\' at the end of the string, in which case it will","\\t\\tmatch every key that begins with the substring before the \'*\'.","\\t\\tThat means if \'*\' is not the last character of {pattern}, only","\\t\\tkeys that are exactly equal as {pattern} will be matched.","","\\t\\tThe {callback} receives three arguments:","","\\t\\t- The dictionary being watched.","\\t\\t- The key which changed.","\\t\\t- A dictionary containing the new and old values for the key.","","\\t\\tThe type of change can be determined by examining the keys","\\t\\tpresent on the third argument:","","\\t\\t- If contains both `old` and `new`, the key was updated.","\\t\\t- If it contains only `new`, the key was added.","\\t\\t- If it contains only `old`, the key was deleted.","","\\t\\tThis function can be used by plugins to implement options with","\\t\\tvalidation and parsing logic."],"dictwatcherdel":["\\t\\tRemoves a watcher added with |dictwatcheradd()|. All three","\\t\\targuments must match the ones passed to |dictwatcheradd()| in","\\t\\torder for the watcher to be successfully deleted.",""],"did_filetype":["\\t\\tFileType event has been triggered at least once. Can be used","\\t\\tto avoid triggering the FileType event again in the scripts","\\t\\tthat detect the file type. |FileType|","\\t\\tReturns |FALSE| when `:setf FALLBACK` was used.","\\t\\tWhen editing another file, the counter is reset, thus this","\\t\\treally checks if the FileType event has been triggered for the","\\t\\tcurrent buffer. This allows an autocommand that starts","\\t\\tediting another buffer to set \'filetype\' and load a syntax","\\t\\tfile."],"diff_filler":["\\t\\tReturns the number of filler lines above line {lnum}.","\\t\\tThese are the lines that were inserted at this point in","\\t\\tanother diff\'ed window. These filler lines are shown in the","\\t\\tdisplay but don\'t exist in the buffer.","\\t\\t{lnum} is used like with |getline()|. Thus \\".\\" is the current","\\t\\tline, \\"\'m\\" mark m, etc.","\\t\\tReturns 0 if the current window is not in diff mode."],"diff_hlID":["\\t\\tReturns the highlight ID for diff mode at line {lnum} column","\\t\\t{col} (byte index). When the current line does not have a","\\t\\tdiff change zero is returned.","\\t\\t{lnum} is used like with |getline()|. Thus \\".\\" is the current","\\t\\tline, \\"\'m\\" mark m, etc.","\\t\\t{col} is 1 for the leftmost column, {lnum} is 1 for the first","\\t\\tline.","\\t\\tThe highlight ID can be used with |synIDattr()| to obtain","\\t\\tsyntax information about the highlighting."],"environ":["\\t\\tReturn all of environment variables as dictionary. You can","\\t\\tcheck if an environment variable exists like this: >","\\t\\t\\t:echo has_key(environ(), \'HOME\')","<\\t\\tNote that the variable name may be CamelCase; to ignore case","\\t\\tuse this: >","\\t\\t\\t:echo index(keys(environ()), \'HOME\', 0, 1) != -1"],"empty":["\\t\\tReturn the Number 1 if {expr} is empty, zero otherwise.","\\t\\tA |List| or |Dictionary| is empty when it does not have any","\\t\\titems. A Number is empty when its value is zero. Special","\\t\\tvariable is empty when it is |v:false| or |v:null|."],"escape":["\\t\\tEscape the characters in {chars} that occur in {string} with a","\\t\\tbackslash. Example: >","\\t\\t\\t:echo escape(\'c:\\\\program files\\\\vim\', \' \\\\\')","<\\t\\tresults in: >","\\t\\t\\tc:\\\\\\\\program\\\\ files\\\\\\\\vim","<\\t\\tAlso see |shellescape()| and |fnameescape()|.",""],"eval":["\\t\\tturn the result of |string()| back into the original value.","\\t\\tThis works for Numbers, Floats, Strings and composites of","\\t\\tthem. Also works for |Funcref|s that refer to existing","\\t\\tfunctions."],"eventhandler":["\\t\\tReturns 1 when inside an event handler. That is that Vim got","\\t\\tinterrupted while waiting for the user to type a character,","\\t\\te.g., when dropping a file on Vim. This means interactive","\\t\\tcommands cannot be used. Otherwise zero is returned."],"executable":["\\t\\tThis function checks if an executable with the name {expr}","\\t\\texists. {expr} must be the name of the program without any","\\t\\targuments.","\\t\\texecutable() uses the value of $PATH and/or the normal","\\t\\tsearchpath for programs.\\t\\t*PATHEXT*","\\t\\tOn Windows the \\".exe\\", \\".bat\\", etc. can","\\t\\toptionally be included. Then the extensions in $PATHEXT are","\\t\\ttried. Thus if \\"foo.exe\\" does not exist, \\"foo.exe.bat\\" can be","\\t\\tfound. If $PATHEXT is not set then \\".exe;.com;.bat;.cmd\\" is","\\t\\tused. A dot by itself can be used in $PATHEXT to try using","\\t\\tthe name without an extension. When \'shell\' looks like a","\\t\\tUnix shell, then the name is also tried without adding an","\\t\\textension.","\\t\\tOn Windows it only checks if the file exists and","\\t\\tis not a directory, not if it\'s really executable.","\\t\\tOn Windows an executable in the same directory as Vim is","\\t\\talways found (it is added to $PATH at |startup|).","\\t\\tThe result is a Number:","\\t\\t\\t1\\texists","\\t\\t\\t0\\tdoes not exist","\\t\\t\\t-1\\tnot implemented on this system","\\t\\t|exepath()| can be used to get the full path of an executable."],"execute":["\\t\\tExecute {command} and capture its output.","\\t\\tIf {command} is a |String|, returns {command} output.","\\t\\tIf {command} is a |List|, returns concatenated outputs.","\\t\\tExamples: >","\\t\\t\\techo execute(\'echon \\"foo\\"\')","<\\t\\t\\tfoo >","\\t\\t\\techo execute([\'echon \\"foo\\"\', \'echon \\"bar\\"\'])","<\\t\\t\\tfoobar","","\\t\\tThe optional {silent} argument can have these values:","\\t\\t\\t\\"\\"\\t\\tno `:silent` used","\\t\\t\\t\\"silent\\"\\t`:silent` used","\\t\\t\\t\\"silent!\\"\\t`:silent!` used","\\t\\tThe default is \\"silent\\". Note that with \\"silent!\\", unlike","\\t\\t`:redir`, error messages are dropped.","","\\t\\tTo get a list of lines use |split()| on the result: >","\\t\\t\\tsplit(execute(\'args\'), \\"\\\\n\\")","","<\\t\\tThis function is not available in the |sandbox|.","\\t\\tNote: If nested, an outer execute() will not observe output of","\\t\\tthe inner calls.","\\t\\tNote: Text attributes (highlights) are not captured."],"exepath":["\\t\\tReturns the full path of {expr} if it is an executable and","\\t\\tgiven as a (partial or full) path or is found in $PATH.","\\t\\tReturns empty string otherwise.","\\t\\tIf {expr} starts with \\"./\\" the |current-directory| is used.",""],"exists":["\\t\\tdefined, zero otherwise.","","\\t\\tFor checking for a supported feature use |has()|.","\\t\\tFor checking if a file exists use |filereadable()|.","","\\t\\tThe {expr} argument is a string, which contains one of these:","\\t\\t\\t&option-name\\tVim option (only checks if it exists,","\\t\\t\\t\\t\\tnot if it really works)","\\t\\t\\t+option-name\\tVim option that works.","\\t\\t\\t$ENVNAME\\tenvironment variable (could also be","\\t\\t\\t\\t\\tdone by comparing with an empty","\\t\\t\\t\\t\\tstring)","\\t\\t\\t*funcname\\tbuilt-in function (see |functions|)","\\t\\t\\t\\t\\tor user defined function (see","\\t\\t\\t\\t\\t|user-function|). Also works for a","\\t\\t\\t\\t\\tvariable that is a Funcref.","\\t\\t\\tvarname\\t\\tinternal variable (see","\\t\\t\\t\\t\\t|internal-variables|). Also works","\\t\\t\\t\\t\\tfor |curly-braces-names|, |Dictionary|","\\t\\t\\t\\t\\tentries, |List| items, etc. Beware","\\t\\t\\t\\t\\tthat evaluating an index may cause an","\\t\\t\\t\\t\\terror message for an invalid","\\t\\t\\t\\t\\texpression. E.g.: >","\\t\\t\\t\\t\\t :let l = [1, 2, 3]","\\t\\t\\t\\t\\t :echo exists(\\"l[5]\\")","<\\t\\t\\t\\t\\t 0 >","\\t\\t\\t\\t\\t :echo exists(\\"l[xx]\\")","<\\t\\t\\t\\t\\t E121: Undefined variable: xx","\\t\\t\\t\\t\\t 0","\\t\\t\\t:cmdname\\tEx command: built-in command, user","\\t\\t\\t\\t\\tcommand or command modifier |:command|.","\\t\\t\\t\\t\\tReturns:","\\t\\t\\t\\t\\t1 for match with start of a command","\\t\\t\\t\\t\\t2 full match with a command","\\t\\t\\t\\t\\t3 matches several user commands","\\t\\t\\t\\t\\tTo check for a supported command","\\t\\t\\t\\t\\talways check the return value to be 2.","\\t\\t\\t:2match\\t\\tThe |:2match| command.","\\t\\t\\t:3match\\t\\tThe |:3match| command.","\\t\\t\\t#event\\t\\tautocommand defined for this event","\\t\\t\\t#event#pattern\\tautocommand defined for this event and","\\t\\t\\t\\t\\tpattern (the pattern is taken","\\t\\t\\t\\t\\tliterally and compared to the","\\t\\t\\t\\t\\tautocommand patterns character by","\\t\\t\\t\\t\\tcharacter)","\\t\\t\\t#group\\t\\tautocommand group exists","\\t\\t\\t#group#event\\tautocommand defined for this group and","\\t\\t\\t\\t\\tevent.","\\t\\t\\t#group#event#pattern","\\t\\t\\t\\t\\tautocommand defined for this group,","\\t\\t\\t\\t\\tevent and pattern.","\\t\\t\\t##event\\t\\tautocommand for this event is","\\t\\t\\t\\t\\tsupported.","","\\t\\tExamples: >","\\t\\t\\texists(\\"&mouse\\")","\\t\\t\\texists(\\"$HOSTNAME\\")","\\t\\t\\texists(\\"*strftime\\")","\\t\\t\\texists(\\"*s:MyFunc\\")","\\t\\t\\texists(\\"bufcount\\")","\\t\\t\\texists(\\":Make\\")","\\t\\t\\texists(\\"#CursorHold\\")","\\t\\t\\texists(\\"#BufReadPre#*.gz\\")","\\t\\t\\texists(\\"#filetypeindent\\")","\\t\\t\\texists(\\"#filetypeindent#FileType\\")","\\t\\t\\texists(\\"#filetypeindent#FileType#*\\")","\\t\\t\\texists(\\"##ColorScheme\\")","<\\t\\tThere must be no space between the symbol (&/$/*/#) and the","\\t\\tname.","\\t\\tThere must be no extra characters after the name, although in","\\t\\ta few cases this is ignored. That may become more strict in","\\t\\tthe future, thus don\'t count on it!","\\t\\tWorking example: >","\\t\\t\\texists(\\":make\\")","<\\t\\tNOT working example: >","\\t\\t\\texists(\\":make install\\")","","<\\t\\tNote that the argument must be a string, not the name of the","\\t\\tvariable itself. For example: >","\\t\\t\\texists(bufcount)","<\\t\\tThis doesn\'t check for existence of the \\"bufcount\\" variable,","\\t\\tbut gets the value of \\"bufcount\\", and checks if that exists."],"exp":["\\t\\tReturn the exponential of {expr} as a |Float| in the range","\\t\\t[0, inf].","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo exp(2)","<\\t\\t\\t7.389056 >","\\t\\t\\t:echo exp(-1)","<\\t\\t\\t0.367879"],"debugbreak":["\\t\\tSpecifically used to interrupt a program being debugged. It","\\t\\twill cause process {pid} to get a SIGTRAP. Behavior for other","\\t\\tprocesses is undefined. See |terminal-debugger|.","\\t\\t{Sends a SIGINT to a process {pid} other than MS-Windows}"],"expand":["\\t\\tExpand wildcards and the following special keywords in {expr}.","\\t\\t\'wildignorecase\' applies.","","\\t\\tIf {list} is given and it is |TRUE|, a List will be returned.","\\t\\tOtherwise the result is a String and when there are several","\\t\\tmatches, they are separated by <NL> characters.","","\\t\\tIf the expansion fails, the result is an empty string. A name","\\t\\tfor a non-existing file is not included, unless {expr} does","\\t\\tnot start with \'%\', \'#\' or \'<\', see below.","","\\t\\tWhen {expr} starts with \'%\', \'#\' or \'<\', the expansion is done","\\t\\tlike for the |cmdline-special| variables with their associated","\\t\\tmodifiers. Here is a short overview:","","\\t\\t\\t%\\t\\tcurrent file name","\\t\\t\\t#\\t\\talternate file name","\\t\\t\\t#n\\t\\talternate file name n","\\t\\t\\t<cfile>\\t\\tfile name under the cursor","\\t\\t\\t<afile>\\t\\tautocmd file name","\\t\\t\\t<abuf>\\t\\tautocmd buffer number (as a String!)","\\t\\t\\t<amatch>\\tautocmd matched name","\\t\\t\\t<sfile>\\t\\tsourced script file or function name","\\t\\t\\t<slnum>\\t\\tsourced script line number or function","\\t\\t\\t\\t\\tline number","\\t\\t\\t<sflnum>\\tscript file line number, also when in","\\t\\t\\t\\t\\ta function","\\t\\t\\t<cword>\\t\\tword under the cursor","\\t\\t\\t<cWORD>\\t\\tWORD under the cursor","\\t\\t\\t<client>\\tthe {clientid} of the last received","\\t\\t\\t\\t\\tmessage |server2client()|","\\t\\tModifiers:","\\t\\t\\t:p\\t\\texpand to full path","\\t\\t\\t:h\\t\\thead (last path component removed)","\\t\\t\\t:t\\t\\ttail (last path component only)","\\t\\t\\t:r\\t\\troot (one extension removed)","\\t\\t\\t:e\\t\\textension only","","\\t\\tExample: >","\\t\\t\\t:let &tags = expand(\\"%:p:h\\") . \\"/tags\\"","<\\t\\tNote that when expanding a string that starts with \'%\', \'#\' or","\\t\\t\'<\', any following text is ignored. This does NOT work: >","\\t\\t\\t:let doesntwork = expand(\\"%:h.bak\\")","<\\t\\tUse this: >","\\t\\t\\t:let doeswork = expand(\\"%:h\\") . \\".bak\\"","<\\t\\tAlso note that expanding \\"<cfile>\\" and others only returns the","\\t\\treferenced file name without further expansion. If \\"<cfile>\\"","\\t\\tis \\"~/.cshrc\\", you need to do another expand() to have the","\\t\\t\\"~/\\" expanded into the path of the home directory: >","\\t\\t\\t:echo expand(expand(\\"<cfile>\\"))","<","\\t\\tThere cannot be white space between the variables and the","\\t\\tfollowing modifier. The |fnamemodify()| function can be used","\\t\\tto modify normal file names.","","\\t\\tWhen using \'%\' or \'#\', and the current or alternate file name","\\t\\tis not defined, an empty string is used. Using \\"%:p\\" in a","\\t\\tbuffer with no name, results in the current directory, with a","\\t\\t\'/\' added.","","\\t\\tWhen {expr} does not start with \'%\', \'#\' or \'<\', it is","\\t\\texpanded like a file name is expanded on the command line.","\\t\\t\'suffixes\' and \'wildignore\' are used, unless the optional","\\t\\t{nosuf} argument is given and it is |TRUE|.","\\t\\tNames for non-existing files are included. The \\"**\\" item can","\\t\\tbe used to search in a directory tree. For example, to find","\\t\\tall \\"README\\" files in the current directory and below: >","\\t\\t\\t:echo expand(\\"**/README\\")","<","\\t\\texpand() can also be used to expand variables and environment","\\t\\tvariables that are only known in a shell. But this can be","\\t\\tslow, because a shell may be used to do the expansion. See","\\t\\t|expr-env-expand|.","\\t\\tThe expanded variable is still handled like a list of file","\\t\\tnames. When an environment variable cannot be expanded, it is","\\t\\tleft unchanged. Thus \\":echo expand(\'$FOOBAR\')\\" results in","\\t\\t\\"$FOOBAR\\".","","\\t\\tSee |glob()| for finding existing files. See |system()| for","\\t\\tgetting the raw output of an external command."],"expandcmd":["\\t\\tExpand special items in {expr} like what is done for an Ex","\\t\\tcommand such as `:edit`. This expands special keywords, like","\\t\\twith |expand()|, and environment variables, anywhere in","\\t\\t{expr}. Returns the expanded string.","\\t\\tExample: >","\\t\\t\\t:echo expandcmd(\'make %<.o\')"],"extend":["\\t\\t{expr1} and {expr2} must be both |Lists| or both","\\t\\t|Dictionaries|.","","\\t\\tIf they are |Lists|: Append {expr2} to {expr1}.","\\t\\tIf {expr3} is given insert the items of {expr2} before item","\\t\\t{expr3} in {expr1}. When {expr3} is zero insert before the","\\t\\tfirst item. When {expr3} is equal to len({expr1}) then","\\t\\t{expr2} is appended.","\\t\\tExamples: >","\\t\\t\\t:echo sort(extend(mylist, [7, 5]))","\\t\\t\\t:call extend(mylist, [2, 3], 1)","<\\t\\tWhen {expr1} is the same List as {expr2} then the number of","\\t\\titems copied is equal to the original length of the List.","\\t\\tE.g., when {expr3} is 1 you get N new copies of the first item","\\t\\t(where N is the original length of the List).","\\t\\tUse |add()| to concatenate one item to a list. To concatenate","\\t\\ttwo lists into a new list use the + operator: >","\\t\\t\\t:let newlist = [1, 2, 3] + [4, 5]","<","\\t\\tIf they are |Dictionaries|:","\\t\\tAdd all entries from {expr2} to {expr1}.","\\t\\tIf a key exists in both {expr1} and {expr2} then {expr3} is","\\t\\tused to decide what to do:","\\t\\t{expr3} = \\"keep\\": keep the value of {expr1}","\\t\\t{expr3} = \\"force\\": use the value of {expr2}","\\t\\t{expr3} = \\"error\\": give an error message\\t\\t*E737*","\\t\\tWhen {expr3} is omitted then \\"force\\" is assumed.","","\\t\\t{expr1} is changed when {expr2} is not empty. If necessary","\\t\\tmake a copy of {expr1} first.","\\t\\t{expr2} remains unchanged.","\\t\\tWhen {expr1} is locked and {expr2} is not empty the operation","\\t\\tfails.","\\t\\tReturns {expr1}.",""],"feedkeys":["\\t\\tCharacters in {string} are queued for processing as if they","\\t\\tcome from a mapping or were typed by the user.","","\\t\\tBy default the string is added to the end of the typeahead","\\t\\tbuffer, thus if a mapping is still being executed the","\\t\\tcharacters come after them. Use the \'i\' flag to insert before","\\t\\tother characters, they will be executed next, before any","\\t\\tcharacters from a mapping.","","\\t\\tThe function does not wait for processing of keys contained in","\\t\\t{string}.","","\\t\\tTo include special keys into {string}, use double-quotes","\\t\\tand \\"\\\\...\\" notation |expr-quote|. For example,","\\t\\tfeedkeys(\\"\\\\<CR>\\") simulates pressing of the <Enter> key. But","\\t\\tfeedkeys(\'\\\\<CR>\') pushes 5 characters.","\\t\\tThe |<Ignore>| keycode may be used to exit the","\\t\\twait-for-character without doing anything.","","\\t\\t{mode} is a String, which can contain these character flags:","\\t\\t\'m\'\\tRemap keys. This is default. If {mode} is absent,","\\t\\t\\tkeys are remapped.","\\t\\t\'n\'\\tDo not remap keys.","\\t\\t\'t\'\\tHandle keys as if typed; otherwise they are handled as","\\t\\t\\tif coming from a mapping. This matters for undo,","\\t\\t\\topening folds, etc.","\\t\\t\'i\'\\tInsert the string instead of appending (see above).","\\t\\t\'x\'\\tExecute commands until typeahead is empty. This is","\\t\\t\\tsimilar to using \\":normal!\\". You can call feedkeys()","\\t\\t\\tseveral times without \'x\' and then one time with \'x\'","\\t\\t\\t(possibly with an empty {string}) to execute all the","\\t\\t\\ttypeahead. Note that when Vim ends in Insert mode it","\\t\\t\\twill behave as if <Esc> is typed, to avoid getting","\\t\\t\\tstuck, waiting for a character to be typed before the","\\t\\t\\tscript continues.","\\t\\t\\tNote that if you manage to call feedkeys() while","\\t\\t\\texecuting commands, thus calling it recursively, the","\\t\\t\\tall typehead will be consumed by the last call.","\\t\\t\'!\'\\tWhen used with \'x\' will not end Insert mode. Can be","\\t\\t\\tused in a test when a timer is set to exit Insert mode","\\t\\t\\ta little later. Useful for testing CursorHoldI.","","\\t\\tReturn value is always 0."],"filereadable":["\\t\\tThe result is a Number, which is |TRUE| when a file with the","\\t\\tname {file} exists, and can be read. If {file} doesn\'t exist,","\\t\\tor is a directory, the result is |FALSE|. {file} is any","\\t\\texpression, which is used as a String.","\\t\\tIf you don\'t care about the file being readable you can use","\\t\\t|glob()|.",""],"filewritable":["\\t\\tThe result is a Number, which is 1 when a file with the","\\t\\tname {file} exists, and can be written. If {file} doesn\'t","\\t\\texist, or is not writable, the result is 0. If {file} is a","\\t\\tdirectory, and we can write to it, the result is 2.",""],"filter":["\\t\\t{expr1} must be a |List| or a |Dictionary|.","\\t\\tFor each item in {expr1} evaluate {expr2} and when the result","\\t\\tis zero remove the item from the |List| or |Dictionary|.","\\t\\t{expr2} must be a |string| or |Funcref|.","","\\t\\tIf {expr2} is a |string|, inside {expr2} |v:val| has the value","\\t\\tof the current item. For a |Dictionary| |v:key| has the key","\\t\\tof the current item and for a |List| |v:key| has the index of","\\t\\tthe current item.","\\t\\tFor a |Dictionary| |v:key| has the key of the current item.","\\t\\tExamples: >","\\t\\t\\tcall filter(mylist, \'v:val !~ \\"OLD\\"\')","<\\t\\tRemoves the items where \\"OLD\\" appears. >","\\t\\t\\tcall filter(mydict, \'v:key >= 8\')","<\\t\\tRemoves the items with a key below 8. >","\\t\\t\\tcall filter(var, 0)","<\\t\\tRemoves all the items, thus clears the |List| or |Dictionary|.","","\\t\\tNote that {expr2} is the result of expression and is then","\\t\\tused as an expression again. Often it is good to use a","\\t\\t|literal-string| to avoid having to double backslashes.","","\\t\\tIf {expr2} is a |Funcref| it must take two arguments:","\\t\\t\\t1. the key or the index of the current item.","\\t\\t\\t2. the value of the current item.","\\t\\tThe function must return |TRUE| if the item should be kept.","\\t\\tExample that keeps the odd items of a list: >","\\t\\t\\tfunc Odd(idx, val)","\\t\\t\\t return a:idx % 2 == 1","\\t\\t\\tendfunc","\\t\\t\\tcall filter(mylist, function(\'Odd\'))","<\\t\\tIt is shorter when using a |lambda|: >","\\t\\t\\tcall filter(myList, {idx, val -> idx * val <= 42})","<\\t\\tIf you do not use \\"val\\" you can leave it out: >","\\t\\t\\tcall filter(myList, {idx -> idx % 2 == 1})","<","\\t\\tThe operation is done in-place. If you want a |List| or","\\t\\t|Dictionary| to remain unmodified make a copy first: >","\\t\\t\\t:let l = filter(copy(mylist), \'v:val =~ \\"KEEP\\"\')","","<\\t\\tReturns {expr1}, the |List| or |Dictionary| that was filtered.","\\t\\tWhen an error is encountered while evaluating {expr2} no","\\t\\tfurther items in {expr1} are processed. When {expr2} is a","\\t\\tFuncref errors inside a function are ignored, unless it was","\\t\\tdefined with the \\"abort\\" flag.",""],"finddir":["\\t\\tFind directory {name} in {path}. Supports both downwards and","\\t\\tupwards recursive directory searches. See |file-searching|","\\t\\tfor the syntax of {path}.","\\t\\tReturns the path of the first found match. When the found","\\t\\tdirectory is below the current directory a relative path is","\\t\\treturned. Otherwise a full path is returned.","\\t\\tIf {path} is omitted or empty then \'path\' is used.","\\t\\tIf the optional {count} is given, find {count}\'s occurrence of","\\t\\t{name} in {path} instead of the first one.","\\t\\tWhen {count} is negative return all the matches in a |List|.","\\t\\tThis is quite similar to the ex-command |:find|."],"findfile":["\\t\\tJust like |finddir()|, but find a file instead of a directory.","\\t\\tUses \'suffixesadd\'.","\\t\\tExample: >","\\t\\t\\t:echo findfile(\\"tags.vim\\", \\".;\\")","<\\t\\tSearches from the directory of the current file upwards until","\\t\\tit finds the file \\"tags.vim\\"."],"float2nr":["\\t\\tConvert {expr} to a Number by omitting the part after the","\\t\\tdecimal point.","\\t\\t{expr} must evaluate to a |Float| or a Number.","\\t\\tWhen the value of {expr} is out of range for a |Number| the","\\t\\tresult is truncated to 0x7fffffff or -0x7fffffff (or when","\\t\\t64-bit Number support is enabled, 0x7fffffffffffffff or","\\t\\t-0x7fffffffffffffff). NaN results in -0x80000000 (or when","\\t\\t64-bit Number support is enabled, -0x8000000000000000).","\\t\\tExamples: >","\\t\\t\\techo float2nr(3.95)","<\\t\\t\\t3 >","\\t\\t\\techo float2nr(-23.45)","<\\t\\t\\t-23 >","\\t\\t\\techo float2nr(1.0e100)","<\\t\\t\\t2147483647 (or 9223372036854775807) >","\\t\\t\\techo float2nr(-1.0e150)","<\\t\\t\\t-2147483647 (or -9223372036854775807) >","\\t\\t\\techo float2nr(1.0e-100)","<\\t\\t\\t0",""],"floor":["\\t\\tReturn the largest integral value less than or equal to","\\t\\t{expr} as a |Float| (round down).","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\techo floor(1.856)","<\\t\\t\\t1.0 >","\\t\\t\\techo floor(-5.456)","<\\t\\t\\t-6.0 >","\\t\\t\\techo floor(4.0)","<\\t\\t\\t4.0",""],"fmod":["\\t\\tReturn the remainder of {expr1} / {expr2}, even if the","\\t\\tdivision is not representable. Returns {expr1} - i * {expr2}","\\t\\tfor some integer i such that if {expr2} is non-zero, the","\\t\\tresult has the same sign as {expr1} and magnitude less than","\\t\\tthe magnitude of {expr2}. If {expr2} is zero, the value","\\t\\treturned is zero. The value returned is a |Float|.","\\t\\t{expr1} and {expr2} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo fmod(12.33, 1.22)","<\\t\\t\\t0.13 >","\\t\\t\\t:echo fmod(-12.33, 1.22)","<\\t\\t\\t-0.13",""],"fnameescape":["\\t\\tEscape {string} for use as file name command argument. All","\\t\\tcharacters that have a special meaning, such as \'%\' and \'|\'","\\t\\tare escaped with a backslash.","\\t\\tFor most systems the characters escaped are","\\t\\t\\" \\\\t\\\\n*?[{`$\\\\\\\\%#\'\\\\\\"|!<\\". For systems where a backslash","\\t\\tappears in a filename, it depends on the value of \'isfname\'.","\\t\\tA leading \'+\' and \'>\' is also escaped (special after |:edit|","\\t\\tand |:write|). And a \\"-\\" by itself (special after |:cd|).","\\t\\tExample: >","\\t\\t\\t:let fname = \'+some str%nge|name\'","\\t\\t\\t:exe \\"edit \\" . fnameescape(fname)","<\\t\\tresults in executing: >","\\t\\t\\tedit \\\\+some\\\\ str\\\\%nge\\\\|name"],"fnamemodify":["\\t\\tModify file name {fname} according to {mods}. {mods} is a","\\t\\tstring of characters like it is used for file names on the","\\t\\tcommand line. See |filename-modifiers|.","\\t\\tExample: >","\\t\\t\\t:echo fnamemodify(\\"main.c\\", \\":p:h\\")","<\\t\\tresults in: >","\\t\\t\\t/home/mool/vim/vim/src","<\\t\\tNote: Environment variables don\'t work in {fname}, use","\\t\\t|expand()| first then."],"foldclosed":["\\t\\tThe result is a Number. If the line {lnum} is in a closed","\\t\\tfold, the result is the number of the first line in that fold.","\\t\\tIf the line {lnum} is not in a closed fold, -1 is returned."],"foldclosedend":["\\t\\tThe result is a Number. If the line {lnum} is in a closed","\\t\\tfold, the result is the number of the last line in that fold.","\\t\\tIf the line {lnum} is not in a closed fold, -1 is returned."],"foldlevel":["\\t\\tThe result is a Number, which is the foldlevel of line {lnum}","\\t\\tin the current buffer. For nested folds the deepest level is","\\t\\treturned. If there is no fold at line {lnum}, zero is","\\t\\treturned. It doesn\'t matter if the folds are open or closed.","\\t\\tWhen used while updating folds (from \'foldexpr\') -1 is","\\t\\treturned for lines where folds are still to be updated and the","\\t\\tfoldlevel is unknown. As a special case the level of the","\\t\\tprevious line is usually available.",""],"foldtext":["\\t\\tthe default function used for the \'foldtext\' option and should","\\t\\tonly be called from evaluating \'foldtext\'. It uses the","\\t\\t|v:foldstart|, |v:foldend| and |v:folddashes| variables.","\\t\\tThe returned string looks like this: >","\\t\\t\\t+-- 45 lines: abcdef","<\\t\\tThe number of leading dashes depends on the foldlevel. The","\\t\\t\\"45\\" is the number of lines in the fold. \\"abcdef\\" is the text","\\t\\tin the first non-blank line of the fold. Leading white space,","\\t\\t\\"//\\" or \\"/*\\" and the text from the \'foldmarker\' and","\\t\\t\'commentstring\' options is removed.","\\t\\tWhen used to draw the actual foldtext, the rest of the line","\\t\\twill be filled with the fold char from the \'fillchars\'","\\t\\tsetting."],"foldtextresult":["\\t\\tReturns the text that is displayed for the closed fold at line","\\t\\t{lnum}. Evaluates \'foldtext\' in the appropriate context.","\\t\\tWhen there is no closed fold at {lnum} an empty string is","\\t\\treturned.","\\t\\t{lnum} is used like with |getline()|. Thus \\".\\" is the current","\\t\\tline, \\"\'m\\" mark m, etc.","\\t\\tUseful when exporting folded text, e.g., to HTML.",""],"foreground":["\\t\\ta client to a Vim server. |remote_send()|","\\t\\tOn Win32 systems this might not work, the OS does not always","\\t\\tallow a window to bring itself to the foreground. Use","\\t\\t|remote_foreground()| instead.","\\t\\t{only in the Win32 GUI and console version}",""],"funcref":["\\t\\tJust like |function()|, but the returned Funcref will lookup","\\t\\tthe function by reference, not by name. This matters when the","\\t\\tfunction {name} is redefined later.","","\\t\\tUnlike |function()|, {name} must be an existing user function.","\\t\\tAlso for autoloaded functions. {name} cannot be a builtin","\\t\\tfunction.",""],"function":["\\t\\tReturn a |Funcref| variable that refers to function {name}.","\\t\\t{name} can be a user defined function or an internal function.","","\\t\\t{name} can also be a Funcref or a partial. When it is a","\\t\\tpartial the dict stored in it will be used and the {dict}","\\t\\targument is not allowed. E.g.: >","\\t\\t\\tlet FuncWithArg = function(dict.Func, [arg])","\\t\\t\\tlet Broken = function(dict.Func, [arg], dict)","<","\\t\\tWhen using the Funcref the function will be found by {name},","\\t\\talso when it was redefined later. Use |funcref()| to keep the","\\t\\tsame function.","","\\t\\tWhen {arglist} or {dict} is present this creates a partial.","\\t\\tThat means the argument list and/or the dictionary is stored in","\\t\\tthe Funcref and will be used when the Funcref is called.","","\\t\\tThe arguments are passed to the function in front of other","\\t\\targuments, but after any argument from |method|. Example: >","\\t\\t\\tfunc Callback(arg1, arg2, name)","\\t\\t\\t...","\\t\\t\\tlet Partial = function(\'Callback\', [\'one\', \'two\'])","\\t\\t\\t...","\\t\\t\\tcall Partial(\'name\')","<\\t\\tInvokes the function as with: >","\\t\\t\\tcall Callback(\'one\', \'two\', \'name\')","","<\\t\\tThe Dictionary is only useful when calling a \\"dict\\" function.","\\t\\tIn that case the {dict} is passed in as \\"self\\". Example: >","\\t\\t\\tfunction Callback() dict","\\t\\t\\t echo \\"called for \\" . self.name","\\t\\t\\tendfunction","\\t\\t\\t...","\\t\\t\\tlet context = {\\"name\\": \\"example\\"}","\\t\\t\\tlet Func = function(\'Callback\', context)","\\t\\t\\t...","\\t\\t\\tcall Func()\\t\\" will echo: called for example","","<\\t\\tThe argument list and the Dictionary can be combined: >","\\t\\t\\tfunction Callback(arg1, count) dict","\\t\\t\\t...","\\t\\t\\tlet context = {\\"name\\": \\"example\\"}","\\t\\t\\tlet Func = function(\'Callback\', [\'one\'], context)","\\t\\t\\t...","\\t\\t\\tcall Func(500)","<\\t\\tInvokes the function as with: >","\\t\\t\\tcall context.Callback(\'one\', 500)",""],"garbagecollect":["\\t\\tCleanup unused |Lists| and |Dictionaries| that have circular","\\t\\treferences.","\\t\\t","\\t\\tThere is hardly ever a need to invoke this function, as it is","\\t\\tautomatically done when Vim runs out of memory or is waiting","\\t\\tfor the user to press a key after \'updatetime\'. Items without","\\t\\tcircular references are always freed when they become unused.","\\t\\tThis is useful if you have deleted a very big |List| and/or","\\t\\t|Dictionary| with circular references in a script that runs","\\t\\tfor a long time.","","\\t\\tWhen the optional {atexit} argument is one, garbage","\\t\\tcollection will also be done when exiting Vim, if it wasn\'t","\\t\\tdone before. This is useful when checking for memory leaks.","","\\t\\tThe garbage collection is not done immediately but only when","\\t\\tit\'s safe to perform. This is when waiting for the user to","\\t\\ttype a character."],"get":["\\t\\tGet item {idx} from |List| {list}. When this item is not","\\t\\tavailable return {default}. Return zero when {default} is","\\t\\tGet item with key {key} from |Dictionary| {dict}. When this","\\t\\titem is not available return {default}. Return zero when","\\t\\t{default} is omitted. Useful example: >","\\t\\t\\tlet val = get(g:, \'var_name\', \'default\')","<\\t\\tThis gets the value of g:var_name if it exists, and uses","\\t\\tGet item {what} from Funcref {func}. Possible values for","\\t\\t{what} are:","\\t\\t\\t\\"name\\"\\tThe function name","\\t\\t\\t\\"func\\"\\tThe function","\\t\\t\\t\\"dict\\"\\tThe dictionary","\\t\\t\\t\\"args\\"\\tThe list with arguments",""],"getbufinfo":["\\t\\tGet information about buffers as a List of Dictionaries.","","\\t\\tWithout an argument information about all the buffers is","\\t\\treturned.","","\\t\\tWhen the argument is a Dictionary only the buffers matching","\\t\\tthe specified criteria are returned. The following keys can","\\t\\tbe specified in {dict}:","\\t\\t\\tbuflisted\\tinclude only listed buffers.","\\t\\t\\tbufloaded\\tinclude only loaded buffers.","\\t\\t\\tbufmodified\\tinclude only modified buffers.","","\\t\\tOtherwise, {expr} specifies a particular buffer to return","\\t\\tinformation for. For the use of {expr}, see |bufname()|","\\t\\tabove. If the buffer is found the returned List has one item.","\\t\\tOtherwise the result is an empty list.","","\\t\\tEach returned List item is a dictionary with the following","\\t\\tentries:","\\t\\t\\tbufnr\\t\\tbuffer number.","\\t\\t\\tchanged\\t\\tTRUE if the buffer is modified.","\\t\\t\\tchangedtick\\tnumber of changes made to the buffer.","\\t\\t\\thidden\\t\\tTRUE if the buffer is hidden.","\\t\\t\\tlisted\\t\\tTRUE if the buffer is listed.","\\t\\t\\tlnum\\t\\tcurrent line number in buffer.","\\t\\t\\tlinecount\\tnumber of lines in the buffer (only","\\t\\t\\t\\t\\tvalid when loaded)","\\t\\t\\tloaded\\t\\tTRUE if the buffer is loaded.","\\t\\t\\tname\\t\\tfull path to the file in the buffer.","\\t\\t\\tsigns\\t\\tlist of signs placed in the buffer.","\\t\\t\\t\\t\\tEach list item is a dictionary with","\\t\\t\\t\\t\\tthe following fields:","\\t\\t\\t\\t\\t id\\t sign identifier","\\t\\t\\t\\t\\t lnum line number","\\t\\t\\t\\t\\t name sign name","\\t\\t\\tvariables\\ta reference to the dictionary with","\\t\\t\\t\\t\\tbuffer-local variables.","\\t\\t\\twindows\\t\\tlist of |window-ID|s that display this","\\t\\t\\t\\t\\tbuffer","","\\t\\tExamples: >","\\t\\t\\tfor buf in getbufinfo()","\\t\\t\\t echo buf.name","\\t\\t\\tendfor","\\t\\t\\tfor buf in getbufinfo({\'buflisted\':1})","\\t\\t\\t if buf.changed","\\t\\t\\t\\t....","\\t\\t\\t endif","\\t\\t\\tendfor","<","\\t\\tTo get buffer-local options use: >","\\t\\t\\tgetbufvar({bufnr}, \'&option_name\')","","<"],"getbufline":["\\t\\tReturn a |List| with the lines starting from {lnum} to {end}","\\t\\t(inclusive) in the buffer {expr}. If {end} is omitted, a","\\t\\t|List| with only the line {lnum} is returned.","","\\t\\tFor the use of {expr}, see |bufname()| above.","","\\t\\tFor {lnum} and {end} \\"$\\" can be used for the last line of the","\\t\\tbuffer. Otherwise a number must be used.","","\\t\\tWhen {lnum} is smaller than 1 or bigger than the number of","\\t\\tlines in the buffer, an empty |List| is returned.","","\\t\\tWhen {end} is greater than the number of lines in the buffer,","\\t\\tit is treated as {end} is set to the number of lines in the","\\t\\tbuffer. When {end} is before {lnum} an empty |List| is","\\t\\treturned.","","\\t\\tThis function works only for loaded buffers. For unloaded and","\\t\\tnon-existing buffers, an empty |List| is returned.","","\\t\\tExample: >","\\t\\t\\t:let lines = getbufline(bufnr(\\"myfile\\"), 1, \\"$\\")"],"getbufvar":["\\t\\tThe result is the value of option or local buffer variable","\\t\\t{varname} in buffer {expr}. Note that the name without \\"b:\\"","\\t\\tmust be used.","\\t\\tWhen {varname} is empty returns a dictionary with all the","\\t\\tbuffer-local variables.","\\t\\tWhen {varname} is equal to \\"&\\" returns a dictionary with all","\\t\\tthe buffer-local options.","\\t\\tOtherwise, when {varname} starts with \\"&\\" returns the value of","\\t\\ta buffer-local option.","\\t\\tThis also works for a global or buffer-local option, but it","\\t\\tdoesn\'t work for a global variable, window-local variable or","\\t\\twindow-local option.","\\t\\tFor the use of {expr}, see |bufname()| above.","\\t\\tWhen the buffer or variable doesn\'t exist {def} or an empty","\\t\\tstring is returned, there is no error message.","\\t\\tExamples: >","\\t\\t\\t:let bufmodified = getbufvar(1, \\"&mod\\")","\\t\\t\\t:echo \\"todo myvar = \\" . getbufvar(\\"todo\\", \\"myvar\\")"],"getchangelist":["\\t\\tReturns the |changelist| for the buffer {expr}. For the use","\\t\\tof {expr}, see |bufname()| above. If buffer {expr} doesn\'t","\\t\\texist, an empty list is returned.","","\\t\\tThe returned list contains two entries: a list with the change","\\t\\tlocations and the current position in the list. Each","\\t\\tentry in the change list is a dictionary with the following","\\t\\tentries:","\\t\\t\\tcol\\t\\tcolumn number","\\t\\t\\tcoladd\\t\\tcolumn offset for \'virtualedit\'","\\t\\t\\tlnum\\t\\tline number","\\t\\tIf buffer {expr} is the current buffer, then the current","\\t\\tposition refers to the position in the list. For other","\\t\\tbuffers, it is set to the length of the list."],"getchar":["\\t\\tGet a single character from the user or input stream.","\\t\\tIf [expr] is omitted, wait until a character is available.","\\t\\tIf [expr] is 0, only get a character when one is available.","\\t\\t\\tReturn zero otherwise.","\\t\\tIf [expr] is 1, only check if a character is available, it is","\\t\\t\\tnot consumed. Return zero if no character available.","","\\t\\tWithout [expr] and when [expr] is 0 a whole character or","\\t\\tspecial key is returned. If it is a single character, the","\\t\\tresult is a number. Use nr2char() to convert it to a String.","\\t\\tOtherwise a String is returned with the encoded character.","\\t\\tFor a special key it\'s a String with a sequence of bytes","\\t\\tstarting with 0x80 (decimal: 128). This is the same value as","\\t\\tthe String \\"\\\\<Key>\\", e.g., \\"\\\\<Left>\\". The returned value is","\\t\\talso a String when a modifier (shift, control, alt) was used","\\t\\tthat is not included in the character.","","\\t\\tWhen [expr] is 0 and Esc is typed, there will be a short delay","\\t\\twhile Vim waits to see if this is the start of an escape","\\t\\tsequence.","","\\t\\tWhen [expr] is 1 only the first byte is returned. For a","\\t\\tone-byte character it is the character itself as a number.","\\t\\tUse nr2char() to convert it to a String.","","\\t\\tUse getcharmod() to obtain any additional modifiers.","","\\t\\tWhen the user clicks a mouse button, the mouse event will be","\\t\\treturned. The position can then be found in |v:mouse_col|,","\\t\\t|v:mouse_lnum|, |v:mouse_winid| and |v:mouse_win|. This","\\t\\texample positions the mouse as it would normally happen: >","\\t\\t\\tlet c = getchar()","\\t\\t\\tif c == \\"\\\\<LeftMouse>\\" && v:mouse_win > 0","\\t\\t\\t exe v:mouse_win . \\"wincmd w\\"","\\t\\t\\t exe v:mouse_lnum","\\t\\t\\t exe \\"normal \\" . v:mouse_col . \\"|\\"","\\t\\t\\tendif","<","\\t\\tThere is no prompt, you will somehow have to make clear to the","\\t\\tuser that a character has to be typed.","\\t\\tThere is no mapping for the character.","\\t\\tKey codes are replaced, thus when the user presses the <Del>","\\t\\tkey you get the code for the <Del> key, not the raw character","\\t\\tsequence. Examples: >","\\t\\t\\tgetchar() == \\"\\\\<Del>\\"","\\t\\t\\tgetchar() == \\"\\\\<S-Left>\\"","<\\t\\tThis example redefines \\"f\\" to ignore case: >","\\t\\t\\t:nmap f :call FindChar()<CR>","\\t\\t\\t:function FindChar()","\\t\\t\\t: let c = nr2char(getchar())","\\t\\t\\t: while col(\'.\') < col(\'$\') - 1","\\t\\t\\t: normal l","\\t\\t\\t: if getline(\'.\')[col(\'.\') - 1] ==? c","\\t\\t\\t: break","\\t\\t\\t: endif","\\t\\t\\t: endwhile","\\t\\t\\t:endfunction"],"getcharmod":["\\t\\tThe result is a Number which is the state of the modifiers for","\\t\\tthe last obtained character with getchar() or in another way.","\\t\\tThese values are added together:","\\t\\t\\t2\\tshift","\\t\\t\\t4\\tcontrol","\\t\\t\\t8\\talt (meta)","\\t\\t\\t16\\tmeta (when it\'s different from ALT)","\\t\\t\\t32\\tmouse double click","\\t\\t\\t64\\tmouse triple click","\\t\\t\\t96\\tmouse quadruple click (== 32 + 64)","\\t\\t\\t128\\tcommand (Macintosh only)","\\t\\tOnly the modifiers that have not been included in the","\\t\\tcharacter itself are obtained. Thus Shift-a results in \\"A\\"","\\t\\twithout a modifier."],"getcharsearch":["\\t\\tReturn the current character search information as a {dict}","\\t\\twith the following entries:","","\\t\\t char\\tcharacter previously used for a character","\\t\\t\\t\\tsearch (|t|, |f|, |T|, or |F|); empty string","\\t\\t\\t\\tif no character search has been performed","\\t\\t forward\\tdirection of character search; 1 for forward,","\\t\\t\\t\\t0 for backward","\\t\\t until\\ttype of character search; 1 for a |t| or |T|","\\t\\t\\t\\tcharacter search, 0 for an |f| or |F|","\\t\\t\\t\\tcharacter search","","\\t\\tThis can be useful to always have |;| and |,| search","\\t\\tforward/backward regardless of the direction of the previous","\\t\\tcharacter search: >","\\t\\t\\t:nnoremap <expr> ; getcharsearch().forward ? \';\' : \',\'","\\t\\t\\t:nnoremap <expr> , getcharsearch().forward ? \',\' : \';\'","<\\t\\tAlso see |setcharsearch()|."],"getcmdline":["\\t\\tReturn the current command-line. Only works when the command","\\t\\tline is being edited, thus requires use of |c_CTRL-\\\\_e| or","\\t\\t|c_CTRL-R_=|.","\\t\\tExample: >","\\t\\t\\t:cmap <F7> <C-\\\\>eescape(getcmdline(), \' \\\\\')<CR>","<\\t\\tAlso see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.","\\t\\tReturns an empty string when entering a password or using","\\t\\t|inputsecret()|."],"getcmdpos":["\\t\\tReturn the position of the cursor in the command line as a","\\t\\tbyte count. The first column is 1.","\\t\\tOnly works when editing the command line, thus requires use of","\\t\\t|c_CTRL-\\\\_e| or |c_CTRL-R_=| or an expression mapping.","\\t\\tReturns 0 otherwise.","\\t\\tAlso see |getcmdtype()|, |setcmdpos()| and |getcmdline()|."],"getcmdtype":["\\t\\tReturn the current command-line type. Possible return values","\\t\\tare:","\\t\\t :\\tnormal Ex command","\\t\\t >\\tdebug mode command |debug-mode|","\\t\\t /\\tforward search command","\\t\\t ?\\tbackward search command","\\t\\t @\\t|input()| command","\\t\\t -\\t|:insert| or |:append| command","\\t\\t =\\t|i_CTRL-R_=|","\\t\\tOnly works when editing the command line, thus requires use of","\\t\\t|c_CTRL-\\\\_e| or |c_CTRL-R_=| or an expression mapping.","\\t\\tReturns an empty string otherwise.","\\t\\tAlso see |getcmdpos()|, |setcmdpos()| and |getcmdline()|."],"getcmdwintype":["\\t\\tReturn the current |command-line-window| type. Possible return","\\t\\tvalues are the same as |getcmdtype()|. Returns an empty string","\\t\\twhen not in the command-line window."],"getcompletion":["\\t\\tReturn a list of command-line completion matches. {type}","\\t\\tspecifies what for. The following completion types are","\\t\\tsupported:","","\\t\\targlist\\t\\tfile names in argument list","\\t\\taugroup\\t\\tautocmd groups","\\t\\tbuffer\\t\\tbuffer names","\\t\\tbehave\\t\\t:behave suboptions","\\t\\tcmdline\\t\\t|cmdline-completion|","\\t\\tcolor\\t\\tcolor schemes","\\t\\tcommand\\t\\tEx command (and arguments)","\\t\\tcompiler\\tcompilers","\\t\\tcscope\\t\\t|:cscope| suboptions","\\t\\tdir\\t\\tdirectory names","\\t\\tenvironment\\tenvironment variable names","\\t\\tevent\\t\\tautocommand events","\\t\\texpression\\tVim expression","\\t\\tfile\\t\\tfile and directory names","\\t\\tfile_in_path\\tfile and directory names in |\'path\'|","\\t\\tfiletype\\tfiletype names |\'filetype\'|","\\t\\tfunction\\tfunction name","\\t\\thelp\\t\\thelp subjects","\\t\\thighlight\\thighlight groups","\\t\\thistory\\t\\t:history suboptions","\\t\\tlocale\\t\\tlocale names (as output of locale -a)","\\t\\tmapclear buffer argument","\\t\\tmapping\\t\\tmapping name","\\t\\tmenu\\t\\tmenus","\\t\\tmessages\\t|:messages| suboptions","\\t\\toption\\t\\toptions","\\t\\tpackadd\\t\\toptional package |pack-add| names","\\t\\tshellcmd\\tShell command","\\t\\tsign\\t\\t|:sign| suboptions","\\t\\tsyntax\\t\\tsyntax file names |\'syntax\'|","\\t\\tsyntime\\t\\t|:syntime| suboptions","\\t\\ttag\\t\\ttags","\\t\\ttag_listfiles\\ttags, file names","\\t\\tuser\\t\\tuser names","\\t\\tvar\\t\\tuser variables","","\\t\\tIf {pat} is an empty string then all matches are returned.","\\t\\tOtherwise only items matching {pat} are returned. See","\\t\\t|wildcards| for the use of special characters in {pat}.","","\\t\\tIf the optional {filtered} flag is set to 1, then \'wildignore\'","\\t\\tis applied to filter the results. Otherwise all the matches","\\t\\tare returned. The \'wildignorecase\' option always applies.","","\\t\\tIf there are no matches, an empty list is returned. An","\\t\\tinvalid value for {type} produces an error.",""],"getcurpos":["\\t\\tincludes an extra item in the list:","\\t\\t [bufnum, lnum, col, off, curswant] ~"," \\t\\tThe \\"curswant\\" number is the preferred column when moving the","\\t\\tcursor vertically. Also see |getpos()|.",""," \\t\\tThis can be used to save and restore the cursor position: >"," \\t\\t\\tlet save_cursor = getcurpos()"," \\t\\t\\tMoveTheCursorAround"," \\t\\t\\tcall setpos(\'.\', save_cursor)","<\\t\\tNote that this only works within the window. See","\\t\\t|winrestview()| for restoring more state."],"getcwd":["\\t\\tWith no arguments the result is a String, which is the name of","\\t\\tthe current effective working directory. With {winnr} or","\\t\\t{tabnr} the working directory of that scope is returned.","\\t\\tTabs and windows are identified by their respective numbers,","\\t\\t0 means current tab or window. Missing argument implies 0.","\\t\\tThus the following are equivalent: >","\\t\\t\\tgetcwd()","\\t\\t\\tgetcwd(0)","\\t\\t\\tgetcwd(0, 0)","<\\t\\tIf {winnr} is -1 it is ignored, only the tab is resolved.","\\t\\t{winnr} can be the window number or the |window-ID|."],"getenv":["\\t\\tReturn the value of environment variable {name}.","\\t\\tWhen the variable does not exist |v:null| is returned. That","\\t\\tis different from a variable set to an empty string.","\\t\\tSee also |expr-env|."],"getfontname":["\\t\\tWithout an argument returns the name of the normal font being","\\t\\tused. Like what is used for the Normal highlight group","\\t\\t|hl-Normal|.","\\t\\tWith an argument a check is done whether {name} is a valid","\\t\\tfont name. If not then an empty string is returned.","\\t\\tOtherwise the actual font name is returned, or {name} if the","\\t\\tGUI does not support obtaining the real name.","\\t\\tOnly works when the GUI is running, thus not in your vimrc or","\\t\\tgvimrc file. Use the |GUIEnter| autocommand to use this","\\t\\tfunction just after the GUI has started."],"getfperm":["\\t\\tThe result is a String, which is the read, write, and execute","\\t\\tpermissions of the given file {fname}.","\\t\\tIf {fname} does not exist or its directory cannot be read, an","\\t\\tempty string is returned.","\\t\\tThe result is of the form \\"rwxrwxrwx\\", where each group of","\\t\\t\\"rwx\\" flags represent, in turn, the permissions of the owner","\\t\\tof the file, the group the file belongs to, and other users.","\\t\\tIf a user does not have a given permission the flag for this","\\t\\tis replaced with the string \\"-\\". Examples: >","\\t\\t\\t:echo getfperm(\\"/etc/passwd\\")","\\t\\t\\t:echo getfperm(expand(\\"~/.config/nvim/init.vim\\"))","<\\t\\tThis will hopefully (from a security point of view) display","\\t\\tthe string \\"rw-r--r--\\" or even \\"rw-------\\".","","\\t\\tFor setting permissions use |setfperm()|."],"getfsize":["\\t\\tThe result is a Number, which is the size in bytes of the","\\t\\tgiven file {fname}.","\\t\\tIf {fname} is a directory, 0 is returned.","\\t\\tIf the file {fname} can\'t be found, -1 is returned.","\\t\\tIf the size of {fname} is too big to fit in a Number then -2","\\t\\tis returned."],"getftime":["\\t\\tThe result is a Number, which is the last modification time of","\\t\\tthe given file {fname}. The value is measured as seconds","\\t\\tsince 1st Jan 1970, and may be passed to strftime(). See also","\\t\\t|localtime()| and |strftime()|.","\\t\\tIf the file {fname} can\'t be found -1 is returned."],"getftype":["\\t\\tThe result is a String, which is a description of the kind of","\\t\\tfile of the given file {fname}.","\\t\\tIf {fname} does not exist an empty string is returned.","\\t\\tHere is a table over different kinds of files and their","\\t\\tresults:","\\t\\t\\tNormal file\\t\\t\\"file\\"","\\t\\t\\tDirectory\\t\\t\\"dir\\"","\\t\\t\\tSymbolic link\\t\\t\\"link\\"","\\t\\t\\tBlock device\\t\\t\\"bdev\\"","\\t\\t\\tCharacter device\\t\\"cdev\\"","\\t\\t\\tSocket\\t\\t\\t\\"socket\\"","\\t\\t\\tFIFO\\t\\t\\t\\"fifo\\"","\\t\\t\\tAll other\\t\\t\\"other\\"","\\t\\tExample: >","\\t\\t\\tgetftype(\\"/home\\")","<\\t\\tNote that a type such as \\"link\\" will only be returned on","\\t\\tsystems that support it. On some systems only \\"dir\\" and","\\t\\t\\"file\\" are returned."],"getjumplist":["\\t\\tReturns the |jumplist| for the specified window.","","\\t\\tWithout arguments use the current window.","\\t\\tWith {winnr} only use this window in the current tab page.","\\t\\t{winnr} can also be a |window-ID|.","\\t\\tWith {winnr} and {tabnr} use the window in the specified tab","\\t\\tpage.","","\\t\\tThe returned list contains two entries: a list with the jump","\\t\\tlocations and the last used jump position number in the list.","\\t\\tEach entry in the jump location list is a dictionary with","\\t\\tthe following entries:","\\t\\t\\tbufnr\\t\\tbuffer number","\\t\\t\\tcol\\t\\tcolumn number","\\t\\t\\tcoladd\\t\\tcolumn offset for \'virtualedit\'","\\t\\t\\tfilename\\tfilename if available","\\t\\t\\tlnum\\t\\tline number",""],"getline":["\\t\\tWithout {end} the result is a String, which is line {lnum}","\\t\\tfrom the current buffer. Example: >","\\t\\t\\tgetline(1)","<\\t\\tWhen {lnum} is a String that doesn\'t start with a","\\t\\tdigit, |line()| is called to translate the String into a Number.","\\t\\tTo get the line under the cursor: >","\\t\\t\\tgetline(\\".\\")","<\\t\\tWhen {lnum} is smaller than 1 or bigger than the number of","\\t\\tlines in the buffer, an empty string is returned.","","\\t\\tWhen {end} is given the result is a |List| where each item is","\\t\\ta line from the current buffer in the range {lnum} to {end},","\\t\\tincluding line {end}.","\\t\\t{end} is used in the same way as {lnum}.","\\t\\tNon-existing lines are silently omitted.","\\t\\tWhen {end} is before {lnum} an empty |List| is returned.","\\t\\tExample: >","\\t\\t\\t:let start = line(\'.\')","\\t\\t\\t:let end = search(\\"^$\\") - 1","\\t\\t\\t:let lines = getline(start, end)","","<\\t\\tTo get lines from another buffer see |getbufline()|"],"getloclist":["\\t\\tReturns a list with all the entries in the location list for","\\t\\twindow {nr}. {nr} can be the window number or the |window-ID|.","\\t\\tWhen {nr} is zero the current window is used.","","\\t\\tFor a location list window, the displayed location list is","\\t\\treturned. For an invalid window number {nr}, an empty list is","\\t\\treturned. Otherwise, same as |getqflist()|.","","\\t\\tIf the optional {what} dictionary argument is supplied, then","\\t\\treturns the items listed in {what} as a dictionary. Refer to","\\t\\t|getqflist()| for the supported items in {what}.","\\t\\tIf {what} contains \'filewinid\', then returns the id of the","\\t\\twindow used to display files from the location list. This","\\t\\tfield is applicable only when called from a location list","\\t\\twindow."],"getmatches":["\\t\\tReturns a |List| with all matches previously defined for the","\\t\\tcurrent window by |matchadd()| and the |:match| commands.","\\t\\t|getmatches()| is useful in combination with |setmatches()|,","\\t\\tas |setmatches()| can restore a list of matches saved by","\\t\\t|getmatches()|.","\\t\\tExample: >","\\t\\t\\t:echo getmatches()","<\\t\\t\\t[{\'group\': \'MyGroup1\', \'pattern\': \'TODO\',","\\t\\t\\t\'priority\': 10, \'id\': 1}, {\'group\': \'MyGroup2\',","\\t\\t\\t\'pattern\': \'FIXME\', \'priority\': 10, \'id\': 2}] >","\\t\\t\\t:let m = getmatches()","\\t\\t\\t:call clearmatches()","\\t\\t\\t:echo getmatches()","<\\t\\t\\t[] >","\\t\\t\\t:call setmatches(m)","\\t\\t\\t:echo getmatches()","<\\t\\t\\t[{\'group\': \'MyGroup1\', \'pattern\': \'TODO\',","\\t\\t\\t\'priority\': 10, \'id\': 1}, {\'group\': \'MyGroup2\',","\\t\\t\\t\'pattern\': \'FIXME\', \'priority\': 10, \'id\': 2}] >","\\t\\t\\t:unlet m","<"],"getpid":["\\t\\tThis is a unique number, until Vim exits.",""],"getpos":["\\t\\tsee |line()|. For getting the cursor position see","\\t\\t|getcurpos()|.","\\t\\tThe result is a |List| with four numbers:","\\t\\t [bufnum, lnum, col, off]","\\t\\t\\"bufnum\\" is zero, unless a mark like \'0 or \'A is used, then it","\\t\\tis the buffer number of the mark.","\\t\\t\\"lnum\\" and \\"col\\" are the position in the buffer. The first","\\t\\tcolumn is 1.","\\t\\tThe \\"off\\" number is zero, unless \'virtualedit\' is used. Then","\\t\\tit is the offset in screen columns from the start of the","\\t\\tcharacter. E.g., a position within a <Tab> or after the last","\\t\\tcharacter.","\\t\\tNote that for \'< and \'> Visual mode matters: when it is \\"V\\"","\\t\\t(visual line mode) the column of \'< is zero and the column of","\\t\\t\'> is a large number.","\\t\\tThis can be used to save and restore the position of a mark: >","\\t\\t\\tlet save_a_mark = getpos(\\"\'a\\")","\\t\\t\\t...","\\t\\t\\tcall setpos(\\"\'a\\", save_a_mark)","<\\t\\tAlso see |getcurpos()| and |setpos()|.",""],"getqflist":["\\t\\tReturns a list with all the current quickfix errors. Each","\\t\\tlist item is a dictionary with these entries:","\\t\\t\\tbufnr\\tnumber of buffer that has the file name, use","\\t\\t\\t\\tbufname() to get the name","\\t\\t\\tmodule\\tmodule name","\\t\\t\\tlnum\\tline number in the buffer (first line is 1)","\\t\\t\\tcol\\tcolumn number (first column is 1)","\\t\\t\\tvcol\\t|TRUE|: \\"col\\" is visual column","\\t\\t\\t\\t|FALSE|: \\"col\\" is byte index","\\t\\t\\tnr\\terror number","\\t\\t\\tpattern\\tsearch pattern used to locate the error","\\t\\t\\ttext\\tdescription of the error","\\t\\t\\ttype\\ttype of the error, \'E\', \'1\', etc.","\\t\\t\\tvalid\\t|TRUE|: recognized error message","","\\t\\tWhen there is no error list or it\'s empty, an empty list is","\\t\\treturned. Quickfix list entries with non-existing buffer","\\t\\tnumber are returned with \\"bufnr\\" set to zero.","","\\t\\tUseful application: Find pattern matches in multiple files and","\\t\\tdo something with them: >","\\t\\t\\t:vimgrep /theword/jg *.c","\\t\\t\\t:for d in getqflist()","\\t\\t\\t: echo bufname(d.bufnr) \':\' d.lnum \'=\' d.text","\\t\\t\\t:endfor","<","\\t\\tIf the optional {what} dictionary argument is supplied, then","\\t\\treturns only the items listed in {what} as a dictionary. The","\\t\\tfollowing string items are supported in {what}:","\\t\\t\\tchangedtick\\tget the total number of changes made","\\t\\t\\t\\t\\tto the list |quickfix-changedtick|","\\t\\t\\tcontext\\tget the |quickfix-context|","\\t\\t\\tefm\\terrorformat to use when parsing \\"lines\\". If","\\t\\t\\t\\tnot present, then the \'errorformat\' option","\\t\\t\\t\\tvalue is used.","\\t\\t\\tid\\tget information for the quickfix list with","\\t\\t\\t\\t|quickfix-ID|; zero means the id for the","\\t\\t\\t\\tcurrent list or the list specified by \\"nr\\"","\\t\\t\\tidx\\tindex of the current entry in the list","\\t\\t\\titems\\tquickfix list entries","\\t\\t\\tlines\\tparse a list of lines using \'efm\' and return","\\t\\t\\t\\tthe resulting entries. Only a |List| type is","\\t\\t\\t\\taccepted. The current quickfix list is not","\\t\\t\\t\\tmodified. See |quickfix-parse|.","\\t\\t\\tnr\\tget information for this quickfix list; zero","\\t\\t\\t\\tmeans the current quickfix list and \\"$\\" means","\\t\\t\\t\\tthe last quickfix list","\\t\\t\\tsize\\tnumber of entries in the quickfix list","\\t\\t\\ttitle\\tget the list title |quickfix-title|","\\t\\t\\twinid\\tget the quickfix |window-ID|","\\t\\t\\tall\\tall of the above quickfix properties","\\t\\tNon-string items in {what} are ignored. To get the value of a","\\t\\tparticular item, set it to zero.","\\t\\tIf \\"nr\\" is not present then the current quickfix list is used.","\\t\\tIf both \\"nr\\" and a non-zero \\"id\\" are specified, then the list","\\t\\tspecified by \\"id\\" is used.","\\t\\tTo get the number of lists in the quickfix stack, set \\"nr\\" to","\\t\\t\\"$\\" in {what}. The \\"nr\\" value in the returned dictionary","\\t\\tcontains the quickfix stack size.","\\t\\tWhen \\"lines\\" is specified, all the other items except \\"efm\\"","\\t\\tare ignored. The returned dictionary contains the entry","\\t\\t\\"items\\" with the list of entries.","","\\t\\tThe returned dictionary contains the following entries:","\\t\\t\\tchangedtick\\ttotal number of changes made to the","\\t\\t\\t\\t\\tlist |quickfix-changedtick|","\\t\\t\\tcontext\\tquickfix list context. See |quickfix-context|","\\t\\t\\t\\tIf not present, set to \\"\\".","\\t\\t\\tid\\tquickfix list ID |quickfix-ID|. If not","\\t\\t\\t\\tpresent, set to 0.","\\t\\t\\tidx\\tindex of the current entry in the list. If not","\\t\\t\\t\\tpresent, set to 0.","\\t\\t\\titems\\tquickfix list entries. If not present, set to","\\t\\t\\t\\tan empty list.","\\t\\t\\tnr\\tquickfix list number. If not present, set to 0","\\t\\t\\tsize\\tnumber of entries in the quickfix list. If not","\\t\\t\\t\\tpresent, set to 0.","\\t\\t\\ttitle\\tquickfix list title text. If not present, set","\\t\\t\\t\\tto \\"\\".","\\t\\t\\twinid\\tquickfix |window-ID|. If not present, set to 0","","\\t\\tExamples (See also |getqflist-examples|): >","\\t\\t\\t:echo getqflist({\'all\': 1})","\\t\\t\\t:echo getqflist({\'nr\': 2, \'title\': 1})","\\t\\t\\t:echo getqflist({\'lines\' : [\\"F1:10:L10\\"]})"],"getreg":["\\t\\tThe result is a String, which is the contents of register","\\t\\t{regname}. Example: >","\\t\\t\\t:let cliptext = getreg(\'*\')","<\\t\\tWhen {regname} was not set the result is an empty string.","","\\t\\tgetreg(\'=\') returns the last evaluated value of the expression","\\t\\tregister. (For use in maps.)","\\t\\tgetreg(\'=\', 1) returns the expression itself, so that it can","\\t\\tbe restored with |setreg()|. For other registers the extra","\\t\\targument is ignored, thus you can always give it.","","\\t\\tIf {list} is present and |TRUE|, the result type is changed","\\t\\tto |List|. Each list item is one text line. Use it if you care","\\t\\tabout zero bytes possibly present inside register: without","\\t\\tthird argument both NLs and zero bytes are represented as NLs","\\t\\t(see |NL-used-for-Nul|).","\\t\\tWhen the register was not set an empty list is returned.","","\\t\\tIf {regname} is not specified, |v:register| is used.",""],"getregtype":["\\t\\tThe result is a String, which is type of register {regname}.","\\t\\tThe value will be one of:","\\t\\t \\"v\\"\\t\\t\\tfor |charwise| text","\\t\\t \\"V\\"\\t\\t\\tfor |linewise| text","\\t\\t \\"<CTRL-V>{width}\\"\\tfor |blockwise-visual| text","\\t\\t \\"\\"\\t\\t\\tfor an empty or unknown register","\\t\\t<CTRL-V> is one character with value 0x16.","\\t\\tIf {regname} is not specified, |v:register| is used."],"gettabinfo":["\\t\\tIf {arg} is not specified, then information about all the tab","\\t\\tpages is returned as a List. Each List item is a Dictionary.","\\t\\tOtherwise, {arg} specifies the tab page number and information","\\t\\tabout that one is returned. If the tab page does not exist an","\\t\\tempty List is returned.","","\\t\\tEach List item is a Dictionary with the following entries:","\\t\\t\\ttabnr\\t\\ttab page number.","\\t\\t\\tvariables\\ta reference to the dictionary with","\\t\\t\\t\\t\\ttabpage-local variables","\\t\\t\\twindows\\t\\tList of |window-ID|s in the tab page."],"gettabvar":["\\t\\tGet the value of a tab-local variable {varname} in tab page","\\t\\t{tabnr}. |t:var|","\\t\\tTabs are numbered starting with one.","\\t\\tWhen {varname} is empty a dictionary with all tab-local","\\t\\tvariables is returned.","\\t\\tNote that the name without \\"t:\\" must be used.","\\t\\tWhen the tab or variable doesn\'t exist {def} or an empty","\\t\\tstring is returned, there is no error message."],"gettabwinvar":["\\t\\tGet the value of window-local variable {varname} in window","\\t\\t{winnr} in tab page {tabnr}.","\\t\\tWhen {varname} is empty a dictionary with all window-local","\\t\\tvariables is returned.","\\t\\tWhen {varname} is equal to \\"&\\" get the values of all","\\t\\twindow-local options in a Dictionary.","\\t\\tOtherwise, when {varname} starts with \\"&\\" get the value of a","\\t\\twindow-local option.","\\t\\tNote that {varname} must be the name without \\"w:\\".","\\t\\tTabs are numbered starting with one. For the current tabpage","\\t\\tuse |getwinvar()|.","\\t\\t{winnr} can be the window number or the |window-ID|.","\\t\\tWhen {winnr} is zero the current window is used.","\\t\\tThis also works for a global option, buffer-local option and","\\t\\twindow-local option, but it doesn\'t work for a global variable","\\t\\tor buffer-local variable.","\\t\\tWhen the tab, window or variable doesn\'t exist {def} or an","\\t\\tempty string is returned, there is no error message.","\\t\\tExamples: >","\\t\\t\\t:let list_is_on = gettabwinvar(1, 2, \'&list\')","\\t\\t\\t:echo \\"myvar = \\" . gettabwinvar(3, 1, \'myvar\')","<","\\t\\tTo obtain all window-local variables use: >","\\t\\t\\tgettabwinvar({tabnr}, {winnr}, \'&\')"],"gettagstack":["\\t\\tThe result is a Dict, which is the tag stack of window {nr}.","\\t\\t{nr} can be the window number or the |window-ID|.","\\t\\tWhen {nr} is not specified, the current window is used.","\\t\\tWhen window {nr} doesn\'t exist, an empty Dict is returned.","","\\t\\tThe returned dictionary contains the following entries:","\\t\\t\\tcuridx\\t\\tCurrent index in the stack. When at","\\t\\t\\t\\t\\ttop of the stack, set to (length + 1).","\\t\\t\\t\\t\\tIndex of bottom of the stack is 1.","\\t\\t\\titems\\t\\tList of items in the stack. Each item","\\t\\t\\t\\t\\tis a dictionary containing the","\\t\\t\\t\\t\\tentries described below.","\\t\\t\\tlength\\t\\tNumber of entries in the stack.","","\\t\\tEach item in the stack is a dictionary with the following","\\t\\tentries:","\\t\\t\\tbufnr\\t\\tbuffer number of the current jump","\\t\\t\\tfrom\\t\\tcursor position before the tag jump.","\\t\\t\\t\\t\\tSee |getpos()| for the format of the","\\t\\t\\t\\t\\treturned list.","\\t\\t\\tmatchnr\\t\\tcurrent matching tag number. Used when","\\t\\t\\t\\t\\tmultiple matching tags are found for a","\\t\\t\\t\\t\\tname.","\\t\\t\\ttagname\\t\\tname of the tag","","\\t\\tSee |tagstack| for more information about the tag stack."],"getwininfo":["\\t\\tReturns information about windows as a List with Dictionaries.","","\\t\\tIf {winid} is given Information about the window with that ID","\\t\\tis returned. If the window does not exist the result is an","\\t\\tempty list.","","\\t\\tWithout {winid} information about all the windows in all the","\\t\\ttab pages is returned.","","\\t\\tEach List item is a Dictionary with the following entries:","\\t\\t\\tbotline\\t\\tlast displayed buffer line","\\t\\t\\tbufnr\\t\\tnumber of buffer in the window","\\t\\t\\theight\\t\\twindow height (excluding winbar)","\\t\\t\\tloclist\\t\\t1 if showing a location list","\\t\\t\\tquickfix\\t1 if quickfix or location list window","\\t\\t\\tterminal\\t1 if a terminal window","\\t\\t\\ttabnr\\t\\ttab page number","\\t\\t\\ttopline\\t\\tfirst displayed buffer line ","\\t\\t\\tvariables\\ta reference to the dictionary with","\\t\\t\\t\\t\\twindow-local variables","\\t\\t\\twidth\\t\\twindow width","\\t\\t\\twinbar\\t\\t1 if the window has a toolbar, 0","\\t\\t\\t\\t\\totherwise","\\t\\t\\twincol\\t\\tleftmost screen column of the window","\\t\\t\\twinid\\t\\t|window-ID|","\\t\\t\\twinnr\\t\\twindow number","\\t\\t\\twinrow\\t\\ttopmost screen column of the window"],"getwinpos":["\\t\\tThe result is a list with two numbers, the result of","\\t\\tgetwinposx() and getwinposy() combined:","\\t\\t\\t[x-pos, y-pos]","\\t\\t{timeout} can be used to specify how long to wait in msec for","\\t\\ta response from the terminal. When omitted 100 msec is used.",""],"getwinposx":["\\t\\tthe left hand side of the GUI Vim window. The result will be","\\t\\t-1 if the information is not available.","\\t\\tThe value can be used with `:winpos`.",""],"getwinposy":["\\t\\tthe top of the GUI Vim window. The result will be -1 if the","\\t\\tinformation is not available.","\\t\\tThe value can be used with `:winpos`."],"getwinvar":["\\t\\tLike |gettabwinvar()| for the current tabpage.","\\t\\tExamples: >","\\t\\t\\t:let list_is_on = getwinvar(2, \'&list\')","\\t\\t\\t:echo \\"myvar = \\" . getwinvar(1, \'myvar\')"],"glob":["\\t\\tExpand the file wildcards in {expr}. See |wildcards| for the","\\t\\tuse of special characters.","","\\t\\tUnless the optional {nosuf} argument is given and is |TRUE|,","\\t\\tthe \'suffixes\' and \'wildignore\' options apply: Names matching","\\t\\tone of the patterns in \'wildignore\' will be skipped and","\\t\\t\'suffixes\' affect the ordering of matches.","\\t\\t\'wildignorecase\' always applies.","","\\t\\tWhen {list} is present and it is |TRUE| the result is a List","\\t\\twith all matching files. The advantage of using a List is,","\\t\\tyou also get filenames containing newlines correctly.","\\t\\tOtherwise the result is a String and when there are several","\\t\\tmatches, they are separated by <NL> characters.","","\\t\\tIf the expansion fails, the result is an empty String or List.","","\\t\\tYou can also use |readdir()| if you need to do complicated","\\t\\tthings, such as limiting the number of matches.","","\\t\\tA name for a non-existing file is not included. A symbolic","\\t\\tlink is only included if it points to an existing file.","\\t\\tHowever, when the {alllinks} argument is present and it is","\\t\\t|TRUE| then all symbolic links are included.","","\\t\\tFor most systems backticks can be used to get files names from","\\t\\tany external command. Example: >","\\t\\t\\t:let tagfiles = glob(\\"`find . -name tags -print`\\")","\\t\\t\\t:let &tags = substitute(tagfiles, \\"\\\\n\\", \\",\\", \\"g\\")","<\\t\\tThe result of the program inside the backticks should be one","\\t\\titem per line. Spaces inside an item are allowed.","","\\t\\tSee |expand()| for expanding special Vim variables. See","\\t\\t|system()| for getting the raw output of an external command."],"glob2regpat":["\\t\\tConvert a file pattern, as used by glob(), into a search","\\t\\tpattern. The result can be used to match with a string that","\\t\\tis a file name. E.g. >","\\t\\t\\tif filename =~ glob2regpat(\'Make*.mak\')","<\\t\\tThis is equivalent to: >","\\t\\t\\tif filename =~ \'^Make.*\\\\.mak$\'","<\\t\\tWhen {expr} is an empty string the result is \\"^$\\", match an","\\t\\tempty string.","\\t\\tNote that the result depends on the system. On MS-Windows","\\t\\ta backslash usually means a path separator.",""],"globpath":["\\t\\tPerform glob() on all directories in {path} and concatenate","\\t\\tthe results. Example: >","\\t\\t\\t:echo globpath(&rtp, \\"syntax/c.vim\\")","<","\\t\\t{path} is a comma-separated list of directory names. Each","\\t\\tdirectory name is prepended to {expr} and expanded like with","\\t\\t|glob()|. A path separator is inserted when needed.","\\t\\tTo add a comma inside a directory name escape it with a","\\t\\tbackslash. Note that on MS-Windows a directory may have a","\\t\\ttrailing backslash, remove it if you put a comma after it.","\\t\\tIf the expansion fails for one of the directories, there is no","\\t\\terror message.","","\\t\\tUnless the optional {nosuf} argument is given and is |TRUE|,","\\t\\tthe \'suffixes\' and \'wildignore\' options apply: Names matching","\\t\\tone of the patterns in \'wildignore\' will be skipped and","\\t\\t\'suffixes\' affect the ordering of matches.","","\\t\\tWhen {list} is present and it is |TRUE| the result is a List","\\t\\twith all matching files. The advantage of using a List is, you","\\t\\talso get filenames containing newlines correctly. Otherwise","\\t\\tthe result is a String and when there are several matches,","\\t\\tthey are separated by <NL> characters. Example: >","\\t\\t\\t:echo globpath(&rtp, \\"syntax/c.vim\\", 0, 1)","<","\\t\\t{allinks} is used as with |glob()|.","","\\t\\tThe \\"**\\" item can be used to search in a directory tree.","\\t\\tFor example, to find all \\"README.txt\\" files in the directories","\\t\\tin \'runtimepath\' and below: >","\\t\\t\\t:echo globpath(&rtp, \\"**/README.txt\\")","<\\t\\tUpwards search and limiting the depth of \\"**\\" is not","\\t\\tsupported, thus using \'path\' will not always work properly.",""],"has":["\\t\\t{feature} argument is a feature name like \\"nvim-0.2.1\\" or","\\t\\t\\"win32\\", see below. See also |exists()|.","","\\t\\tVim\'s compile-time feature-names (prefixed with \\"+\\") are not","\\t\\trecognized because Nvim is always compiled with all possible","\\t\\tfeatures. |feature-compile| ","","\\t\\tFeature names can be:","\\t\\t1. Nvim version. For example the \\"nvim-0.2.1\\" feature means","\\t\\t that Nvim is version 0.2.1 or later: >","\\t\\t\\t:if has(\\"nvim-0.2.1\\")","","<\\t\\t2. Runtime condition or other pseudo-feature. For example the","\\t\\t \\"win32\\" feature checks if the current system is Windows: >","\\t\\t\\t:if has(\\"win32\\")","<\\t\\t\\t\\t\\t\\t\\t*feature-list*","\\t\\t List of supported pseudo-feature names:","\\t\\t acl\\t\\t|ACL| support","\\t\\t\\tbsd\\t\\tBSD system (not macOS, use \\"mac\\" for that).","\\t\\t iconv\\t\\tCan use |iconv()| for conversion.","\\t\\t +shellslash\\tCan use backslashes in filenames (Windows)","\\t\\t\\tclipboard\\t|clipboard| provider is available.","\\t\\t\\tmac\\t\\tMacOS system.","\\t\\t\\tnvim\\t\\tThis is Nvim.","\\t\\t\\tpython2\\t\\tLegacy Vim |python2| interface. |has-python|","\\t\\t\\tpython3\\t\\tLegacy Vim |python3| interface. |has-python|","\\t\\t\\tpythonx\\t\\tLegacy Vim |python_x| interface. |has-pythonx|","\\t\\t\\tttyin\\t\\tinput is a terminal (tty)","\\t\\t\\tttyout\\t\\toutput is a terminal (tty)","\\t\\t\\tunix\\t\\tUnix system.","\\t\\t\\t*vim_starting*\\tTrue during |startup|. ","\\t\\t\\twin32\\t\\tWindows system (32 or 64 bit).","\\t\\t\\twin64\\t\\tWindows system (64 bit).","\\t\\t\\twsl\\t\\tWSL (Windows Subsystem for Linux) system","","\\t\\t\\t\\t\\t\\t\\t*has-patch*","\\t\\t3. Vim patch. For example the \\"patch123\\" feature means that","\\t\\t Vim patch 123 at the current |v:version| was included: >","\\t\\t\\t:if v:version > 602 || v:version == 602 && has(\\"patch148\\")","","<\\t\\t4. Vim version. For example the \\"patch-7.4.237\\" feature means","\\t\\t that Nvim is Vim-compatible to version 7.4.237 or later. >","\\t\\t\\t:if has(\\"patch-7.4.237\\")",""],"has_key":["\\t\\tThe result is a Number, which is 1 if |Dictionary| {dict} has","\\t\\tan entry with key {key}. Zero otherwise."],"haslocaldir":["\\t\\tThe result is a Number, which is 1 when the tabpage or window","\\t\\thas set a local path via |:tcd| or |:lcd|, otherwise 0.","","\\t\\tTabs and windows are identified by their respective numbers,","\\t\\t0 means current tab or window. Missing argument implies 0.","\\t\\tThus the following are equivalent: >","\\t\\t\\thaslocaldir()","\\t\\t\\thaslocaldir(0)","\\t\\t\\thaslocaldir(0, 0)","<\\t\\tWith {winnr} use that window in the current tabpage.","\\t\\tWith {winnr} and {tabnr} use the window in that tabpage.","\\t\\t{winnr} can be the window number or the |window-ID|.","\\t\\tIf {winnr} is -1 it is ignored, only the tab is resolved."],"hasmapto":["\\t\\tThe result is a Number, which is 1 if there is a mapping that","\\t\\tcontains {what} in somewhere in the rhs (what it is mapped to)","\\t\\tand this mapping exists in one of the modes indicated by","\\t\\t{mode}.","\\t\\tWhen {abbr} is there and it is |TRUE| use abbreviations","\\t\\tinstead of mappings. Don\'t forget to specify Insert and/or","\\t\\tCommand-line mode.","\\t\\tBoth the global mappings and the mappings local to the current","\\t\\tbuffer are checked for a match.","\\t\\tIf no matching mapping is found 0 is returned.","\\t\\tThe following characters are recognized in {mode}:","\\t\\t\\tn\\tNormal mode","\\t\\t\\tv\\tVisual mode","\\t\\t\\to\\tOperator-pending mode","\\t\\t\\ti\\tInsert mode","\\t\\t\\tl\\tLanguage-Argument (\\"r\\", \\"f\\", \\"t\\", etc.)","\\t\\t\\tc\\tCommand-line mode","\\t\\tWhen {mode} is omitted, \\"nvo\\" is used.","","\\t\\tThis function is useful to check if a mapping already exists","\\t\\tto a function in a Vim script. Example: >","\\t\\t\\t:if !hasmapto(\'\\\\ABCdoit\')","\\t\\t\\t: map <Leader>d \\\\ABCdoit","\\t\\t\\t:endif","<\\t\\tThis installs the mapping to \\"\\\\ABCdoit\\" only if there isn\'t","\\t\\talready a mapping to \\"\\\\ABCdoit\\"."],"histadd":["\\t\\tAdd the String {item} to the history {history} which can be","\\t\\tone of:\\t\\t\\t\\t\\t*hist-names*","\\t\\t\\t\\"cmd\\"\\t or \\":\\"\\t command line history","\\t\\t\\t\\"search\\" or \\"/\\" search pattern history","\\t\\t\\t\\"expr\\"\\t or \\"=\\" typed expression history","\\t\\t\\t\\"input\\" or \\"@\\"\\t input line history","\\t\\t\\t\\"debug\\" or \\">\\" debug command history","\\t\\t\\tempty\\t\\t the current or last used history","\\t\\tThe {history} string does not need to be the whole name, one","\\t\\tcharacter is sufficient.","\\t\\tIf {item} does already exist in the history, it will be","\\t\\tshifted to become the newest entry.","\\t\\tThe result is a Number: 1 if the operation was successful,","\\t\\totherwise 0 is returned.","","\\t\\tExample: >","\\t\\t\\t:call histadd(\\"input\\", strftime(\\"%Y %b %d\\"))","\\t\\t\\t:let date=input(\\"Enter date: \\")","<\\t\\tThis function is not available in the |sandbox|."],"histdel":["\\t\\tClear {history}, i.e. delete all its entries. See |hist-names|","\\t\\tfor the possible values of {history}.","","\\t\\tIf the parameter {item} evaluates to a String, it is used as a","\\t\\tregular expression. All entries matching that expression will","\\t\\tbe removed from the history (if there are any).","\\t\\tUpper/lowercase must match, unless \\"\\\\c\\" is used |/\\\\c|.","\\t\\tIf {item} evaluates to a Number, it will be interpreted as","\\t\\tan index, see |:history-indexing|. The respective entry will","\\t\\tbe removed if it exists.","","\\t\\tThe result is a Number: 1 for a successful operation,","\\t\\totherwise 0 is returned.","","\\t\\tExamples:","\\t\\tClear expression register history: >","\\t\\t\\t:call histdel(\\"expr\\")","<","\\t\\tRemove all entries starting with \\"*\\" from the search history: >","\\t\\t\\t:call histdel(\\"/\\", \'^\\\\*\')","<","\\t\\tThe following three are equivalent: >","\\t\\t\\t:call histdel(\\"search\\", histnr(\\"search\\"))","\\t\\t\\t:call histdel(\\"search\\", -1)","\\t\\t\\t:call histdel(\\"search\\", \'^\'.histget(\\"search\\", -1).\'$\')","<","\\t\\tTo delete the last search pattern and use the last-but-one for","\\t\\tthe \\"n\\" command and \'hlsearch\': >","\\t\\t\\t:call histdel(\\"search\\", -1)","\\t\\t\\t:let @/ = histget(\\"search\\", -1)"],"histget":["\\t\\tThe result is a String, the entry with Number {index} from","\\t\\t{history}. See |hist-names| for the possible values of","\\t\\t{history}, and |:history-indexing| for {index}. If there is","\\t\\tno such entry, an empty String is returned. When {index} is","\\t\\tomitted, the most recent item from the history is used.","","\\t\\tExamples:","\\t\\tRedo the second last search from history. >","\\t\\t\\t:execute \'/\' . histget(\\"search\\", -2)","","<\\t\\tDefine an Ex command \\":H {num}\\" that supports re-execution of","\\t\\tthe {num}th entry from the output of |:history|. >","\\t\\t\\t:command -nargs=1 H execute histget(\\"cmd\\", 0+<args>)"],"histnr":["\\t\\tThe result is the Number of the current entry in {history}.","\\t\\tSee |hist-names| for the possible values of {history}.","\\t\\tIf an error occurred, -1 is returned.","","\\t\\tExample: >","\\t\\t\\t:let inp_index = histnr(\\"expr\\")"],"hlexists":["\\t\\tThe result is a Number, which is non-zero if a highlight group","\\t\\tcalled {name} exists. This is when the group has been","\\t\\tdefined in some way. Not necessarily when highlighting has","\\t\\tbeen defined for it, it may also have been used for a syntax","\\t\\titem.",""],"hlID":["\\t\\twith name {name}. When the highlight group doesn\'t exist,","\\t\\tzero is returned.","\\t\\tThis can be used to retrieve information about the highlight","\\t\\tgroup. For example, to get the background color of the","\\t\\t\\"Comment\\" group: >","\\t:echo synIDattr(synIDtrans(hlID(\\"Comment\\")), \\"bg\\")"],"hostname":["\\t\\tThe result is a String, which is the name of the machine on","\\t\\twhich Vim is currently running. Machine names greater than","\\t\\t256 characters long are truncated."],"iconv":["\\t\\tThe result is a String, which is the text {expr} converted","\\t\\tfrom encoding {from} to encoding {to}.","\\t\\tWhen the conversion completely fails an empty string is","\\t\\treturned. When some characters could not be converted they","\\t\\tare replaced with \\"?\\".","\\t\\tThe encoding names are whatever the iconv() library function","\\t\\tcan accept, see \\":!man 3 iconv\\".","\\t\\tMost conversions require Vim to be compiled with the |+iconv|","\\t\\tfeature. Otherwise only UTF-8 to latin1 conversion and back","\\t\\tcan be done.","\\t\\tNote that Vim uses UTF-8 for all Unicode encodings, conversion","\\t\\tfrom/to UCS-2 is automatically changed to use UTF-8. You","\\t\\tcannot use UCS-2 in a string anyway, because of the NUL bytes.",""],"indent":["\\t\\tcurrent buffer. The indent is counted in spaces, the value","\\t\\tof \'tabstop\' is relevant. {lnum} is used just like in","\\t\\t|getline()|.","\\t\\tWhen {lnum} is invalid -1 is returned.",""],"index":["\\t\\tReturn the lowest index in |List| {list} where the item has a","\\t\\tvalue equal to {expr}. There is no automatic conversion, so","\\t\\tthe String \\"4\\" is different from the Number 4. And the number","\\t\\t4 is different from the Float 4.0. The value of \'ignorecase\'","\\t\\tis not used here, case always matters.","\\t\\tIf {start} is given then start looking at the item with index","\\t\\t{start} (may be negative for an item relative to the end).","\\t\\tWhen {ic} is given and it is |TRUE|, ignore case. Otherwise","\\t\\tcase must match.","\\t\\t-1 is returned when {expr} is not found in {list}.","\\t\\tExample: >","\\t\\t\\t:let idx = index(words, \\"the\\")","\\t\\t\\t:if index(numbers, 123) >= 0",""],"input":["\\t\\tThe result is a String, which is whatever the user typed on","\\t\\tthe command-line. The {prompt} argument is either a prompt","\\t\\tstring, or a blank string (for no prompt). A \'\\\\n\' can be used","\\t\\tin the prompt to start a new line.","","\\t\\tIn the second form it accepts a single dictionary with the","\\t\\tfollowing keys, any of which may be omitted:","","\\t\\tKey Default Description ~","\\t\\tprompt \\"\\" Same as {prompt} in the first form.","\\t\\tdefault \\"\\" Same as {text} in the first form.","\\t\\tcompletion nothing Same as {completion} in the first form.","\\t\\tcancelreturn \\"\\" Same as {cancelreturn} from","\\t\\t |inputdialog()|. Also works with","\\t\\t input().","\\t\\thighlight nothing Highlight handler: |Funcref|.","","\\t\\tThe highlighting set with |:echohl| is used for the prompt.","\\t\\tThe input is entered just like a command-line, with the same","\\t\\tediting commands and mappings. There is a separate history","\\t\\tfor lines typed for input().","\\t\\tExample: >","\\t\\t\\t:if input(\\"Coffee or beer? \\") == \\"beer\\"","\\t\\t\\t: echo \\"Cheers!\\"","\\t\\t\\t:endif","<","\\t\\tIf the optional {text} argument is present and not empty, this","\\t\\tis used for the default reply, as if the user typed this.","\\t\\tExample: >","\\t\\t\\t:let color = input(\\"Color? \\", \\"white\\")","","<\\t\\tThe optional {completion} argument specifies the type of","\\t\\tcompletion supported for the input. Without it completion is","\\t\\tnot performed. The supported completion types are the same as","\\t\\tthat can be supplied to a user-defined command using the","\\t\\t\\"-complete=\\" argument. Refer to |:command-completion| for","\\t\\tmore information. Example: >","\\t\\t\\tlet fname = input(\\"File: \\", \\"\\", \\"file\\")","","<\\t\\t\\t\\t\\t*input()-highlight* *E5400* *E5402*","\\t\\tThe optional `highlight` key allows specifying function which","\\t\\twill be used for highlighting user input. This function","\\t\\treceives user input as its only argument and must return","\\t\\ta list of 3-tuples [hl_start_col, hl_end_col + 1, hl_group]","\\t\\twhere","\\t\\t\\thl_start_col is the first highlighted column,","\\t\\t\\thl_end_col is the last highlighted column (+ 1!),","\\t\\t\\thl_group is |:hi| group used for highlighting.","\\t\\t\\t\\t\\t *E5403* *E5404* *E5405* *E5406*","\\t\\tBoth hl_start_col and hl_end_col + 1 must point to the start","\\t\\tof the multibyte character (highlighting must not break","\\t\\tmultibyte characters), hl_end_col + 1 may be equal to the","\\t\\tinput length. Start column must be in range [0, len(input)),","\\t\\tend column must be in range (hl_start_col, len(input)],","\\t\\tsections must be ordered so that next hl_start_col is greater","\\t\\tthen or equal to previous hl_end_col.","","\\t\\tExample (try some input with parentheses): >","\\t\\t\\thighlight RBP1 guibg=Red ctermbg=red","\\t\\t\\thighlight RBP2 guibg=Yellow ctermbg=yellow","\\t\\t\\thighlight RBP3 guibg=Green ctermbg=green","\\t\\t\\thighlight RBP4 guibg=Blue ctermbg=blue","\\t\\t\\tlet g:rainbow_levels = 4","\\t\\t\\tfunction! RainbowParens(cmdline)","\\t\\t\\t let ret = []","\\t\\t\\t let i = 0","\\t\\t\\t let lvl = 0","\\t\\t\\t while i < len(a:cmdline)","\\t\\t\\t if a:cmdline[i] is# \'(\'","\\t\\t\\t call add(ret, [i, i + 1, \'RBP\' . ((lvl % g:rainbow_levels) + 1)])","\\t\\t\\t let lvl += 1","\\t\\t\\t elseif a:cmdline[i] is# \')\'","\\t\\t\\t let lvl -= 1","\\t\\t\\t call add(ret, [i, i + 1, \'RBP\' . ((lvl % g:rainbow_levels) + 1)])","\\t\\t\\t endif","\\t\\t\\t let i += 1","\\t\\t\\t endwhile","\\t\\t\\t return ret","\\t\\t\\tendfunction","\\t\\t\\tcall input({\'prompt\':\'>\',\'highlight\':\'RainbowParens\'})","<","\\t\\tHighlight function is called at least once for each new","\\t\\tdisplayed input string, before command-line is redrawn. It is","\\t\\texpected that function is pure for the duration of one input()","\\t\\tcall, i.e. it produces the same output for the same input, so","\\t\\toutput may be memoized. Function is run like under |:silent|","\\t\\tmodifier. If the function causes any errors, it will be","\\t\\tskipped for the duration of the current input() call.","","\\t\\tHighlighting is disabled if command-line contains arabic","\\t\\tcharacters.","","\\t\\tNOTE: This function must not be used in a startup file, for","\\t\\tthe versions that only run in GUI mode (e.g., the Win32 GUI).","\\t\\tNote: When input() is called from within a mapping it will","\\t\\tconsume remaining characters from that mapping, because a","\\t\\tmapping is handled like the characters were typed.","\\t\\tUse |inputsave()| before input() and |inputrestore()|","\\t\\tafter input() to avoid that. Another solution is to avoid","\\t\\tthat further characters follow in the mapping, e.g., by using","\\t\\t|:execute| or |:normal|.","","\\t\\tExample with a mapping: >","\\t\\t\\t:nmap \\\\x :call GetFoo()<CR>:exe \\"/\\" . Foo<CR>","\\t\\t\\t:function GetFoo()","\\t\\t\\t: call inputsave()","\\t\\t\\t: let g:Foo = input(\\"enter search pattern: \\")","\\t\\t\\t: call inputrestore()","\\t\\t\\t:endfunction"],"inputlist":["\\t\\t{textlist} must be a |List| of strings. This |List| is","\\t\\tdisplayed, one string per line. The user will be prompted to","\\t\\tenter a number, which is returned.","\\t\\tThe user can also select an item by clicking on it with the","\\t\\tmouse. For the first string 0 is returned. When clicking","\\t\\tabove the first item a negative number is returned. When","\\t\\tclicking on the prompt one more than the length of {textlist}","\\t\\tis returned.","\\t\\tMake sure {textlist} has less than \'lines\' entries, otherwise","\\t\\tit won\'t work. It\'s a good idea to put the entry number at","\\t\\tthe start of the string. And put a prompt in the first item.","\\t\\tExample: >","\\t\\t\\tlet color = inputlist([\'Select color:\', \'1. red\',","\\t\\t\\t\\t\\\\ \'2. green\', \'3. blue\'])"],"inputrestore":["\\t\\tRestore typeahead that was saved with a previous |inputsave()|.","\\t\\tShould be called the same number of times inputsave() is","\\t\\tcalled. Calling it more often is harmless though.","\\t\\tReturns 1 when there is nothing to restore, 0 otherwise."],"inputsave":["\\t\\tPreserve typeahead (also from mappings) and clear it, so that","\\t\\ta following prompt gets input from the user. Should be","\\t\\tfollowed by a matching inputrestore() after the prompt. Can","\\t\\tbe used several times, in which case there must be just as","\\t\\tmany inputrestore() calls.","\\t\\tReturns 1 when out of memory, 0 otherwise."],"inputsecret":["\\t\\tThis function acts much like the |input()| function with but","\\t\\ttwo exceptions:","\\t\\ta) the user\'s response will be displayed as a sequence of","\\t\\tasterisks (\\"*\\") thereby keeping the entry secret, and","\\t\\tb) the user\'s response will not be recorded on the input","\\t\\t|history| stack.","\\t\\tThe result is a String, which is whatever the user actually","\\t\\ttyped on the command-line in response to the issued prompt.","\\t\\tNOTE: Command-line completion is not supported."],"insert":["\\t\\tInsert {item} at the start of |List| {list}.","\\t\\tIf {idx} is specified insert {item} before the item with index","\\t\\t{idx}. If {idx} is zero it goes before the first item, just","\\t\\tlike omitting {idx}. A negative {idx} is also possible, see","\\t\\t|list-index|. -1 inserts just before the last item.","\\t\\tReturns the resulting |List|. Examples: >","\\t\\t\\t:let mylist = insert([2, 3, 5], 1)","\\t\\t\\t:call insert(mylist, 4, -1)","\\t\\t\\t:call insert(mylist, 6, len(mylist))","<\\t\\tThe last example can be done simpler with |add()|.","\\t\\tNote that when {item} is a |List| it is inserted as a single","\\t\\titem. Use |extend()| to concatenate |Lists|."],"invert":["\\t\\tBitwise invert. The argument is converted to a number. A","\\t\\tList, Dict or Float argument causes an error. Example: >","\\t\\t\\t:let bits = invert(bits)"],"isdirectory":["\\t\\tThe result is a Number, which is |TRUE| when a directory","\\t\\twith the name {directory} exists. If {directory} doesn\'t","\\t\\texist, or isn\'t a directory, the result is |FALSE|. {directory}","\\t\\tis any expression, which is used as a String."],"isinf":["\\t\\tReturn 1 if {expr} is a positive infinity, or -1 a negative","\\t\\tinfinity, otherwise 0. >","\\t\\t\\t:echo isinf(1.0 / 0.0)","<\\t\\t\\t1 >","\\t\\t\\t:echo isinf(-1.0 / 0.0)","<\\t\\t\\t-1"],"islocked":["\\t\\tThe result is a Number, which is |TRUE| when {expr} is the","\\t\\tname of a locked variable.","\\t\\t{expr} must be the name of a variable, |List| item or","\\t\\t|Dictionary| entry, not the variable itself! Example: >","\\t\\t\\t:let alist = [0, [\'a\', \'b\'], 2, 3]","\\t\\t\\t:lockvar 1 alist","\\t\\t\\t:echo islocked(\'alist\')\\t\\t\\" 1","\\t\\t\\t:echo islocked(\'alist[1]\')\\t\\" 0","","<\\t\\tWhen {expr} is a variable that does not exist you get an error","\\t\\tmessage. Use |exists()| to check for existence."],"id":["\\t\\tReturns a |String| which is a unique identifier of the","\\t\\tcontainer type (|List|, |Dict| and |Partial|). It is","\\t\\tguaranteed that for the mentioned types `id(v1) ==# id(v2)`","\\t\\treturns true iff `type(v1) == type(v2) && v1 is v2` (note:","\\t\\t|v:_null_list| and |v:_null_dict| have the same `id()` with","\\t\\tdifferent types because they are internally represented as","\\t\\ta NULL pointers). Currently `id()` returns a hexadecimal","\\t\\trepresentanion of the pointers to the containers (i.e. like","\\t\\t`0x994a40`), same as `printf(\\"%p\\", {expr})`, but it is advised","\\t\\tagainst counting on exact format of return value.","","\\t\\tIt is not guaranteed that `id(no_longer_existing_container)`","\\t\\twill not be equal to some other `id()`: new containers may","\\t\\treuse identifiers of the garbage-collected ones."],"items":["\\t\\tReturn a |List| with all the key-value pairs of {dict}. Each","\\t\\t|List| item is a list with two items: the key of a {dict}","\\t\\tentry and the value of this entry. The |List| is in arbitrary","\\t\\torder."],"isnan":["\\t\\tReturn |TRUE| if {expr} is a float with value NaN. >","\\t\\t\\techo isnan(0.0 / 0.0)","<\\t\\t\\t1"],"jobpid":["\\t\\tReturn the PID (process id) of |job-id| {job}."],"jobresize":["\\t\\tResize the pseudo terminal window of |job-id| {job} to {width}","\\t\\tcolumns and {height} rows.","\\t\\tFails if the job was not started with `\\"pty\\":v:true`."],"jobstart":["\\t\\tSpawns {cmd} as a job.","\\t\\tIf {cmd} is a List it runs directly (no \'shell\').","\\t\\tIf {cmd} is a String it runs in the \'shell\', like this: >","\\t\\t :call jobstart(split(&shell) + split(&shellcmdflag) + [\'{cmd}\'])","<\\t\\t(See |shell-unquoting| for details.)","","\\t\\tExample: >","\\t\\t :call jobstart(\'nvim -h\', {\'on_stdout\':{j,d,e->append(line(\'.\'),d)}})","<","\\t\\tReturns |job-id| on success, 0 on invalid arguments (or job","\\t\\ttable is full), -1 if {cmd}[0] or \'shell\' is not executable.","\\t\\tThe returned job-id is a valid |channel-id| representing the","\\t\\tjob\'s stdio streams. Use |chansend()| (or |rpcnotify()| and","\\t\\t|rpcrequest()| if \\"rpc\\" was enabled) to send data to stdin and","\\t\\t|chanclose()| to close the streams without stopping the job.","","\\t\\tSee |job-control| and |RPC|.","","\\t\\tNOTE: on Windows if {cmd} is a List:","\\t\\t - cmd[0] must be an executable (not a \\"built-in\\"). If it is","\\t\\t in $PATH it can be called by name, without an extension: >","\\t\\t :call jobstart([\'ping\', \'neovim.io\'])","<\\t\\t If it is a full or partial path, extension is required: >","\\t\\t :call jobstart([\'System32\\\\ping.exe\', \'neovim.io\'])","<\\t\\t - {cmd} is collapsed to a string of quoted args as expected","\\t\\t by CommandLineToArgvW https://msdn.microsoft.com/bb776391","\\t\\t unless cmd[0] is some form of \\"cmd.exe\\".","","\\t\\t\\t\\t\\t\\t\\t*jobstart-options*","\\t\\t{opts} is a dictionary with these keys:","\\t\\t clear_env: (boolean) `env` defines the job environment","\\t\\t\\t exactly, instead of merging current environment.","\\t\\t cwd:\\t (string, default=|current-directory|) Working","\\t\\t\\t directory of the job.","\\t\\t detach: (boolean) Detach the job process: it will not be","\\t\\t\\t killed when Nvim exits. If the process exits","\\t\\t\\t before Nvim, `on_exit` will be invoked.","\\t\\t env:\\t (dict) Map of environment variable name:value","\\t\\t\\t pairs extending (or replacing if |clear_env|)","\\t\\t\\t the current environment.","\\t\\t height: (number) Height of the `pty` terminal.","\\t\\t |on_exit|: (function) Callback invoked when the job exits.","\\t\\t |on_stdout|: (function) Callback invoked when the job emits","\\t\\t\\t stdout data.","\\t\\t |on_stderr|: (function) Callback invoked when the job emits","\\t\\t\\t stderr data.","\\t\\t pty:\\t (boolean) Connect the job to a new pseudo","\\t\\t\\t terminal, and its streams to the master file","\\t\\t\\t descriptor. Then `on_stderr` is ignored,","\\t\\t\\t `on_stdout` receives all output.","\\t\\t rpc:\\t (boolean) Use |msgpack-rpc| to communicate with","\\t\\t\\t the job over stdio. Then `on_stdout` is ignored,","\\t\\t\\t but `on_stderr` can still be used.","\\t\\t stderr_buffered: (boolean) Collect data until EOF (stream closed)","\\t\\t\\t before invoking `on_stderr`. |channel-buffered|","\\t\\t stdout_buffered: (boolean) Collect data until EOF (stream","\\t\\t\\t closed) before invoking `on_stdout`. |channel-buffered|","\\t\\t TERM:\\t (string) Sets the `pty` $TERM environment variable.","\\t\\t width: (number) Width of the `pty` terminal.","","\\t\\t{opts} is passed as |self| dictionary to the callback; the","\\t\\tcaller may set other keys to pass application-specific data.","","\\t\\tReturns:","\\t\\t - |channel-id| on success","\\t\\t - 0 on invalid arguments","\\t\\t - -1 if {cmd}[0] is not executable.","\\t\\tSee also |job-control|, |channel|, |msgpack-rpc|."],"jobstop":["\\t\\tStop |job-id| {id} by sending SIGTERM to the job process. If","\\t\\tthe process does not terminate after a timeout then SIGKILL","\\t\\twill be sent. When the job terminates its |on_exit| handler","\\t\\t(if any) will be invoked.","\\t\\tSee |job-control|.","","\\t\\tReturns 1 for valid job id, 0 for invalid id, including jobs have","\\t\\texited or stopped."],"jobwait":["\\t\\tWaits for jobs and their |on_exit| handlers to complete.","","\\t\\t{jobs} is a List of |job-id|s to wait for.","\\t\\t{timeout} is the maximum waiting time in milliseconds, -1","\\t\\tmeans forever.","","\\t\\tTimeout of 0 can be used to check the status of a job: >","\\t\\t\\tlet running = jobwait([{job-id}], 0)[0] == -1","<","\\t\\tDuring jobwait() callbacks for jobs not in the {jobs} list may","\\t\\tbe invoked. The screen will not redraw unless |:redraw| is","\\t\\tinvoked by a callback.","","\\t\\tReturns a list of len({jobs}) integers, where each integer is","\\t\\tthe status of the corresponding job:","\\t\\t\\tExit-code, if the job exited","\\t\\t\\t-1 if the timeout was exceeded","\\t\\t\\t-2 if the job was interrupted (by |CTRL-C|)","\\t\\t\\t-3 if the job-id is invalid"],"join":["\\t\\tJoin the items in {list} together into one String.","\\t\\tWhen {sep} is specified it is put in between the items. If","\\t\\t{sep} is omitted a single space is used.","\\t\\tNote that {sep} is not added at the end. You might want to","\\t\\tadd it there too: >","\\t\\t\\tlet lines = join(mylist, \\"\\\\n\\") . \\"\\\\n\\"","<\\t\\tString items are used as-is. |Lists| and |Dictionaries| are","\\t\\tconverted into a string like with |string()|.","\\t\\tThe opposite function is |split()|."],"json_decode":["\\t\\tConvert {expr} from JSON object. Accepts |readfile()|-style","\\t\\tlist as the input, as well as regular string. May output any","\\t\\tVim value. In the following cases it will output","\\t\\t|msgpack-special-dict|:","\\t\\t1. Dictionary contains duplicate key.","\\t\\t2. Dictionary contains empty key.","\\t\\t3. String contains NUL byte. Two special dictionaries: for","\\t\\t dictionary and for string will be emitted in case string","\\t\\t with NUL byte was a dictionary key.","","\\t\\tNote: function treats its input as UTF-8 always. The JSON","\\t\\tstandard allows only a few encodings, of which UTF-8 is","\\t\\trecommended and the only one required to be supported.","\\t\\tNon-UTF-8 characters are an error."],"json_encode":["\\t\\tConvert {expr} into a JSON string. Accepts","\\t\\t|msgpack-special-dict| as the input. Will not convert","\\t\\t|Funcref|s, mappings with non-string keys (can be created as","\\t\\t|msgpack-special-dict|), values with self-referencing","\\t\\tcontainers, strings which contain non-UTF-8 characters,","\\t\\tpseudo-UTF-8 strings which contain codepoints reserved for","\\t\\tsurrogate pairs (such strings are not valid UTF-8 strings). ","\\t\\tNon-printable characters are converted into \\"\\\\u1234\\" escapes","\\t\\tor special escapes like \\"\\\\t\\", other are dumped as-is."],"keys":["\\t\\tReturn a |List| with all the keys of {dict}. The |List| is in","\\t\\tarbitrary order.",""],"len":["\\t\\tWhen {expr} is a String or a Number the length in bytes is","\\t\\tused, as with |strlen()|.","\\t\\tWhen {expr} is a |List| the number of items in the |List| is","\\t\\treturned.","\\t\\tWhen {expr} is a |Blob| the number of bytes is returned.","\\t\\tWhen {expr} is a |Dictionary| the number of entries in the","\\t\\t|Dictionary| is returned.","\\t\\tOtherwise an error is given.",""],"libcall":["\\t\\tCall function {funcname} in the run-time library {libname}","\\t\\twith single argument {argument}.","\\t\\tThis is useful to call functions in a library that you","\\t\\tespecially made to be used with Vim. Since only one argument","\\t\\tis possible, calling standard library functions is rather","\\t\\tlimited.","\\t\\tThe result is the String returned by the function. If the","\\t\\tfunction returns NULL, this will appear as an empty string \\"\\"","\\t\\tto Vim.","\\t\\tIf the function returns a number, use libcallnr()!","\\t\\tIf {argument} is a number, it is passed to the function as an","\\t\\tint; if {argument} is a string, it is passed as a","\\t\\tnull-terminated string.","\\t\\tThis function will fail in |restricted-mode|.","","\\t\\tlibcall() allows you to write your own \'plug-in\' extensions to","\\t\\tVim without having to recompile the program. It is NOT a","\\t\\tmeans to call system functions! If you try to do so Vim will","\\t\\tvery probably crash.","","\\t\\tFor Win32, the functions you write must be placed in a DLL","\\t\\tand use the normal C calling convention (NOT Pascal which is","\\t\\tused in Windows System DLLs). The function must take exactly","\\t\\tone parameter, either a character pointer or a long integer,","\\t\\tand must return a character pointer or NULL. The character","\\t\\tpointer returned must point to memory that will remain valid","\\t\\tafter the function has returned (e.g. in static data in the","\\t\\tDLL). If it points to allocated memory, that memory will","\\t\\tleak away. Using a static buffer in the function should work,","\\t\\tit\'s then freed when the DLL is unloaded.","","\\t\\tWARNING: If the function returns a non-valid pointer, Vim may","\\t\\tcrash!\\tThis also happens if the function returns a number,","\\t\\tbecause Vim thinks it\'s a pointer.","\\t\\tFor Win32 systems, {libname} should be the filename of the DLL","\\t\\twithout the \\".DLL\\" suffix. A full path is only required if","\\t\\tthe DLL is not in the usual places.","\\t\\tFor Unix: When compiling your own plugins, remember that the","\\t\\tobject code must be compiled as position-independent (\'PIC\').","\\t\\tExamples: >","\\t\\t\\t:echo libcall(\\"libc.so\\", \\"getenv\\", \\"HOME\\")","<"],"libcallnr":["\\t\\tJust like |libcall()|, but used for a function that returns an","\\t\\tint instead of a string.","\\t\\tExamples: >","\\t\\t\\t:echo libcallnr(\\"/usr/lib/libc.so\\", \\"getpid\\", \\"\\")","\\t\\t\\t:call libcallnr(\\"libc.so\\", \\"printf\\", \\"Hello World!\\\\n\\")","\\t\\t\\t:call libcallnr(\\"libc.so\\", \\"sleep\\", 10)","<"],"line":["\\t\\tposition given with {expr}. The accepted positions are:","\\t\\t .\\t the cursor position","\\t\\t $\\t the last line in the current buffer","\\t\\t \'x\\t position of mark x (if the mark is not set, 0 is","\\t\\t\\t returned)","\\t\\t w0\\t first line visible in current window (one if the","\\t\\t\\t display isn\'t updated, e.g. in silent Ex mode)","\\t\\t w$\\t last line visible in current window (this is one","\\t\\t\\t less than \\"w0\\" if no lines are visible)","\\t\\t v\\t In Visual mode: the start of the Visual area (the","\\t\\t\\t cursor is the end). When not in Visual mode","\\t\\t\\t returns the cursor position. Differs from |\'<| in","\\t\\t\\t that it\'s updated right away.","\\t\\tNote that a mark in another file can be used. The line number","\\t\\tthen applies to another buffer.","\\t\\tTo get the column number use |col()|. To get both use","\\t\\t|getpos()|.","\\t\\tExamples: >","\\t\\t\\tline(\\".\\")\\t\\tline number of the cursor","\\t\\t\\tline(\\"\'t\\")\\t\\tline number of mark t","\\t\\t\\tline(\\"\'\\" . marker)\\tline number of mark marker"],"line2byte":["\\t\\tReturn the byte count from the start of the buffer for line","\\t\\t{lnum}. This includes the end-of-line character, depending on","\\t\\tthe \'fileformat\' option for the current buffer. The first","\\t\\tline returns 1. UTF-8 encoding is used, \'fileencoding\' is","\\t\\tignored. This can also be used to get the byte count for the","\\t\\tline just below the last line: >","\\t\\t\\tline2byte(line(\\"$\\") + 1)","<\\t\\tThis is the buffer size plus one. If \'fileencoding\' is empty","\\t\\tit is the file size plus one.","\\t\\tWhen {lnum} is invalid -1 is returned.","\\t\\tAlso see |byte2line()|, |go| and |:goto|."],"lispindent":["\\t\\tGet the amount of indent for line {lnum} according the lisp","\\t\\tindenting rules, as with \'lisp\'.","\\t\\tThe indent is counted in spaces, the value of \'tabstop\' is","\\t\\trelevant. {lnum} is used just like in |getline()|.","\\t\\tWhen {lnum} is invalid or Vim was not compiled the","\\t\\t|+lispindent| feature, -1 is returned."],"list2str":["\\t\\tConvert each number in {list} to a character string can","\\t\\tconcatenate them all. Examples: >","\\t\\t\\tlist2str([32])\\t\\treturns \\" \\"","\\t\\t\\tlist2str([65, 66, 67])\\treturns \\"ABC\\"","<\\t\\tThe same can be done (slowly) with: >","\\t\\t\\tjoin(map(list, {nr, val -> nr2char(val)}), \'\')","<\\t\\t|str2list()| does the opposite.","","\\t\\tWhen {utf8} is omitted or zero, the current \'encoding\' is used.","\\t\\tWith {utf8} is 1, always return utf-8 characters.","\\t\\tWith utf-8 composing characters work as expected: >","\\t\\t\\tlist2str([97, 769])\\treturns \\"á\\""],"localtime":["\\t\\tReturn the current time, measured as seconds since 1st Jan","\\t\\t1970. See also |strftime()| and |getftime()|.",""],"log":["\\t\\tReturn the natural logarithm (base e) of {expr} as a |Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number| in the range","\\t\\t(0, inf].","\\t\\tExamples: >","\\t\\t\\t:echo log(10)","<\\t\\t\\t2.302585 >","\\t\\t\\t:echo log(exp(5))","<\\t\\t\\t5.0",""],"log10":["\\t\\tReturn the logarithm of Float {expr} to base 10 as a |Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo log10(1000)","<\\t\\t\\t3.0 >","\\t\\t\\t:echo log10(0.01)","<\\t\\t\\t-2.0"],"luaeval":["\\t\\tEvaluate Lua expression {expr} and return its result converted","\\t\\tto Vim data structures. See |lua-eval| for more details."],"map":["\\t\\t{expr1} must be a |List| or a |Dictionary|.","\\t\\tReplace each item in {expr1} with the result of evaluating","\\t\\t{expr2}. {expr2} must be a |string| or |Funcref|.","\\t\\t","\\t\\tIf {expr2} is a |string|, inside {expr2} |v:val| has the value","\\t\\tof the current item. For a |Dictionary| |v:key| has the key","\\t\\tof the current item and for a |List| |v:key| has the index of","\\t\\tthe current item.","\\t\\tExample: >","\\t\\t\\t:call map(mylist, \'\\"> \\" . v:val . \\" <\\"\')","<\\t\\tThis puts \\"> \\" before and \\" <\\" after each item in \\"mylist\\".","","\\t\\tNote that {expr2} is the result of an expression and is then","\\t\\tused as an expression again. Often it is good to use a","\\t\\t|literal-string| to avoid having to double backslashes. You","\\t\\tstill have to double \' quotes","","\\t\\tIf {expr2} is a |Funcref| it is called with two arguments:","\\t\\t\\t1. The key or the index of the current item.","\\t\\t\\t2. the value of the current item.","\\t\\tThe function must return the new value of the item. Example","\\t\\tthat changes each value by \\"key-value\\": >","\\t\\t\\tfunc KeyValue(key, val)","\\t\\t\\t return a:key . \'-\' . a:val","\\t\\t\\tendfunc","\\t\\t\\tcall map(myDict, function(\'KeyValue\'))","<\\t\\tIt is shorter when using a |lambda|: >","\\t\\t\\tcall map(myDict, {key, val -> key . \'-\' . val})","<\\t\\tIf you do not use \\"val\\" you can leave it out: >","\\t\\t\\tcall map(myDict, {key -> \'item: \' . key})","<\\t\\tIf you do not use \\"key\\" you can use a short name: >","\\t\\t\\tcall map(myDict, {_, val -> \'item: \' . val})","<","\\t\\tThe operation is done in-place. If you want a |List| or","\\t\\t|Dictionary| to remain unmodified make a copy first: >","\\t\\t\\t:let tlist = map(copy(mylist), \' v:val . \\"\\\\t\\"\')","","<\\t\\tReturns {expr1}, the |List| or |Dictionary| that was filtered.","\\t\\tWhen an error is encountered while evaluating {expr2} no","\\t\\tfurther items in {expr1} are processed. When {expr2} is a","\\t\\tFuncref errors inside a function are ignored, unless it was","\\t\\tdefined with the \\"abort\\" flag.",""],"maparg":["\\t\\tWhen {dict} is omitted or zero: Return the rhs of mapping","\\t\\t{name} in mode {mode}. The returned String has special","\\t\\tcharacters translated like in the output of the \\":map\\" command","\\t\\tlisting.","","\\t\\tWhen there is no mapping for {name}, an empty String is","\\t\\treturned. When the mapping for {name} is empty, then \\"<Nop>\\"","\\t\\tis returned.","","\\t\\tThe {name} can have special key names, like in the \\":map\\"","\\t\\tcommand.","","\\t\\t{mode} can be one of these strings:","\\t\\t\\t\\"n\\"\\tNormal","\\t\\t\\t\\"v\\"\\tVisual (including Select)","\\t\\t\\t\\"o\\"\\tOperator-pending","\\t\\t\\t\\"i\\"\\tInsert","\\t\\t\\t\\"c\\"\\tCmd-line","\\t\\t\\t\\"s\\"\\tSelect","\\t\\t\\t\\"x\\"\\tVisual","\\t\\t\\t\\"l\\"\\tlangmap |language-mapping|","\\t\\t\\t\\"t\\"\\tTerminal","\\t\\t\\t\\"\\"\\tNormal, Visual and Operator-pending","\\t\\tWhen {mode} is omitted, the modes for \\"\\" are used.","","\\t\\tWhen {abbr} is there and it is |TRUE| use abbreviations","\\t\\tinstead of mappings.","","\\t\\tWhen {dict} is there and it is |TRUE| return a dictionary","\\t\\tcontaining all the information of the mapping with the","\\t\\tfollowing items:","\\t\\t \\"lhs\\"\\t The {lhs} of the mapping.","\\t\\t \\"rhs\\"\\t The {rhs} of the mapping as typed.","\\t\\t \\"silent\\" 1 for a |:map-silent| mapping, else 0.","\\t\\t \\"noremap\\" 1 if the {rhs} of the mapping is not remappable.","\\t\\t \\"expr\\" 1 for an expression mapping (|:map-<expr>|).","\\t\\t \\"buffer\\" 1 for a buffer local mapping (|:map-local|).","\\t\\t \\"mode\\" Modes for which the mapping is defined. In","\\t\\t\\t addition to the modes mentioned above, these","\\t\\t\\t characters will be used:","\\t\\t\\t \\" \\" Normal, Visual and Operator-pending","\\t\\t\\t \\"!\\" Insert and Commandline mode","\\t\\t\\t\\t (|mapmode-ic|)","\\t\\t \\"sid\\"\\t The script local ID, used for <sid> mappings","\\t\\t\\t (|<SID>|).","\\t\\t \\"lnum\\" The line number in \\"sid\\", zero if unknown.","\\t\\t \\"nowait\\" Do not wait for other, longer mappings.","\\t\\t\\t (|:map-<nowait>|).","","\\t\\tThe mappings local to the current buffer are checked first,","\\t\\tthen the global mappings.","\\t\\tThis function can be used to map a key even when it\'s already","\\t\\tmapped, and have it do the original mapping too. Sketch: >","\\t\\t\\texe \'nnoremap <Tab> ==\' . maparg(\'<Tab>\', \'n\')",""],"mapcheck":["\\t\\tCheck if there is a mapping that matches with {name} in mode","\\t\\t{mode}. See |maparg()| for {mode} and special names in","\\t\\t{name}.","\\t\\tWhen {abbr} is there and it is non-zero use abbreviations","\\t\\tinstead of mappings.","\\t\\tA match happens with a mapping that starts with {name} and","\\t\\twith a mapping which is equal to the start of {name}.","","\\t\\t\\tmatches mapping \\"a\\"\\t\\"ab\\"\\t\\"abc\\" ~","\\t\\t mapcheck(\\"a\\")\\tyes\\tyes\\t yes","\\t\\t mapcheck(\\"abc\\")\\tyes\\tyes\\t yes","\\t\\t mapcheck(\\"ax\\")\\tyes\\tno\\t no","\\t\\t mapcheck(\\"b\\")\\tno\\tno\\t no","","\\t\\tThe difference with maparg() is that mapcheck() finds a","\\t\\tmapping that matches with {name}, while maparg() only finds a","\\t\\tmapping for {name} exactly.","\\t\\tWhen there is no mapping that starts with {name}, an empty","\\t\\tString is returned. If there is one, the RHS of that mapping","\\t\\tis returned. If there are several mappings that start with","\\t\\t{name}, the RHS of one of them is returned. This will be","\\t\\t\\"<Nop>\\" if the RHS is empty.","\\t\\tThe mappings local to the current buffer are checked first,","\\t\\tthen the global mappings.","\\t\\tThis function can be used to check if a mapping can be added","\\t\\twithout being ambiguous. Example: >","\\t:if mapcheck(\\"_vv\\") == \\"\\"","\\t: map _vv :set guifont=7x13<CR>","\\t:endif","<\\t\\tThis avoids adding the \\"_vv\\" mapping when there already is a","\\t\\tmapping for \\"_v\\" or for \\"_vvv\\"."],"match":["\\t\\tWhen {expr} is a |List| then this returns the index of the","\\t\\tfirst item where {pat} matches. Each item is used as a","\\t\\tString, |Lists| and |Dictionaries| are used as echoed.","","\\t\\tOtherwise, {expr} is used as a String. The result is a","\\t\\tNumber, which gives the index (byte offset) in {expr} where","\\t\\t{pat} matches.","","\\t\\tA match at the first character or |List| item returns zero.","\\t\\tIf there is no match -1 is returned.","","\\t\\tFor getting submatches see |matchlist()|.","\\t\\tExample: >","\\t\\t\\t:echo match(\\"testing\\", \\"ing\\")\\t\\" results in 4","\\t\\t\\t:echo match([1, \'x\'], \'\\\\a\')\\t\\" results in 1","<\\t\\tSee |string-match| for how {pat} is used.","\\t\\t\\t\\t\\t\\t\\t\\t*strpbrk()*","\\t\\tVim doesn\'t have a strpbrk() function. But you can do: >","\\t\\t\\t:let sepidx = match(line, \'[.,;: \\\\t]\')","<\\t\\t\\t\\t\\t\\t\\t\\t*strcasestr()*","\\t\\tVim doesn\'t have a strcasestr() function. But you can add","\\t\\t\\"\\\\c\\" to the pattern to ignore case: >","\\t\\t\\t:let idx = match(haystack, \'\\\\cneedle\')","<","\\t\\tIf {start} is given, the search starts from byte index","\\t\\t{start} in a String or item {start} in a |List|.","\\t\\tThe result, however, is still the index counted from the","\\t\\tfirst character/item. Example: >","\\t\\t\\t:echo match(\\"testing\\", \\"ing\\", 2)","<\\t\\tresult is again \\"4\\". >","\\t\\t\\t:echo match(\\"testing\\", \\"ing\\", 4)","<\\t\\tresult is again \\"4\\". >","\\t\\t\\t:echo match(\\"testing\\", \\"t\\", 2)","<\\t\\tresult is \\"3\\".","\\t\\tFor a String, if {start} > 0 then it is like the string starts","\\t\\t{start} bytes later, thus \\"^\\" will match at {start}. Except","\\t\\twhen {count} is given, then it\'s like matches before the","\\t\\t{start} byte are ignored (this is a bit complicated to keep it","\\t\\tbackwards compatible).","\\t\\tFor a String, if {start} < 0, it will be set to 0. For a list","\\t\\tthe index is counted from the end.","\\t\\tIf {start} is out of range ({start} > strlen({expr}) for a","\\t\\tString or {start} > len({expr}) for a |List|) -1 is returned.","","\\t\\tWhen {count} is given use the {count}\'th match. When a match","\\t\\tis found in a String the search for the next one starts one","\\t\\tcharacter further. Thus this example results in 1: >","\\t\\t\\techo match(\\"testing\\", \\"..\\", 0, 2)","<\\t\\tIn a |List| the search continues in the next item.","\\t\\tNote that when {count} is added the way {start} works changes,","\\t\\tsee above.","","\\t\\tSee |pattern| for the patterns that are accepted.","\\t\\tThe \'ignorecase\' option is used to set the ignore-caseness of","\\t\\tthe pattern. \'smartcase\' is NOT used. The matching is always","\\t\\tdone like \'magic\' is set and \'cpoptions\' is empty.",""],"matchadd":["\\t\\tDefines a pattern to be highlighted in the current window (a","\\t\\t\\"match\\"). It will be highlighted with {group}. Returns an","\\t\\tidentification number (ID), which can be used to delete the","\\t\\tmatch using |matchdelete()|.","\\t\\tMatching is case sensitive and magic, unless case sensitivity","\\t\\tor magicness are explicitly overridden in {pattern}. The","\\t\\t\'magic\', \'smartcase\' and \'ignorecase\' options are not used.","\\t\\tThe \\"Conceal\\" value is special, it causes the match to be","\\t\\tconcealed.","","\\t\\tThe optional {priority} argument assigns a priority to the","\\t\\tmatch. A match with a high priority will have its","\\t\\thighlighting overrule that of a match with a lower priority.","\\t\\tA priority is specified as an integer (negative numbers are no","\\t\\texception). If the {priority} argument is not specified, the","\\t\\tdefault priority is 10. The priority of \'hlsearch\' is zero,","\\t\\thence all matches with a priority greater than zero will","\\t\\toverrule it. Syntax highlighting (see \'syntax\') is a separate","\\t\\tmechanism, and regardless of the chosen priority a match will","\\t\\talways overrule syntax highlighting.","","\\t\\tThe optional {id} argument allows the request for a specific","\\t\\tmatch ID. If a specified ID is already taken, an error","\\t\\tmessage will appear and the match will not be added. An ID","\\t\\tis specified as a positive integer (zero excluded). IDs 1, 2","\\t\\tand 3 are reserved for |:match|, |:2match| and |:3match|,","\\t\\trespectively. If the {id} argument is not specified or -1,","\\t\\t|matchadd()| automatically chooses a free ID.","","\\t\\tThe optional {dict} argument allows for further custom","\\t\\tvalues. Currently this is used to specify a match specific","\\t\\tconceal character that will be shown for |hl-Conceal|","\\t\\thighlighted matches. The dict can have the following members:","","\\t\\t\\tconceal\\t Special character to show instead of the","\\t\\t\\t\\t match (only for |hl-Conceal| highlighed","\\t\\t\\t\\t matches, see |:syn-cchar|)","\\t\\t\\twindow\\t Instead of the current window use the","\\t\\t\\t\\t window with this number or window ID.","","\\t\\tThe number of matches is not limited, as it is the case with","\\t\\tthe |:match| commands.","","\\t\\tExample: >","\\t\\t\\t:highlight MyGroup ctermbg=green guibg=green","\\t\\t\\t:let m = matchadd(\\"MyGroup\\", \\"TODO\\")","<\\t\\tDeletion of the pattern: >","\\t\\t\\t:call matchdelete(m)","","<\\t\\tA list of matches defined by |matchadd()| and |:match| are","\\t\\tavailable from |getmatches()|. All matches can be deleted in","\\t\\tone operation by |clearmatches()|.",""],"matchaddpos":["\\t\\tSame as |matchadd()|, but requires a list of positions {pos}","\\t\\tinstead of a pattern. This command is faster than |matchadd()|","\\t\\tbecause it does not require to handle regular expressions and","\\t\\tsets buffer line boundaries to redraw screen. It is supposed","\\t\\tto be used when fast match additions and deletions are","\\t\\trequired, for example to highlight matching parentheses.","\\t\\t\\t\\t\\t\\t\\t*E5030* *E5031*","\\t\\tThe list {pos} can contain one of these items:","\\t\\t- A number. This whole line will be highlighted. The first","\\t\\t line has number 1.","\\t\\t- A list with one number, e.g., [23]. The whole line with this","\\t\\t number will be highlighted.","\\t\\t- A list with two numbers, e.g., [23, 11]. The first number is","\\t\\t the line number, the second one is the column number (first","\\t\\t column is 1, the value must correspond to the byte index as","\\t\\t |col()| would return). The character at this position will","\\t\\t be highlighted.","\\t\\t- A list with three numbers, e.g., [23, 11, 3]. As above, but","\\t\\t the third number gives the length of the highlight in bytes.","","\\t\\tEntries with zero and negative line numbers are silently ","\\t\\tignored, as well as entries with negative column numbers and ","\\t\\tlengths.","","\\t\\tThe maximum number of positions is 8.","","\\t\\tExample: >","\\t\\t\\t:highlight MyGroup ctermbg=green guibg=green","\\t\\t\\t:let m = matchaddpos(\\"MyGroup\\", [[23, 24], 34])","<\\t\\tDeletion of the pattern: >","\\t\\t\\t:call matchdelete(m)","","<\\t\\tMatches added by |matchaddpos()| are returned by","\\t\\t|getmatches()| with an entry \\"pos1\\", \\"pos2\\", etc., with the","\\t\\tvalue a list like the {pos} item."],"matcharg":["\\t\\tSelects the {nr} match item, as set with a |:match|,","\\t\\t|:2match| or |:3match| command.","\\t\\tReturn a |List| with two elements:","\\t\\t\\tThe name of the highlight group used","\\t\\t\\tThe pattern used.","\\t\\tWhen {nr} is not 1, 2 or 3 returns an empty |List|.","\\t\\tWhen there is no match item set returns [\'\', \'\'].","\\t\\tThis is useful to save and restore a |:match|.","\\t\\tHighlighting matches using the |:match| commands are limited","\\t\\tto three matches. |matchadd()| does not have this limitation."],"matchdelete":["\\t\\tDeletes a match with ID {id} previously defined by |matchadd()|","\\t\\tor one of the |:match| commands. Returns 0 if successful,","\\t\\totherwise -1. See example for |matchadd()|. All matches can","\\t\\tbe deleted in one operation by |clearmatches()|."],"matchend":["\\t\\tSame as |match()|, but return the index of first character","\\t\\tafter the match. Example: >","\\t\\t\\t:echo matchend(\\"testing\\", \\"ing\\")","<\\t\\tresults in \\"7\\".","\\t\\t\\t\\t\\t\\t\\t*strspn()* *strcspn()*","\\t\\tVim doesn\'t have a strspn() or strcspn() function, but you can","\\t\\tdo it with matchend(): >","\\t\\t\\t:let span = matchend(line, \'[a-zA-Z]\')","\\t\\t\\t:let span = matchend(line, \'[^a-zA-Z]\')","<\\t\\tExcept that -1 is returned when there are no matches.","","\\t\\tThe {start}, if given, has the same meaning as for |match()|. >","\\t\\t\\t:echo matchend(\\"testing\\", \\"ing\\", 2)","<\\t\\tresults in \\"7\\". >","\\t\\t\\t:echo matchend(\\"testing\\", \\"ing\\", 5)","<\\t\\tresult is \\"-1\\".","\\t\\tWhen {expr} is a |List| the result is equal to |match()|."],"matchlist":["\\t\\tSame as |match()|, but return a |List|. The first item in the","\\t\\tlist is the matched string, same as what matchstr() would","\\t\\treturn. Following items are submatches, like \\"\\\\1\\", \\"\\\\2\\", etc.","\\t\\tin |:substitute|. When an optional submatch didn\'t match an","\\t\\tempty string is used. Example: >","\\t\\t\\techo matchlist(\'acd\', \'\\\\(a\\\\)\\\\?\\\\(b\\\\)\\\\?\\\\(c\\\\)\\\\?\\\\(.*\\\\)\')","<\\t\\tResults in: [\'acd\', \'a\', \'\', \'c\', \'d\', \'\', \'\', \'\', \'\', \'\']","\\t\\tWhen there is no match an empty list is returned."],"matchstr":["\\t\\tSame as |match()|, but return the matched string. Example: >","\\t\\t\\t:echo matchstr(\\"testing\\", \\"ing\\")","<\\t\\tresults in \\"ing\\".","\\t\\tWhen there is no match \\"\\" is returned.","\\t\\tThe {start}, if given, has the same meaning as for |match()|. >","\\t\\t\\t:echo matchstr(\\"testing\\", \\"ing\\", 2)","<\\t\\tresults in \\"ing\\". >","\\t\\t\\t:echo matchstr(\\"testing\\", \\"ing\\", 5)","<\\t\\tresult is \\"\\".","\\t\\tWhen {expr} is a |List| then the matching item is returned.","\\t\\tThe type isn\'t changed, it\'s not necessarily a String."],"matchstrpos":["\\t\\tSame as |matchstr()|, but return the matched string, the start","\\t\\tposition and the end position of the match. Example: >","\\t\\t\\t:echo matchstrpos(\\"testing\\", \\"ing\\")","<\\t\\tresults in [\\"ing\\", 4, 7].","\\t\\tWhen there is no match [\\"\\", -1, -1] is returned.","\\t\\tThe {start}, if given, has the same meaning as for |match()|. >","\\t\\t\\t:echo matchstrpos(\\"testing\\", \\"ing\\", 2)","<\\t\\tresults in [\\"ing\\", 4, 7]. >","\\t\\t\\t:echo matchstrpos(\\"testing\\", \\"ing\\", 5)","<\\t\\tresult is [\\"\\", -1, -1].","\\t\\tWhen {expr} is a |List| then the matching item, the index","\\t\\tof first item where {pat} matches, the start position and the","\\t\\tend position of the match are returned. >","\\t\\t\\t:echo matchstrpos([1, \'__x\'], \'\\\\a\')","<\\t\\tresult is [\\"x\\", 1, 2, 3].","\\t\\tThe type isn\'t changed, it\'s not necessarily a String.",""],"max":["\\t\\t{expr} can be a list or a dictionary. For a dictionary,","\\t\\tit returns the maximum of all values in the dictionary.","\\t\\tIf {expr} is neither a list nor a dictionary, or one of the","\\t\\titems in {expr} cannot be used as a Number this results in"," an error. An empty |List| or |Dictionary| results in zero."],"menu_get":["\\t\\tReturns a |List| of |Dictionaries| describing |menus| (defined","\\t\\tby |:menu|, |:amenu|, …), including |hidden-menus|.","","\\t\\t{path} matches a menu by name, or all menus if {path} is an","\\t\\tempty string. Example: >","\\t\\t\\t:echo menu_get(\'File\',\'\')","\\t\\t\\t:echo menu_get(\'\')","<","\\t\\t{modes} is a string of zero or more modes (see |maparg()| or","\\t\\t|creating-menus| for the list of modes). \\"a\\" means \\"all\\".","","\\t\\tExample: >","\\t\\t\\tnnoremenu &Test.Test inormal","\\t\\t\\tinoremenu Test.Test insert","\\t\\t\\tvnoremenu Test.Test x","\\t\\t\\techo menu_get(\\"\\")","","<\\t\\treturns something like this: >","","\\t\\t\\t[ {","\\t\\t\\t \\"hidden\\": 0,","\\t\\t\\t \\"name\\": \\"Test\\",","\\t\\t\\t \\"priority\\": 500,","\\t\\t\\t \\"shortcut\\": 84,","\\t\\t\\t \\"submenus\\": [ {","\\t\\t\\t \\"hidden\\": 0,","\\t\\t\\t \\"mappings\\": {","\\t\\t\\t i\\": {","\\t\\t\\t\\t\\"enabled\\": 1,","\\t\\t\\t\\t\\"noremap\\": 1,","\\t\\t\\t\\t\\"rhs\\": \\"insert\\",","\\t\\t\\t\\t\\"sid\\": 1,","\\t\\t\\t\\t\\"silent\\": 0","\\t\\t\\t },","\\t\\t\\t n\\": { ... },","\\t\\t\\t s\\": { ... },","\\t\\t\\t v\\": { ... }","\\t\\t\\t },","\\t\\t\\t \\"name\\": \\"Test\\",","\\t\\t\\t \\"priority\\": 500,","\\t\\t\\t \\"shortcut\\": 0","\\t\\t\\t } ]","\\t\\t\\t} ]","<",""],"min":["\\t\\t{expr} can be a list or a dictionary. For a dictionary,","\\t\\tit returns the minimum of all values in the dictionary.","\\t\\tIf {expr} is neither a list nor a dictionary, or one of the","\\t\\titems in {expr} cannot be used as a Number this results in","\\t\\tan error. An empty |List| or |Dictionary| results in zero.",""],"mkdir":["\\t\\tCreate directory {name}.","\\t\\tIf {path} is \\"p\\" then intermediate directories are created as","\\t\\tnecessary. Otherwise it must be \\"\\".","\\t\\tIf {prot} is given it is used to set the protection bits of","\\t\\tthe new directory. The default is 0755 (rwxr-xr-x: r/w for","\\t\\tthe user readable for others). Use 0700 to make it unreadable","\\t\\tfor others.","","\\t\\t{prot} is applied for all parts of {name}. Thus if you create","\\t\\t/tmp/foo/bar then /tmp/foo will be created with 0700. Example: >","\\t\\t\\t:call mkdir($HOME . \\"/tmp/foo/bar\\", \\"p\\", 0700)","<\\t\\tThis function is not available in the |sandbox|.","","\\t\\tIf you try to create an existing directory with {path} set to","\\t\\t\\"p\\" mkdir() will silently exit.",""],"mode":["\\t\\tIf [expr] is supplied and it evaluates to a non-zero Number or","\\t\\ta non-empty String (|non-zero-arg|), then the full mode is","\\t\\treturned, otherwise only the first letter is returned.","","\\t\\t n\\t Normal","\\t\\t no\\t Operator-pending","\\t\\t nov\\t Operator-pending (forced charwise |o_v|)","\\t\\t noV\\t Operator-pending (forced linewise |o_V|)","\\t\\t noCTRL-V Operator-pending (forced blockwise |o_CTRL-V|)","\\t\\t niI\\t Normal using |i_CTRL-O| in |Insert-mode|","\\t\\t niR\\t Normal using |i_CTRL-O| in |Replace-mode|","\\t\\t niV\\t Normal using |i_CTRL-O| in |Virtual-Replace-mode|","\\t\\t v\\t Visual by character","\\t\\t V\\t Visual by line","\\t\\t CTRL-V Visual blockwise","\\t\\t s\\t Select by character","\\t\\t S\\t Select by line","\\t\\t CTRL-S Select blockwise","\\t\\t i\\t Insert","\\t\\t ic\\t Insert mode completion |compl-generic|","\\t\\t ix\\t Insert mode |i_CTRL-X| completion","\\t\\t R\\t Replace |R|","\\t\\t Rc\\t Replace mode completion |compl-generic|","\\t\\t Rv\\t Virtual Replace |gR|","\\t\\t Rx\\t Replace mode |i_CTRL-X| completion","\\t\\t c\\t Command-line editing","\\t\\t cv\\t Vim Ex mode |gQ|","\\t\\t ce\\t Normal Ex mode |Q|","\\t\\t r\\t Hit-enter prompt","\\t\\t rm\\t The -- more -- prompt","\\t\\t r?\\t |:confirm| query of some sort","\\t\\t !\\t Shell or external command is executing","\\t\\t t\\t Terminal mode: keys go to the job","\\t\\tThis is useful in the \'statusline\' option or when used","\\t\\twith |remote_expr()| In most other places it always returns","\\t\\t\\"c\\" or \\"n\\".","\\t\\tNote that in the future more modes and more specific modes may","\\t\\tbe added. It\'s better not to compare the whole string but only","\\t\\tthe leading character(s).","\\t\\tAlso see |visualmode()|."],"msgpackdump":["\\t\\tConvert a list of VimL objects to msgpack. Returned value is","\\t\\t|readfile()|-style list. Example: >","\\t\\t\\tcall writefile(msgpackdump([{}]), \'fname.mpack\', \'b\')","<\\t\\tThis will write the single 0x80 byte to `fname.mpack` file","\\t\\t(dictionary with zero items is represented by 0x80 byte in","\\t\\tmessagepack).","","\\t\\tLimitations:\\t\\t\\t\\t*E5004* *E5005*","\\t\\t1. |Funcref|s cannot be dumped.","\\t\\t2. Containers that reference themselves cannot be dumped.","\\t\\t3. Dictionary keys are always dumped as STR strings.","\\t\\t4. Other strings are always dumped as BIN strings.","\\t\\t5. Points 3. and 4. do not apply to |msgpack-special-dict|s."],"msgpackparse":["\\t\\tConvert a |readfile()|-style list to a list of VimL objects.","\\t\\tExample: >","\\t\\t\\tlet fname = expand(\'~/.config/nvim/shada/main.shada\')","\\t\\t\\tlet mpack = readfile(fname, \'b\')","\\t\\t\\tlet shada_objects = msgpackparse(mpack)","<\\t\\tThis will read ~/.config/nvim/shada/main.shada file to","\\t\\t`shada_objects` list.","","\\t\\tLimitations:","\\t\\t1. Mapping ordering is not preserved unless messagepack","\\t\\t mapping is dumped using generic mapping","\\t\\t (|msgpack-special-map|).","\\t\\t2. Since the parser aims to preserve all data untouched","\\t\\t (except for 1.) some strings are parsed to","\\t\\t |msgpack-special-dict| format which is not convenient to","\\t\\t use.","\\t\\t\\t\\t\\t\\t\\t*msgpack-special-dict*","\\t\\tSome messagepack strings may be parsed to special","\\t\\tdictionaries. Special dictionaries are dictionaries which","","\\t\\t1. Contain exactly two keys: `_TYPE` and `_VAL`.","\\t\\t2. `_TYPE` key is one of the types found in |v:msgpack_types|","\\t\\t variable.","\\t\\t3. Value for `_VAL` has the following format (Key column","\\t\\t contains name of the key from |v:msgpack_types|):","","\\t\\tKey\\tValue ~","\\t\\tnil\\tZero, ignored when dumping. Not returned by","\\t\\t\\t|msgpackparse()| since |v:null| was introduced.","\\t\\tboolean\\tOne or zero. When dumping it is only checked that","\\t\\t\\tvalue is a |Number|. Not returned by |msgpackparse()|","\\t\\t\\tsince |v:true| and |v:false| were introduced.","\\t\\tinteger\\t|List| with four numbers: sign (-1 or 1), highest two","\\t\\t\\tbits, number with bits from 62nd to 31st, lowest 31","\\t\\t\\tbits. I.e. to get actual number one will need to use","\\t\\t\\tcode like >","\\t\\t\\t\\t_VAL[0] * ((_VAL[1] << 62)","\\t\\t\\t\\t & (_VAL[2] << 31)","\\t\\t\\t\\t & _VAL[3])","<\\t\\t\\tSpecial dictionary with this type will appear in","\\t\\t\\t|msgpackparse()| output under one of the following","\\t\\t\\tcircumstances:","\\t\\t\\t1. |Number| is 32-bit and value is either above","\\t\\t\\t INT32_MAX or below INT32_MIN.","\\t\\t\\t2. |Number| is 64-bit and value is above INT64_MAX. It","\\t\\t\\t cannot possibly be below INT64_MIN because msgpack","\\t\\t\\t C parser does not support such values.","\\t\\tfloat\\t|Float|. This value cannot possibly appear in","\\t\\t\\t|msgpackparse()| output.","\\t\\tstring\\t|readfile()|-style list of strings. This value will","\\t\\t\\tappear in |msgpackparse()| output if string contains","\\t\\t\\tzero byte or if string is a mapping key and mapping is","\\t\\t\\tbeing represented as special dictionary for other","\\t\\t\\treasons.","\\t\\tbinary\\t|readfile()|-style list of strings. This value will","\\t\\t\\tappear in |msgpackparse()| output if binary string","\\t\\t\\tcontains zero byte.","\\t\\tarray\\t|List|. This value cannot appear in |msgpackparse()|","\\t\\t\\toutput.","\\t\\t\\t\\t\\t\\t\\t*msgpack-special-map*","\\t\\tmap\\t|List| of |List|s with two items (key and value) each.","\\t\\t\\tThis value will appear in |msgpackparse()| output if","\\t\\t\\tparsed mapping contains one of the following keys:","\\t\\t\\t1. Any key that is not a string (including keys which","\\t\\t\\t are binary strings).","\\t\\t\\t2. String with NUL byte inside.","\\t\\t\\t3. Duplicate key.","\\t\\t\\t4. Empty key.","\\t\\text\\t|List| with two values: first is a signed integer","\\t\\t\\trepresenting extension type. Second is","\\t\\t\\t|readfile()|-style list of strings."],"nextnonblank":["\\t\\tReturn the line number of the first line at or below {lnum}","\\t\\tthat is not blank. Example: >","\\t\\t\\tif getline(nextnonblank(1)) =~ \\"Java\\"","<\\t\\tWhen {lnum} is invalid or there is no non-blank line at or","\\t\\tbelow it, zero is returned.","\\t\\tSee also |prevnonblank()|."],"nr2char":["\\t\\tReturn a string with a single character, which has the number","\\t\\tvalue {expr}. Examples: >","\\t\\t\\tnr2char(64)\\t\\treturns \\"@\\"","\\t\\t\\tnr2char(32)\\t\\treturns \\" \\"","<\\t\\tExample for \\"utf-8\\": >","\\t\\t\\tnr2char(300)\\t\\treturns I with bow character","<\\t\\tUTF-8 encoding is always used, {utf8} option has no effect,","\\t\\tand exists only for backwards-compatibility.","\\t\\tNote that a NUL character in the file is specified with","\\t\\tnr2char(10), because NULs are represented with newline","\\t\\tcharacters. nr2char(0) is a real NUL and terminates the","\\t\\tstring, thus results in an empty string.","","nvim_...({...})\\t\\t\\t\\t\\t*E5555* *nvim_...()* *eval-api*","\\t\\tCall nvim |api| functions. The type checking of arguments will","\\t\\tbe stricter than for most other builtins. For instance,","\\t\\tif Integer is expected, a |Number| must be passed in, a","\\t\\t|String| will not be autoconverted.","\\t\\tBuffer numbers, as returned by |bufnr()| could be used as","\\t\\tfirst argument to nvim_buf_... functions. All functions","\\t\\texpecting an object (buffer, window or tabpage) can","\\t\\talso take the numerical value 0 to indicate the current","\\t\\t(focused) object."],"or":["\\t\\tBitwise OR on the two arguments. The arguments are converted","\\t\\tto a number. A List, Dict or Float argument causes an error.","\\t\\tExample: >","\\t\\t\\t:let bits = or(bits, 0x80)",""],"pathshorten":["\\t\\tShorten directory names in the path {expr} and return the","\\t\\tresult. The tail, the file name, is kept as-is. The other","\\t\\tcomponents in the path are reduced to single letters. Leading","\\t\\t\'~\' and \'.\' characters are kept. Example: >","\\t\\t\\t:echo pathshorten(\'~/.config/nvim/autoload/file1.vim\')","<\\t\\t\\t~/.c/n/a/file1.vim ~","\\t\\tIt doesn\'t matter if the path exists or not."],"pow":["\\t\\tReturn the power of {x} to the exponent {y} as a |Float|.","\\t\\t{x} and {y} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo pow(3, 3)","<\\t\\t\\t27.0 >","\\t\\t\\t:echo pow(2, 16)","<\\t\\t\\t65536.0 >","\\t\\t\\t:echo pow(32, 0.20)","<\\t\\t\\t2.0"],"prevnonblank":["\\t\\tReturn the line number of the first line at or above {lnum}","\\t\\tthat is not blank. Example: >","\\t\\t\\tlet ind = indent(prevnonblank(v:lnum - 1))","<\\t\\tWhen {lnum} is invalid or there is no non-blank line at or","\\t\\tabove it, zero is returned.","\\t\\tAlso see |nextnonblank()|.",""],"printf":["\\t\\tReturn a String with {fmt}, where \\"%\\" items are replaced by","\\t\\tthe formatted form of their respective arguments. Example: >","\\t\\t\\tprintf(\\"%4d: E%d %.30s\\", lnum, errno, msg)","<\\t\\tMay result in:","\\t\\t\\t\\" 99: E42 asdfasdfasdfasdfasdfasdfasdfas\\" ~","","\\t\\tOften used items are:","\\t\\t %s\\tstring","\\t\\t %6S\\tstring right-aligned in 6 display cells","\\t\\t %6s\\tstring right-aligned in 6 bytes","\\t\\t %.9s\\tstring truncated to 9 bytes","\\t\\t %c\\tsingle byte","\\t\\t %d\\tdecimal number","\\t\\t %5d\\tdecimal number padded with spaces to 5 characters","\\t\\t %b\\tbinary number","\\t\\t %08b\\tbinary number padded with zeros to at least 8 characters","\\t\\t %B\\tbinary number using upper case letters","\\t\\t %x\\thex number","\\t\\t %04x\\thex number padded with zeros to at least 4 characters","\\t\\t %X\\thex number using upper case letters","\\t\\t %o\\toctal number","\\t\\t %f\\tfloating point number as 12.23, inf, -inf or nan","\\t\\t %F\\tfloating point number as 12.23, INF, -INF or NAN","\\t\\t %e\\tfloating point number as 1.23e3, inf, -inf or nan","\\t\\t %E\\tfloating point number as 1.23E3, INF, -INF or NAN","\\t\\t %g\\tfloating point number, as %f or %e depending on value","\\t\\t %G\\tfloating point number, as %F or %E depending on value","\\t\\t %%\\tthe % character itself","\\t\\t %p\\trepresentation of the pointer to the container","","\\t\\tConversion specifications start with \'%\' and end with the","\\t\\tconversion type. All other characters are copied unchanged to","\\t\\tthe result.","","\\t\\tThe \\"%\\" starts a conversion specification. The following","\\t\\targuments appear in sequence:","","\\t\\t\\t% [flags] [field-width] [.precision] type","","\\t\\tflags","\\t\\t\\tZero or more of the following flags:","","\\t\\t #\\t The value should be converted to an \\"alternate","\\t\\t\\t form\\". For c, d, and s conversions, this option","\\t\\t\\t has no effect. For o conversions, the precision","\\t\\t\\t of the number is increased to force the first","\\t\\t\\t character of the output string to a zero (except","\\t\\t\\t if a zero value is printed with an explicit","\\t\\t\\t precision of zero).","\\t\\t\\t For x and X conversions, a non-zero result has","\\t\\t\\t the string \\"0x\\" (or \\"0X\\" for X conversions)","\\t\\t\\t prepended to it.","","\\t\\t 0 (zero) Zero padding. For all conversions the converted","\\t\\t\\t value is padded on the left with zeros rather","\\t\\t\\t than blanks. If a precision is given with a","\\t\\t\\t numeric conversion (d, o, x, and X), the 0 flag","\\t\\t\\t is ignored.","","\\t\\t -\\t A negative field width flag; the converted value","\\t\\t\\t is to be left adjusted on the field boundary.","\\t\\t\\t The converted value is padded on the right with","\\t\\t\\t blanks, rather than on the left with blanks or","\\t\\t\\t zeros. A - overrides a 0 if both are given.","","\\t\\t \' \' (space) A blank should be left before a positive","\\t\\t\\t number produced by a signed conversion (d).","","\\t\\t +\\t A sign must always be placed before a number","\\t\\t\\t produced by a signed conversion. A + overrides","\\t\\t\\t a space if both are used.","","\\t\\tfield-width","\\t\\t\\tAn optional decimal digit string specifying a minimum","\\t\\t\\tfield width. If the converted value has fewer bytes","\\t\\t\\tthan the field width, it will be padded with spaces on","\\t\\t\\tthe left (or right, if the left-adjustment flag has","\\t\\t\\tbeen given) to fill out the field width.","","\\t\\t.precision","\\t\\t\\tAn optional precision, in the form of a period \'.\'","\\t\\t\\tfollowed by an optional digit string. If the digit","\\t\\t\\tstring is omitted, the precision is taken as zero.","\\t\\t\\tThis gives the minimum number of digits to appear for","\\t\\t\\td, o, x, and X conversions, or the maximum number of","\\t\\t\\tbytes to be printed from a string for s conversions.","\\t\\t\\tFor floating point it is the number of digits after","\\t\\t\\tthe decimal point.","","\\t\\ttype","\\t\\t\\tA character that specifies the type of conversion to","\\t\\t\\tbe applied, see below.","","\\t\\tA field width or precision, or both, may be indicated by an","\\t\\tasterisk \'*\' instead of a digit string. In this case, a","\\t\\tNumber argument supplies the field width or precision. A","\\t\\tnegative field width is treated as a left adjustment flag","\\t\\tfollowed by a positive field width; a negative precision is","\\t\\ttreated as though it were missing. Example: >","\\t\\t\\t:echo printf(\\"%d: %.*s\\", nr, width, line)","<\\t\\tThis limits the length of the text used from \\"line\\" to","\\t\\t\\"width\\" bytes.","","\\t\\tThe conversion specifiers and their meanings are:","","\\t\\t\\t\\t*printf-d* *printf-b* *printf-B* *printf-o* *printf-x* *printf-X*","\\t\\tdbBoxX\\tThe Number argument is converted to signed decimal (d),","\\t\\t\\tunsigned binary (b and B), unsigned octal (o), or","\\t\\t\\tunsigned hexadecimal (x and X) notation. The letters","\\t\\t\\t\\"abcdef\\" are used for x conversions; the letters","\\t\\t\\t\\"ABCDEF\\" are used for X conversions. The precision, if","\\t\\t\\tany, gives the minimum number of digits that must","\\t\\t\\tappear; if the converted value requires fewer digits, it","\\t\\t\\tis padded on the left with zeros. In no case does a","\\t\\t\\tnon-existent or small field width cause truncation of a","\\t\\t\\tnumeric field; if the result of a conversion is wider","\\t\\t\\tthan the field width, the field is expanded to contain","\\t\\t\\tthe conversion result.","\\t\\t\\tThe \'h\' modifier indicates the argument is 16 bits.","\\t\\t\\tThe \'l\' modifier indicates the argument is 32 bits.","\\t\\t\\tThe \'L\' modifier indicates the argument is 64 bits.","\\t\\t\\tGenerally, these modifiers are not useful. They are","\\t\\t\\tignored when type is known from the argument.","","\\t\\ti\\talias for d","\\t\\tD\\talias for ld","\\t\\tU\\talias for lu","\\t\\tO\\talias for lo","","\\t\\t\\t\\t\\t\\t\\t*printf-c*","\\t\\tc\\tThe Number argument is converted to a byte, and the","\\t\\t\\tresulting character is written.","","\\t\\t\\t\\t\\t\\t\\t*printf-s*","\\t\\ts\\tThe text of the String argument is used. If a","\\t\\t\\tprecision is specified, no more bytes than the number","\\t\\t\\tspecified are used.","\\t\\t\\tIf the argument is not a String type, it is","\\t\\t\\tautomatically converted to text with the same format","\\t\\t\\tas \\":echo\\".","\\t\\t\\t\\t\\t\\t\\t*printf-S*","\\t\\tS\\tThe text of the String argument is used. If a","\\t\\t\\tprecision is specified, no more display cells than the","\\t\\t\\tnumber specified are used.","","\\t\\t\\t\\t\\t\\t\\t*printf-f* *E807*","\\t\\tf F\\tThe Float argument is converted into a string of the","\\t\\t\\tform 123.456. The precision specifies the number of","\\t\\t\\tdigits after the decimal point. When the precision is","\\t\\t\\tzero the decimal point is omitted. When the precision","\\t\\t\\tis not specified 6 is used. A really big number","\\t\\t\\t(out of range or dividing by zero) results in \\"inf\\"","\\t\\t\\t or \\"-inf\\" with %f (INF or -INF with %F).","\\t\\t\\t \\"0.0 / 0.0\\" results in \\"nan\\" with %f (NAN with %F).","\\t\\t\\tExample: >","\\t\\t\\t\\techo printf(\\"%.2f\\", 12.115)","<\\t\\t\\t\\t12.12","\\t\\t\\tNote that roundoff depends on the system libraries.","\\t\\t\\tUse |round()| when in doubt.","","\\t\\t\\t\\t\\t\\t\\t*printf-e* *printf-E*","\\t\\te E\\tThe Float argument is converted into a string of the","\\t\\t\\tform 1.234e+03 or 1.234E+03 when using \'E\'. The","\\t\\t\\tprecision specifies the number of digits after the","\\t\\t\\tdecimal point, like with \'f\'.","","\\t\\t\\t\\t\\t\\t\\t*printf-g* *printf-G*","\\t\\tg G\\tThe Float argument is converted like with \'f\' if the","\\t\\t\\tvalue is between 0.001 (inclusive) and 10000000.0","\\t\\t\\t(exclusive). Otherwise \'e\' is used for \'g\' and \'E\'","\\t\\t\\tfor \'G\'. When no precision is specified superfluous","\\t\\t\\tzeroes and \'+\' signs are removed, except for the zero","\\t\\t\\timmediately after the decimal point. Thus 10000000.0","\\t\\t\\tresults in 1.0e7.","","\\t\\t\\t\\t\\t\\t\\t*printf-%*","\\t\\t%\\tA \'%\' is written. No argument is converted. The","\\t\\t\\tcomplete conversion specification is \\"%%\\".","","\\t\\tWhen a Number argument is expected a String argument is also","\\t\\taccepted and automatically converted.","\\t\\tWhen a Float or String argument is expected a Number argument","\\t\\tis also accepted and automatically converted.","\\t\\tAny other argument type results in an error message.","","\\t\\t\\t\\t\\t\\t\\t*E766* *E767*","\\t\\tThe number of {exprN} arguments must exactly match the number","\\t\\tof \\"%\\" items. If there are not sufficient or too many","\\t\\targuments an error is given. Up to 18 arguments can be used."],"prompt_setcallback":["\\t\\tSet prompt callback for buffer {buf} to {expr}. When {expr}","\\t\\tis an empty string the callback is removed. This has only","\\t\\teffect if {buf} has \'buftype\' set to \\"prompt\\".","","\\t\\tThe callback is invoked when pressing Enter. The current","\\t\\tbuffer will always be the prompt buffer. A new line for a","\\t\\tprompt is added before invoking the callback, thus the prompt","\\t\\tfor which the callback was invoked will be in the last but one","\\t\\tline.","\\t\\tIf the callback wants to add text to the buffer, it must","\\t\\tinsert it above the last line, since that is where the current","\\t\\tprompt is. This can also be done asynchronously.","\\t\\tThe callback is invoked with one argument, which is the text","\\t\\tthat was entered at the prompt. This can be an empty string","\\t\\tif the user only typed Enter.","\\t\\tExample: >","\\t\\t call prompt_setcallback(bufnr(\'\'), function(\'s:TextEntered\'))","\\t\\t func s:TextEntered(text)","\\t\\t if a:text == \'exit\' || a:text == \'quit\'","\\t\\t stopinsert","\\t\\t close","\\t\\t else","\\t\\t call append(line(\'$\') - 1, \'Entered: \\"\' . a:text . \'\\"\')","\\t\\t \\" Reset \'modified\' to allow the buffer to be closed.","\\t\\t set nomodified","\\t\\t endif","\\t\\t endfunc"],"prompt_setinterrupt":["\\t\\tSet a callback for buffer {buf} to {expr}. When {expr} is an","\\t\\tempty string the callback is removed. This has only effect if","\\t\\t{buf} has \'buftype\' set to \\"prompt\\".","","\\t\\tThis callback will be invoked when pressing CTRL-C in Insert","\\t\\tmode. Without setting a callback Vim will exit Insert mode,","\\t\\tas in any buffer."],"prompt_setprompt":["\\t\\tSet prompt for buffer {buf} to {text}. You most likely want","\\t\\t{text} to end in a space.","\\t\\tThe result is only visible if {buf} has \'buftype\' set to","\\t\\t\\"prompt\\". Example: >","\\t\\t\\tcall prompt_setprompt(bufnr(\'\'), \'command: \')"],"pum_getpos":[" \\t\\tIf the popup menu (see |ins-completion-menu|) is not visible,"," \\t\\treturns an empty |Dictionary|, otherwise, returns a"," \\t\\t|Dictionary| with the following keys:"," \\t\\t\\theight\\t\\tnr of items visible"," \\t\\t\\twidth\\t\\tscreen cells"," \\t\\t\\trow\\t\\ttop screen row (0 first row)"," \\t\\t\\tcol\\t\\tleftmost screen column (0 first col)"," \\t\\t\\tsize\\t\\ttotal nr of items"," \\t\\t\\tscrollbar\\t|TRUE| if visible",""," \\t\\tThe values are the same as in |v:event| during |CompleteChanged|."],"pumvisible":["\\t\\tReturns non-zero when the popup menu is visible, zero","\\t\\totherwise. See |ins-completion-menu|.","\\t\\tThis can be used to avoid some things that would remove the","\\t\\tpopup menu."],"py3eval":["\\t\\tEvaluate Python expression {expr} and return its result","\\t\\tconverted to Vim data structures.","\\t\\tNumbers and strings are returned as they are (strings are","\\t\\tcopied though, Unicode strings are additionally converted to","\\t\\tUTF-8).","\\t\\tLists are represented as Vim |List| type.","\\t\\tDictionaries are represented as Vim |Dictionary| type with","\\t\\tkeys converted to strings.",""],"pyeval":["\\t\\tEvaluate Python expression {expr} and return its result","\\t\\tconverted to Vim data structures.","\\t\\tNumbers and strings are returned as they are (strings are","\\t\\tcopied though).","\\t\\tLists are represented as Vim |List| type.","\\t\\tDictionaries are represented as Vim |Dictionary| type,","\\t\\tnon-string keys result in error."],"pyxeval":["\\t\\tEvaluate Python expression {expr} and return its result","\\t\\tconverted to Vim data structures.","\\t\\tUses Python 2 or 3, see |python_x| and \'pyxversion\'.","\\t\\tSee also: |pyeval()|, |py3eval()|",""],"range":["\\t\\tReturns a |List| with Numbers:","\\t\\t- If only {expr} is specified: [0, 1, ..., {expr} - 1]","\\t\\t- If {max} is specified: [{expr}, {expr} + 1, ..., {max}]","\\t\\t- If {stride} is specified: [{expr}, {expr} + {stride}, ...,","\\t\\t {max}] (increasing {expr} with {stride} each time, not","\\t\\t producing a value past {max}).","\\t\\tWhen the maximum is one before the start the result is an","\\t\\tempty list. When the maximum is more than one before the","\\t\\tstart this is an error.","\\t\\tExamples: >","\\t\\t\\trange(4)\\t\\t\\" [0, 1, 2, 3]","\\t\\t\\trange(2, 4)\\t\\t\\" [2, 3, 4]","\\t\\t\\trange(2, 9, 3)\\t\\t\\" [2, 5, 8]","\\t\\t\\trange(2, -2, -1)\\t\\" [2, 1, 0, -1, -2]","\\t\\t\\trange(0)\\t\\t\\" []","\\t\\t\\trange(2, 0)\\t\\t\\" error!","<"],"readfile":["\\t\\tRead file {fname} and return a |List|, each line of the file","\\t\\tas an item. Lines are broken at NL characters. Macintosh","\\t\\tfiles separated with CR will result in a single long line","\\t\\t(unless a NL appears somewhere).","\\t\\tAll NUL characters are replaced with a NL character.","\\t\\tWhen {binary} contains \\"b\\" binary mode is used:","\\t\\t- When the last line ends in a NL an extra empty list item is","\\t\\t added.","\\t\\t- No CR characters are removed.","\\t\\tOtherwise:","\\t\\t- CR characters that appear before a NL are removed.","\\t\\t- Whether the last line ends in a NL or not does not matter.","\\t\\t- Any UTF-8 byte order mark is removed from the text.","\\t\\tWhen {max} is given this specifies the maximum number of lines","\\t\\tto be read. Useful if you only want to check the first ten","\\t\\tlines of a file: >","\\t\\t\\t:for line in readfile(fname, \'\', 10)","\\t\\t\\t: if line =~ \'Date\' | echo line | endif","\\t\\t\\t:endfor","<\\t\\tWhen {max} is negative -{max} lines from the end of the file","\\t\\tare returned, or as many as there are.","\\t\\tWhen {max} is zero the result is an empty list.","\\t\\tNote that without {max} the whole file is read into memory.","\\t\\tAlso note that there is no recognition of encoding. Read a","\\t\\tfile into a buffer if you need to.","\\t\\tWhen the file can\'t be opened an error message is given and","\\t\\tthe result is an empty list.","\\t\\tAlso see |writefile()|.",""],"readdir":["\\t\\tReturn a list with file and directory names in {directory}.","\\t\\tYou can also use |glob()| if you don\'t need to do complicated","\\t\\tthings, such as limiting the number of matches.","","\\t\\tWhen {expr} is omitted all entries are included.","\\t\\tWhen {expr} is given, it is evaluated to check what to do:","\\t\\t\\tIf {expr} results in -1 then no further entries will","\\t\\t\\tbe handled."],"reg_executing":["\\t\\tReturns the single letter name of the register being executed.","\\t\\tReturns an empty string when no register is being executed.","\\t\\tSee |@|."],"reg_recording":["\\t\\tReturns the single letter name of the register being recorded.","\\t\\tReturns an empty string string when not recording. See |q|."],"reltime":["\\t\\tReturn an item that represents a time value. The format of","\\t\\tthe item depends on the system. It can be passed to","\\t\\t|reltimestr()| to convert it to a string or |reltimefloat()|","\\t\\tto convert to a float.","","\\t\\tWithout an argument it returns the current \\"relative time\\", an","\\t\\timplementation-defined value meaningful only when used as an","\\t\\targument to |reltime()|, |reltimestr()| and |reltimefloat()|.","","\\t\\tWith one argument it returns the time passed since the time","\\t\\tspecified in the argument.","\\t\\tWith two arguments it returns the time passed between {start}","\\t\\tand {end}.","\\t\\tThe {start} and {end} arguments must be values returned by","\\t\\treltime().","","\\t\\tNote: |localtime()| returns the current (non-relative) time."],"reltimefloat":["\\t\\tReturn a Float that represents the time value of {time}.","\\t\\tUnit of time is seconds.","\\t\\tExample:","\\t\\t\\tlet start = reltime()","\\t\\t\\tcall MyFunction()","\\t\\t\\tlet seconds = reltimefloat(reltime(start))","\\t\\tSee the note of reltimestr() about overhead."," \\t\\tAlso see |profiling|."],"reltimestr":["\\t\\tReturn a String that represents the time value of {time}.","\\t\\tThis is the number of seconds, a dot and the number of","\\t\\tmicroseconds. Example: >","\\t\\t\\tlet start = reltime()","\\t\\t\\tcall MyFunction()","\\t\\t\\techo reltimestr(reltime(start))","<\\t\\tNote that overhead for the commands will be added to the time.","\\t\\tLeading spaces are used to make the string align nicely. You","\\t\\tcan use split() to remove it. >","\\t\\t\\techo split(reltimestr(reltime(start)))[0]","<\\t\\tAlso see |profiling|.",""],"remote_expr":["\\t\\tSend the {string} to {server}. The string is sent as an","\\t\\texpression and the result is returned after evaluation.","\\t\\tThe result must be a String or a |List|. A |List| is turned","\\t\\tinto a String by joining the items with a line break in","\\t\\tbetween (not at the end), like with join(expr, \\"\\\\n\\").","\\t\\tIf {idvar} is present and not empty, it is taken as the name","\\t\\tof a variable and a {serverid} for later use with","\\t\\t|remote_read()| is stored there.","\\t\\tIf {timeout} is given the read times out after this many","\\t\\tseconds. Otherwise a timeout of 600 seconds is used.","\\t\\tSee also |clientserver| |RemoteReply|.","\\t\\tThis function is not available in the |sandbox|.","\\t\\tNote: Any errors will cause a local error message to be issued","\\t\\tand the result will be the empty string.","","\\t\\tVariables will be evaluated in the global namespace,","\\t\\tindependent of a function currently being active. Except","\\t\\twhen in debug mode, then local function variables and","\\t\\targuments can be evaluated.","","\\t\\tExamples: >","\\t\\t\\t:echo remote_expr(\\"gvim\\", \\"2+2\\")","\\t\\t\\t:echo remote_expr(\\"gvim1\\", \\"b:current_syntax\\")","<"],"remote_foreground":["\\t\\tMove the Vim server with the name {server} to the foreground.","\\t\\tThis works like: >","\\t\\t\\tremote_expr({server}, \\"foreground()\\")","<\\t\\tExcept that on Win32 systems the client does the work, to work","\\t\\taround the problem that the OS doesn\'t always allow the server","\\t\\tto bring itself to the foreground.","\\t\\tNote: This does not restore the window if it was minimized,","\\t\\tlike foreground() does.","\\t\\tThis function is not available in the |sandbox|.","\\t\\t{only in the Win32 GUI and the Win32 console version}",""],"remote_peek":["\\t\\tReturns a positive number if there are available strings","\\t\\tfrom {serverid}. Copies any reply string into the variable","\\t\\t{retvar} if specified. {retvar} must be a string with the","\\t\\tname of a variable.","\\t\\tReturns zero if none are available.","\\t\\tReturns -1 if something is wrong.","\\t\\tSee also |clientserver|.","\\t\\tThis function is not available in the |sandbox|.","\\t\\tExamples: >","\\t\\t\\t:let repl = \\"\\"","\\t\\t\\t:echo \\"PEEK: \\".remote_peek(id, \\"repl\\").\\": \\".repl"],"remote_read":["\\t\\tReturn the oldest available reply from {serverid} and consume","\\t\\tit. Unless a {timeout} in seconds is given, it blocks until a","\\t\\treply is available.","\\t\\tSee also |clientserver|.","\\t\\tThis function is not available in the |sandbox|.","\\t\\tExample: >","\\t\\t\\t:echo remote_read(id)","<"],"remote_send":["\\t\\tSend the {string} to {server}. The string is sent as input","\\t\\tkeys and the function returns immediately. At the Vim server","\\t\\tthe keys are not mapped |:map|.","\\t\\tIf {idvar} is present, it is taken as the name of a variable","\\t\\tand a {serverid} for later use with remote_read() is stored","\\t\\tthere.","\\t\\tSee also |clientserver| |RemoteReply|.","\\t\\tThis function is not available in the |sandbox|.","","\\t\\tNote: Any errors will be reported in the server and may mess","\\t\\tup the display.","\\t\\tExamples: >","\\t\\t:echo remote_send(\\"gvim\\", \\":DropAndReply \\".file, \\"serverid\\").","\\t\\t \\\\ remote_read(serverid)","","\\t\\t:autocmd NONE RemoteReply *","\\t\\t \\\\ echo remote_read(expand(\\"<amatch>\\"))","\\t\\t:echo remote_send(\\"gvim\\", \\":sleep 10 | echo \\".","\\t\\t \\\\ \'server2client(expand(\\"<client>\\"), \\"HELLO\\")<CR>\')","<"],"remote_startserver":["\\t\\tBecome the server {name}. This fails if already running as a","\\t\\tserver, when |v:servername| is not empty."],"remove":["\\t\\tWithout {end}: Remove the item at {idx} from |List| {list} and","\\t\\treturn the item.","\\t\\tWith {end}: Remove items from {idx} to {end} (inclusive) and","\\t\\treturn a List with these items. When {idx} points to the same","\\t\\titem as {end} a list with one item is returned. When {end}","\\t\\tpoints to an item before {idx} this is an error.","\\t\\tSee |list-index| for possible values of {idx} and {end}.","\\t\\tExample: >","\\t\\t\\t:echo \\"last item: \\" . remove(mylist, -1)","\\t\\tRemove the entry from {dict} with key {key} and return it.","\\t\\tExample: >","\\t\\t\\t:echo \\"removed \\" . remove(dict, \\"one\\")","<\\t\\tIf there is no {key} in {dict} this is an error.","","\\t\\tUse |delete()| to remove a file."],"rename":["\\t\\tRename the file by the name {from} to the name {to}. This","\\t\\tshould also work to move files across file systems. The","\\t\\tresult is a Number, which is 0 if the file was renamed","\\t\\tsuccessfully, and non-zero when the renaming failed.","\\t\\tNOTE: If {to} exists it is overwritten without warning.","\\t\\tThis function is not available in the |sandbox|."],"repeat":["\\t\\tRepeat {expr} {count} times and return the concatenated","\\t\\tresult. Example: >","\\t\\t\\t:let separator = repeat(\'-\', 80)","<\\t\\tWhen {count} is zero or negative the result is empty.","\\t\\tWhen {expr} is a |List| the result is {expr} concatenated","\\t\\t{count} times. Example: >","\\t\\t\\t:let longlist = repeat([\'a\', \'b\'], 3)","<\\t\\tResults in [\'a\', \'b\', \'a\', \'b\', \'a\', \'b\'].",""],"resolve":["\\t\\tOn MS-Windows, when {filename} is a shortcut (a .lnk file),","\\t\\treturns the path the shortcut points to in a simplified form.","\\t\\tOn Unix, repeat resolving symbolic links in all path","\\t\\tcomponents of {filename} and return the simplified result.","\\t\\tTo cope with link cycles, resolving of symbolic links is","\\t\\tstopped after 100 iterations.","\\t\\tOn other systems, return the simplified {filename}.","\\t\\tThe simplification step is done as by |simplify()|.","\\t\\tresolve() keeps a leading path component specifying the","\\t\\tcurrent directory (provided the result is still a relative","\\t\\tpath name) and also keeps a trailing path separator.",""],"reverse":["\\t\\t{list}.","\\t\\tIf you want a list to remain unmodified make a copy first: >","\\t\\t\\t:let revlist = reverse(copy(mylist))"],"round":["\\t\\tRound off {expr} to the nearest integral value and return it","\\t\\tas a |Float|. If {expr} lies halfway between two integral","\\t\\tvalues, then use the larger one (away from zero).","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\techo round(0.456)","<\\t\\t\\t0.0 >","\\t\\t\\techo round(4.5)","<\\t\\t\\t5.0 >","\\t\\t\\techo round(-4.5)","<\\t\\t\\t-5.0"],"rpcnotify":["\\t\\tSends {event} to {channel} via |RPC| and returns immediately.","\\t\\tIf {channel} is 0, the event is broadcast to all channels.","\\t\\tExample: >","\\t\\t\\t:au VimLeave call rpcnotify(0, \\"leaving\\")"],"rpcrequest":["\\t\\tSends a request to {channel} to invoke {method} via","\\t\\t|RPC| and blocks until a response is received.","\\t\\tExample: >","\\t\\t\\t:let result = rpcrequest(rpc_chan, \\"func\\", 1, 2, 3)"],"rpcstart":["\\t\\tDeprecated. Replace >","\\t\\t\\t:let id = rpcstart(\'prog\', [\'arg1\', \'arg2\'])","<\\t\\twith >","\\t\\t\\t:let id = jobstart([\'prog\', \'arg1\', \'arg2\'], {\'rpc\': v:true})"],"screenattr":["\\t\\tLike |screenchar()|, but return the attribute. This is a rather","\\t\\tarbitrary number that can only be used to compare to the","\\t\\tattribute at other positions."],"screenchar":["\\t\\tThe result is a Number, which is the character at position","\\t\\t[row, col] on the screen. This works for every possible","\\t\\tscreen position, also status lines, window separators and the","\\t\\tcommand line. The top left position is row one, column one","\\t\\tThe character excludes composing characters. For double-byte","\\t\\tencodings it may only be the first byte.","\\t\\tThis is mainly to be used for testing.","\\t\\tReturns -1 when row or col is out of range."],"screencol":["\\t\\tThe result is a Number, which is the current screen column of","\\t\\tthe cursor. The leftmost column has number 1.","\\t\\tThis function is mainly used for testing.","","\\t\\tNote: Always returns the current screen column, thus if used","\\t\\tin a command (e.g. \\":echo screencol()\\") it will return the","\\t\\tcolumn inside the command line, which is 1 when the command is","\\t\\texecuted. To get the cursor position in the file use one of","\\t\\tthe following mappings: >","\\t\\t\\tnnoremap <expr> GG \\":echom \\".screencol().\\"\\\\n\\"","\\t\\t\\tnnoremap <silent> GG :echom screencol()<CR>","\\t\\t\\tnoremap GG <Cmd>echom screencol()<Cr>"],"screenpos":["\\t\\tThe result is a Dict with the screen position of the text","\\t\\tcharacter in window {winid} at buffer line {lnum} and column","\\t\\t{col}. {col} is a one-based byte index.","\\t\\tThe Dict has these members:","\\t\\t\\trow\\tscreen row","\\t\\t\\tcol\\tfirst screen column","\\t\\t\\tendcol\\tlast screen column","\\t\\t\\tcurscol\\tcursor screen column","\\t\\tIf the specified position is not visible, all values are zero.","\\t\\tThe \\"endcol\\" value differs from \\"col\\" when the character","\\t\\toccupies more than one screen cell. E.g. for a Tab \\"col\\" can","\\t\\tbe 1 and \\"endcol\\" can be 8.","\\t\\tThe \\"curscol\\" value is where the cursor would be placed. For","\\t\\ta Tab it would be the same as \\"endcol\\", while for a double","\\t\\twidth character it would be the same as \\"col\\"."],"screenrow":["\\t\\tThe result is a Number, which is the current screen row of the","\\t\\tcursor. The top line has number one.","\\t\\tThis function is mainly used for testing.","\\t\\tAlternatively you can use |winline()|.","","\\t\\tNote: Same restrictions as with |screencol()|."],"search":["\\t\\tSearch for regexp pattern {pattern}. The search starts at the","\\t\\tcursor position (you can use |cursor()| to set it).","","\\t\\tWhen a match has been found its line number is returned.","\\t\\tIf there is no match a 0 is returned and the cursor doesn\'t","\\t\\tmove. No error message is given.","","\\t\\t{flags} is a String, which can contain these character flags:","\\t\\t\'b\'\\tsearch Backward instead of forward","\\t\\t\'c\'\\taccept a match at the Cursor position","\\t\\t\'e\'\\tmove to the End of the match","\\t\\t\'n\'\\tdo Not move the cursor","\\t\\t\'p\'\\treturn number of matching sub-Pattern (see below)","\\t\\t\'s\'\\tSet the \' mark at the previous location of the cursor","\\t\\t\'w\'\\tWrap around the end of the file","\\t\\t\'W\'\\tdon\'t Wrap around the end of the file","\\t\\t\'z\'\\tstart searching at the cursor column instead of Zero","\\t\\tIf neither \'w\' or \'W\' is given, the \'wrapscan\' option applies.","","\\t\\tIf the \'s\' flag is supplied, the \' mark is set, only if the","\\t\\tcursor is moved. The \'s\' flag cannot be combined with the \'n\'","\\t\\tflag.","","\\t\\t\'ignorecase\', \'smartcase\' and \'magic\' are used.","","\\t\\tWhen the \'z\' flag is not given, searching always starts in","\\t\\tcolumn zero and then matches before the cursor are skipped.","\\t\\tWhen the \'c\' flag is present in \'cpo\' the next search starts","\\t\\tafter the match. Without the \'c\' flag the next search starts","\\t\\tone column further.","","\\t\\tWhen the {stopline} argument is given then the search stops","\\t\\tafter searching this line. This is useful to restrict the","\\t\\tsearch to a range of lines. Examples: >","\\t\\t\\tlet match = search(\'(\', \'b\', line(\\"w0\\"))","\\t\\t\\tlet end = search(\'END\', \'\', line(\\"w$\\"))","<\\t\\tWhen {stopline} is used and it is not zero this also implies","\\t\\tthat the search does not wrap around the end of the file.","\\t\\tA zero value is equal to not giving the argument.","","\\t\\tWhen the {timeout} argument is given the search stops when","\\t\\tmore than this many milliseconds have passed. Thus when","\\t\\t{timeout} is 500 the search stops after half a second.","\\t\\tThe value must not be negative. A zero value is like not","\\t\\tgiving the argument.","","\\t\\t\\t\\t\\t\\t\\t*search()-sub-match*","\\t\\tWith the \'p\' flag the returned value is one more than the","\\t\\tfirst sub-match in \\\\(\\\\). One if none of them matched but the","\\t\\twhole pattern did match.","\\t\\tTo get the column number too use |searchpos()|.","","\\t\\tThe cursor will be positioned at the match, unless the \'n\'","\\t\\tflag is used.","","\\t\\tExample (goes over all files in the argument list): >","\\t\\t :let n = 1","\\t\\t :while n <= argc()\\t \\" loop over all files in arglist","\\t\\t : exe \\"argument \\" . n","\\t\\t : \\" start at the last char in the file and wrap for the","\\t\\t : \\" first search to find match at start of file","\\t\\t : normal G$","\\t\\t : let flags = \\"w\\"","\\t\\t : while search(\\"foo\\", flags) > 0","\\t\\t :\\t s/foo/bar/g","\\t\\t :\\t let flags = \\"W\\"","\\t\\t : endwhile","\\t\\t : update\\t\\t \\" write the file if modified","\\t\\t : let n = n + 1","\\t\\t :endwhile","<","\\t\\tExample for using some flags: >","\\t\\t :echo search(\'\\\\<if\\\\|\\\\(else\\\\)\\\\|\\\\(endif\\\\)\', \'ncpe\')","<\\t\\tThis will search for the keywords \\"if\\", \\"else\\", and \\"endif\\"","\\t\\tunder or after the cursor. Because of the \'p\' flag, it","\\t\\treturns 1, 2, or 3 depending on which keyword is found, or 0","\\t\\tif the search fails. With the cursor on the first word of the","\\t\\tline:","\\t\\t if (foo == 0) | let foo = foo + 1 | endif ~","\\t\\tthe function returns 1. Without the \'c\' flag, the function","\\t\\tfinds the \\"endif\\" and returns 3. The same thing happens","\\t\\twithout the \'e\' flag if the cursor is on the \\"f\\" of \\"if\\".","\\t\\tThe \'n\' flag tells the function not to move the cursor.",""],"searchdecl":["\\t\\tSearch for the declaration of {name}.","","\\t\\tWith a non-zero {global} argument it works like |gD|, find","\\t\\tfirst match in the file. Otherwise it works like |gd|, find","\\t\\tfirst match in the function.","","\\t\\tWith a non-zero {thisblock} argument matches in a {} block","\\t\\tthat ends before the cursor position are ignored. Avoids","\\t\\tfinding variable declarations only valid in another scope.","","\\t\\tMoves the cursor to the found match.","\\t\\tReturns zero for success, non-zero for failure.","\\t\\tExample: >","\\t\\t\\tif searchdecl(\'myvar\') == 0","\\t\\t\\t echo getline(\'.\')","\\t\\t\\tendif","<","\\t\\t\\t\\t\\t\\t\\t*searchpair()*","searchpair({start}, {middle}, {end} [, {flags} [, {skip}","\\t\\t\\t\\t[, {stopline} [, {timeout}]]]])","\\t\\tSearch for the match of a nested start-end pair. This can be","\\t\\tused to find the \\"endif\\" that matches an \\"if\\", while other","\\t\\tif/endif pairs in between are ignored.","\\t\\tThe search starts at the cursor. The default is to search","\\t\\tforward, include \'b\' in {flags} to search backward.","\\t\\tIf a match is found, the cursor is positioned at it and the","\\t\\tline number is returned. If no match is found 0 or -1 is","\\t\\treturned and the cursor doesn\'t move. No error message is","\\t\\tgiven.","","\\t\\t{start}, {middle} and {end} are patterns, see |pattern|. They","\\t\\tmust not contain \\\\( \\\\) pairs. Use of \\\\%( \\\\) is allowed. When","\\t\\t{middle} is not empty, it is found when searching from either","\\t\\tdirection, but only when not in a nested start-end pair. A","\\t\\ttypical use is: >","\\t\\t\\tsearchpair(\'\\\\<if\\\\>\', \'\\\\<else\\\\>\', \'\\\\<endif\\\\>\')","<\\t\\tBy leaving {middle} empty the \\"else\\" is skipped.","","\\t\\t{flags} \'b\', \'c\', \'n\', \'s\', \'w\' and \'W\' are used like with","\\t\\t|search()|. Additionally:","\\t\\t\'r\'\\tRepeat until no more matches found; will find the","\\t\\t\\touter pair. Implies the \'W\' flag.","\\t\\t\'m\'\\tReturn number of matches instead of line number with","\\t\\t\\tthe match; will be > 1 when \'r\' is used.","\\t\\tNote: it\'s nearly always a good idea to use the \'W\' flag, to","\\t\\tavoid wrapping around the end of the file.","","\\t\\tWhen a match for {start}, {middle} or {end} is found, the","\\t\\t{skip} expression is evaluated with the cursor positioned on","\\t\\tthe start of the match. It should return non-zero if this","\\t\\tmatch is to be skipped. E.g., because it is inside a comment","\\t\\tor a string.","\\t\\tWhen {skip} is omitted or empty, every match is accepted.","\\t\\tWhen evaluating {skip} causes an error the search is aborted","\\t\\tand -1 returned."," \\t\\t{skip} can be a string, a lambda, a funcref or a partial.","\\t\\tAnything else makes the function fail.","","\\t\\tFor {stopline} and {timeout} see |search()|.","","\\t\\tThe value of \'ignorecase\' is used. \'magic\' is ignored, the","\\t\\tpatterns are used like it\'s on.","","\\t\\tThe search starts exactly at the cursor. A match with","\\t\\t{start}, {middle} or {end} at the next character, in the","\\t\\tdirection of searching, is the first one found. Example: >","\\t\\t\\tif 1","\\t\\t\\t if 2","\\t\\t\\t endif 2","\\t\\t\\tendif 1","<\\t\\tWhen starting at the \\"if 2\\", with the cursor on the \\"i\\", and","\\t\\tsearching forwards, the \\"endif 2\\" is found. When starting on","\\t\\tthe character just before the \\"if 2\\", the \\"endif 1\\" will be","\\t\\tfound. That\'s because the \\"if 2\\" will be found first, and","\\t\\tthen this is considered to be a nested if/endif from \\"if 2\\" to","\\t\\t\\"endif 2\\".","\\t\\tWhen searching backwards and {end} is more than one character,","\\t\\tit may be useful to put \\"\\\\zs\\" at the end of the pattern, so","\\t\\tthat when the cursor is inside a match with the end it finds","\\t\\tthe matching start.","","\\t\\tExample, to find the \\"endif\\" command in a Vim script: >","","\\t:echo searchpair(\'\\\\<if\\\\>\', \'\\\\<el\\\\%[seif]\\\\>\', \'\\\\<en\\\\%[dif]\\\\>\', \'W\',","\\t\\t\\t\\\\ \'getline(\\".\\") =~ \\"^\\\\\\\\s*\\\\\\"\\"\')","","<\\t\\tThe cursor must be at or after the \\"if\\" for which a match is","\\t\\tto be found. Note that single-quote strings are used to avoid","\\t\\thaving to double the backslashes. The skip expression only","\\t\\tcatches comments at the start of a line, not after a command.","\\t\\tAlso, a word \\"en\\" or \\"if\\" halfway through a line is considered","\\t\\ta match.","\\t\\tAnother example, to search for the matching \\"{\\" of a \\"}\\": >","","\\t:echo searchpair(\'{\', \'\', \'}\', \'bW\')","","<\\t\\tThis works when the cursor is at or before the \\"}\\" for which a","\\t\\tmatch is to be found. To reject matches that syntax","\\t\\thighlighting recognized as strings: >","","\\t:echo searchpair(\'{\', \'\', \'}\', \'bW\',","\\t \\\\ \'synIDattr(synID(line(\\".\\"), col(\\".\\"), 0), \\"name\\") =~? \\"string\\"\')","<","\\t\\t\\t\\t\\t\\t\\t*searchpairpos()*","searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}","\\t\\t\\t\\t[, {stopline} [, {timeout}]]]])","\\t\\tSame as |searchpair()|, but returns a |List| with the line and","\\t\\tcolumn position of the match. The first element of the |List|","\\t\\tis the line number and the second element is the byte index of","\\t\\tthe column position of the match. If no match is found,","\\t\\treturns [0, 0]. >","","\\t\\t\\t:let [lnum,col] = searchpairpos(\'{\', \'\', \'}\', \'n\')","<","\\t\\tSee |match-parens| for a bigger and more useful example."],"searchpos":["\\t\\tSame as |search()|, but returns a |List| with the line and","\\t\\tcolumn position of the match. The first element of the |List|","\\t\\tis the line number and the second element is the byte index of","\\t\\tthe column position of the match. If no match is found,","\\t\\treturns [0, 0].","\\t\\tExample: >","\\t:let [lnum, col] = searchpos(\'mypattern\', \'n\')","","<\\t\\tWhen the \'p\' flag is given then there is an extra item with","\\t\\tthe sub-pattern match number |search()-sub-match|. Example: >","\\t:let [lnum, col, submatch] = searchpos(\'\\\\(\\\\l\\\\)\\\\|\\\\(\\\\u\\\\)\', \'np\')","<\\t\\tIn this example \\"submatch\\" is 2 when a lowercase letter is","\\t\\tfound |/\\\\l|, 3 when an uppercase letter is found |/\\\\u|."],"server2client":["\\t\\tSend a reply string to {clientid}. The most recent {clientid}","\\t\\tthat sent a string can be retrieved with expand(\\"<client>\\").","\\t\\tNote:","\\t\\tThis id has to be stored before the next command can be","\\t\\treceived. I.e. before returning from the received command and","\\t\\tbefore calling any commands that waits for input.","\\t\\tSee also |clientserver|.","\\t\\tExample: >","\\t\\t\\t:echo server2client(expand(\\"<client>\\"), \\"HELLO\\")"],"serverlist":["\\t\\tReturns a list of server addresses, or empty if all servers","\\t\\twere stopped. |serverstart()| |serverstop()|","\\t\\tExample: >","\\t\\t\\t:echo serverlist()"],"serverstart":["\\t\\tOpens a socket or named pipe at {address} and listens for","\\t\\t|RPC| messages. Clients can send |API| commands to the address","\\t\\tto control Nvim. Returns the address string.","","\\t\\tIf {address} does not contain a colon \\":\\" it is interpreted as","\\t\\ta named pipe or Unix domain socket path.","","\\t\\tExample: >","\\t\\t\\tif has(\'win32\')","\\t\\t\\t call serverstart(\'\\\\\\\\.\\\\pipe\\\\nvim-pipe-1234\')","\\t\\t\\telse","\\t\\t\\t call serverstart(\'nvim.sock\')","\\t\\t\\tendif","<","\\t\\tIf {address} contains a colon \\":\\" it is interpreted as a TCP","\\t\\taddress where the last \\":\\" separates the host and port.","\\t\\tAssigns a random port if it is empty or 0. Supports IPv4/IPv6.","","\\t\\tExample: >","\\t\\t\\t:call serverstart(\'::1:12345\')","<","\\t\\tIf no address is given, it is equivalent to: >","\\t\\t\\t:call serverstart(tempname())","","< \\t\\t|$NVIM_LISTEN_ADDRESS| is set to {address} if not already set."],"serverstop":["\\t\\tCloses the pipe or socket at {address}.","\\t\\tReturns TRUE if {address} is valid, else FALSE.","\\t\\tIf |$NVIM_LISTEN_ADDRESS| is stopped it is unset.","\\t\\tIf |v:servername| is stopped it is set to the next available","\\t\\taddress returned by |serverlist()|."],"setbufline":["\\t\\tSet line {lnum} to {text} in buffer {expr}. To insert","\\t\\tlines use |append()|.","","\\t\\tFor the use of {expr}, see |bufname()| above.","","\\t\\t{lnum} is used like with |setline()|.","\\t\\tThis works like |setline()| for the specified buffer.","\\t\\tOn success 0 is returned, on failure 1 is returned.","","\\t\\tIf {expr} is not a valid buffer or {lnum} is not valid, an","\\t\\terror message is given."],"setbufvar":["\\t\\tSet option or local variable {varname} in buffer {expr} to","\\t\\t{val}.","\\t\\tThis also works for a global or local window option, but it","\\t\\tdoesn\'t work for a global or local window variable.","\\t\\tFor a local window option the global value is unchanged.","\\t\\tFor the use of {expr}, see |bufname()| above.","\\t\\tNote that the variable name without \\"b:\\" must be used.","\\t\\tExamples: >","\\t\\t\\t:call setbufvar(1, \\"&mod\\", 1)","\\t\\t\\t:call setbufvar(\\"todo\\", \\"myvar\\", \\"foobar\\")","<\\t\\tThis function is not available in the |sandbox|."],"setcharsearch":["\\t\\tSet the current character search information to {dict},","\\t\\twhich contains one or more of the following entries:","","\\t\\t char\\tcharacter which will be used for a subsequent","\\t\\t\\t\\t|,| or |;| command; an empty string clears the","\\t\\t\\t\\tcharacter search","\\t\\t forward\\tdirection of character search; 1 for forward,","\\t\\t\\t\\t0 for backward","\\t\\t until\\ttype of character search; 1 for a |t| or |T|","\\t\\t\\t\\tcharacter search, 0 for an |f| or |F|","\\t\\t\\t\\tcharacter search","","\\t\\tThis can be useful to save/restore a user\'s character search","\\t\\tfrom a script: >","\\t\\t\\t:let prevsearch = getcharsearch()","\\t\\t\\t:\\" Perform a command which clobbers user\'s search","\\t\\t\\t:call setcharsearch(prevsearch)","<\\t\\tAlso see |getcharsearch()|."],"setcmdpos":["\\t\\tSet the cursor position in the command line to byte position","\\t\\t{pos}. The first position is 1.","\\t\\tUse |getcmdpos()| to obtain the current position.","\\t\\tOnly works while editing the command line, thus you must use","\\t\\t|c_CTRL-\\\\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with \'=\'. For","\\t\\t|c_CTRL-\\\\_e| and |c_CTRL-R_CTRL-R| with \'=\' the position is","\\t\\tset after the command line is set to the expression. For","\\t\\t|c_CTRL-R_=| it is set after evaluating the expression but","\\t\\tbefore inserting the resulting text.","\\t\\tWhen the number is too big the cursor is put at the end of the","\\t\\tline. A number smaller than one has undefined results.","\\t\\tReturns 0 when successful, 1 when not editing the command","\\t\\tline."],"setenv":["\\t\\tSet environment variable {name} to {val}.","\\t\\tWhen {val} is |v:null| the environment variable is deleted.","\\t\\tSee also |expr-env|."],"setfperm":["\\t\\tSet the file permissions for {fname} to {mode}.","\\t\\t{mode} must be a string with 9 characters. It is of the form","\\t\\t\\"rwxrwxrwx\\", where each group of \\"rwx\\" flags represent, in","\\t\\tturn, the permissions of the owner of the file, the group the","\\t\\tfile belongs to, and other users. A \'-\' character means the","\\t\\tpermission is off, any other character means on. Multi-byte","\\t\\tcharacters are not supported.","","\\t\\tFor example \\"rw-r-----\\" means read-write for the user,","\\t\\treadable by the group, not accessible by others. \\"xx-x-----\\"","\\t\\twould do the same thing.","","\\t\\tReturns non-zero for success, zero for failure.","","\\t\\tTo read permissions see |getfperm()|."],"setline":["\\t\\tSet line {lnum} of the current buffer to {text}. To insert","\\t\\tlines use |append()|. To set lines in another buffer use","\\t\\t|setbufline()|.","","\\t\\t{lnum} is used like with |getline()|.","\\t\\tWhen {lnum} is just below the last line the {text} will be","\\t\\tadded as a new line.","","\\t\\tIf this succeeds, 0 is returned. If this fails (most likely","\\t\\tbecause {lnum} is invalid) 1 is returned.","","\\t\\tExample: >","\\t\\t\\t:call setline(5, strftime(\\"%c\\"))","","<\\t\\tWhen {text} is a |List| then line {lnum} and following lines","\\t\\twill be set to the items in the list. Example: >","\\t\\t\\t:call setline(5, [\'aaa\', \'bbb\', \'ccc\'])","<\\t\\tThis is equivalent to: >","\\t\\t\\t:for [n, l] in [[5, \'aaa\'], [6, \'bbb\'], [7, \'ccc\']]","\\t\\t\\t: call setline(n, l)","\\t\\t\\t:endfor","","<\\t\\tNote: The \'[ and \'] marks are not set."],"setloclist":["\\t\\tCreate or replace or add to the location list for window {nr}.","\\t\\t{nr} can be the window number or the |window-ID|.","\\t\\tWhen {nr} is zero the current window is used.","","\\t\\tFor a location list window, the displayed location list is","\\t\\tmodified. For an invalid window number {nr}, -1 is returned.","\\t\\tOtherwise, same as |setqflist()|.","\\t\\tAlso see |location-list|.","","\\t\\tIf the optional {what} dictionary argument is supplied, then","\\t\\tonly the items listed in {what} are set. Refer to |setqflist()|","\\t\\tfor the list of supported keys in {what}."],"setmatches":["\\t\\tRestores a list of matches saved by |getmatches() for the","\\t\\tcurrent window|. Returns 0 if successful, otherwise -1. All","\\t\\tcurrent matches are cleared before the list is restored. See","\\t\\texample for |getmatches()|.",""],"setpos":["\\t\\tSet the position for {expr}. Possible values:","\\t\\t\\t.\\tthe cursor","\\t\\t\\t\'x\\tmark x","","\\t\\t{list} must be a |List| with four or five numbers:","\\t\\t [bufnum, lnum, col, off]","\\t\\t [bufnum, lnum, col, off, curswant]","","\\t\\t\\"bufnum\\" is the buffer number.\\tZero can be used for the","\\t\\tcurrent buffer. When setting an uppercase mark \\"bufnum\\" is","\\t\\tused for the mark position. For other marks it specifies the","\\t\\tbuffer to set the mark in. You can use the |bufnr()| function","\\t\\tto turn a file name into a buffer number.","\\t\\tFor setting the cursor and the \' mark \\"bufnum\\" is ignored,","\\t\\tsince these are associated with a window, not a buffer.","\\t\\tDoes not change the jumplist.","","\\t\\t\\"lnum\\" and \\"col\\" are the position in the buffer. The first","\\t\\tcolumn is 1. Use a zero \\"lnum\\" to delete a mark. If \\"col\\" is","\\t\\tsmaller than 1 then 1 is used.","","\\t\\tThe \\"off\\" number is only used when \'virtualedit\' is set. Then","\\t\\tit is the offset in screen columns from the start of the","\\t\\tcharacter. E.g., a position within a <Tab> or after the last","\\t\\tcharacter.","","\\t\\tThe \\"curswant\\" number is only used when setting the cursor","\\t\\tposition. It sets the preferred column for when moving the","\\t\\tcursor vertically. When the \\"curswant\\" number is missing the","\\t\\tpreferred column is not set. When it is present and setting a","\\t\\tmark position it is not used.","","\\t\\tNote that for \'< and \'> changing the line number may result in","\\t\\tthe marks to be effectively be swapped, so that \'< is always","\\t\\tbefore \'>.","","\\t\\tReturns 0 when the position could be set, -1 otherwise.","\\t\\tAn error message is given if {expr} is invalid.","","\\t\\tAlso see |getpos()| and |getcurpos()|.","","\\t\\tThis does not restore the preferred column for moving","\\t\\tvertically; if you set the cursor position with this, |j| and","\\t\\t|k| motions will jump to previous columns! Use |cursor()| to","\\t\\talso set the preferred column. Also see the \\"curswant\\" key in","\\t\\t|winrestview()|.",""],"setqflist":["\\t\\tCreate or replace or add to the quickfix list.","\\t\\t","\\t\\tWhen {what} is not present, use the items in {list}. Each","\\t\\titem must be a dictionary. Non-dictionary items in {list} are","\\t\\tignored. Each dictionary item can contain the following","\\t\\tentries:","","\\t\\t bufnr\\tbuffer number; must be the number of a valid","\\t\\t\\t\\tbuffer","\\t\\t filename\\tname of a file; only used when \\"bufnr\\" is not","\\t\\t\\t\\tpresent or it is invalid.","\\t\\t module\\tname of a module; if given it will be used in","\\t\\t\\t\\tquickfix error window instead of the filename","\\t\\t lnum\\tline number in the file","\\t\\t pattern\\tsearch pattern used to locate the error","\\t\\t col\\t\\tcolumn number","\\t\\t vcol\\twhen non-zero: \\"col\\" is visual column","\\t\\t\\t\\twhen zero: \\"col\\" is byte index","\\t\\t nr\\t\\terror number","\\t\\t text\\tdescription of the error","\\t\\t type\\tsingle-character error type, \'E\', \'W\', etc.","\\t\\t valid\\trecognized error message","","\\t\\tThe \\"col\\", \\"vcol\\", \\"nr\\", \\"type\\" and \\"text\\" entries are","\\t\\toptional. Either \\"lnum\\" or \\"pattern\\" entry can be used to","\\t\\tlocate a matching error line.","\\t\\tIf the \\"filename\\" and \\"bufnr\\" entries are not present or","\\t\\tneither the \\"lnum\\" or \\"pattern\\" entries are present, then the","\\t\\titem will not be handled as an error line.","\\t\\tIf both \\"pattern\\" and \\"lnum\\" are present then \\"pattern\\" will","\\t\\tbe used.","\\t\\tIf the \\"valid\\" entry is not supplied, then the valid flag is","\\t\\tset when \\"bufnr\\" is a valid buffer or \\"filename\\" exists.","\\t\\tIf you supply an empty {list}, the quickfix list will be","\\t\\tcleared.","\\t\\tNote that the list is not exactly the same as what","\\t\\t|getqflist()| returns.","","\\t\\t{action} values:\\t\\t\\t\\t*E927*","\\t\\t\'a\'\\tThe items from {list} are added to the existing","\\t\\t\\tquickfix list. If there is no existing list, then a","\\t\\t\\tnew list is created.","\\t\\t","\\t\\t\'r\'\\tThe items from the current quickfix list are replaced","\\t\\t\\twith the items from {list}. This can also be used to","\\t\\t\\tclear the list: >","\\t\\t\\t\\t:call setqflist([], \'r\')","<\\t","\\t\\t\'f\'\\tAll the quickfix lists in the quickfix stack are","\\t\\t\\tfreed.","","\\t\\tIf {action} is not present or is set to \' \', then a new list","\\t\\tis created. The new quickfix list is added after the current","\\t\\tquickfix list in the stack and all the following lists are","\\t\\tfreed. To add a new quickfix list at the end of the stack,","\\t\\tset \\"nr\\" in {what} to \\"$\\".","","\\t\\tIf the optional {what} dictionary argument is supplied, then","\\t\\tonly the items listed in {what} are set. The first {list}","\\t\\targument is ignored. The following items can be specified in","\\t\\t{what}:","\\t\\t context\\tquickfix list context. See |quickfix-context|","\\t\\t efm\\t\\terrorformat to use when parsing text from","\\t\\t\\t\\t\\"lines\\". If this is not present, then the","\\t\\t\\t\\t\'errorformat\' option value is used.","\\t\\t id\\t\\tquickfix list identifier |quickfix-ID|","\\t\\t items\\tlist of quickfix entries. Same as the {list}","\\t\\t\\t\\targument.","\\t\\t lines\\tuse \'errorformat\' to parse a list of lines and","\\t\\t\\t\\tadd the resulting entries to the quickfix list","\\t\\t\\t\\t{nr} or {id}. Only a |List| value is supported.","\\t\\t nr\\t\\tlist number in the quickfix stack; zero","\\t\\t\\t\\tmeans the current quickfix list and \\"$\\" means","\\t\\t\\t\\tthe last quickfix list","\\t\\t title\\tquickfix list title text","\\t\\tUnsupported keys in {what} are ignored.","\\t\\tIf the \\"nr\\" item is not present, then the current quickfix list","\\t\\tis modified. When creating a new quickfix list, \\"nr\\" can be","\\t\\tset to a value one greater than the quickfix stack size.","\\t\\tWhen modifying a quickfix list, to guarantee that the correct","\\t\\tlist is modified, \\"id\\" should be used instead of \\"nr\\" to","\\t\\tspecify the list.","","\\t\\tExamples (See also |setqflist-examples|): >","\\t\\t :call setqflist([], \'r\', {\'title\': \'My search\'})","\\t\\t :call setqflist([], \'r\', {\'nr\': 2, \'title\': \'Errors\'})","\\t\\t :call setqflist([], \'a\', {\'id\':qfid, \'lines\':[\\"F1:10:L10\\"]})","<","\\t\\tReturns zero for success, -1 for failure.","","\\t\\tThis function can be used to create a quickfix list","\\t\\tindependent of the \'errorformat\' setting. Use a command like","\\t\\t`:cc 1` to jump to the first position.","",""],"setreg":["\\t\\tSet the register {regname} to {value}.","\\t\\t{value} may be any value returned by |getreg()|, including","\\t\\ta |List|.","\\t\\tIf {options} contains \\"a\\" or {regname} is upper case,","\\t\\tthen the value is appended.","\\t\\t{options} can also contain a register type specification:","\\t\\t \\"c\\" or \\"v\\"\\t |charwise| mode","\\t\\t \\"l\\" or \\"V\\"\\t |linewise| mode","\\t\\t \\"b\\" or \\"<CTRL-V>\\" |blockwise-visual| mode","\\t\\tIf a number immediately follows \\"b\\" or \\"<CTRL-V>\\" then this is","\\t\\tused as the width of the selection - if it is not specified","\\t\\tthen the width of the block is set to the number of characters","\\t\\tin the longest line (counting a <Tab> as 1 character).","\\t\\tIf {options} contains \\"u\\" or \'\\"\', then the unnamed register is","\\t\\tset to point to register {regname}.","","\\t\\tIf {options} contains no register settings, then the default","\\t\\tis to use character mode unless {value} ends in a <NL> for","\\t\\tstring {value} and linewise mode for list {value}. Blockwise","\\t\\tmode is never selected automatically.","\\t\\tReturns zero for success, non-zero for failure.","","\\t\\t\\t\\t\\t\\t\\t*E883*","\\t\\tNote: you may not use |List| containing more than one item to","\\t\\t set search and expression registers. Lists containing no","\\t\\t items act like empty strings.","","\\t\\tExamples: >","\\t\\t\\t:call setreg(v:register, @*)","\\t\\t\\t:call setreg(\'*\', @%, \'ac\')","\\t\\t\\t:call setreg(\'a\', \\"1\\\\n2\\\\n3\\", \'b5\')","","<\\t\\tThis example shows using the functions to save and restore a","\\t\\tregister: >","\\t\\t\\t:let var_a = getreg(\'a\', 1, 1)","\\t\\t\\t:let var_amode = getregtype(\'a\')","\\t\\t\\t ....","\\t\\t\\t:call setreg(\'a\', var_a, var_amode)","<\\t\\tNote: you may not reliably restore register value","\\t\\twithout using the third argument to |getreg()| as without it","\\t\\tnewlines are represented as newlines AND Nul bytes are","\\t\\trepresented as newlines as well, see |NL-used-for-Nul|.","","\\t\\tYou can also change the type of a register by appending","\\t\\tnothing: >","\\t\\t\\t:call setreg(\'a\', \'\', \'al\')"],"settabvar":["\\t\\tSet tab-local variable {varname} to {val} in tab page {tabnr}.","\\t\\t|t:var|","\\t\\tNote that the variable name without \\"t:\\" must be used.","\\t\\tTabs are numbered starting with one.","\\t\\tThis function is not available in the |sandbox|."],"settabwinvar":["\\t\\tSet option or local variable {varname} in window {winnr} to","\\t\\t{val}.","\\t\\tTabs are numbered starting with one. For the current tabpage","\\t\\tuse |setwinvar()|.","\\t\\t{winnr} can be the window number or the |window-ID|.","\\t\\tWhen {winnr} is zero the current window is used.","\\t\\tThis also works for a global or local buffer option, but it","\\t\\tdoesn\'t work for a global or local buffer variable.","\\t\\tFor a local buffer option the global value is unchanged.","\\t\\tNote that the variable name without \\"w:\\" must be used.","\\t\\tExamples: >","\\t\\t\\t:call settabwinvar(1, 1, \\"&list\\", 0)","\\t\\t\\t:call settabwinvar(3, 2, \\"myvar\\", \\"foobar\\")","<\\t\\tThis function is not available in the |sandbox|."],"settagstack":["\\t\\tModify the tag stack of the window {nr} using {dict}.","\\t\\t{nr} can be the window number or the |window-ID|.","","\\t\\tFor a list of supported items in {dict}, refer to","\\t\\t|gettagstack()|. \\"curidx\\" takes effect before changing the tag","\\t\\tstack.","\\t\\t\\t\\t\\t\\t\\t*E962*","\\t\\tHow the tag stack is modified depends on the {action}","\\t\\targument:","\\t\\t- If {action} is not present or is set to \'r\', then the tag","\\t\\t stack is replaced.","\\t\\t- If {action} is set to \'a\', then new entries from {dict} are","\\t\\t pushed (added) onto the tag stack.","\\t\\t- If {action} is set to \'t\', then all the entries from the","\\t\\t current entry in the tag stack or \\"curidx\\" in {dict} are","\\t\\t removed and then new entries are pushed to the stack.","","\\t\\tThe current index is set to one after the length of the tag","\\t\\tstack after the modification.","","\\t\\tReturns zero for success, -1 for failure.","","\\t\\tExamples:","\\t\\t Set current index of the tag stack to 4: >","\\t\\t\\tcall settagstack(1005, {\'curidx\' : 4})","","<\\t\\t Empty the tag stack of window 3: >","\\t\\t\\tcall settagstack(3, {\'items\' : []})","","<\\t\\t Push a new item onto the tag stack: >","\\t\\t\\tlet pos = [bufnr(\'myfile.txt\'), 10, 1, 0]","\\t\\t\\tlet newtag = [{\'tagname\' : \'mytag\', \'from\' : pos}]","\\t\\t\\tcall settagstack(2, {\'items\' : newtag}, \'a\')","","<\\t\\t Save and restore the tag stack: >","\\t\\t\\tlet stack = gettagstack(1003)","\\t\\t\\t\\" do something else","\\t\\t\\tcall settagstack(1003, stack)","\\t\\t\\tunlet stack","<"],"setwinvar":["\\t\\tLike |settabwinvar()| for the current tab page.","\\t\\tExamples: >","\\t\\t\\t:call setwinvar(1, \\"&list\\", 0)","\\t\\t\\t:call setwinvar(2, \\"myvar\\", \\"foobar\\")"],"sha256":["\\t\\tReturns a String with 64 hex characters, which is the SHA256","\\t\\tchecksum of {string}."],"shellescape":["\\t\\tEscape {string} for use as a shell command argument.","\\t\\tOn Windows when \'shellslash\' is not set, it","\\t\\twill enclose {string} in double quotes and double all double","\\t\\tquotes within {string}.","\\t\\tOtherwise, it will enclose {string} in single quotes and","\\t\\treplace all \\"\'\\" with \\"\'\\\\\'\'\\".","","\\t\\tWhen the {special} argument is present and it\'s a non-zero","\\t\\tNumber or a non-empty String (|non-zero-arg|), then special","\\t\\titems such as \\"!\\", \\"%\\", \\"#\\" and \\"<cword>\\" will be preceded by","\\t\\ta backslash. This backslash will be removed again by the |:!|","\\t\\tcommand.","","\\t\\tThe \\"!\\" character will be escaped (again with a |non-zero-arg|","\\t\\t{special}) when \'shell\' contains \\"csh\\" in the tail. That is","\\t\\tbecause for csh and tcsh \\"!\\" is used for history replacement","\\t\\teven when inside single quotes.","","\\t\\tWith a |non-zero-arg| {special} the <NL> character is also","\\t\\tescaped. When \'shell\' containing \\"csh\\" in the tail it\'s","\\t\\tescaped a second time.","","\\t\\tExample of use with a |:!| command: >","\\t\\t :exe \'!dir \' . shellescape(expand(\'<cfile>\'), 1)","<\\t\\tThis results in a directory listing for the file under the","\\t\\tcursor. Example of use with |system()|: >","\\t\\t :call system(\\"chmod +w -- \\" . shellescape(expand(\\"%\\")))","<\\t\\tSee also |::S|.",""],"shiftwidth":["\\t\\tReturns the effective value of \'shiftwidth\'. This is the","\\t\\t\'shiftwidth\' value unless it is zero, in which case it is the","\\t\\t\'tabstop\' value. To be backwards compatible in indent","\\t\\tplugins, use this: >","\\t\\t\\tif exists(\'*shiftwidth\')","\\t\\t\\t func s:sw()","\\t\\t\\t return shiftwidth()","\\t\\t\\t endfunc","\\t\\t\\telse","\\t\\t\\t func s:sw()","\\t\\t\\t return &sw","\\t\\t\\t endfunc","\\t\\t\\tendif","<\\t\\tAnd then use s:sw() instead of &sw."],"sign_define":["\\t\\tDefine a new sign named {name} or modify the attributes of an","\\t\\texisting sign. This is similar to the |:sign-define| command.","","\\t\\tPrefix {name} with a unique text to avoid name collisions.","\\t\\tThere is no {group} like with placing signs.","","\\t\\tThe {name} can be a String or a Number. The optional {dict}","\\t\\targument specifies the sign attributes. The following values","\\t\\tare supported:","\\t\\t icon\\tfull path to the bitmap file for the sign.","\\t\\t linehl\\thighlight group used for the whole line the","\\t\\t\\t\\tsign is placed in.","\\t\\t text\\ttext that is displayed when there is no icon","\\t\\t\\t\\tor the GUI is not being used.","\\t\\t texthl\\thighlight group used for the text item","\\t\\t numhl\\thighlight group used for \'number\' column at the","\\t\\t\\t\\tassociated line. Overrides |hl-LineNr|,","\\t\\t\\t\\t|hl-CursorLineNr|.","","\\t\\tIf the sign named {name} already exists, then the attributes","\\t\\tof the sign are updated.","","\\t\\tReturns 0 on success and -1 on failure.","","\\t\\tExamples: >","\\t\\t\\tcall sign_define(\\"mySign\\", {\\"text\\" : \\"=>\\", \\"texthl\\" :","\\t\\t\\t\\t\\t\\\\ \\"Error\\", \\"linehl\\" : \\"Search\\"})"],"sign_getdefined":["\\t\\tGet a list of defined signs and their attributes.","\\t\\tThis is similar to the |:sign-list| command.","","\\t\\tIf the {name} is not supplied, then a list of all the defined","\\t\\tsigns is returned. Otherwise the attribute of the specified","\\t\\tsign is returned.","","\\t\\tEach list item in the returned value is a dictionary with the","\\t\\tfollowing entries:","\\t\\t\\ticon\\tfull path to the bitmap file of the sign","\\t\\t\\tlinehl\\thighlight group used for the whole line the","\\t\\t\\t\\tsign is placed in.","\\t\\t\\tname\\tname of the sign","\\t\\t\\ttext\\ttext that is displayed when there is no icon","\\t\\t\\t\\tor the GUI is not being used.","\\t\\t\\ttexthl\\thighlight group used for the text item","\\t\\t\\tnumhl\\thighlight group used for \'number\' column at the","\\t\\t\\t\\tassociated line. Overrides |hl-LineNr|,","\\t\\t\\t\\t|hl-CursorLineNr|.","","\\t\\tReturns an empty List if there are no signs and when {name} is","\\t\\tnot found.","","\\t\\tExamples: >","\\t\\t\\t\\" Get a list of all the defined signs","\\t\\t\\techo sign_getdefined()","","\\t\\t\\t\\" Get the attribute of the sign named mySign","\\t\\t\\techo sign_getdefined(\\"mySign\\")"],"sign_getplaced":["\\t\\tReturn a list of signs placed in a buffer or all the buffers.","\\t\\tThis is similar to the |:sign-place-list| command.","","\\t\\tIf the optional buffer name {expr} is specified, then only the","\\t\\tlist of signs placed in that buffer is returned. For the use","\\t\\tof {expr}, see |bufname()|. The optional {dict} can contain","\\t\\tthe following entries:","\\t\\t group\\tselect only signs in this group","\\t\\t id\\t\\tselect sign with this identifier","\\t\\t lnum\\t\\tselect signs placed in this line. For the use","\\t\\t\\t\\tof {lnum}, see |line()|.","\\t\\tIf {group} is \'*\', then signs in all the groups including the","\\t\\tglobal group are returned. If {group} is not supplied or is an","\\t\\tempty string, then only signs in the global group are","\\t\\treturned. If no arguments are supplied, then signs in the","\\t\\tglobal group placed in all the buffers are returned.","\\t\\tSee |sign-group|.","","\\t\\tEach list item in the returned value is a dictionary with the","\\t\\tfollowing entries:","\\t\\t\\tbufnr\\tnumber of the buffer with the sign","\\t\\t\\tsigns\\tlist of signs placed in {bufnr}. Each list","\\t\\t\\t\\titem is a dictionary with the below listed","\\t\\t\\t\\tentries","","\\t\\tThe dictionary for each sign contains the following entries:","\\t\\t\\tgroup\\tsign group. Set to \'\' for the global group.","\\t\\t\\tid\\tidentifier of the sign","\\t\\t\\tlnum\\tline number where the sign is placed","\\t\\t\\tname\\tname of the defined sign","\\t\\t\\tpriority\\tsign priority","","\\t\\tThe returned signs in a buffer are ordered by their line","\\t\\tnumber and priority.","","\\t\\tReturns an empty list on failure or if there are no placed","\\t\\tsigns.","","\\t\\tExamples: >","\\t\\t\\t\\" Get a List of signs placed in eval.c in the","\\t\\t\\t\\" global group","\\t\\t\\techo sign_getplaced(\\"eval.c\\")","","\\t\\t\\t\\" Get a List of signs in group \'g1\' placed in eval.c","\\t\\t\\techo sign_getplaced(\\"eval.c\\", {\'group\' : \'g1\'})","","\\t\\t\\t\\" Get a List of signs placed at line 10 in eval.c","\\t\\t\\techo sign_getplaced(\\"eval.c\\", {\'lnum\' : 10})","","\\t\\t\\t\\" Get sign with identifier 10 placed in a.py","\\t\\t\\techo sign_getplaced(\\"a.py\\", {\'id\' : 10})","","\\t\\t\\t\\" Get sign with id 20 in group \'g1\' placed in a.py","\\t\\t\\techo sign_getplaced(\\"a.py\\", {\'group\' : \'g1\',","\\t\\t\\t\\t\\t\\t\\t\\\\ \'id\' : 20})","","\\t\\t\\t\\" Get a List of all the placed signs","\\t\\t\\techo sign_getplaced()","<"],"sign_jump":["\\t\\tOpen the buffer {expr} or jump to the window that contains","\\t\\t{expr} and position the cursor at sign {id} in group {group}.","\\t\\tThis is similar to the |:sign-jump| command.","","\\t\\tFor the use of {expr}, see |bufname()|.","","\\t\\tReturns the line number of the sign. Returns -1 if the","\\t\\targuments are invalid.","","\\t\\tExample: >","\\t\\t\\t\\" Jump to sign 10 in the current buffer","\\t\\t\\tcall sign_jump(10, \'\', \'\')","<"],"sign_place":["\\t\\tPlace the sign defined as {name} at line {lnum} in file {expr}","\\t\\tand assign {id} and {group} to sign. This is similar to the","\\t\\t|:sign-place| command.","","\\t\\tIf the sign identifier {id} is zero, then a new identifier is","\\t\\tallocated. Otherwise the specified number is used. {group} is","\\t\\tthe sign group name. To use the global sign group, use an","\\t\\tempty string. {group} functions as a namespace for {id}, thus","\\t\\ttwo groups can use the same IDs. Refer to |sign-identifier|","\\t\\tfor more information.","\\t\\t","\\t\\t{name} refers to a defined sign.","\\t\\t{expr} refers to a buffer name or number. For the accepted","\\t\\tvalues, see |bufname()|.","","\\t\\tThe optional {dict} argument supports the following entries:","\\t\\t\\tlnum\\t\\tline number in the buffer {expr} where","\\t\\t\\t\\t\\tthe sign is to be placed. For the","\\t\\t\\t\\t\\taccepted values, see |line()|.","\\t\\t\\tpriority\\tpriority of the sign. See","\\t\\t\\t\\t\\t|sign-priority| for more information.","","\\t\\tIf the optional {dict} is not specified, then it modifies the","\\t\\tplaced sign {id} in group {group} to use the defined sign","\\t\\t{name}.","","\\t\\tReturns the sign identifier on success and -1 on failure.","","\\t\\tExamples: >","\\t\\t\\t\\" Place a sign named sign1 with id 5 at line 20 in","\\t\\t\\t\\" buffer json.c","\\t\\t\\tcall sign_place(5, \'\', \'sign1\', \'json.c\',","\\t\\t\\t\\t\\t\\t\\t\\\\ {\'lnum\' : 20})","","\\t\\t\\t\\" Updates sign 5 in buffer json.c to use sign2","\\t\\t\\tcall sign_place(5, \'\', \'sign2\', \'json.c\')","","\\t\\t\\t\\" Place a sign named sign3 at line 30 in","\\t\\t\\t\\" buffer json.c with a new identifier","\\t\\t\\tlet id = sign_place(0, \'\', \'sign3\', \'json.c\',","\\t\\t\\t\\t\\t\\t\\t\\\\ {\'lnum\' : 30})","","\\t\\t\\t\\" Place a sign named sign4 with id 10 in group \'g3\'","\\t\\t\\t\\" at line 40 in buffer json.c with priority 90","\\t\\t\\tcall sign_place(10, \'g3\', \'sign4\', \'json.c\',","\\t\\t\\t\\t\\t\\\\ {\'lnum\' : 40, \'priority\' : 90})"],"sign_undefine":["\\t\\tDeletes a previously defined sign {name}. This is similar to","\\t\\tthe |:sign-undefine| command. If {name} is not supplied, then","\\t\\tdeletes all the defined signs.","","\\t\\tReturns 0 on success and -1 on failure.","","\\t\\tExamples: >","\\t\\t\\t\\" Delete a sign named mySign","\\t\\t\\tcall sign_undefine(\\"mySign\\")","","\\t\\t\\t\\" Delete all the signs","\\t\\t\\tcall sign_undefine()"],"sign_unplace":["\\t\\tRemove a previously placed sign in one or more buffers. This","\\t\\tis similar to the |:sign-unplace| command.","","\\t\\t{group} is the sign group name. To use the global sign group,","\\t\\tuse an empty string. If {group} is set to \'*\', then all the","\\t\\tgroups including the global group are used.","\\t\\tThe signs in {group} are selected based on the entries in","\\t\\t{dict}. The following optional entries in {dict} are","\\t\\tsupported:","\\t\\t\\tbuffer\\tbuffer name or number. See |bufname()|.","\\t\\t\\tid\\tsign identifier","\\t\\tIf {dict} is not supplied, then all the signs in {group} are","\\t\\tremoved.","","\\t\\tReturns 0 on success and -1 on failure.","","\\t\\tExamples: >","\\t\\t\\t\\" Remove sign 10 from buffer a.vim","\\t\\t\\tcall sign_unplace(\'\', {\'buffer\' : \\"a.vim\\", \'id\' : 10})","","\\t\\t\\t\\" Remove sign 20 in group \'g1\' from buffer 3","\\t\\t\\tcall sign_unplace(\'g1\', {\'buffer\' : 3, \'id\' : 20})","","\\t\\t\\t\\" Remove all the signs in group \'g2\' from buffer 10","\\t\\t\\tcall sign_unplace(\'g2\', {\'buffer\' : 10})","","\\t\\t\\t\\" Remove sign 30 in group \'g3\' from all the buffers","\\t\\t\\tcall sign_unplace(\'g3\', {\'id\' : 30})","","\\t\\t\\t\\" Remove all the signs placed in buffer 5","\\t\\t\\tcall sign_unplace(\'*\', {\'buffer\' : 5})","","\\t\\t\\t\\" Remove the signs in group \'g4\' from all the buffers","\\t\\t\\tcall sign_unplace(\'g4\')","","\\t\\t\\t\\" Remove sign 40 from all the buffers","\\t\\t\\tcall sign_unplace(\'*\', {\'id\' : 40})","","\\t\\t\\t\\" Remove all the placed signs from all the buffers","\\t\\t\\tcall sign_unplace(\'*\')"],"simplify":["\\t\\tSimplify the file name as much as possible without changing","\\t\\tthe meaning. Shortcuts (on MS-Windows) or symbolic links (on","\\t\\tUnix) are not resolved. If the first path component in","\\t\\t{filename} designates the current directory, this will be","\\t\\tvalid for the result as well. A trailing path separator is","\\t\\tnot removed either.","\\t\\tExample: >","\\t\\t\\tsimplify(\\"./dir/.././/file/\\") == \\"./file/\\"","<\\t\\tNote: The combination \\"dir/..\\" is only removed if \\"dir\\" is","\\t\\ta searchable directory or does not exist. On Unix, it is also","\\t\\tremoved when \\"dir\\" is a symbolic link within the same","\\t\\tdirectory. In order to resolve all the involved symbolic","\\t\\tlinks before simplifying the path name, use |resolve()|.",""],"sin":["\\t\\tReturn the sine of {expr}, measured in radians, as a |Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo sin(100)","<\\t\\t\\t-0.506366 >","\\t\\t\\t:echo sin(-4.01)","<\\t\\t\\t0.763301",""],"sinh":["\\t\\tReturn the hyperbolic sine of {expr} as a |Float| in the range","\\t\\t[-inf, inf].","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo sinh(0.5)","<\\t\\t\\t0.521095 >","\\t\\t\\t:echo sinh(-0.9)","<\\t\\t\\t-1.026517"],"sockconnect":["\\t\\tConnect a socket to an address. If {mode} is \\"pipe\\" then","\\t\\t{address} should be the path of a named pipe. If {mode} is","\\t\\t\\"tcp\\" then {address} should be of the form \\"host:port\\" where","\\t\\tthe host should be an ip adderess or host name, and port the","\\t\\tport number.","","\\t\\tReturns a |channel| ID. Close the socket with |chanclose()|.","\\t\\tUse |chansend()| to send data over a bytes socket, and","\\t\\t|rpcrequest()| and |rpcnotify()| to communicate with a RPC","\\t\\tsocket.","","\\t\\t{opts} is a dictionary with these keys:","\\t\\t |on_data| : callback invoked when data was read from socket","\\t\\t data_buffered : read socket data in |channel-buffered| mode.","\\t\\t rpc : If set, |msgpack-rpc| will be used to communicate","\\t\\t\\t over the socket.","\\t\\tReturns:","\\t\\t - The channel ID on success (greater than zero)","\\t\\t - 0 on invalid arguments or connection failure."],"sort":["\\t\\tSort the items in {list} in-place. Returns {list}.","","\\t\\tIf you want a list to remain unmodified make a copy first: >","\\t\\t\\t:let sortedlist = sort(copy(mylist))","","<\\t\\tWhen {func} is omitted, is empty or zero, then sort() uses the","\\t\\tstring representation of each item to sort on. Numbers sort","\\t\\tafter Strings, |Lists| after Numbers. For sorting text in the","\\t\\tcurrent buffer use |:sort|.","","\\t\\tWhen {func} is given and it is \'1\' or \'i\' then case is","\\t\\tignored.","","\\t\\tWhen {func} is given and it is \'n\' then all items will be","\\t\\tsorted numerical (Implementation detail: This uses the","\\t\\tstrtod() function to parse numbers, Strings, Lists, Dicts and","\\t\\tFuncrefs will be considered as being 0).","","\\t\\tWhen {func} is given and it is \'N\' then all items will be","\\t\\tsorted numerical. This is like \'n\' but a string containing","\\t\\tdigits will be used as the number they represent.","","\\t\\tWhen {func} is given and it is \'f\' then all items will be","\\t\\tsorted numerical. All values must be a Number or a Float.","","\\t\\tWhen {func} is a |Funcref| or a function name, this function","\\t\\tis called to compare items. The function is invoked with two","\\t\\titems as argument and must return zero if they are equal, 1 or","\\t\\tbigger if the first one sorts after the second one, -1 or","\\t\\tsmaller if the first one sorts before the second one.","","\\t\\t{dict} is for functions with the \\"dict\\" attribute. It will be","\\t\\tused to set the local variable \\"self\\". |Dictionary-function|","","\\t\\tThe sort is stable, items which compare equal (as number or as","\\t\\tstring) will keep their relative position. E.g., when sorting","\\t\\ton numbers, text strings will sort next to each other, in the","\\t\\tsame order as they were originally.","","\\t\\tAlso see |uniq()|.","","\\t\\tExample: >","\\t\\t\\tfunc MyCompare(i1, i2)","\\t\\t\\t return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1","\\t\\t\\tendfunc","\\t\\t\\tlet sortedlist = sort(mylist, \\"MyCompare\\")","<\\t\\tA shorter compare version for this specific simple case, which","\\t\\tignores overflow: >","\\t\\t\\tfunc MyCompare(i1, i2)","\\t\\t\\t return a:i1 - a:i2","\\t\\t\\tendfunc","<"],"soundfold":["\\t\\tReturn the sound-folded equivalent of {word}. Uses the first","\\t\\tlanguage in \'spelllang\' for the current window that supports","\\t\\tsoundfolding. \'spell\' must be set. When no sound folding is","\\t\\tpossible the {word} is returned unmodified.","\\t\\tThis can be used for making spelling suggestions. Note that","\\t\\tthe method can be quite slow.",""],"spellbadword":["\\t\\tWithout argument: The result is the badly spelled word under","\\t\\tor after the cursor. The cursor is moved to the start of the","\\t\\tbad word. When no bad word is found in the cursor line the","\\t\\tresult is an empty string and the cursor doesn\'t move.","","\\t\\tWith argument: The result is the first word in {sentence} that","\\t\\tis badly spelled. If there are no spelling mistakes the","\\t\\tresult is an empty string.","","\\t\\tThe return value is a list with two items:","\\t\\t- The badly spelled word or an empty string.","\\t\\t- The type of the spelling error:","\\t\\t\\t\\"bad\\"\\t\\tspelling mistake","\\t\\t\\t\\"rare\\"\\t\\trare word","\\t\\t\\t\\"local\\"\\t\\tword only valid in another region","\\t\\t\\t\\"caps\\"\\t\\tword should start with Capital","\\t\\tExample: >","\\t\\t\\techo spellbadword(\\"the quik brown fox\\")","<\\t\\t\\t[\'quik\', \'bad\'] ~","","\\t\\tThe spelling information for the current window is used. The","\\t\\t\'spell\' option must be set and the value of \'spelllang\' is","\\t\\tused.",""],"spellsuggest":["\\t\\tReturn a |List| with spelling suggestions to replace {word}.","\\t\\tWhen {max} is given up to this number of suggestions are","\\t\\treturned. Otherwise up to 25 suggestions are returned.","","\\t\\tWhen the {capital} argument is given and it\'s non-zero only","\\t\\tsuggestions with a leading capital will be given. Use this","\\t\\tafter a match with \'spellcapcheck\'.","","\\t\\t{word} can be a badly spelled word followed by other text.","\\t\\tThis allows for joining two words that were split. The","\\t\\tsuggestions also include the following text, thus you can","\\t\\treplace a line.","","\\t\\t{word} may also be a good word. Similar words will then be","\\t\\treturned. {word} itself is not included in the suggestions,","\\t\\talthough it may appear capitalized.","","\\t\\tThe spelling information for the current window is used. The","\\t\\t\'spell\' option must be set and the values of \'spelllang\' and","\\t\\t\'spellsuggest\' are used.",""],"split":["\\t\\tMake a |List| out of {expr}. When {pattern} is omitted or","\\t\\tempty each white-separated sequence of characters becomes an","\\t\\titem.","\\t\\tOtherwise the string is split where {pattern} matches,","\\t\\tremoving the matched characters. \'ignorecase\' is not used","\\t\\there, add \\\\c to ignore case. |/\\\\c|","\\t\\tWhen the first or last item is empty it is omitted, unless the","\\t\\t{keepempty} argument is given and it\'s non-zero.","\\t\\tOther empty items are kept when {pattern} matches at least one","\\t\\tcharacter or when {keepempty} is non-zero.","\\t\\tExample: >","\\t\\t\\t:let words = split(getline(\'.\'), \'\\\\W\\\\+\')","<\\t\\tTo split a string in individual characters: >","\\t\\t\\t:for c in split(mystring, \'\\\\zs\')","<\\t\\tIf you want to keep the separator you can also use \'\\\\zs\' at","\\t\\tthe end of the pattern: >","\\t\\t\\t:echo split(\'abc:def:ghi\', \':\\\\zs\')","<\\t\\t\\t[\'abc:\', \'def:\', \'ghi\'] ~","\\t\\tSplitting a table where the first element can be empty: >","\\t\\t\\t:let items = split(line, \':\', 1)","<\\t\\tThe opposite function is |join()|.",""],"sqrt":["\\t\\tReturn the non-negative square root of Float {expr} as a","\\t\\t|Float|.","\\t\\t{expr} must evaluate to a |Float| or a |Number|. When {expr}","\\t\\tis negative the result is NaN (Not a Number).","\\t\\tExamples: >","\\t\\t\\t:echo sqrt(100)","<\\t\\t\\t10.0 >","\\t\\t\\t:echo sqrt(-4.01)","<\\t\\t\\tnan","\\t\\t\\"nan\\" may be different, it depends on system libraries.",""],"stdioopen":["\\t\\tIn a nvim launched with the |--headless| option, this opens","\\t\\tstdin and stdout as a |channel|. This function can only be","\\t\\tinvoked once per instance. See |channel-stdio| for more","\\t\\tinformation and examples. Note that stderr is not handled by","\\t\\tthis function, see |v:stderr|.","","\\t\\tReturns a |channel| ID. Close the stdio descriptors with |chanclose()|.","\\t\\tUse |chansend()| to send data to stdout, and","\\t\\t|rpcrequest()| and |rpcnotify()| to communicate over RPC.","","\\t\\t{opts} is a dictionary with these keys:","\\t\\t |on_stdin| : callback invoked when stdin is written to.","\\t\\t stdin_buffered : read stdin in |channel-buffered| mode.","\\t\\t rpc : If set, |msgpack-rpc| will be used to communicate","\\t\\t\\t over stdio","\\t\\tReturns:","\\t\\t - The channel ID on success (this is always 1)","\\t\\t - 0 on invalid arguments",""],"stdpath":["\\t\\tReturns |standard-path| locations of various default files and","\\t\\tdirectories.","","\\t\\t{what} Type Description ~","\\t\\tcache String Cache directory. Arbitrary temporary","\\t\\t storage for plugins, etc.","\\t\\tconfig String User configuration directory. The","\\t\\t |init.vim| is stored here.","\\t\\tconfig_dirs List Additional configuration directories.","\\t\\tdata String User data directory. The |shada-file|","\\t\\t is stored here.","\\t\\tdata_dirs List Additional data directories.","","\\t\\tExample: >","\\t\\t\\t:echo stdpath(\\"config\\")",""],"str2float":["\\t\\tConvert String {expr} to a Float. This mostly works the same","\\t\\tas when using a floating point number in an expression, see","\\t\\t|floating-point-format|. But it\'s a bit more permissive.","\\t\\tE.g., \\"1e40\\" is accepted, while in an expression you need to","\\t\\twrite \\"1.0e40\\". The hexadecimal form \\"0x123\\" is also","\\t\\taccepted, but not others, like binary or octal.","\\t\\tText after the number is silently ignored.","\\t\\tThe decimal point is always \'.\', no matter what the locale is","\\t\\tset to. A comma ends the number: \\"12,345.67\\" is converted to","\\t\\t12.0. You can strip out thousands separators with","\\t\\t|substitute()|: >","\\t\\t\\tlet f = str2float(substitute(text, \',\', \'\', \'g\'))"],"str2list":["\\t\\tReturn a list containing the number values which represent","\\t\\teach character in String {expr}. Examples: >","\\t\\t\\tstr2list(\\" \\")\\t\\treturns [32]","\\t\\t\\tstr2list(\\"ABC\\")\\t\\treturns [65, 66, 67]","<\\t\\t|list2str()| does the opposite.","","\\t\\tWhen {utf8} is omitted or zero, the current \'encoding\' is used.","\\t\\tWith {utf8} set to 1, always treat the String as utf-8","\\t\\tcharacters. With utf-8 composing characters are handled","\\t\\tproperly: >","\\t\\t\\tstr2list(\\"á\\")\\t\\treturns [97, 769]"],"str2nr":["\\t\\tConvert string {expr} to a number.","\\t\\t{base} is the conversion base, it can be 2, 8, 10 or 16.","\\t\\tWhen {base} is omitted base 10 is used. This also means that","\\t\\ta leading zero doesn\'t cause octal conversion to be used, as","\\t\\twith the default String to Number conversion.","\\t\\tWhen {base} is 16 a leading \\"0x\\" or \\"0X\\" is ignored. With a","\\t\\tdifferent base the result will be zero. Similarly, when {base}","\\t\\tis 8 a leading \\"0\\" is ignored, and when {base} is 2 a leading","\\t\\t\\"0b\\" or \\"0B\\" is ignored.","\\t\\tText after the number is silently ignored.",""],"strchars":["\\t\\tThe result is a Number, which is the number of characters","\\t\\tin String {expr}.","\\t\\tWhen {skipcc} is omitted or zero, composing characters are","\\t\\tcounted separately.","\\t\\tWhen {skipcc} set to 1, Composing characters are ignored.","\\t\\tAlso see |strlen()|, |strdisplaywidth()| and |strwidth()|.","","\\t\\t{skipcc} is only available after 7.4.755. For backward","\\t\\tcompatibility, you can define a wrapper function: >","\\t\\t if has(\\"patch-7.4.755\\")","\\t\\t function s:strchars(str, skipcc)","\\t\\t\\treturn strchars(a:str, a:skipcc)","\\t\\t endfunction","\\t\\t else","\\t\\t function s:strchars(str, skipcc)","\\t\\t\\tif a:skipcc","\\t\\t\\t return strlen(substitute(a:str, \\".\\", \\"x\\", \\"g\\"))","\\t\\t\\telse","\\t\\t\\t return strchars(a:str)","\\t\\t\\tendif","\\t\\t endfunction","\\t\\t endif"],"strcharpart":["\\t\\tLike |strpart()| but using character index and length instead","\\t\\tof byte index and length.","\\t\\tWhen a character index is used where a character does not","\\t\\texist it is assumed to be one character. For example: >","\\t\\t\\tstrcharpart(\'abc\', -1, 2)","<\\t\\tresults in \'a\'."],"strdisplaywidth":["\\t\\tThe result is a Number, which is the number of display cells","\\t\\tString {expr} occupies on the screen when it starts at {col}","\\t\\t(first column is zero). When {col} is omitted zero is used.","\\t\\tOtherwise it is the screen column where to start. This","\\t\\tmatters for Tab characters.","\\t\\tThe option settings of the current window are used. This","\\t\\tmatters for anything that\'s displayed differently, such as","\\t\\t\'tabstop\' and \'display\'.","\\t\\tWhen {expr} contains characters with East Asian Width Class","\\t\\tAmbiguous, this function\'s return value depends on \'ambiwidth\'.","\\t\\tAlso see |strlen()|, |strwidth()| and |strchars()|."],"strftime":["\\t\\tThe result is a String, which is a formatted date and time, as","\\t\\tspecified by the {format} string. The given {time} is used,","\\t\\tor the current time if no time is given. The accepted","\\t\\t{format} depends on your system, thus this is not portable!","\\t\\tSee the manual page of the C function strftime() for the","\\t\\tformat. The maximum length of the result is 80 characters.","\\t\\tSee also |localtime()| and |getftime()|.","\\t\\tThe language can be changed with the |:language| command.","\\t\\tExamples: >","\\t\\t :echo strftime(\\"%c\\")\\t\\t Sun Apr 27 11:49:23 1997","\\t\\t :echo strftime(\\"%Y %b %d %X\\")\\t 1997 Apr 27 11:53:25","\\t\\t :echo strftime(\\"%y%m%d %T\\")\\t 970427 11:53:55","\\t\\t :echo strftime(\\"%H:%M\\")\\t 11:55","\\t\\t :echo strftime(\\"%c\\", getftime(\\"file.c\\"))","\\t\\t\\t\\t\\t\\t Show mod time of file.c.","<\\t\\tNot available on all systems. To check use: >","\\t\\t\\t:if exists(\\"*strftime\\")"],"strgetchar":["\\t\\tGet character {index} from {str}. This uses a character","\\t\\tindex, not a byte index. Composing characters are considered","\\t\\tseparate characters here.","\\t\\tAlso see |strcharpart()| and |strchars()|."],"stridx":["\\t\\tThe result is a Number, which gives the byte index in","\\t\\t{haystack} of the first occurrence of the String {needle}.","\\t\\tIf {start} is specified, the search starts at index {start}.","\\t\\tThis can be used to find a second match: >","\\t\\t\\t:let colon1 = stridx(line, \\":\\")","\\t\\t\\t:let colon2 = stridx(line, \\":\\", colon1 + 1)","<\\t\\tThe search is done case-sensitive.","\\t\\tFor pattern searches use |match()|.","\\t\\t-1 is returned if the {needle} does not occur in {haystack}.","\\t\\tSee also |strridx()|.","\\t\\tExamples: >","\\t\\t :echo stridx(\\"An Example\\", \\"Example\\")\\t 3","\\t\\t :echo stridx(\\"Starting point\\", \\"Start\\") 0","\\t\\t :echo stridx(\\"Starting point\\", \\"start\\") -1","<\\t\\t\\t\\t\\t\\t*strstr()* *strchr()*","\\t\\tstridx() works similar to the C function strstr(). When used","\\t\\twith a single character it works similar to strchr().",""],"string":["\\t\\tFloat, String or a composition of them, then the result can be","\\t\\tparsed back with |eval()|.","\\t\\t\\t{expr} type\\tresult ~","\\t\\t\\tString\\t\\t\'string\'","\\t\\t\\tNumber\\t\\t123","\\t\\t\\tFloat\\t\\t123.123456 or 1.123456e8 or","\\t\\t\\t\\t\\t`str2float(\'inf\')`","\\t\\t\\tFuncref\\t\\t`function(\'name\')`","\\t\\t\\tList\\t\\t[item, item]","\\t\\t\\tDictionary\\t{key: value, key: value}","\\t\\tNote that in String values the \' character is doubled.","\\t\\tAlso see |strtrans()|.","\\t\\tNote 2: Output format is mostly compatible with YAML, except","\\t\\tfor infinite and NaN floating-point values representations","\\t\\twhich use |str2float()|. Strings are also dumped literally,","\\t\\tonly single quote is escaped, which does not allow using YAML","\\t\\tfor parsing back binary strings. |eval()| should always work for","\\t\\tstrings and floats though and this is the only official","\\t\\tmethod, use |msgpackdump()| or |json_encode()| if you need to","\\t\\tshare data with other application.",""],"strlen":["\\t\\t{expr} in bytes.","\\t\\tIf the argument is a Number it is first converted to a String.","\\t\\tFor other types an error is given.","\\t\\tIf you want to count the number of multi-byte characters use","\\t\\t|strchars()|.","\\t\\tAlso see |len()|, |strdisplaywidth()| and |strwidth()|."],"strpart":["\\t\\tThe result is a String, which is part of {src}, starting from","\\t\\tbyte {start}, with the byte length {len}.","\\t\\tTo count characters instead of bytes use |strcharpart()|.","","\\t\\tWhen bytes are selected which do not exist, this doesn\'t","\\t\\tresult in an error, the bytes are simply omitted.","\\t\\tIf {len} is missing, the copy continues from {start} till the","\\t\\tend of the {src}. >","\\t\\t\\tstrpart(\\"abcdefg\\", 3, 2) == \\"de\\"","\\t\\t\\tstrpart(\\"abcdefg\\", -2, 4) == \\"ab\\"","\\t\\t\\tstrpart(\\"abcdefg\\", 5, 4) == \\"fg\\"","\\t\\t\\tstrpart(\\"abcdefg\\", 3)\\t == \\"defg\\"","","<\\t\\tNote: To get the first character, {start} must be 0. For","\\t\\texample, to get three bytes under and after the cursor: >","\\t\\t\\tstrpart(getline(\\".\\"), col(\\".\\") - 1, 3)"],"strridx":["\\t\\tThe result is a Number, which gives the byte index in","\\t\\t{haystack} of the last occurrence of the String {needle}.","\\t\\tWhen {start} is specified, matches beyond this index are","\\t\\tignored. This can be used to find a match before a previous","\\t\\tmatch: >","\\t\\t\\t:let lastcomma = strridx(line, \\",\\")","\\t\\t\\t:let comma2 = strridx(line, \\",\\", lastcomma - 1)","<\\t\\tThe search is done case-sensitive.","\\t\\tFor pattern searches use |match()|.","\\t\\t-1 is returned if the {needle} does not occur in {haystack}.","\\t\\tIf the {needle} is empty the length of {haystack} is returned.","\\t\\tSee also |stridx()|. Examples: >","\\t\\t :echo strridx(\\"an angry armadillo\\", \\"an\\")\\t 3","<\\t\\t\\t\\t\\t\\t\\t*strrchr()*","\\t\\tWhen used with a single character it works similar to the C","\\t\\tfunction strrchr()."],"strtrans":["\\t\\tThe result is a String, which is {expr} with all unprintable","\\t\\tcharacters translated into printable characters |\'isprint\'|.","\\t\\tLike they are shown in a window. Example: >","\\t\\t\\techo strtrans(@a)","<\\t\\tThis displays a newline in register a as \\"^@\\" instead of","\\t\\tstarting a new line."],"strwidth":["\\t\\tThe result is a Number, which is the number of display cells","\\t\\tString {expr} occupies. A Tab character is counted as one","\\t\\tcell, alternatively use |strdisplaywidth()|.","\\t\\tWhen {expr} contains characters with East Asian Width Class","\\t\\tAmbiguous, this function\'s return value depends on \'ambiwidth\'.","\\t\\tAlso see |strlen()|, |strdisplaywidth()| and |strchars()|."],"submatch":["\\t\\tOnly for an expression in a |:substitute| command or","\\t\\tsubstitute() function.","\\t\\tReturns the {nr}\'th submatch of the matched text. When {nr}","\\t\\tis 0 the whole matched text is returned.","\\t\\tNote that a NL in the string can stand for a line break of a","\\t\\tmulti-line match or a NUL character in the text.","\\t\\tAlso see |sub-replace-expression|.","","\\t\\tIf {list} is present and non-zero then submatch() returns","\\t\\ta list of strings, similar to |getline()| with two arguments.","\\t\\tNL characters in the text represent NUL characters in the","\\t\\ttext.","\\t\\tOnly returns more than one item for |:substitute|, inside","\\t\\t|substitute()| this list will always contain one or zero","\\t\\titems, since there are no real line breaks.","","\\t\\tWhen substitute() is used recursively only the submatches in","\\t\\tthe current (deepest) call can be obtained.","","\\t\\tExamples: >","\\t\\t\\t:s/\\\\d\\\\+/\\\\=submatch(0) + 1/","\\t\\t\\t:echo substitute(text, \'\\\\d\\\\+\', \'\\\\=submatch(0) + 1\', \'\')","<\\t\\tThis finds the first number in the line and adds one to it.","\\t\\tA line break is included as a newline character."],"substitute":["\\t\\tThe result is a String, which is a copy of {expr}, in which","\\t\\tthe first match of {pat} is replaced with {sub}.","\\t\\tWhen {flags} is \\"g\\", all matches of {pat} in {expr} are","\\t\\treplaced. Otherwise {flags} should be \\"\\".","","\\t\\tThis works like the \\":substitute\\" command (without any flags).","\\t\\tBut the matching with {pat} is always done like the \'magic\'","\\t\\toption is set and \'cpoptions\' is empty (to make scripts","\\t\\tportable). \'ignorecase\' is still relevant, use |/\\\\c| or |/\\\\C|","\\t\\tif you want to ignore or match case and ignore \'ignorecase\'.","\\t\\t\'smartcase\' is not used. See |string-match| for how {pat} is","\\t\\tused.","","\\t\\tA \\"~\\" in {sub} is not replaced with the previous {sub}.","\\t\\tNote that some codes in {sub} have a special meaning","\\t\\t|sub-replace-special|. For example, to replace something with","\\t\\t\\"\\\\n\\" (two characters), use \\"\\\\\\\\\\\\\\\\n\\" or \'\\\\\\\\n\'.","","\\t\\tWhen {pat} does not match in {expr}, {expr} is returned","\\t\\tunmodified.","","\\t\\tExample: >","\\t\\t\\t:let &path = substitute(&path, \\",\\\\\\\\=[^,]*$\\", \\"\\", \\"\\")","<\\t\\tThis removes the last component of the \'path\' option. >","\\t\\t\\t:echo substitute(\\"testing\\", \\".*\\", \\"\\\\\\\\U\\\\\\\\0\\", \\"\\")","<\\t\\tresults in \\"TESTING\\".","","\\t\\tWhen {sub} starts with \\"\\\\=\\", the remainder is interpreted as","\\t\\tan expression. See |sub-replace-expression|. Example: >","\\t\\t\\t:echo substitute(s, \'%\\\\(\\\\x\\\\x\\\\)\',","\\t\\t\\t \\\\ \'\\\\=nr2char(\\"0x\\" . submatch(1))\', \'g\')","","<\\t\\tWhen {sub} is a Funcref that function is called, with one","\\t\\toptional argument. Example: >","\\t\\t :echo substitute(s, \'%\\\\(\\\\x\\\\x\\\\)\', SubNr, \'g\')","<\\t\\tThe optional argument is a list which contains the whole","\\t\\tmatched string and up to nine submatches, like what","\\t\\t|submatch()| returns. Example: >","\\t\\t :echo substitute(s, \'%\\\\(\\\\x\\\\x\\\\)\', {m -> \'0x\' . m[1]}, \'g\')"],"swapinfo":["\\t\\tThe result is a dictionary, which holds information about the","\\t\\tswapfile {fname}. The available fields are:","\\t\\t\\tversion VIM version","\\t\\t\\tuser\\tuser name","\\t\\t\\thost\\thost name","\\t\\t\\tfname\\toriginal file name","\\t\\t\\tpid\\tPID of the VIM process that created the swap","\\t\\t\\t\\tfile","\\t\\t\\tmtime\\tlast modification time in seconds","\\t\\t\\tinode\\tOptional: INODE number of the file","\\t\\t\\tdirty\\t1 if file was modified, 0 if not","\\t\\tIn case of failure an \\"error\\" item is added with the reason:","\\t\\t\\tCannot open file: file not found or in accessible","\\t\\t\\tCannot read file: cannot read first block","\\t\\t\\tNot a swap file: does not contain correct block ID","\\t\\t\\tMagic number mismatch: Info in first block is invalid"],"swapname":["\\t\\tThe result is the swap file path of the buffer {expr}.","\\t\\tFor the use of {expr}, see |bufname()| above.","\\t\\tIf buffer {expr} is the current buffer, the result is equal to","\\t\\t|:swapname| (unless no swap file).","\\t\\tIf buffer {expr} has no swap file, returns an empty string."],"synID":["\\t\\tThe result is a Number, which is the syntax ID at the position","\\t\\t{lnum} and {col} in the current window.","\\t\\tThe syntax ID can be used with |synIDattr()| and","\\t\\t|synIDtrans()| to obtain syntax information about text.","","\\t\\t{col} is 1 for the leftmost column, {lnum} is 1 for the first","\\t\\tline. \'synmaxcol\' applies, in a longer line zero is returned.","\\t\\tNote that when the position is after the last character,","\\t\\tthat\'s where the cursor can be in Insert mode, synID() returns","\\t\\tzero.","","\\t\\tWhen {trans} is |TRUE|, transparent items are reduced to the","\\t\\titem that they reveal. This is useful when wanting to know","\\t\\tthe effective color. When {trans} is |FALSE|, the transparent","\\t\\titem is returned. This is useful when wanting to know which","\\t\\tsyntax item is effective (e.g. inside parens).","\\t\\tWarning: This function can be very slow. Best speed is","\\t\\tobtained by going through the file in forward direction.","","\\t\\tExample (echoes the name of the syntax item under the cursor): >","\\t\\t\\t:echo synIDattr(synID(line(\\".\\"), col(\\".\\"), 1), \\"name\\")","<"],"synIDattr":["\\t\\tThe result is a String, which is the {what} attribute of","\\t\\tsyntax ID {synID}. This can be used to obtain information","\\t\\tabout a syntax item.","\\t\\t{mode} can be \\"gui\\", \\"cterm\\" or \\"term\\", to get the attributes","\\t\\tfor that mode. When {mode} is omitted, or an invalid value is","\\t\\tused, the attributes for the currently active highlighting are","\\t\\tused (GUI, cterm or term).","\\t\\tUse synIDtrans() to follow linked highlight groups.","\\t\\t{what}\\t\\tresult","\\t\\t\\"name\\"\\t\\tthe name of the syntax item","\\t\\t\\"fg\\"\\t\\tforeground color (GUI: color name used to set","\\t\\t\\t\\tthe color, cterm: color number as a string,","\\t\\t\\t\\tterm: empty string)","\\t\\t\\"bg\\"\\t\\tbackground color (as with \\"fg\\")","\\t\\t\\"font\\"\\t\\tfont name (only available in the GUI)","\\t\\t\\t\\t|highlight-font|","\\t\\t\\"sp\\"\\t\\tspecial color (as with \\"fg\\") |highlight-guisp|","\\t\\t\\"fg#\\"\\t\\tlike \\"fg\\", but for the GUI and the GUI is","\\t\\t\\t\\trunning the name in \\"#RRGGBB\\" form","\\t\\t\\"bg#\\"\\t\\tlike \\"fg#\\" for \\"bg\\"","\\t\\t\\"sp#\\"\\t\\tlike \\"fg#\\" for \\"sp\\"","\\t\\t\\"bold\\"\\t\\t\\"1\\" if bold","\\t\\t\\"italic\\"\\t\\"1\\" if italic","\\t\\t\\"reverse\\"\\t\\"1\\" if reverse","\\t\\t\\"inverse\\"\\t\\"1\\" if inverse (= reverse)","\\t\\t\\"standout\\"\\t\\"1\\" if standout","\\t\\t\\"underline\\"\\t\\"1\\" if underlined","\\t\\t\\"undercurl\\"\\t\\"1\\" if undercurled","\\t\\t\\"strikethrough\\"\\t\\"1\\" if struckthrough","","\\t\\tExample (echoes the color of the syntax item under the","\\t\\tcursor): >","\\t:echo synIDattr(synIDtrans(synID(line(\\".\\"), col(\\".\\"), 1)), \\"fg\\")"],"synIDtrans":["\\t\\tThe result is a Number, which is the translated syntax ID of","\\t\\t{synID}. This is the syntax group ID of what is being used to","\\t\\thighlight the character. Highlight links given with","\\t\\t\\":highlight link\\" are followed."],"synconcealed":["\\t\\tThe result is a List with currently three items:","\\t\\t1. The first item in the list is 0 if the character at the","\\t\\t position {lnum} and {col} is not part of a concealable","\\t\\t region, 1 if it is.","\\t\\t2. The second item in the list is a string. If the first item","\\t\\t is 1, the second item contains the text which will be","\\t\\t displayed in place of the concealed text, depending on the","\\t\\t current setting of \'conceallevel\' and \'listchars\'.","\\t\\t3. The third and final item in the list is a number","\\t\\t representing the specific syntax region matched in the","\\t\\t line. When the character is not concealed the value is","\\t\\t zero. This allows detection of the beginning of a new","\\t\\t concealable region if there are two consecutive regions","\\t\\t with the same replacement character. For an example, if","\\t\\t the text is \\"123456\\" and both \\"23\\" and \\"45\\" are concealed","\\t\\t and replaced by the character \\"X\\", then:","\\t\\t\\tcall\\t\\t\\treturns ~","\\t\\t \\tsynconcealed(lnum, 1) [0, \'\', 0]","\\t\\t \\tsynconcealed(lnum, 2) [1, \'X\', 1]","\\t\\t \\tsynconcealed(lnum, 3) [1, \'X\', 1]","\\t\\t \\tsynconcealed(lnum, 4) [1, \'X\', 2]","\\t\\t \\tsynconcealed(lnum, 5) [1, \'X\', 2]","\\t\\t \\tsynconcealed(lnum, 6) [0, \'\', 0]",""],"synstack":["\\t\\tReturn a |List|, which is the stack of syntax items at the","\\t\\tposition {lnum} and {col} in the current window. Each item in","\\t\\tthe List is an ID like what |synID()| returns.","\\t\\tThe first item in the List is the outer region, following are","\\t\\titems contained in that one. The last one is what |synID()|","\\t\\treturns, unless not the whole item is highlighted or it is a","\\t\\ttransparent item.","\\t\\tThis function is useful for debugging a syntax file.","\\t\\tExample that shows the syntax stack under the cursor: >","\\t\\t\\tfor id in synstack(line(\\".\\"), col(\\".\\"))","\\t\\t\\t echo synIDattr(id, \\"name\\")","\\t\\t\\tendfor","<\\t\\tWhen the position specified with {lnum} and {col} is invalid","\\t\\tnothing is returned. The position just after the last","\\t\\tcharacter in a line and the first column in an empty line are","\\t\\tvalid positions."],"system":["\\t\\tGet the output of {cmd} as a |string| (use |systemlist()| to","\\t\\tget a |List|). {cmd} is treated exactly as in |jobstart()|.","\\t\\tNot to be used for interactive commands.","","\\t\\tIf {input} is a string it is written to a pipe and passed as","\\t\\tstdin to the command. The string is written as-is, line","\\t\\tseparators are not changed.","\\t\\tIf {input} is a |List| it is written to the pipe as","\\t\\t|writefile()| does with {binary} set to \\"b\\" (i.e. with","\\t\\ta newline between each list item, and newlines inside list","\\t\\titems converted to NULs).","\\t\\tWhen {input} is given and is a valid buffer id, the content of","\\t\\tthe buffer is written to the file line by line, each line","\\t\\tterminated by NL (and NUL where the text has NL).","\\t\\t\\t\\t\\t\\t\\t\\t*E5677*","\\t\\tNote: system() cannot write to or read from backgrounded (\\"&\\")","\\t\\tshell commands, e.g.: >","\\t\\t :echo system(\\"cat - &\\", \\"foo\\"))","<\\t\\twhich is equivalent to: >","\\t\\t $ echo foo | bash -c \'cat - &\'","<\\t\\tThe pipes are disconnected (unless overridden by shell","\\t\\tredirection syntax) before input can reach it. Use","\\t\\t|jobstart()| instead.","","\\t\\tNote: Use |shellescape()| or |::S| with |expand()| or","\\t\\t|fnamemodify()| to escape special characters in a command","\\t\\targument. Newlines in {cmd} may cause the command to fail. ","\\t\\tThe characters in \'shellquote\' and \'shellxquote\' may also","\\t\\tcause trouble.","","\\t\\tResult is a String. Example: >","\\t\\t :let files = system(\\"ls \\" . shellescape(expand(\'%:h\')))","\\t\\t :let files = system(\'ls \' . expand(\'%:h:S\'))","","<\\t\\tTo make the result more system-independent, the shell output","\\t\\tis filtered to replace <CR> with <NL> for Macintosh, and","\\t\\t<CR><NL> with <NL> for DOS-like systems.","\\t\\tTo avoid the string being truncated at a NUL, all NUL","\\t\\tcharacters are replaced with SOH (0x01).","","\\t\\tThe command executed is constructed using several options when","\\t\\t{cmd} is a string: \'shell\' \'shellcmdflag\' {cmd}","","\\t\\tThe resulting error code can be found in |v:shell_error|.","\\t\\tThis function will fail in |restricted-mode|.","","\\t\\tNote that any wrong value in the options mentioned above may","\\t\\tmake the function fail. It has also been reported to fail","\\t\\twhen using a security agent application.","\\t\\tUnlike \\":!cmd\\" there is no automatic check for changed files.","\\t\\tUse |:checktime| to force a check.",""],"systemlist":["\\t\\tSame as |system()|, but returns a |List| with lines (parts of","\\t\\toutput separated by NL) with NULs transformed into NLs. Output","\\t\\tis the same as |readfile()| will output with {binary} argument","\\t\\tset to \\"b\\", except that a final newline is not preserved,","\\t\\tunless {keepempty} is non-zero.","\\t\\tNote that on MS-Windows you may get trailing CR characters.","","\\t\\tReturns an empty string on error.",""],"tabpagebuflist":["\\t\\tThe result is a |List|, where each item is the number of the","\\t\\tbuffer associated with each window in the current tab page.","\\t\\t{arg} specifies the number of the tab page to be used. When","\\t\\tomitted the current tab page is used.","\\t\\tWhen {arg} is invalid the number zero is returned.","\\t\\tTo get a list of all buffers in all tabs use this: >","\\t\\t\\tlet buflist = []","\\t\\t\\tfor i in range(tabpagenr(\'$\'))","\\t\\t\\t call extend(buflist, tabpagebuflist(i + 1))","\\t\\t\\tendfor","<\\t\\tNote that a buffer may appear in more than one window.",""],"tabpagenr":["\\t\\tThe result is a Number, which is the number of the current","\\t\\ttab page. The first tab page has number 1.","\\t\\tThe optional argument {arg} supports the following values:","\\t\\t\\t$\\tthe number of the last tab page (the tab page","\\t\\t\\t\\tcount).","\\t\\t\\t#\\tthe number of the last accessed tab page (where","\\t\\t\\t\\t|g<Tab>| goes to). If there is no previous","\\t\\t\\t\\ttab page, 0 is returned.","\\t\\tThe number can be used with the |:tab| command.",""],"tabpagewinnr":["\\t\\tLike |winnr()| but for tab page {tabarg}.","\\t\\t{tabarg} specifies the number of tab page to be used.","\\t\\t{arg} is used like with |winnr()|:","\\t\\t- When omitted the current window number is returned. This is","\\t\\t the window which will be used when going to this tab page.","\\t\\t- When \\"$\\" the number of windows is returned.","\\t\\t- When \\"#\\" the previous window nr is returned.","\\t\\tUseful examples: >","\\t\\t tabpagewinnr(1)\\t \\" current window of tab page 1","\\t\\t tabpagewinnr(4, \'$\') \\" number of windows in tab page 4","<\\t\\tWhen {tabarg} is invalid zero is returned.",""],"tagfiles":["\\t\\tfor the current buffer. This is the \'tags\' option expanded.",""],"taglist":["\\t\\tReturns a list of tags matching the regular expression {expr}.","","\\t\\tIf {filename} is passed it is used to prioritize the results","\\t\\tin the same way that |:tselect| does. See |tag-priority|.","\\t\\t{filename} should be the full path of the file.","","\\t\\tEach list item is a dictionary with at least the following","\\t\\tentries:","\\t\\t\\tname\\t\\tName of the tag.","\\t\\t\\tfilename\\tName of the file where the tag is","\\t\\t\\t\\t\\tdefined. It is either relative to the","\\t\\t\\t\\t\\tcurrent directory or a full path.","\\t\\t\\tcmd\\t\\tEx command used to locate the tag in","\\t\\t\\t\\t\\tthe file.","\\t\\t\\tkind\\t\\tType of the tag. The value for this","\\t\\t\\t\\t\\tentry depends on the language specific","\\t\\t\\t\\t\\tkind values. Only available when","\\t\\t\\t\\t\\tusing a tags file generated by","\\t\\t\\t\\t\\tExuberant ctags or hdrtag.","\\t\\t\\tstatic\\t\\tA file specific tag. Refer to","\\t\\t\\t\\t\\t|static-tag| for more information.","\\t\\tMore entries may be present, depending on the content of the","\\t\\ttags file: access, implementation, inherits and signature.","\\t\\tRefer to the ctags documentation for information about these","\\t\\tfields. For C code the fields \\"struct\\", \\"class\\" and \\"enum\\"","\\t\\tmay appear, they give the name of the entity the tag is","\\t\\tcontained in.","","\\t\\tThe ex-command \\"cmd\\" can be either an ex search pattern, a","\\t\\tline number or a line number followed by a byte number.","","\\t\\tIf there are no matching tags, then an empty list is returned.","","\\t\\tTo get an exact tag match, the anchors \'^\' and \'$\' should be","\\t\\tused in {expr}. This also make the function work faster.","\\t\\tRefer to |tag-regexp| for more information about the tag","\\t\\tsearch regular expression pattern.","","\\t\\tRefer to |\'tags\'| for information about how the tags file is","\\t\\tlocated by Vim. Refer to |tags-file-format| for the format of","\\t\\tthe tags file generated by the different ctags tools."],"tempname":["\\t\\tThe result is a String, which is the name of a file that","\\t\\tdoesn\'t exist. It can be used for a temporary file. Example: >","\\t\\t\\t:let tmpfile = tempname()","\\t\\t\\t:exe \\"redir > \\" . tmpfile","<\\t\\tFor Unix, the file will be in a private directory |tempfile|.","\\t\\tFor MS-Windows forward slashes are used when the \'shellslash\'","\\t\\toption is set or when \'shellcmdflag\' starts with \'-\'."],"termopen":["\\t\\tSpawns {cmd} in a new pseudo-terminal session connected","\\t\\tto the current buffer. {cmd} is the same as the one passed to","\\t\\t|jobstart()|. This function fails if the current buffer is","\\t\\tmodified (all buffer contents are destroyed).","","\\t\\tThe {opts} dict is similar to the one passed to |jobstart()|,","\\t\\tbut the `pty`, `width`, `height`, and `TERM` fields are","\\t\\tignored: `height`/`width` are taken from the current window","\\t\\tand `$TERM` is set to \\"xterm-256color\\".","\\t\\tReturns the same values as |jobstart()|.","","\\t\\tSee |terminal| for more information."],"test_garbagecollect_now":["\\t\\tLike |garbagecollect()|, but executed right away. This must","\\t\\tonly be called directly to avoid any structure to exist","\\t\\tinternally, and |v:testing| must have been set before calling","\\t\\tany function."],"tan":["\\t\\tReturn the tangent of {expr}, measured in radians, as a |Float|","\\t\\tin the range [-inf, inf].","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo tan(10)","<\\t\\t\\t0.648361 >","\\t\\t\\t:echo tan(-4.01)","<\\t\\t\\t-1.181502",""],"tanh":["\\t\\tReturn the hyperbolic tangent of {expr} as a |Float| in the","\\t\\trange [-1, 1].","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\t:echo tanh(0.5)","<\\t\\t\\t0.462117 >","\\t\\t\\t:echo tanh(-1)","<\\t\\t\\t-0.761594","",""],"timer_info":["\\t\\tReturn a list with information about timers.","\\t\\tWhen {id} is given only information about this timer is","\\t\\treturned. When timer {id} does not exist an empty list is","\\t\\treturned.","\\t\\tWhen {id} is omitted information about all timers is returned.","","\\t\\tFor each timer the information is stored in a Dictionary with","\\t\\tthese items:","\\t\\t \\"id\\"\\t the timer ID","\\t\\t \\"time\\"\\t time the timer was started with","\\t\\t \\"repeat\\"\\t number of times the timer will still fire;","\\t\\t\\t\\t -1 means forever","\\t\\t \\"callback\\"\\t the callback"],"timer_pause":["\\t\\tPause or unpause a timer. A paused timer does not invoke its","\\t\\tcallback when its time expires. Unpausing a timer may cause","\\t\\tthe callback to be invoked almost immediately if enough time","\\t\\thas passed.","","\\t\\tPausing a timer is useful to avoid the callback to be called","\\t\\tfor a short time.","","\\t\\tIf {paused} evaluates to a non-zero Number or a non-empty","\\t\\tString, then the timer is paused, otherwise it is unpaused.","\\t\\tSee |non-zero-arg|.",""],"timer_start":["\\t\\tCreate a timer and return the timer ID.","","\\t\\t{time} is the waiting time in milliseconds. This is the","\\t\\tminimum time before invoking the callback. When the system is","\\t\\tbusy or Vim is not waiting for input the time will be longer.","","\\t\\t{callback} is the function to call. It can be the name of a","\\t\\tfunction or a |Funcref|. It is called with one argument, which","\\t\\tis the timer ID. The callback is only invoked when Vim is","\\t\\twaiting for input.","","\\t\\t{options} is a dictionary. Supported entries:","\\t\\t \\"repeat\\"\\tNumber of times to repeat the callback.","\\t\\t\\t\\t-1 means forever. Default is 1.","\\t\\t\\t\\tIf the timer causes an error three times in a","\\t\\t\\t\\trow the repeat is cancelled.","","\\t\\tExample: >","\\t\\t\\tfunc MyHandler(timer)","\\t\\t\\t echo \'Handler called\'","\\t\\t\\tendfunc","\\t\\t\\tlet timer = timer_start(500, \'MyHandler\',","\\t\\t\\t\\t\\\\ {\'repeat\': 3})","<\\t\\tThis invokes MyHandler() three times at 500 msec intervals."],"timer_stop":["\\t\\tStop a timer. The timer callback will no longer be invoked.","\\t\\t{timer} is an ID returned by timer_start(), thus it must be a","\\t\\tNumber. If {timer} does not exist there is no error."],"timer_stopall":["\\t\\tStop all timers. The timer callbacks will no longer be","\\t\\tinvoked. Useful if some timers is misbehaving. If there are","\\t\\tno timers there is no error."],"tolower":["\\t\\tThe result is a copy of the String given, with all uppercase","\\t\\tcharacters turned into lowercase (just like applying |gu| to","\\t\\tthe string)."],"toupper":["\\t\\tThe result is a copy of the String given, with all lowercase","\\t\\tcharacters turned into uppercase (just like applying |gU| to","\\t\\tthe string)."],"tr":["\\t\\tThe result is a copy of the {src} string with all characters","\\t\\twhich appear in {fromstr} replaced by the character in that","\\t\\tposition in the {tostr} string. Thus the first character in","\\t\\t{fromstr} is translated into the first character in {tostr}","\\t\\tand so on. Exactly like the unix \\"tr\\" command.","\\t\\tThis code also deals with multibyte characters properly.","","\\t\\tExamples: >","\\t\\t\\techo tr(\\"hello there\\", \\"ht\\", \\"HT\\")","<\\t\\treturns \\"Hello THere\\" >","\\t\\t\\techo tr(\\"<blob>\\", \\"<>\\", \\"{}\\")","<\\t\\treturns \\"{blob}\\""],"trim":["\\t\\tReturn {text} as a String where any character in {mask} is","\\t\\tremoved from the beginning and end of {text}.","\\t\\tIf {mask} is not given, {mask} is all characters up to 0x20,","\\t\\twhich includes Tab, space, NL and CR, plus the non-breaking","\\t\\tspace character 0xa0.","\\t\\tThis code deals with multibyte characters properly.","","\\t\\tExamples: >","\\t\\t\\techo trim(\\" some text \\")","<\\t\\treturns \\"some text\\" >","\\t\\t\\techo trim(\\" \\\\r\\\\t\\\\t\\\\r RESERVE \\\\t\\\\n\\\\x0B\\\\xA0\\") . \\"_TAIL\\"","<\\t\\treturns \\"RESERVE_TAIL\\" >","\\t\\t\\techo trim(\\"rm<Xrm<>X>rrm\\", \\"rm<>\\")","<\\t\\treturns \\"Xrm<>X\\" (characters in the middle are not removed)"],"trunc":["\\t\\tReturn the largest integral value with magnitude less than or","\\t\\tequal to {expr} as a |Float| (truncate towards zero).","\\t\\t{expr} must evaluate to a |Float| or a |Number|.","\\t\\tExamples: >","\\t\\t\\techo trunc(1.456)","<\\t\\t\\t1.0 >","\\t\\t\\techo trunc(-5.456)","<\\t\\t\\t-5.0 >","\\t\\t\\techo trunc(4.0)","<\\t\\t\\t4.0"],"type":["\\t\\tThe result is a Number representing the type of {expr}.","\\t\\tInstead of using the number directly, it is better to use the","\\t\\tv:t_ variable that has the value:","\\t\\t Number: 0 (|v:t_number|)","\\t\\t\\tString: 1 (|v:t_string|)","\\t\\t\\tFuncref: 2 (|v:t_func|)","\\t\\t\\tList: 3 (|v:t_list|)","\\t\\t\\tDictionary: 4 (|v:t_dict|)","\\t\\t\\tFloat: 5 (|v:t_float|)","\\t\\t\\tBoolean: 6 (|v:true| and |v:false|)","\\t\\t\\tNull: 7 (|v:null|)","\\t\\tFor backward compatibility, this method can be used: >","\\t\\t\\t:if type(myvar) == type(0)","\\t\\t\\t:if type(myvar) == type(\\"\\")","\\t\\t\\t:if type(myvar) == type(function(\\"tr\\"))","\\t\\t\\t:if type(myvar) == type([])","\\t\\t\\t:if type(myvar) == type({})","\\t\\t\\t:if type(myvar) == type(0.0)","\\t\\t\\t:if type(myvar) == type(v:true)","<\\t\\tIn place of checking for |v:null| type it is better to check","\\t\\tfor |v:null| directly as it is the only value of this type: >","\\t\\t\\t:if myvar is v:null","< To check if the v:t_ variables exist use this: >"," :if exists(\'v:t_number\')"],"undofile":["\\t\\tReturn the name of the undo file that would be used for a file","\\t\\twith name {name} when writing. This uses the \'undodir\'","\\t\\toption, finding directories that exist. It does not check if","\\t\\tthe undo file exists.","\\t\\t{name} is always expanded to the full path, since that is what","\\t\\tis used internally.","\\t\\tIf {name} is empty undofile() returns an empty string, since a","\\t\\tbuffer without a file name will not write an undo file.","\\t\\tUseful in combination with |:wundo| and |:rundo|.","\\t\\tWhen compiled without the |+persistent_undo| option this always","\\t\\treturns an empty string."],"undotree":["\\t\\tReturn the current state of the undo tree in a dictionary with","\\t\\tthe following items:","\\t\\t \\"seq_last\\"\\tThe highest undo sequence number used.","\\t\\t \\"seq_cur\\"\\tThe sequence number of the current position in","\\t\\t\\t\\tthe undo tree. This differs from \\"seq_last\\"","\\t\\t\\t\\twhen some changes were undone.","\\t\\t \\"time_cur\\"\\tTime last used for |:earlier| and related","\\t\\t\\t\\tcommands. Use |strftime()| to convert to","\\t\\t\\t\\tsomething readable.","\\t\\t \\"save_last\\"\\tNumber of the last file write. Zero when no","\\t\\t\\t\\twrite yet.","\\t\\t \\"save_cur\\"\\tNumber of the current position in the undo","\\t\\t\\t\\ttree.","\\t\\t \\"synced\\"\\tNon-zero when the last undo block was synced.","\\t\\t\\t\\tThis happens when waiting from input from the","\\t\\t\\t\\tuser. See |undo-blocks|.","\\t\\t \\"entries\\"\\tA list of dictionaries with information about","\\t\\t\\t\\tundo blocks.","","\\t\\tThe first item in the \\"entries\\" list is the oldest undo item.","\\t\\tEach List item is a Dictionary with these items:","\\t\\t \\"seq\\"\\t\\tUndo sequence number. Same as what appears in","\\t\\t\\t\\t|:undolist|.","\\t\\t \\"time\\"\\tTimestamp when the change happened. Use","\\t\\t\\t\\t|strftime()| to convert to something readable.","\\t\\t \\"newhead\\"\\tOnly appears in the item that is the last one","\\t\\t\\t\\tthat was added. This marks the last change","\\t\\t\\t\\tand where further changes will be added.","\\t\\t \\"curhead\\"\\tOnly appears in the item that is the last one","\\t\\t\\t\\tthat was undone. This marks the current","\\t\\t\\t\\tposition in the undo tree, the block that will","\\t\\t\\t\\tbe used by a redo command. When nothing was","\\t\\t\\t\\tundone after the last change this item will","\\t\\t\\t\\tnot appear anywhere.","\\t\\t \\"save\\"\\tOnly appears on the last block before a file","\\t\\t\\t\\twrite. The number is the write count. The","\\t\\t\\t\\tfirst write has number 1, the last one the","\\t\\t\\t\\t\\"save_last\\" mentioned above.","\\t\\t \\"alt\\"\\t\\tAlternate entry. This is again a List of undo","\\t\\t\\t\\tblocks. Each item may again have an \\"alt\\"","\\t\\t\\t\\titem."],"uniq":["\\t\\tRemove second and succeeding copies of repeated adjacent","\\t\\t{list} items in-place. Returns {list}. If you want a list","\\t\\tto remain unmodified make a copy first: >","\\t\\t\\t:let newlist = uniq(copy(mylist))","<\\t\\tThe default compare function uses the string representation of","\\t\\teach item. For the use of {func} and {dict} see |sort()|."],"values":["\\t\\tReturn a |List| with all the values of {dict}. The |List| is","\\t\\tin arbitrary order.",""],"virtcol":["\\t\\tThe result is a Number, which is the screen column of the file","\\t\\tposition given with {expr}. That is, the last screen position","\\t\\toccupied by the character at that position, when the screen","\\t\\twould be of unlimited width. When there is a <Tab> at the","\\t\\tposition, the returned Number will be the column at the end of","\\t\\tthe <Tab>. For example, for a <Tab> in column 1, with \'ts\'","\\t\\tset to 8, it returns 8. |conceal| is ignored.","\\t\\tFor the byte position use |col()|.","\\t\\tFor the use of {expr} see |col()|.","\\t\\tWhen \'virtualedit\' is used {expr} can be [lnum, col, off], where","\\t\\t\\"off\\" is the offset in screen columns from the start of the","\\t\\tcharacter. E.g., a position within a <Tab> or after the last","\\t\\tcharacter. When \\"off\\" is omitted zero is used.","\\t\\tWhen Virtual editing is active in the current mode, a position","\\t\\tbeyond the end of the line can be returned. |\'virtualedit\'|","\\t\\tThe accepted positions are:","\\t\\t .\\t the cursor position","\\t\\t $\\t the end of the cursor line (the result is the","\\t\\t\\t number of displayed characters in the cursor line","\\t\\t\\t plus one)","\\t\\t \'x\\t position of mark x (if the mark is not set, 0 is","\\t\\t\\t returned)","\\t\\t v In Visual mode: the start of the Visual area (the","\\t\\t\\t cursor is the end). When not in Visual mode","\\t\\t\\t returns the cursor position. Differs from |\'<| in","\\t\\t\\t that it\'s updated right away.","\\t\\tNote that only marks in the current file can be used.","\\t\\tExamples: >"," virtcol(\\".\\")\\t with text \\"foo^Lbar\\", with cursor on the \\"^L\\", returns 5"," virtcol(\\"$\\")\\t with text \\"foo^Lbar\\", returns 9"," virtcol(\\"\'t\\") with text \\"\\t there\\", with \'t at \'h\', returns 6","<\\t\\tThe first column is 1. 0 is returned for an error.","\\t\\tA more advanced example that echoes the maximum length of","\\t\\tall lines: >","\\t\\t echo max(map(range(1, line(\'$\')), \\"virtcol([v:val, \'$\'])\\"))",""],"visualmode":["\\t\\tThe result is a String, which describes the last Visual mode","\\t\\tused in the current buffer. Initially it returns an empty","\\t\\tstring, but once Visual mode has been used, it returns \\"v\\",","\\t\\t\\"V\\", or \\"<CTRL-V>\\" (a single CTRL-V character) for","\\t\\tcharacter-wise, line-wise, or block-wise Visual mode","\\t\\trespectively.","\\t\\tExample: >","\\t\\t\\t:exe \\"normal \\" . visualmode()","<\\t\\tThis enters the same Visual mode as before. It is also useful","\\t\\tin scripts if you wish to act differently depending on the","\\t\\tVisual mode that was used.","\\t\\tIf Visual mode is active, use |mode()| to get the Visual mode","\\t\\t(e.g., in a |:vmap|).","\\t\\tIf [expr] is supplied and it evaluates to a non-zero Number or","\\t\\ta non-empty String, then the Visual mode will be cleared and","\\t\\tthe old value is returned. See |non-zero-arg|."],"wait":["\\t\\tWaits until {condition} evaluates to |TRUE|, where {condition}","\\t\\tis a |Funcref| or |string| containing an expression.","","\\t\\t{timeout} is the maximum waiting time in milliseconds, -1","\\t\\tmeans forever.","","\\t\\tCondition is evaluated on user events, internal events, and","\\t\\tevery {interval} milliseconds (default: 200).","","\\t\\tReturns a status integer:","\\t\\t\\t0 if the condition was satisfied before timeout","\\t\\t\\t-1 if the timeout was exceeded","\\t\\t\\t-2 if the function was interrupted (by |CTRL-C|)","\\t\\t\\t-3 if an error occurred"],"wildmenumode":["\\t\\tReturns |TRUE| when the wildmenu is active and |FALSE|","\\t\\totherwise. See \'wildmenu\' and \'wildmode\'.","\\t\\tThis can be used in mappings to handle the \'wildcharm\' option","\\t\\tgracefully. (Makes only sense with |mapmode-c| mappings).","","\\t\\tFor example to make <c-j> work like <down> in wildmode, use: >"," :cnoremap <expr> <C-j> wildmenumode() ? \\"\\\\<Down>\\\\<Tab>\\" : \\"\\\\<c-j>\\"","<","\\t\\t(Note, this needs the \'wildcharm\' option set appropriately).",""],"win_findbuf":["\\t\\tReturns a list with |window-ID|s for windows that contain","\\t\\tbuffer {bufnr}. When there is none the list is empty."],"win_getid":["\\t\\tGet the |window-ID| for the specified window.","\\t\\tWhen {win} is missing use the current window.","\\t\\tWith {win} this is the window number. The top window has","\\t\\tnumber 1.","\\t\\tWithout {tab} use the current tab, otherwise the tab with","\\t\\tnumber {tab}. The first tab has number one.","\\t\\tReturn zero if the window cannot be found."],"win_gotoid":["\\t\\tGo to window with ID {expr}. This may also change the current","\\t\\ttabpage.","\\t\\tReturn 1 if successful, 0 if the window cannot be found."],"win_id2tabwin":["\\t\\tReturn a list with the tab number and window number of window","\\t\\twith ID {expr}: [tabnr, winnr].","\\t\\tReturn [0, 0] if the window cannot be found."],"win_id2win":["\\t\\tReturn the window number of window with ID {expr}.","\\t\\tReturn 0 if the window cannot be found in the current tabpage."],"win_screenpos":["\\t\\tReturn the screen position of window {nr} as a list with two","\\t\\tnumbers: [row, col]. The first window always has position","\\t\\t[1, 1], unless there is a tabline, then it is [2, 1].","\\t\\t{nr} can be the window number or the |window-ID|.","\\t\\tReturn [0, 0] if the window cannot be found in the current","\\t\\ttabpage.",""],"winbufnr":["\\t\\tassociated with window {nr}. {nr} can be the window number or","\\t\\tthe |window-ID|.","\\t\\tWhen {nr} is zero, the number of the buffer in the current","\\t\\twindow is returned.","\\t\\tWhen window {nr} doesn\'t exist, -1 is returned.","\\t\\tExample: >"," :echo \\"The file in the current window is \\" . bufname(winbufnr(0))","<"],"wincol":["\\t\\tcursor in the window. This is counting screen cells from the","\\t\\tleft side of the window. The leftmost column is one."],"winheight":["\\t\\tThe result is a Number, which is the height of window {nr}.","\\t\\t{nr} can be the window number or the |window-ID|.","\\t\\tWhen {nr} is zero, the height of the current window is","\\t\\treturned. When window {nr} doesn\'t exist, -1 is returned.","\\t\\tAn existing window always has a height of zero or more.","\\t\\tThis excludes any window toolbar line.","\\t\\tExamples: >"," :echo \\"The current window has \\" . winheight(0) . \\" lines.\\""],"winlayout":["\\t\\tThe result is a nested List containing the layout of windows","\\t\\tin a tabpage.","","\\t\\tWithout {tabnr} use the current tabpage, otherwise the tabpage","\\t\\twith number {tabnr}. If the tabpage {tabnr} is not found,","\\t\\treturns an empty list.","","\\t\\tFor a leaf window, it returns:","\\t\\t\\t[\'leaf\', {winid}]","\\t\\tFor horizontally split windows, which form a column, it","\\t\\treturns:","\\t\\t\\t[\'col\', [{nested list of windows}]]","\\t\\tFor vertically split windows, which form a row, it returns:","\\t\\t\\t[\'row\', [{nested list of windows}]]","","\\t\\tExample: >","\\t\\t\\t\\" Only one window in the tab page","\\t\\t\\t:echo winlayout()","\\t\\t\\t[\'leaf\', 1000]","\\t\\t\\t\\" Two horizontally split windows","\\t\\t\\t:echo winlayout()","\\t\\t\\t[\'col\', [[\'leaf\', 1000], [\'leaf\', 1001]]]","\\t\\t\\t\\" Three horizontally split windows, with two","\\t\\t\\t\\" vertically split windows in the middle window","\\t\\t\\t:echo winlayout(2)","\\t\\t\\t[\'col\', [[\'leaf\', 1002], [\'row\', [\'leaf\', 1003],","\\t\\t\\t\\t\\t [\'leaf\', 1001]]], [\'leaf\', 1000]]","<"],"winline":["\\t\\tin the window. This is counting screen lines from the top of","\\t\\tthe window. The first line is one.","\\t\\tIf the cursor was moved the view on the file will be updated","\\t\\tfirst, this may cause a scroll.",""],"winnr":["\\t\\twindow. The top window has number 1.","","\\t\\tThe optional argument {arg} supports the following values:","\\t\\t\\t$\\tthe number of the last window (the window","\\t\\t\\t\\tcount).","\\t\\t\\t#\\tthe number of the last accessed window (where","\\t\\t\\t\\t|CTRL-W_p| goes to). If there is no previous","\\t\\t\\t\\twindow or it is in another tab page 0 is","\\t\\t\\t\\treturned.","\\t\\t\\t{N}j\\tthe number of the Nth window below the","\\t\\t\\t\\tcurrent window (where |CTRL-W_j| goes to).","\\t\\t\\t{N}k\\tthe number of the Nth window above the current","\\t\\t\\t\\twindow (where |CTRL-W_k| goes to).","\\t\\t\\t{N}h\\tthe number of the Nth window left of the","\\t\\t\\t\\tcurrent window (where |CTRL-W_h| goes to).","\\t\\t\\t{N}l\\tthe number of the Nth window right of the","\\t\\t\\t\\tcurrent window (where |CTRL-W_l| goes to).","\\t\\tThe number can be used with |CTRL-W_w| and \\":wincmd w\\"","\\t\\t|:wincmd|.","\\t\\tAlso see |tabpagewinnr()| and |win_getid()|.","\\t\\tExamples: >","\\t\\t\\tlet window_count = winnr(\'$\')","\\t\\t\\tlet prev_window = winnr(\'#\')","\\t\\t\\tlet wnum = winnr(\'3k\')","<"],"winrestcmd":["\\t\\tthe current window sizes. Only works properly when no windows","\\t\\tare opened or closed and the current window and tab page is","\\t\\tunchanged.","\\t\\tExample: >","\\t\\t\\t:let cmd = winrestcmd()","\\t\\t\\t:call MessWithWindowSizes()","\\t\\t\\t:exe cmd","<"],"winrestview":["\\t\\tUses the |Dictionary| returned by |winsaveview()| to restore","\\t\\tthe view of the current window.","\\t\\tNote: The {dict} does not have to contain all values, that are","\\t\\treturned by |winsaveview()|. If values are missing, those","\\t\\tsettings won\'t be restored. So you can use: >","\\t\\t :call winrestview({\'curswant\': 4})","<","\\t\\tThis will only set the curswant value (the column the cursor","\\t\\twants to move on vertical movements) of the cursor to column 5","\\t\\t(yes, that is 5), while all other settings will remain the","\\t\\tsame. This is useful, if you set the cursor position manually.","","\\t\\tIf you have changed the values the result is unpredictable.","\\t\\tIf the window size changed the result won\'t be the same.",""],"winsaveview":["\\t\\tthe view of the current window. Use |winrestview()| to","\\t\\trestore the view.","\\t\\tThis is useful if you have a mapping that jumps around in the","\\t\\tbuffer and you want to go back to the original view.","\\t\\tThis does not save fold information. Use the \'foldenable\'","\\t\\toption to temporarily switch off folding, so that folds are","\\t\\tnot opened when moving around. This may have side effects.","\\t\\tThe return value includes:","\\t\\t\\tlnum\\t\\tcursor line number","\\t\\t\\tcol\\t\\tcursor column (Note: the first column","\\t\\t\\t\\t\\tzero, as opposed to what getpos()","\\t\\t\\t\\t\\treturns)","\\t\\t\\tcoladd\\t\\tcursor column offset for \'virtualedit\'","\\t\\t\\tcurswant\\tcolumn for vertical movement","\\t\\t\\ttopline\\t\\tfirst line in the window","\\t\\t\\ttopfill\\t\\tfiller lines, only in diff mode","\\t\\t\\tleftcol\\t\\tfirst column displayed","\\t\\t\\tskipcol\\t\\tcolumns skipped","\\t\\tNote that no option values are saved.",""],"winwidth":["\\t\\tThe result is a Number, which is the width of window {nr}.","\\t\\t{nr} can be the window number or the |window-ID|.","\\t\\tWhen {nr} is zero, the width of the current window is","\\t\\treturned. When window {nr} doesn\'t exist, -1 is returned.","\\t\\tAn existing window always has a width of zero or more.","\\t\\tExamples: >"," :echo \\"The current window has \\" . winwidth(0) . \\" columns.\\""," :if winwidth(0) <= 50"," : 50 wincmd |"," :endif","<\\t\\tFor getting the terminal or screen size, see the \'columns\'","\\t\\toption.",""],"wordcount":["\\t\\tThe result is a dictionary of byte/chars/word statistics for","\\t\\tthe current buffer. This is the same info as provided by","\\t\\t|g_CTRL-G|","\\t\\tThe return value includes:","\\t\\t\\tbytes\\t\\tNumber of bytes in the buffer","\\t\\t\\tchars\\t\\tNumber of chars in the buffer","\\t\\t\\twords\\t\\tNumber of words in the buffer","\\t\\t\\tcursor_bytes Number of bytes before cursor position","\\t\\t\\t\\t\\t(not in Visual mode)","\\t\\t\\tcursor_chars Number of chars before cursor position","\\t\\t\\t\\t\\t(not in Visual mode)","\\t\\t\\tcursor_words Number of words before cursor position","\\t\\t\\t\\t\\t(not in Visual mode)","\\t\\t\\tvisual_bytes Number of bytes visually selected","\\t\\t\\t\\t\\t(only in Visual mode)","\\t\\t\\tvisual_chars Number of chars visually selected","\\t\\t\\t\\t\\t(only in Visual mode)","\\t\\t\\tvisual_words Number of chars visually selected","\\t\\t\\t\\t\\t(only in Visual mode)","",""],"writefile":["\\t\\tWrite |List| {list} to file {fname}. Each list item is","\\t\\tseparated with a NL. Each list item must be a String or","\\t\\tNumber.","\\t\\tWhen {flags} contains \\"b\\" then binary mode is used: There will","\\t\\tnot be a NL after the last list item. An empty item at the","\\t\\tend does cause the last line in the file to end in a NL.","","\\t\\tWhen {flags} contains \\"a\\" then append mode is used, lines are","\\t\\tappended to the file: >","\\t\\t\\t:call writefile([\\"foo\\"], \\"event.log\\", \\"a\\")","\\t\\t\\t:call writefile([\\"bar\\"], \\"event.log\\", \\"a\\")","<","\\t\\tWhen {flags} contains \\"S\\" fsync() call is not used, with \\"s\\"","\\t\\tit is used, \'fsync\' option applies by default. No fsync()","\\t\\tmeans that writefile() will finish faster, but writes may be","\\t\\tleft in OS buffers and not yet written to disk. Such changes","\\t\\twill disappear if system crashes before OS does writing.","","\\t\\tAll NL characters are replaced with a NUL character.","\\t\\tInserting CR characters needs to be done before passing {list}","\\t\\tto writefile().","\\t\\tAn existing file is overwritten, if possible.","\\t\\tWhen the write fails -1 is returned, otherwise 0. There is an","\\t\\terror message if the file can\'t be created or when writing","\\t\\tfails.","\\t\\tAlso see |readfile()|.","\\t\\tTo copy a file byte for byte: >","\\t\\t\\t:let fl = readfile(\\"foo\\", \\"b\\")","\\t\\t\\t:call writefile(fl, \\"foocopy\\", \\"b\\")",""],"xor":["\\t\\tBitwise XOR on the two arguments. The arguments are converted","\\t\\tto a number. A List, Dict or Float argument causes an error.","\\t\\tExample: >","\\t\\t\\t:let bits = xor(bits, 0x80)","<",""],"nvim__id":[" Returns object given as argument.",""," This API function is used for testing. One should not rely on"," its presence in plugins.",""," Parameters: ~"," {obj} Object to return.",""," Return: ~"," its argument."],"nvim__id_array":[" Returns array given as argument.",""," This API function is used for testing. One should not rely on"," its presence in plugins.",""," Parameters: ~"," {arr} Array to return.",""," Return: ~"," its argument."],"nvim__id_dictionary":[" Returns dictionary given as argument.",""," This API function is used for testing. One should not rely on"," its presence in plugins.",""," Parameters: ~"," {dct} Dictionary to return.",""," Return: ~"," its argument."],"nvim__id_float":[" Returns floating-point value given as argument.",""," This API function is used for testing. One should not rely on"," its presence in plugins.",""," Parameters: ~"," {flt} Value to return.",""," Return: ~"," its argument."],"nvim__inspect_cell":[" TODO: Documentation"],"nvim__put_attr":[" Set attrs in nvim__buf_set_lua_hl callbacks",""," TODO(bfredl): This is rather pedestrian. The final interface"," should probably be derived from a reformed bufhl/virttext"," interface with full support for multi-line ranges etc"],"nvim__stats":[" Gets internal stats.",""," Return: ~"," Map of various internal stats."],"nvim_call_atomic":[" Calls many API methods atomically.",""," This has two main usages:"," 1. To perform several requests from an async context"," atomically, i.e. without interleaving redraws, RPC requests"," from other clients, or user interactions (however API"," methods may trigger autocommands or event processing which"," have such side-effects, e.g. |:sleep| may wake timers)."," 2. To minimize RPC overhead (roundtrips) of a sequence of many"," requests.",""," Parameters: ~"," {calls} an array of calls, where each call is described"," by an array with two elements: the request name,"," and an array of arguments.",""," Return: ~"," Array of two elements. The first is an array of return"," values. The second is NIL if all calls succeeded. If a"," call resulted in an error, it is a three-element array"," with the zero-based index of the call which resulted in an"," error, the error type and the error message. If an error"," occurred, the values from all preceding calls will still"," be returned.",""],"nvim_call_dict_function":[" Calls a VimL |Dictionary-function| with the given arguments.",""," On execution error: fails with VimL error, does not update"," v:errmsg.",""," Parameters: ~"," {dict} Dictionary, or String evaluating to a VimL |self|"," dict"," {fn} Name of the function defined on the VimL dict"," {args} Function arguments packed in an Array",""," Return: ~"," Result of the function call"],"nvim_call_function":[" Calls a VimL function with the given arguments.",""," On execution error: fails with VimL error, does not update"," v:errmsg.",""," Parameters: ~"," {fn} Function to call"," {args} Function arguments packed in an Array",""," Return: ~"," Result of the function call"],"nvim_command":[" Executes an ex-command.",""," On execution error: fails with VimL error, does not update"," v:errmsg.",""," Parameters: ~"," {command} Ex-command string",""," See also: ~"," |nvim_exec()|"],"nvim_create_buf":[" Creates a new, empty, unnamed buffer.",""," Parameters: ~"," {listed} Sets \'buflisted\'"," {scratch} Creates a \\"throwaway\\" |scratch-buffer| for"," temporary work (always \'nomodified\')",""," Return: ~"," Buffer handle, or 0 on error",""," See also: ~"," buf_open_scratch"],"nvim_create_namespace":[" Creates a new namespace, or gets an existing one.",""," Namespaces are used for buffer highlights and virtual text,"," see |nvim_buf_add_highlight()| and"," |nvim_buf_set_virtual_text()|.",""," Namespaces can be named or anonymous. If `name` matches an"," existing namespace, the associated id is returned. If `name`"," is an empty string a new, anonymous namespace is created.",""," Parameters: ~"," {name} Namespace name or empty string",""," Return: ~"," Namespace id"],"nvim_del_current_line":[" Deletes the current line."],"nvim_del_keymap":[" Unmaps a global |mapping| for the given mode.",""," To unmap a buffer-local mapping, use |nvim_buf_del_keymap()|.",""," See also: ~"," |nvim_set_keymap()|"],"nvim_del_var":[" Removes a global (g:) variable.",""," Parameters: ~"," {name} Variable name"],"nvim_err_write":[" Writes a message to the Vim error buffer. Does not append"," \\"\\\\n\\", the message is buffered (won\'t display) until a linefeed"," is written.",""," Parameters: ~"," {str} Message"],"nvim_err_writeln":[" Writes a message to the Vim error buffer. Appends \\"\\\\n\\", so the"," buffer is flushed (and displayed).",""," Parameters: ~"," {str} Message",""," See also: ~"," nvim_err_write()"],"nvim_eval":[" Evaluates a VimL |expression|. Dictionaries and Lists are"," recursively expanded.",""," On execution error: fails with VimL error, does not update"," v:errmsg.",""," Parameters: ~"," {expr} VimL expression string",""," Return: ~"," Evaluation result or expanded object"],"nvim_exec":[" Executes Vimscript (multiline block of Ex-commands), like"," anonymous |:source|.",""," Unlike |nvim_command()| this function supports heredocs,"," script-scope (s:), etc.",""," On execution error: fails with VimL error, does not update"," v:errmsg.",""," Parameters: ~"," {src} Vimscript code"," {output} Capture and return all (non-error, non-shell"," |:!|) output",""," Return: ~"," Output (non-error, non-shell |:!|) if `output` is true,"," else empty string.",""," See also: ~"," |execute()|"," |nvim_command()|"],"nvim_exec_lua":[" Execute Lua code. Parameters (if any) are available as `...`"," inside the chunk. The chunk can return a value.",""," Only statements are executed. To evaluate an expression,"," prefix it with `return` : return my_function(...)",""," Parameters: ~"," {code} Lua code to execute"," {args} Arguments to the code",""," Return: ~"," Return value of Lua code if present or NIL."],"nvim_feedkeys":[" Sends input-keys to Nvim, subject to various quirks controlled"," by `mode` flags. This is a blocking call, unlike"," |nvim_input()|.",""," On execution error: does not fail, but updates v:errmsg.",""," Parameters: ~"," {keys} to be typed"," {mode} behavior flags, see |feedkeys()|"," {escape_csi} If true, escape K_SPECIAL/CSI bytes in"," `keys`",""," See also: ~"," feedkeys()"," vim_strsave_escape_csi"],"nvim_get_api_info":[" Returns a 2-tuple (Array), where item 0 is the current channel"," id and item 1 is the |api-metadata| map (Dictionary).",""," Return: ~"," 2-tuple [{channel-id}, {api-metadata}]",""," Attributes: ~"," {fast}"],"nvim_get_chan_info":[" Get information about a channel.",""," Return: ~"," Dictionary describing a channel, with these keys:"," • \\"stream\\" the stream underlying the channel"," • \\"stdio\\" stdin and stdout of this Nvim instance"," • \\"stderr\\" stderr of this Nvim instance"," • \\"socket\\" TCP/IP socket or named pipe"," • \\"job\\" job with communication over its stdio",""," • \\"mode\\" how data received on the channel is interpreted"," • \\"bytes\\" send and receive raw bytes"," • \\"terminal\\" a |terminal| instance interprets ASCII"," sequences"," • \\"rpc\\" |RPC| communication on the channel is active",""," • \\"pty\\" Name of pseudoterminal, if one is used (optional)."," On a POSIX system, this will be a device path like"," /dev/pts/1. Even if the name is unknown, the key will"," still be present to indicate a pty is used. This is"," currently the case when using winpty on windows."," • \\"buffer\\" buffer with connected |terminal| instance"," (optional)"," • \\"client\\" information about the client on the other end"," of the RPC channel, if it has added it using"," |nvim_set_client_info()|. (optional)"],"nvim_get_color_by_name":[" Returns the 24-bit RGB value of a |nvim_get_color_map()| color"," name or \\"#rrggbb\\" hexadecimal string.",""," Example: >"," :echo nvim_get_color_by_name(\\"Pink\\")"," :echo nvim_get_color_by_name(\\"#cbcbcb\\")","<",""," Parameters: ~"," {name} Color name or \\"#rrggbb\\" string",""," Return: ~"," 24-bit RGB value, or -1 for invalid argument."],"nvim_get_color_map":[" Returns a map of color names and RGB values.",""," Keys are color names (e.g. \\"Aqua\\") and values are 24-bit RGB"," color values (e.g. 65535).",""," Return: ~"," Map of color names and RGB values."],"nvim_get_commands":[" Gets a map of global (non-buffer-local) Ex commands.",""," Currently only |user-commands| are supported, not builtin Ex"," commands.",""," Parameters: ~"," {opts} Optional parameters. Currently only supports"," {\\"builtin\\":false}",""," Return: ~"," Map of maps describing commands."],"nvim_get_context":[" Gets a map of the current editor state.",""," Parameters: ~"," {opts} Optional parameters."," • types: List of |context-types| (\\"regs\\", \\"jumps\\","," \\"bufs\\", \\"gvars\\", …) to gather, or empty for"," \\"all\\".",""," Return: ~"," map of global |context|."],"nvim_get_current_buf":[" Gets the current buffer.",""," Return: ~"," Buffer handle"],"nvim_get_current_line":[" Gets the current line.",""," Return: ~"," Current line string"],"nvim_get_current_tabpage":[" Gets the current tabpage.",""," Return: ~"," Tabpage handle"],"nvim_get_current_win":[" Gets the current window.",""," Return: ~"," Window handle"],"nvim_get_hl_by_id":[" Gets a highlight definition by id. |hlID()|",""," Parameters: ~"," {hl_id} Highlight id as returned by |hlID()|"," {rgb} Export RGB colors",""," Return: ~"," Highlight definition map",""," See also: ~"," nvim_get_hl_by_name"],"nvim_get_hl_by_name":[" Gets a highlight definition by name.",""," Parameters: ~"," {name} Highlight group name"," {rgb} Export RGB colors",""," Return: ~"," Highlight definition map",""," See also: ~"," nvim_get_hl_by_id"],"nvim_get_hl_id_by_name":[" Gets a highlight group by name",""," similar to |hlID()|, but allocates a new ID if not present."],"nvim_get_keymap":[" Gets a list of global (non-buffer-local) |mapping|"," definitions.",""," Parameters: ~"," {mode} Mode short-name (\\"n\\", \\"i\\", \\"v\\", ...)",""," Return: ~"," Array of maparg()-like dictionaries describing mappings."," The \\"buffer\\" key is always zero."],"nvim_get_mode":[" Gets the current mode. |mode()| \\"blocking\\" is true if Nvim is"," waiting for input.",""," Return: ~"," Dictionary { \\"mode\\": String, \\"blocking\\": Boolean }",""," Attributes: ~"," {fast}"],"nvim_get_namespaces":[" Gets existing, non-anonymous namespaces.",""," Return: ~"," dict that maps from names to namespace ids."],"nvim_get_option":[" Gets an option value string.",""," Parameters: ~"," {name} Option name",""," Return: ~"," Option value (global)"],"nvim_get_proc":[" Gets info describing process `pid` .",""," Return: ~"," Map of process properties, or NIL if process not found."],"nvim_get_proc_children":[" Gets the immediate children of process `pid` .",""," Return: ~"," Array of child process ids, empty if process not found."],"nvim_get_var":[" Gets a global (g:) variable.",""," Parameters: ~"," {name} Variable name",""," Return: ~"," Variable value"],"nvim_get_vvar":[" Gets a v: variable.",""," Parameters: ~"," {name} Variable name",""," Return: ~"," Variable value"],"nvim_input":[" Queues raw user-input. Unlike |nvim_feedkeys()|, this uses a"," low-level input buffer and the call is non-blocking (input is"," processed asynchronously by the eventloop).",""," On execution error: does not fail, but updates v:errmsg.",""," Note:"," |keycodes| like <CR> are translated, so \\"<\\" is special. To"," input a literal \\"<\\", send <LT>."," Note:"," For mouse events use |nvim_input_mouse()|. The pseudokey"," form \\"<LeftMouse><col,row>\\" is deprecated since"," |api-level| 6.",""," Attributes: ~"," {fast}",""," Parameters: ~"," {keys} to be typed",""," Return: ~"," Number of bytes actually written (can be fewer than"," requested if the buffer becomes full).",""],"nvim_input_mouse":[" Send mouse event from GUI.",""," Non-blocking: does not wait on any result, but queues the"," event to be processed soon by the event loop.",""," Note:"," Currently this doesn\'t support \\"scripting\\" multiple mouse"," events by calling it multiple times in a loop: the"," intermediate mouse positions will be ignored. It should be"," used to implement real-time mouse input in a GUI. The"," deprecated pseudokey form (\\"<LeftMouse><col,row>\\") of"," |nvim_input()| has the same limitiation.",""," Attributes: ~"," {fast}",""," Parameters: ~"," {button} Mouse button: one of \\"left\\", \\"right\\","," \\"middle\\", \\"wheel\\"."," {action} For ordinary buttons, one of \\"press\\", \\"drag\\","," \\"release\\". For the wheel, one of \\"up\\", \\"down\\","," \\"left\\", \\"right\\"."," {modifier} String of modifiers each represented by a"," single char. The same specifiers are used as"," for a key press, except that the \\"-\\" separator"," is optional, so \\"C-A-\\", \\"c-a\\" and \\"CA\\" can all"," be used to specify Ctrl+Alt+click."," {grid} Grid number if the client uses |ui-multigrid|,"," else 0."," {row} Mouse row-position (zero-based, like redraw"," events)"," {col} Mouse column-position (zero-based, like redraw"," events)"],"nvim_list_bufs":[" Gets the current list of buffer handles",""," Includes unlisted (unloaded/deleted) buffers, like `:ls!` ."," Use |nvim_buf_is_loaded()| to check if a buffer is loaded.",""," Return: ~"," List of buffer handles"],"nvim_list_chans":[" Get information about all open channels.",""," Return: ~"," Array of Dictionaries, each describing a channel with the"," format specified at |nvim_get_chan_info()|."],"nvim_list_runtime_paths":[" Gets the paths contained in \'runtimepath\'.",""," Return: ~"," List of paths"],"nvim_list_tabpages":[" Gets the current list of tabpage handles.",""," Return: ~"," List of tabpage handles"],"nvim_list_uis":[" Gets a list of dictionaries representing attached UIs.",""," Return: ~"," Array of UI dictionaries, each with these keys:"," • \\"height\\" Requested height of the UI"," • \\"width\\" Requested width of the UI"," • \\"rgb\\" true if the UI uses RGB colors (false implies"," |cterm-colors|)"," • \\"ext_...\\" Requested UI extensions, see |ui-option|"," • \\"chan\\" Channel id of remote UI (not present for TUI)"],"nvim_list_wins":[" Gets the current list of window handles.",""," Return: ~"," List of window handles"],"nvim_load_context":[" Sets the current editor state from the given |context| map.",""," Parameters: ~"," {dict} |Context| map."],"nvim_open_win":[" Open a new window.",""," Currently this is used to open floating and external windows."," Floats are windows that are drawn above the split layout, at"," some anchor position in some other window. Floats can be drawn"," internally or by external GUI with the |ui-multigrid|"," extension. External windows are only supported with multigrid"," GUIs, and are displayed as separate top-level windows.",""," For a general overview of floats, see |api-floatwin|.",""," Exactly one of `external` and `relative` must be specified."," The `width` and `height` of the new window must be specified.",""," With relative=editor (row=0,col=0) refers to the top-left"," corner of the screen-grid and (row=Lines-1,col=Columns-1)"," refers to the bottom-right corner. Fractional values are"," allowed, but the builtin implementation (used by non-multigrid"," UIs) will always round down to nearest integer.",""," Out-of-bounds values, and configurations that make the float"," not fit inside the main editor, are allowed. The builtin"," implementation truncates values so floats are fully within the"," main screen grid. External GUIs could let floats hover outside"," of the main window like a tooltip, but this should not be used"," to specify arbitrary WM screen positions.",""," Example (Lua): window-relative float >"," vim.api.nvim_open_win(0, false,"," {relative=\'win\', row=3, col=3, width=12, height=3})","<",""," Example (Lua): buffer-relative float (travels as buffer is"," scrolled) >"," vim.api.nvim_open_win(0, false,"," {relative=\'win\', width=12, height=3, bufpos={100,10}})","<",""," Parameters: ~"," {buffer} Buffer to display, or 0 for current buffer"," {enter} Enter the window (make it the current window)"," {config} Map defining the window configuration. Keys:"," • `relative`: Sets the window layout to \\"floating\\", placed"," at (row,col) coordinates relative to:"," • \\"editor\\" The global editor grid"," • \\"win\\" Window given by the `win` field, or"," current window."," • \\"cursor\\" Cursor position in current window.",""," • `win` : |window-ID| for relative=\\"win\\"."," • `anchor`: Decides which corner of the float to place"," at (row,col):"," • \\"NW\\" northwest (default)"," • \\"NE\\" northeast"," • \\"SW\\" southwest"," • \\"SE\\" southeast",""," • `width` : Window width (in character cells)."," Minimum of 1."," • `height` : Window height (in character cells)."," Minimum of 1."," • `bufpos` : Places float relative to buffer"," text (only when relative=\\"win\\"). Takes a tuple"," of zero-indexed [line, column]. `row` and"," `col` if given are applied relative to this"," position, else they default to `row=1` and"," `col=0` (thus like a tooltip near the buffer"," text)."," • `row` : Row position in units of \\"screen cell"," height\\", may be fractional."," • `col` : Column position in units of \\"screen"," cell width\\", may be fractional."," • `focusable` : Enable focus by user actions"," (wincmds, mouse events). Defaults to true."," Non-focusable windows can be entered by"," |nvim_set_current_win()|."," • `external` : GUI should display the window as"," an external top-level window. Currently"," accepts no other positioning configuration"," together with this."," • `style`: Configure the appearance of the window."," Currently only takes one non-empty value:"," • \\"minimal\\" Nvim will display the window with"," many UI options disabled. This is useful"," when displaying a temporary float where the"," text should not be edited. Disables"," \'number\', \'relativenumber\', \'cursorline\',"," \'cursorcolumn\', \'foldcolumn\', \'spell\' and"," \'list\' options. \'signcolumn\' is changed to"," `auto` and \'colorcolumn\' is cleared. The"," end-of-buffer region is hidden by setting"," `eob` flag of \'fillchars\' to a space char,"," and clearing the |EndOfBuffer| region in"," \'winhighlight\'.",""," Return: ~"," Window handle, or 0 on error"],"nvim_out_write":[" Writes a message to the Vim output buffer. Does not append"," \\"\\\\n\\", the message is buffered (won\'t display) until a linefeed"," is written.",""," Parameters: ~"," {str} Message",""],"nvim_parse_expression":[" Parse a VimL expression.",""," Attributes: ~"," {fast}",""," Parameters: ~"," {expr} Expression to parse. Always treated as a"," single line."," {flags} Flags:"," • \\"m\\" if multiple expressions in a row are"," allowed (only the first one will be"," parsed),"," • \\"E\\" if EOC tokens are not allowed"," (determines whether they will stop parsing"," process or be recognized as an"," operator/space, though also yielding an"," error)."," • \\"l\\" when needing to start parsing with"," lvalues for \\":let\\" or \\":for\\". Common flag"," sets:"," • \\"m\\" to parse like for \\":echo\\"."," • \\"E\\" to parse like for \\"<C-r>=\\"."," • empty string for \\":call\\"."," • \\"lm\\" to parse for \\":let\\"."," {highlight} If true, return value will also include"," \\"highlight\\" key containing array of 4-tuples"," (arrays) (Integer, Integer, Integer, String),"," where first three numbers define the"," highlighted region and represent line,"," starting column and ending column (latter"," exclusive: one should highlight region"," [start_col, end_col)).",""," Return: ~",""," • AST: top-level dictionary with these keys:"," • \\"error\\": Dictionary with error, present only if parser"," saw some error. Contains the following keys:"," • \\"message\\": String, error message in printf format,"," translated. Must contain exactly one \\"%.*s\\"."," • \\"arg\\": String, error message argument.",""," • \\"len\\": Amount of bytes successfully parsed. With flags"," equal to \\"\\" that should be equal to the length of expr"," string. (“Sucessfully parsed” here means “participated"," in AST creation”, not “till the first error”.)"," • \\"ast\\": AST, either nil or a dictionary with these"," keys:"," • \\"type\\": node type, one of the value names from"," ExprASTNodeType stringified without \\"kExprNode\\""," prefix."," • \\"start\\": a pair [line, column] describing where node"," is \\"started\\" where \\"line\\" is always 0 (will not be 0"," if you will be using nvim_parse_viml() on e.g."," \\":let\\", but that is not present yet). Both elements"," are Integers."," • \\"len\\": “length” of the node. This and \\"start\\" are"," there for debugging purposes primary (debugging"," parser and providing debug information)."," • \\"children\\": a list of nodes described in top/\\"ast\\"."," There always is zero, one or two children, key will"," not be present if node has no children. Maximum"," number of children may be found in node_maxchildren"," array.",""," • Local values (present only for certain nodes):"," • \\"scope\\": a single Integer, specifies scope for"," \\"Option\\" and \\"PlainIdentifier\\" nodes. For \\"Option\\" it"," is one of ExprOptScope values, for \\"PlainIdentifier\\""," it is one of ExprVarScope values."," • \\"ident\\": identifier (without scope, if any), present"," for \\"Option\\", \\"PlainIdentifier\\", \\"PlainKey\\" and"," \\"Environment\\" nodes."," • \\"name\\": Integer, register name (one character) or -1."," Only present for \\"Register\\" nodes."," • \\"cmp_type\\": String, comparison type, one of the value"," names from ExprComparisonType, stringified without"," \\"kExprCmp\\" prefix. Only present for \\"Comparison\\""," nodes."," • \\"ccs_strategy\\": String, case comparison strategy, one"," of the value names from ExprCaseCompareStrategy,"," stringified without \\"kCCStrategy\\" prefix. Only present"," for \\"Comparison\\" nodes."," • \\"augmentation\\": String, augmentation type for"," \\"Assignment\\" nodes. Is either an empty string, \\"Add\\","," \\"Subtract\\" or \\"Concat\\" for \\"=\\", \\"+=\\", \\"-=\\" or \\".=\\""," respectively."," • \\"invert\\": Boolean, true if result of comparison needs"," to be inverted. Only present for \\"Comparison\\" nodes."," • \\"ivalue\\": Integer, integer value for \\"Integer\\" nodes."," • \\"fvalue\\": Float, floating-point value for \\"Float\\""," nodes."," • \\"svalue\\": String, value for \\"SingleQuotedString\\" and"," \\"DoubleQuotedString\\" nodes."],"nvim_paste":[" Pastes at cursor, in any mode.",""," Invokes the `vim.paste` handler, which handles each mode"," appropriately. Sets redo/undo. Faster than |nvim_input()|."," Lines break at LF (\\"\\\\n\\").",""," Errors (\'nomodifiable\', `vim.paste()` failure, …) are"," reflected in `err` but do not affect the return value (which"," is strictly decided by `vim.paste()` ). On error, subsequent"," calls are ignored (\\"drained\\") until the next paste is"," initiated (phase 1 or -1).",""," Parameters: ~"," {data} Multiline input. May be binary (containing NUL"," bytes)."," {crlf} Also break lines at CR and CRLF."," {phase} -1: paste in a single call (i.e. without"," streaming). To \\"stream\\" a paste, call `nvim_paste` sequentially with these `phase` values:"," • 1: starts the paste (exactly once)"," • 2: continues the paste (zero or more times)"," • 3: ends the paste (exactly once)",""," Return: ~",""," • true: Client may continue pasting."," • false: Client must cancel the paste."],"nvim_put":[" Puts text at cursor, in any mode.",""," Compare |:put| and |p| which are always linewise.",""," Parameters: ~"," {lines} |readfile()|-style list of lines."," |channel-lines|"," {type} Edit behavior: any |getregtype()| result, or:"," • \\"b\\" |blockwise-visual| mode (may include"," width, e.g. \\"b3\\")"," • \\"c\\" |charwise| mode"," • \\"l\\" |linewise| mode"," • \\"\\" guess by contents, see |setreg()|"," {after} Insert after cursor (like |p|), or before (like"," |P|)."," {follow} Place cursor at end of inserted text.",""],"nvim_replace_termcodes":[" Replaces terminal codes and |keycodes| (<CR>, <Esc>, ...) in a"," string with the internal representation.",""," Parameters: ~"," {str} String to be converted."," {from_part} Legacy Vim parameter. Usually true."," {do_lt} Also translate <lt>. Ignored if `special` is"," false."," {special} Replace |keycodes|, e.g. <CR> becomes a \\"\\\\n\\""," char.",""," See also: ~"," replace_termcodes"," cpoptions",""],"nvim_select_popupmenu_item":[" Selects an item in the completion popupmenu.",""," If |ins-completion| is not active this API call is silently"," ignored. Useful for an external UI using |ui-popupmenu| to"," control the popupmenu with the mouse. Can also be used in a"," mapping; use <cmd> |:map-cmd| to ensure the mapping doesn\'t"," end completion mode.",""," Parameters: ~"," {item} Index (zero-based) of the item to select. Value"," of -1 selects nothing and restores the original"," text."," {insert} Whether the selection should be inserted in the"," buffer."," {finish} Finish the completion and dismiss the popupmenu."," Implies `insert` ."," {opts} Optional parameters. Reserved for future use.",""],"nvim_set_client_info":[" Self-identifies the client.",""," The client/plugin/application should call this after"," connecting, to provide hints about its identity and purpose,"," for debugging and orchestration.",""," Can be called more than once; the caller should merge old info"," if appropriate. Example: library first identifies the channel,"," then a plugin using that library later identifies itself.",""," Note:"," \\"Something is better than nothing\\". You don\'t need to"," include all the fields.",""," Parameters: ~"," {name} Short name for the connected client"," {version} Dictionary describing the version, with"," these (optional) keys:"," • \\"major\\" major version (defaults to 0 if"," not set, for no release yet)"," • \\"minor\\" minor version"," • \\"patch\\" patch number"," • \\"prerelease\\" string describing a"," prerelease, like \\"dev\\" or \\"beta1\\""," • \\"commit\\" hash or similar identifier of"," commit"," {type} Must be one of the following values. Client"," libraries should default to \\"remote\\" unless"," overridden by the user."," • \\"remote\\" remote client connected to Nvim."," • \\"ui\\" gui frontend"," • \\"embedder\\" application using Nvim as a"," component (for example, IDE/editor"," implementing a vim mode)."," • \\"host\\" plugin host, typically started by"," nvim"," • \\"plugin\\" single plugin, started by nvim"," {methods} Builtin methods in the client. For a host,"," this does not include plugin methods which"," will be discovered later. The key should be"," the method name, the values are dicts with"," these (optional) keys (more keys may be"," added in future versions of Nvim, thus"," unknown keys are ignored. Clients must only"," use keys defined in this or later versions"," of Nvim):"," • \\"async\\" if true, send as a notification."," If false or unspecified, use a blocking"," request"," • \\"nargs\\" Number of arguments. Could be a"," single integer or an array of two"," integers, minimum and maximum inclusive."," {attributes} Arbitrary string:string map of informal"," client properties. Suggested keys:"," • \\"website\\": Client homepage URL (e.g."," GitHub repository)"," • \\"license\\": License description (\\"Apache"," 2\\", \\"GPLv3\\", \\"MIT\\", …)"," • \\"logo\\": URI or path to image, preferably"," small logo or icon. .png or .svg format is"," preferred."],"nvim_set_current_buf":[" Sets the current buffer.",""," Parameters: ~"," {buffer} Buffer handle"],"nvim_set_current_dir":[" Changes the global working directory.",""," Parameters: ~"," {dir} Directory path"],"nvim_set_current_line":[" Sets the current line.",""," Parameters: ~"," {line} Line contents"],"nvim_set_current_tabpage":[" Sets the current tabpage.",""," Parameters: ~"," {tabpage} Tabpage handle"],"nvim_set_current_win":[" Sets the current window.",""," Parameters: ~"," {window} Window handle"],"nvim_set_keymap":[" Sets a global |mapping| for the given mode.",""," To set a buffer-local mapping, use |nvim_buf_set_keymap()|.",""," Unlike |:map|, leading/trailing whitespace is accepted as part"," of the {lhs} or {rhs}. Empty {rhs} is |<Nop>|. |keycodes| are"," replaced as usual.",""," Example: >"," call nvim_set_keymap(\'n\', \' <NL>\', \'\', {\'nowait\': v:true})","<",""," is equivalent to: >"," nmap <nowait> <Space><NL> <Nop>","<",""," Parameters: ~"," {mode} Mode short-name (map command prefix: \\"n\\", \\"i\\","," \\"v\\", \\"x\\", …) or \\"!\\" for |:map!|, or empty string"," for |:map|."," {lhs} Left-hand-side |{lhs}| of the mapping."," {rhs} Right-hand-side |{rhs}| of the mapping."," {opts} Optional parameters map. Accepts all"," |:map-arguments| as keys excluding |<buffer>| but"," including |noremap|. Values are Booleans. Unknown"," key is an error."],"nvim_set_option":[" Sets an option value.",""," Parameters: ~"," {name} Option name"," {value} New option value"],"nvim_set_var":[" Sets a global (g:) variable.",""," Parameters: ~"," {name} Variable name"," {value} Variable value"],"nvim_set_vvar":[" Sets a v: variable, if it is not readonly.",""," Parameters: ~"," {name} Variable name"," {value} Variable value"],"nvim_strwidth":[" Calculates the number of display cells occupied by `text` ."," <Tab> counts as one cell.",""," Parameters: ~"," {text} Some text",""," Return: ~"," Number of cells"],"nvim_subscribe":[" Subscribes to event broadcasts.",""," Parameters: ~"," {event} Event type string"],"nvim_unsubscribe":[" Unsubscribes to event broadcasts.",""," Parameters: ~"," {event} Event type string",""],"nvim__buf_redraw_range":[" TODO: Documentation"],"nvim__buf_set_luahl":[" Unstabilized interface for defining syntax hl in lua.",""," This is not yet safe for general use, lua callbacks will need"," to be restricted, like textlock and probably other stuff.",""," The API on_line/nvim__put_attr is quite raw and not intended"," to be the final shape. Ideally this should operate on chunks"," larger than a single line to reduce interpreter overhead, and"," generate annotation objects (bufhl/virttext) on the fly but"," using the same representation."],"nvim__buf_stats":[" TODO: Documentation",""],"nvim_buf_add_highlight":[" Adds a highlight to buffer.",""," Useful for plugins that dynamically generate highlights to a"," buffer (like a semantic highlighter or linter). The function"," adds a single highlight to a buffer. Unlike |matchaddpos()|"," highlights follow changes to line numbering (as lines are"," inserted/removed above the highlighted line), like signs and"," marks do.",""," Namespaces are used for batch deletion/updating of a set of"," highlights. To create a namespace, use |nvim_create_namespace|"," which returns a namespace id. Pass it in to this function as"," `ns_id` to add highlights to the namespace. All highlights in"," the same namespace can then be cleared with single call to"," |nvim_buf_clear_namespace|. If the highlight never will be"," deleted by an API call, pass `ns_id = -1` .",""," As a shorthand, `ns_id = 0` can be used to create a new"," namespace for the highlight, the allocated id is then"," returned. If `hl_group` is the empty string no highlight is"," added, but a new `ns_id` is still returned. This is supported"," for backwards compatibility, new code should use"," |nvim_create_namespace| to create a new empty namespace.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} namespace to use or -1 for ungrouped"," highlight"," {hl_group} Name of the highlight group to use"," {line} Line to highlight (zero-indexed)"," {col_start} Start of (byte-indexed) column range to"," highlight"," {col_end} End of (byte-indexed) column range to"," highlight, or -1 to highlight to end of line",""," Return: ~"," The ns_id that was used"],"nvim_buf_attach":[" Activates buffer-update events on a channel, or as Lua"," callbacks.",""," Example (Lua): capture buffer updates in a global `events` variable (use \\"print(vim.inspect(events))\\" to see its"," contents): >"," events = {}"," vim.api.nvim_buf_attach(0, false, {"," on_lines=function(...) table.insert(events, {...}) end})","<",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {send_buffer} True if the initial notification should"," contain the whole buffer: first"," notification will be `nvim_buf_lines_event`"," . Else the first notification will be"," `nvim_buf_changedtick_event` . Not for Lua"," callbacks."," {opts} Optional parameters."," • on_lines: Lua callback invoked on change."," Return`true`to detach. Args:"," • buffer handle"," • b:changedtick"," • first line that changed (zero-indexed)"," • last line that was changed"," • last line in the updated range"," • byte count of previous contents"," • deleted_codepoints (if `utf_sizes` is"," true)"," • deleted_codeunits (if `utf_sizes` is"," true)",""," • on_changedtick: Lua callback invoked on"," changedtick increment without text"," change. Args:"," • buffer handle"," • b:changedtick",""," • on_detach: Lua callback invoked on"," detach. Args:"," • buffer handle",""," • utf_sizes: include UTF-32 and UTF-16 size"," of the replaced region, as args to"," `on_lines` .",""," Return: ~"," False if attach failed (invalid parameter, or buffer isn\'t"," loaded); otherwise True. TODO: LUA_API_NO_EVAL",""," See also: ~"," |nvim_buf_detach()|"," |api-buffer-updates-lua|",""],"nvim_buf_clear_namespace":[" Clears namespaced objects (highlights, extmarks, virtual text)"," from a region.",""," Lines are 0-indexed. |api-indexing| To clear the namespace in"," the entire buffer, specify line_start=0 and line_end=-1.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace to clear, or -1 to clear all"," namespaces."," {line_start} Start of range of lines to clear"," {line_end} End of range of lines to clear (exclusive)"," or -1 to clear to end of buffer."],"nvim_buf_del_extmark":[" Removes an extmark.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace id from |nvim_create_namespace()|"," {id} Extmark id",""," Return: ~"," true if the extmark was found, else false"],"nvim_buf_del_keymap":[" Unmaps a buffer-local |mapping| for the given mode.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," See also: ~"," |nvim_del_keymap()|"],"nvim_buf_del_var":[" Removes a buffer-scoped (b:) variable",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Variable name"],"nvim_buf_detach":[" Deactivates buffer-update events on the channel.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," False if detach failed (because the buffer isn\'t loaded);"," otherwise True.",""," See also: ~"," |nvim_buf_attach()|"," |api-lua-detach| for detaching Lua callbacks"],"nvim_buf_get_changedtick":[" Gets a changed tick of a buffer",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," `b:changedtick` value."],"nvim_buf_get_commands":[" Gets a map of buffer-local |user-commands|.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {opts} Optional parameters. Currently not used.",""," Return: ~"," Map of maps describing commands.",""],"nvim_buf_get_extmark_by_id":[" Returns position for a given extmark id",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace id from |nvim_create_namespace()|"," {id} Extmark id",""," Return: ~"," (row, col) tuple or empty list () if extmark id was absent",""],"nvim_buf_get_extmarks":[" Gets extmarks in \\"traversal order\\" from a |charwise| region"," defined by buffer positions (inclusive, 0-indexed"," |api-indexing|).",""," Region can be given as (row,col) tuples, or valid extmark ids"," (whose positions define the bounds). 0 and -1 are understood"," as (0,0) and (-1,-1) respectively, thus the following are"," equivalent:",">"," nvim_buf_get_extmarks(0, my_ns, 0, -1, {})"," nvim_buf_get_extmarks(0, my_ns, [0,0], [-1,-1], {})","<",""," If `end` is less than `start` , traversal works backwards."," (Useful with `limit` , to get the first marks prior to a given"," position.)",""," Example:",">"," local a = vim.api"," local pos = a.nvim_win_get_cursor(0)"," local ns = a.nvim_create_namespace(\'my-plugin\')"," -- Create new extmark at line 1, column 1."," local m1 = a.nvim_buf_set_extmark(0, ns, 0, 0, 0, {})"," -- Create new extmark at line 3, column 1."," local m2 = a.nvim_buf_set_extmark(0, ns, 0, 2, 0, {})"," -- Get extmarks only from line 3."," local ms = a.nvim_buf_get_extmarks(0, ns, {2,0}, {2,0}, {})"," -- Get all marks in this buffer + namespace."," local all = a.nvim_buf_get_extmarks(0, ns, 0, -1, {})"," print(vim.inspect(ms))","<",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace id from |nvim_create_namespace()|"," {start} Start of range, given as (row, col) or valid"," extmark id (whose position defines the bound)"," {end} End of range, given as (row, col) or valid"," extmark id (whose position defines the bound)"," {opts} Optional parameters. Keys:"," • limit: Maximum number of marks to return",""," Return: ~"," List of [extmark_id, row, col] tuples in \\"traversal"," order\\"."],"nvim_buf_get_keymap":[" Gets a list of buffer-local |mapping| definitions.",""," Parameters: ~"," {mode} Mode short-name (\\"n\\", \\"i\\", \\"v\\", ...)"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," Array of maparg()-like dictionaries describing mappings."," The \\"buffer\\" key holds the associated buffer handle.",""],"nvim_buf_get_lines":[" Gets a line-range from the buffer.",""," Indexing is zero-based, end-exclusive. Negative indices are"," interpreted as length+1+index: -1 refers to the index past the"," end. So to get the last element use start=-2 and end=-1.",""," Out-of-bounds indices are clamped to the nearest valid value,"," unless `strict_indexing` is set.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {start} First line index"," {end} Last line index (exclusive)"," {strict_indexing} Whether out-of-bounds should be an"," error.",""," Return: ~"," Array of lines, or empty array for unloaded buffer."],"nvim_buf_get_mark":[" Return a tuple (row,col) representing the position of the"," named mark.",""," Marks are (1,0)-indexed. |api-indexing|",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Mark name",""," Return: ~"," (row, col) tuple"],"nvim_buf_get_name":[" Gets the full file name for the buffer",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," Buffer name"],"nvim_buf_get_offset":[" Returns the byte offset of a line (0-indexed). |api-indexing|",""," Line 1 (index=0) has offset 0. UTF-8 bytes are counted. EOL is"," one byte. \'fileformat\' and \'fileencoding\' are ignored. The"," line index just after the last line gives the total byte-count"," of the buffer. A final EOL byte is counted if it would be"," written, see \'eol\'.",""," Unlike |line2byte()|, throws error for out-of-bounds indexing."," Returns -1 for unloaded buffer.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {index} Line index",""," Return: ~"," Integer byte offset, or -1 for unloaded buffer."],"nvim_buf_get_option":[" Gets a buffer option value",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Option name",""," Return: ~"," Option value"],"nvim_buf_get_var":[" Gets a buffer-scoped (b:) variable.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Variable name",""," Return: ~"," Variable value",""],"nvim_buf_get_virtual_text":[" Get the virtual text (annotation) for a buffer line.",""," The virtual text is returned as list of lists, whereas the"," inner lists have either one or two elements. The first element"," is the actual text, the optional second element is the"," highlight group.",""," The format is exactly the same as given to"," nvim_buf_set_virtual_text().",""," If there is no virtual text associated with the given line, an"," empty list is returned.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {line} Line to get the virtual text from (zero-indexed)",""," Return: ~"," List of virtual text chunks"],"nvim_buf_is_loaded":[" Checks if a buffer is valid and loaded. See |api-buffer| for"," more info about unloaded buffers.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," true if the buffer is valid and loaded, false otherwise."],"nvim_buf_is_valid":[" Checks if a buffer is valid.",""," Note:"," Even if a buffer is valid it may have been unloaded. See"," |api-buffer| for more info about unloaded buffers.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," true if the buffer is valid, false otherwise."],"nvim_buf_line_count":[" Gets the buffer line count",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," Return: ~"," Line count, or 0 for unloaded buffer. |api-buffer|",""],"nvim_buf_set_extmark":[" Creates or updates an extmark.",""," To create a new extmark, pass id=0. The extmark id will be"," returned. It is also allowed to create a new mark by passing"," in a previously unused id, but the caller must then keep track"," of existing and unused ids itself. (Useful over RPC, to avoid"," waiting for the return value.)",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace id from |nvim_create_namespace()|"," {id} Extmark id, or 0 to create new"," {line} Line number where to place the mark"," {col} Column where to place the mark"," {opts} Optional parameters. Currently not used.",""," Return: ~"," Id of the created/updated extmark",""],"nvim_buf_set_keymap":[" Sets a buffer-local |mapping| for the given mode.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer",""," See also: ~"," |nvim_set_keymap()|",""],"nvim_buf_set_lines":[" Sets (replaces) a line-range in the buffer.",""," Indexing is zero-based, end-exclusive. Negative indices are"," interpreted as length+1+index: -1 refers to the index past the"," end. So to change or delete the last element use start=-2 and"," end=-1.",""," To insert lines at a given index, set `start` and `end` to the"," same index. To delete a range of lines, set `replacement` to"," an empty array.",""," Out-of-bounds indices are clamped to the nearest valid value,"," unless `strict_indexing` is set.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {start} First line index"," {end} Last line index (exclusive)"," {strict_indexing} Whether out-of-bounds should be an"," error."," {replacement} Array of lines to use as replacement"],"nvim_buf_set_name":[" Sets the full file name for a buffer",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Buffer name"],"nvim_buf_set_option":[" Sets a buffer option value. Passing \'nil\' as value deletes the"," option (only works if there\'s a global fallback)",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Option name"," {value} Option value"],"nvim_buf_set_var":[" Sets a buffer-scoped (b:) variable",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {name} Variable name"," {value} Variable value",""],"nvim_buf_set_virtual_text":[" Set the virtual text (annotation) for a buffer line.",""," By default (and currently the only option) the text will be"," placed after the buffer text. Virtual text will never cause"," reflow, rather virtual text will be truncated at the end of"," the screen line. The virtual text will begin one cell"," (|lcs-eol| or space) after the ordinary text.",""," Namespaces are used to support batch deletion/updating of"," virtual text. To create a namespace, use"," |nvim_create_namespace|. Virtual text is cleared using"," |nvim_buf_clear_namespace|. The same `ns_id` can be used for"," both virtual text and highlights added by"," |nvim_buf_add_highlight|, both can then be cleared with a"," single call to |nvim_buf_clear_namespace|. If the virtual text"," never will be cleared by an API call, pass `ns_id = -1` .",""," As a shorthand, `ns_id = 0` can be used to create a new"," namespace for the virtual text, the allocated id is then"," returned.",""," Parameters: ~"," {buffer} Buffer handle, or 0 for current buffer"," {ns_id} Namespace to use or 0 to create a namespace, or"," -1 for a ungrouped annotation"," {line} Line to annotate with virtual text"," (zero-indexed)"," {chunks} A list of [text, hl_group] arrays, each"," representing a text chunk with specified"," highlight. `hl_group` element can be omitted for"," no highlight."," {opts} Optional parameters. Currently not used.",""," Return: ~"," The ns_id that was used",""],"nvim_win_close":[" Closes the window (like |:close| with a |window-ID|).",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {force} Behave like `:close!` The last window of a"," buffer with unwritten changes can be closed. The"," buffer will become hidden, even if \'hidden\' is"," not set."],"nvim_win_del_var":[" Removes a window-scoped (w:) variable",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {name} Variable name"],"nvim_win_get_buf":[" Gets the current buffer in a window",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Buffer handle"],"nvim_win_get_config":[" Gets window configuration.",""," The returned value may be given to |nvim_open_win()|.",""," `relative` is empty for normal windows.",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Map defining the window configuration, see"," |nvim_open_win()|"],"nvim_win_get_cursor":[" Gets the (1,0)-indexed cursor position in the window."," |api-indexing|",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," (row, col) tuple"],"nvim_win_get_height":[" Gets the window height",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Height as a count of rows"],"nvim_win_get_number":[" Gets the window number",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Window number"],"nvim_win_get_option":[" Gets a window option value",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {name} Option name",""," Return: ~"," Option value"],"nvim_win_get_position":[" Gets the window position in display cells. First position is"," zero.",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," (row, col) tuple with the window position"],"nvim_win_get_tabpage":[" Gets the window tabpage",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Tabpage that contains the window"],"nvim_win_get_var":[" Gets a window-scoped (w:) variable",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {name} Variable name",""," Return: ~"," Variable value"],"nvim_win_get_width":[" Gets the window width",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," Width as a count of columns"],"nvim_win_is_valid":[" Checks if a window is valid",""," Parameters: ~"," {window} Window handle, or 0 for current window",""," Return: ~"," true if the window is valid, false otherwise"],"nvim_win_set_buf":[" Sets the current buffer in a window, without side-effects",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {buffer} Buffer handle"],"nvim_win_set_config":[" Configures window layout. Currently only for floating and"," external windows (including changing a split window to those"," layouts).",""," When reconfiguring a floating window, absent option keys will"," not be changed. `row` / `col` and `relative` must be"," reconfigured together.",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {config} Map defining the window configuration, see"," |nvim_open_win()|",""," See also: ~"," |nvim_open_win()|"],"nvim_win_set_cursor":[" Sets the (1,0)-indexed cursor position in the window."," |api-indexing|",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {pos} (row, col) tuple representing the new position"],"nvim_win_set_height":[" Sets the window height. This will only succeed if the screen"," is split horizontally.",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {height} Height as a count of rows"],"nvim_win_set_option":[" Sets a window option value. Passing \'nil\' as value deletes the"," option(only works if there\'s a global fallback)",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {name} Option name"," {value} Option value"],"nvim_win_set_var":[" Sets a window-scoped (w:) variable",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {name} Variable name"," {value} Variable value"],"nvim_win_set_width":[" Sets the window width. This will only succeed if the screen is"," split vertically.",""," Parameters: ~"," {window} Window handle, or 0 for current window"," {width} Width as a count of columns",""],"nvim_tabpage_del_var":[" Removes a tab-scoped (t:) variable",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage"," {name} Variable name"],"nvim_tabpage_get_number":[" Gets the tabpage number",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage",""," Return: ~"," Tabpage number"],"nvim_tabpage_get_var":[" Gets a tab-scoped (t:) variable",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage"," {name} Variable name",""," Return: ~"," Variable value"],"nvim_tabpage_get_win":[" Gets the current window in a tabpage",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage",""," Return: ~"," Window handle"],"nvim_tabpage_is_valid":[" Checks if a tabpage is valid",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage",""," Return: ~"," true if the tabpage is valid, false otherwise"],"nvim_tabpage_list_wins":[" Gets the windows in a tabpage",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage",""," Return: ~"," List of windows in `tabpage`",""],"nvim_tabpage_set_var":[" Sets a tab-scoped (t:) variable",""," Parameters: ~"," {tabpage} Tabpage handle, or 0 for current tabpage"," {name} Variable name"," {value} Variable value",""],"nvim_ui_attach":[" Activates UI events on the channel.",""," Entry point of all UI clients. Allows |--embed| to continue"," startup. Implies that the client is ready to show the UI. Adds"," the client to the list of UIs. |nvim_list_uis()|",""," Note:"," If multiple UI clients are attached, the global screen"," dimensions degrade to the smallest client. E.g. if client"," A requests 80x40 but client B requests 200x100, the global"," screen has size 80x40.",""," Parameters: ~"," {width} Requested screen columns"," {height} Requested screen rows"," {options} |ui-option| map"],"nvim_ui_detach":[" Deactivates UI events on the channel.",""," Removes the client from the list of UIs. |nvim_list_uis()|"],"nvim_ui_pum_set_height":[" Tells Nvim the number of elements displaying in the popumenu,"," to decide <PageUp> and <PageDown> movement.",""," Parameters: ~"," {height} Popupmenu height, must be greater than zero."],"nvim_ui_set_option":[" TODO: Documentation"],"nvim_ui_try_resize":[" TODO: Documentation",""],"nvim_ui_try_resize_grid":[" Tell Nvim to resize a grid. Triggers a grid_resize event with"," the requested grid size or the maximum size if it exceeds size"," limits.",""," On invalid grid handle, fails with error.",""," Parameters: ~"," {grid} The handle of the grid to be changed."," {width} The new requested width."," {height} The new requested height."],"balloon_gettext":["\\t\\tReturn the current text in the balloon. Only for the string,","\\t\\tnot used for the List."],"balloon_show":["\\t\\tShow {expr} inside the balloon. For the GUI {expr} is used as","\\t\\ta string. For a terminal {expr} can be a list, which contains","\\t\\tthe lines of the balloon. If {expr} is not a list it will be","\\t\\tsplit with |balloon_split()|.","\\t\\tIf {expr} is an empty string any existing balloon is removed.","","\\t\\tExample: >","\\t\\t\\tfunc GetBalloonContent()","\\t\\t\\t \\" ... initiate getting the content","\\t\\t\\t return \'\'","\\t\\t\\tendfunc","\\t\\t\\tset balloonexpr=GetBalloonContent()","","\\t\\t\\tfunc BalloonCallback(result)","\\t\\t\\t call balloon_show(a:result)","\\t\\t\\tendfunc","<\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->balloon_show()","<","\\t\\tThe intended use is that fetching the content of the balloon","\\t\\tis initiated from \'balloonexpr\'. It will invoke an","\\t\\tasynchronous method, in which a callback invokes","\\t\\tballoon_show(). The \'balloonexpr\' itself can return an","\\t\\tempty string or a placeholder.","","\\t\\tWhen showing a balloon is not possible nothing happens, no","\\t\\terror message.","\\t\\t{only available when compiled with the |+balloon_eval| or","\\t\\t|+balloon_eval_term| feature}"],"balloon_split":["\\t\\tSplit {msg} into lines to be displayed in a balloon. The","\\t\\tsplits are made for the current window size and optimize to","\\t\\tshow debugger output.","\\t\\tReturns a |List| with the split lines.","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->balloon_split()->balloon_show()","","<\\t\\t{only available when compiled with the |+balloon_eval_term|","\\t\\tfeature}",""],"ch_canread":["\\t\\tReturn non-zero when there is something to read from {handle}.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","","\\t\\tThis is useful to read from a channel at a convenient time,","\\t\\te.g. from a timer.","","\\t\\tNote that messages are dropped when the channel does not have","\\t\\ta callback. Add a close callback to avoid that.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_canread()"],"ch_close":["\\t\\tClose {handle}. See |channel-close|.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\tA close callback is not invoked.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_close()"],"ch_close_in":["\\t\\tClose the \\"in\\" part of {handle}. See |channel-close-in|.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\tA close callback is not invoked.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_close_in()",""],"ch_evalexpr":["\\t\\tSend {expr} over {handle}. The {expr} is encoded","\\t\\taccording to the type of channel. The function cannot be used","\\t\\twith a raw channel. See |channel-use|.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\t\\t\\t\\t\\t\\t\\t*E917*","\\t\\t{options} must be a Dictionary. It must not have a \\"callback\\"","\\t\\tentry. It can have a \\"timeout\\" entry to specify the timeout","\\t\\tfor this specific request.","","\\t\\tch_evalexpr() waits for a response and returns the decoded","\\t\\texpression. When there is an error or timeout it returns an","\\t\\tempty string.","","\\t\\tNote that while waiting for the response, Vim handles other","\\t\\tmessages. You need to make sure this doesn\'t cause trouble.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_evalexpr(expr)",""],"ch_evalraw":["\\t\\tSend {string} over {handle}.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","","\\t\\tWorks like |ch_evalexpr()|, but does not encode the request or","\\t\\tdecode the response. The caller is responsible for the","\\t\\tcorrect contents. Also does not add a newline for a channel","\\t\\tin NL mode, the caller must do that. The NL in the response","\\t\\tis removed.","\\t\\tNote that Vim does not know when the text received on a raw","\\t\\tchannel is complete, it may only return the first part and you","\\t\\tneed to use |ch_readraw()| to fetch the rest.","\\t\\tSee |channel-use|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_evalraw(rawstring)"],"ch_getbufnr":["\\t\\tGet the buffer number that {handle} is using for {what}.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\t{what} can be \\"err\\" for stderr, \\"out\\" for stdout or empty for","\\t\\tsocket output.","\\t\\tReturns -1 when there is no buffer.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_getbufnr(what)"],"ch_getjob":["\\t\\tGet the Job associated with {channel}.","\\t\\tIf there is no job calling |job_status()| on the returned Job","\\t\\twill result in \\"fail\\".","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_getjob()",""],"ch_info":["\\t\\tReturns a Dictionary with information about {handle}. The","\\t\\titems are:","\\t\\t \\"id\\"\\t\\t number of the channel","\\t\\t \\"status\\"\\t \\"open\\", \\"buffered\\" or \\"closed\\", like","\\t\\t\\t\\t ch_status()","\\t\\tWhen opened with ch_open():","\\t\\t \\"hostname\\"\\t the hostname of the address","\\t\\t \\"port\\"\\t the port of the address","\\t\\t \\"sock_status\\" \\"open\\" or \\"closed\\"","\\t\\t \\"sock_mode\\"\\t \\"NL\\", \\"RAW\\", \\"JSON\\" or \\"JS\\"","\\t\\t \\"sock_io\\"\\t \\"socket\\"","\\t\\t \\"sock_timeout\\" timeout in msec","\\t\\tWhen opened with job_start():","\\t\\t \\"out_status\\"\\t \\"open\\", \\"buffered\\" or \\"closed\\"","\\t\\t \\"out_mode\\"\\t \\"NL\\", \\"RAW\\", \\"JSON\\" or \\"JS\\"","\\t\\t \\"out_io\\"\\t \\"null\\", \\"pipe\\", \\"file\\" or \\"buffer\\"","\\t\\t \\"out_timeout\\" timeout in msec","\\t\\t \\"err_status\\"\\t \\"open\\", \\"buffered\\" or \\"closed\\"","\\t\\t \\"err_mode\\"\\t \\"NL\\", \\"RAW\\", \\"JSON\\" or \\"JS\\"","\\t\\t \\"err_io\\"\\t \\"out\\", \\"null\\", \\"pipe\\", \\"file\\" or \\"buffer\\"","\\t\\t \\"err_timeout\\" timeout in msec","\\t\\t \\"in_status\\"\\t \\"open\\" or \\"closed\\"","\\t\\t \\"in_mode\\"\\t \\"NL\\", \\"RAW\\", \\"JSON\\" or \\"JS\\"","\\t\\t \\"in_io\\"\\t \\"null\\", \\"pipe\\", \\"file\\" or \\"buffer\\"","\\t\\t \\"in_timeout\\"\\t timeout in msec","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_info()",""],"ch_log":["\\t\\tWrite {msg} in the channel log file, if it was opened with","\\t\\t|ch_logfile()|.","\\t\\tWhen {handle} is passed the channel number is used for the","\\t\\tmessage.","\\t\\t{handle} can be a Channel or a Job that has a Channel. The","\\t\\tChannel must be open for the channel number to be used.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\t\'did something\'->ch_log()",""],"ch_logfile":["\\t\\tStart logging channel activity to {fname}.","\\t\\tWhen {fname} is an empty string: stop logging.","","\\t\\tWhen {mode} is omitted or \\"a\\" append to the file.","\\t\\tWhen {mode} is \\"w\\" start with an empty file.","","\\t\\tUse |ch_log()| to write log messages. The file is flushed","\\t\\tafter every message, on Unix you can use \\"tail -f\\" to see what","\\t\\tis going on in real time.","","\\t\\tThis function is not available in the |sandbox|.","\\t\\tNOTE: the channel communication is stored in the file, be","\\t\\taware that this may contain confidential and privacy sensitive","\\t\\tinformation, e.g. a password you type in a terminal window.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\t\'logfile\'->ch_logfile(\'w\')",""],"ch_open":["\\t\\tOpen a channel to {address}. See |channel|.","\\t\\tReturns a Channel. Use |ch_status()| to check for failure.","","\\t\\t{address} has the form \\"hostname:port\\", e.g.,","\\t\\t\\"localhost:8765\\".","","\\t\\tIf {options} is given it must be a |Dictionary|.","\\t\\tSee |channel-open-options|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetAddress()->ch_open()",""],"ch_read":["\\t\\tRead from {handle} and return the received message.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\tFor a NL channel this waits for a NL to arrive, except when","\\t\\tthere is nothing more to read (channel was closed).","\\t\\tSee |channel-more|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_read()",""],"ch_readblob":["\\t\\tLike ch_read() but reads binary data and returns a |Blob|.","\\t\\tSee |channel-more|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_readblob()",""],"ch_readraw":["\\t\\tLike ch_read() but for a JS and JSON channel does not decode","\\t\\tthe message. For a NL channel it does not block waiting for","\\t\\tthe NL to arrive, but otherwise works like ch_read().","\\t\\tSee |channel-more|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_readraw()",""],"ch_sendexpr":["\\t\\tSend {expr} over {handle}. The {expr} is encoded","\\t\\taccording to the type of channel. The function cannot be used","\\t\\twith a raw channel.","\\t\\tSee |channel-use|.\\t\\t\\t\\t*E912*","\\t\\t{handle} can be a Channel or a Job that has a Channel.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_sendexpr(expr)",""],"ch_sendraw":["\\t\\tSend |String| or |Blob| {expr} over {handle}.","\\t\\tWorks like |ch_sendexpr()|, but does not encode the request or","\\t\\tdecode the response. The caller is responsible for the","\\t\\tcorrect contents. Also does not add a newline for a channel","\\t\\tin NL mode, the caller must do that. The NL in the response","\\t\\tis removed.","\\t\\tSee |channel-use|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_sendraw(rawexpr)",""],"ch_setoptions":["\\t\\tSet options on {handle}:","\\t\\t\\t\\"callback\\"\\tthe channel callback","\\t\\t\\t\\"timeout\\"\\tdefault read timeout in msec","\\t\\t\\t\\"mode\\"\\t\\tmode for the whole channel","\\t\\tSee |ch_open()| for more explanation.","\\t\\t{handle} can be a Channel or a Job that has a Channel.","","\\t\\tNote that changing the mode may cause queued messages to be","\\t\\tlost.","","\\t\\tThese options cannot be changed:","\\t\\t\\t\\"waittime\\"\\tonly applies to |ch_open()|","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_setoptions(options)",""],"ch_status":["\\t\\tReturn the status of {handle}:","\\t\\t\\t\\"fail\\"\\t\\tfailed to open the channel","\\t\\t\\t\\"open\\"\\t\\tchannel can be used","\\t\\t\\t\\"buffered\\"\\tchannel can be read, not written to","\\t\\t\\t\\"closed\\"\\tchannel can not be used","\\t\\t{handle} can be a Channel or a Job that has a Channel.","\\t\\t\\"buffered\\" is used when the channel was closed but there is","\\t\\tstill data that can be obtained with |ch_read()|.","","\\t\\tIf {options} is given it can contain a \\"part\\" entry to specify","\\t\\tthe part of the channel to return the status for: \\"out\\" or","\\t\\t\\"err\\". For example, to get the error status: >","\\t\\t\\tch_status(job, {\\"part\\": \\"err\\"})","<","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChannel()->ch_status()"],"chdir":["\\t\\tChange the current working directory to {dir}. The scope of","\\t\\tthe directory change depends on the directory of the current","\\t\\twindow:","\\t\\t\\t- If the current window has a window-local directory","\\t\\t\\t (|:lcd|), then changes the window local directory.","\\t\\t\\t- Otherwise, if the current tabpage has a local","\\t\\t\\t directory (|:tcd|) then changes the tabpage local","\\t\\t\\t directory.","\\t\\t\\t- Otherwise, changes the global directory.","\\t\\tIf successful, returns the previous working directory. Pass","\\t\\tthis to another chdir() to restore the directory.","\\t\\tOn failure, returns an empty string.","","\\t\\tExample: >","\\t\\t\\tlet save_dir = chdir(newdir)","\\t\\t\\tif save_dir != \\"\\"","\\t\\t\\t \\" ... do some work","\\t\\t\\t call chdir(save_dir)","\\t\\t\\tendif","","<\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetDir()->chdir()"],"getimstatus":["\\t\\tThe result is a Number, which is |TRUE| when the IME status is","\\t\\tactive.","\\t\\tSee \'imstatusfunc\'."],"getmousepos":["\\t\\tReturns a Dictionary with the last known position of the","\\t\\tmouse. This can be used in a mapping for a mouse click or in","\\t\\ta filter of a popup window. The items are:","\\t\\t\\tscreenrow\\tscreen row","\\t\\t\\tscreencol\\tscreen column","\\t\\t\\twinid\\t\\tWindow ID of the click","\\t\\t\\twinrow\\t\\trow inside \\"winid\\"","\\t\\t\\twincol\\t\\tcolumn inside \\"winid\\"","\\t\\t\\tline\\t\\ttext line inside \\"winid\\"","\\t\\t\\tcolumn\\t\\ttext column inside \\"winid\\"","\\t\\tAll numbers are 1-based.","","\\t\\tIf not over a window, e.g. when in the command line, then only","\\t\\t\\"screenrow\\" and \\"screencol\\" are valid, the others are zero.","","\\t\\tWhen on the status line below a window or the vertical","\\t\\tseparater right of a window, the \\"line\\" and \\"column\\" values","\\t\\tare zero.","","\\t\\tWhen the position is after the text then \\"column\\" is the","\\t\\tlength of the text in bytes.","","\\t\\tIf the mouse is over a popup window then that window is used.","","","\\t\\tWhen using |getchar()| the Vim variables |v:mouse_lnum|,","\\t\\t|v:mouse_col| and |v:mouse_winid| also provide these values.",""],"inputdialog":["\\t\\tLike |input()|, but when the GUI is running and text dialogs","\\t\\tare supported, a dialog window pops up to input the text.","\\t\\tExample: >","\\t\\t :let n = inputdialog(\\"value for shiftwidth\\", shiftwidth())","\\t\\t :if n != \\"\\"","\\t\\t : let &sw = n","\\t\\t :endif","<\\t\\tWhen the dialog is cancelled {cancelreturn} is returned. When","\\t\\tomitted an empty string is returned.","\\t\\tHitting <Enter> works like pressing the OK button. Hitting","\\t\\t<Esc> works like pressing the Cancel button.","\\t\\tNOTE: Command-line completion is not supported.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPrompt()->inputdialog()"],"interrupt":["\\t\\tInterrupt script execution. It works more or less like the","\\t\\tuser typing CTRL-C, most commands won\'t execute and control","\\t\\treturns to the user. This is useful to abort execution","\\t\\tfrom lower down, e.g. in an autocommand. Example: >","\\t\\t:function s:check_typoname(file)","\\t\\t: if fnamemodify(a:file, \':t\') == \'[\'","\\t\\t: echomsg \'Maybe typo\'","\\t\\t: call interrupt()","\\t\\t: endif","\\t\\t:endfunction","\\t\\t:au BufWritePre * call s:check_typoname(expand(\'<amatch>\'))"],"job_getchannel":["\\t\\tGet the channel handle that {job} is using.","\\t\\tTo check if the job has no channel: >","\\t\\t\\tif string(job_getchannel()) == \'channel fail\'","<","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetJob()->job_getchannel()"],"job_info":["\\t\\tReturns a Dictionary with information about {job}:","\\t\\t \\"status\\"\\twhat |job_status()| returns","\\t\\t \\"channel\\"\\twhat |job_getchannel()| returns","\\t\\t \\"cmd\\"\\tList of command arguments used to start the job","\\t\\t \\"process\\"\\tprocess ID","\\t\\t \\"tty_in\\"\\tterminal input name, empty when none","\\t\\t \\"tty_out\\"\\tterminal output name, empty when none","\\t\\t \\"exitval\\"\\tonly valid when \\"status\\" is \\"dead\\"","\\t\\t \\"exit_cb\\"\\tfunction to be called on exit","\\t\\t \\"stoponexit\\"\\t|job-stoponexit|","","\\t\\t Only in Unix:","\\t\\t \\"termsig\\"\\tthe signal which terminated the process","\\t\\t\\t\\t(See |job_stop()| for the values)","\\t\\t\\t\\tonly valid when \\"status\\" is \\"dead\\"","","\\t\\t Only in MS-Windows:","\\t\\t \\"tty_type\\"\\tType of virtual console in use.","\\t\\t\\t\\tValues are \\"winpty\\" or \\"conpty\\".","\\t\\t\\t\\tSee \'termwintype\'.","","\\t\\tWithout any arguments, returns a List with all Job objects.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetJob()->job_info()",""],"job_setoptions":["\\t\\tChange options for {job}. Supported are:","\\t\\t \\"stoponexit\\"\\t|job-stoponexit|","\\t\\t \\"exit_cb\\"\\t|job-exit_cb|","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetJob()->job_setoptions(options)",""],"job_start":["\\t\\tStart a job and return a Job object. Unlike |system()| and","\\t\\t|:!cmd| this does not wait for the job to finish.","\\t\\tTo start a job in a terminal window see |term_start()|.","","\\t\\tIf the job fails to start then |job_status()| on the returned","\\t\\tJob object results in \\"fail\\" and none of the callbacks will be","\\t\\tinvoked.","","\\t\\t{command} can be a String. This works best on MS-Windows. On","\\t\\tUnix it is split up in white-separated parts to be passed to","\\t\\texecvp(). Arguments in double quotes can contain white space.","","\\t\\t{command} can be a List, where the first item is the executable","\\t\\tand further items are the arguments. All items are converted","\\t\\tto String. This works best on Unix.","","\\t\\tOn MS-Windows, job_start() makes a GUI application hidden. If","\\t\\twant to show it, Use |:!start| instead.","","\\t\\tThe command is executed directly, not through a shell, the","\\t\\t\'shell\' option is not used. To use the shell: >","\\tlet job = job_start([\\"/bin/sh\\", \\"-c\\", \\"echo hello\\"])","<\\t\\tOr: >","\\tlet job = job_start(\'/bin/sh -c \\"echo hello\\"\')","<\\t\\tNote that this will start two processes, the shell and the","\\t\\tcommand it executes. If you don\'t want this use the \\"exec\\"","\\t\\tshell command.","","\\t\\tOn Unix $PATH is used to search for the executable only when","\\t\\tthe command does not contain a slash.","","\\t\\tThe job will use the same terminal as Vim. If it reads from","\\t\\tstdin the job and Vim will be fighting over input, that","\\t\\tdoesn\'t work. Redirect stdin and stdout to avoid problems: >","\\tlet job = job_start([\'sh\', \'-c\', \\"myserver </dev/null >/dev/null\\"])","<","\\t\\tThe returned Job object can be used to get the status with","\\t\\t|job_status()| and stop the job with |job_stop()|.","","\\t\\tNote that the job object will be deleted if there are no","\\t\\treferences to it. This closes the stdin and stderr, which may","\\t\\tcause the job to fail with an error. To avoid this keep a","\\t\\treference to the job. Thus instead of: >","\\tcall job_start(\'my-command\')","<\\t\\tuse: >","\\tlet myjob = job_start(\'my-command\')","<\\t\\tand unlet \\"myjob\\" once the job is not needed or is past the","\\t\\tpoint where it would fail (e.g. when it prints a message on","\\t\\tstartup). Keep in mind that variables local to a function","\\t\\twill cease to exist if the function returns. Use a","\\t\\tscript-local variable if needed: >","\\tlet s:myjob = job_start(\'my-command\')","<","\\t\\t{options} must be a Dictionary. It can contain many optional","\\t\\titems, see |job-options|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tBuildCommand()->job_start()",""],"job_status":["\\t\\tReturns a String with the status of {job}:","\\t\\t\\t\\"run\\"\\tjob is running","\\t\\t\\t\\"fail\\"\\tjob failed to start","\\t\\t\\t\\"dead\\"\\tjob died or was stopped after running","","\\t\\tOn Unix a non-existing command results in \\"dead\\" instead of","\\t\\t\\"fail\\", because a fork happens before the failure can be","\\t\\tdetected.","","\\t\\tIf an exit callback was set with the \\"exit_cb\\" option and the","\\t\\tjob is now detected to be \\"dead\\" the callback will be invoked.","","\\t\\tFor more information see |job_info()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetJob()->job_status()",""],"job_stop":["\\t\\tStop the {job}. This can also be used to signal the job.","","\\t\\tWhen {how} is omitted or is \\"term\\" the job will be terminated.","\\t\\tFor Unix SIGTERM is sent. On MS-Windows the job will be","\\t\\tterminated forcedly (there is no \\"gentle\\" way).","\\t\\tThis goes to the process group, thus children may also be","\\t\\taffected.","","\\t\\tEffect for Unix:","\\t\\t\\t\\"term\\"\\t SIGTERM (default)","\\t\\t\\t\\"hup\\"\\t SIGHUP","\\t\\t\\t\\"quit\\"\\t SIGQUIT","\\t\\t\\t\\"int\\"\\t SIGINT","\\t\\t\\t\\"kill\\"\\t SIGKILL (strongest way to stop)","\\t\\t\\tnumber\\t signal with that number","","\\t\\tEffect for MS-Windows:","\\t\\t\\t\\"term\\"\\t terminate process forcedly (default)","\\t\\t\\t\\"hup\\"\\t CTRL_BREAK","\\t\\t\\t\\"quit\\"\\t CTRL_BREAK","\\t\\t\\t\\"int\\"\\t CTRL_C","\\t\\t\\t\\"kill\\"\\t terminate process forcedly","\\t\\t\\tOthers\\t CTRL_BREAK","","\\t\\tOn Unix the signal is sent to the process group. This means","\\t\\tthat when the job is \\"sh -c command\\" it affects both the shell","\\t\\tand the command.","","\\t\\tThe result is a Number: 1 if the operation could be executed,","\\t\\t0 if \\"how\\" is not supported on the system.","\\t\\tNote that even when the operation was executed, whether the","\\t\\tjob was actually stopped needs to be checked with","\\t\\t|job_status()|.","","\\t\\tIf the status of the job is \\"dead\\", the signal will not be","\\t\\tsent. This is to avoid to stop the wrong job (esp. on Unix,","\\t\\twhere process numbers are recycled).","","\\t\\tWhen using \\"kill\\" Vim will assume the job will die and close","\\t\\tthe channel.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetJob()->job_stop()",""],"js_decode":["\\t\\tThis is similar to |json_decode()| with these differences:","\\t\\t- Object key names do not have to be in quotes.","\\t\\t- Strings can be in single quotes.","\\t\\t- Empty items in an array (between two commas) are allowed and","\\t\\t result in v:none items.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tReadObject()->js_decode()"],"js_encode":["\\t\\tThis is similar to |json_encode()| with these differences:","\\t\\t- Object key names are not in quotes.","\\t\\t- v:none items in an array result in an empty item between","\\t\\t commas.","\\t\\tFor example, the Vim object:","\\t\\t\\t[1,v:none,{\\"one\\":1},v:none] ~","\\t\\tWill be encoded as:","\\t\\t\\t[1,,{one:1},,] ~","\\t\\tWhile json_encode() would produce:","\\t\\t\\t[1,null,{\\"one\\":1},null] ~","\\t\\tThis encoding is valid for JavaScript. It is more efficient","\\t\\tthan JSON, especially when using an array with optional items.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetObject()->js_encode()"],"listener_add":["\\t\\tAdd a callback function that will be invoked when changes have","\\t\\tbeen made to buffer {buf}.","\\t\\t{buf} refers to a buffer name or number. For the accepted","\\t\\tvalues, see |bufname()|. When {buf} is omitted the current","\\t\\tbuffer is used.","\\t\\tReturns a unique ID that can be passed to |listener_remove()|.","","\\t\\tThe {callback} is invoked with five arguments:","\\t\\t a:bufnr\\tthe buffer that was changed","\\t\\t a:start\\tfirst changed line number","\\t\\t a:end\\tfirst line number below the change","\\t\\t a:added\\tnumber of lines added, negative if lines were","\\t\\t\\t\\tdeleted","\\t\\t a:changes\\ta List of items with details about the changes","","\\t\\tExample: >","\\t func Listener(bufnr, start, end, added, changes)","\\t echo \'lines \' .. a:start .. \' until \' .. a:end .. \' changed\'","\\t endfunc","\\t call listener_add(\'Listener\', bufnr)","","<\\t\\tThe List cannot be changed. Each item in a:changes is a","\\t\\tdictionary with these entries:","\\t\\t lnum\\tthe first line number of the change","\\t\\t end\\t\\tthe first line below the change","\\t\\t added\\tnumber of lines added; negative if lines were","\\t\\t\\t\\tdeleted","\\t\\t col\\t\\tfirst column in \\"lnum\\" that was affected by","\\t\\t\\t\\tthe change; one if unknown or the whole line","\\t\\t\\t\\twas affected; this is a byte index, first","\\t\\t\\t\\tcharacter has a value of one.","\\t\\tWhen lines are inserted the values are:","\\t\\t lnum\\tline above which the new line is added","\\t\\t end\\t\\tequal to \\"lnum\\"","\\t\\t added\\tnumber of lines inserted","\\t\\t col\\t\\t1","\\t\\tWhen lines are deleted the values are:","\\t\\t lnum\\tthe first deleted line","\\t\\t end\\t\\tthe line below the first deleted line, before","\\t\\t\\t\\tthe deletion was done","\\t\\t added\\tnegative, number of lines deleted","\\t\\t col\\t\\t1","\\t\\tWhen lines are changed:","\\t\\t lnum\\tthe first changed line","\\t\\t end\\t\\tthe line below the last changed line","\\t\\t added\\t0","\\t\\t col\\t\\tfirst column with a change or 1","","\\t\\tThe entries are in the order the changes were made, thus the","\\t\\tmost recent change is at the end. The line numbers are valid","\\t\\twhen the callback is invoked, but later changes may make them","\\t\\tinvalid, thus keeping a copy for later might not work.","","\\t\\tThe {callback} is invoked just before the screen is updated,","\\t\\twhen |listener_flush()| is called or when a change is being","\\t\\tmade that changes the line count in a way it causes a line","\\t\\tnumber in the list of changes to become invalid.","","\\t\\tThe {callback} is invoked with the text locked, see","\\t\\t|textlock|. If you do need to make changes to the buffer, use","\\t\\ta timer to do this later |timer_start()|.","","\\t\\tThe {callback} is not invoked when the buffer is first loaded.","\\t\\tUse the |BufReadPost| autocmd event to handle the initial text","\\t\\tof a buffer.","\\t\\tThe {callback} is also not invoked when the buffer is","\\t\\tunloaded, use the |BufUnload| autocmd event for that.","","\\t\\tCan also be used as a |method|, the base is passed as the","\\t\\tsecond argument: >","\\t\\t\\tGetBuffer()->listener_add(callback)"],"listener_flush":["\\t\\tInvoke listener callbacks for buffer {buf}. If there are no","\\t\\tpending changes then no callbacks are invoked.","","\\t\\t{buf} refers to a buffer name or number. For the accepted","\\t\\tvalues, see |bufname()|. When {buf} is omitted the current","\\t\\tbuffer is used.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBuffer()->listener_flush()"],"listener_remove":["\\t\\tRemove a listener previously added with listener_add().","\\t\\tReturns zero when {id} could not be found, one when {id} was","\\t\\tremoved.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetListenerId()->listener_remove()"],"mzeval":["\\t\\tEvaluate MzScheme expression {expr} and return its result","\\t\\tconverted to Vim data structures.","\\t\\tNumbers and strings are returned as they are.","\\t\\tPairs (including lists and improper lists) and vectors are","\\t\\treturned as Vim |Lists|.","\\t\\tHash tables are represented as Vim |Dictionary| type with keys","\\t\\tconverted to strings.","\\t\\tAll other types are converted to string with display function.","\\t\\tExamples: >","\\t\\t :mz (define l (list 1 2 3))","\\t\\t :mz (define h (make-hash)) (hash-set! h \\"list\\" l)","\\t\\t :echo mzeval(\\"l\\")","\\t\\t :echo mzeval(\\"h\\")","<","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetExpr()->mzeval()","<","\\t\\t{only available when compiled with the |+mzscheme| feature}"],"perleval":["\\t\\tEvaluate Perl expression {expr} in scalar context and return","\\t\\tits result converted to Vim data structures. If value can\'t be","\\t\\tconverted, it is returned as a string Perl representation.","\\t\\tNote: If you want an array or hash, {expr} must return a","\\t\\treference to it.","\\t\\tExample: >","\\t\\t\\t:echo perleval(\'[1 .. 4]\')","<\\t\\t\\t[1, 2, 3, 4]","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetExpr()->perleval()","","<\\t\\t{only available when compiled with the |+perl| feature}","","","popup_ functions are documented here: |popup-functions|.",""],"popup_atcursor":["\\t\\tShow the {what} above the cursor, and close it when the cursor","\\t\\tmoves. This works like: >","\\t\\t\\tcall popup_create({what}, #{","\\t\\t\\t\\t\\\\ pos: \'botleft\',","\\t\\t\\t\\t\\\\ line: \'cursor-1\',","\\t\\t\\t\\t\\\\ col: \'cursor\',","\\t\\t\\t\\t\\\\ moved: \'WORD\',","\\t\\t\\t\\t\\\\ })","<\\t\\tUse {options} to change the properties.","\\t\\tIf \\"pos\\" is passed as \\"topleft\\" then the default for \\"line\\"","\\t\\tbecomes \\"cursor+1\\".","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->popup_atcursor({})",""],"popup_beval":["\\t\\tShow the {what} above the position from \'ballooneval\' and","\\t\\tclose it when the mouse moves. This works like: >","\\t\\t let pos = screenpos(v:beval_winnr, v:beval_lnum, v:beval_col)","\\t\\t call popup_create({what}, #{","\\t\\t\\t\\\\ pos: \'botleft\',","\\t\\t\\t\\\\ line: pos.row - 1,","\\t\\t\\t\\\\ col: pos.col,","\\t\\t\\t\\\\ mousemoved: \'WORD\',","\\t\\t\\t\\\\ })","<\\t\\tUse {options} to change the properties.","\\t\\tSee |popup_beval_example| for an example.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->popup_beval({})","<"],"popup_clear":["\\t\\twindows for the current tab and global popups.",""],"popup_close":["\\t\\tClose popup {id}. The window and the associated buffer will","\\t\\tbe deleted.","","\\t\\tIf the popup has a callback it will be called just before the","\\t\\tpopup window is deleted. If the optional {result} is present","\\t\\tit will be passed as the second argument of the callback.","\\t\\tOtherwise zero is passed to the callback.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_close()"],"popup_create":["\\t\\tOpen a popup window showing {what}, which is either:","\\t\\t- a buffer number","\\t\\t- a string","\\t\\t- a list of strings","\\t\\t- a list of text lines with text properties","\\t\\tWhen {what} is not a buffer number, a buffer is created with","\\t\\t\'buftype\' set to \\"popup\\". That buffer will be wiped out once","\\t\\tthe popup closes.","","\\t\\t{options} is a dictionary with many possible entries.","\\t\\tSee |popup_create-arguments| for details.","","\\t\\tReturns a window-ID, which can be used with other popup","\\t\\tfunctions. Use `winbufnr()` to get the number of the buffer","\\t\\tin the window: >","\\t\\t\\tlet winid = popup_create(\'hello\', {})","\\t\\t\\tlet bufnr = winbufnr(winid)","\\t\\t\\tcall setbufline(bufnr, 2, \'second line\')","<\\t\\tIn case of failure zero is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->popup_create({})"],"popup_dialog":["\\t\\tJust like |popup_create()| but with these default options: >","\\t\\t\\tcall popup_create({what}, #{","\\t\\t\\t\\t\\\\ pos: \'center\',","\\t\\t\\t\\t\\\\ zindex: 200,","\\t\\t\\t\\t\\\\ drag: 1,","\\t\\t\\t\\t\\\\ border: [],","\\t\\t\\t\\t\\\\ padding: [],","\\t\\t\\t\\t\\\\ mapping: 0,","\\t\\t\\t\\t\\\\})","<\\t\\tUse {options} to change the properties. E.g. add a \'filter\'","\\t\\toption with value \'popup_filter_yesno\'. Example: >","\\t\\t\\tcall popup_create(\'do you want to quit (Yes/no)?\', #{","\\t\\t\\t\\t\\\\ filter: \'popup_filter_yesno\',","\\t\\t\\t\\t\\\\ callback: \'QuitCallback\',","\\t\\t\\t\\t\\\\ })","","<\\t\\tBy default the dialog can be dragged, so that text below it","\\t\\tcan be read if needed.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->popup_dialog({})"],"popup_filter_menu":["\\t\\tFilter that can be used for a popup. These keys can be used:","\\t\\t j <Down>\\t\\tselect item below","\\t\\t k <Up>\\t\\tselect item above","\\t\\t <Space> <Enter>\\taccept current selection","\\t\\t x Esc CTRL-C\\tcancel the menu","\\t\\tOther keys are ignored.","","\\t\\tA match is set on that line to highlight it, see","\\t\\t|popup_menu()|.","","\\t\\tWhen the current selection is accepted the \\"callback\\" of the","\\t\\tpopup menu is invoked with the index of the selected line as","\\t\\tthe second argument. The first entry has index one.","\\t\\tCancelling the menu invokes the callback with -1.","","\\t\\tTo add shortcut keys, see the example here:","\\t\\t|popup_menu-shortcut-example|",""],"popup_filter_yesno":["\\t\\tFilter that can be used for a popup. It handles only the keys","\\t\\t\'y\', \'Y\' and \'n\' or \'N\'. Invokes the \\"callback\\" of the","\\t\\tpopup menu with the 1 for \'y\' or \'Y\' and zero for \'n\' or \'N\'","\\t\\tas the second argument. Pressing Esc and \'x\' works like","\\t\\tpressing \'n\'. CTRL-C invokes the callback with -1. Other","\\t\\tkeys are ignored.","\\t\\tSee the example here: |popup_dialog-example|",""],"popup_findinfo":["\\t\\tGet the |window-ID| for the popup info window, as it used by","\\t\\tthe popup menu. See |complete-popup|. The info popup is","\\t\\thidden when not used, it can be deleted with |popup_clear()|","\\t\\tand |popup_close()|. Use |popup_show()| to reposition it to","\\t\\tthe item in the popup menu.","\\t\\tReturns zero if there is none.",""],"popup_findpreview":["\\t\\tGet the |window-ID| for the popup preview window.","\\t\\tReturn zero if there is none.",""],"popup_getoptions":["\\t\\tReturn the {options} for popup {id} in a Dict.","\\t\\tA zero value means the option was not set. For \\"zindex\\" the","\\t\\tdefault value is returned, not zero.","","\\t\\tThe \\"moved\\" entry is a list with line number, minimum and","\\t\\tmaximum column, [0, 0, 0] when not set.","","\\t\\tThe \\"mousemoved\\" entry is a list with screen row, minimum and","\\t\\tmaximum screen column, [0, 0, 0] when not set.","","\\t\\t\\"firstline\\" is the property set on the popup, unlike the","\\t\\t\\"firstline\\" obtained with |popup_getpos()| which is the actual","\\t\\tbuffer line at the top of the popup window.","","\\t\\t\\"border\\" and \\"padding\\" are not included when all values are","\\t\\tzero. When all values are one then an empty list is included.","","\\t\\t\\"borderhighlight\\" is not included when all values are empty.","\\t\\t\\"scrollbarhighlight\\" and \\"thumbhighlight\\" are only included","\\t\\twhen set.","","\\t\\t\\"tabpage\\" will be -1 for a global popup, zero for a popup on","\\t\\tthe current tabpage and a positive number for a popup on","\\t\\tanother tabpage.","","\\t\\t\\"textprop\\", \\"textpropid\\" and \\"textpropwin\\" are only present","\\t\\twhen \\"textprop\\" was set.","","\\t\\tIf popup window {id} is not found an empty Dict is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_getoptions()"],"popup_getpos":["\\t\\tReturn the position and size of popup {id}. Returns a Dict","\\t\\twith these entries:","\\t\\t col\\t\\tscreen column of the popup, one-based","\\t\\t line\\tscreen line of the popup, one-based","\\t\\t width\\twidth of the whole popup in screen cells","\\t\\t height\\theight of the whole popup in screen cells","\\t\\t core_col\\tscreen column of the text box","\\t\\t core_line\\tscreen line of the text box","\\t\\t core_width\\twidth of the text box in screen cells","\\t\\t core_height\\theight of the text box in screen cells","\\t\\t firstline\\tline of the buffer at top (1 unless scrolled)","\\t\\t\\t\\t(not the value of the \\"firstline\\" property)","\\t\\t lastline\\tline of the buffer at the bottom (updated when","\\t\\t\\t\\tthe popup is redrawn)","\\t\\t scrollbar\\tnon-zero if a scrollbar is displayed","\\t\\t visible\\tone if the popup is displayed, zero if hidden","\\t\\tNote that these are the actual screen positions. They differ","\\t\\tfrom the values in `popup_getoptions()` for the sizing and","\\t\\tpositioning mechanism applied.","","\\t\\tThe \\"core_\\" values exclude the padding and border.","","\\t\\tIf popup window {id} is not found an empty Dict is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_getpos()"],"popup_hide":["\\t\\tIf {id} is a displayed popup, hide it now. If the popup has a","\\t\\tfilter it will not be invoked for so long as the popup is","\\t\\thidden.","\\t\\tIf window {id} does not exist nothing happens. If window {id}","\\t\\texists but is not a popup window an error is given. *E993*","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_hide()"],"popup_menu":["\\t\\tShow the {what} near the cursor, handle selecting one of the","\\t\\titems with cursorkeys, and close it an item is selected with","\\t\\tSpace or Enter. {what} should have multiple lines to make this","\\t\\tuseful. This works like: >","\\t\\t\\tcall popup_create({what}, #{","\\t\\t\\t\\t\\\\ pos: \'center\',","\\t\\t\\t\\t\\\\ zindex: 200,","\\t\\t\\t\\t\\\\ drag: 1,","\\t\\t\\t\\t\\\\ wrap: 0,","\\t\\t\\t\\t\\\\ border: [],","\\t\\t\\t\\t\\\\ cursorline: 1,","\\t\\t\\t\\t\\\\ padding: [0,1,0,1],","\\t\\t\\t\\t\\\\ filter: \'popup_filter_menu\',","\\t\\t\\t\\t\\\\ mapping: 0,","\\t\\t\\t\\t\\\\ })","<\\t\\tThe current line is highlighted with a match using","\\t\\t\\"PopupSelected\\", or \\"PmenuSel\\" if that is not defined.","","\\t\\tUse {options} to change the properties. Should at least set","\\t\\t\\"callback\\" to a function that handles the selected item.","\\t\\tExample: >","\\t\\t\\tfunc ColorSelected(id, result)","\\t\\t\\t \\" use a:result","\\t\\t\\tendfunc","\\t\\t\\tcall popup_menu([\'red\', \'green\', \'blue\'], #{","\\t\\t\\t\\t\\\\ callback: \'ColorSelected\',","\\t\\t\\t\\t\\\\ })","","<\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetChoices()->popup_menu({})"],"popup_move":["\\t\\tMove popup {id} to the position specified with {options}.","\\t\\t{options} may contain the items from |popup_create()| that","\\t\\tspecify the popup position:","\\t\\t\\tline","\\t\\t\\tcol","\\t\\t\\tpos","\\t\\t\\tmaxheight","\\t\\t\\tminheight","\\t\\t\\tmaxwidth","\\t\\t\\tminwidth","\\t\\t\\tfixed","\\t\\tFor {id} see `popup_hide()`.","\\t\\tFor other options see |popup_setoptions()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_move(options)"],"popup_notification":["\\t\\tShow the {what} for 3 seconds at the top of the Vim window.","\\t\\tThis works like: >","\\t\\t\\tcall popup_create({what}, #{","\\t\\t\\t\\t\\\\ line: 1,","\\t\\t\\t\\t\\\\ col: 10,","\\t\\t\\t\\t\\\\ minwidth: 20,","\\t\\t\\t\\t\\\\ time: 3000,","\\t\\t\\t\\t\\\\ tabpage: -1,","\\t\\t\\t\\t\\\\ zindex: 300,","\\t\\t\\t\\t\\\\ drag: 1,","\\t\\t\\t\\t\\\\ highlight: \'WarningMsg\',","\\t\\t\\t\\t\\\\ border: [],","\\t\\t\\t\\t\\\\ close: \'click\',","\\t\\t\\t\\t\\\\ padding: [0,1,0,1],","\\t\\t\\t\\t\\\\ })","<\\t\\tThe PopupNotification highlight group is used instead of","\\t\\tWarningMsg if it is defined.","","\\t\\tWithout the |+timers| feature the popup will not disappear","\\t\\tautomatically, the user has to click in it.","","\\t\\tThe position will be adjusted to avoid overlap with other","\\t\\tnotifications.","\\t\\tUse {options} to change the properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->popup_notification({})"],"popup_show":["\\t\\tIf {id} is a hidden popup, show it now.","\\t\\tFor {id} see `popup_hide()`.","\\t\\tIf {id} is the info popup it will be positioned next to the","\\t\\tcurrent popup menu item.",""],"popup_setoptions":["\\t\\tOverride options in popup {id} with entries in {options}.","\\t\\tThese options can be set:","\\t\\t\\tborder","\\t\\t\\tborderchars","\\t\\t\\tborderhighlight","\\t\\t\\tcallback","\\t\\t\\tclose","\\t\\t\\tcursorline","\\t\\t\\tdrag","\\t\\t\\tfilter","\\t\\t\\tfirstline","\\t\\t\\tflip","\\t\\t\\thighlight","\\t\\t\\tmapping","\\t\\t\\tmask","\\t\\t\\tmoved","\\t\\t\\tpadding","\\t\\t\\tresize","\\t\\t\\tscrollbar","\\t\\t\\tscrollbarhighlight","\\t\\t\\tthumbhighlight","\\t\\t\\ttime","\\t\\t\\ttitle","\\t\\t\\twrap","\\t\\t\\tzindex","\\t\\tThe options from |popup_move()| can also be used.","\\t\\tFor \\"hidden\\" use |popup_hide()| and |popup_show()|.","\\t\\t\\"tabpage\\" cannot be changed.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_setoptions(options)"],"popup_settext":["\\t\\tSet the text of the buffer in popup win {id}. {text} is the","\\t\\tsame as supplied to |popup_create()|, except that a buffer","\\t\\tnumber is not allowed.","\\t\\tDoes not change the window size or position, other than caused","\\t\\tby the different text.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPopup()->popup_settext(\'hello\')"],"prop_add":["\\t\\tAttach a text property at position {lnum}, {col}. {col} is","\\t\\tcounted in bytes, use one for the first column.","\\t\\tIf {lnum} is invalid an error is given. *E966*","\\t\\tIf {col} is invalid an error is given. *E964*","","\\t\\t{props} is a dictionary with these fields:","\\t\\t length\\tlength of text in bytes, can only be used","\\t\\t\\t\\tfor a property that does not continue in","\\t\\t\\t\\tanother line; can be zero","\\t\\t end_lnum\\tline number for the end of text","\\t\\t end_col\\tcolumn just after the text; not used when","\\t\\t\\t\\t\\"length\\" is present; when {col} and \\"end_col\\"","\\t\\t\\t\\tare equal, and \\"end_lnum\\" is omitted or equal","\\t\\t\\t\\tto {lnum}, this is a zero-width text property","\\t\\t bufnr\\tbuffer to add the property to; when omitted","\\t\\t\\t\\tthe current buffer is used","\\t\\t id\\t\\tuser defined ID for the property; when omitted","\\t\\t\\t\\tzero is used","\\t\\t type\\t\\tname of the text property type","\\t\\tAll fields except \\"type\\" are optional.","","\\t\\tIt is an error when both \\"length\\" and \\"end_lnum\\" or \\"end_col\\"","\\t\\tare given. Either use \\"length\\" or \\"end_col\\" for a property","\\t\\twithin one line, or use \\"end_lnum\\" and \\"end_col\\" for a","\\t\\tproperty that spans more than one line.","\\t\\tWhen neither \\"length\\" nor \\"end_col\\" are given the property","\\t\\twill be zero-width. That means it will not be highlighted but","\\t\\twill move with the text, as a kind of mark.","\\t\\tThe property can end exactly at the last character of the","\\t\\ttext, or just after it. In the last case, if text is appended","\\t\\tto the line, the text property size will increase, also when","\\t\\tthe property type does not have \\"end_incl\\" set.","","\\t\\t\\"type\\" will first be looked up in the buffer the property is","\\t\\tadded to. When not found, the global property types are used.","\\t\\tIf not found an error is given.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetLnum()->prop_add(col, props)",""],"prop_clear":["\\t\\tRemove all text properties from line {lnum}.","\\t\\tWhen {lnum-end} is given, remove all text properties from line","\\t\\t{lnum} to {lnum-end} (inclusive).","","\\t\\tWhen {props} contains a \\"bufnr\\" item use this buffer,","\\t\\totherwise use the current buffer.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetLnum()->prop_clear()","<"],"prop_find":["\\t\\t{not implemented yet}","\\t\\tSearch for a text property as specified with {props}:","\\t\\t id\\t\\tproperty with this ID","\\t\\t type\\t\\tproperty with this type name","\\t\\t bufnr\\tbuffer to search in; when present a","\\t\\t\\t\\tstart position with \\"lnum\\" and \\"col\\"","\\t\\t\\t\\tmust be given; when omitted the","\\t\\t\\t\\tcurrent buffer is used","\\t\\t lnum\\t\\tstart in this line (when omitted start","\\t\\t\\t\\tat the cursor)","\\t\\t col\\t\\tstart at this column (when omitted","\\t\\t\\t\\tand \\"lnum\\" is given: use column 1,","\\t\\t\\t\\totherwise start at the cursor)","\\t\\t skipstart\\tdo not look for a match at the start","\\t\\t\\t\\tposition","","\\t\\t{direction} can be \\"f\\" for forward and \\"b\\" for backward. When","\\t\\tomitted forward search is performed.","","\\t\\tIf a match is found then a Dict is returned with the entries","\\t\\tas with prop_list(), and additionally an \\"lnum\\" entry.","\\t\\tIf no match is found then an empty Dict is returned.","","\\t\\tSee |text-properties| for information about text properties.",""],"prop_list":["\\t\\tReturn a List with all text properties in line {lnum}.","","\\t\\tWhen {props} contains a \\"bufnr\\" item, use this buffer instead","\\t\\tof the current buffer.","","\\t\\tThe properties are ordered by starting column and priority.","\\t\\tEach property is a Dict with these entries:","\\t\\t col\\t\\tstarting column","\\t\\t length\\tlength in bytes, one more if line break is","\\t\\t\\t\\tincluded","\\t\\t id\\t\\tproperty ID","\\t\\t type\\t\\tname of the property type, omitted if","\\t\\t\\t\\tthe type was deleted","\\t\\t start\\twhen TRUE property starts in this line","\\t\\t end\\t\\twhen TRUE property ends in this line","","\\t\\tWhen \\"start\\" is zero the property started in a previous line,","\\t\\tthe current one is a continuation.","\\t\\tWhen \\"end\\" is zero the property continues in the next line.","\\t\\tThe line break after this line is included.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetLnum()->prop_list()","<"],"prop_remove":["\\t\\tRemove a matching text property from line {lnum}. When","\\t\\t{lnum-end} is given, remove matching text properties from line","\\t\\t{lnum} to {lnum-end} (inclusive).","\\t\\tWhen {lnum} is omitted remove matching text properties from","\\t\\tall lines.","","\\t\\t{props} is a dictionary with these fields:","\\t\\t id\\t\\tremove text properties with this ID","\\t\\t type\\t\\tremove text properties with this type name","\\t\\t bufnr\\tuse this buffer instead of the current one","\\t\\t all\\t\\twhen TRUE remove all matching text properties,","\\t\\t\\t\\tnot just the first one","\\t\\tA property matches when either \\"id\\" or \\"type\\" matches.","\\t\\tIf buffer \\"bufnr\\" does not exist you get an error message.","\\t\\tIf buffer \\"bufnr\\" is not loaded then nothing happens.","","\\t\\tReturns the number of properties that were removed.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetProps()->prop_remove()",""],"prop_type_add":["\\t\\tAdd a text property type {name}. If a property type with this","\\t\\tname already exists an error is given. Nothing is returned.","\\t\\t{props} is a dictionary with these optional fields:","\\t\\t bufnr\\tdefine the property only for this buffer; this","\\t\\t\\t\\tavoids name collisions and automatically","\\t\\t\\t\\tclears the property types when the buffer is","\\t\\t\\t\\tdeleted.","\\t\\t highlight\\tname of highlight group to use","\\t\\t priority\\twhen a character has multiple text","\\t\\t\\t\\tproperties the one with the highest priority","\\t\\t\\t\\twill be used; negative values can be used, the","\\t\\t\\t\\tdefault priority is zero","\\t\\t combine\\twhen TRUE combine the highlight with any","\\t\\t\\t\\tsyntax highlight; when omitted or FALSE syntax","\\t\\t\\t\\thighlight will not be used","\\t\\t start_incl\\twhen TRUE inserts at the start position will","\\t\\t\\t\\tbe included in the text property","\\t\\t end_incl\\twhen TRUE inserts at the end position will be","\\t\\t\\t\\tincluded in the text property","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPropName()->prop_type_add(props)"],"prop_type_change":["\\t\\tChange properties of an existing text property type. If a","\\t\\tproperty with this name does not exist an error is given.","\\t\\tThe {props} argument is just like |prop_type_add()|.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPropName()->prop_type_change(props)"],"prop_type_delete":["\\t\\tRemove the text property type {name}. When text properties","\\t\\tusing the type {name} are still in place, they will not have","\\t\\tan effect and can no longer be removed by name.","","\\t\\t{props} can contain a \\"bufnr\\" item. When it is given, delete","\\t\\ta property type from this buffer instead of from the global","\\t\\tproperty types.","","\\t\\tWhen text property type {name} is not found there is no error.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPropName()->prop_type_delete()"],"prop_type_get":["\\t\\tReturns the properties of property type {name}. This is a","\\t\\tdictionary with the same fields as was given to","\\t\\tprop_type_add().","\\t\\tWhen the property type {name} does not exist, an empty","\\t\\tdictionary is returned.","","\\t\\t{props} can contain a \\"bufnr\\" item. When it is given, use","\\t\\tthis buffer instead of the global property types.","","\\t\\tSee |text-properties| for information about text properties.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetPropName()->prop_type_get()"],"prop_type_list":["\\t\\tReturns a list with all property type names.","","\\t\\t{props} can contain a \\"bufnr\\" item. When it is given, use","\\t\\tthis buffer instead of the global property types.","","\\t\\tSee |text-properties| for information about text properties.",""],"rand":["\\t\\tReturn a pseudo-random Number generated with an xoshiro128**","\\t\\talgorithm using seed {expr}. The returned number is 32 bits,","\\t\\talso on 64 bits systems, for consistency.","\\t\\t{expr} can be initialized by |srand()| and will be updated by","\\t\\trand(). If {expr} is omitted, an internal seed value is used","\\t\\tand updated.","","\\t\\tExamples: >","\\t\\t\\t:echo rand()","\\t\\t\\t:let seed = srand()","\\t\\t\\t:echo rand(seed)","\\t\\t\\t:echo rand(seed) % 16 \\" random number 0 - 15","<"],"rubyeval":["\\t\\tEvaluate Ruby expression {expr} and return its result","\\t\\tconverted to Vim data structures.","\\t\\tNumbers, floats and strings are returned as they are (strings","\\t\\tare copied though).","\\t\\tArrays are represented as Vim |List| type.","\\t\\tHashes are represented as Vim |Dictionary| type.","\\t\\tOther objects are represented as strings resulted from their","\\t\\t\\"Object#to_s\\" method.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetRubyExpr()->rubyeval()","","<\\t\\t{only available when compiled with the |+ruby| feature}"],"screenchars":["\\t\\tThe result is a List of Numbers. The first number is the same","\\t\\tas what |screenchar()| returns. Further numbers are","\\t\\tcomposing characters on top of the base character.","\\t\\tThis is mainly to be used for testing.","\\t\\tReturns an empty List when row or col is out of range.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetRow()->screenchars(col)"],"screenstring":["\\t\\tThe result is a String that contains the base character and","\\t\\tany composing characters at position [row, col] on the screen.","\\t\\tThis is like |screenchars()| but returning a String with the","\\t\\tcharacters.","\\t\\tThis is mainly to be used for testing.","\\t\\tReturns an empty String when row or col is out of range.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetRow()->screenstring(col)"],"sound_clear":["\\t\\tStop playing all sounds.","\\t\\t{only available when compiled with the |+sound| feature}",""],"sound_playevent":["\\t\\tPlay a sound identified by {name}. Which event names are","\\t\\tsupported depends on the system. Often the XDG sound names","\\t\\tare used. On Ubuntu they may be found in","\\t\\t/usr/share/sounds/freedesktop/stereo. Example: >","\\t\\t\\tcall sound_playevent(\'bell\')","<\\t\\tOn MS-Windows, {name} can be SystemAsterisk, SystemDefault,","\\t\\tSystemExclamation, SystemExit, SystemHand, SystemQuestion,","\\t\\tSystemStart, SystemWelcome, etc.","","\\t\\tWhen {callback} is specified it is invoked when the sound is","\\t\\tfinished. The first argument is the sound ID, the second","\\t\\targument is the status:","\\t\\t\\t0\\tsound was played to the end","\\t\\t\\t1\\tsound was interrupted","\\t\\t\\t2\\terror occurred after sound started","\\t\\tExample: >","\\t\\t func Callback(id, status)","\\t\\t echomsg \\"sound \\" .. a:id .. \\" finished with \\" .. a:status","\\t\\t endfunc","\\t\\t call sound_playevent(\'bell\', \'Callback\')","","<\\t\\tMS-Windows: {callback} doesn\'t work for this function.","","\\t\\tReturns the sound ID, which can be passed to `sound_stop()`.","\\t\\tReturns zero if the sound could not be played.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetSoundName()->sound_playevent()","","<\\t\\t{only available when compiled with the |+sound| feature}",""],"sound_playfile":["\\t\\tLike `sound_playevent()` but play sound file {path}. {path}","\\t\\tmust be a full path. On Ubuntu you may find files to play","\\t\\twith this command: >","\\t\\t :!find /usr/share/sounds -type f | grep -v index.theme","","<\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetSoundPath()->sound_playfile()","","<\\t\\t{only available when compiled with the |+sound| feature}",""],"sound_stop":["\\t\\tStop playing sound {id}. {id} must be previously returned by","\\t\\t`sound_playevent()` or `sound_playfile()`.","","\\t\\tOn MS-Windows, this does not work for event sound started by","\\t\\t`sound_playevent()`. To stop event sounds, use `sound_clear()`.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tsoundid->sound_stop()","","<\\t\\t{only available when compiled with the |+sound| feature}",""],"srand":["\\t\\tInitialize seed used by |rand()|:","\\t\\t- If {expr} is not given, seed values are initialized by","\\t\\t reading from /dev/urandom, if possible, or using time(NULL)","\\t\\t a.k.a. epoch time otherwise; this only has second accuracy.","\\t\\t- If {expr} is given it must be a Number. It is used to","\\t\\t initialize the seed values. This is useful for testing or","\\t\\t when a predictable sequence is intended.","","\\t\\tExamples: >","\\t\\t\\t:let seed = srand()","\\t\\t\\t:let seed = srand(userinput)","\\t\\t\\t:echo rand(seed)"],"state":["\\t\\tReturn a string which contains characters indicating the","\\t\\tcurrent state. Mostly useful in callbacks that want to do","\\t\\twork that may not always be safe. Roughly this works like:","\\t\\t- callback uses state() to check if work is safe to do.","\\t\\t Yes: then do it right away.","\\t\\t No: add to work queue and add a |SafeState| and/or","\\t\\t |SafeStateAgain| autocommand (|SafeState| triggers at","\\t\\t toplevel, |SafeStateAgain| triggers after handling","\\t\\t messages and callbacks).","\\t\\t- When SafeState or SafeStateAgain is triggered and executes","\\t\\t your autocommand, check with `state()` if the work can be","\\t\\t done now, and if yes remove it from the queue and execute.","\\t\\t Remove the autocommand if the queue is now empty.","\\t\\tAlso see |mode()|.","","\\t\\tWhen {what} is given only characters in this string will be","\\t\\tadded. E.g, this checks if the screen has scrolled: >","\\t\\t\\tif state(\'s\') == \'\'","\\t\\t\\t \\" screen has not scrolled","<","\\t\\tThese characters indicate the state, generally indicating that","\\t\\tsomething is busy:","\\t\\t m\\thalfway a mapping, :normal command, feedkeys() or","\\t\\t\\tstuffed command","\\t\\t o\\toperator pending or waiting for a command argument,","\\t\\t e.g. after |f|","\\t\\t a\\tInsert mode autocomplete active","\\t\\t x\\texecuting an autocommand","\\t\\t w\\tblocked on waiting, e.g. ch_evalexpr(), ch_read() and","\\t\\t\\tch_readraw() when reading json.","\\t\\t S\\tnot triggering SafeState or SafeStateAgain","\\t\\t c\\tcallback invoked, including timer (repeats for","\\t\\t\\trecursiveness up to \\"ccc\\")","\\t\\t s\\tscreen has scrolled for messages"],"strptime":["\\t\\tThe result is a Number, which is a unix timestamp representing","\\t\\tthe date and time in {timestring}, which is expected to match","\\t\\tthe format specified in {format}.","","\\t\\tThe accepted {format} depends on your system, thus this is not","\\t\\tportable! See the manual page of the C function strptime()","\\t\\tfor the format. Especially avoid \\"%c\\". The value of $TZ also","\\t\\tmatters.","","\\t\\tIf the {timestring} cannot be parsed with {format} zero is","\\t\\treturned. If you do not know the format of {timestring} you","\\t\\tcan try different {format} values until you get a non-zero","\\t\\tresult.","","\\t\\tSee also |strftime()|.","\\t\\tExamples: >","\\t\\t :echo strptime(\\"%Y %b %d %X\\", \\"1997 Apr 27 11:49:23\\")","<\\t\\t 862156163 >","\\t\\t :echo strftime(\\"%c\\", strptime(\\"%y%m%d %T\\", \\"970427 11:53:55\\"))","<\\t\\t Sun Apr 27 11:53:55 1997 >","\\t\\t :echo strftime(\\"%c\\", strptime(\\"%Y%m%d%H%M%S\\", \\"19970427115355\\") + 3600)","<\\t\\t Sun Apr 27 12:53:55 1997","","\\t\\tNot available on all systems. To check use: >","\\t\\t\\t:if exists(\\"*strptime\\")",""],"term_dumpdiff":["\\t\\tOpen a new window displaying the difference between the two","\\t\\tfiles. The files must have been created with","\\t\\t|term_dumpwrite()|.","\\t\\tReturns the buffer number or zero when the diff fails.","\\t\\tAlso see |terminal-diff|.","\\t\\tNOTE: this does not work with double-width characters yet.","","\\t\\tThe top part of the buffer contains the contents of the first","\\t\\tfile, the bottom part of the buffer contains the contents of","\\t\\tthe second file. The middle part shows the differences.","\\t\\tThe parts are separated by a line of equals.","","\\t\\tIf the {options} argument is present, it must be a Dict with","\\t\\tthese possible members:","\\t\\t \\"term_name\\"\\t name to use for the buffer name, instead","\\t\\t\\t\\t of the first file name.","\\t\\t \\"term_rows\\"\\t vertical size to use for the terminal,","\\t\\t\\t\\t instead of using \'termwinsize\'","\\t\\t \\"term_cols\\"\\t horizontal size to use for the terminal,","\\t\\t\\t\\t instead of using \'termwinsize\'","\\t\\t \\"vertical\\"\\t split the window vertically","\\t\\t \\"curwin\\"\\t use the current window, do not split the","\\t\\t\\t\\t window; fails if the current buffer","\\t\\t\\t\\t cannot be |abandon|ed","\\t\\t \\"bufnr\\"\\t do not create a new buffer, use the","\\t\\t\\t\\t existing buffer \\"bufnr\\". This buffer","\\t\\t\\t\\t must have been previously created with","\\t\\t\\t\\t term_dumpdiff() or term_dumpload() and","\\t\\t\\t\\t visible in a window.","\\t\\t \\"norestore\\"\\t do not add the terminal window to a","\\t\\t\\t\\t session file","","\\t\\tEach character in the middle part indicates a difference. If","\\t\\tthere are multiple differences only the first in this list is","\\t\\tused:","\\t\\t\\tX\\tdifferent character","\\t\\t\\tw\\tdifferent width","\\t\\t\\tf\\tdifferent foreground color","\\t\\t\\tb\\tdifferent background color","\\t\\t\\ta\\tdifferent attribute","\\t\\t\\t+\\tmissing position in first file","\\t\\t\\t-\\tmissing position in second file","","\\t\\tUsing the \\"s\\" key the top and bottom parts are swapped. This","\\t\\tmakes it easy to spot a difference.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetFilename()->term_dumpdiff(otherfile)","<"],"term_dumpload":["\\t\\tOpen a new window displaying the contents of {filename}","\\t\\tThe file must have been created with |term_dumpwrite()|.","\\t\\tReturns the buffer number or zero when it fails.","\\t\\tAlso see |terminal-diff|.","","\\t\\tFor {options} see |term_dumpdiff()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetFilename()->term_dumpload()","<"],"term_dumpwrite":["\\t\\tDump the contents of the terminal screen of {buf} in the file","\\t\\t{filename}. This uses a format that can be used with","\\t\\t|term_dumpload()| and |term_dumpdiff()|.","\\t\\tIf the job in the terminal already finished an error is given:","\\t\\t*E958*","\\t\\tIf {filename} already exists an error is given:\\t*E953*","\\t\\tAlso see |terminal-diff|.","","\\t\\t{options} is a dictionary with these optional entries:","\\t\\t\\t\\"rows\\"\\t\\tmaximum number of rows to dump","\\t\\t\\t\\"columns\\"\\tmaximum number of columns to dump","","\\t\\tCan also be used as a |method|, the base is used for the file","\\t\\tname: >","\\t\\t\\tGetFilename()->term_dumpwrite(bufnr)"],"term_getaltscreen":["\\t\\tReturns 1 if the terminal of {buf} is using the alternate","\\t\\tscreen.","\\t\\t{buf} is used as with |term_getsize()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getaltscreen()",""],"term_getansicolors":["\\t\\tGet the ANSI color palette in use by terminal {buf}.","\\t\\tReturns a List of length 16 where each element is a String","\\t\\trepresenting a color in hexadecimal \\"#rrggbb\\" format.","\\t\\tAlso see |term_setansicolors()| and |g:terminal_ansi_colors|.","\\t\\tIf neither was used returns the default colors.","","\\t\\t{buf} is used as with |term_getsize()|. If the buffer does not","\\t\\texist or is not a terminal window, an empty list is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getansicolors()","","<\\t\\t{only available when compiled with GUI enabled and/or the","\\t\\t|+termguicolors| feature}"],"term_getattr":["\\t\\tGiven {attr}, a value returned by term_scrape() in the \\"attr\\"","\\t\\titem, return whether {what} is on. {what} can be one of:","\\t\\t\\tbold","\\t\\t\\titalic","\\t\\t\\tunderline","\\t\\t\\tstrike","\\t\\t\\treverse","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetAttr()->term_getattr()",""],"term_getcursor":["\\t\\tGet the cursor position of terminal {buf}. Returns a list with","\\t\\ttwo numbers and a dictionary: [row, col, dict].","","\\t\\t\\"row\\" and \\"col\\" are one based, the first screen cell is row","\\t\\t1, column 1. This is the cursor position of the terminal","\\t\\titself, not of the Vim window.","","\\t\\t\\"dict\\" can have these members:","\\t\\t \\"visible\\"\\tone when the cursor is visible, zero when it","\\t\\t\\t\\tis hidden.","\\t\\t \\"blink\\"\\tone when the cursor is blinking, zero when it","\\t\\t\\t\\tis not blinking.","\\t\\t \\"shape\\"\\t1 for a block cursor, 2 for underline and 3","\\t\\t\\t\\tfor a vertical bar.","\\t\\t \\"color\\"\\tcolor of the cursor, e.g. \\"green\\"","","\\t\\t{buf} must be the buffer number of a terminal window. If the","\\t\\tbuffer does not exist or is not a terminal window, an empty","\\t\\tlist is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getcursor()"],"term_getjob":["\\t\\tGet the Job associated with terminal window {buf}.","\\t\\t{buf} is used as with |term_getsize()|.","\\t\\tReturns |v:null| when there is no job.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getjob()",""],"term_getline":["\\t\\tGet a line of text from the terminal window of {buf}.","\\t\\t{buf} is used as with |term_getsize()|.","","\\t\\tThe first line has {row} one. When {row} is \\".\\" the cursor","\\t\\tline is used. When {row} is invalid an empty string is","\\t\\treturned.","","\\t\\tTo get attributes of each character use |term_scrape()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getline(row)",""],"term_getscrolled":["\\t\\tReturn the number of lines that scrolled to above the top of","\\t\\tterminal {buf}. This is the offset between the row number","\\t\\tused for |term_getline()| and |getline()|, so that: >","\\t\\t\\tterm_getline(buf, N)","<\\t\\tis equal to: >","\\t\\t\\tgetline(N + term_getscrolled(buf))","<\\t\\t(if that line exists).","","\\t\\t{buf} is used as with |term_getsize()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getscrolled()",""],"term_getsize":["\\t\\tGet the size of terminal {buf}. Returns a list with two","\\t\\tnumbers: [rows, cols]. This is the size of the terminal, not","\\t\\tthe window containing the terminal.","","\\t\\t{buf} must be the buffer number of a terminal window. Use an","\\t\\tempty string for the current buffer. If the buffer does not","\\t\\texist or is not a terminal window, an empty list is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getsize()",""],"term_getstatus":["\\t\\tGet the status of terminal {buf}. This returns a comma","\\t\\tseparated list of these items:","\\t\\t\\trunning\\t\\tjob is running","\\t\\t\\tfinished\\tjob has finished","\\t\\t\\tnormal\\t\\tin Terminal-Normal mode","\\t\\tOne of \\"running\\" or \\"finished\\" is always present.","","\\t\\t{buf} must be the buffer number of a terminal window. If the","\\t\\tbuffer does not exist or is not a terminal window, an empty","\\t\\tstring is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_getstatus()",""],"term_gettitle":["\\t\\tGet the title of terminal {buf}. This is the title that the","\\t\\tjob in the terminal has set.","","\\t\\t{buf} must be the buffer number of a terminal window. If the","\\t\\tbuffer does not exist or is not a terminal window, an empty","\\t\\tstring is returned.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_gettitle()",""],"term_gettty":["\\t\\tGet the name of the controlling terminal associated with","\\t\\tterminal window {buf}. {buf} is used as with |term_getsize()|.","","\\t\\tWhen {input} is omitted or 0, return the name for writing","\\t\\t(stdout). When {input} is 1 return the name for reading","\\t\\t(stdin). On UNIX, both return same name.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_gettty()",""],"term_list":["\\t\\tReturn a list with the buffer numbers of all buffers for","\\t\\tterminal windows.",""],"term_scrape":["\\t\\tGet the contents of {row} of terminal screen of {buf}.","\\t\\tFor {buf} see |term_getsize()|.","","\\t\\tThe first line has {row} one. When {row} is \\".\\" the cursor","\\t\\tline is used. When {row} is invalid an empty string is","\\t\\treturned.","","\\t\\tReturn a List containing a Dict for each screen cell:","\\t\\t \\"chars\\"\\tcharacter(s) at the cell","\\t\\t \\"fg\\"\\tforeground color as #rrggbb","\\t\\t \\"bg\\"\\tbackground color as #rrggbb","\\t\\t \\"attr\\"\\tattributes of the cell, use |term_getattr()|","\\t\\t\\t\\tto get the individual flags","\\t\\t \\"width\\"\\tcell width: 1 or 2","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_scrape(row)",""],"term_sendkeys":["\\t\\tSend keystrokes {keys} to terminal {buf}.","\\t\\t{buf} is used as with |term_getsize()|.","","\\t\\t{keys} are translated as key sequences. For example, \\"\\\\<c-x>\\"","\\t\\tmeans the character CTRL-X.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_sendkeys(keys)",""],"term_setapi":["\\t\\tSet the function name prefix to be used for the |terminal-api|","\\t\\tfunction in terminal {buf}. For example: >","\\t\\t :call term_setapi(buf, \\"Myapi_\\")","\\t\\t :call term_setapi(buf, \\"\\")","<","\\t\\tThe default is \\"Tapi_\\". When {expr} is an empty string then","\\t\\tno |terminal-api| function can be used for {buf}."],"term_setansicolors":["\\t\\tSet the ANSI color palette used by terminal {buf}.","\\t\\t{colors} must be a List of 16 valid color names or hexadecimal","\\t\\tcolor codes, like those accepted by |highlight-guifg|.","\\t\\tAlso see |term_getansicolors()| and |g:terminal_ansi_colors|.","","\\t\\tThe colors normally are:","\\t\\t\\t0 black","\\t\\t\\t1 dark red","\\t\\t\\t2 dark green","\\t\\t\\t3 brown","\\t\\t\\t4 dark blue","\\t\\t\\t5 dark magenta","\\t\\t\\t6 dark cyan","\\t\\t\\t7 light grey","\\t\\t\\t8 dark grey","\\t\\t\\t9 red","\\t\\t\\t10 green","\\t\\t\\t11 yellow","\\t\\t\\t12 blue","\\t\\t\\t13 magenta","\\t\\t\\t14 cyan","\\t\\t\\t15 white","","\\t\\tThese colors are used in the GUI and in the terminal when","\\t\\t\'termguicolors\' is set. When not using GUI colors (GUI mode","\\t\\tor \'termguicolors\'), the terminal window always uses the 16","\\t\\tANSI colors of the underlying terminal.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_setansicolors(colors)","","<\\t\\t{only available with GUI enabled and/or the |+termguicolors|","\\t\\tfeature}"],"term_setkill":["\\t\\tWhen exiting Vim or trying to close the terminal window in","\\t\\tanother way, {how} defines whether the job in the terminal can","\\t\\tbe stopped.","\\t\\tWhen {how} is empty (the default), the job will not be","\\t\\tstopped, trying to exit will result in |E947|.","\\t\\tOtherwise, {how} specifies what signal to send to the job.","\\t\\tSee |job_stop()| for the values.","","\\t\\tAfter sending the signal Vim will wait for up to a second to","\\t\\tcheck that the job actually stopped.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_setkill(how)",""],"term_setrestore":["\\t\\tSet the command to write in a session file to restore the job","\\t\\tin this terminal. The line written in the session file is: >","\\t\\t\\tterminal ++curwin ++cols=%d ++rows=%d {command}","<\\t\\tMake sure to escape the command properly.","","\\t\\tUse an empty {command} to run \'shell\'.","\\t\\tUse \\"NONE\\" to not restore this window.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_setrestore(command)",""],"term_setsize":["\\t\\tSet the size of terminal {buf}. The size of the window","\\t\\tcontaining the terminal will also be adjusted, if possible.","\\t\\tIf {rows} or {cols} is zero or negative, that dimension is not","\\t\\tchanged.","","\\t\\t{buf} must be the buffer number of a terminal window. Use an","\\t\\tempty string for the current buffer. If the buffer does not","\\t\\texist or is not a terminal window, an error is given.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_setsize(rows, cols)",""],"term_start":["\\t\\tOpen a terminal window and run {cmd} in it.","","\\t\\t{cmd} can be a string or a List, like with |job_start()|. The","\\t\\tstring \\"NONE\\" can be used to open a terminal window without","\\t\\tstarting a job, the pty of the terminal can be used by a","\\t\\tcommand like gdb.","","\\t\\tReturns the buffer number of the terminal window. If {cmd}","\\t\\tcannot be executed the window does open and shows an error","\\t\\tmessage.","\\t\\tIf opening the window fails zero is returned.","","\\t\\t{options} are similar to what is used for |job_start()|, see","\\t\\t|job-options|. However, not all options can be used. These","\\t\\tare supported:","\\t\\t all timeout options","\\t\\t \\"stoponexit\\", \\"cwd\\", \\"env\\"","\\t\\t \\"callback\\", \\"out_cb\\", \\"err_cb\\", \\"exit_cb\\", \\"close_cb\\"","\\t\\t \\"in_io\\", \\"in_top\\", \\"in_bot\\", \\"in_name\\", \\"in_buf\\"","\\t\\t \\"out_io\\", \\"out_name\\", \\"out_buf\\", \\"out_modifiable\\", \\"out_msg\\"","\\t\\t \\"err_io\\", \\"err_name\\", \\"err_buf\\", \\"err_modifiable\\", \\"err_msg\\"","\\t\\tHowever, at least one of stdin, stdout or stderr must be","\\t\\tconnected to the terminal. When I/O is connected to the","\\t\\tterminal then the callback function for that part is not used.","","\\t\\tThere are extra options:","\\t\\t \\"term_name\\"\\t name to use for the buffer name, instead","\\t\\t\\t\\t of the command name.","\\t\\t \\"term_rows\\"\\t vertical size to use for the terminal,","\\t\\t\\t\\t instead of using \'termwinsize\'","\\t\\t \\"term_cols\\"\\t horizontal size to use for the terminal,","\\t\\t\\t\\t instead of using \'termwinsize\'","\\t\\t \\"vertical\\"\\t split the window vertically; note that","\\t\\t\\t\\t other window position can be defined with","\\t\\t\\t\\t command modifiers, such as |:belowright|.","\\t\\t \\"curwin\\"\\t use the current window, do not split the","\\t\\t\\t\\t window; fails if the current buffer","\\t\\t\\t\\t cannot be |abandon|ed","\\t\\t \\"hidden\\"\\t do not open a window","\\t\\t \\"norestore\\"\\t do not add the terminal window to a","\\t\\t\\t\\t session file","\\t\\t \\"term_kill\\"\\t what to do when trying to close the","\\t\\t\\t\\t terminal window, see |term_setkill()|","\\t\\t \\"term_finish\\" What to do when the job is finished:","\\t\\t\\t\\t\\t\\"close\\": close any windows","\\t\\t\\t\\t\\t\\"open\\": open window if needed","\\t\\t\\t\\t Note that \\"open\\" can be interruptive.","\\t\\t\\t\\t See |term++close| and |term++open|.","\\t\\t \\"term_opencmd\\" command to use for opening the window when","\\t\\t\\t\\t \\"open\\" is used for \\"term_finish\\"; must","\\t\\t\\t\\t have \\"%d\\" where the buffer number goes,","\\t\\t\\t\\t e.g. \\"10split|buffer %d\\"; when not","\\t\\t\\t\\t specified \\"botright sbuf %d\\" is used","\\t\\t \\"eof_chars\\"\\t Text to send after all buffer lines were","\\t\\t\\t\\t written to the terminal. When not set","\\t\\t\\t\\t CTRL-D is used on MS-Windows. For Python","\\t\\t\\t\\t use CTRL-Z or \\"exit()\\". For a shell use","\\t\\t\\t\\t \\"exit\\". A CR is always added.","\\t\\t \\"ansi_colors\\" A list of 16 color names or hex codes","\\t\\t\\t\\t defining the ANSI palette used in GUI","\\t\\t\\t\\t color modes. See |g:terminal_ansi_colors|.","\\t\\t \\"tty_type\\"\\t (MS-Windows only): Specify which pty to","\\t\\t\\t\\t use. See \'termwintype\' for the values.","\\t\\t \\"term_api\\"\\t function name prefix for the","\\t\\t\\t\\t |terminal-api| function. See","\\t\\t\\t\\t |term_setapi()|.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetCommand()->term_start()",""],"term_wait":["\\t\\tWait for pending updates of {buf} to be handled.","\\t\\t{buf} is used as with |term_getsize()|.","\\t\\t{time} is how long to wait for updates to arrive in msec. If","\\t\\tnot set then 10 msec will be used.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetBufnr()->term_wait()"],"test_alloc_fail":["\\t\\tThis is for testing: If the memory allocation with {id} is","\\t\\tcalled, then decrement {countdown}, and when it reaches zero","\\t\\tlet memory allocation fail {repeat} times. When {repeat} is","\\t\\tsmaller than one it fails one time.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetAllocId()->test_alloc_fail()"],"test_autochdir":["\\t\\tSet a flag to enable the effect of \'autochdir\' before Vim","\\t\\tstartup has finished.",""],"test_feedinput":["\\t\\tCharacters in {string} are queued for processing as if they","\\t\\twere typed by the user. This uses a low level input buffer.","\\t\\tThis function works only when with |+unix| or GUI is running.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetText()->test_feedinput()"],"test_garbagecollect_soon":["\\t\\tSet the flag to call the garbagecollector as if in the main","\\t\\tloop. Only to be used in tests.",""],"test_getvalue":["\\t\\tGet the value of an internal variable. These values for","\\t\\t{name} are supported:","\\t\\t\\tneed_fileinfo","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetName()->test_getvalue()"],"test_ignore_error":["\\t\\tIgnore any error containing {expr}. A normal message is given","\\t\\tinstead.","\\t\\tThis is only meant to be used in tests, where catching the","\\t\\terror with try/catch cannot be used (because it skips over","\\t\\tfollowing code).","\\t\\t{expr} is used literally, not as a pattern.","\\t\\tWhen the {expr} is the string \\"RESET\\" then the list of ignored","\\t\\terrors is made empty.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetErrorText()->test_ignore_error()"],"test_null_blob":["\\t\\tReturn a |Blob| that is null. Only useful for testing.",""],"test_null_channel":["\\t\\tReturn a |Channel| that is null. Only useful for testing.","\\t\\t{only available when compiled with the +channel feature}",""],"test_null_dict":["\\t\\tReturn a |Dict| that is null. Only useful for testing.",""],"test_null_job":["\\t\\tReturn a |Job| that is null. Only useful for testing.","\\t\\t{only available when compiled with the +job feature}",""],"test_null_list":["\\t\\tReturn a |List| that is null. Only useful for testing.",""],"test_null_partial":["\\t\\tReturn a |Partial| that is null. Only useful for testing.",""],"test_null_string":["\\t\\tReturn a |String| that is null. Only useful for testing.",""],"test_option_not_set":["\\t\\tReset the flag that indicates option {name} was set. Thus it","\\t\\tlooks like it still has the default value. Use like this: >","\\t\\t\\tset ambiwidth=double","\\t\\t\\tcall test_option_not_set(\'ambiwidth\')","<\\t\\tNow the \'ambiwidth\' option behaves like it was never changed,","\\t\\teven though the value is \\"double\\".","\\t\\tOnly to be used for testing!","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetOptionName()->test_option_not_set()",""],"test_override":["\\t\\tOverrides certain parts of Vim\'s internal processing to be able","\\t\\tto run tests. Only to be used for testing Vim!","\\t\\tThe override is enabled when {val} is non-zero and removed","\\t\\twhen {val} is zero.","\\t\\tCurrent supported values for name are:","","\\t\\tname\\t effect when {val} is non-zero ~","\\t\\tredraw disable the redrawing() function","\\t\\tredraw_flag ignore the RedrawingDisabled flag","\\t\\tchar_avail disable the char_avail() function","\\t\\tstarting reset the \\"starting\\" variable, see below","\\t\\tnfa_fail makes the NFA regexp engine fail to force a","\\t\\t\\t fallback to the old engine","\\t\\tno_query_mouse do not query the mouse position for \\"dec\\"","\\t\\t\\t\\tterminals","\\t\\tno_wait_return\\tset the \\"no_wait_return\\" flag. Not restored","\\t\\t\\t\\twith \\"ALL\\".","\\t\\tALL\\t clear all overrides ({val} is not used)","","\\t\\t\\"starting\\" is to be used when a test should behave like","\\t\\tstartup was done. Since the tests are run by sourcing a","\\t\\tscript the \\"starting\\" variable is non-zero. This is usually a","\\t\\tgood thing (tests run faster), but sometimes changes behavior","\\t\\tin a way that the test doesn\'t work properly.","\\t\\tWhen using: >","\\t\\t\\tcall test_override(\'starting\', 1)","<\\t\\tThe value of \\"starting\\" is saved. It is restored by: >","\\t\\t\\tcall test_override(\'starting\', 0)","","<\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetOverrideVal()-> test_override(\'starting\')"],"test_refcount":["\\t\\tReturn the reference count of {expr}. When {expr} is of a","\\t\\ttype that does not have a reference count, returns -1. Only","\\t\\tto be used for testing.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetVarname()->test_refcount()",""],"test_scrollbar":["\\t\\tPretend using scrollbar {which} to move it to position","\\t\\t{value}. {which} can be:","\\t\\t\\tleft\\tLeft scrollbar of the current window","\\t\\t\\tright\\tRight scrollbar of the current window","\\t\\t\\thor\\tHorizontal scrollbar","","\\t\\tFor the vertical scrollbars {value} can be 1 to the","\\t\\tline-count of the buffer. For the horizontal scrollbar the","\\t\\t{value} can be between 1 and the maximum line length, assuming","\\t\\t\'wrap\' is not set.","","\\t\\tWhen {dragging} is non-zero it\'s like dragging the scrollbar,","\\t\\totherwise it\'s like clicking in the scrollbar.","\\t\\tOnly works when the {which} scrollbar actually exists,","\\t\\tobviously only when using the GUI.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetValue()->test_scrollbar(\'right\', 0)"],"test_setmouse":["\\t\\tSet the mouse position to be used for the next mouse action.","\\t\\t{row} and {col} are one based.","\\t\\tFor example: >","\\t\\t\\tcall test_setmouse(4, 20)","\\t\\t\\tcall feedkeys(\\"\\\\<LeftMouse>\\", \\"xt\\")",""],"test_settime":["\\t\\tSet the time Vim uses internally. Currently only used for","\\t\\ttimestamps in the history, as they are used in viminfo, and","\\t\\tfor undo.","\\t\\tUsing a value of 1 makes Vim not sleep after a warning or","\\t\\terror message.","\\t\\t{expr} must evaluate to a number. When the value is zero the","\\t\\tnormal behavior is restored.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetTime()->test_settime()"],"win_execute":["\\t\\tLike `execute()` but in the context of window {id}.","\\t\\tThe window will temporarily be made the current window,","\\t\\twithout triggering autocommands. When executing {command}","\\t\\tautocommands will be triggered, this may have unexpected side","\\t\\teffects. Use |:noautocmd| if needed.","\\t\\tExample: >","\\t\\t\\tcall win_execute(winid, \'set syntax=python\')","<\\t\\tDoing the same with `setwinvar()` would not trigger","\\t\\tautocommands and not actually show syntax highlighting.","\\t\\t\\t\\t\\t\\t\\t*E994*","\\t\\tNot all commands are allowed in popup windows.","\\t\\tWhen window {id} does not exist then no error is given.","","\\t\\tCan also be used as a |method|, the base is passed as the","\\t\\tsecond argument: >","\\t\\t\\tGetCommand()->win_execute(winid)"],"win_splitmove":["\\t Move the window {nr} to a new split of the window {target}.","\\t\\tThis is similar to moving to {target}, creating a new window","\\t\\tusing |:split| but having the same contents as window {nr}, and","\\t\\tthen closing {nr}.","","\\t\\tBoth {nr} and {target} can be window numbers or |window-ID|s.","","\\t\\tReturns zero for success, non-zero for failure.","","\\t\\t{options} is a Dictionary with the following optional entries:","\\t\\t \\"vertical\\"\\tWhen TRUE, the split is created vertically,","\\t\\t\\t\\tlike with |:vsplit|.","\\t\\t \\"rightbelow\\"\\tWhen TRUE, the split is made below or to the","\\t\\t\\t\\tright (if vertical). When FALSE, it is done","\\t\\t\\t\\tabove or to the left (if vertical). When not","\\t\\t\\t\\tpresent, the values of \'splitbelow\' and","\\t\\t\\t\\t\'splitright\' are used.","","\\t\\tCan also be used as a |method|: >","\\t\\t\\tGetWinid()->win_splitmove(target)","<"]},"variables":{"v:beval_col":["The number of the column, over which the mouse pointer is.","\\t\\tThis is the byte index in the |v:beval_lnum| line.","\\t\\tOnly valid while evaluating the \'balloonexpr\' option."],"v:beval_bufnr":["The number of the buffer, over which the mouse pointer is. Only","\\t\\tvalid while evaluating the \'balloonexpr\' option."],"v:beval_lnum":["The number of the line, over which the mouse pointer is. Only","\\t\\tvalid while evaluating the \'balloonexpr\' option."],"v:beval_text":["The text under or after the mouse pointer. Usually a word as","\\t\\tit is useful for debugging a C program. \'iskeyword\' applies,","\\t\\tbut a dot and \\"->\\" before the position is included. When on a","\\t\\t\']\' the text before it is used, including the matching \'[\' and","\\t\\tword before it. When on a Visual area within one line the","\\t\\thighlighted text is used. Also see |<cexpr>|.","\\t\\tOnly valid while evaluating the \'balloonexpr\' option."],"v:beval_winnr":["The number of the window, over which the mouse pointer is. Only","\\t\\tvalid while evaluating the \'balloonexpr\' option. The first","\\t\\twindow has number zero (unlike most other places where a","\\t\\twindow gets a number)."],"v:beval_winid":["The |window-ID| of the window, over which the mouse pointer","\\t\\tis. Otherwise like v:beval_winnr."],"v:char":["Argument for evaluating \'formatexpr\' and used for the typed","\\t\\tcharacter when using <expr> in an abbreviation |:map-<expr>|.","\\t\\tIt is also used by the |InsertCharPre| and |InsertEnter| events."],"v:cmdarg":["This variable is used for two purposes:","\\t\\t1. The extra arguments given to a file read/write command.","\\t\\t Currently these are \\"++enc=\\" and \\"++ff=\\". This variable is","\\t\\t set before an autocommand event for a file read/write","\\t\\t command is triggered. There is a leading space to make it","\\t\\t possible to append this variable directly after the","\\t\\t read/write command. Note: The \\"+cmd\\" argument isn\'t","\\t\\t included here, because it will be executed anyway.","\\t\\t2. When printing a PostScript file with \\":hardcopy\\" this is","\\t\\t the argument for the \\":hardcopy\\" command. This can be used","\\t\\t in \'printexpr\'."],"v:cmdbang":["Set like v:cmdarg for a file read/write command. When a \\"!\\"","\\t\\twas used the value is 1, otherwise it is 0. Note that this","\\t\\tcan only be used in autocommands. For user commands |<bang>|","\\t\\tcan be used."],"v:count":["The count given for the last Normal mode command. Can be used","\\t\\tto get the count before a mapping. Read-only. Example: >","\\t:map _x :<C-U>echo \\"the count is \\" . v:count<CR>","<\\t\\tNote: The <C-U> is required to remove the line range that you","\\t\\tget when typing \':\' after a count.","\\t\\tWhen there are two counts, as in \\"3d2w\\", they are multiplied,","\\t\\tjust like what happens in the command, \\"d6w\\" for the example.","\\t\\tAlso used for evaluating the \'formatexpr\' option."],"v:count1":["Just like \\"v:count\\", but defaults to one when no count is","\\t\\tused."],"v:ctype":["The current locale setting for characters of the runtime","\\t\\tenvironment. This allows Vim scripts to be aware of the","\\t\\tcurrent locale encoding. Technical: it\'s the value of","\\t\\tLC_CTYPE. When not using a locale the value is \\"C\\".","\\t\\tThis variable can not be set directly, use the |:language|","\\t\\tcommand.","\\t\\tSee |multi-lang|."],"v:dying":["Normally zero. When a deadly signal is caught it\'s set to","\\t\\tone. When multiple signals are caught the number increases.","\\t\\tCan be used in an autocommand to check if Vim didn\'t","\\t\\tterminate normally. {only works on Unix}","\\t\\tExample: >","\\t:au VimLeave * if v:dying | echo \\"\\\\nAAAAaaaarrrggghhhh!!!\\\\n\\" | endif","<\\t\\tNote: if another deadly signal is caught when v:dying is one,","\\t\\tVimLeave autocommands will not be executed."],"v:exiting":["Exit code, or |v:null| if not exiting. |VimLeave|"],"v:echospace":["Number of screen cells that can be used for an `:echo` message","\\t\\tin the last screen line before causing the |hit-enter-prompt|.","\\t\\tDepends on \'showcmd\', \'ruler\' and \'columns\'. You need to","\\t\\tcheck \'cmdheight\' for whether there are full-width lines","\\t\\tavailable above the last line."],"v:errmsg":["Last given error message.","\\t\\tModifiable (can be set).","\\t\\tExample: >","\\t:let v:errmsg = \\"\\"","\\t:silent! next","\\t:if v:errmsg != \\"\\"","\\t: ... handle error","<"],"v:errors":["Errors found by assert functions, such as |assert_true()|.","\\t\\tThis is a list of strings.","\\t\\tThe assert functions append an item when an assert fails.","\\t\\tThe return value indicates this: a one is returned if an item","\\t\\twas added to v:errors, otherwise zero is returned.","\\t\\tTo remove old results make it empty: >","\\t:let v:errors = []","<\\t\\tIf v:errors is set to anything but a list it is made an empty","\\t\\tlist by the assert function."],"v:event":["Dictionary of event data for the current |autocommand|. Valid","\\t\\tonly during the event lifetime; storing or passing v:event is","\\t\\tinvalid! Copy it instead: >","\\t\\t\\tau TextYankPost * let g:foo = deepcopy(v:event)","<\\t\\tKeys vary by event; see the documentation for the specific","\\t\\tevent, e.g. |DirChanged| or |TextYankPost|.","\\t\\t\\tKEY\\t\\tDESCRIPTION ~","\\t\\t\\tabort\\t\\tWhether the event triggered during","\\t\\t\\t\\t\\tan aborting condition (e.g. |c_Esc| or","\\t\\t\\t\\t\\t|c_CTRL-C| for |CmdlineLeave|).","\\t\\t\\tchan\\t\\t|channel-id| or 0 for \\"internal\\".","\\t\\t\\tcmdlevel\\tLevel of cmdline.","\\t\\t\\tcmdtype\\t\\tType of cmdline, |cmdline-char|.","\\t\\t\\tcwd\\t\\tCurrent working directory.","\\t\\t\\tinclusive\\tMotion is |inclusive|, else exclusive.","\\t\\t\\tscope\\t\\tEvent-specific scope name.","\\t\\t\\toperator\\tCurrent |operator|. Also set for Ex","\\t\\t\\t\\t\\tcommands (unlike |v:operator|). For","\\t\\t\\t\\t\\texample if |TextYankPost| is triggered","\\t\\t\\t\\t\\tby the |:yank| Ex command then","\\t\\t\\t\\t\\t`v:event.operator` is \\"y\\".","\\t\\t\\tregcontents\\tText stored in the register as a","\\t\\t\\t\\t\\t|readfile()|-style list of lines.","\\t\\t\\tregname\\t\\tRequested register (e.g \\"x\\" for \\"xyy)","\\t\\t\\t\\t\\tor the empty string for an unnamed","\\t\\t\\t\\t\\toperation.","\\t\\t\\tregtype\\t\\tType of register as returned by","\\t\\t\\t\\t\\t|getregtype()|.","\\t\\t\\tcompleted_item Current selected complete item on","\\t\\t\\t\\t\\t|CompleteChanged|, Is `{}` when no complete","\\t\\t\\t\\t\\titem selected.","\\t\\t\\theight \\t\\tHeight of popup menu on |CompleteChanged|","\\t\\t\\twidth \\twidth of popup menu on |CompleteChanged|","\\t\\t\\trow \\t \\tRow count of popup menu on |CompleteChanged|,","\\t\\t\\t\\t\\trelative to screen.","\\t\\t\\tcol \\t \\tCol count of popup menu on |CompleteChanged|,","\\t\\t\\t\\t\\trelative to screen.","\\t\\t\\tsize \\t\\tTotal number of completion items on","\\t\\t\\t\\t\\t|CompleteChanged|.","\\t\\t\\tscrollbar \\tIs |v:true| if popup menu have scrollbar, or","\\t\\t\\t\\t\\t|v:false| if not."],"v:exception":["The value of the exception most recently caught and not","\\t\\tfinished. See also |v:throwpoint| and |throw-variables|.","\\t\\tExample: >","\\t:try","\\t: throw \\"oops\\"","\\t:catch /.*/","\\t: echo \\"caught \\" .. v:exception","\\t:endtry","<\\t\\tOutput: \\"caught oops\\"."],"v:false":["Special value used to put \\"false\\" in JSON and msgpack. See","\\t\\t|json_encode()|. This value is converted to \\"v:false\\" when used","\\t\\tas a String (e.g. in |expr5| with string concatenation","\\t\\toperator) and to zero when used as a Number (e.g. in |expr5|","\\t\\tor |expr7| when used with numeric operators). Read-only."],"v:fcs_reason":["The reason why the |FileChangedShell| event was triggered.","\\t\\tCan be used in an autocommand to decide what to do and/or what","\\t\\tto set v:fcs_choice to. Possible values:","\\t\\t\\tdeleted\\t\\tfile no longer exists","\\t\\t\\tconflict\\tfile contents, mode or timestamp was","\\t\\t\\t\\t\\tchanged and buffer is modified","\\t\\t\\tchanged\\t\\tfile contents has changed","\\t\\t\\tmode\\t\\tmode of file changed","\\t\\t\\ttime\\t\\tonly file timestamp changed"],"v:fcs_choice":["What should happen after a |FileChangedShell| event was","\\t\\ttriggered. Can be used in an autocommand to tell Vim what to","\\t\\tdo with the affected buffer:","\\t\\t\\treload\\t\\tReload the buffer (does not work if","\\t\\t\\t\\t\\tthe file was deleted).","\\t\\t\\task\\t\\tAsk the user what to do, as if there","\\t\\t\\t\\t\\twas no autocommand. Except that when","\\t\\t\\t\\t\\tonly the timestamp changed nothing","\\t\\t\\t\\t\\twill happen.","\\t\\t\\t<empty>\\t\\tNothing, the autocommand should do","\\t\\t\\t\\t\\teverything that needs to be done.","\\t\\tThe default is empty. If another (invalid) value is used then","\\t\\tVim behaves like it is empty, there is no warning message."],"v:fname_in":["The name of the input file. Valid while evaluating:","\\t\\t\\toption\\t\\tused for ~","\\t\\t\\t\'charconvert\'\\tfile to be converted","\\t\\t\\t\'diffexpr\'\\toriginal file","\\t\\t\\t\'patchexpr\'\\toriginal file","\\t\\t\\t\'printexpr\'\\tfile to be printed","\\t\\tAnd set to the swap file name for |SwapExists|."],"v:fname_out":["The name of the output file. Only valid while","\\t\\tevaluating:","\\t\\t\\toption\\t\\tused for ~","\\t\\t\\t\'charconvert\'\\tresulting converted file (*)","\\t\\t\\t\'diffexpr\'\\toutput of diff","\\t\\t\\t\'patchexpr\'\\tresulting patched file","\\t\\t(*) When doing conversion for a write command (e.g., \\":w","\\t\\tfile\\") it will be equal to v:fname_in. When doing conversion","\\t\\tfor a read command (e.g., \\":e file\\") it will be a temporary","\\t\\tfile and different from v:fname_in."],"v:fname_new":["The name of the new version of the file. Only valid while","\\t\\tevaluating \'diffexpr\'."],"v:fname_diff":["The name of the diff (patch) file. Only valid while","\\t\\tevaluating \'patchexpr\'."],"v:folddashes":["Used for \'foldtext\': dashes representing foldlevel of a closed","\\t\\tfold.","\\t\\tRead-only in the |sandbox|. |fold-foldtext|"],"v:foldlevel":["Used for \'foldtext\': foldlevel of closed fold.","\\t\\tRead-only in the |sandbox|. |fold-foldtext|"],"v:foldend":["Used for \'foldtext\': last line of closed fold.","\\t\\tRead-only in the |sandbox|. |fold-foldtext|"],"v:foldstart":["Used for \'foldtext\': first line of closed fold.","\\t\\tRead-only in the |sandbox|. |fold-foldtext|"],"v:hlsearch":["Variable that indicates whether search highlighting is on.","\\t\\tSetting it makes sense only if \'hlsearch\' is enabled. Setting","\\t\\tthis variable to zero acts like the |:nohlsearch| command,","\\t\\tsetting it to one acts like >","\\t\\t\\tlet &hlsearch = &hlsearch","<\\t\\tNote that the value is restored when returning from a","\\t\\tfunction. |function-search-undo|."],"v:insertmode":["Used for the |InsertEnter| and |InsertChange| autocommand","\\t\\tevents. Values:","\\t\\t\\ti\\tInsert mode","\\t\\t\\tr\\tReplace mode","\\t\\t\\tv\\tVirtual Replace mode"],"v:key":["Key of the current item of a |Dictionary|. Only valid while","\\t\\tevaluating the expression used with |map()| and |filter()|.","\\t\\tRead-only."],"v:lang":["The current locale setting for messages of the runtime","\\t\\tenvironment. This allows Vim scripts to be aware of the","\\t\\tcurrent language. Technical: it\'s the value of LC_MESSAGES.","\\t\\tThe value is system dependent.","\\t\\tThis variable can not be set directly, use the |:language|","\\t\\tcommand.","\\t\\tIt can be different from |v:ctype| when messages are desired","\\t\\tin a different language than what is used for character","\\t\\tencoding. See |multi-lang|."],"v:lc_time":["The current locale setting for time messages of the runtime","\\t\\tenvironment. This allows Vim scripts to be aware of the","\\t\\tcurrent language. Technical: it\'s the value of LC_TIME.","\\t\\tThis variable can not be set directly, use the |:language|","\\t\\tcommand. See |multi-lang|."],"v:lnum":["Line number for the \'foldexpr\' |fold-expr|, \'formatexpr\' and","\\t\\t\'indentexpr\' expressions, tab page number for \'guitablabel\'","\\t\\tand \'guitabtooltip\'. Only valid while one of these","\\t\\texpressions is being evaluated. Read-only when in the","\\t\\t|sandbox|."],"v:lua":["Prefix for calling Lua functions from expressions.","\\t\\tSee |v:lua-call| for more information."],"v:mouse_win":["Window number for a mouse click obtained with |getchar()|.","\\t\\tFirst window has number 1, like with |winnr()|. The value is","\\t\\tzero when there was no mouse button click."],"v:mouse_winid":["|window-ID| for a mouse click obtained with |getchar()|.","\\t\\tThe value is zero when there was no mouse button click."],"v:mouse_lnum":["Line number for a mouse click obtained with |getchar()|.","\\t\\tThis is the text line number, not the screen line number. The","\\t\\tvalue is zero when there was no mouse button click."],"v:mouse_col":["Column number for a mouse click obtained with |getchar()|.","\\t\\tThis is the screen column number, like with |virtcol()|. The","\\t\\tvalue is zero when there was no mouse button click."],"v:msgpack_types":["Dictionary containing msgpack types used by |msgpackparse()|","\\t\\tand |msgpackdump()|. All types inside dictionary are fixed","\\t\\t(not editable) empty lists. To check whether some list is one","\\t\\tof msgpack types, use |is| operator."],"v:null":["Special value used to put \\"null\\" in JSON and NIL in msgpack. ","\\t\\tSee |json_encode()|. This value is converted to \\"v:null\\" when","\\t\\tused as a String (e.g. in |expr5| with string concatenation","\\t\\toperator) and to zero when used as a Number (e.g. in |expr5|","\\t\\tor |expr7| when used with numeric operators). Read-only."],"v:oldfiles":["List of file names that is loaded from the |shada| file on","\\t\\tstartup. These are the files that Vim remembers marks for.","\\t\\tThe length of the List is limited by the \' argument of the","\\t\\t\'shada\' option (default is 100).","\\t\\tWhen the |shada| file is not used the List is empty.","\\t\\tAlso see |:oldfiles| and |c_#<|.","\\t\\tThe List can be modified, but this has no effect on what is","\\t\\tstored in the |shada| file later. If you use values other","\\t\\tthan String this will cause trouble."],"v:option_new":["New value of the option. Valid while executing an |OptionSet|","\\t\\tautocommand."],"v:option_old":["Old value of the option. Valid while executing an |OptionSet|","\\t\\tautocommand."],"v:option_type":["Scope of the set command. Valid while executing an","\\t\\t|OptionSet| autocommand. Can be either \\"global\\" or \\"local\\""],"v:operator":["The last operator given in Normal mode. This is a single","\\t\\tcharacter except for commands starting with <g> or <z>,","\\t\\tin which case it is two characters. Best used alongside","\\t\\t|v:prevcount| and |v:register|. Useful if you want to cancel","\\t\\tOperator-pending mode and then use the operator, e.g.: >","\\t\\t\\t:omap O <Esc>:call MyMotion(v:operator)<CR>","<\\t\\tThe value remains set until another operator is entered, thus","\\t\\tdon\'t expect it to be empty.","\\t\\tv:operator is not set for |:delete|, |:yank| or other Ex","\\t\\tcommands.","\\t\\tRead-only."],"v:prevcount":["The count given for the last but one Normal mode command.","\\t\\tThis is the v:count value of the previous command. Useful if","\\t\\tyou want to cancel Visual or Operator-pending mode and then","\\t\\tuse the count, e.g.: >","\\t\\t\\t:vmap % <Esc>:call MyFilter(v:prevcount)<CR>","<\\t\\tRead-only."],"v:profiling":["Normally zero. Set to one after using \\":profile start\\".","\\t\\tSee |profiling|."],"v:progname":["The name by which Nvim was invoked (with path removed).","\\t\\tRead-only."],"v:progpath":["Absolute path to the current running Nvim.","\\t\\tRead-only."],"v:register":["The name of the register in effect for the current normal mode","\\t\\tcommand (regardless of whether that command actually used a","\\t\\tregister). Or for the currently executing normal mode mapping","\\t\\t(use this in custom commands that take a register).","\\t\\tIf none is supplied it is the default register \'\\"\', unless","\\t\\t\'clipboard\' contains \\"unnamed\\" or \\"unnamedplus\\", then it is","\\t\\t\'*\' or \'+\'.","\\t\\tAlso see |getreg()| and |setreg()|"],"v:scrollstart":["String describing the script or function that caused the","\\t\\tscreen to scroll up. It\'s only set when it is empty, thus the","\\t\\tfirst reason is remembered. It is set to \\"Unknown\\" for a","\\t\\ttyped command.","\\t\\tThis can be used to find out why your script causes the","\\t\\thit-enter prompt."],"v:servername":["Primary listen-address of the current Nvim instance, the first","\\t\\titem returned by |serverlist()|. Can be set by |--listen| or","\\t\\t|$NVIM_LISTEN_ADDRESS| at startup. |serverstart()| |serverstop()|","\\t\\tRead-only."],"v:searchforward":["*v:searchforward* *searchforward-variable*","\\t\\tSearch direction: 1 after a forward search, 0 after a","\\t\\tbackward search. It is reset to forward when directly setting","\\t\\tthe last search pattern, see |quote/|.","\\t\\tNote that the value is restored when returning from a","\\t\\tfunction. |function-search-undo|.","\\t\\tRead-write."],"v:shell_error":["Result of the last shell command. When non-zero, the last","\\t\\tshell command had an error. When zero, there was no problem.","\\t\\tThis only works when the shell returns the error code to Vim.","\\t\\tThe value -1 is often used when the command could not be","\\t\\texecuted. Read-only.","\\t\\tExample: >","\\t:!mv foo bar","\\t:if v:shell_error","\\t: echo \'could not rename \\"foo\\" to \\"bar\\"!\'","\\t:endif","<"],"v:statusmsg":["Last given status message.","\\t\\tModifiable (can be set)."],"v:stderr":["|channel-id| corresponding to stderr. The value is always 2;","\\t\\tuse this variable to make your code more descriptive.","\\t\\tUnlike stdin and stdout (see |stdioopen()|), stderr is always","\\t\\topen for writing. Example: >","\\t\\t\\t:call chansend(v:stderr, \\"error: toaster empty\\\\n\\")","<"],"v:swapname":["Only valid when executing |SwapExists| autocommands: Name of","\\t\\tthe swap file found. Read-only."],"v:swapchoice":["|SwapExists| autocommands can set this to the selected choice","\\t\\tfor handling an existing swap file:","\\t\\t\\t\'o\'\\tOpen read-only","\\t\\t\\t\'e\'\\tEdit anyway","\\t\\t\\t\'r\'\\tRecover","\\t\\t\\t\'d\'\\tDelete swapfile","\\t\\t\\t\'q\'\\tQuit","\\t\\t\\t\'a\'\\tAbort","\\t\\tThe value should be a single-character string. An empty value","\\t\\tresults in the user being asked, as would happen when there is","\\t\\tno SwapExists autocommand. The default is empty."],"v:swapcommand":["Normal mode command to be executed after a file has been","\\t\\topened. Can be used for a |SwapExists| autocommand to have","\\t\\tanother Vim open the file and jump to the right place. For","\\t\\texample, when jumping to a tag the value is \\":tag tagname\\\\r\\".","\\t\\tFor \\":edit +cmd file\\" the value is \\":cmd\\\\r\\"."],"v:t_bool":["Value of Boolean type. Read-only. See: |type()|"],"v:t_dict":["Value of Dictionary type. Read-only. See: |type()|"],"v:t_float":["Value of Float type. Read-only. See: |type()|"],"v:t_func":["Value of Funcref type. Read-only. See: |type()|"],"v:t_list":["Value of List type. Read-only. See: |type()|"],"v:t_number":["Value of Number type. Read-only. See: |type()|"],"v:t_string":["Value of String type. Read-only. See: |type()|"],"v:termresponse":["The escape sequence returned by the terminal for the DA","\\t\\t(request primary device attributes) control sequence. It is","\\t\\tset when Vim receives an escape sequence that starts with ESC","\\t\\t[ or CSI and ends in a \'c\', with only digits, \';\' and \'.\' in","\\t\\tbetween.","\\t\\tWhen this option is set, the TermResponse autocommand event is","\\t\\tfired, so that you can react to the response from the","\\t\\tterminal.","\\t\\tThe response from a new xterm is: \\"<Esc>[ Pp ; Pv ; Pc c\\". Pp","\\t\\tis the terminal type: 0 for vt100 and 1 for vt220. Pv is the","\\t\\tpatch level (since this was introduced in patch 95, it\'s","\\t\\talways 95 or bigger). Pc is always zero."],"v:testing":["Must be set before using `test_garbagecollect_now()`."],"v:this_session":["Full filename of the last loaded or saved session file.","\\t\\tEmpty when no session file has been saved. See |:mksession|.","\\t\\tModifiable (can be set)."],"v:throwpoint":["The point where the exception most recently caught and not","\\t\\tfinished was thrown. Not set when commands are typed. See","\\t\\talso |v:exception| and |throw-variables|.","\\t\\tExample: >","\\t:try","\\t: throw \\"oops\\"","\\t:catch /.*/","\\t: echo \\"Exception from\\" v:throwpoint","\\t:endtry","<\\t\\tOutput: \\"Exception from test.vim, line 2\\""],"v:true":["Special value used to put \\"true\\" in JSON and msgpack. See","\\t\\t|json_encode()|. This value is converted to \\"v:true\\" when used","\\t\\tas a String (e.g. in |expr5| with string concatenation","\\t\\toperator) and to one when used as a Number (e.g. in |expr5| or","\\t\\t|expr7| when used with numeric operators). Read-only."],"v:val":["Value of the current item of a |List| or |Dictionary|. Only","\\t\\tvalid while evaluating the expression used with |map()| and","\\t\\t|filter()|. Read-only."],"v:version":["Vim version number: major version times 100 plus minor","\\t\\tversion. Vim 5.0 is 500, Vim 5.1 is 501.","\\t\\tRead-only.","\\t\\tUse |has()| to check the Nvim (not Vim) version: >","\\t\\t\\t:if has(\\"nvim-0.2.1\\")","<"],"v:vim_did_enter":["0 during startup, 1 just before |VimEnter|.","\\t\\tRead-only."],"v:warningmsg":["Last given warning message.","\\t\\tModifiable (can be set)."],"v:windowid":["Application-specific window \\"handle\\" which may be set by any","\\t\\tattached UI. Defaults to zero.","\\t\\tNote: For Nvim |windows| use |winnr()| or |win_getid()|, see","\\t\\t|window-ID|."],"v:argv":["The command line arguments Vim was invoked with. This is a","\\t\\tlist of strings. The first item is the Vim command."],"v:none":["An empty String. Used to put an empty item in JSON. See","\\t\\t|json_encode()|.","\\t\\tWhen used as a number this evaluates to zero.","\\t\\tWhen used as a string this evaluates to \\"v:none\\". >","\\t\\t\\techo v:none","<\\t\\t\\tv:none ~","\\t\\tThat is so that eval() can parse the string back to the same","\\t\\tvalue. Read-only."],"v:t_channel":["Value of |Channel| type. Read-only. See: |type()|"],"v:t_job":["Value of |Job| type. Read-only. See: |type()|"],"v:t_none":["Value of |None| type. Read-only. See: |type()|"],"v:t_blob":["Value of |Blob| type. Read-only. See: |type()|"],"v:termblinkresp":["The escape sequence returned by the terminal for the |t_RC|","\\t\\ttermcap entry. This is used to find out whether the terminal","\\t\\tcursor is blinking. This is used by |term_getcursor()|."],"v:termstyleresp":["The escape sequence returned by the terminal for the |t_RS|","\\t\\ttermcap entry. This is used to find out what the shape of the","\\t\\tcursor is. This is used by |term_getcursor()|."],"v:termrbgresp":["The escape sequence returned by the terminal for the |t_RB|","\\t\\ttermcap entry. This is used to find out what the terminal","\\t\\tbackground color is, see \'background\'."],"v:termrfgresp":["The escape sequence returned by the terminal for the |t_RF|","\\t\\ttermcap entry. This is used to find out what the terminal","\\t\\tforeground color is."],"v:termu7resp":["The escape sequence returned by the terminal for the |t_u7|","\\t\\ttermcap entry. This is used to find out what the terminal","\\t\\tdoes with ambiguous width characters, see \'ambiwidth\'."],"v:versionlong":["Like v:version, but also including the patchlevel in the last","\\t\\tfour digits. Version 8.1 with patch 123 has value 8010123.","\\t\\tThis can be used like this: >","\\t\\t\\tif v:versionlong >= 8010123","<\\t\\tHowever, if there are gaps in the list of patches included","\\t\\tthis will not work well. This can happen if a recent patch","\\t\\twas included into an older version, e.g. for a security fix.","\\t\\tUse the has() function to make sure the patch is actually","\\t\\tincluded."]},"options":{"aleph":["number\\t(default 224)","\\t\\t\\tglobal","\\tThe ASCII code for the first letter of the Hebrew alphabet. The","\\troutine that maps the keyboard in Hebrew mode, both in Insert mode","\\t(when hkmap is set) and on the command-line (when hitting CTRL-_)","\\toutputs the Hebrew characters in the range [aleph..aleph+26].","\\taleph=128 applies to PC code, and aleph=224 applies to ISO 8859-8.","\\tSee |rileft.txt|."],"allowrevins":["boolean\\t(default off)","\\t\\t\\tglobal","\\tAllow CTRL-_ in Insert and Command-line mode. This is default off, to","\\tavoid that users that accidentally type CTRL-_ instead of SHIFT-_ get","\\tinto reverse Insert mode, and don\'t know how to get out. See","\\t\'revins\'."],"ambiwidth":["string (default: \\"single\\")","\\t\\t\\tglobal","\\tTells Vim what to do with characters with East Asian Width Class","\\tAmbiguous (such as Euro, Registered Sign, Copyright Sign, Greek","\\tletters, Cyrillic letters)."],"autochdir":["boolean (default off)","\\t\\t\\tglobal","\\tWhen on, Vim will change the current working directory whenever you","\\topen a file, switch buffers, delete a buffer or open/close a window.","\\tIt will change to the directory containing the file which was opened","\\tor selected.","\\tNote: When this option is on some plugins may not work."],"arabic":["boolean (default off)","\\t\\t\\tlocal to window","\\tThis option can be set to start editing Arabic text.","\\tSetting this option will:","\\t- Set the \'rightleft\' option, unless \'termbidi\' is set.","\\t- Set the \'arabicshape\' option, unless \'termbidi\' is set.","\\t- Set the \'keymap\' option to \\"arabic\\"; in Insert mode CTRL-^ toggles","\\t between typing English and Arabic key mapping.","\\t- Set the \'delcombine\' option"],"arabicshape":["boolean (default on)","\\t\\t\\tglobal","\\tWhen on and \'termbidi\' is off, the required visual character","\\tcorrections that need to take place for displaying the Arabic language","\\ttake effect. Shaping, in essence, gets enabled; the term is a broad","\\tone which encompasses:","\\t a) the changing/morphing of characters based on their location","\\t within a word (initial, medial, final and stand-alone).","\\t b) the enabling of the ability to compose characters","\\t c) the enabling of the required combining of some characters","\\tWhen disabled the display shows each character\'s true stand-alone","\\tform.","\\tArabic is a complex language which requires other settings, for","\\tfurther details see |arabic.txt|."],"autoindent":["boolean\\t(default on)","\\t\\t\\tlocal to buffer","\\tCopy indent from current line when starting a new line (typing <CR>","\\tin Insert mode or when using the \\"o\\" or \\"O\\" command). If you do not","\\ttype anything on the new line except <BS> or CTRL-D and then type","\\t<Esc>, CTRL-O or <CR>, the indent is deleted again. Moving the cursor","\\tto another line has the same effect, unless the \'I\' flag is included","\\tin \'cpoptions\'.","\\tWhen autoindent is on, formatting (with the \\"gq\\" command or when you","\\treach \'textwidth\' in Insert mode) uses the indentation of the first","\\tline.","\\tWhen \'smartindent\' or \'cindent\' is on the indent is changed in","\\ta different way.","\\tThe \'autoindent\' option is reset when the \'paste\' option is set and","\\trestored when \'paste\' is reset.","\\t{small difference from Vi: After the indent is deleted when typing","\\t<Esc> or <CR>, the cursor position when moving up or down is after the","\\tdeleted indent; Vi puts the cursor somewhere in the deleted indent}."],"autoread":["boolean\\t(default on)","\\t\\t\\tglobal or local to buffer |global-local|","\\tWhen a file has been detected to have been changed outside of Vim and","\\tit has not been changed inside of Vim, automatically read it again.","\\tWhen the file has been deleted this is not done, so you have the text","\\tfrom before it was deleted. When it appears again then it is read.","\\t|timestamp|","\\tIf this option has a local value, use this command to switch back to","\\tusing the global value: >","\\t\\t:set autoread<","<","\\t\\t\\t\\t *\'autowrite\'* *\'aw\'* *\'noautowrite\'* *\'noaw\'*"],"autowrite":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWrite the contents of the file, if it has been modified, on each","\\t:next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,","\\t:make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,","\\t\'{A-Z0-9}, or `{A-Z0-9} command takes one to another file.","\\tNote that for some commands the \'autowrite\' option is not used, see","\\t\'autowriteall\' for that.","\\tSome buffers will not be written, specifically when \'buftype\' is","\\t\\"nowrite\\", \\"nofile\\", \\"terminal\\" or \\"prompt\\"."],"autowriteall":["boolean\\t(default off)","\\t\\t\\tglobal","\\tLike \'autowrite\', but also used for commands \\":edit\\", \\":enew\\", \\":quit\\",","\\t\\":qall\\", \\":exit\\", \\":xit\\", \\":recover\\" and closing the Vim window.","\\tSetting this option also implies that Vim behaves like \'autowrite\' has","\\tbeen set."],"background":["string\\t(default \\"dark\\")","\\t\\t\\tglobal","\\tWhen set to \\"dark\\" or \\"light\\", adjusts the default color groups for","\\tthat background type. The |TUI| or other UI sets this on startup","\\t(triggering |OptionSet|) if it can detect the background color."],"backspace":["string\\t(default \\"indent,eol,start\\")","\\t\\t\\tglobal","\\tInfluences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert","\\tmode. This is a list of items, separated by commas. Each item allows","\\ta way to backspace over something:","\\tvalue\\teffect\\t~","\\tindent\\tallow backspacing over autoindent","\\teol\\tallow backspacing over line breaks (join lines)","\\tstart\\tallow backspacing over the start of insert; CTRL-W and CTRL-U","\\t\\tstop once at the start of insert."],"backup":["boolean\\t(default off)","\\t\\t\\tglobal","\\tMake a backup before overwriting a file. Leave it around after the","\\tfile has been successfully written. If you do not want to keep the","\\tbackup file, but you do want a backup while the file is being","\\twritten, reset this option and set the \'writebackup\' option (this is","\\tthe default). If you do not want a backup file at all reset both","\\toptions (use this if your file system is almost full). See the","\\t|backup-table| for more explanations.","\\tWhen the \'backupskip\' pattern matches, a backup is not made anyway.","\\tWhen \'patchmode\' is set, the backup may be renamed to become the","\\toldest version of a file."],"backupcopy":["string\\t(Vi default for Unix: \\"yes\\", otherwise: \\"auto\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tWhen writing a file and a backup is made, this option tells how it\'s","\\tdone. This is a comma separated list of words."],"backupdir":["string\\t(default \\".,$XDG_DATA_HOME/nvim/backup\\")","\\t\\t\\tglobal","\\tList of directories for the backup file, separated with commas.","\\t- The backup file will be created in the first directory in the list","\\t where this is possible. The directory must exist, Vim will not","\\t create it for you.","\\t- Empty means that no backup file will be created (\'patchmode\' is","\\t impossible!). Writing may fail because of this.","\\t- A directory \\".\\" means to put the backup file in the same directory","\\t as the edited file.","\\t- A directory starting with \\"./\\" (or \\".\\\\\\" for Windows) means to","\\t put the backup file relative to where the edited file is. The","\\t leading \\".\\" is replaced with the path name of the edited file.","\\t (\\".\\" inside a directory name has no special meaning).","\\t- Spaces after the comma are ignored, other spaces are considered part","\\t of the directory name. To have a space at the start of a directory","\\t name, precede it with a backslash.","\\t- To include a comma in a directory name precede it with a backslash.","\\t- A directory name may end in an \'/\'.","\\t- For Unix and Win32, if a directory ends in two path separators \\"//\\",","\\t the swap file name will be built from the complete path to the file","\\t with all path separators changed to percent \'%\' signs. This will","\\t ensure file name uniqueness in the backup directory.","\\t On Win32, it is also possible to end with \\"\\\\\\\\\\". However, When a","\\t separating comma is following, you must use \\"//\\", since \\"\\\\\\\\\\" will","\\t include the comma in the file name. Therefore it is recommended to","\\t use \'//\', instead of \'\\\\\\\\\'.","\\t- Environment variables are expanded |:set_env|.","\\t- Careful with \'\\\\\' characters, type one before a space, type two to","\\t get one in the option (see |option-backslash|), for example: >","\\t :set bdir=c:\\\\\\\\tmp,\\\\ dir\\\\\\\\,with\\\\\\\\,commas,\\\\\\\\\\\\ dir\\\\ with\\\\ spaces","<\\t- For backwards compatibility with Vim version 3.0 a \'>\' at the start","\\t of the option is removed.","\\tSee also \'backup\' and \'writebackup\' options.","\\tIf you want to hide your backup files on Unix, consider this value: >","\\t\\t:set backupdir=./.backup,~/.backup,.,/tmp","<\\tYou must create a \\".backup\\" directory in each directory and in your","\\thome directory for this to work properly.","\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\tdirectories from the list. This avoids problems when a future version","\\tuses another default.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"backupext":["string\\t(default \\"~\\")","\\t\\t\\tglobal","\\tString which is appended to a file name to make the name of the","\\tbackup file. The default is quite unusual, because this avoids","\\taccidentally overwriting existing files with a backup file. You might","\\tprefer using \\".bak\\", but make sure that you don\'t have files with","\\t\\".bak\\" that you want to keep.","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal."],"backupskip":["string\\t(default: \\"$TMPDIR/*,$TMP/*,$TEMP/*\\"","\\t\\t\\t\\t Unix: \\"/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*\\"","\\t\\t\\t\\t Mac: \\"/private/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*\\")","\\t\\t\\tglobal","\\tA list of file patterns. When one of the patterns matches with the","\\tname of the file which is written, no backup file is created. Both","\\tthe specified file name and the full path name of the file are used.","\\tThe pattern is used like with |:autocmd|, see |autocmd-pattern|.","\\tWatch out for special characters, see |option-backslash|.","\\tWhen $TMPDIR, $TMP or $TEMP is not defined, it is not used for the","\\tdefault value. \\"/tmp/*\\" is only used for Unix."],"balloondelay":["Removed."],"ballooneval":["Removed."],"balloonexpr":["Removed."],"belloff":["string\\t(default \\"all\\")","\\t\\t\\tglobal","\\tSpecifies for which events the bell will not be rung. It is a comma","\\tseparated list of items. For each item that is present, the bell","\\twill be silenced. This is most useful to specify specific events in","\\tinsert mode to be silenced."],"binary":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tThis option should be set before editing a binary file. You can also","\\tuse the |-b| Vim argument. When this option is switched on a few","\\toptions will be changed (also when it already was on):","\\t\\t\'textwidth\' will be set to 0","\\t\\t\'wrapmargin\' will be set to 0","\\t\\t\'modeline\' will be off","\\t\\t\'expandtab\' will be off","\\tAlso, \'fileformat\' and \'fileformats\' options will not be used, the","\\tfile is read and written like \'fileformat\' was \\"unix\\" (a single <NL>","\\tseparates lines).","\\tThe \'fileencoding\' and \'fileencodings\' options will not be used, the","\\tfile is read without conversion.","\\tNOTE: When you start editing a(nother) file while the \'bin\' option is","\\ton, settings from autocommands may change the settings again (e.g.,","\\t\'textwidth\'), causing trouble when editing. You might want to set","\\t\'bin\' again when the file has been loaded.","\\tThe previous values of these options are remembered and restored when","\\t\'bin\' is switched from on to off. Each buffer has its own set of","\\tsaved option values.","\\tTo edit a file with \'binary\' set you can use the |++bin| argument.","\\tThis avoids you have to do \\":set bin\\", which would have effect for all","\\tfiles you edit.","\\tWhen writing a file the <EOL> for the last line is only written if","\\tthere was one in the original file (normally Vim appends an <EOL> to","\\tthe last line if there is none; this would make the file longer). See","\\tthe \'endofline\' option."],"bomb":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tWhen writing a file and the following conditions are met, a BOM (Byte","\\tOrder Mark) is prepended to the file:","\\t- this option is on","\\t- the \'binary\' option is off","\\t- \'fileencoding\' is \\"utf-8\\", \\"ucs-2\\", \\"ucs-4\\" or one of the little/big","\\t endian variants.","\\tSome applications use the BOM to recognize the encoding of the file.","\\tOften used for UCS-2 files on MS-Windows. For other applications it","\\tcauses trouble, for example: \\"cat file1 file2\\" makes the BOM of file2","\\tappear halfway through the resulting file. Gcc doesn\'t accept a BOM.","\\tWhen Vim reads a file and \'fileencodings\' starts with \\"ucs-bom\\", a","\\tcheck for the presence of the BOM is done and \'bomb\' set accordingly.","\\tUnless \'binary\' is set, it is removed from the first line, so that you","\\tdon\'t see it when editing. When you don\'t change the options, the BOM","\\twill be restored when writing the file."],"breakat":["string\\t(default \\" ^I!@*-+;:,./?\\")","\\t\\t\\tglobal","\\tThis option lets you choose which characters might cause a line","\\tbreak if \'linebreak\' is on. Only works for ASCII characters."],"breakindent":["boolean (default off)","\\t\\t\\tlocal to window","\\tEvery wrapped line will continue visually indented (same amount of","\\tspace as the beginning of that line), thus preserving horizontal blocks","\\tof text."],"breakindentopt":["string (default empty)","\\t\\t\\tlocal to window","\\tSettings for \'breakindent\'. It can consist of the following optional","\\titems and must be separated by a comma:","\\t\\tmin:{n}\\t Minimum text width that will be kept after","\\t\\t\\t applying \'breakindent\', even if the resulting","\\t\\t\\t text should normally be narrower. This prevents","\\t\\t\\t text indented almost to the right window border","\\t\\t\\t occupying lot of vertical space when broken.","\\t\\tshift:{n} After applying \'breakindent\', the wrapped line\'s","\\t\\t\\t beginning will be shifted by the given number of","\\t\\t\\t characters. It permits dynamic French paragraph","\\t\\t\\t indentation (negative) or emphasizing the line","\\t\\t\\t continuation (positive).","\\t\\tsbr\\t Display the \'showbreak\' value before applying the","\\t\\t\\t additional indent.","\\tThe default value for min is 20 and shift is 0."],"browsedir":["string\\t(default: \\"last\\")","\\t\\t\\tglobal","\\tWhich directory to use for the file browser:","\\t last\\t\\tUse same directory as with last file browser, where a","\\t\\t\\tfile was opened or saved.","\\t buffer\\tUse the directory of the related buffer.","\\t current\\tUse the current directory.","\\t {path}\\tUse the specified directory"],"bufhidden":["string (default: \\"\\")","\\t\\t\\tlocal to buffer","\\tThis option specifies what happens when a buffer is no longer","\\tdisplayed in a window:","\\t <empty>\\tfollow the global \'hidden\' option","\\t hide\\t\\thide the buffer (don\'t unload it), also when \'hidden\'","\\t\\t\\tis not set","\\t unload\\tunload the buffer, also when \'hidden\' is set or using","\\t\\t\\t|:hide|","\\t delete\\tdelete the buffer from the buffer list, also when","\\t\\t\\t\'hidden\' is set or using |:hide|, like using","\\t\\t\\t|:bdelete|","\\t wipe\\t\\twipe out the buffer from the buffer list, also when","\\t\\t\\t\'hidden\' is set or using |:hide|, like using","\\t\\t\\t|:bwipeout|"],"buflisted":["boolean (default: on)","\\t\\t\\tlocal to buffer","\\tWhen this option is set, the buffer shows up in the buffer list. If","\\tit is reset it is not used for \\":bnext\\", \\"ls\\", the Buffers menu, etc.","\\tThis option is reset by Vim for buffers that are only used to remember","\\ta file name or marks. Vim sets it when starting to edit a buffer.","\\tBut not when moving to a buffer with \\":buffer\\"."],"buftype":["string (default: \\"\\")","\\t\\t\\tlocal to buffer","\\tThe value of this option specifies the type of a buffer:","\\t <empty>\\tnormal buffer","\\t acwrite\\tbuffer will always be written with |BufWriteCmd|s","\\t help\\t\\thelp buffer (do not set this manually)","\\t nofile\\tbuffer is not related to a file, will not be written","\\t nowrite\\tbuffer will not be written","\\t quickfix\\tlist of errors |:cwindow| or locations |:lwindow|","\\t terminal\\t|terminal-emulator| buffer","\\t prompt\\tbuffer where only the last line can be edited, meant","\\t\\t\\tto be used by a plugin, see |prompt-buffer|"],"casemap":["string\\t(default: \\"internal,keepascii\\")","\\t\\t\\tglobal","\\tSpecifies details about changing the case of letters. It may contain","\\tthese words, separated by a comma:","\\tinternal\\tUse internal case mapping functions, the current","\\t\\t\\tlocale does not change the case mapping. When","\\t\\t\\t\\"internal\\" is omitted, the towupper() and towlower()","\\t\\t\\tsystem library functions are used when available.","\\tkeepascii\\tFor the ASCII characters (0x00 to 0x7f) use the US","\\t\\t\\tcase mapping, the current locale is not effective.","\\t\\t\\tThis probably only matters for Turkish."],"cdpath":["string\\t(default: equivalent to $CDPATH or \\",,\\")","\\t\\t\\tglobal","\\tThis is a list of directories which will be searched when using the","\\t|:cd| and |:lcd| commands, provided that the directory being searched","\\tfor has a relative path, not an absolute part starting with \\"/\\", \\"./\\"","\\tor \\"../\\", the \'cdpath\' option is not used then.","\\tThe \'cdpath\' option\'s value has the same form and semantics as","\\t|\'path\'|. Also see |file-searching|.","\\tThe default value is taken from $CDPATH, with a \\",\\" prepended to look","\\tin the current directory first.","\\tIf the default value taken from $CDPATH is not what you want, include","\\ta modified version of the following command in your vimrc file to","\\toverride it: >","\\t :let &cdpath = \',\' . substitute(substitute($CDPATH, \'[, ]\', \'\\\\\\\\\\\\0\', \'g\'), \':\', \',\', \'g\')","<\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons.","\\t(parts of \'cdpath\' can be passed to the shell to expand file names)."],"cedit":["string\\t(Vim default: CTRL-F, Vi default: \\"\\")","\\t\\t\\tglobal","\\tThe key used in Command-line Mode to open the command-line window.","\\tOnly non-printable keys are allowed.","\\tThe key can be specified as a single character, but it is difficult to","\\ttype. The preferred way is to use the <> notation. Examples: >","\\t\\t:exe \\"set cedit=\\\\<C-Y>\\"","\\t\\t:exe \\"set cedit=\\\\<Esc>\\"","<\\t|Nvi| also has this option, but it only uses the first character.","\\tSee |cmdwin|."],"channel":["number (default: 0)","\\t\\t\\tlocal to buffer","\\t|channel| connected to the buffer, or 0 if no channel is connected.","\\tIn a |:terminal| buffer this is the terminal channel.","\\tRead-only."],"charconvert":["string (default \\"\\")","\\t\\t\\tglobal","\\tAn expression that is used for character encoding conversion. It is","\\tevaluated when a file that is to be read or has been written has a","\\tdifferent encoding from what is desired.","\\t\'charconvert\' is not used when the internal iconv() function is","\\tsupported and is able to do the conversion. Using iconv() is","\\tpreferred, because it is much faster.","\\t\'charconvert\' is not used when reading stdin |--|, because there is no","\\tfile to convert from. You will have to save the text in a file first.","\\tThe expression must return zero or an empty string for success,","\\tnon-zero for failure.","\\tSee |encoding-names| for possible encoding names.","\\tAdditionally, names given in \'fileencodings\' and \'fileencoding\' are","\\tused.","\\tConversion between \\"latin1\\", \\"unicode\\", \\"ucs-2\\", \\"ucs-4\\" and \\"utf-8\\"","\\tis done internally by Vim, \'charconvert\' is not used for this.","\\tAlso used for Unicode conversion.","\\tExample: >","\\t\\tset charconvert=CharConvert()","\\t\\tfun CharConvert()","\\t\\t system(\\"recode \\"","\\t\\t\\t\\\\ . v:charconvert_from . \\"..\\" . v:charconvert_to","\\t\\t\\t\\\\ . \\" <\\" . v:fname_in . \\" >\\" v:fname_out)","\\t\\t return v:shell_error","\\t\\tendfun","<\\tThe related Vim variables are:","\\t\\tv:charconvert_from\\tname of the current encoding","\\t\\tv:charconvert_to\\tname of the desired encoding","\\t\\tv:fname_in\\t\\tname of the input file","\\t\\tv:fname_out\\t\\tname of the output file","\\tNote that v:fname_in and v:fname_out will never be the same.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"cindent":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tEnables automatic C program indenting. See \'cinkeys\' to set the keys","\\tthat trigger reindenting in insert mode and \'cinoptions\' to set your","\\tpreferred indent style.","\\tIf \'indentexpr\' is not empty, it overrules \'cindent\'.","\\tIf \'lisp\' is not on and both \'indentexpr\' and \'equalprg\' are empty,","\\tthe \\"=\\" operator indents using this algorithm rather than calling an","\\texternal program.","\\tSee |C-indenting|.","\\tWhen you don\'t like the way \'cindent\' works, try the \'smartindent\'","\\toption or \'indentexpr\'.","\\tThis option is not used when \'paste\' is set."],"cinkeys":["string\\t(default \\"0{,0},0),0],:,0#,!^F,o,O,e\\")","\\t\\t\\tlocal to buffer","\\tA list of keys that, when typed in Insert mode, cause reindenting of","\\tthe current line. Only used if \'cindent\' is on and \'indentexpr\' is","\\tempty.","\\tFor the format of this option see |cinkeys-format|.","\\tSee |C-indenting|."],"cinoptions":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\tThe \'cinoptions\' affect the way \'cindent\' reindents lines in a C","\\tprogram. See |cinoptions-values| for the values of this option, and","\\t|C-indenting| for info on C indenting in general."],"cinwords":["string\\t(default \\"if,else,while,do,for,switch\\")","\\t\\t\\tlocal to buffer","\\tThese keywords start an extra indent in the next line when","\\t\'smartindent\' or \'cindent\' is set. For \'cindent\' this is only done at","\\tan appropriate place (inside {}).","\\tNote that \'ignorecase\' isn\'t used for \'cinwords\'. If case doesn\'t","\\tmatter, include the keyword both the uppercase and lowercase:","\\t\\"if,If,IF\\"."],"clipboard":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThis option is a list of comma separated names.","\\tThese names are recognized:"],"cmdheight":["number\\t(default 1)","\\t\\t\\tglobal","\\tNumber of screen lines to use for the command-line. Helps avoiding","\\t|hit-enter| prompts.","\\tThe value of this option is stored with the tab page, so that each tab","\\tpage can have a different value."],"cmdwinheight":["number\\t(default 7)","\\t\\t\\tglobal","\\tNumber of screen lines to use for the command-line window. |cmdwin|"],"colorcolumn":["string\\t(default \\"\\")","\\t\\t\\tlocal to window","\\t\'colorcolumn\' is a comma separated list of screen columns that are","\\thighlighted with ColorColumn |hl-ColorColumn|. Useful to align","\\ttext. Will make screen redrawing slower.","\\tThe screen column can be an absolute number, or a number preceded with","\\t\'+\' or \'-\', which is added to or subtracted from \'textwidth\'. >"],"columns":["number\\t(default 80 or terminal width)","\\t\\t\\tglobal","\\tNumber of columns of the screen. Normally this is set by the terminal","\\tinitialization and does not have to be set by hand.","\\tWhen Vim is running in the GUI or in a resizable window, setting this","\\toption will cause the window size to be changed. When you only want","\\tto use the size for the GUI, put the command in your |ginit.vim| file.","\\tWhen you set this option and Vim is unable to change the physical","\\tnumber of columns of the display, the display may be messed up. For","\\tthe GUI it is always possible and Vim limits the number of columns to","\\twhat fits on the screen. You can use this command to get the widest","\\twindow possible: >","\\t\\t:set columns=9999","<\\tMinimum value is 12, maximum value is 10000."],"comments":["string\\t(default","\\t\\t\\t\\t\\"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-\\")","\\t\\t\\tlocal to buffer","\\tA comma separated list of strings that can start a comment line. See","\\t|format-comments|. See |option-backslash| about using backslashes to","\\tinsert a space."],"commentstring":["string\\t(default \\"/*%s*/\\")","\\t\\t\\tlocal to buffer","\\tA template for a comment. The \\"%s\\" in the value is replaced with the","\\tcomment text. Currently only used to add markers for folding, see","\\t|fold-marker|."],"complete":["string\\t(default: \\".,w,b,u,t\\")","\\t\\t\\tlocal to buffer","\\tThis option specifies how keyword completion |ins-completion| works","\\twhen CTRL-P or CTRL-N are used. It is also used for whole-line","\\tcompletion |i_CTRL-X_CTRL-L|. It indicates the type of completion","\\tand the places to scan. It is a comma separated list of flags:","\\t.\\tscan the current buffer (\'wrapscan\' is ignored)","\\tw\\tscan buffers from other windows","\\tb\\tscan other loaded buffers that are in the buffer list","\\tu\\tscan the unloaded buffers that are in the buffer list","\\tU\\tscan the buffers that are not in the buffer list","\\tk\\tscan the files given with the \'dictionary\' option","\\tkspell use the currently active spell checking |spell|","\\tk{dict}\\tscan the file {dict}. Several \\"k\\" flags can be given,","\\t\\tpatterns are valid too. For example: >","\\t\\t\\t:set cpt=k/usr/dict/*,k~/spanish","<\\ts\\tscan the files given with the \'thesaurus\' option","\\ts{tsr}\\tscan the file {tsr}. Several \\"s\\" flags can be given, patterns","\\t\\tare valid too.","\\ti\\tscan current and included files","\\td\\tscan current and included files for defined name or macro","\\t\\t|i_CTRL-X_CTRL-D|","\\t]\\ttag completion","\\tt\\tsame as \\"]\\""],"completefunc":["string\\t(default: empty)","\\t\\t\\tlocal to buffer","\\tThis option specifies a function to be used for Insert mode completion","\\twith CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|","\\tSee |complete-functions| for an explanation of how the function is","\\tinvoked and what it should return.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"completeopt":["string\\t(default: \\"menu,preview\\")","\\t\\t\\tglobal","\\tA comma separated list of options for Insert mode completion","\\t|ins-completion|. The supported values are:"],"concealcursor":["string (default: \\"\\")","\\t\\t\\tlocal to window","\\tSets the modes in which text in the cursor line can also be concealed.","\\tWhen the current mode is listed then concealing happens just like in","\\tother lines.","\\t n\\t\\tNormal mode","\\t v\\t\\tVisual mode","\\t i\\t\\tInsert mode","\\t c\\t\\tCommand line editing, for \'incsearch\'"],"conceallevel":["number (default 0)","\\t\\t\\tlocal to window","\\tDetermine how text with the \\"conceal\\" syntax attribute |:syn-conceal|","\\tis shown:"],"confirm":["boolean (default off)","\\t\\t\\tglobal","\\tWhen \'confirm\' is on, certain operations that would normally","\\tfail because of unsaved changes to a buffer, e.g. \\":q\\" and \\":e\\",","\\tinstead raise a dialog asking if you wish to save the current","\\tfile(s). You can still use a ! to unconditionally |abandon| a buffer.","\\tIf \'confirm\' is off you can still activate confirmation for one","\\tcommand only (this is most useful in mappings) with the |:confirm|","\\tcommand.","\\tAlso see the |confirm()| function and the \'v\' flag in \'guioptions\'."],"copyindent":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tCopy the structure of the existing lines indent when autoindenting a","\\tnew line. Normally the new indent is reconstructed by a series of","\\ttabs followed by spaces as required (unless |\'expandtab\'| is enabled,","\\tin which case only spaces are used). Enabling this option makes the","\\tnew line copy whatever characters were used for indenting on the","\\texisting line. \'expandtab\' has no effect on these characters, a Tab","\\tremains a Tab. If the new indent is greater than on the existing","\\tline, the remaining space is filled in the normal manner.","\\tSee \'preserveindent\'."],"cpoptions":["string\\t(Vim default: \\"aABceFs_\\",","\\t\\t\\t\\t Vi default: all flags)","\\t\\t\\tglobal","\\tA sequence of single character flags. When a character is present","\\tthis indicates Vi-compatible behavior. This is used for things where","\\tnot being Vi-compatible is mostly or sometimes preferred.","\\t\'cpoptions\' stands for \\"compatible-options\\".","\\tCommas can be added for readability.","\\tTo avoid problems with flags that are added in the future, use the","\\t\\"+=\\" and \\"-=\\" feature of \\":set\\" |add-option-flags|."],"cscopepathcomp":["number\\t(default 0)","\\t\\t\\tglobal","\\tDetermines how many components of the path to show in a list of tags.","\\tSee |cscopepathcomp|."],"cscopeprg":["string\\t(default \\"cscope\\")","\\t\\t\\tglobal","\\tSpecifies the command to execute cscope. See |cscopeprg|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"cscopequickfix":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tSpecifies whether to use quickfix window to show cscope results.","\\tSee |cscopequickfix|."],"cscoperelative":["boolean (default off)","\\t\\t\\tglobal","\\tIn the absence of a prefix (-P) for cscope. setting this option enables","\\tto use the basename of cscope.out path as the prefix.","\\tSee |cscoperelative|."],"cscopetag":["boolean (default off)","\\t\\t\\tglobal","\\tUse cscope for tag commands. See |cscope-options|."],"cscopetagorder":["number\\t(default 0)","\\t\\t\\tglobal","\\tDetermines the order in which \\":cstag\\" performs a search. See","\\t|cscopetagorder|."],"cursorbind":["boolean (default off)","\\t\\t\\tlocal to window","\\tWhen this option is set, as the cursor in the current","\\twindow moves other cursorbound windows (windows that also have","\\tthis option set) move their cursors to the corresponding line and","\\tcolumn. This option is useful for viewing the","\\tdifferences between two versions of a file (see \'diff\'); in diff mode,","\\tinserted and deleted lines (though not characters within a line) are","\\ttaken into account."],"cursorcolumn":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tHighlight the screen column of the cursor with CursorColumn","\\t|hl-CursorColumn|. Useful to align text. Will make screen redrawing","\\tslower.","\\tIf you only want the highlighting in the current window you can use","\\tthese autocommands: >","\\t\\tau WinLeave * set nocursorline nocursorcolumn","\\t\\tau WinEnter * set cursorline cursorcolumn","<"],"cursorline":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tHighlight the screen line of the cursor with CursorLine","\\t|hl-CursorLine|. Useful to easily spot the cursor. Will make screen","\\tredrawing slower.","\\tWhen Visual mode is active the highlighting isn\'t used to make it","\\teasier to see the selected text."],"debug":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThese values can be used:","\\tmsg\\tError messages that would otherwise be omitted will be given","\\t\\tanyway.","\\tthrow\\tError messages that would otherwise be omitted will be given","\\t\\tanyway and also throw an exception and set |v:errmsg|.","\\tbeep\\tA message will be given when otherwise only a beep would be","\\t\\tproduced.","\\tThe values can be combined, separated by a comma.","\\t\\"msg\\" and \\"throw\\" are useful for debugging \'foldexpr\', \'formatexpr\' or","\\t\'indentexpr\'."],"define":["string\\t(default \\"^\\\\s*#\\\\s*define\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tPattern to be used to find a macro definition. It is a search","\\tpattern, just like for the \\"/\\" command. This option is used for the","\\tcommands like \\"[i\\" and \\"[d\\" |include-search|. The \'isident\' option is","\\tused to recognize the defined name after the match:","\\t\\t{match with \'define\'}{non-ID chars}{defined name}{non-ID char}","\\tSee |option-backslash| about inserting backslashes to include a space","\\tor backslash.","\\tThe default value is for C programs. For C++ this value would be","\\tuseful, to include const type declarations: >","\\t\\t^\\\\(#\\\\s*define\\\\|[a-z]*\\\\s*const\\\\s*[a-z]*\\\\)","<\\tYou can also use \\"\\\\ze\\" just before the name and continue the pattern","\\tto check what is following. E.g. for Javascript, if a function is","\\tdefined with \\"func_name = function(args)\\": >","\\t\\t^\\\\s*\\\\ze\\\\i\\\\+\\\\s*=\\\\s*function(","<\\tIf the function is defined with \\"func_name : function() {...\\": >","\\t ^\\\\s*\\\\ze\\\\i\\\\+\\\\s*[:]\\\\s*(*function\\\\s*(","<\\tWhen using the \\":set\\" command, you need to double the backslashes!","\\tTo avoid that use `:let` with a single quote string: >","\\t\\tlet &l:define = \'^\\\\s*\\\\ze\\\\k\\\\+\\\\s*=\\\\s*function(\'","<"],"delcombine":["boolean (default off)","\\t\\t\\tglobal","\\tIf editing Unicode and this option is set, backspace and Normal mode","\\t\\"x\\" delete each combining character on its own. When it is off (the","\\tdefault) the character along with its combining characters are","\\tdeleted.","\\tNote: When \'delcombine\' is set \\"xx\\" may work different from \\"2x\\"!"],"dictionary":["string\\t(default \\"\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tList of file names, separated by commas, that are used to lookup words","\\tfor keyword completion commands |i_CTRL-X_CTRL-K|. Each file should","\\tcontain a list of words. This can be one word per line, or several","\\twords per line, separated by non-keyword characters (white space is","\\tpreferred). Maximum line length is 510 bytes."],"diff":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tJoin the current window in the group of windows that shows differences","\\tbetween files. See |diff-mode|."],"diffexpr":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tExpression which is evaluated to obtain a diff file (either ed-style","\\tor unified-style) from two versions of a file. See |diff-diffexpr|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"diffopt":["string\\t(default \\"internal,filler,closeoff\\")","\\t\\t\\tglobal","\\tOption settings for diff mode. It can consist of the following items.","\\tAll are optional. Items must be separated by a comma."],"digraph":["boolean\\t(default off)","\\t\\t\\tglobal","\\tEnable the entering of digraphs in Insert mode with {char1} <BS>","\\t{char2}. See |digraphs|."],"directory":["string\\t(default \\"$XDG_DATA_HOME/nvim/swap//\\")","\\t\\t\\tglobal","\\tList of directory names for the swap file, separated with commas.","\\t- The swap file will be created in the first directory where this is","\\t possible. If it is not possible in any directory, but last ","\\t directory listed in the option does not exist, it is created.","\\t- Empty means that no swap file will be used (recovery is","\\t impossible!) and no |E303| error will be given.","\\t- A directory \\".\\" means to put the swap file in the same directory as","\\t the edited file. On Unix, a dot is prepended to the file name, so","\\t it doesn\'t show in a directory listing. On MS-Windows the \\"hidden\\"","\\t attribute is set and a dot prepended if possible.","\\t- A directory starting with \\"./\\" (or \\".\\\\\\" for Windows) means to","\\t put the swap file relative to where the edited file is. The leading","\\t \\".\\" is replaced with the path name of the edited file.","\\t- For Unix and Win32, if a directory ends in two path separators \\"//\\",","\\t the swap file name will be built from the complete path to the file","\\t with all path separators substituted to percent \'%\' signs. This will","\\t ensure file name uniqueness in the preserve directory.","\\t On Win32, it is also possible to end with \\"\\\\\\\\\\". However, When a","\\t separating comma is following, you must use \\"//\\", since \\"\\\\\\\\\\" will","\\t include the comma in the file name. Therefore it is recommended to","\\t use \'//\', instead of \'\\\\\\\\\'.","\\t- Spaces after the comma are ignored, other spaces are considered part","\\t of the directory name. To have a space at the start of a directory","\\t name, precede it with a backslash.","\\t- To include a comma in a directory name precede it with a backslash.","\\t- A directory name may end in an \':\' or \'/\'.","\\t- Environment variables are expanded |:set_env|.","\\t- Careful with \'\\\\\' characters, type one before a space, type two to","\\t get one in the option (see |option-backslash|), for example: >","\\t :set dir=c:\\\\\\\\tmp,\\\\ dir\\\\\\\\,with\\\\\\\\,commas,\\\\\\\\\\\\ dir\\\\ with\\\\ spaces","<\\t- For backwards compatibility with Vim version 3.0 a \'>\' at the start","\\t of the option is removed.","\\tUsing \\".\\" first in the list is recommended. This means that editing","\\tthe same file twice will result in a warning. Using \\"/tmp\\" on Unix is","\\tdiscouraged: When the system crashes you lose the swap file.","\\t\\"/var/tmp\\" is often not cleared when rebooting, thus is a better","\\tchoice than \\"/tmp\\". But it can contain a lot of files, your swap","\\tfiles get lost in the crowd. That is why a \\"tmp\\" directory in your","\\thome directory is tried first.","\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\tdirectories from the list. This avoids problems when a future version","\\tuses another default.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"display":["string\\t(default \\"lastline,msgsep\\", Vi default: \\"\\")","\\t\\t\\tglobal","\\tChange the way text is displayed. This is comma separated list of","\\tflags:","\\tlastline\\tWhen included, as much as possible of the last line","\\t\\t\\tin a window will be displayed. \\"@@@\\" is put in the","\\t\\t\\tlast columns of the last screen line to indicate the","\\t\\t\\trest of the line is not displayed.","\\ttruncate\\tLike \\"lastline\\", but \\"@@@\\" is displayed in the first","\\t\\t\\tcolumn of the last screen line. Overrules \\"lastline\\".","\\tuhex\\t\\tShow unprintable characters hexadecimal as <xx>","\\t\\t\\tinstead of using ^C and ~C.","\\tmsgsep\\t\\tWhen showing messages longer than \'cmdheight\', only","\\t\\t\\tscroll the message lines, not the entire screen. The","\\t\\t\\tseparator line is decorated by |hl-MsgSeparator| and","\\t\\t\\tthe \\"msgsep\\" flag of \'fillchars\'."],"eadirection":["string\\t(default \\"both\\")","\\t\\t\\tglobal","\\tTells when the \'equalalways\' option applies:","\\t\\tver\\tvertically, width of windows is not affected","\\t\\thor\\thorizontally, height of windows is not affected","\\t\\tboth\\twidth and height of windows is affected"],"emoji":["boolean (default: on)","\\t\\t\\tglobal","\\tWhen on all Unicode emoji characters are considered to be full width."],"endofline":["boolean\\t(default on)","\\t\\t\\tlocal to buffer","\\tWhen writing a file and this option is off and the \'binary\' option","\\tis on, or \'fixeol\' option is off, no <EOL> will be written for the","\\tlast line in the file. This option is automatically set or reset when","\\tstarting to edit a new file, depending on whether file has an <EOL>","\\tfor the last line in the file. Normally you don\'t have to set or","\\treset this option.","\\tWhen \'binary\' is off and \'fixeol\' is on the value is not used when","\\twriting the file. When \'binary\' is on or \'fixeol\' is off it is used","\\tto remember the presence of a <EOL> for the last line in the file, so","\\tthat when you write the file the situation from the original file can","\\tbe kept. But you can change it if you want to."],"equalalways":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on, all the windows are automatically made the same size after","\\tsplitting or closing a window. This also happens the moment the","\\toption is switched on. When off, splitting a window will reduce the","\\tsize of the current window and leave the other windows the same. When","\\tclosing a window the extra lines are given to the window next to it","\\t(depending on \'splitbelow\' and \'splitright\').","\\tWhen mixing vertically and horizontally split windows, a minimal size","\\tis computed and some windows may be larger if there is room. The","\\t\'eadirection\' option tells in which direction the size is affected.","\\tChanging the height and width of a window can be avoided by setting","\\t\'winfixheight\' and \'winfixwidth\', respectively.","\\tIf a window size is specified when creating a new window sizes are","\\tcurrently not equalized (it\'s complicated, but may be implemented in","\\tthe future)."],"equalprg":["string\\t(default \\"\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tExternal program to use for \\"=\\" command. When this option is empty","\\tthe internal formatting functions are used; either \'lisp\', \'cindent\'","\\tor \'indentexpr\'. When Vim was compiled without internal formatting,","\\tthe \\"indent\\" program is used.","\\tEnvironment variables are expanded |:set_env|. See |option-backslash|","\\tabout including spaces and backslashes.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"errorbells":["boolean\\t(default off)","\\t\\t\\tglobal","\\tRing the bell (beep or screen flash) for error messages. This only","\\tmakes a difference for error messages, the bell will be used always","\\tfor a lot of errors without a message (e.g., hitting <Esc> in Normal","\\tmode). See \'visualbell\' to make the bell behave like a screen flash","\\tor do nothing. See \'belloff\' to finetune when to ring the bell."],"errorfile":["string\\t(default: \\"errors.err\\")","\\t\\t\\tglobal","\\tName of the errorfile for the QuickFix mode (see |:cf|).","\\tWhen the \\"-q\\" command-line argument is used, \'errorfile\' is set to the","\\tfollowing argument. See |-q|.","\\tNOT used for the \\":make\\" command. See \'makeef\' for that.","\\tEnvironment variables are expanded |:set_env|.","\\tSee |option-backslash| about including spaces and backslashes.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"errorformat":["string\\t(default is very long)","\\t\\t\\tglobal or local to buffer |global-local|","\\tScanf-like description of the format for the lines in the error file","\\t(see |errorformat|)."],"eventignore":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tA list of autocommand event names, which are to be ignored.","\\tWhen set to \\"all\\" or when \\"all\\" is one of the items, all autocommand","\\tevents are ignored, autocommands will not be executed.","\\tOtherwise this is a comma separated list of event names. Example: >","\\t :set ei=WinEnter,WinLeave","<","\\t\\t\\t\\t *\'expandtab\'* *\'et\'* *\'noexpandtab\'* *\'noet\'*"],"expandtab":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tIn Insert mode: Use the appropriate number of spaces to insert a","\\t<Tab>. Spaces are used in indents with the \'>\' and \'<\' commands and","\\twhen \'autoindent\' is on. To insert a real tab when \'expandtab\' is","\\ton, use CTRL-V<Tab>. See also |:retab| and |ins-expandtab|.","\\tThis option is reset when the \'paste\' option is set and restored when","\\tthe \'paste\' option is reset."],"fileencoding":["string (default: \\"\\")","\\t\\t\\tlocal to buffer","\\tFile-content encoding for the current buffer. Conversion is done with","\\ticonv() or as specified with \'charconvert\'."],"fileencodings":["string (default: \\"ucs-bom,utf-8,default,latin1\\")","\\t\\t\\tglobal","\\tThis is a list of character encodings considered when starting to edit","\\tan existing file. When a file is read, Vim tries to use the first","\\tmentioned character encoding. If an error is detected, the next one","\\tin the list is tried. When an encoding is found that works,","\\t\'fileencoding\' is set to it. If all fail, \'fileencoding\' is set to","\\tan empty string, which means that UTF-8 is used.","\\t\\tWARNING: Conversion can cause loss of information! You can use","\\t\\tthe |++bad| argument to specify what is done with characters","\\t\\tthat can\'t be converted.","\\tFor an empty file or a file with only ASCII characters most encodings","\\twill work and the first entry of \'fileencodings\' will be used (except","\\t\\"ucs-bom\\", which requires the BOM to be present). If you prefer","\\tanother encoding use an BufReadPost autocommand event to test if your","\\tpreferred encoding is to be used. Example: >","\\t\\tau BufReadPost * if search(\'\\\\S\', \'w\') == 0 |","\\t\\t\\t\\\\ set fenc=iso-2022-jp | endif","<\\tThis sets \'fileencoding\' to \\"iso-2022-jp\\" if the file does not contain","\\tnon-blank characters.","\\tWhen the |++enc| argument is used then the value of \'fileencodings\' is","\\tnot used.","\\tNote that \'fileencodings\' is not used for a new file, the global value","\\tof \'fileencoding\' is used instead. You can set it with: >","\\t\\t:setglobal fenc=iso-8859-2","<\\tThis means that a non-existing file may get a different encoding than","\\tan empty file.","\\tThe special value \\"ucs-bom\\" can be used to check for a Unicode BOM","\\t(Byte Order Mark) at the start of the file. It must not be preceded","\\tby \\"utf-8\\" or another Unicode encoding for this to work properly.","\\tAn entry for an 8-bit encoding (e.g., \\"latin1\\") should be the last,","\\tbecause Vim cannot detect an error, thus the encoding is always","\\taccepted.","\\tThe special value \\"default\\" can be used for the encoding from the","\\tenvironment. It is useful when your environment uses a non-latin1","\\tencoding, such as Russian.","\\tWhen a file contains an illegal UTF-8 byte sequence it won\'t be","\\trecognized as \\"utf-8\\". You can use the |8g8| command to find the","\\tillegal byte sequence.","\\tWRONG VALUES:\\t\\t\\tWHAT\'S WRONG:","\\t\\tlatin1,utf-8\\t\\t\\"latin1\\" will always be used","\\t\\tutf-8,ucs-bom,latin1\\tBOM won\'t be recognized in an utf-8","\\t\\t\\t\\t\\tfile","\\t\\tcp1250,latin1\\t\\t\\"cp1250\\" will always be used","\\tIf \'fileencodings\' is empty, \'fileencoding\' is not modified.","\\tSee \'fileencoding\' for the possible values.","\\tSetting this option does not have an effect until the next time a file","\\tis read."],"fileformat":["string (Windows default: \\"dos\\",","\\t\\t\\t\\tUnix default: \\"unix\\")","\\t\\t\\tlocal to buffer","\\tThis gives the <EOL> of the current buffer, which is used for","\\treading/writing the buffer from/to a file:","\\t dos\\t <CR> <NL>","\\t unix <NL>","\\t mac\\t <CR>","\\tWhen \\"dos\\" is used, CTRL-Z at the end of a file is ignored.","\\tSee |file-formats| and |file-read|.","\\tFor the character encoding of the file see \'fileencoding\'.","\\tWhen \'binary\' is set, the value of \'fileformat\' is ignored, file I/O","\\tworks like it was set to \\"unix\\".","\\tThis option is set automatically when starting to edit a file and","\\t\'fileformats\' is not empty and \'binary\' is off.","\\tWhen this option is set, after starting to edit a file, the \'modified\'","\\toption is set, because the file would be different when written.","\\tThis option cannot be changed when \'modifiable\' is off."],"fileformats":["string (default:","\\t\\t\\t\\tVim+Vi\\tWin32: \\"dos,unix\\",","\\t\\t\\t\\tVim\\tUnix: \\"unix,dos\\",","\\t\\t\\t\\tVi\\tothers: \\"\\")","\\t\\t\\tglobal","\\tThis gives the end-of-line (<EOL>) formats that will be tried when","\\tstarting to edit a new buffer and when reading a file into an existing","\\tbuffer:","\\t- When empty, the format defined with \'fileformat\' will be used","\\t always. It is not set automatically.","\\t- When set to one name, that format will be used whenever a new buffer","\\t is opened. \'fileformat\' is set accordingly for that buffer. The","\\t \'fileformats\' name will be used when a file is read into an existing","\\t buffer, no matter what \'fileformat\' for that buffer is set to.","\\t- When more than one name is present, separated by commas, automatic","\\t <EOL> detection will be done when reading a file. When starting to","\\t edit a file, a check is done for the <EOL>:","\\t 1. If all lines end in <CR><NL>, and \'fileformats\' includes \\"dos\\",","\\t \'fileformat\' is set to \\"dos\\".","\\t 2. If a <NL> is found and \'fileformats\' includes \\"unix\\", \'fileformat\'","\\t is set to \\"unix\\". Note that when a <NL> is found without a","\\t preceding <CR>, \\"unix\\" is preferred over \\"dos\\".","\\t 3. If \'fileformat\' has not yet been set, and if a <CR> is found, and","\\t if \'fileformats\' includes \\"mac\\", \'fileformat\' is set to \\"mac\\".","\\t This means that \\"mac\\" is only chosen when:","\\t \\"unix\\" is not present or no <NL> is found in the file, and","\\t \\"dos\\" is not present or no <CR><NL> is found in the file.","\\t Except: if \\"unix\\" was chosen, but there is a <CR> before","\\t the first <NL>, and there appear to be more <CR>s than <NL>s in","\\t the first few lines, \\"mac\\" is used.","\\t 4. If \'fileformat\' is still not set, the first name from","\\t \'fileformats\' is used.","\\t When reading a file into an existing buffer, the same is done, but","\\t this happens like \'fileformat\' has been set appropriately for that","\\t file only, the option is not changed.","\\tWhen \'binary\' is set, the value of \'fileformats\' is not used."],"fileignorecase":["boolean\\t(default on for systems where case in file","\\t\\t\\t\\t names is normally ignored)","\\t\\t\\tglobal","\\tWhen set case is ignored when using file names and directories.","\\tSee \'wildignorecase\' for only ignoring case when doing completion."],"filetype":["string (default: \\"\\")","\\t\\t\\tlocal to buffer","\\tWhen this option is set, the FileType autocommand event is triggered.","\\tAll autocommands that match with the value of this option will be","\\texecuted. Thus the value of \'filetype\' is used in place of the file","\\tname.","\\tOtherwise this option does not always reflect the current file type.","\\tThis option is normally set when the file type is detected. To enable","\\tthis use the \\":filetype on\\" command. |:filetype|","\\tSetting this option to a different value is most useful in a modeline,","\\tfor a file for which the file type is not automatically recognized.","\\tExample, for in an IDL file:","\\t\\t/* vim: set filetype=idl : */ ~","\\t|FileType| |filetypes|","\\tWhen a dot appears in the value then this separates two filetype","\\tnames. Example:","\\t\\t/* vim: set filetype=c.doxygen : */ ~","\\tThis will use the \\"c\\" filetype first, then the \\"doxygen\\" filetype.","\\tThis works both for filetype plugins and for syntax files. More than","\\tone dot may appear.","\\tThis option is not copied to another buffer, independent of the \'s\' or","\\t\'S\' flag in \'cpoptions\'.","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal."],"fillchars":["string\\t(default \\"\\")","\\t\\t\\tglobal or local to window |global-local|","\\tCharacters to fill the statuslines and vertical separators.","\\tIt is a comma separated list of items:"],"fixendofline":["boolean\\t(default on)","\\t\\t\\tlocal to buffer","\\tWhen writing a file and this option is on, <EOL> at the end of file","\\twill be restored if missing. Turn this option off if you want to","\\tpreserve the situation from the original file.","\\tWhen the \'binary\' option is set the value of this option doesn\'t","\\tmatter.","\\tSee the \'endofline\' option."],"foldclose":["string (default \\"\\")","\\t\\t\\tglobal","\\tWhen set to \\"all\\", a fold is closed when the cursor isn\'t in it and","\\tits level is higher than \'foldlevel\'. Useful if you want folds to","\\tautomatically close when moving out of them."],"foldcolumn":["string (default \\"0\\")","\\t\\t\\tlocal to window","\\tWhen and how to draw the foldcolumn. Valid values are:","\\t \\"auto\\": resize to the maximum amount of folds to display.","\\t \\"auto:[1-9]\\": resize to accommodate multiple folds up to the","\\t\\t\\t selected level"," 0: to disable foldcolumn","\\t \\"[1-9]\\": to display a fixed number of columns","\\tSee |folding|."],"foldenable":["boolean (default on)","\\t\\t\\tlocal to window","\\tWhen off, all folds are open. This option can be used to quickly","\\tswitch between showing all text unfolded and viewing the text with","\\tfolds (including manually opened or closed folds). It can be toggled","\\twith the |zi| command. The \'foldcolumn\' will remain blank when","\\t\'foldenable\' is off.","\\tThis option is set by commands that create a new fold or close a fold.","\\tSee |folding|."],"foldexpr":["string (default: \\"0\\")","\\t\\t\\tlocal to window","\\tThe expression used for when \'foldmethod\' is \\"expr\\". It is evaluated","\\tfor each line to obtain its fold level. See |fold-expr|."],"foldignore":["string (default: \\"#\\")","\\t\\t\\tlocal to window","\\tUsed only when \'foldmethod\' is \\"indent\\". Lines starting with","\\tcharacters in \'foldignore\' will get their fold level from surrounding","\\tlines. White space is skipped before checking for this character.","\\tThe default \\"#\\" works well for C programs. See |fold-indent|."],"foldlevel":["number (default: 0)","\\t\\t\\tlocal to window","\\tSets the fold level: Folds with a higher level will be closed.","\\tSetting this option to zero will close all folds. Higher numbers will","\\tclose fewer folds.","\\tThis option is set by commands like |zm|, |zM| and |zR|.","\\tSee |fold-foldlevel|."],"foldlevelstart":["number (default: -1)","\\t\\t\\tglobal","\\tSets \'foldlevel\' when starting to edit another buffer in a window.","\\tUseful to always start editing with all folds closed (value zero),","\\tsome folds closed (one) or no folds closed (99).","\\tThis is done before reading any modeline, thus a setting in a modeline","\\toverrules this option. Starting to edit a file for |diff-mode| also","\\tignores this option and closes all folds.","\\tIt is also done before BufReadPre autocommands, to allow an autocmd to","\\toverrule the \'foldlevel\' value for specific files.","\\tWhen the value is negative, it is not used."],"foldmarker":["string (default: \\"{{{,}}}\\")","\\t\\t\\tlocal to window","\\tThe start and end marker used when \'foldmethod\' is \\"marker\\". There","\\tmust be one comma, which separates the start and end marker. The","\\tmarker is a literal string (a regular expression would be too slow).","\\tSee |fold-marker|."],"foldmethod":["string (default: \\"manual\\")","\\t\\t\\tlocal to window","\\tThe kind of folding used for the current window. Possible values:","\\t|fold-manual|\\tmanual\\t Folds are created manually.","\\t|fold-indent|\\tindent\\t Lines with equal indent form a fold.","\\t|fold-expr|\\texpr\\t \'foldexpr\' gives the fold level of a line.","\\t|fold-marker|\\tmarker\\t Markers are used to specify folds.","\\t|fold-syntax|\\tsyntax\\t Syntax highlighting items specify folds.","\\t|fold-diff|\\tdiff\\t Fold text that is not changed."],"foldminlines":["number (default: 1)","\\t\\t\\tlocal to window","\\tSets the number of screen lines above which a fold can be displayed","\\tclosed. Also for manually closed folds. With the default value of","\\tone a fold can only be closed if it takes up two or more screen lines.","\\tSet to zero to be able to close folds of just one screen line.","\\tNote that this only has an effect on what is displayed. After using","\\t\\"zc\\" to close a fold, which is displayed open because it\'s smaller","\\tthan \'foldminlines\', a following \\"zc\\" may close a containing fold."],"foldnestmax":["number (default: 20)","\\t\\t\\tlocal to window","\\tSets the maximum nesting of folds for the \\"indent\\" and \\"syntax\\"","\\tmethods. This avoids that too many folds will be created. Using more","\\tthan 20 doesn\'t work, because the internal limit is 20."],"foldopen":["string (default: \\"block,hor,mark,percent,quickfix,","\\t\\t\\t\\t\\t\\t\\t search,tag,undo\\")","\\t\\t\\tglobal","\\tSpecifies for which type of commands folds will be opened, if the","\\tcommand moves the cursor into a closed fold. It is a comma separated","\\tlist of items.","\\tNOTE: When the command is part of a mapping this option is not used.","\\tAdd the |zv| command to the mapping to get the same effect.","\\t(rationale: the mapping may want to control opening folds itself)"],"foldtext":["string (default: \\"foldtext()\\")","\\t\\t\\tlocal to window","\\tAn expression which is used to specify the text displayed for a closed","\\tfold. See |fold-foldtext|."],"formatexpr":["string (default \\"\\")","\\t\\t\\tlocal to buffer","\\tExpression which is evaluated to format a range of lines for the |gq|","\\toperator or automatic formatting (see \'formatoptions\'). When this","\\toption is empty \'formatprg\' is used."],"formatlistpat":["string (default: \\"^\\\\s*\\\\d\\\\+[\\\\]:.)}\\\\t ]\\\\s*\\")","\\t\\t\\tlocal to buffer","\\tA pattern that is used to recognize a list header. This is used for","\\tthe \\"n\\" flag in \'formatoptions\'.","\\tThe pattern must match exactly the text that will be the indent for","\\tthe line below it. You can use |/\\\\ze| to mark the end of the match","\\twhile still checking more characters. There must be a character","\\tfollowing the pattern, when it matches the whole line it is handled","\\tlike there is no match.","\\tThe default recognizes a number, followed by an optional punctuation","\\tcharacter and white space."],"formatoptions":["string (default: \\"tcqj\\", Vi default: \\"vt\\")","\\t\\t\\tlocal to buffer","\\tThis is a sequence of letters which describes how automatic","\\tformatting is to be done. See |fo-table|. When the \'paste\' option is","\\ton, no formatting is done (like \'formatoptions\' is empty). Commas can","\\tbe inserted for readability.","\\tTo avoid problems with flags that are added in the future, use the","\\t\\"+=\\" and \\"-=\\" feature of \\":set\\" |add-option-flags|."],"formatprg":["string (default \\"\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tThe name of an external program that will be used to format the lines","\\tselected with the |gq| operator. The program must take the input on","\\tstdin and produce the output on stdout. The Unix program \\"fmt\\" is","\\tsuch a program.","\\tIf the \'formatexpr\' option is not empty it will be used instead.","\\tOtherwise, if \'formatprg\' option is an empty string, the internal","\\tformat function will be used |C-indenting|.","\\tEnvironment variables are expanded |:set_env|. See |option-backslash|","\\tabout including spaces and backslashes.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"fsync":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, the OS function fsync() will be called after saving a file","\\t(|:write|, |writefile()|, …), |swap-file| and |shada-file|. This","\\tflushes the file to disk, ensuring that it is safely written.","\\tSlow on some systems: writing buffers, quitting Nvim, and other","\\toperations may sometimes take a few seconds."],"gdefault":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, the \\":substitute\\" flag \'g\' is default on. This means that","\\tall matches in a line are substituted instead of one. When a \'g\' flag","\\tis given to a \\":substitute\\" command, this will toggle the substitution","\\tof all or one match. See |complex-change|."],"grepformat":["string\\t(default \\"%f:%l:%m,%f:%l%m,%f %l%m\\")","\\t\\t\\tglobal","\\tFormat to recognize for the \\":grep\\" command output.","\\tThis is a scanf-like string that uses the same format as the","\\t\'errorformat\' option: see |errorformat|."],"grepprg":["string\\t(default \\"grep -n \\",","\\t\\t\\t\\t Unix: \\"grep -n $* /dev/null\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tProgram to use for the |:grep| command. This option may contain \'%\'","\\tand \'#\' characters, which are expanded like when used in a command-","\\tline. The placeholder \\"$*\\" is allowed to specify where the arguments","\\twill be included. Environment variables are expanded |:set_env|. See","\\t|option-backslash| about including spaces and backslashes.","\\tWhen your \\"grep\\" accepts the \\"-H\\" argument, use this to make \\":grep\\"","\\talso work well with a single file: >","\\t\\t:set grepprg=grep\\\\ -nH","<\\tSpecial value: When \'grepprg\' is set to \\"internal\\" the |:grep| command","\\tworks like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like","\\t|:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.","\\tSee also the section |:make_makeprg|, since most of the comments there","\\tapply equally to \'grepprg\'.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"guicursor":["string\\t(default \\"n-v-c-sm:block,i-ci-ve:ver25,r-cr-o:hor20\\")","\\t\\t\\tglobal","\\tConfigures the cursor style for each mode. Works in the GUI and many","\\tterminals. See |tui-cursor-shape|."],"guifont":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThis is a list of fonts which will be used for the GUI version of Vim.","\\tIn its simplest form the value is just one font name. When","\\tthe font cannot be found you will get an error message. To try other","\\tfont names a list can be specified, font names separated with commas.","\\tThe first valid font is used."],"guifontset":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen not empty, specifies two (or more) fonts to be used. The first","\\tone for normal English, the second one for your special language. See","\\t|xfontset|.","\\tSetting this option also means that all font names will be handled as","\\ta fontset name. Also the ones used for the \\"font\\" argument of the","\\t|:highlight| command.","\\tThe fonts must match with the current locale. If fonts for the","\\tcharacter sets that the current locale uses are not included, setting","\\t\'guifontset\' will fail.","\\tNote the difference between \'guifont\' and \'guifontset\': In \'guifont\'","\\tthe comma-separated names are alternative names, one of which will be","\\tused. In \'guifontset\' the whole string is one fontset name,","\\tincluding the commas. It is not possible to specify alternative","\\tfontset names.","\\tThis example works on many X11 systems: >","\\t\\t:set guifontset=-*-*-medium-r-normal--16-*-*-*-c-*-*-*","<","\\t\\t\\t\\t*\'guifontwide\'* *\'gfw\'* *E231* *E533* *E534*"],"guifontwide":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen not empty, specifies a comma-separated list of fonts to be used","\\tfor double-width characters. The first font that can be loaded is","\\tused.","\\tNote: The size of these fonts must be exactly twice as wide as the one","\\tspecified with \'guifont\' and the same height."],"guioptions":["string\\t(default \\"egmrLT\\" (MS-Windows))","\\t\\t\\tglobal","\\tThis option only has an effect in the GUI version of Vim. It is a","\\tsequence of letters which describes what components and options of the","\\tGUI should be used.","\\tTo avoid problems with flags that are added in the future, use the","\\t\\"+=\\" and \\"-=\\" feature of \\":set\\" |add-option-flags|."],"guitablabel":["string\\t(default empty)","\\t\\t\\tglobal","\\tWhen nonempty describes the text to use in a label of the GUI tab","\\tpages line. When empty and when the result is empty Vim will use a","\\tdefault label. See |setting-guitablabel| for more info."],"guitabtooltip":["string\\t(default empty)","\\t\\t\\tglobal","\\tWhen nonempty describes the text to use in a tooltip for the GUI tab","\\tpages line. When empty Vim will use a default tooltip.","\\tThis option is otherwise just like \'guitablabel\' above.","\\tYou can include a line break. Simplest method is to use |:let|: >","\\t\\t:let &guitabtooltip = \\"line one\\\\nline two\\"","<"],"helpfile":["string\\t(default (MSDOS) \\"$VIMRUNTIME\\\\doc\\\\help.txt\\"","\\t\\t\\t\\t\\t (others) \\"$VIMRUNTIME/doc/help.txt\\")","\\t\\t\\tglobal","\\tName of the main help file. All distributed help files should be","\\tplaced together in one directory. Additionally, all \\"doc\\" directories","\\tin \'runtimepath\' will be used.","\\tEnvironment variables are expanded |:set_env|. For example:","\\t\\"$VIMRUNTIME/doc/help.txt\\". If $VIMRUNTIME is not set, $VIM is also","\\ttried. Also see |$VIMRUNTIME| and |option-backslash| about including","\\tspaces and backslashes.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"helpheight":["number\\t(default 20)","\\t\\t\\tglobal","\\tMinimal initial height of the help window when it is opened with the","\\t\\":help\\" command. The initial height of the help window is half of the","\\tcurrent window, or (when the \'ea\' option is on) the same as other","\\twindows. When the height is less than \'helpheight\', the height is","\\tset to \'helpheight\'. Set to zero to disable."],"helplang":["string\\t(default: messages language or empty)","\\t\\t\\tglobal","\\tComma separated list of languages. Vim will use the first language","\\tfor which the desired help can be found. The English help will always","\\tbe used as a last resort. You can add \\"en\\" to prefer English over","\\tanother language, but that will only find tags that exist in that","\\tlanguage and not in the English help.","\\tExample: >","\\t\\t:set helplang=de,it","<\\tThis will first search German, then Italian and finally English help","\\tfiles.","\\tWhen using |CTRL-]| and \\":help!\\" in a non-English help file Vim will","\\ttry to find the tag in the current language before using this option.","\\tSee |help-translated|."],"hidden":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen off a buffer is unloaded when it is |abandon|ed. When on a","\\tbuffer becomes hidden when it is |abandon|ed. If the buffer is still","\\tdisplayed in another window, it does not become hidden, of course.","\\tThe commands that move through the buffer list sometimes make a buffer","\\thidden although the \'hidden\' option is off: When the buffer is","\\tmodified, \'autowrite\' is off or writing is not possible, and the \'!\'","\\tflag was used. See also |windows.txt|.","\\tTo only make one buffer hidden use the \'bufhidden\' option.","\\tThis option is set for one command with \\":hide {command}\\" |:hide|.","\\tWARNING: It\'s easy to forget that you have changes in hidden buffers.","\\tThink twice when using \\":q!\\" or \\":qa!\\"."],"history":["number\\t(Vim default: 10000, Vi default: 0)","\\t\\t\\tglobal","\\tA history of \\":\\" commands, and a history of previous search patterns","\\tis remembered. This option decides how many entries may be stored in","\\teach of these histories (see |cmdline-editing|).","\\tThe maximum value is 10000."],"hkmap":["boolean (default off)","\\t\\t\\tglobal","\\tWhen on, the keyboard is mapped for the Hebrew character set.","\\tNormally you would set \'allowrevins\' and use CTRL-_ in insert mode to","\\ttoggle this option. See |rileft.txt|."],"hkmapp":["boolean (default off)","\\t\\t\\tglobal","\\tWhen on, phonetic keyboard mapping is used. \'hkmap\' must also be on.","\\tThis is useful if you have a non-Hebrew keyboard.","\\tSee |rileft.txt|."],"hlsearch":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen there is a previous search pattern, highlight all its matches.","\\tThe |hl-Search| highlight group determines the highlighting. Note that","\\tonly the matching text is highlighted, any offsets are not applied.","\\tSee also: \'incsearch\' and |:match|.","\\tWhen you get bored looking at the highlighted matches, you can turn it","\\toff with |:nohlsearch|. This does not change the option value, as","\\tsoon as you use a search command, the highlighting comes back.","\\t\'redrawtime\' specifies the maximum time spent on finding matches.","\\tWhen the search pattern can match an end-of-line, Vim will try to","\\thighlight all of the matched text. However, this depends on where the","\\tsearch starts. This will be the first line in the window or the first","\\tline below a closed fold. A match in a previous line which is not","\\tdrawn may not continue in a newly drawn line.","\\tYou can specify whether the highlight status is restored on startup","\\twith the \'h\' flag in \'shada\' |shada-h|."],"icon":["boolean\\t(default off, on when title can be restored)","\\t\\t\\tglobal","\\tWhen on, the icon text of the window will be set to the value of","\\t\'iconstring\' (if it is not empty), or to the name of the file","\\tcurrently being edited. Only the last part of the name is used.","\\tOverridden by the \'iconstring\' option.","\\tOnly works if the terminal supports setting window icons."],"iconstring":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen this option is not empty, it will be used for the icon text of","\\tthe window. This happens only when the \'icon\' option is on.","\\tOnly works if the terminal supports setting window icon text","\\tWhen this option contains printf-style \'%\' items, they will be","\\texpanded according to the rules used for \'statusline\'. See","\\t\'titlestring\' for example settings.","\\tThis option cannot be set in a modeline when \'modelineexpr\' is off."],"ignorecase":["boolean\\t(default off)","\\t\\t\\tglobal","\\tIgnore case in search patterns. Also used when searching in the tags","\\tfile.","\\tAlso see \'smartcase\' and \'tagcase\'.","\\tCan be overruled by using \\"\\\\c\\" or \\"\\\\C\\" in the pattern, see","\\t|/ignorecase|."],"imcmdline":["boolean (default off)","\\t\\t\\tglobal","\\tWhen set the Input Method is always on when starting to edit a command","\\tline, unless entering a search pattern (see \'imsearch\' for that).","\\tSetting this option is useful when your input method allows entering","\\tEnglish characters directly, e.g., when it\'s used to type accented","\\tcharacters with dead keys."],"imdisable":["boolean (default off, on for some systems (SGI))","\\t\\t\\tglobal","\\tWhen set the Input Method is never used. This is useful to disable","\\tthe IM when it doesn\'t work properly.","\\tCurrently this option is on by default for SGI/IRIX machines. This","\\tmay change in later releases."],"iminsert":["number (default 0)","\\t\\t\\tlocal to buffer","\\tSpecifies whether :lmap or an Input Method (IM) is to be used in","\\tInsert mode. Valid values:","\\t\\t0\\t:lmap is off and IM is off","\\t\\t1\\t:lmap is ON and IM is off","\\t\\t2\\t:lmap is off and IM is ON","\\tTo always reset the option to zero when leaving Insert mode with <Esc>","\\tthis can be used: >","\\t\\t:inoremap <ESC> <ESC>:set iminsert=0<CR>","<\\tThis makes :lmap and IM turn off automatically when leaving Insert","\\tmode.","\\tNote that this option changes when using CTRL-^ in Insert mode","\\t|i_CTRL-^|.","\\tThe value is set to 1 when setting \'keymap\' to a valid keymap name.","\\tIt is also used for the argument of commands like \\"r\\" and \\"f\\"."],"imsearch":["number (default -1)","\\t\\t\\tlocal to buffer","\\tSpecifies whether :lmap or an Input Method (IM) is to be used when","\\tentering a search pattern. Valid values:","\\t\\t-1\\tthe value of \'iminsert\' is used, makes it look like","\\t\\t\\t\'iminsert\' is also used when typing a search pattern","\\t\\t0\\t:lmap is off and IM is off","\\t\\t1\\t:lmap is ON and IM is off","\\t\\t2\\t:lmap is off and IM is ON","\\tNote that this option changes when using CTRL-^ in Command-line mode","\\t|c_CTRL-^|.","\\tThe value is set to 1 when it is not -1 and setting the \'keymap\'","\\toption to a valid keymap name."],"inccommand":["string\\t(default \\"\\")","\\t\\t\\tglobal"],"include":["string\\t(default \\"^\\\\s*#\\\\s*include\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tPattern to be used to find an include command. It is a search","\\tpattern, just like for the \\"/\\" command (See |pattern|). The default","\\tvalue is for C programs. This option is used for the commands \\"[i\\",","\\t\\"]I\\", \\"[d\\", etc.","\\tNormally the \'isfname\' option is used to recognize the file name that","\\tcomes after the matched pattern. But if \\"\\\\zs\\" appears in the pattern","\\tthen the text matched from \\"\\\\zs\\" to the end, or until \\"\\\\ze\\" if it","\\tappears, is used as the file name. Use this to include characters","\\tthat are not in \'isfname\', such as a space. You can then use","\\t\'includeexpr\' to process the matched text.","\\tSee |option-backslash| about including spaces and backslashes."],"includeexpr":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\tExpression to be used to transform the string found with the \'include\'","\\toption to a file name. Mostly useful to change \\".\\" to \\"/\\" for Java: >","\\t\\t:set includeexpr=substitute(v:fname,\'\\\\\\\\.\',\'/\',\'g\')","<\\tThe \\"v:fname\\" variable will be set to the file name that was detected."],"incsearch":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhile typing a search command, show where the pattern, as it was typed","\\tso far, matches. The matched string is highlighted. If the pattern","\\tis invalid or not found, nothing is shown. The screen will be updated","\\toften, this is only useful on fast terminals.","\\tNote that the match will be shown, but the cursor will return to its","\\toriginal position when no match is found and when pressing <Esc>. You","\\tstill need to finish the search command with <Enter> to move the","\\tcursor to the match.","\\tYou can use the CTRL-G and CTRL-T keys to move to the next and","\\tprevious match. |c_CTRL-G| |c_CTRL-T|","\\tVim only searches for about half a second. With a complicated","\\tpattern and/or a lot of text the match may not be found. This is to","\\tavoid that Vim hangs while you are typing the pattern.","\\tThe |hl-IncSearch| highlight group determines the highlighting.","\\tWhen \'hlsearch\' is on, all matched strings are highlighted too while","\\ttyping a search command. See also: \'hlsearch\'.","\\tIf you don\'t want to turn \'hlsearch\' on, but want to highlight all","\\tmatches while searching, you can turn on and off \'hlsearch\' with","\\tautocmd. Example: >","\\t\\taugroup vimrc-incsearch-highlight","\\t\\t autocmd!","\\t\\t autocmd CmdlineEnter /,\\\\? :set hlsearch","\\t\\t autocmd CmdlineLeave /,\\\\? :set nohlsearch","\\t\\taugroup END","<","\\tCTRL-L can be used to add one character from after the current match","\\tto the command line. If \'ignorecase\' and \'smartcase\' are set and the","\\tcommand line has no uppercase characters, the added character is","\\tconverted to lowercase.","\\tCTRL-R CTRL-W can be used to add the word at the end of the current","\\tmatch, excluding the characters that were already typed."],"indentexpr":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\tExpression which is evaluated to obtain the proper indent for a line.","\\tIt is used when a new line is created, for the |=| operator and","\\tin Insert mode as specified with the \'indentkeys\' option.","\\tWhen this option is not empty, it overrules the \'cindent\' and","\\t\'smartindent\' indenting. When \'lisp\' is set, this option is","\\toverridden by the Lisp indentation algorithm.","\\tWhen \'paste\' is set this option is not used for indenting.","\\tThe expression is evaluated with |v:lnum| set to the line number for","\\twhich the indent is to be computed. The cursor is also in this line","\\twhen the expression is evaluated (but it may be moved around).","\\tThe expression must return the number of spaces worth of indent. It","\\tcan return \\"-1\\" to keep the current indent (this means \'autoindent\' is","\\tused for the indent).","\\tFunctions useful for computing the indent are |indent()|, |cindent()|","\\tand |lispindent()|.","\\tThe evaluation of the expression must not have side effects! It must","\\tnot change the text, jump to another window, etc. Afterwards the","\\tcursor position is always restored, thus the cursor may be moved.","\\tNormally this option would be set to call a function: >","\\t\\t:set indentexpr=GetMyIndent()","<\\tError messages will be suppressed, unless the \'debug\' option contains","\\t\\"msg\\".","\\tSee |indent-expression|."],"indentkeys":["string\\t(default \\"0{,0},0),0],:,0#,!^F,o,O,e\\")","\\t\\t\\tlocal to buffer","\\tA list of keys that, when typed in Insert mode, cause reindenting of","\\tthe current line. Only happens if \'indentexpr\' isn\'t empty.","\\tThe format is identical to \'cinkeys\', see |indentkeys-format|.","\\tSee |C-indenting| and |indent-expression|."],"infercase":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tWhen doing keyword completion in insert mode |ins-completion|, and","\\t\'ignorecase\' is also on, the case of the match is adjusted depending","\\ton the typed text. If the typed text contains a lowercase letter","\\twhere the match has an upper case letter, the completed part is made","\\tlowercase. If the typed text has no lowercase letters and the match","\\thas a lowercase letter where the typed text has an uppercase letter,","\\tand there is a letter before it, the completed part is made uppercase.","\\tWith \'noinfercase\' the match is used as-is."],"insertmode":["boolean\\t(default off)","\\t\\t\\tglobal","\\tMakes Vim work in a way that Insert mode is the default mode. Useful","\\tif you want to use Vim as a modeless editor.","\\tThese Insert mode commands will be useful:","\\t- Use the cursor keys to move around.","\\t- Use CTRL-O to execute one Normal mode command |i_CTRL-O|. When","\\t this is a mapping, it is executed as if \'insertmode\' was off.","\\t Normal mode remains active until the mapping is finished.","\\t- Use CTRL-L to execute a number of Normal mode commands, then use","\\t <Esc> to get back to Insert mode. Note that CTRL-L moves the cursor","\\t left, like <Esc> does when \'insertmode\' isn\'t set. |i_CTRL-L|"],"isfname":["string\\t(default for Windows:","\\t\\t\\t \\"@,48-57,/,\\\\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,=\\"","\\t\\t\\t otherwise: \\"@,48-57,/,.,-,_,+,,,#,$,%,~,=\\")","\\t\\t\\tglobal","\\tThe characters specified by this option are included in file names and","\\tpath names. Filenames are used for commands like \\"gf\\", \\"[i\\" and in","\\tthe tags file. It is also used for \\"\\\\f\\" in a |pattern|.","\\tMulti-byte characters 256 and above are always included, only the","\\tcharacters up to 255 are specified with this option.","\\tFor UTF-8 the characters 0xa0 to 0xff are included as well.","\\tThink twice before adding white space to this option. Although a","\\tspace may appear inside a file name, the effect will be that Vim","\\tdoesn\'t know where a file name starts or ends when doing completion.","\\tIt most likely works better without a space in \'isfname\'."],"isident":["string\\t(default for Windows:","\\t\\t\\t\\t\\t \\"@,48-57,_,128-167,224-235\\"","\\t\\t\\t\\totherwise: \\"@,48-57,_,192-255\\")","\\t\\t\\tglobal","\\tThe characters given by this option are included in identifiers.","\\tIdentifiers are used in recognizing environment variables and after a","\\tmatch of the \'define\' option. It is also used for \\"\\\\i\\" in a","\\t|pattern|. See \'isfname\' for a description of the format of this","\\toption. For \'@\' only characters up to 255 are used.","\\tCareful: If you change this option, it might break expanding","\\tenvironment variables. E.g., when \'/\' is included and Vim tries to","\\texpand \\"$HOME/.local/share/nvim/shada/main.shada\\". Maybe you should ","\\tchange \'iskeyword\' instead."],"iskeyword":["string (default: @,48-57,_,192-255","\\t\\t\\t\\tVi default: @,48-57,_)","\\t\\t\\tlocal to buffer","\\tKeywords are used in searching and recognizing with many commands:","\\t\\"w\\", \\"*\\", \\"[i\\", etc. It is also used for \\"\\\\k\\" in a |pattern|. See","\\t\'isfname\' for a description of the format of this option. For \'@\'","\\tcharacters above 255 check the \\"word\\" character class.","\\tFor C programs you could use \\"a-z,A-Z,48-57,_,.,-,>\\".","\\tFor a help file it is set to all non-blank printable characters except","\\t\'*\', \'\\"\' and \'|\' (so that CTRL-] on a command finds the help for that","\\tcommand).","\\tWhen the \'lisp\' option is on the \'-\' character is always included.","\\tThis option also influences syntax highlighting, unless the syntax","\\tuses |:syn-iskeyword|."],"isprint":["string\\t(default: \\"@,161-255\\")","\\t\\t\\tglobal","\\tThe characters given by this option are displayed directly on the","\\tscreen. It is also used for \\"\\\\p\\" in a |pattern|. The characters from","\\tspace (ASCII 32) to \'~\' (ASCII 126) are always displayed directly,","\\teven when they are not included in \'isprint\' or excluded. See","\\t\'isfname\' for a description of the format of this option."],"jumpoptions":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tList of words that change the behavior of the |jumplist|.","\\t stack Make the jumplist behave like the tagstack or like a","\\t web browser. Relative location of entries in the","\\t\\t\\tjumplist is preserved at the cost of discarding","\\t\\t\\tsubsequent entries when navigating backwards in the","\\t\\t\\tjumplist and then jumping to a location.","\\t\\t\\t|jumplist-stack|"],"joinspaces":["boolean\\t(default on)","\\t\\t\\tglobal","\\tInsert two spaces after a \'.\', \'?\' and \'!\' with a join command.","\\tOtherwise only one space is inserted."],"keymap":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\tName of a keyboard mapping. See |mbyte-keymap|.","\\tSetting this option to a valid keymap name has the side effect of","\\tsetting \'iminsert\' to one, so that the keymap becomes effective.","\\t\'imsearch\' is also set to one, unless it was -1","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal."],"keymodel":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tList of comma separated words, which enable special things that keys","\\tcan do. These values can be used:","\\t startsel\\tUsing a shifted special key starts selection (either","\\t\\t\\tSelect mode or Visual mode, depending on \\"key\\" being","\\t\\t\\tpresent in \'selectmode\').","\\t stopsel\\tUsing a not-shifted special key stops selection.","\\tSpecial keys in this context are the cursor keys, <End>, <Home>,","\\t<PageUp> and <PageDown>.","\\tThe \'keymodel\' option is set by the |:behave| command."],"keywordprg":["string\\t(default \\":Man\\", Windows: \\":help\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tProgram to use for the |K| command. Environment variables are","\\texpanded |:set_env|. \\":help\\" may be used to access the Vim internal","\\thelp. (Note that previously setting the global option to the empty","\\tvalue did this, which is now deprecated.)","\\tWhen the first character is \\":\\", the command is invoked as a Vim","\\tcommand prefixed with [count].","\\tWhen \\"man\\" or \\"man -s\\" is used, Vim will automatically translate","\\ta [count] for the \\"K\\" command to a section number.","\\tSee |option-backslash| about including spaces and backslashes.","\\tExample: >","\\t\\t:set keywordprg=man\\\\ -s","\\t\\t:set keywordprg=:Man","<\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"langmap":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThis option allows switching your keyboard into a special language","\\tmode. When you are typing text in Insert mode the characters are","\\tinserted directly. When in Normal mode the \'langmap\' option takes","\\tcare of translating these special characters to the original meaning","\\tof the key. This means you don\'t have to change the keyboard mode to","\\tbe able to execute Normal mode commands.","\\tThis is the opposite of the \'keymap\' option, where characters are","\\tmapped in Insert mode.","\\tAlso consider resetting \'langremap\' to avoid \'langmap\' applies to","\\tcharacters resulting from a mapping.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"langmenu":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tLanguage to use for menu translation. Tells which file is loaded","\\tfrom the \\"lang\\" directory in \'runtimepath\': >","\\t\\t\\"lang/menu_\\" . &langmenu . \\".vim\\"","<\\t(without the spaces). For example, to always use the Dutch menus, no","\\tmatter what $LANG is set to: >","\\t\\t:set langmenu=nl_NL.ISO_8859-1","<\\tWhen \'langmenu\' is empty, |v:lang| is used.","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal.","\\tIf your $LANG is set to a non-English language but you do want to use","\\tthe English menus: >","\\t\\t:set langmenu=none","<\\tThis option must be set before loading menus, switching on filetype","\\tdetection or syntax highlighting. Once the menus are defined setting","\\tthis option has no effect. But you could do this: >","\\t\\t:source $VIMRUNTIME/delmenu.vim","\\t\\t:set langmenu=de_DE.ISO_8859-1","\\t\\t:source $VIMRUNTIME/menu.vim","<\\tWarning: This deletes all menus that you defined yourself!"],"langremap":["boolean (default off)","\\t\\t\\tglobal","\\tWhen off, setting \'langmap\' does not apply to characters resulting from","\\ta mapping. If setting \'langmap\' disables some of your mappings, make","\\tsure this option is off."],"laststatus":["number\\t(default 2)","\\t\\t\\tglobal","\\tThe value of this option influences when the last window will have a","\\tstatus line:","\\t\\t0: never","\\t\\t1: only if there are at least two windows","\\t\\t2: always","\\tThe screen looks nicer with a status line if you have several","\\twindows, but it takes another screen line. |status-line|"],"lazyredraw":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen this option is set, the screen will not be redrawn while","\\texecuting macros, registers and other commands that have not been","\\ttyped. Also, updating the window title is postponed. To force an","\\tupdate use |:redraw|."],"linebreak":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tIf on, Vim will wrap long lines at a character in \'breakat\' rather","\\tthan at the last character that fits on the screen. Unlike","\\t\'wrapmargin\' and \'textwidth\', this does not insert <EOL>s in the file,","\\tit only affects the way the file is displayed, not its contents.","\\tIf \'breakindent\' is set, line is visually indented. Then, the value","\\tof \'showbreak\' is used to put in front of wrapped lines. This option","\\tis not used when the \'wrap\' option is off.","\\tNote that <Tab> characters after an <EOL> are mostly not displayed","\\twith the right amount of white space."],"lines":["number\\t(default 24 or terminal height)","\\t\\t\\tglobal","\\tNumber of lines of the Vim window.","\\tNormally you don\'t need to set this. It is done automatically by the","\\tterminal initialization code.","\\tWhen Vim is running in the GUI or in a resizable window, setting this","\\toption will cause the window size to be changed. When you only want","\\tto use the size for the GUI, put the command in your |gvimrc| file.","\\tVim limits the number of lines to what fits on the screen. You can","\\tuse this command to get the tallest window possible: >","\\t\\t:set lines=999","<\\tMinimum value is 2, maximum value is 1000."],"linespace":["number\\t(default 0)","\\t\\t\\tglobal","\\t\\t\\t{only in the GUI}","\\tNumber of pixel lines inserted between characters. Useful if the font","\\tuses the full character cell height, making lines touch each other.","\\tWhen non-zero there is room for underlining.","\\tWith some fonts there can be too much room between lines (to have","\\tspace for ascents and descents). Then it makes sense to set","\\t\'linespace\' to a negative value. This may cause display problems","\\tthough!"],"lisp":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tLisp mode: When <Enter> is typed in insert mode set the indent for","\\tthe next line to Lisp standards (well, sort of). Also happens with","\\t\\"cc\\" or \\"S\\". \'autoindent\' must also be on for this to work. The \'p\'","\\tflag in \'cpoptions\' changes the method of indenting: Vi compatible or","\\tbetter. Also see \'lispwords\'.","\\tThe \'-\' character is included in keyword characters. Redefines the","\\t\\"=\\" operator to use this same indentation algorithm rather than","\\tcalling an external program if \'equalprg\' is empty.","\\tThis option is not used when \'paste\' is set."],"lispwords":["string\\t(default is very long)","\\t\\t\\tglobal or local to buffer |global-local|","\\tComma separated list of words that influence the Lisp indenting.","\\t|\'lisp\'|"],"list":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tList mode: Show tabs as CTRL-I is displayed, display $ after end of","\\tline. Useful to see the difference between tabs and spaces and for","\\ttrailing blanks. Further changed by the \'listchars\' option."],"listchars":["string\\t(default: \\"tab:> ,trail:-,nbsp:+\\"","\\t\\t\\t\\t Vi default: \\"eol:$\\")","\\t\\t\\tglobal or local to window |global-local|","\\tStrings to use in \'list\' mode and for the |:list| command. It is a","\\tcomma separated list of string settings."],"loadplugins":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on the plugin scripts are loaded when starting up |load-plugins|.","\\tThis option can be reset in your |vimrc| file to disable the loading","\\tof plugins.","\\tNote that using the \\"-u NONE\\" and \\"--noplugin\\" command line arguments","\\treset this option. |-u| |--noplugin|"],"magic":["boolean\\t(default on)","\\t\\t\\tglobal","\\tChanges the special characters that can be used in search patterns.","\\tSee |pattern|.","\\tWARNING: Switching this option off most likely breaks plugins! That","\\tis because many patterns assume it\'s on and will fail when it\'s off.","\\tOnly switch it off when working with old Vi scripts. In any other","\\tsituation write patterns that work when \'magic\' is on. Include \\"\\\\M\\"","\\twhen you want to |/\\\\M|."],"makeef":["string\\t(default: \\"\\")","\\t\\t\\tglobal","\\tName of the errorfile for the |:make| command (see |:make_makeprg|)","\\tand the |:grep| command.","\\tWhen it is empty, an internally generated temp file will be used.","\\tWhen \\"##\\" is included, it is replaced by a number to make the name","\\tunique. This makes sure that the \\":make\\" command doesn\'t overwrite an","\\texisting file.","\\tNOT used for the \\":cf\\" command. See \'errorfile\' for that.","\\tEnvironment variables are expanded |:set_env|.","\\tSee |option-backslash| about including spaces and backslashes.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"makeencoding":["string\\t(default \\"\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tEncoding used for reading the output of external commands. When empty,","\\tencoding is not converted.","\\tThis is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,","\\t`:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,","\\tand `:laddfile`."],"makeprg":["string\\t(default \\"make\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tProgram to use for the \\":make\\" command. See |:make_makeprg|.","\\tThis option may contain \'%\' and \'#\' characters (see |:_%| and |:_#|),","\\twhich are expanded to the current and alternate file name. Use |::S|","\\tto escape file names in case they contain special characters.","\\tEnvironment variables are expanded |:set_env|. See |option-backslash|","\\tabout including spaces and backslashes.","\\tNote that a \'|\' must be escaped twice: once for \\":set\\" and once for","\\tthe interpretation of a command. When you use a filter called","\\t\\"myfilter\\" do it like this: >","\\t :set makeprg=gmake\\\\ \\\\\\\\\\\\|\\\\ myfilter","<\\tThe placeholder \\"$*\\" can be given (even multiple times) to specify","\\twhere the arguments will be included, for example: >","\\t :set makeprg=latex\\\\ \\\\\\\\\\\\\\\\nonstopmode\\\\ \\\\\\\\\\\\\\\\input\\\\\\\\{$*}","<\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"matchpairs":["string\\t(default \\"(:),{:},[:]\\")","\\t\\t\\tlocal to buffer","\\tCharacters that form pairs. The |%| command jumps from one to the","\\tother.","\\tOnly character pairs are allowed that are different, thus you cannot","\\tjump between two double quotes.","\\tThe characters must be separated by a colon.","\\tThe pairs must be separated by a comma. Example for including \'<\' and","\\t\'>\' (HTML): >","\\t\\t:set mps+=<:>"],"matchtime":["number\\t(default 5)","\\t\\t\\tglobal","\\tTenths of a second to show the matching paren, when \'showmatch\' is","\\tset. Note that this is not in milliseconds, like other options that","\\tset a time. This is to be compatible with Nvi."],"maxcombine":["Removed. |vim-differences|","\\tNvim always displays up to 6 combining characters. You can still edit"," text with more than 6 combining characters, you just can\'t see them."," Use |g8| or |ga|. See |mbyte-combining|."],"maxfuncdepth":["number\\t(default 100)","\\t\\t\\tglobal","\\tMaximum depth of function calls for user functions. This normally","\\tcatches endless recursion. When using a recursive function with","\\tmore depth, set \'maxfuncdepth\' to a bigger number. But this will use","\\tmore memory, there is the danger of failing when memory is exhausted.","\\tIncreasing this limit above 200 also changes the maximum for Ex","\\tcommand recursion, see |E169|.","\\tSee also |:function|."],"maxmapdepth":["number\\t(default 1000)","\\t\\t\\tglobal","\\tMaximum number of times a mapping is done without resulting in a","\\tcharacter to be used. This normally catches endless mappings, like","\\t\\":map x y\\" with \\":map y x\\". It still does not catch \\":map g wg\\",","\\tbecause the \'w\' is used before the next mapping is done. See also","\\t|key-mapping|."],"maxmempattern":["number\\t(default 1000)","\\t\\t\\tglobal","\\tMaximum amount of memory (in Kbyte) to use for pattern matching.","\\tThe maximum value is about 2000000. Use this to work without a limit.","\\t\\t\\t\\t\\t\\t\\t*E363*","\\tWhen Vim runs into the limit it gives an error message and mostly","\\tbehaves like CTRL-C was typed.","\\tRunning into the limit often means that the pattern is very","\\tinefficient or too complex. This may already happen with the pattern","\\t\\"\\\\(.\\\\)*\\" on a very long line. \\".*\\" works much better.","\\tMight also happen on redraw, when syntax rules try to match a complex","\\ttext structure.","\\tVim may run out of memory before hitting the \'maxmempattern\' limit, in","\\twhich case you get an \\"Out of memory\\" error instead."],"menuitems":["number\\t(default 25)","\\t\\t\\tglobal","\\tMaximum number of items to use in a menu. Used for menus that are","\\tgenerated from a list of items, e.g., the Buffers menu. Changing this","\\toption has no direct effect, the menu must be refreshed first."],"mkspellmem":["string\\t(default \\"460000,2000,500\\")","\\t\\t\\tglobal","\\tParameters for |:mkspell|. This tunes when to start compressing the","\\tword tree. Compression can be slow when there are many words, but","\\tit\'s needed to avoid running out of memory. The amount of memory used","\\tper word depends very much on how similar the words are, that\'s why","\\tthis tuning is complicated."],"modeline":["boolean\\t(Vim default: on (off for root),","\\t\\t\\t\\t Vi default: off)","\\t\\t\\tlocal to buffer","\\tIf \'modeline\' is on \'modelines\' gives the number of lines that is","\\tchecked for set commands. If \'modeline\' is off or \'modelines\' is zero","\\tno lines are checked. See |modeline|."],"modelineexpr":["boolean (default: off)","\\t\\t\\tglobal","\\tWhen on allow some options that are an expression to be set in the","\\tmodeline. Check the option for whether it is affected by","\\t\'modelineexpr\'. Also see |modeline|."],"modelines":["number\\t(default 5)","\\t\\t\\tglobal","\\tIf \'modeline\' is on \'modelines\' gives the number of lines that is","\\tchecked for set commands. If \'modeline\' is off or \'modelines\' is zero","\\tno lines are checked. See |modeline|."],"modifiable":["boolean\\t(default on)","\\t\\t\\tlocal to buffer","\\tWhen off the buffer contents cannot be changed. The \'fileformat\' and","\\t\'fileencoding\' options also can\'t be changed.","\\tCan be reset on startup with the |-M| command line argument."],"modified":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tWhen on, the buffer is considered to be modified. This option is set","\\twhen:","\\t1. A change was made to the text since it was last written. Using the","\\t |undo| command to go back to the original text will reset the","\\t option. But undoing changes that were made before writing the","\\t buffer will set the option again, since the text is different from","\\t when it was written.","\\t2. \'fileformat\' or \'fileencoding\' is different from its original","\\t value. The original value is set when the buffer is read or","\\t written. A \\":set nomodified\\" command also resets the original","\\t values to the current values and the \'modified\' option will be","\\t reset.","\\t Similarly for \'eol\' and \'bomb\'.","\\tThis option is not set when a change is made to the buffer as the","\\tresult of a BufNewFile, BufRead/BufReadPost, BufWritePost,","\\tFileAppendPost or VimLeave autocommand event. See |gzip-example| for","\\tan explanation.","\\tWhen \'buftype\' is \\"nowrite\\" or \\"nofile\\" this option may be set, but","\\twill be ignored.","\\tNote that the text may actually be the same, e.g. \'modified\' is set","\\twhen using \\"rA\\" on an \\"A\\"."],"more":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tWhen on, listings pause when the whole screen is filled. You will get","\\tthe |more-prompt|. When this option is off there are no pauses, the","\\tlisting continues until finished."],"mouse":["string\\t(default \\"\\")","\\t\\t\\tglobal"],"mousefocus":["boolean\\t(default off)","\\t\\t\\tglobal","\\t\\t\\t{only works in the GUI}","\\tThe window that the mouse pointer is on is automatically activated.","\\tWhen changing the window layout or window focus in another way, the","\\tmouse pointer is moved to the window with keyboard focus. Off is the","\\tdefault because it makes using the pull down menus a little goofy, as","\\ta pointer transit may activate a window unintentionally."],"mousehide":["boolean\\t(default on)","\\t\\t\\tglobal","\\t\\t\\t{only works in the GUI}","\\tWhen on, the mouse pointer is hidden when characters are typed.","\\tThe mouse pointer is restored when the mouse is moved."],"mousemodel":["string\\t(default \\"extend\\")","\\t\\t\\tglobal","\\tSets the model to use for the mouse. The name mostly specifies what","\\tthe right mouse button is used for:","\\t extend\\tRight mouse button extends a selection. This works","\\t\\t\\tlike in an xterm.","\\t popup\\tRight mouse button pops up a menu. The shifted left","\\t\\t\\tmouse button extends a selection. This works like","\\t\\t\\twith Microsoft Windows.","\\t popup_setpos Like \\"popup\\", but the cursor will be moved to the","\\t\\t\\tposition where the mouse was clicked, and thus the","\\t\\t\\tselected operation will act upon the clicked object.","\\t\\t\\tIf clicking inside a selection, that selection will","\\t\\t\\tbe acted upon, i.e. no cursor move. This implies of","\\t\\t\\tcourse, that right clicking outside a selection will","\\t\\t\\tend Visual mode.","\\tOverview of what button does what for each model:","\\tmouse\\t\\t extend\\t\\tpopup(_setpos) ~","\\tleft click\\t place cursor\\tplace cursor","\\tleft drag\\t start selection\\tstart selection","\\tshift-left\\t search word\\t\\textend selection","\\tright click\\t extend selection\\tpopup menu (place cursor)","\\tright drag\\t extend selection\\t-","\\tmiddle click\\t paste\\t\\tpaste"],"mouseshape":["string\\t(default \\"i:beam,r:beam,s:updown,sd:cross,","\\t\\t\\t\\t\\tm:no,ml:up-arrow,v:rightup-arrow\\")","\\t\\t\\tglobal","\\tThis option tells Vim what the mouse pointer should look like in","\\tdifferent modes. The option is a comma separated list of parts, much","\\tlike used for \'guicursor\'. Each part consist of a mode/location-list","\\tand an argument-list:","\\t\\tmode-list:shape,mode-list:shape,..","\\tThe mode-list is a dash separated list of these modes/locations:","\\t\\t\\tIn a normal window: ~","\\t\\tn\\tNormal mode","\\t\\tv\\tVisual mode","\\t\\tve\\tVisual mode with \'selection\' \\"exclusive\\" (same as \'v\',","\\t\\t\\tif not specified)","\\t\\to\\tOperator-pending mode","\\t\\ti\\tInsert mode","\\t\\tr\\tReplace mode"],"mousetime":["number\\t(default 500)","\\t\\t\\tglobal","\\tDefines the maximum time in msec between two mouse clicks for the","\\tsecond click to be recognized as a multi click."],"nrformats":["string\\t(default \\"bin,hex\\")","\\t\\t\\tlocal to buffer","\\tThis defines what bases Vim will consider for numbers when using the","\\tCTRL-A and CTRL-X commands for adding to and subtracting from a number","\\trespectively; see |CTRL-A| for more info on these commands.","\\talpha\\tIf included, single alphabetical characters will be","\\t\\tincremented or decremented. This is useful for a list with a","\\t\\tletter index a), b), etc.\\t\\t*octal-nrformats*","\\toctal\\tIf included, numbers that start with a zero will be considered","\\t\\tto be octal. Example: Using CTRL-A on \\"007\\" results in \\"010\\".","\\thex\\tIf included, numbers starting with \\"0x\\" or \\"0X\\" will be","\\t\\tconsidered to be hexadecimal. Example: Using CTRL-X on","\\t\\t\\"0x100\\" results in \\"0x0ff\\".","\\tbin\\tIf included, numbers starting with \\"0b\\" or \\"0B\\" will be","\\t\\tconsidered to be binary. Example: Using CTRL-X on","\\t\\t\\"0b1000\\" subtracts one, resulting in \\"0b0111\\".","\\tNumbers which simply begin with a digit in the range 1-9 are always","\\tconsidered decimal. This also happens for numbers that are not","\\trecognized as octal or hex."],"number":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tPrint the line number in front of each line. When the \'n\' option is","\\texcluded from \'cpoptions\' a wrapped line will not use the column of","\\tline numbers.","\\tUse the \'numberwidth\' option to adjust the room for the line number.","\\tWhen a long, wrapped line doesn\'t start with the first character, \'-\'","\\tcharacters are put before the number.","\\tFor highlighting see |hl-LineNr|, |hl-CursorLineNr|, and the","\\t|:sign-define| \\"numhl\\" argument.","\\t\\t\\t\\t\\t\\t*number_relativenumber*","\\tThe \'relativenumber\' option changes the displayed number to be","\\trelative to the cursor. Together with \'number\' there are these","\\tfour combinations (cursor in line 3):"],"numberwidth":["number\\t(Vim default: 4 Vi default: 8)","\\t\\t\\tlocal to window","\\tMinimal number of columns to use for the line number. Only relevant","\\twhen the \'number\' or \'relativenumber\' option is set or printing lines","\\twith a line number. Since one space is always between the number and","\\tthe text, there is one less character for the number itself.","\\tThe value is the minimum width. A bigger width is used when needed to","\\tfit the highest line number in the buffer respectively the number of","\\trows in the window, depending on whether \'number\' or \'relativenumber\'","\\tis set. Thus with the Vim default of 4 there is room for a line number","\\tup to 999. When the buffer has 1000 lines five columns will be used.","\\tThe minimum value is 1, the maximum value is 20."],"omnifunc":["string\\t(default: empty)","\\t\\t\\tlocal to buffer","\\tThis option specifies a function to be used for Insert mode omni","\\tcompletion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O|","\\tSee |complete-functions| for an explanation of how the function is","\\tinvoked and what it should return.","\\tThis option is usually set by a filetype plugin:","\\t|:filetype-plugin-on|","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"opendevice":["boolean\\t(default off)","\\t\\t\\tglobal","\\t\\t\\t{only for Windows}","\\tEnable reading and writing from devices. This may get Vim stuck on a","\\tdevice that can be opened but doesn\'t actually do the I/O. Therefore","\\tit is off by default.","\\tNote that on Windows editing \\"aux.h\\", \\"lpt1.txt\\" and the like also","\\tresult in editing a device."],"operatorfunc":["string\\t(default: empty)","\\t\\t\\tglobal","\\tThis option specifies a function to be called by the |g@| operator.","\\tSee |:map-operator| for more info and an example."],"packpath":["string\\t(default: see \'runtimepath\')","\\tDirectories used to find packages. See |packages|."],"paragraphs":["string\\t(default \\"IPLPPPQPP TPHPLIPpLpItpplpipbp\\")","\\t\\t\\tglobal","\\tSpecifies the nroff macros that separate paragraphs. These are pairs","\\tof two letters (see |object-motions|)."],"paste":["boolean\\t(default off)","\\t\\t\\tglobal","\\tThis option is obsolete; |bracketed-paste-mode| is built-in."],"pastetoggle":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen non-empty, specifies the key sequence that toggles the \'paste\'","\\toption. This is like specifying a mapping: >","\\t :map {keys} :set invpaste<CR>","<\\tWhere {keys} is the value of \'pastetoggle\'.","\\tThe difference is that it will work even when \'paste\' is set.","\\t\'pastetoggle\' works in Insert mode and Normal mode, but not in","\\tCommand-line mode.","\\tMappings are checked first, thus overrule \'pastetoggle\'. However,","\\twhen \'paste\' is on mappings are ignored in Insert mode, thus you can do","\\tthis: >","\\t :map <F10> :set paste<CR>","\\t :map <F11> :set nopaste<CR>","\\t :imap <F10> <C-O>:set paste<CR>","\\t :imap <F11> <nop>","\\t :set pastetoggle=<F11>","<\\tThis will make <F10> start paste mode and <F11> stop paste mode.","\\tNote that typing <F10> in paste mode inserts \\"<F10>\\", since in paste","\\tmode everything is inserted literally, except the \'pastetoggle\' key","\\tsequence.","\\tNo timeout is used, this means that a multi-key \'pastetoggle\' can not","\\tbe triggered manually."],"patchexpr":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tExpression which is evaluated to apply a patch to a file and generate","\\tthe resulting new version of the file. See |diff-patchexpr|."],"patchmode":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen non-empty the oldest version of a file is kept. This can be used","\\tto keep the original version of a file if you are changing files in a","\\tsource distribution. Only the first time that a file is written a","\\tcopy of the original file will be kept. The name of the copy is the","\\tname of the original file with the string in the \'patchmode\' option","\\tappended. This option should start with a dot. Use a string like","\\t\\".orig\\" or \\".org\\". \'backupdir\' must not be empty for this to work","\\t(Detail: The backup file is renamed to the patchmode file after the","\\tnew file has been successfully written, that\'s why it must be possible","\\tto write a backup file). If there was no file to be backed up, an","\\tempty file is created.","\\tWhen the \'backupskip\' pattern matches, a patchmode file is not made.","\\tUsing \'patchmode\' for compressed files appends the extension at the","\\tend (e.g., \\"file.gz.orig\\"), thus the resulting name isn\'t always","\\trecognized as a compressed file.","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal."],"path":["string\\t(default on Unix: \\".,/usr/include,,\\"","\\t\\t\\t\\t other systems: \\".,,\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tThis is a list of directories which will be searched when using the","\\t|gf|, [f, ]f, ^Wf, |:find|, |:sfind|, |:tabfind| and other commands,","\\tprovided that the file being searched for has a relative path (not","\\tstarting with \\"/\\", \\"./\\" or \\"../\\"). The directories in the \'path\'","\\toption may be relative or absolute.","\\t- Use commas to separate directory names: >","\\t\\t:set path=.,/usr/local/include,/usr/include","<\\t- Spaces can also be used to separate directory names (for backwards","\\t compatibility with version 3.0). To have a space in a directory","\\t name, precede it with an extra backslash, and escape the space: >","\\t\\t:set path=.,/dir/with\\\\\\\\\\\\ space","<\\t- To include a comma in a directory name precede it with an extra","\\t backslash: >","\\t\\t:set path=.,/dir/with\\\\\\\\,comma","<\\t- To search relative to the directory of the current file, use: >","\\t\\t:set path=.","<\\t- To search in the current directory use an empty string between two","\\t commas: >","\\t\\t:set path=,,","<\\t- A directory name may end in a \':\' or \'/\'.","\\t- Environment variables are expanded |:set_env|.","\\t- When using |netrw.vim| URLs can be used. For example, adding","\\t \\"http://www.vim.org\\" will make \\":find index.html\\" work.","\\t- Search upwards and downwards in a directory tree using \\"*\\", \\"**\\" and","\\t \\";\\". See |file-searching| for info and syntax.","\\t- Careful with \'\\\\\' characters, type two to get one in the option: >","\\t\\t:set path=.,c:\\\\\\\\include","<\\t Or just use \'/\' instead: >","\\t\\t:set path=.,c:/include","<\\tDon\'t forget \\".\\" or files won\'t even be found in the same directory as","\\tthe file!","\\tThe maximum length is limited. How much depends on the system, mostly","\\tit is something like 256 or 1024 characters.","\\tYou can check if all the include files are found, using the value of","\\t\'path\', see |:checkpath|.","\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\tdirectories from the list. This avoids problems when a future version","\\tuses another default. To remove the current directory use: >","\\t\\t:set path-=","<\\tTo add the current directory use: >","\\t\\t:set path+=","<\\tTo use an environment variable, you probably need to replace the","\\tseparator. Here is an example to append $INCL, in which directory","\\tnames are separated with a semi-colon: >","\\t\\t:let &path = &path . \\",\\" . substitute($INCL, \';\', \',\', \'g\')","<\\tReplace the \';\' with a \':\' or whatever separator is used. Note that","\\tthis doesn\'t work when $INCL contains a comma or white space."],"preserveindent":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tWhen changing the indent of the current line, preserve as much of the","\\tindent structure as possible. Normally the indent is replaced by a","\\tseries of tabs followed by spaces as required (unless |\'expandtab\'| is","\\tenabled, in which case only spaces are used). Enabling this option","\\tmeans the indent will preserve as many existing characters as possible","\\tfor indenting, and only add additional tabs or spaces as required.","\\t\'expandtab\' does not apply to the preserved white space, a Tab remains","\\ta Tab.","\\tNOTE: When using \\">>\\" multiple times the resulting indent is a mix of","\\ttabs and spaces. You might not like this.","\\tAlso see \'copyindent\'.","\\tUse |:retab| to clean up white space."],"previewheight":["number (default 12)","\\t\\t\\tglobal","\\tDefault height for a preview window. Used for |:ptag| and associated","\\tcommands. Used for |CTRL-W_}| when no count is given."],"previewwindow":["boolean (default off)","\\t\\t\\tlocal to window","\\tIdentifies the preview window. Only one window can have this option","\\tset. It\'s normally not set directly, but by using one of the commands","\\t|:ptag|, |:pedit|, etc."],"printdevice":["string\\t(default empty)","\\t\\t\\tglobal","\\tThe name of the printer to be used for |:hardcopy|.","\\tSee |pdev-option|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"printencoding":["string\\t(default empty, except for some systems)","\\t\\t\\tglobal","\\tSets the character encoding used when printing.","\\tSee |penc-option|."],"printexpr":["string\\t(default: see below)","\\t\\t\\tglobal","\\tExpression used to print the PostScript produced with |:hardcopy|.","\\tSee |pexpr-option|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"printfont":["string\\t(default \\"courier\\")","\\t\\t\\tglobal","\\tThe name of the font that will be used for |:hardcopy|.","\\tSee |pfn-option|."],"printheader":["string (default \\"%<%f%h%m%=Page %N\\")","\\t\\t\\tglobal","\\tThe format of the header produced in |:hardcopy| output.","\\tSee |pheader-option|."],"printmbcharset":["string (default \\"\\")","\\t\\t\\tglobal","\\tThe CJK character set to be used for CJK output from |:hardcopy|.","\\tSee |pmbcs-option|."],"printmbfont":["string (default \\"\\")","\\t\\t\\tglobal","\\tList of font names to be used for CJK output from |:hardcopy|.","\\tSee |pmbfn-option|."],"printoptions":["string (default \\"\\")","\\t\\t\\tglobal","\\tList of items that control the format of the output of |:hardcopy|.","\\tSee |popt-option|."],"prompt":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on a \\":\\" prompt is used in Ex mode."],"pumblend":["number\\t(default 0)","\\t\\t\\tglobal","\\tEnables pseudo-transparency for the |popup-menu|. Valid values are in","\\tthe range of 0 for fully opaque popupmenu (disabled) to 100 for fully","\\ttransparent background. Values between 0-30 are typically most useful."],"pumheight":["number\\t(default 0)","\\t\\t\\tglobal","\\tMaximum number of items to show in the popup menu","\\t(|ins-completion-menu|). Zero means \\"use available screen space\\"."],"pumwidth":["number\\t(default 15)","\\t\\t\\tglobal","\\tMinimum width for the popup menu (|ins-completion-menu|). If the","\\tcursor column + \'pumwidth\' exceeds screen width, the popup menu is","\\tnudged to fit on the screen."],"pyxversion":["number\\t(default depends on the build)","\\t\\t\\tglobal","\\tSpecifies the python version used for pyx* functions and commands","\\t|python_x|. The default value is as follows:"],"quoteescape":["string\\t(default \\"\\\\\\")","\\t\\t\\tlocal to buffer","\\tThe characters that are used to escape quotes in a string. Used for","\\tobjects like a\', a\\" and a` |a\'|.","\\tWhen one of the characters in this option is found inside a string,","\\tthe following character will be skipped. The default value makes the","\\ttext \\"foo\\\\\\"bar\\\\\\\\\\" considered to be one string."],"readonly":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tIf on, writes fail unless you use a \'!\'. Protects you from","\\taccidentally overwriting a file. Default on when Vim is started","\\tin read-only mode (\\"vim -R\\") or when the executable is called \\"view\\".","\\tWhen using \\":w!\\" the \'readonly\' option is reset for the current","\\tbuffer, unless the \'Z\' flag is in \'cpoptions\'.","\\tWhen using the \\":view\\" command the \'readonly\' option is","\\tset for the newly edited buffer.","\\tSee \'modifiable\' for disallowing changes to the buffer."],"redrawdebug":["string\\t(default \'\')","\\t\\t\\tglobal","\\tFlags to change the way redrawing works, for debugging purposes.","\\tMost useful with \'writedelay\' set to some reasonable value.","\\tSupports the following flags:","\\t compositor\\tIndicate what redraws come from the compositor","\\t\\t\\tby briefly flashing the redrawn regions in colors","\\t\\t\\tindicating the redraw type. These are the highlight","\\t\\t\\tgroups used (and their default colors):","\\t\\tRedrawDebugNormal gui=reverse normal redraw passed through","\\t\\tRedrawDebugClear guibg=Yellow clear event passed through","\\t\\tRedrawDebugComposed guibg=Green redraw event modified by the","\\t\\t\\t\\t\\t\\t compositor (due to","\\t\\t\\t\\t\\t\\t overlapping grids, etc)","\\t\\tRedrawDebugRecompose guibg=Red redraw generated by the","\\t\\t\\t\\t\\t\\t compositor itself, due to a","\\t\\t\\t\\t\\t\\t grid being moved or deleted.","\\t nothrottle\\tTurn off throttling of the message grid. This is an","\\t\\t\\toptimization that joins many small scrolls to one","\\t\\t\\tlarger scroll when drawing the message area (with","\\t\\t\\t\'display\' msgsep flag active).","\\t invalid\\tEnable stricter checking (abort) of inconsistencies","\\t\\t\\tof the internal screen state. This is mostly","\\t\\t\\tuseful when running nvim inside a debugger (and","\\t\\t\\tthe test suite).","\\t nodelta\\tSend all internally redrawn cells to the UI, even if","\\t they are unchanged from the already displayed state."],"redrawtime":["number\\t(default 2000)","\\t\\t\\tglobal","\\tTime in milliseconds for redrawing the display. Applies to","\\t\'hlsearch\', \'inccommand\', |:match| highlighting and syntax","\\thighlighting.","\\tWhen redrawing takes more than this many milliseconds no further","\\tmatches will be highlighted.","\\tFor syntax highlighting the time applies per window. When over the","\\tlimit syntax highlighting is disabled until |CTRL-L| is used.","\\tThis is used to avoid that Vim hangs when using a very complicated","\\tpattern."],"regexpengine":["number\\t(default 0)","\\t\\t\\tglobal","\\tThis selects the default regexp engine. |two-engines|","\\tThe possible values are:","\\t\\t0\\tautomatic selection","\\t\\t1\\told engine","\\t\\t2\\tNFA engine","\\tNote that when using the NFA engine and the pattern contains something","\\tthat is not supported the pattern will not match. This is only useful","\\tfor debugging the regexp engine.","\\tUsing automatic selection enables Vim to switch the engine, if the","\\tdefault engine becomes too costly. E.g., when the NFA engine uses too","\\tmany states. This should prevent Vim from hanging on a combination of","\\ta complex pattern with long text."],"relativenumber":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tShow the line number relative to the line with the cursor in front of","\\teach line. Relative line numbers help you use the |count| you can","\\tprecede some vertical motion commands (e.g. j k + -) with, without","\\thaving to calculate it yourself. Especially useful in combination with","\\tother commands (e.g. y d c < > gq gw =).","\\tWhen the \'n\' option is excluded from \'cpoptions\' a wrapped","\\tline will not use the column of line numbers.","\\tThe \'numberwidth\' option can be used to set the room used for the line","\\tnumber.","\\tWhen a long, wrapped line doesn\'t start with the first character, \'-\'","\\tcharacters are put before the number.","\\tSee |hl-LineNr| and |hl-CursorLineNr| for the highlighting used for","\\tthe number."],"remap":["boolean\\t(default on)","\\t\\t\\tglobal","\\tAllows for mappings to work recursively. If you do not want this for","\\ta single entry, use the :noremap[!] command.","\\tNOTE: To avoid portability problems with Vim scripts, always keep","\\tthis option at the default \\"on\\". Only switch it off when working with","\\told Vi scripts."],"report":["number\\t(default 2)","\\t\\t\\tglobal","\\tThreshold for reporting number of lines changed. When the number of","\\tchanged lines is more than \'report\' a message will be given for most","\\t\\":\\" commands. If you want it always, set \'report\' to 0.","\\tFor the \\":substitute\\" command the number of substitutions is used","\\tinstead of the number of lines."],"revins":["boolean\\t(default off)","\\t\\t\\tglobal","\\tInserting characters in Insert mode will work backwards. See \\"typing","\\tbackwards\\" |ins-reverse|. This option can be toggled with the CTRL-_","\\tcommand in Insert mode, when \'allowrevins\' is set.","\\tThis option is reset when \'paste\' is set and restored when \'paste\' is","\\treset."],"rightleft":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tWhen on, display orientation becomes right-to-left, i.e., characters","\\tthat are stored in the file appear from the right to the left.","\\tUsing this option, it is possible to edit files for languages that","\\tare written from the right to the left such as Hebrew and Arabic.","\\tThis option is per window, so it is possible to edit mixed files","\\tsimultaneously, or to view the same file in both ways (this is","\\tuseful whenever you have a mixed text file with both right-to-left","\\tand left-to-right strings so that both sets are displayed properly","\\tin different windows). Also see |rileft.txt|."],"rightleftcmd":["string\\t(default \\"search\\")","\\t\\t\\tlocal to window","\\tEach word in this option enables the command line editing to work in","\\tright-to-left mode for a group of commands:"],"ruler":["boolean\\t(default on)","\\t\\t\\tglobal","\\tShow the line and column number of the cursor position, separated by a","\\tcomma. When there is room, the relative position of the displayed","\\ttext in the file is shown on the far right:","\\t\\tTop\\tfirst line is visible","\\t\\tBot\\tlast line is visible","\\t\\tAll\\tfirst and last line are visible","\\t\\t45%\\trelative position in the file","\\tIf \'rulerformat\' is set, it will determine the contents of the ruler.","\\tEach window has its own ruler. If a window has a status line, the","\\truler is shown there. Otherwise it is shown in the last line of the","\\tscreen. If the statusline is given by \'statusline\' (i.e. not empty),","\\tthis option takes precedence over \'ruler\' and \'rulerformat\'","\\tIf the number of characters displayed is different from the number of","\\tbytes in the text (e.g., for a TAB or a multi-byte character), both","\\tthe text column (byte number) and the screen column are shown,","\\tseparated with a dash.","\\tFor an empty line \\"0-1\\" is shown.","\\tFor an empty buffer the line number will also be zero: \\"0,0-1\\".","\\tThis option is reset when \'paste\' is set and restored when \'paste\' is","\\treset.","\\tIf you don\'t want to see the ruler all the time but want to know where","\\tyou are, use \\"g CTRL-G\\" |g_CTRL-G|."],"rulerformat":["string\\t(default empty)","\\t\\t\\tglobal","\\tWhen this option is not empty, it determines the content of the ruler","\\tstring, as displayed for the \'ruler\' option.","\\tThe format of this option is like that of \'statusline\'.","\\tThis option cannot be set in a modeline when \'modelineexpr\' is off."],"runtimepath":["string\\t(default: \\"$XDG_CONFIG_HOME/nvim,","\\t\\t\\t\\t\\t $XDG_CONFIG_DIRS[1]/nvim,","\\t\\t\\t\\t\\t $XDG_CONFIG_DIRS[2]/nvim,","\\t\\t\\t\\t\\t …","\\t\\t\\t\\t\\t $XDG_DATA_HOME/nvim[-data]/site,","\\t\\t\\t\\t\\t $XDG_DATA_DIRS[1]/nvim/site,","\\t\\t\\t\\t\\t $XDG_DATA_DIRS[2]/nvim/site,","\\t\\t\\t\\t\\t …","\\t\\t\\t\\t\\t $VIMRUNTIME,","\\t\\t\\t\\t\\t …","\\t\\t\\t\\t\\t $XDG_DATA_DIRS[2]/nvim/site/after,","\\t\\t\\t\\t\\t $XDG_DATA_DIRS[1]/nvim/site/after,","\\t\\t\\t\\t\\t $XDG_DATA_HOME/nvim[-data]/site/after,","\\t\\t\\t\\t\\t …","\\t\\t\\t\\t\\t $XDG_CONFIG_DIRS[2]/nvim/after,","\\t\\t\\t\\t\\t $XDG_CONFIG_DIRS[1]/nvim/after,","\\t\\t\\t\\t\\t $XDG_CONFIG_HOME/nvim/after\\")","\\t\\t\\tglobal","\\tList of directories to be searched for these runtime files:","\\t filetype.vim\\tfiletypes by file name |new-filetype|","\\t scripts.vim\\tfiletypes by file contents |new-filetype-scripts|","\\t autoload/\\tautomatically loaded scripts |autoload-functions|","\\t colors/\\tcolor scheme files |:colorscheme|","\\t compiler/\\tcompiler files |:compiler|","\\t doc/\\t\\tdocumentation |write-local-help|","\\t ftplugin/\\tfiletype plugins |write-filetype-plugin|","\\t indent/\\tindent scripts |indent-expression|","\\t keymap/\\tkey mapping files |mbyte-keymap|","\\t lang/\\t\\tmenu translations |:menutrans|","\\t menu.vim\\tGUI menus |menu.vim|","\\t pack/\\t\\tpackages |:packadd|","\\t plugin/\\tplugin scripts |write-plugin|","\\t print/\\tfiles for printing |postscript-print-encoding|","\\t rplugin/\\t|remote-plugin| scripts","\\t spell/\\tspell checking files |spell|","\\t syntax/\\tsyntax files |mysyntaxfile|","\\t tutor/\\ttutorial files |:Tutor|"],"scroll":["number\\t(default: half the window height)","\\t\\t\\tlocal to window","\\tNumber of lines to scroll with CTRL-U and CTRL-D commands. Will be","\\tset to half the number of lines in the window when the window size","\\tchanges. If you give a count to the CTRL-U or CTRL-D command it will","\\tbe used as the new value for \'scroll\'. Reset to half the window","\\theight with \\":set scroll=0\\"."],"scrollback":["number\\t(default: 10000)","\\t\\t\\tlocal to buffer","\\tMaximum number of lines kept beyond the visible screen. Lines at the","\\ttop are deleted if new lines exceed this limit.","\\tMinimum is 1, maximum is 100000.","\\tOnly in |terminal| buffers."],"scrollbind":["boolean (default off)","\\t\\t\\tlocal to window","\\tSee also |scroll-binding|. When this option is set, the current","\\twindow scrolls as other scrollbind windows (windows that also have","\\tthis option set) scroll. This option is useful for viewing the","\\tdifferences between two versions of a file, see \'diff\'.","\\tSee |\'scrollopt\'| for options that determine how this option should be","\\tinterpreted.","\\tThis option is mostly reset when splitting a window to edit another","\\tfile. This means that \\":split | edit file\\" results in two windows","\\twith scroll-binding, but \\":split file\\" does not."],"scrolljump":["number\\t(default 1)","\\t\\t\\tglobal","\\tMinimal number of lines to scroll when the cursor gets off the","\\tscreen (e.g., with \\"j\\"). Not used for scroll commands (e.g., CTRL-E,","\\tCTRL-D). Useful if your terminal scrolls very slowly.","\\tWhen set to a negative number from -1 to -100 this is used as the","\\tpercentage of the window height. Thus -50 scrolls half the window","\\theight."],"scrolloff":["number\\t(default 0)","\\t\\t\\tglobal or local to window |global-local|","\\tMinimal number of screen lines to keep above and below the cursor.","\\tThis will make some context visible around where you are working. If","\\tyou set it to a very large value (999) the cursor line will always be","\\tin the middle of the window (except at the start or end of the file or","\\twhen long lines wrap).","\\tAfter using the local value, go back the global value with one of","\\tthese two: >","\\t\\tsetlocal scrolloff<","\\t\\tsetlocal scrolloff=-1","<\\tFor scrolling horizontally see \'sidescrolloff\'."],"scrollopt":["string\\t(default \\"ver,jump\\")","\\t\\t\\tglobal","\\tThis is a comma-separated list of words that specifies how","\\t\'scrollbind\' windows should behave. \'sbo\' stands for ScrollBind","\\tOptions.","\\tThe following words are available:","\\t ver\\t\\tBind vertical scrolling for \'scrollbind\' windows","\\t hor\\t\\tBind horizontal scrolling for \'scrollbind\' windows","\\t jump\\tApplies to the offset between two windows for vertical","\\t\\t\\tscrolling. This offset is the difference in the first","\\t\\t\\tdisplayed line of the bound windows. When moving","\\t\\t\\taround in a window, another \'scrollbind\' window may","\\t\\t\\treach a position before the start or after the end of","\\t\\t\\tthe buffer. The offset is not changed though, when","\\t\\t\\tmoving back the \'scrollbind\' window will try to scroll","\\t\\t\\tto the desired position when possible.","\\t\\t\\tWhen now making that window the current one, two","\\t\\t\\tthings can be done with the relative offset:","\\t\\t\\t1. When \\"jump\\" is not included, the relative offset is","\\t\\t\\t adjusted for the scroll position in the new current","\\t\\t\\t window. When going back to the other window, the","\\t\\t\\t new relative offset will be used.","\\t\\t\\t2. When \\"jump\\" is included, the other windows are","\\t\\t\\t scrolled to keep the same relative offset. When","\\t\\t\\t going back to the other window, it still uses the","\\t\\t\\t same relative offset.","\\tAlso see |scroll-binding|.","\\tWhen \'diff\' mode is active there always is vertical scroll binding,","\\teven when \\"ver\\" isn\'t there."],"sections":["string\\t(default \\"SHNHH HUnhsh\\")","\\t\\t\\tglobal","\\tSpecifies the nroff macros that separate sections. These are pairs of","\\ttwo letters (See |object-motions|). The default makes a section start","\\tat the nroff macros \\".SH\\", \\".NH\\", \\".H\\", \\".HU\\", \\".nh\\" and \\".sh\\"."],"secure":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, \\":autocmd\\", shell and write commands are not allowed in","\\t\\".nvimrc\\" and \\".exrc\\" in the current directory and map commands are","\\tdisplayed. Switch it off only if you know that you will not run into","\\tproblems, or when the \'exrc\' option is off. On Unix this option is","\\tonly used if the \\".nvimrc\\" or \\".exrc\\" is not owned by you. This can be","\\tdangerous if the systems allows users to do a \\"chown\\". You better set","\\t\'secure\' at the end of your |init.vim| then.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"selection":["string\\t(default \\"inclusive\\")","\\t\\t\\tglobal","\\tThis option defines the behavior of the selection. It is only used","\\tin Visual and Select mode.","\\tPossible values:","\\t value\\tpast line inclusive ~","\\t old\\t\\t no\\t\\tyes","\\t inclusive\\t yes\\t\\tyes","\\t exclusive\\t yes\\t\\tno","\\t\\"past line\\" means that the cursor is allowed to be positioned one","\\tcharacter past the line.","\\t\\"inclusive\\" means that the last character of the selection is included","\\tin an operation. For example, when \\"x\\" is used to delete the","\\tselection.","\\tWhen \\"old\\" is used and \'virtualedit\' allows the cursor to move past","\\tthe end of line the line break still isn\'t included.","\\tNote that when \\"exclusive\\" is used and selecting from the end","\\tbackwards, you cannot include the last character of a line, when","\\tstarting in Normal mode and \'virtualedit\' empty."],"selectmode":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThis is a comma separated list of words, which specifies when to start","\\tSelect mode instead of Visual mode, when a selection is started.","\\tPossible values:","\\t mouse\\twhen using the mouse","\\t key\\t\\twhen using shifted special keys","\\t cmd\\t\\twhen using \\"v\\", \\"V\\" or CTRL-V","\\tSee |Select-mode|.","\\tThe \'selectmode\' option is set by the |:behave| command."],"sessionoptions":["string\\t(default: \\"blank,buffers,curdir,folds,","\\t\\t\\t\\t\\t help,tabpages,winsize\\"","\\t\\t\\t\\t Vi default: \\"blank,buffers,curdir,folds,","\\t\\t\\t\\t\\t help,options,tabpages,winsize\\")","\\t\\t\\tglobal","\\tChanges the effect of the |:mksession| command. It is a comma","\\tseparated list of words. Each word enables saving and restoring","\\tsomething:","\\t word\\t\\tsave and restore ~","\\t blank\\tempty windows","\\t buffers\\thidden and unloaded buffers, not just those in windows","\\t curdir\\tthe current directory","\\t folds\\tmanually created folds, opened/closed folds and local","\\t\\t\\tfold options","\\t globals\\tglobal variables that start with an uppercase letter","\\t\\t\\tand contain at least one lowercase letter. Only","\\t\\t\\tString and Number types are stored.","\\t help\\t\\tthe help window","\\t localoptions\\toptions and mappings local to a window or buffer (not","\\t\\t\\tglobal values for local options)","\\t options\\tall options and mappings (also global values for local","\\t\\t\\toptions)","\\t resize\\tsize of the Vim window: \'lines\' and \'columns\'","\\t sesdir\\tthe directory in which the session file is located","\\t\\t\\twill become the current directory (useful with","\\t\\t\\tprojects accessed over a network from different","\\t\\t\\tsystems)","\\t slash\\tbackslashes in file names replaced with forward","\\t\\t\\tslashes","\\t tabpages\\tall tab pages; without this only the current tab page","\\t\\t\\tis restored, so that you can make a session for each","\\t\\t\\ttab page separately","\\t terminal\\tinclude terminal windows where the command can be","\\t\\t\\trestored","\\t unix\\t\\twith Unix end-of-line format (single <NL>), even when","\\t\\t\\ton Windows or DOS","\\t winpos\\tposition of the whole Vim window","\\t winsize\\twindow sizes"],"shada":["string\\t(Vim default for","\\t\\t\\t\\t Win32: !,\'100,<50,s10,h,rA:,rB:","\\t\\t\\t\\t others: !,\'100,<50,s10,h","\\t\\t\\t\\t Vi default: \\"\\")","\\t\\t\\tglobal","\\tWhen non-empty, the shada file is read upon startup and written","\\twhen exiting Vim (see |shada-file|). The string should be a comma","\\tseparated list of parameters, each consisting of a single character","\\tidentifying the particular parameter, followed by a number or string","\\twhich specifies the value of that parameter. If a particular","\\tcharacter is left out, then the default value is used for that","\\tparameter. The following is a list of the identifying characters and","\\tthe effect of their value.","\\tCHAR\\tVALUE\\t~","\\t\\t\\t\\t\\t\\t\\t*shada-!*","\\t!\\tWhen included, save and restore global variables that start","\\t\\twith an uppercase letter, and don\'t contain a lowercase","\\t\\tletter. Thus \\"KEEPTHIS and \\"K_L_M\\" are stored, but \\"KeepThis\\"","\\t\\tand \\"_K_L_M\\" are not. Nested List and Dict items may not be","\\t\\tread back correctly, you end up with an empty item.","\\t\\t\\t\\t\\t\\t\\t*shada-quote*","\\t\\"\\tMaximum number of lines saved for each register. Old name of","\\t\\tthe \'<\' item, with the disadvantage that you need to put a","\\t\\tbackslash before the \\", otherwise it will be recognized as the","\\t\\tstart of a comment!","\\t\\t\\t\\t\\t\\t\\t*shada-%*","\\t%\\tWhen included, save and restore the buffer list. If Vim is","\\t\\tstarted with a file name argument, the buffer list is not","\\t\\trestored. If Vim is started without a file name argument, the","\\t\\tbuffer list is restored from the shada file. Quickfix ","\\t\\t(\'buftype\'), unlisted (\'buflisted\'), unnamed and buffers on ","\\t\\tremovable media (|shada-r|) are not saved.","\\t\\tWhen followed by a number, the number specifies the maximum","\\t\\tnumber of buffers that are stored. Without a number all","\\t\\tbuffers are stored.","\\t\\t\\t\\t\\t\\t\\t*shada-\'*","\\t\'\\tMaximum number of previously edited files for which the marks","\\t\\tare remembered. This parameter must always be included when","\\t\\t\'shada\' is non-empty.","\\t\\tIncluding this item also means that the |jumplist| and the","\\t\\t|changelist| are stored in the shada file.","\\t\\t\\t\\t\\t\\t\\t*shada-/*","\\t/\\tMaximum number of items in the search pattern history to be","\\t\\tsaved. If non-zero, then the previous search and substitute","\\t\\tpatterns are also saved. When not included, the value of","\\t\\t\'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*shada-:*","\\t:\\tMaximum number of items in the command-line history to be","\\t\\tsaved. When not included, the value of \'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*shada-<*","\\t<\\tMaximum number of lines saved for each register. If zero then","\\t\\tregisters are not saved. When not included, all lines are","\\t\\tsaved. \'\\"\' is the old name for this item.","\\t\\tAlso see the \'s\' item below: limit specified in KiB.","\\t\\t\\t\\t\\t\\t\\t*shada-@*","\\t@\\tMaximum number of items in the input-line history to be","\\t\\tsaved. When not included, the value of \'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*shada-c*","\\tc\\tDummy option, kept for compatibility reasons. Has no actual ","\\t\\teffect: ShaDa always uses UTF-8 and \'encoding\' value is fixed ","\\t\\tto UTF-8 as well.","\\t\\t\\t\\t\\t\\t\\t*shada-f*","\\tf\\tWhether file marks need to be stored. If zero, file marks (\'0","\\t\\tto \'9, \'A to \'Z) are not stored. When not present or when","\\t\\tnon-zero, they are all stored. \'0 is used for the current","\\t\\tcursor position (when exiting or when doing |:wshada|).","\\t\\t\\t\\t\\t\\t\\t*shada-h*","\\th\\tDisable the effect of \'hlsearch\' when loading the shada","\\t\\tfile. When not included, it depends on whether \\":nohlsearch\\"","\\t\\thas been used since the last search command.","\\t\\t\\t\\t\\t\\t\\t*shada-n*","\\tn\\tName of the shada file. The name must immediately follow","\\t\\tthe \'n\'. Must be at the end of the option! If the","\\t\\t\'shadafile\' option is set, that file name overrides the one","\\t\\tgiven here with \'shada\'. Environment variables are","\\t\\texpanded when opening the file, not when setting the option.","\\t\\t\\t\\t\\t\\t\\t*shada-r*","\\tr\\tRemovable media. The argument is a string (up to the next","\\t\\t\',\'). This parameter can be given several times. Each","\\t\\tspecifies the start of a path for which no marks will be","\\t\\tstored. This is to avoid removable media. For Windows you","\\t\\tcould use \\"ra:,rb:\\". You can also use it for temp files,","\\t\\te.g., for Unix: \\"r/tmp\\". Case is ignored.","\\t\\t\\t\\t\\t\\t\\t*shada-s*","\\ts\\tMaximum size of an item contents in KiB. If zero then nothing ","\\t\\tis saved. Unlike Vim this applies to all items, except for ","\\t\\tthe buffer list and header. Full item size is off by three ","\\t\\tunsigned integers: with `s10` maximum item size may be 1 byte ","\\t\\t(type: 7-bit integer) + 9 bytes (timestamp: up to 64-bit ","\\t\\tinteger) + 3 bytes (item size: up to 16-bit integer because ","\\t\\t2^8 < 10240 < 2^16) + 10240 bytes (requested maximum item ","\\t\\tcontents size) = 10253 bytes."],"shadafile":["string\\t(default: \\"\\")","\\t\\t\\tglobal","\\tWhen non-empty, overrides the file name used for |shada| (viminfo).","\\tWhen equal to \\"NONE\\" no shada file will be read or written.","\\tThis option can be set with the |-i| command line flag. The |--clean|","\\tcommand line flag sets it to \\"NONE\\".","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shell":["string\\t(default $SHELL or \\"sh\\",","\\t\\t\\t\\t\\tWindows: \\"cmd.exe\\")","\\t\\t\\tglobal","\\tName of the shell to use for ! and :! commands. When changing the","\\tvalue also check these options: \'shellpipe\', \'shellslash\'","\\t\'shellredir\', \'shellquote\', \'shellxquote\' and \'shellcmdflag\'.","\\tIt is allowed to give an argument to the command, e.g. \\"csh -f\\".","\\tSee |option-backslash| about including spaces and backslashes.","\\tEnvironment variables are expanded |:set_env|.","\\tIf the name of the shell contains a space, you might need to enclose","\\tit in quotes. Example: >","\\t\\t:set shell=\\\\\\"c:\\\\program\\\\ files\\\\unix\\\\sh.exe\\\\\\"\\\\ -f","<\\tNote the backslash before each quote (to avoid starting a comment) and ","\\teach space (to avoid ending the option value), so better use |:let-&| ","\\tlike this: >","\\t\\t:let &shell=\'\\"C:\\\\Program Files\\\\unix\\\\sh.exe\\" -f\'","<\\tAlso note that the \\"-f\\" is not inside the quotes, because it is not ","\\tpart of the command name.","\\t\\t\\t\\t\\t\\t\\t*shell-unquoting*","\\tRules regarding quotes:","\\t1. Option is split on space and tab characters that are not inside ","\\t quotes: \\"abc def\\" runs shell named \\"abc\\" with additional argument ","\\t \\"def\\", \'\\"abc def\\"\' runs shell named \\"abc def\\" with no additional ","\\t arguments (here and below: additional means “additional to ","\\t \'shellcmdflag\'”).","\\t2. Quotes in option may be present in any position and any number: ","\\t \'\\"abc\\"\', \'\\"a\\"bc\', \'a\\"b\\"c\', \'ab\\"c\\"\' and \'\\"a\\"b\\"c\\"\' are all equivalent ","\\t to just \\"abc\\".","\\t3. Inside quotes backslash preceding backslash means one backslash. ","\\t Backslash preceding quote means one quote. Backslash preceding ","\\t anything else means backslash and next character literally: ","\\t \'\\"a\\\\\\\\b\\"\' is the same as \\"a\\\\b\\", \'\\"a\\\\\\\\\\"b\\"\' runs shell named literally ","\\t \'a\\"b\', \'\\"a\\\\b\\"\' is the same as \\"a\\\\b\\" again.","\\t4. Outside of quotes backslash always means itself, it cannot be used ","\\t to escape quote: \'a\\\\\\"b\\"\' is the same as \\"a\\\\b\\".","\\tNote that such processing is done after |:set| did its own round of ","\\tunescaping, so to keep yourself sane use |:let-&| like shown above.","\\t\\t\\t\\t\\t\\t\\t*shell-powershell*","\\tTo use powershell: >","\\t\\tlet &shell = has(\'win32\') ? \'powershell\' : \'pwsh\'","\\t\\tset shellquote= shellpipe=\\\\| shellxquote=","\\t\\tset shellcmdflag=-NoLogo\\\\ -NoProfile\\\\ -ExecutionPolicy\\\\ RemoteSigned\\\\ -Command","\\t\\tset shellredir=\\\\|\\\\ Out-File\\\\ -Encoding\\\\ UTF8"],"shellcmdflag":["string\\t(default: \\"-c\\"; Windows: \\"/s /c\\")","\\t\\t\\tglobal","\\tFlag passed to the shell to execute \\"!\\" and \\":!\\" commands; e.g.,","\\t`bash.exe -c ls` or `cmd.exe /s /c \\"dir\\"`. For Windows","\\tsystems, the default is set according to the value of \'shell\', to","\\treduce the need to set this option by the user.","\\tOn Unix it can have more than one flag. Each white space separated","\\tpart is passed as an argument to the shell command.","\\tSee |option-backslash| about including spaces and backslashes.","\\tSee |shell-unquoting| which talks about separating this option into ","\\tmultiple arguments.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shellpipe":["string\\t(default \\">\\", \\"| tee\\", \\"|& tee\\" or \\"2>&1| tee\\")","\\t\\t\\tglobal","\\tString to be used to put the output of the \\":make\\" command in the","\\terror file. See also |:make_makeprg|. See |option-backslash| about","\\tincluding spaces and backslashes.","\\tThe name of the temporary file can be represented by \\"%s\\" if necessary","\\t(the file name is appended automatically if no %s appears in the value","\\tof this option).","\\tFor Windows the default is \\">\\". The output is directly saved in a file","\\tand not echoed to the screen.","\\tFor Unix the default it \\"| tee\\". The stdout of the compiler is saved","\\tin a file and echoed to the screen. If the \'shell\' option is \\"csh\\" or","\\t\\"tcsh\\" after initializations, the default becomes \\"|& tee\\". If the","\\t\'shell\' option is \\"sh\\", \\"ksh\\", \\"mksh\\", \\"pdksh\\", \\"zsh\\" or \\"bash\\" the","\\tdefault becomes \\"2>&1| tee\\". This means that stderr is also included.","\\tBefore using the \'shell\' option a path is removed, thus \\"/bin/sh\\" uses","\\t\\"sh\\".","\\tThe initialization of this option is done after reading the vimrc","\\tand the other initializations, so that when the \'shell\' option is set","\\tthere, the \'shellpipe\' option changes automatically, unless it was","\\texplicitly set before.","\\tWhen \'shellpipe\' is set to an empty string, no redirection of the","\\t\\":make\\" output will be done. This is useful if you use a \'makeprg\'","\\tthat writes to \'makeef\' by itself. If you want no piping, but do","\\twant to include the \'makeef\', set \'shellpipe\' to a single space.","\\tDon\'t forget to precede the space with a backslash: \\":set sp=\\\\ \\".","\\tIn the future pipes may be used for filtering and this option will","\\tbecome obsolete (at least for Unix).","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shellquote":["string\\t(default: \\"\\"; Windows, when \'shell\'","\\t\\t\\t\\t\\tcontains \\"sh\\" somewhere: \\"\\\\\\"\\")","\\t\\t\\tglobal","\\tQuoting character(s), put around the command passed to the shell, for","\\tthe \\"!\\" and \\":!\\" commands. The redirection is kept outside of the","\\tquoting. See \'shellxquote\' to include the redirection. It\'s","\\tprobably not useful to set both options.","\\tThis is an empty string by default. Only known to be useful for","\\tthird-party shells on Windows systems, such as the MKS Korn Shell","\\tor bash, where it should be \\"\\\\\\"\\". The default is adjusted according","\\tthe value of \'shell\', to reduce the need to set this option by the","\\tuser.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shellredir":["string\\t(default \\">\\", \\">&\\" or \\">%s 2>&1\\")","\\t\\t\\tglobal","\\tString to be used to put the output of a filter command in a temporary","\\tfile. See also |:!|. See |option-backslash| about including spaces","\\tand backslashes.","\\tThe name of the temporary file can be represented by \\"%s\\" if necessary","\\t(the file name is appended automatically if no %s appears in the value","\\tof this option).","\\tThe default is \\">\\". For Unix, if the \'shell\' option is \\"csh\\", \\"tcsh\\"","\\tor \\"zsh\\" during initializations, the default becomes \\">&\\". If the","\\t\'shell\' option is \\"sh\\", \\"ksh\\" or \\"bash\\" the default becomes","\\t\\">%s 2>&1\\". This means that stderr is also included.","\\tFor Win32, the Unix checks are done and additionally \\"cmd\\" is checked","\\tfor, which makes the default \\">%s 2>&1\\". Also, the same names with","\\t\\".exe\\" appended are checked for.","\\tThe initialization of this option is done after reading the vimrc","\\tand the other initializations, so that when the \'shell\' option is set","\\tthere, the \'shellredir\' option changes automatically unless it was","\\texplicitly set before.","\\tIn the future pipes may be used for filtering and this option will","\\tbecome obsolete (at least for Unix).","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shellslash":["boolean\\t(default off)","\\t\\t\\tglobal","\\t\\t\\t{only for Windows}","\\tWhen set, a forward slash is used when expanding file names. This is","\\tuseful when a Unix-like shell is used instead of command.com or","\\tcmd.exe. Backward slashes can still be typed, but they are changed to","\\tforward slashes by Vim.","\\tNote that setting or resetting this option has no effect for some","\\texisting file names, thus this option needs to be set before opening","\\tany file for best results. This might change in the future.","\\t\'shellslash\' only works when a backslash can be used as a path","\\tseparator. To test if this is so use: >","\\t\\tif exists(\'+shellslash\')","<","\\t\\t\\t*\'shelltemp\'* *\'stmp\'* *\'noshelltemp\'* *\'nostmp\'*"],"shelltemp":["boolean\\t(Vim default on, Vi default off)","\\t\\t\\tglobal","\\tWhen on, use temp files for shell commands. When off use a pipe.","\\tWhen using a pipe is not possible temp files are used anyway.","\\tThe advantage of using a pipe is that nobody can read the temp file","\\tand the \'shell\' command does not need to support redirection.","\\tThe advantage of using a temp file is that the file type and encoding","\\tcan be detected.","\\tThe |FilterReadPre|, |FilterReadPost| and |FilterWritePre|,","\\t|FilterWritePost| autocommands event are not triggered when","\\t\'shelltemp\' is off.","\\t|system()| does not respect this option, it always uses pipes."],"shellxescape":["string\\t(default: \\"\\")","\\t\\t\\tglobal","\\tWhen \'shellxquote\' is set to \\"(\\" then the characters listed in this","\\toption will be escaped with a \'^\' character. This makes it possible","\\tto execute most external commands with cmd.exe."],"shellxquote":["string\\t(default: \\"\\", Windows: \\"\\\\\\"\\")","\\t\\t\\tglobal","\\tQuoting character(s), put around the command passed to the shell, for","\\tthe \\"!\\" and \\":!\\" commands. Includes the redirection. See","\\t\'shellquote\' to exclude the redirection. It\'s probably not useful","\\tto set both options.","\\tWhen the value is \'(\' then \')\' is appended. When the value is \'\\"(\'","\\tthen \')\\"\' is appended.","\\tWhen the value is \'(\' then also see \'shellxescape\'.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"shiftround":["boolean\\t(default off)","\\t\\t\\tglobal","\\tRound indent to multiple of \'shiftwidth\'. Applies to > and <","\\tcommands. CTRL-T and CTRL-D in Insert mode always round the indent to","\\ta multiple of \'shiftwidth\' (this is Vi compatible)."],"shiftwidth":["number\\t(default 8)","\\t\\t\\tlocal to buffer","\\tNumber of spaces to use for each step of (auto)indent. Used for","\\t|\'cindent\'|, |>>|, |<<|, etc.","\\tWhen zero the \'ts\' value will be used. Use the |shiftwidth()|","\\tfunction to get the effective shiftwidth value."],"shortmess":["string\\t(Vim default \\"filnxtToOF\\", Vi default: \\"S\\")","\\t\\t\\tglobal","\\tThis option helps to avoid all the |hit-enter| prompts caused by file","\\tmessages, for example with CTRL-G, and to avoid some other messages.","\\tIt is a list of flags:","\\t flag\\tmeaning when present\\t~","\\t f\\tuse \\"(3 of 5)\\" instead of \\"(file 3 of 5)\\"","\\t i\\tuse \\"[noeol]\\" instead of \\"[Incomplete last line]\\"","\\t l\\tuse \\"999L, 888C\\" instead of \\"999 lines, 888 characters\\"","\\t m\\tuse \\"[+]\\" instead of \\"[Modified]\\"","\\t n\\tuse \\"[New]\\" instead of \\"[New File]\\"","\\t r\\tuse \\"[RO]\\" instead of \\"[readonly]\\"","\\t w\\tuse \\"[w]\\" instead of \\"written\\" for file write message","\\t\\tand \\"[a]\\" instead of \\"appended\\" for \':w >> file\' command","\\t x\\tuse \\"[dos]\\" instead of \\"[dos format]\\", \\"[unix]\\" instead of","\\t\\t\\"[unix format]\\" and \\"[mac]\\" instead of \\"[mac format]\\".","\\t a\\tall of the above abbreviations"],"showbreak":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tString to put at the start of lines that have been wrapped. Useful","\\tvalues are \\"> \\" or \\"+++ \\": >","\\t\\t:set showbreak=>\\\\ ","<\\tNote the backslash to escape the trailing space. It\'s easier like","\\tthis: >","\\t\\t:let &showbreak = \'+++ \'","<\\tOnly printable single-cell characters are allowed, excluding <Tab> and","\\tcomma (in a future version the comma might be used to separate the","\\tpart that is shown at the end and at the start of a line).","\\tThe |hl-NonText| highlight group determines the highlighting.","\\tNote that tabs after the showbreak will be displayed differently.","\\tIf you want the \'showbreak\' to appear in between line numbers, add the","\\t\\"n\\" flag to \'cpoptions\'."],"showcmd":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tShow (partial) command in the last line of the screen. Set this","\\toption off if your terminal is slow.","\\tIn Visual mode the size of the selected area is shown:","\\t- When selecting characters within a line, the number of characters.","\\t If the number of bytes is different it is also displayed: \\"2-6\\"","\\t means two characters and six bytes.","\\t- When selecting more than one line, the number of lines.","\\t- When selecting a block, the size in screen characters:","\\t {lines}x{columns}."],"showfulltag":["boolean (default off)","\\t\\t\\tglobal","\\tWhen completing a word in insert mode (see |ins-completion|) from the","\\ttags file, show both the tag name and a tidied-up form of the search","\\tpattern (if there is one) as possible matches. Thus, if you have","\\tmatched a C function, you can see a template for what arguments are","\\trequired (coding style permitting).","\\tNote that this doesn\'t work well together with having \\"longest\\" in","\\t\'completeopt\', because the completion from the search pattern may not","\\tmatch the typed text."],"showmatch":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen a bracket is inserted, briefly jump to the matching one. The","\\tjump is only done if the match can be seen on the screen. The time to","\\tshow the match can be set with \'matchtime\'.","\\tA Beep is given if there is no match (no matter if the match can be","\\tseen or not).","\\tThis option is reset when \'paste\' is set and restored when \'paste\' is","\\treset.","\\tWhen the \'m\' flag is not included in \'cpoptions\', typing a character","\\twill immediately move the cursor back to where it belongs.","\\tSee the \\"sm\\" field in \'guicursor\' for setting the cursor shape and","\\tblinking when showing the match.","\\tThe \'matchpairs\' option can be used to specify the characters to show","\\tmatches for. \'rightleft\' and \'revins\' are used to look for opposite","\\tmatches.","\\tAlso see the matchparen plugin for highlighting the match when moving","\\taround |pi_paren.txt|.","\\tNote: Use of the short form is rated PG."],"showmode":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tIf in Insert, Replace or Visual mode put a message on the last line.","\\tThe |hl-ModeMsg| highlight group determines the highlighting."],"showtabline":["number\\t(default 1)","\\t\\t\\tglobal","\\tThe value of this option specifies when the line with tab page labels","\\twill be displayed:","\\t\\t0: never","\\t\\t1: only if there are at least two tab pages","\\t\\t2: always","\\tThis is both for the GUI and non-GUI implementation of the tab pages","\\tline.","\\tSee |tab-page| for more information about tab pages."],"sidescroll":["number\\t(default 1)","\\t\\t\\tglobal","\\tThe minimal number of columns to scroll horizontally. Used only when","\\tthe \'wrap\' option is off and the cursor is moved off of the screen.","\\tWhen it is zero the cursor will be put in the middle of the screen.","\\tWhen using a slow terminal set it to a large number or 0. Not used","\\tfor \\"zh\\" and \\"zl\\" commands."],"sidescrolloff":["number (default 0)","\\t\\t\\tglobal or local to window |global-local|","\\tThe minimal number of screen columns to keep to the left and to the","\\tright of the cursor if \'nowrap\' is set. Setting this option to a","\\tvalue greater than 0 while having |\'sidescroll\'| also at a non-zero","\\tvalue makes some context visible in the line you are scrolling in","\\thorizontally (except at beginning of the line). Setting this option","\\tto a large value (like 999) has the effect of keeping the cursor","\\thorizontally centered in the window, as long as one does not come too","\\tclose to the beginning of the line.","\\tAfter using the local value, go back the global value with one of","\\tthese two: >","\\t\\tsetlocal sidescrolloff<","\\t\\tsetlocal sidescrolloff=-1","<","\\tExample: Try this together with \'sidescroll\' and \'listchars\' as","\\t\\t in the following example to never allow the cursor to move","\\t\\t onto the \\"extends\\" character: >"],"signcolumn":["string\\t(default \\"auto\\")","\\t\\t\\tlocal to window","\\tWhen and how to draw the signcolumn. Valid values are:","\\t \\"auto\\" \\tonly when there is a sign to display","\\t \\"auto:[1-9]\\" resize to accommodate multiple signs up to the","\\t given number (maximum 9), e.g. \\"auto:4\\"","\\t \\"no\\"\\t \\tnever","\\t \\"yes\\" \\talways","\\t \\"yes:[1-9]\\" always, with fixed space for signs up to the given","\\t number (maximum 9), e.g. \\"yes:3\\""],"smartcase":["boolean\\t(default off)","\\t\\t\\tglobal","\\tOverride the \'ignorecase\' option if the search pattern contains upper","\\tcase characters. Only used when the search pattern is typed and","\\t\'ignorecase\' option is on. Used for the commands \\"/\\", \\"?\\", \\"n\\", \\"N\\",","\\t\\":g\\" and \\":s\\". Not used for \\"*\\", \\"#\\", \\"gd\\", tag search, etc. After","\\t\\"*\\" and \\"#\\" you can make \'smartcase\' used by doing a \\"/\\" command,","\\trecalling the search pattern from history and hitting <Enter>."],"smartindent":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tDo smart autoindenting when starting a new line. Works for C-like","\\tprograms, but can also be used for other languages. \'cindent\' does","\\tsomething like this, works better in most cases, but is more strict,","\\tsee |C-indenting|. When \'cindent\' is on or \'indentexpr\' is set,","\\tsetting \'si\' has no effect. \'indentexpr\' is a more advanced","\\talternative.","\\tNormally \'autoindent\' should also be on when using \'smartindent\'.","\\tAn indent is automatically inserted:","\\t- After a line ending in \'{\'.","\\t- After a line starting with a keyword from \'cinwords\'.","\\t- Before a line starting with \'}\' (only with the \\"O\\" command).","\\tWhen typing \'}\' as the first character in a new line, that line is","\\tgiven the same indent as the matching \'{\'.","\\tWhen typing \'#\' as the first character in a new line, the indent for","\\tthat line is removed, the \'#\' is put in the first column. The indent","\\tis restored for the next line. If you don\'t want this, use this","\\tmapping: \\":inoremap # X^H#\\", where ^H is entered with CTRL-V CTRL-H.","\\tWhen using the \\">>\\" command, lines starting with \'#\' are not shifted","\\tright.","\\tThis option is reset when \'paste\' is set and restored when \'paste\' is","\\treset."],"smarttab":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on, a <Tab> in front of a line inserts blanks according to","\\t\'shiftwidth\'. \'tabstop\' or \'softtabstop\' is used in other places. A","\\t<BS> will delete a \'shiftwidth\' worth of space at the start of the","\\tline.","\\tWhen off, a <Tab> always inserts blanks according to \'tabstop\' or","\\t\'softtabstop\'. \'shiftwidth\' is only used for shifting text left or","\\tright |shift-left-right|.","\\tWhat gets inserted (a <Tab> or spaces) depends on the \'expandtab\'","\\toption. Also see |ins-expandtab|. When \'expandtab\' is not set, the","\\tnumber of spaces is minimized by using <Tab>s.","\\tThis option is reset when \'paste\' is set and restored when \'paste\' is","\\treset."],"softtabstop":["number\\t(default 0)","\\t\\t\\tlocal to buffer","\\tNumber of spaces that a <Tab> counts for while performing editing","\\toperations, like inserting a <Tab> or using <BS>. It \\"feels\\" like","\\t<Tab>s are being inserted, while in fact a mix of spaces and <Tab>s is","\\tused. This is useful to keep the \'ts\' setting at its standard value","\\tof 8, while being able to edit like it is set to \'sts\'. However,","\\tcommands like \\"x\\" still work on the actual characters.","\\tWhen \'sts\' is zero, this feature is off.","\\tWhen \'sts\' is negative, the value of \'shiftwidth\' is used.","\\t\'softtabstop\' is set to 0 when the \'paste\' option is set and restored","\\twhen \'paste\' is reset.","\\tSee also |ins-expandtab|. When \'expandtab\' is not set, the number of","\\tspaces is minimized by using <Tab>s.","\\tThe \'L\' flag in \'cpoptions\' changes how tabs are used when \'list\' is","\\tset."],"spell":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tWhen on spell checking will be done. See |spell|.","\\tThe languages are specified with \'spelllang\'."],"spellcapcheck":["string\\t(default \\"[.?!]\\\\_[\\\\])\'\\" \\\\t]\\\\+\\")","\\t\\t\\tlocal to buffer","\\tPattern to locate the end of a sentence. The following word will be","\\tchecked to start with a capital letter. If not then it is highlighted","\\twith SpellCap |hl-SpellCap| (unless the word is also badly spelled).","\\tWhen this check is not wanted make this option empty.","\\tOnly used when \'spell\' is set.","\\tBe careful with special characters, see |option-backslash| about","\\tincluding spaces and backslashes.","\\tTo set this option automatically depending on the language, see","\\t|set-spc-auto|."],"spellfile":["string\\t(default empty)","\\t\\t\\tlocal to buffer","\\tName of the word list file where words are added for the |zg| and |zw|","\\tcommands. It must end in \\".{encoding}.add\\". You need to include the","\\tpath, otherwise the file is placed in the current directory.","\\t\\t\\t\\t\\t\\t\\t\\t*E765*","\\tIt may also be a comma separated list of names. A count before the","\\t|zg| and |zw| commands can be used to access each. This allows using","\\ta personal word list file and a project word list file.","\\tWhen a word is added while this option is empty Vim will set it for","\\tyou: Using the first directory in \'runtimepath\' that is writable. If","\\tthere is no \\"spell\\" directory yet it will be created. For the file","\\tname the first language name that appears in \'spelllang\' is used,","\\tignoring the region.","\\tThe resulting \\".spl\\" file will be used for spell checking, it does not","\\thave to appear in \'spelllang\'.","\\tNormally one file is used for all regions, but you can add the region","\\tname if you want to. However, it will then only be used when","\\t\'spellfile\' is set to it, for entries in \'spelllang\' only files","\\twithout region name will be found.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"spelllang":["string\\t(default \\"en\\")","\\t\\t\\tlocal to buffer","\\tA comma separated list of word list names. When the \'spell\' option is","\\ton spellchecking will be done for these languages. Example: >","\\t\\tset spelllang=en_us,nl,medical","<\\tThis means US English, Dutch and medical words are recognized. Words","\\tthat are not recognized will be highlighted.","\\tThe word list name must consist of alphanumeric characters, a dash or","\\tan underscore. It should not include a comma or dot. Using a dash is","\\trecommended to separate the two letter language name from a","\\tspecification. Thus \\"en-rare\\" is used for rare English words.","\\tA region name must come last and have the form \\"_xx\\", where \\"xx\\" is","\\tthe two-letter, lower case region name. You can use more than one","\\tregion by listing them: \\"en_us,en_ca\\" supports both US and Canadian","\\tEnglish, but not words specific for Australia, New Zealand or Great","\\tBritain. (Note: currently en_au and en_nz dictionaries are older than","\\ten_ca, en_gb and en_us).","\\tIf the name \\"cjk\\" is included East Asian characters are excluded from","\\tspell checking. This is useful when editing text that also has Asian","\\twords.","\\t\\t\\t\\t\\t\\t\\t*E757*","\\tAs a special case the name of a .spl file can be given as-is. The","\\tfirst \\"_xx\\" in the name is removed and used as the region name","\\t(_xx is an underscore, two letters and followed by a non-letter).","\\tThis is mainly for testing purposes. You must make sure the correct","\\tencoding is used, Vim doesn\'t check it.","\\tHow the related spell files are found is explained here: |spell-load|."],"spellsuggest":["string\\t(default \\"best\\")","\\t\\t\\tglobal","\\tMethods used for spelling suggestions. Both for the |z=| command and","\\tthe |spellsuggest()| function. This is a comma-separated list of","\\titems:"],"splitbelow":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, splitting a window will put the new window below the current","\\tone. |:split|"],"splitright":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, splitting a window will put the new window right of the","\\tcurrent one. |:vsplit|"],"startofline":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen \\"on\\" the commands listed below move the cursor to the first","\\tnon-blank of the line. When off the cursor is kept in the same column","\\t(if possible). This applies to the commands: CTRL-D, CTRL-U, CTRL-B,","\\tCTRL-F, \\"G\\", \\"H\\", \\"M\\", \\"L\\", gg, and to the commands \\"d\\", \\"<<\\" and \\">>\\"","\\twith a linewise operator, with \\"%\\" with a count and to buffer changing","\\tcommands (CTRL-^, :bnext, :bNext, etc.). Also for an Ex command that","\\tonly has a line number, e.g., \\":25\\" or \\":+\\".","\\tIn case of buffer changing commands the cursor is placed at the column","\\twhere it was the last time the buffer was edited."],"statusline":["string\\t(default empty)","\\t\\t\\tglobal or local to window |global-local|","\\tWhen nonempty, this option determines the content of the status line.","\\tAlso see |status-line|."],"suffixes":["string\\t(default \\".bak,~,.o,.h,.info,.swp,.obj\\")","\\t\\t\\tglobal","\\tFiles with these suffixes get a lower priority when multiple files","\\tmatch a wildcard. See |suffixes|. Commas can be used to separate the","\\tsuffixes. Spaces after the comma are ignored. A dot is also seen as","\\tthe start of a suffix. To avoid a dot or comma being recognized as a","\\tseparator, precede it with a backslash (see |option-backslash| about","\\tincluding spaces and backslashes).","\\tSee \'wildignore\' for completely ignoring files.","\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\tsuffixes from the list. This avoids problems when a future version","\\tuses another default."],"suffixesadd":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\tComma separated list of suffixes, which are used when searching for a","\\tfile for the \\"gf\\", \\"[I\\", etc. commands. Example: >","\\t\\t:set suffixesadd=.java","<","\\t\\t\\t\\t*\'swapfile\'* *\'swf\'* *\'noswapfile\'* *\'noswf\'*"],"swapfile":["boolean (default on)","\\t\\t\\tlocal to buffer","\\tUse a swapfile for the buffer. This option can be reset when a","\\tswapfile is not wanted for a specific buffer. For example, with","\\tconfidential information that even root must not be able to access.","\\tCareful: All text will be in memory:","\\t\\t- Don\'t use this for big files.","\\t\\t- Recovery will be impossible!","\\tA swapfile will only be present when |\'updatecount\'| is non-zero and","\\t\'swapfile\' is set.","\\tWhen \'swapfile\' is reset, the swap file for the current buffer is","\\timmediately deleted. When \'swapfile\' is set, and \'updatecount\' is","\\tnon-zero, a swap file is immediately created.","\\tAlso see |swap-file|.","\\tIf you want to open a new buffer without creating a swap file for it,","\\tuse the |:noswapfile| modifier.","\\tSee \'directory\' for where the swap file is created."],"switchbuf":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tThis option controls the behavior when switching between buffers.","\\tPossible values (comma separated list):","\\t useopen\\tIf included, jump to the first open window that","\\t\\t\\tcontains the specified buffer (if there is one).","\\t\\t\\tOtherwise: Do not examine other windows.","\\t\\t\\tThis setting is checked with |quickfix| commands, when","\\t\\t\\tjumping to errors (\\":cc\\", \\":cn\\", \\"cp\\", etc.). It is","\\t\\t\\talso used in all buffer related split commands, for","\\t\\t\\texample \\":sbuffer\\", \\":sbnext\\", or \\":sbrewind\\".","\\t usetab\\tLike \\"useopen\\", but also consider windows in other tab","\\t\\t\\tpages.","\\t split\\tIf included, split the current window before loading","\\t\\t\\ta buffer for a |quickfix| command that display errors.","\\t\\t\\tOtherwise: do not split, use current window (when used","\\t\\t\\tin the quickfix window: the previously used window or","\\t\\t\\tsplit if there is no other window).","\\t vsplit\\tJust like \\"split\\" but split vertically.","\\t newtab\\tLike \\"split\\", but open a new tab page. Overrules","\\t\\t\\t\\"split\\" when both are present.","\\t uselast\\tIf included, jump to the previously used window when","\\t\\t\\tjumping to errors with |quickfix| commands."],"synmaxcol":["number\\t(default 3000)","\\t\\t\\tlocal to buffer","\\tMaximum column in which to search for syntax items. In long lines the","\\ttext after this column is not highlighted and following lines may not","\\tbe highlighted correctly, because the syntax state is cleared.","\\tThis helps to avoid very slow redrawing for an XML file that is one","\\tlong line.","\\tSet to zero to remove the limit."],"syntax":["string\\t(default empty)","\\t\\t\\tlocal to buffer","\\tWhen this option is set, the syntax with this name is loaded, unless","\\tsyntax highlighting has been switched off with \\":syntax off\\".","\\tOtherwise this option does not always reflect the current syntax (the","\\tb:current_syntax variable does).","\\tThis option is most useful in a modeline, for a file which syntax is","\\tnot automatically recognized. Example, in an IDL file:","\\t\\t/* vim: set syntax=idl : */ ~","\\tWhen a dot appears in the value then this separates two filetype","\\tnames. Example:","\\t\\t/* vim: set syntax=c.doxygen : */ ~","\\tThis will use the \\"c\\" syntax first, then the \\"doxygen\\" syntax.","\\tNote that the second one must be prepared to be loaded as an addition,","\\totherwise it will be skipped. More than one dot may appear.","\\tTo switch off syntax highlighting for the current file, use: >","\\t\\t:set syntax=OFF","<\\tTo switch syntax highlighting on according to the current value of the","\\t\'filetype\' option: >","\\t\\t:set syntax=ON","<\\tWhat actually happens when setting the \'syntax\' option is that the","\\tSyntax autocommand event is triggered with the value as argument.","\\tThis option is not copied to another buffer, independent of the \'s\' or","\\t\'S\' flag in \'cpoptions\'.","\\tOnly normal file name characters can be used, \\"/\\\\*?[|<>\\" are illegal."],"tabline":["string\\t(default empty)","\\t\\t\\tglobal","\\tWhen nonempty, this option determines the content of the tab pages","\\tline at the top of the Vim window. When empty Vim will use a default","\\ttab pages line. See |setting-tabline| for more info."],"tabpagemax":["number\\t(default 50)","\\t\\t\\tglobal","\\tMaximum number of tab pages to be opened by the |-p| command line","\\targument or the \\":tab all\\" command. |tabpage|"],"tabstop":["number\\t(default 8)","\\t\\t\\tlocal to buffer","\\tNumber of spaces that a <Tab> in the file counts for. Also see","\\t|:retab| command, and \'softtabstop\' option."],"tagbsearch":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen searching for a tag (e.g., for the |:ta| command), Vim can either","\\tuse a binary search or a linear search in a tags file. Binary","\\tsearching makes searching for a tag a LOT faster, but a linear search","\\twill find more tags if the tags file wasn\'t properly sorted.","\\tVim normally assumes that your tags files are sorted, or indicate that","\\tthey are not sorted. Only when this is not the case does the","\\t\'tagbsearch\' option need to be switched off."],"tagcase":["string\\t(default \\"followic\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tThis option specifies how case is handled when searching the tags","\\tfile:","\\t followic\\tFollow the \'ignorecase\' option","\\t followscs Follow the \'smartcase\' and \'ignorecase\' options","\\t ignore\\tIgnore case","\\t match\\tMatch case","\\t smart\\tIgnore case unless an upper case letter is used"],"tagfunc":["string\\t(default: empty)","\\t\\t\\tlocal to buffer","\\tThis option specifies a function to be used to perform tag searches.","\\tThe function gets the tag pattern and should return a List of matching","\\ttags. See |tag-function| for an explanation of how to write the","\\tfunction and an example."],"taglength":["number\\t(default 0)","\\t\\t\\tglobal","\\tIf non-zero, tags are significant up to this number of characters."],"tagrelative":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tIf on and using a tags file in another directory, file names in that","\\ttags file are relative to the directory where the tags file is."],"tags":["string\\t(default \\"./tags;,tags\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tFilenames for the tag command, separated by spaces or commas. To","\\tinclude a space or comma in a file name, precede it with a backslash","\\t(see |option-backslash| about including spaces and backslashes).","\\tWhen a file name starts with \\"./\\", the \'.\' is replaced with the path","\\tof the current file. But only when the \'d\' flag is not included in","\\t\'cpoptions\'. Environment variables are expanded |:set_env|. Also see","\\t|tags-option|.","\\t\\"*\\", \\"**\\" and other wildcards can be used to search for tags files in","\\ta directory tree. See |file-searching|. E.g., \\"/lib/**/tags\\" will","\\tfind all files named \\"tags\\" below \\"/lib\\". The filename itself cannot","\\tcontain wildcards, it is used as-is. E.g., \\"/lib/**/tags?\\" will find","\\tfiles called \\"tags?\\".","\\tThe |tagfiles()| function can be used to get a list of the file names","\\tactually used.","\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\tfile names from the list. This avoids problems when a future version","\\tuses another default."],"tagstack":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on, the |tagstack| is used normally. When off, a \\":tag\\" or","\\t\\":tselect\\" command with an argument will not push the tag onto the","\\ttagstack. A following \\":tag\\" without an argument, a \\":pop\\" command or","\\tany other command that uses the tagstack will use the unmodified","\\ttagstack, but does change the pointer to the active entry.","\\tResetting this option is useful when using a \\":tag\\" command in a","\\tmapping which should not change the tagstack."],"termbidi":["boolean (default off)","\\t\\t\\tglobal","\\tThe terminal is in charge of Bi-directionality of text (as specified","\\tby Unicode). The terminal is also expected to do the required shaping","\\tthat some languages (such as Arabic) require.","\\tSetting this option implies that \'rightleft\' will not be set when","\\t\'arabic\' is set and the value of \'arabicshape\' will be ignored.","\\tNote that setting \'termbidi\' has the immediate effect that","\\t\'arabicshape\' is ignored, but \'rightleft\' isn\'t changed automatically.","\\tFor further details see |arabic.txt|."],"termguicolors":["boolean (default off)","\\t\\t\\tglobal","\\tEnables 24-bit RGB color in the |TUI|. Uses \\"gui\\" |:highlight|","\\tattributes instead of \\"cterm\\" attributes. |highlight-guifg|","\\tRequires an ISO-8613-3 compatible terminal."],"terse":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen set: Add \'s\' flag to \'shortmess\' option (this makes the message","\\tfor a search that hits the start or end of the file not being","\\tdisplayed). When reset: Remove \'s\' flag from \'shortmess\' option."],"textwidth":["number\\t(default 0)","\\t\\t\\tlocal to buffer","\\tMaximum width of text that is being inserted. A longer line will be","\\tbroken after white space to get this width. A zero value disables","\\tthis.","\\t\'textwidth\' is set to 0 when the \'paste\' option is set and restored","\\twhen \'paste\' is reset.","\\tWhen \'textwidth\' is zero, \'wrapmargin\' may be used. See also","\\t\'formatoptions\' and |ins-textwidth|.","\\tWhen \'formatexpr\' is set it will be used to break the line."],"thesaurus":["string\\t(default \\"\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tList of file names, separated by commas, that are used to lookup words","\\tfor thesaurus completion commands |i_CTRL-X_CTRL-T|."],"tildeop":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on: The tilde command \\"~\\" behaves like an operator."],"timeout":["boolean (default on)","\\t\\t\\tglobal","\\tThis option and \'timeoutlen\' determine the behavior when part of a","\\tmapped key sequence has been received. For example, if <c-f> is","\\tpressed and \'timeout\' is set, Nvim will wait \'timeoutlen\' milliseconds","\\tfor any key that can follow <c-f> in a mapping."],"ttimeout":["boolean (default on)","\\t\\t\\tglobal","\\tThis option and \'ttimeoutlen\' determine the behavior when part of a","\\tkey code sequence has been received by the |TUI|."],"timeoutlen":["number\\t(default 1000)","\\t\\t\\tglobal","\\tTime in milliseconds to wait for a mapped sequence to complete."],"ttimeoutlen":["number\\t(default 50)","\\t\\t\\tglobal","\\tTime in milliseconds to wait for a key code sequence to complete. Also","\\tused for CTRL-\\\\ CTRL-N and CTRL-\\\\ CTRL-G when part of a command has","\\tbeen typed."],"title":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen on, the title of the window will be set to the value of","\\t\'titlestring\' (if it is not empty), or to:","\\t\\tfilename [+=-] (path) - NVIM","\\tWhere:","\\t\\tfilename\\tthe name of the file being edited","\\t\\t-\\t\\tindicates the file cannot be modified, \'ma\' off","\\t\\t+\\t\\tindicates the file was modified","\\t\\t=\\t\\tindicates the file is read-only","\\t\\t=+\\t\\tindicates the file is read-only and modified","\\t\\t(path)\\t\\tis the path of the file being edited","\\t\\t- NVIM\\t\\tthe server name |v:servername| or \\"NVIM\\""],"titlelen":["number\\t(default 85)","\\t\\t\\tglobal","\\tGives the percentage of \'columns\' to use for the length of the window","\\ttitle. When the title is longer, only the end of the path name is","\\tshown. A \'<\' character before the path name is used to indicate this.","\\tUsing a percentage makes this adapt to the width of the window. But","\\tit won\'t work perfectly, because the actual number of characters","\\tavailable also depends on the font used and other things in the title","\\tbar. When \'titlelen\' is zero the full path is used. Otherwise,","\\tvalues from 1 to 30000 percent can be used.","\\t\'titlelen\' is also used for the \'titlestring\' option."],"titleold":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tIf not empty, this option will be used to set the window title when","\\texiting. Only if \'title\' is enabled.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons.","\\t\\t\\t\\t\\t\\t*\'titlestring\'*"],"titlestring":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tWhen this option is not empty, it will be used for the title of the","\\twindow. This happens only when the \'title\' option is on."],"ttyfast":["Removed. |vim-differences|"],"undodir":["string\\t(default \\"$XDG_DATA_HOME/nvim/undo\\")","\\t\\t\\tglobal","\\tList of directory names for undo files, separated with commas.","\\tSee |\'backupdir\'| for details of the format.","\\t\\".\\" means using the directory of the file. The undo file name for","\\t\\"file.txt\\" is \\".file.txt.un~\\".","\\tFor other directories the file name is the full path of the edited","\\tfile, with path separators replaced with \\"%\\".","\\tWhen writing: The first directory that exists is used. \\".\\" always","\\tworks, no directories after \\".\\" will be used for writing. If none of ","\\tthe directories exist Neovim will attempt to create last directory in ","\\tthe list.","\\tWhen reading all entries are tried to find an undo file. The first","\\tundo file that exists is used. When it cannot be read an error is","\\tgiven, no further entry is used.","\\tSee |undo-persistence|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"undofile":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tWhen on, Vim automatically saves undo history to an undo file when","\\twriting a buffer to a file, and restores undo history from the same","\\tfile on buffer read.","\\tThe directory where the undo file is stored is specified by \'undodir\'.","\\tFor more information about this feature see |undo-persistence|.","\\tThe undo file is not read when \'undoreload\' causes the buffer from","\\tbefore a reload to be saved for undo.","\\tWhen \'undofile\' is turned off the undo file is NOT deleted."],"undolevels":["number\\t(default 1000)","\\t\\t\\tglobal or local to buffer |global-local|","\\tMaximum number of changes that can be undone. Since undo information","\\tis kept in memory, higher numbers will cause more memory to be used","\\t(nevertheless, a single change can use an unlimited amount of memory).","\\tSet to 0 for Vi compatibility: One level of undo and \\"u\\" undoes","\\titself: >","\\t\\tset ul=0","<\\tBut you can also get Vi compatibility by including the \'u\' flag in","\\t\'cpoptions\', and still be able to use CTRL-R to repeat undo.","\\tAlso see |undo-two-ways|.","\\tSet to -1 for no undo at all. You might want to do this only for the","\\tcurrent buffer: >","\\t\\tsetlocal ul=-1","<\\tThis helps when you run out of memory for a single change."],"undoreload":["number\\t(default 10000)","\\t\\t\\tglobal","\\tSave the whole buffer for undo when reloading it. This applies to the","\\t\\":e!\\" command and reloading for when the buffer changed outside of","\\tVim. |FileChangedShell|","\\tThe save only happens when this option is negative or when the number","\\tof lines is smaller than the value of this option.","\\tSet this option to zero to disable undo for a reload."],"updatecount":["number\\t(default: 200)","\\t\\t\\tglobal","\\tAfter typing this many characters the swap file will be written to","\\tdisk. When zero, no swap file will be created at all (see chapter on","\\trecovery |crash-recovery|). \'updatecount\' is set to zero by starting","\\tVim with the \\"-n\\" option, see |startup|. When editing in readonly","\\tmode this option will be initialized to 10000.","\\tThe swapfile can be disabled per buffer with |\'swapfile\'|.","\\tWhen \'updatecount\' is set from zero to non-zero, swap files are","\\tcreated for all buffers that have \'swapfile\' set. When \'updatecount\'","\\tis set to zero, existing swap files are not deleted.","\\tThis option has no meaning in buffers where |\'buftype\'| is \\"nofile\\"","\\tor \\"nowrite\\"."],"updatetime":["number\\t(default 4000)","\\t\\t\\tglobal","\\tIf this many milliseconds nothing is typed the swap file will be","\\twritten to disk (see |crash-recovery|). Also used for the","\\t|CursorHold| autocommand event."],"verbose":["number\\t(default 0)","\\t\\t\\tglobal","\\tWhen bigger than zero, Vim will give messages about what it is doing.","\\tCurrently, these messages are given:","\\t>= 1\\tWhen the shada file is read or written.","\\t>= 2\\tWhen a file is \\":source\\"\'ed.","\\t>= 3\\tUI info, terminal capabilities","\\t>= 5\\tEvery searched tags file and include file.","\\t>= 8\\tFiles for which a group of autocommands is executed.","\\t>= 9\\tEvery executed autocommand.","\\t>= 12\\tEvery executed function.","\\t>= 13\\tWhen an exception is thrown, caught, finished, or discarded.","\\t>= 14\\tAnything pending in a \\":finally\\" clause.","\\t>= 15\\tEvery executed Ex command (truncated at 200 characters)."],"verbosefile":["string\\t(default empty)","\\t\\t\\tglobal","\\tWhen not empty all messages are written in a file with this name.","\\tWhen the file exists messages are appended.","\\tWriting to the file ends when Vim exits or when \'verbosefile\' is made","\\tempty. Writes are buffered, thus may not show up for some time.","\\tSetting \'verbosefile\' to a new value is like making it empty first.","\\tThe difference with |:redir| is that verbose messages are not","\\tdisplayed when \'verbosefile\' is set."],"viewdir":["string\\t(default: \\"$XDG_DATA_HOME/nvim/view\\")","\\t\\t\\tglobal","\\tName of the directory where to store files for |:mkview|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"viewoptions":["string\\t(default: \\"folds,options,cursor,curdir\\")","\\t\\t\\tglobal","\\tChanges the effect of the |:mkview| command. It is a comma separated","\\tlist of words. Each word enables saving and restoring something:","\\t word\\t\\tsave and restore ~","\\t cursor\\tcursor position in file and in window","\\t curdir\\tlocal current directory, if set with |:lcd|","\\t folds\\tmanually created folds, opened/closed folds and local","\\t\\t\\tfold options","\\t options\\toptions and mappings local to a window or buffer (not","\\t\\t\\tglobal values for local options)","\\t localoptions same as \\"options\\"","\\t slash\\tbackslashes in file names replaced with forward","\\t\\t\\tslashes","\\t unix\\t\\twith Unix end-of-line format (single <NL>), even when","\\t\\t\\ton Windows or DOS"],"virtualedit":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tA comma separated list of these words:","\\t block\\tAllow virtual editing in Visual block mode.","\\t insert\\tAllow virtual editing in Insert mode.","\\t all\\t\\tAllow virtual editing in all modes.","\\t onemore\\tAllow the cursor to move just past the end of the line"],"visualbell":["boolean\\t(default off)","\\t\\t\\tglobal","\\tUse visual bell instead of beeping. Also see \'errorbells\'."],"warn":["boolean\\t(default on)","\\t\\t\\tglobal","\\tGive a warning message when a shell command is used while the buffer","\\thas been changed."],"whichwrap":["string\\t(Vim default: \\"b,s\\", Vi default: \\"\\")","\\t\\t\\tglobal","\\tAllow specified keys that move the cursor left/right to move to the","\\tprevious/next line when the cursor is on the first/last character in","\\tthe line. Concatenate characters to allow this for these keys:","\\t\\tchar key\\t mode\\t~","\\t\\t b <BS>\\t Normal and Visual","\\t\\t s <Space>\\t Normal and Visual","\\t\\t h \\"h\\"\\t Normal and Visual (not recommended)","\\t\\t l \\"l\\"\\t Normal and Visual (not recommended)","\\t\\t < <Left>\\t Normal and Visual","\\t\\t > <Right>\\t Normal and Visual","\\t\\t ~ \\"~\\"\\t Normal","\\t\\t [ <Left>\\t Insert and Replace","\\t\\t ] <Right>\\t Insert and Replace","\\tFor example: >","\\t\\t:set ww=<,>,[,]","<\\tallows wrap only when cursor keys are used.","\\tWhen the movement keys are used in combination with a delete or change","\\toperator, the <EOL> also counts for a character. This makes \\"3h\\"","\\tdifferent from \\"3dh\\" when the cursor crosses the end of a line. This","\\tis also true for \\"x\\" and \\"X\\", because they do the same as \\"dl\\" and","\\t\\"dh\\". If you use this, you may also want to use the mapping","\\t\\":map <BS> X\\" to make backspace delete the character in front of the","\\tcursor.","\\tWhen \'l\' is included and it is used after an operator at the end of a","\\tline then it will not move to the next line. This makes \\"dl\\", \\"cl\\",","\\t\\"yl\\" etc. work normally."],"wildchar":["number\\t(Vim default: <Tab>, Vi default: CTRL-E)","\\t\\t\\tglobal","\\tCharacter you have to type to start wildcard expansion in the","\\tcommand-line, as specified with \'wildmode\'.","\\tMore info here: |cmdline-completion|.","\\tThe character is not recognized when used inside a macro. See","\\t\'wildcharm\' for that.","\\tAlthough \'wc\' is a number option, you can set it to a special key: >","\\t\\t:set wc=<Esc>","<"],"wildcharm":["number\\t(default: none (0))","\\t\\t\\tglobal","\\t\'wildcharm\' works exactly like \'wildchar\', except that it is","\\trecognized when used inside a macro. You can find \\"spare\\" command-line","\\tkeys suitable for this option by looking at |ex-edit-index|. Normally","\\tyou\'ll never actually type \'wildcharm\', just use it in mappings that","\\tautomatically invoke completion mode, e.g.: >","\\t\\t:set wcm=<C-Z>","\\t\\t:cnoremap ss so $vim/sessions/*.vim<C-Z>","<\\tThen after typing :ss you can use CTRL-P & CTRL-N."],"wildignore":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\tA list of file patterns. A file that matches with one of these","\\tpatterns is ignored when expanding |wildcards|, completing file or","\\tdirectory names, and influences the result of |expand()|, |glob()| and","\\t|globpath()| unless a flag is passed to disable this.","\\tThe pattern is used like with |:autocmd|, see |autocmd-pattern|.","\\tAlso see \'suffixes\'.","\\tExample: >","\\t\\t:set wildignore=*.o,*.obj","<\\tThe use of |:set+=| and |:set-=| is preferred when adding or removing","\\ta pattern from the list. This avoids problems when a future version","\\tuses another default."],"wildignorecase":["boolean\\t(default off)","\\t\\t\\tglobal","\\tWhen set case is ignored when completing file names and directories.","\\tHas no effect when \'fileignorecase\' is set.","\\tDoes not apply when the shell is used to expand wildcards, which","\\thappens when there are special characters."],"wildmenu":["boolean\\t(default on)","\\t\\t\\tglobal","\\tEnables \\"enhanced mode\\" of command-line completion. When user hits","\\t<Tab> (or \'wildchar\') to invoke completion, the possible matches are","\\tshown in a menu just above the command-line (see \'wildoptions\'), with","\\tthe first match highlighted (overwriting the statusline). Keys that","\\tshow the previous/next match (<Tab>/CTRL-P/CTRL-N) highlight the","\\tmatch.","\\t\'wildmode\' must specify \\"full\\": \\"longest\\" and \\"list\\" do not start","\\t\'wildmenu\' mode. You can check the current mode with |wildmenumode()|.","\\tThe menu is canceled when a key is hit that is not used for selecting","\\ta completion."],"wildmode":["string\\t(default: \\"full\\")","\\t\\t\\tglobal","\\tCompletion mode that is used for the character specified with","\\t\'wildchar\'. It is a comma separated list of up to four parts. Each","\\tpart specifies what to do for each consecutive use of \'wildchar\'. The","\\tfirst part specifies the behavior for the first use of \'wildchar\',","\\tThe second part for the second use, etc.","\\tThese are the possible values for each part:","\\t\\"\\"\\t\\tComplete only the first match.","\\t\\"full\\"\\t\\tComplete the next full match. After the last match,","\\t\\t\\tthe original string is used and then the first match","\\t\\t\\tagain.","\\t\\"longest\\"\\tComplete till longest common string. If this doesn\'t","\\t\\t\\tresult in a longer string, use the next part.","\\t\\"longest:full\\"\\tLike \\"longest\\", but also start \'wildmenu\' if it is","\\t\\t\\tenabled.","\\t\\"list\\"\\t\\tWhen more than one match, list all matches.","\\t\\"list:full\\"\\tWhen more than one match, list all matches and","\\t\\t\\tcomplete first match.","\\t\\"list:longest\\"\\tWhen more than one match, list all matches and","\\t\\t\\tcomplete till longest common string.","\\tWhen there is only a single match, it is fully completed in all cases."],"wildoptions":["string\\t(default \\"pum,tagfile\\")","\\t\\t\\tglobal","\\tList of words that change how |cmdline-completion| is done.","\\t pum\\t\\tDisplay the completion matches using the popupmenu","\\t\\t\\tin the same style as the |ins-completion-menu|.","\\t tagfile\\tWhen using CTRL-D to list matching tags, the kind of","\\t\\t\\ttag and the file of the tag is listed.\\tOnly one match","\\t\\t\\tis displayed per line. Often used tag kinds are:","\\t\\t\\t\\td\\t#define","\\t\\t\\t\\tf\\tfunction"],"winaltkeys":["string\\t(default \\"menu\\")","\\t\\t\\tglobal","\\t\\t\\t{only used in Win32}","\\tSome GUI versions allow the access to menu entries by using the ALT","\\tkey in combination with a character that appears underlined in the","\\tmenu. This conflicts with the use of the ALT key for mappings and","\\tentering special characters. This option tells what to do:","\\t no\\tDon\'t use ALT keys for menus. ALT key combinations can be","\\t\\tmapped, but there is no automatic handling.","\\t yes\\tALT key handling is done by the windowing system. ALT key","\\t\\tcombinations cannot be mapped.","\\t menu\\tUsing ALT in combination with a character that is a menu","\\t\\tshortcut key, will be handled by the windowing system. Other","\\t\\tkeys can be mapped.","\\tIf the menu is disabled by excluding \'m\' from \'guioptions\', the ALT","\\tkey is never used for the menu.","\\tThis option is not used for <F10>; on Win32."],"winblend":["number\\t(default 0)","\\t\\t\\tlocal to window","\\tEnables pseudo-transparency for a floating window. Valid values are in","\\tthe range of 0 for fully opaque window (disabled) to 100 for fully","\\ttransparent background. Values between 0-30 are typically most useful."],"window":["number (default screen height - 1)","\\t\\t\\tglobal","\\tWindow height. Do not confuse this with the height of the Vim window,","\\tuse \'lines\' for that.","\\tUsed for |CTRL-F| and |CTRL-B| when there is only one window and the","\\tvalue is smaller than \'lines\' minus one. The screen will scroll","\\t\'window\' minus two lines, with a minimum of one.","\\tWhen \'window\' is equal to \'lines\' minus one CTRL-F and CTRL-B scroll","\\tin a much smarter way, taking care of wrapping lines.","\\tWhen resizing the Vim window, the value is smaller than 1 or more than","\\tor equal to \'lines\' it will be set to \'lines\' minus 1."],"winheight":["number\\t(default 1)","\\t\\t\\tglobal","\\tMinimal number of lines for the current window. This is not a hard","\\tminimum, Vim will use fewer lines if there is not enough room. If the","\\tfocus goes to a window that is smaller, its size is increased, at the","\\tcost of the height of other windows.","\\tSet \'winheight\' to a small number for normal editing.","\\tSet it to 999 to make the current window fill most of the screen.","\\tOther windows will be only \'winminheight\' high. This has the drawback","\\tthat \\":all\\" will create only two windows. To avoid \\"vim -o 1 2 3 4\\"","\\tto create only two windows, set the option after startup is done,","\\tusing the |VimEnter| event: >","\\t\\tau VimEnter * set winheight=999","<\\tMinimum value is 1.","\\tThe height is not adjusted after one of the commands that change the","\\theight of the current window.","\\t\'winheight\' applies to the current window. Use \'winminheight\' to set","\\tthe minimal height for other windows."],"winhighlight":["string (default empty)","\\t\\t\\tlocal to window","\\tWindow-local highlights. Comma-delimited list of highlight","\\t|group-name| pairs \\"{hl-builtin}:{hl},...\\" where each {hl-builtin} is","\\ta built-in |highlight-groups| item to be overridden by {hl} group in","\\tthe window. Only built-in |highlight-groups| are supported, not","\\tsyntax highlighting (use |:ownsyntax| for that)."],"winfixheight":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tKeep the window height when windows are opened or closed and","\\t\'equalalways\' is set. Also for |CTRL-W_=|. Set by default for the","\\t|preview-window| and |quickfix-window|.","\\tThe height may be changed anyway when running out of room."],"winfixwidth":["boolean\\t(default off)","\\t\\t\\tlocal to window","\\tKeep the window width when windows are opened or closed and","\\t\'equalalways\' is set. Also for |CTRL-W_=|.","\\tThe width may be changed anyway when running out of room."],"winminheight":["number\\t(default 1)","\\t\\t\\tglobal","\\tThe minimal height of a window, when it\'s not the current window.","\\tThis is a hard minimum, windows will never become smaller.","\\tWhen set to zero, windows may be \\"squashed\\" to zero lines (i.e. just a","\\tstatus bar) if necessary. They will return to at least one line when","\\tthey become active (since the cursor has to have somewhere to go.)","\\tUse \'winheight\' to set the minimal height of the current window.","\\tThis option is only checked when making a window smaller. Don\'t use a","\\tlarge number, it will cause errors when opening more than a few","\\twindows. A value of 0 to 3 is reasonable."],"winminwidth":["number\\t(default 1)","\\t\\t\\tglobal","\\tThe minimal width of a window, when it\'s not the current window.","\\tThis is a hard minimum, windows will never become smaller.","\\tWhen set to zero, windows may be \\"squashed\\" to zero columns (i.e. just","\\ta vertical separator) if necessary. They will return to at least one","\\tline when they become active (since the cursor has to have somewhere","\\tto go.)","\\tUse \'winwidth\' to set the minimal width of the current window.","\\tThis option is only checked when making a window smaller. Don\'t use a","\\tlarge number, it will cause errors when opening more than a few","\\twindows. A value of 0 to 12 is reasonable."],"winwidth":["number\\t(default 20)","\\t\\t\\tglobal","\\tMinimal number of columns for the current window. This is not a hard","\\tminimum, Vim will use fewer columns if there is not enough room. If","\\tthe current window is smaller, its size is increased, at the cost of","\\tthe width of other windows. Set it to 999 to make the current window","\\talways fill the screen. Set it to a small number for normal editing.","\\tThe width is not adjusted after one of the commands to change the","\\twidth of the current window.","\\t\'winwidth\' applies to the current window. Use \'winminwidth\' to set","\\tthe minimal width for other windows."],"wrap":["boolean\\t(default on)","\\t\\t\\tlocal to window","\\tThis option changes how text is displayed. It doesn\'t change the text","\\tin the buffer, see \'textwidth\' for that.","\\tWhen on, lines longer than the width of the window will wrap and","\\tdisplaying continues on the next line. When off lines will not wrap","\\tand only part of long lines will be displayed. When the cursor is","\\tmoved to a part that is not shown, the screen will scroll","\\thorizontally.","\\tThe line will be broken in the middle of a word if necessary. See","\\t\'linebreak\' to get the break at a word boundary.","\\tTo make scrolling horizontally a bit more useful, try this: >","\\t\\t:set sidescroll=5","\\t\\t:set listchars+=precedes:<,extends:>","<\\tSee \'sidescroll\', \'listchars\' and |wrap-off|.","\\tThis option can\'t be set from a |modeline| when the \'diff\' option is","\\ton."],"wrapmargin":["number\\t(default 0)","\\t\\t\\tlocal to buffer","\\tNumber of characters from the right window border where wrapping","\\tstarts. When typing text beyond this limit, an <EOL> will be inserted","\\tand inserting continues on the next line.","\\tOptions that add a margin, such as \'number\' and \'foldcolumn\', cause","\\tthe text width to be further reduced. This is Vi compatible.","\\tWhen \'textwidth\' is non-zero, this option is not used.","\\tSee also \'formatoptions\' and |ins-textwidth|."],"wrapscan":["boolean\\t(default on)\\t\\t\\t*E384* *E385*","\\t\\t\\tglobal","\\tSearches wrap around the end of the file. Also applies to |]s| and","\\t|[s|, searching for spelling mistakes."],"write":["boolean\\t(default on)","\\t\\t\\tglobal","\\tAllows writing files. When not set, writing a file is not allowed.","\\tCan be used for a view-only mode, where modifications to the text are","\\tstill allowed. Can be reset with the |-m| or |-M| command line","\\targument. Filtering text is still possible, even though this requires","\\twriting a temporary file."],"writeany":["boolean\\t(default off)","\\t\\t\\tglobal","\\tAllows writing to any file with no need for \\"!\\" override."],"writebackup":["boolean\\t(default on with |+writebackup| feature, off","\\t\\t\\t\\t\\totherwise)","\\t\\t\\tglobal","\\tMake a backup before overwriting a file. The backup is removed after","\\tthe file was successfully written, unless the \'backup\' option is","\\talso on.","\\tWARNING: Switching this option off means that when Vim fails to write","\\tyour buffer correctly and then, for whatever reason, Vim exits, you","\\tlose both the original file and what you were writing. Only reset","\\tthis option if your file system is almost full and it makes the write","\\tfail (and make sure not to exit Vim until the write was successful).","\\tSee |backup-table| for another explanation.","\\tWhen the \'backupskip\' pattern matches, a backup is not made anyway."],"writedelay":["number\\t(default 0)","\\t\\t\\tglobal","\\tThe number of milliseconds to wait for each character sent to the","\\tscreen. When positive, characters are sent to the UI one by one.","\\tSee \'redrawdebug\' for more options. For debugging purposes."],"altkeymap":["boolean (default off)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+farsi|","\\t\\t\\tfeature}","\\tThis option was for using Farsi, which has been removed. See","\\t|farsi.txt|."],"antialias":["boolean (default: off)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with GUI enabled","\\t\\t\\ton Mac OS X}","\\tThis option only has an effect in the GUI version of Vim on Mac OS X","\\tv10.2 or later. When on, Vim will use smooth (\\"antialiased\\") fonts,","\\twhich can be easier to read at certain sizes on certain displays.","\\tSetting this option can sometimes cause problems if \'guifont\' is set","\\tto its default (empty string).","\\tNOTE: This option is reset when \'compatible\' is set."],"balloonevalterm":["boolean\\t(default off)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the","\\t\\t\\t|+balloon_eval_term| feature}","\\tSwitch on the |balloon-eval| functionality for the terminal."],"bioskey":["boolean\\t(default on)","\\t\\t\\tglobal","\\t\\t\\t{only for MS-DOS}","\\tThis was for MS-DOS and is no longer supported."],"compatible":["boolean\\t(default on, off when a |vimrc| or |gvimrc|","\\t\\t\\t\\t\\tfile is found, reset in |defaults.vim|)","\\t\\t\\tglobal","\\tThis option has the effect of making Vim either more Vi-compatible, or","\\tmake Vim behave in a more useful way."],"completeslash":["string\\t(default: \\"\\")","\\t\\t\\tlocal to buffer","\\t\\t\\t{only for MS-Windows}","\\tWhen this option is set it overrules \'shellslash\' for completion:","\\t- When this option is set to \\"slash\\", a forward slash is used for path","\\t completion in insert mode. This is useful when editing HTML tag, or","\\t Makefile with \'noshellslash\' on Windows.","\\t- When this option is set to \\"backslash\\", backslash is used. This is","\\t useful when editing a batch file with \'shellslash\' set on Windows.","\\t- When this option is empty, same character is used as for","\\t \'shellslash\'.","\\tFor Insert mode completion the buffer-local value is used. For","\\tcommand line completion the global value is used."],"completepopup":["string (default empty)","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+textprop|","\\t\\t\\tor |+quickfix| feature}","\\tWhen \'completeopt\' contains \\"popup\\" then this option is used for the","\\tproperties of the info popup when it is created. You can also use","\\t|popup_findinfo()| and then set properties for an existing info popup","\\twith |popup_setoptions()|. See |complete-popup|."],"conskey":["boolean\\t(default off)","\\t\\t\\tglobal","\\tThis was for MS-DOS and is no longer supported."],"cryptmethod":["string\\t(default \\"blowfish2\\")","\\t\\t\\tglobal or local to buffer |global-local|","\\tMethod used for encryption when the buffer is written to a file:","\\t\\t\\t\\t\\t\\t\\t*pkzip*","\\t zip\\t\\tPkZip compatible method. A weak kind of encryption.","\\t\\t\\tBackwards compatible with Vim 7.2 and older.","\\t\\t\\t\\t\\t\\t\\t*blowfish*","\\t blowfish\\tBlowfish method. Medium strong encryption but it has","\\t\\t\\tan implementation flaw. Requires Vim 7.3 or later,","\\t\\t\\tfiles can NOT be read by Vim 7.2 and older. This adds","\\t\\t\\ta \\"seed\\" to the file, every time you write the file","\\t\\t\\tthe encrypted bytes will be different.","\\t\\t\\t\\t\\t\\t\\t*blowfish2*","\\t blowfish2\\tBlowfish method. Medium strong encryption. Requires","\\t\\t\\tVim 7.4.401 or later, files can NOT be read by Vim 7.3","\\t\\t\\tand older. This adds a \\"seed\\" to the file, every time","\\t\\t\\tyou write the file the encrypted bytes will be","\\t\\t\\tdifferent. The whole undo file is encrypted, not just","\\t\\t\\tthe pieces of text."],"cscopeverbose":["boolean (default off)","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+cscope|","\\t\\t\\tfeature}","\\tGive messages when adding a cscope database. See |cscopeverbose|.","\\tNOTE: This option is reset when \'compatible\' is set."],"cursorlineopt":["string (default: \\"number,line\\")","\\t\\t\\tlocal to window","\\t\\t\\t{not available when compiled without the |+syntax|","\\t\\t\\tfeature}","\\tComma separated list of settings for how \'cursorline\' is displayed.","\\tValid values:","\\t\\"line\\"\\t\\tHighlight the text line of the cursor with","\\t\\t\\tCursorLine |hl-CursorLine|.","\\t\\"screenline\\"\\tHighlight only the screen line of the cursor with","\\t\\t\\tCursorLine |hl-CursorLine|.","\\t\\"number\\"\\tHighlight the line number of the cursor with","\\t\\t\\tCursorLineNr |hl-CursorLineNr|."],"edcompatible":["boolean\\t(default off)","\\t\\t\\tglobal","\\tMakes the \'g\' and \'c\' flags of the \\":substitute\\" command to be","\\ttoggled each time the flag is given. See |complex-change|. See","\\talso \'gdefault\' option.","\\tSwitching this option on may break plugins!"],"encoding":["string (default: \\"latin1\\" or value from $LANG)","\\t\\t\\tglobal","\\tSets the character encoding used inside Vim. It applies to text in","\\tthe buffers, registers, Strings in expressions, text stored in the","\\tviminfo file, etc. It sets the kind of characters which Vim can work","\\twith. See |encoding-names| for the possible values."],"esckeys":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tFunction keys that start with an <Esc> are recognized in Insert","\\tmode. When this option is off, the cursor and function keys cannot be","\\tused in Insert mode if they start with an <Esc>. The advantage of","\\tthis is that the single <Esc> is recognized immediately, instead of","\\tafter one second. Instead of resetting this option, you might want to","\\ttry changing the values for \'timeoutlen\' and \'ttimeoutlen\'. Note that","\\twhen \'esckeys\' is off, you can still map anything, but the cursor keys","\\twon\'t work by default.","\\tNOTE: This option is set to the Vi default value when \'compatible\' is","\\tset and to the Vim default value when \'compatible\' is reset.","\\tNOTE: when this option is off then the |modifyOtherKeys| functionality","\\tis disabled while in Insert mode to avoid ending Insert mode with any","\\tkey that has a modifier."],"exrc":["boolean (default off)","\\t\\t\\tglobal","\\tEnables the reading of .vimrc, .exrc and .gvimrc in the current","\\tdirectory."],"fkmap":["boolean (default off)\\t\\t\\t*E198*","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+rightleft|","\\t\\t\\tfeature}","\\tThis option was for using Farsi, which has been removed. See","\\t|farsi.txt|."],"guiheadroom":["number\\t(default 50)","\\t\\t\\tglobal","\\t\\t\\t{only for GTK and X11 GUI}","\\tThe number of pixels subtracted from the screen height when fitting","\\tthe GUI window on the screen. Set this before the GUI is started,","\\te.g., in your |gvimrc| file. When zero, the whole screen height will","\\tbe used by the window. When positive, the specified number of pixel","\\tlines will be left for window decorations and other items on the","\\tscreen. Set it to a negative value to allow windows taller than the","\\tscreen."],"guipty":["boolean\\t(default on)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with GUI enabled}","\\tOnly in the GUI: If on, an attempt is made to open a pseudo-tty for","\\tI/O to/from shell commands. See |gui-pty|."],"highlight":["string\\t(default (as a single string):","\\t\\t\\t\\t \\"8:SpecialKey,~:EndOfBuffer,@:NonText,","\\t\\t\\t\\t d:Directory,e:ErrorMsg,i:IncSearch,","\\t\\t\\t\\t l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,","\\t\\t\\t\\t a:LineNrAbove,b:LineNrBelow,","\\t\\t\\t\\t N:CursorLineNr,r:Question,s:StatusLine,","\\t\\t\\t\\t S:StatusLineNC,c:VertSplit,t:Title,","\\t\\t\\t\\t v:Visual,V:VisualNOS,w:WarningMsg,","\\t\\t\\t\\t W:WildMenu,f:Folded,F:FoldColumn,","\\t\\t\\t\\t A:DiffAdd,C:DiffChange,D:DiffDelete,","\\t\\t\\t\\t T:DiffText,>:SignColumn,-:Conceal,","\\t\\t\\t\\t B:SpellBad,P:SpellCap,R:SpellRare,","\\t\\t\\t\\t L:SpellLocal,+:Pmenu,=:PmenuSel,","\\t\\t\\t\\t x:PmenuSbar,X:PmenuThumb,*:TabLine,","\\t\\t\\t\\t #:TabLineSel,_:TabLineFill,!:CursorColumn,","\\t\\t\\t\\t .:CursorLine,o:ColorColumn,q:QuickFixLine,","\\t\\t\\t\\t z:StatusLineTerm,Z:StatusLineTermNC\\")","\\t\\t\\tglobal","\\tThis option can be used to set highlighting mode for various","\\toccasions. It is a comma separated list of character pairs. The","\\tfirst character in a pair gives the occasion, the second the mode to","\\tuse for that occasion. The occasions are:","\\t|hl-SpecialKey|\\t 8 Meta and special keys listed with \\":map\\"","\\t|hl-EndOfBuffer| ~ lines after the last line in the buffer","\\t|hl-NonText|\\t @ \'@\' at the end of the window and","\\t\\t\\t characters from \'showbreak\'","\\t|hl-Directory|\\t d directories in CTRL-D listing and other special","\\t\\t\\t things in listings","\\t|hl-ErrorMsg|\\t e error messages","\\t\\t\\t h (obsolete, ignored)","\\t|hl-IncSearch|\\t i \'incsearch\' highlighting","\\t|hl-Search|\\t l last search pattern highlighting (see \'hlsearch\')","\\t|hl-MoreMsg|\\t m |more-prompt|","\\t|hl-ModeMsg|\\t M Mode (e.g., \\"-- INSERT --\\")","\\t|hl-LineNr|\\t n line number for \\":number\\" and \\":#\\" commands, and","\\t\\t\\t when \'number\' or \'relativenumber\' option is set.","\\t|hl-LineNrAbove| a line number above the cursor for when the","\\t\\t\\t \'relativenumber\' option is set.","\\t|hl-LineNrBelow| b line number below the cursor for when the","\\t\\t\\t \'relativenumber\' option is set.","\\t|hl-CursorLineNr| N like n for when \'cursorline\' or \'relativenumber\' is","\\t\\t\\t set.","\\t|hl-Question|\\t r |hit-enter| prompt and yes/no questions","\\t|hl-StatusLine|\\t s status line of current window |status-line|","\\t|hl-StatusLineNC| S status lines of not-current windows","\\t|hl-Title|\\t t Titles for output from \\":set all\\", \\":autocmd\\" etc.","\\t|hl-VertSplit|\\t c column used to separate vertically split windows","\\t|hl-Visual|\\t v Visual mode","\\t|hl-VisualNOS|\\t V Visual mode when Vim does is \\"Not Owning the","\\t\\t\\t Selection\\" Only X11 Gui\'s |gui-x11| and","\\t\\t\\t |xterm-clipboard|.","\\t|hl-WarningMsg|\\t w warning messages","\\t|hl-WildMenu|\\t W wildcard matches displayed for \'wildmenu\'","\\t|hl-Folded|\\t f line used for closed folds","\\t|hl-FoldColumn|\\t F \'foldcolumn\'","\\t|hl-DiffAdd|\\t A added line in diff mode","\\t|hl-DiffChange|\\t C changed line in diff mode","\\t|hl-DiffDelete|\\t D deleted line in diff mode","\\t|hl-DiffText|\\t T inserted text in diff mode","\\t|hl-SignColumn|\\t > column used for |signs|","\\t|hl-Conceal|\\t - the placeholders used for concealed characters","\\t\\t\\t (see \'conceallevel\')","\\t|hl-SpellBad|\\t B misspelled word |spell|","\\t|hl-SpellCap|\\t P word that should start with capital |spell|","\\t|hl-SpellRare|\\t R rare word |spell|","\\t|hl-SpellLocal|\\t L word from other region |spell|","\\t|hl-Pmenu|\\t + popup menu normal line","\\t|hl-PmenuSel|\\t = popup menu selected line","\\t|hl-PmenuSbar|\\t x popup menu scrollbar","\\t|hl-PmenuThumb|\\t X popup menu scrollbar thumb"],"imactivatefunc":["string (default \\"\\")","\\t\\t\\tglobal","\\tThis option specifies a function that will be called to","\\tactivate or deactivate the Input Method.","\\tIt is not used in the GUI.","\\tThe expression will be evaluated in the |sandbox| when set from a","\\tmodeline, see |sandbox-option|."],"imactivatekey":["string (default \\"\\")","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with |+xim| and","\\t\\t\\t|+GUI_GTK|}\\t\\t\\t\\t*E599*","\\tSpecifies the key that your Input Method in X-Windows uses for","\\tactivation. When this is specified correctly, vim can fully control","\\tIM with \'imcmdline\', \'iminsert\' and \'imsearch\'.","\\tYou can\'t use this option to change the activation key, the option","\\ttells Vim what the key is.","\\tFormat:","\\t\\t[MODIFIER_FLAG-]KEY_STRING"],"imstatusfunc":["string (default \\"\\")","\\t\\t\\tglobal","\\tThis option specifies a function that is called to obtain the status","\\tof Input Method. It must return a positive number when IME is active.","\\tIt is not used in the GUI."],"imstyle":["number (default 1)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with |+xim| and","\\t\\t\\t|+GUI_GTK|}","\\tThis option specifies the input style of Input Method:","\\t0 use on-the-spot style","\\t1 over-the-spot style","\\tSee: |xim-input-style|"],"key":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\t\\t\\t{only available when compiled with the |+cryptv|","\\t\\t\\tfeature}","\\tThe key that is used for encrypting and decrypting the current buffer.","\\tSee |encryption| and \'cryptmethod\'.","\\tCareful: Do not set the key value by hand, someone might see the typed","\\tkey. Use the |:X| command. But you can make \'key\' empty: >","\\t\\t:set key=","<\\tIt is not possible to get the value of this option with \\":set key\\" or","\\t\\"echo &key\\". This is to avoid showing it to someone who shouldn\'t","\\tknow. It also means you cannot see it yourself once you have set it,","\\tbe careful not to make a typing error!","\\tYou can use \\"&key\\" in an expression to detect whether encryption is","\\tenabled. When \'key\' is set it returns \\"*****\\" (five stars)."],"langnoremap":["boolean (default off, set in |defaults.vim|)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+langmap|","\\t\\t\\tfeature}","\\tThis is just like \'langremap\' but with the value inverted. It only","\\texists for backwards compatibility. When setting \'langremap\' then","\\t\'langnoremap\' is set to the inverted value, and the other way around."],"luadll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+lua/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Lua shared library. The default is","\\tDYNAMIC_LUA_DLL, which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"macatsui":["boolean\\t(default on)","\\t\\t\\tglobal","\\t\\t\\t{only available in Mac GUI version}","\\tThis is a workaround for when drawing doesn\'t work properly. When set","\\tand compiled with multi-byte support ATSUI text drawing is used. When","\\tnot set ATSUI text drawing is not used. Switch this option off when","\\tyou experience drawing problems. In a future version the problems may","\\tbe solved and this option becomes obsolete. Therefore use this method","\\tto unset it: >","\\t\\tif exists(\'&macatsui\')","\\t\\t set nomacatsui","\\t\\tendif","<\\tAnother option to check if you have drawing problems is","\\t\'termencoding\'."],"maxmem":["number\\t(default between 256 to 5120 (system","\\t\\t\\t\\t dependent) or half the amount of memory","\\t\\t\\t\\t available)","\\t\\t\\tglobal","\\tMaximum amount of memory (in Kbyte) to use for one buffer. When this","\\tlimit is reached allocating extra memory for a buffer will cause","\\tother memory to be freed.","\\tThe maximum usable value is about 2000000. Use this to work without a","\\tlimit.","\\tThe value is ignored when \'swapfile\' is off.","\\tAlso see \'maxmemtot\'."],"maxmemtot":["number\\t(default between 2048 and 10240 (system","\\t\\t\\t\\t dependent) or half the amount of memory","\\t\\t\\t\\t available)","\\t\\t\\tglobal","\\tMaximum amount of memory in Kbyte to use for all buffers together.","\\tThe maximum usable value is about 2000000 (2 Gbyte). Use this to work","\\twithout a limit.","\\tOn 64 bit machines higher values might work. But hey, do you really","\\tneed more than 2 Gbyte for text editing? Keep in mind that text is","\\tstored in the swap file, one can edit files > 2 Gbyte anyway. We do","\\tneed the memory to store undo info.","\\tBuffers with \'swapfile\' off still count to the total amount of memory","\\tused.","\\tAlso see \'maxmem\'."],"mzschemedll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+mzscheme/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the MzScheme shared library. The default is","\\tDYNAMIC_MZSCH_DLL which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThe value must be set in the |vimrc| script or earlier. In the","\\tstartup, before the |load-plugins| step.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"mzschemegcdll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+mzscheme/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the MzScheme GC shared library. The default is","\\tDYNAMIC_MZGC_DLL which was specified at compile time.","\\tThe value can be equal to \'mzschemedll\' if it includes the GC code.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"mzquantum":["number\\t(default 100)","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+mzscheme|","\\t\\t\\tfeature}","\\tThe number of milliseconds between polls for MzScheme threads.","\\tNegative or zero value means no thread scheduling.","\\tNOTE: This option is set to the Vim default value when \'compatible\'","\\tis reset."],"osfiletype":["string (default: \\"\\")","\\t\\t\\tlocal to buffer","\\tThis option was supported on RISC OS, which has been removed."],"perldll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+perl/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Perl shared library. The default is","\\tDYNAMIC_PERL_DLL, which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"previewpopup":["string (default empty)","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+textprop|","\\t\\t\\tor |+quickfix| feature}","\\tWhen not empty a popup window is used for commands that would open a","\\tpreview window. See |preview-popup|.","\\tNot used for the insert completion info, add \\"popup\\" to","\\t\'completeopt\' for that."],"pythondll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+python/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Python 2.x shared library. The default is","\\tDYNAMIC_PYTHON_DLL, which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"pythonhome":["string\\t(default \\"\\")","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+python/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Python 2.x home directory. When \'pythonhome\'","\\tand the PYTHONHOME environment variable are not set, PYTHON_HOME,","\\twhich was specified at compile time, will be used for the Python 2.x","\\thome directory.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"renderoptions":["string (default: empty)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with GUI and DIRECTX on","\\t\\t\\tMS-Windows}","\\tSelect a text renderer and set its options. The options depend on the","\\trenderer."],"restorescreen":["boolean\\t(default on)","\\t\\t\\tglobal","\\t\\t\\t{only in Windows 95/NT console version}","\\tWhen set, the screen contents is restored when exiting Vim. This also","\\thappens when executing external commands."],"rubydll":["string\\t(default: depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+ruby/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Ruby shared library. The default is","\\tDYNAMIC_RUBY_DLL, which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"scrollfocus":["boolean (default off)","\\t\\t\\tglobal","\\t\\t\\t{only for MS-Windows GUI}","\\tWhen using the scroll wheel and this option is set, the window under","\\tthe mouse pointer is scrolled. With this option off the current","\\twindow is scrolled.","\\tSystems other than MS-Windows always behave like this option is on."],"shelltype":["number\\t(default 0)","\\t\\t\\tglobal","\\t\\t\\t{only for the Amiga}","\\tOn the Amiga this option influences the way how the commands work","\\twhich use a shell.","\\t0 and 1: always use the shell","\\t2 and 3: use the shell only to filter lines","\\t4 and 5: use shell only for \':sh\' command","\\tWhen not using the shell, the command is executed directly."],"shortname":["boolean\\t(default off)","\\t\\t\\tlocal to buffer","\\tFilenames are assumed to be 8 characters plus one extension of 3","\\tcharacters. Multiple dots in file names are not allowed. When this","\\toption is on, dots in file names are replaced with underscores when","\\tadding an extension (\\".~\\" or \\".swp\\"). This option is not available","\\tfor MS-DOS, because then it would always be on. This option is useful","\\twhen editing files on an MS-DOS compatible filesystem, e.g., messydos","\\tor crossdos. When running the Win32 GUI version under Win32s, this","\\toption is always on by default."],"swapsync":["string\\t(default \\"fsync\\")","\\t\\t\\tglobal","\\tWhen this option is not empty a swap file is synced to disk after","\\twriting to it. This takes some time, especially on busy unix systems.","\\tWhen this option is empty parts of the swap file may be in memory and","\\tnot written to disk. When the system crashes you may lose more work.","\\tOn Unix the system does a sync now and then without Vim asking for it,","\\tso the disadvantage of setting this option off is small. On some","\\tsystems the swap file will not be written at all. For a unix system","\\tsetting it to \\"sync\\" will use the sync() call instead of the default","\\tfsync(), which may work better on some systems.","\\tThe \'fsync\' option is used for the actual file."],"tcldll":["string\\t(default depends on the build)","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |+tcl/dyn|","\\t\\t\\tfeature}","\\tSpecifies the name of the Tcl shared library. The default is","\\tDYNAMIC_TCL_DLL, which was specified at compile time.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"term":["string\\t(default is $TERM, if that fails:","\\t\\t\\t\\t in the GUI: \\"builtin_gui\\"","\\t\\t\\t\\t\\ton Amiga: \\"amiga\\"","\\t\\t\\t\\t\\t on BeOS: \\"beos-ansi\\"","\\t\\t\\t\\t\\t on Mac: \\"mac-ansi\\"","\\t\\t\\t\\t\\t on MiNT: \\"vt52\\"","\\t\\t\\t\\t on MS-DOS: \\"pcterm\\"","\\t\\t\\t\\t\\t on OS/2: \\"os2ansi\\"","\\t\\t\\t\\t\\t on Unix: \\"ansi\\"","\\t\\t\\t\\t\\t on VMS: \\"ansi\\"","\\t\\t\\t\\t on Win 32: \\"win32\\")","\\t\\t\\tglobal","\\tName of the terminal. Used for choosing the terminal control","\\tcharacters. Environment variables are expanded |:set_env|.","\\tFor example: >","\\t\\t:set term=$TERM","<\\tSee |termcap|."],"termencoding":["string\\t(default \\"\\"; with GTK+ GUI: \\"utf-8\\"; with","\\t\\t\\t\\t\\t\\t Macintosh GUI: \\"macroman\\")","\\t\\t\\tglobal","\\tEncoding used for the terminal. This specifies what character","\\tencoding the keyboard produces and the display will understand. For","\\tthe GUI it only applies to the keyboard (\'encoding\' is used for the","\\tdisplay). Except for the Mac when \'macatsui\' is off, then","\\t\'termencoding\' should be \\"macroman\\".","\\t\\t\\t\\t\\t\\t\\t\\t*E617*","\\tNote: This does not apply to the GTK+ GUI. After the GUI has been","\\tsuccessfully initialized, \'termencoding\' is forcibly set to \\"utf-8\\".","\\tAny attempts to set a different value will be rejected, and an error","\\tmessage is shown.","\\tFor the Win32 GUI and console versions \'termencoding\' is not used,","\\tbecause the Win32 system always passes Unicode characters.","\\tWhen empty, the same encoding is used as for the \'encoding\' option.","\\tThis is the normal value.","\\tNot all combinations for \'termencoding\' and \'encoding\' are valid. See","\\t|encoding-table|.","\\tThe value for this option must be supported by internal conversions or","\\ticonv(). When this is not possible no conversion will be done and you","\\twill probably experience problems with non-ASCII characters.","\\tExample: You are working with the locale set to euc-jp (Japanese) and","\\twant to edit a UTF-8 file: >","\\t\\t:let &termencoding = &encoding","\\t\\t:set encoding=utf-8","<\\tYou need to do this when your system has no locale support for UTF-8."],"termwinkey":["string\\t(default \\"\\")","\\t\\t\\tlocal to window","\\tThe key that starts a CTRL-W command in a terminal window. Other keys","\\tare sent to the job running in the window.","\\tThe <> notation can be used, e.g.: >","\\t\\t:set termwinkey=<C-L>","<\\tThe string must be one key stroke but can be multiple bytes.","\\tWhen not set CTRL-W is used, so that CTRL-W : gets you to the command","\\tline. If \'termwinkey\' is set to CTRL-L then CTRL-L : gets you to the","\\tcommand line."],"termwinscroll":["number\\t(default 10000)","\\t\\t\\tlocal to buffer","\\t\\t\\t{not available when compiled without the","\\t\\t\\t|+terminal| feature}","\\tNumber of scrollback lines to keep. When going over this limit the","\\tfirst 10% of the scrollback lines are deleted. This is just to reduce","\\tthe memory usage. See |Terminal-Normal|."],"termwinsize":["string\\t(default \\"\\")","\\t\\t\\tlocal to window","\\tSize of the |terminal| window. Format: {rows}x{columns} or","\\t{rows}*{columns}.","\\t- When empty the terminal gets the size from the window.","\\t- When set with a \\"x\\" (e.g., \\"24x80\\") the terminal size is not","\\t adjusted to the window size. If the window is smaller only the","\\t top-left part is displayed.","\\t- When set with a \\"*\\" (e.g., \\"10*50\\") the terminal size follows the","\\t window size, but will not be smaller than the specified rows and/or","\\t columns.","\\t- When rows is zero then use the height of the window.","\\t- When columns is zero then use the width of the window.","\\t- Using \\"0x0\\" or \\"0*0\\" is the same as empty."],"termwintype":["string (default \\"\\")","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |terminal|","\\t\\t\\tfeature on MS-Windows}","\\tSpecify the virtual console (pty) used when opening the terminal","\\twindow."],"textauto":["boolean\\t(Vim default: on, Vi default: off)","\\t\\t\\tglobal","\\tThis option is obsolete. Use \'fileformats\'.","\\tFor backwards compatibility, when \'textauto\' is set, \'fileformats\' is","\\tset to the default value for the current system. When \'textauto\' is","\\treset, \'fileformats\' is made empty.","\\tNOTE: This option is set to the Vi default value when \'compatible\' is","\\tset and to the Vim default value when \'compatible\' is reset."],"textmode":["boolean\\t(MS-DOS, Win32 and OS/2: default on,","\\t\\t\\t\\t others: default off)","\\t\\t\\tlocal to buffer","\\tThis option is obsolete. Use \'fileformat\'.","\\tFor backwards compatibility, when \'textmode\' is set, \'fileformat\' is","\\tset to \\"dos\\". When \'textmode\' is reset, \'fileformat\' is set to","\\t\\"unix\\"."],"toolbar":["string\\t(default \\"icons,tooltips\\")","\\t\\t\\tglobal","\\t\\t\\t{only for |+GUI_GTK|, |+GUI_Athena|, |+GUI_Motif| and","\\t\\t\\t|+GUI_Photon|}","\\tThe contents of this option controls various toolbar settings. The","\\tpossible values are:","\\t\\ticons\\t\\tToolbar buttons are shown with icons.","\\t\\ttext\\t\\tToolbar buttons shown with text.","\\t\\thoriz\\t\\tIcon and text of a toolbar button are","\\t\\t\\t\\thorizontally arranged. {only in GTK+ 2 GUI}","\\t\\ttooltips\\tTooltips are active for toolbar buttons.","\\tTooltips refer to the popup help text which appears after the mouse","\\tcursor is placed over a toolbar button for a brief moment."],"toolbariconsize":["string\\t(default \\"small\\")","\\t\\t\\t\\tglobal","\\t\\t\\t\\t{only in the GTK+ GUI}","\\tControls the size of toolbar icons. The possible values are:","\\t\\ttiny\\t\\tUse tiny icons.","\\t\\tsmall\\t\\tUse small icons (default).","\\t\\tmedium\\t\\tUse medium-sized icons.","\\t\\tlarge\\t\\tUse large icons.","\\t\\thuge\\t\\tUse even larger icons.","\\t\\tgiant\\t\\tUse very big icons.","\\tThe exact dimensions in pixels of the various icon sizes depend on","\\tthe current theme. Common dimensions are giant=48x48, huge=32x32,","\\tlarge=24x24, medium=24x24, small=20x20 and tiny=16x16."],"ttybuiltin":["boolean\\t(default on)","\\t\\t\\tglobal","\\tWhen on, the builtin termcaps are searched before the external ones.","\\tWhen off the builtin termcaps are searched after the external ones.","\\tWhen this option is changed, you should set the \'term\' option next for","\\tthe change to take effect, for example: >","\\t\\t:set notbi term=$TERM","<\\tSee also |termcap|.","\\tRationale: The default for this option is \\"on\\", because the builtin","\\ttermcap entries are generally better (many systems contain faulty","\\txterm entries...)."],"ttymouse":["string\\t(default depends on \'term\')","\\t\\t\\tglobal","\\t\\t\\t{only in Unix and VMS, doesn\'t work in the GUI; not","\\t\\t\\tavailable when compiled without |+mouse|}","\\tName of the terminal type for which mouse codes are to be recognized.","\\tCurrently these strings are valid:","\\t\\t\\t\\t\\t\\t\\t*xterm-mouse*","\\t xterm\\txterm-like mouse handling. The mouse generates","\\t\\t\\t\\"<Esc>[Mscr\\", where \\"scr\\" is three bytes:","\\t\\t\\t\\t\\"s\\" = button state","\\t\\t\\t\\t\\"c\\" = column plus 33","\\t\\t\\t\\t\\"r\\" = row plus 33","\\t\\t\\tThis only works up to 223 columns! See \\"dec\\",","\\t\\t\\t\\"urxvt\\", and \\"sgr\\" for solutions.","\\t xterm2\\tWorks like \\"xterm\\", but with the xterm reporting the","\\t\\t\\tmouse position while the mouse is dragged. This works","\\t\\t\\tmuch faster and more precise. Your xterm must at","\\t\\t\\tleast at patchlevel 88 / XFree 3.3.3 for this to","\\t\\t\\twork. See below for how Vim detects this","\\t\\t\\tautomatically.","\\t\\t\\t\\t\\t\\t\\t*netterm-mouse*","\\t netterm\\tNetTerm mouse handling. A left mouse click generates","\\t\\t\\t\\"<Esc>}r,c<CR>\\", where \\"r,c\\" are two decimal numbers","\\t\\t\\tfor the row and column. No other mouse events are","\\t\\t\\tsupported.","\\t\\t\\t\\t\\t\\t\\t*dec-mouse*","\\t dec\\t\\tDEC terminal mouse handling. The mouse generates a","\\t\\t\\trather complex sequence, starting with \\"<Esc>[\\".","\\t\\t\\tThis is also available for an Xterm, if it was","\\t\\t\\tconfigured with \\"--enable-dec-locator\\".","\\t\\t\\t\\t\\t\\t\\t*jsbterm-mouse*","\\t jsbterm\\tJSB term mouse handling.","\\t\\t\\t\\t\\t\\t\\t*pterm-mouse*","\\t pterm\\tQNX pterm mouse handling.","\\t\\t\\t\\t\\t\\t\\t*urxvt-mouse*","\\t urxvt\\tMouse handling for the urxvt (rxvt-unicode) terminal.","\\t\\t\\tThe mouse works only if the terminal supports this","\\t\\t\\tencoding style, but it does not have 223 columns limit","\\t\\t\\tunlike \\"xterm\\" or \\"xterm2\\".","\\t\\t\\t\\t\\t\\t\\t*sgr-mouse*","\\t sgr\\t\\tMouse handling for the terminal that emits SGR-styled","\\t\\t\\tmouse reporting. The mouse works even in columns","\\t\\t\\tbeyond 223. This option is backward compatible with","\\t\\t\\t\\"xterm2\\" because it can also decode \\"xterm2\\" style","\\t\\t\\tmouse codes."],"ttyscroll":["number\\t(default 999)","\\t\\t\\tglobal","\\tMaximum number of lines to scroll the screen. If there are more lines","\\tto scroll the window is redrawn. For terminals where scrolling is","\\tvery slow and redrawing is not slow this can be set to a small number,","\\te.g., 3, to speed up displaying."],"ttytype":["string\\t(default from $TERM)","\\t\\t\\tglobal","\\tAlias for \'term\', see above."],"varsofttabstop":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\t\\t\\t{only available when compiled with the |+vartabs|","\\t\\t\\tfeature}","\\tA list of the number of spaces that a <Tab> counts for while editing,","\\tsuch as inserting a <Tab> or using <BS>. It \\"feels\\" like variable-","\\twidth <Tab>s are being inserted, while in fact a mixture of spaces","\\tand <Tab>s is used. Tab widths are separated with commas, with the","\\tfinal value applying to all subsequent tabs."],"vartabstop":["string\\t(default \\"\\")","\\t\\t\\tlocal to buffer","\\t\\t\\t{only available when compiled with the |+vartabs|","\\t\\t\\tfeature}","\\tA list of the number of spaces that a <Tab> in the file counts for,","\\tseparated by commas. Each value corresponds to one tab, with the","\\tfinal value applying to all subsequent tabs. For example: >","\\t\\t:set vartabstop=4,20,10,8","<\\tThis will make the first tab 4 spaces wide, the second 20 spaces,","\\tthe third 10 spaces, and all following tabs 8 spaces."],"viminfo":["string\\t(Vi default: \\"\\", Vim default for MS-DOS,","\\t\\t\\t\\t Windows and OS/2: \'100,<50,s10,h,rA:,rB:,","\\t\\t\\t\\t for Amiga: \'100,<50,s10,h,rdf0:,rdf1:,rdf2:","\\t\\t\\t\\t for others: \'100,<50,s10,h)","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+viminfo|","\\t\\t\\tfeature}","\\tWhen non-empty, the viminfo file is read upon startup and written","\\twhen exiting Vim (see |viminfo-file|). Except when \'viminfofile\' is","\\t\\"NONE\\".","\\tThe string should be a comma separated list of parameters, each","\\tconsisting of a single character identifying the particular parameter,","\\tfollowed by a number or string which specifies the value of that","\\tparameter. If a particular character is left out, then the default","\\tvalue is used for that parameter. The following is a list of the","\\tidentifying characters and the effect of their value.","\\tCHAR\\tVALUE\\t~","\\t\\t\\t\\t\\t\\t\\t*viminfo-!*","\\t!\\tWhen included, save and restore global variables that start","\\t\\twith an uppercase letter, and don\'t contain a lowercase","\\t\\tletter. Thus \\"KEEPTHIS and \\"K_L_M\\" are stored, but \\"KeepThis\\"","\\t\\tand \\"_K_L_M\\" are not. Nested List and Dict items may not be","\\t\\tread back correctly, you end up with an empty item.","\\t\\t\\t\\t\\t\\t\\t*viminfo-quote*","\\t\\"\\tMaximum number of lines saved for each register. Old name of","\\t\\tthe \'<\' item, with the disadvantage that you need to put a","\\t\\tbackslash before the \\", otherwise it will be recognized as the","\\t\\tstart of a comment!","\\t\\t\\t\\t\\t\\t\\t*viminfo-%*","\\t%\\tWhen included, save and restore the buffer list. If Vim is","\\t\\tstarted with a file name argument, the buffer list is not","\\t\\trestored. If Vim is started without a file name argument, the","\\t\\tbuffer list is restored from the viminfo file. Quickfix","\\t\\t(\'buftype\'), unlisted (\'buflisted\'), unnamed and buffers on","\\t\\tremovable media (|viminfo-r|) are not saved.","\\t\\tWhen followed by a number, the number specifies the maximum","\\t\\tnumber of buffers that are stored. Without a number all","\\t\\tbuffers are stored.","\\t\\t\\t\\t\\t\\t\\t*viminfo-\'*","\\t\'\\tMaximum number of previously edited files for which the marks","\\t\\tare remembered. This parameter must always be included when","\\t\\t\'viminfo\' is non-empty.","\\t\\tIncluding this item also means that the |jumplist| and the","\\t\\t|changelist| are stored in the viminfo file.","\\t\\t\\t\\t\\t\\t\\t*viminfo-/*","\\t/\\tMaximum number of items in the search pattern history to be","\\t\\tsaved. If non-zero, then the previous search and substitute","\\t\\tpatterns are also saved. When not included, the value of","\\t\\t\'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*viminfo-:*","\\t:\\tMaximum number of items in the command-line history to be","\\t\\tsaved. When not included, the value of \'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*viminfo-<*","\\t<\\tMaximum number of lines saved for each register. If zero then","\\t\\tregisters are not saved. When not included, all lines are","\\t\\tsaved. \'\\"\' is the old name for this item.","\\t\\tAlso see the \'s\' item below: limit specified in Kbyte.","\\t\\t\\t\\t\\t\\t\\t*viminfo-@*","\\t@\\tMaximum number of items in the input-line history to be","\\t\\tsaved. When not included, the value of \'history\' is used.","\\t\\t\\t\\t\\t\\t\\t*viminfo-c*","\\tc\\tWhen included, convert the text in the viminfo file from the","\\t\\t\'encoding\' used when writing the file to the current","\\t\\t\'encoding\'. See |viminfo-encoding|.","\\t\\t\\t\\t\\t\\t\\t*viminfo-f*","\\tf\\tWhether file marks need to be stored. If zero, file marks (\'0","\\t\\tto \'9, \'A to \'Z) are not stored. When not present or when","\\t\\tnon-zero, they are all stored. \'0 is used for the current","\\t\\tcursor position (when exiting or when doing \\":wviminfo\\").","\\t\\t\\t\\t\\t\\t\\t*viminfo-h*","\\th\\tDisable the effect of \'hlsearch\' when loading the viminfo","\\t\\tfile. When not included, it depends on whether \\":nohlsearch\\"","\\t\\thas been used since the last search command.","\\t\\t\\t\\t\\t\\t\\t*viminfo-n*","\\tn\\tName of the viminfo file. The name must immediately follow","\\t\\tthe \'n\'. Must be at the end of the option! If the","\\t\\t\'viminfofile\' option is set, that file name overrides the one","\\t\\tgiven here with \'viminfo\'. Environment variables are","\\t\\texpanded when opening the file, not when setting the option.","\\t\\t\\t\\t\\t\\t\\t*viminfo-r*","\\tr\\tRemovable media. The argument is a string (up to the next","\\t\\t\',\'). This parameter can be given several times. Each","\\t\\tspecifies the start of a path for which no marks will be","\\t\\tstored. This is to avoid removable media. For MS-DOS you","\\t\\tcould use \\"ra:,rb:\\", for Amiga \\"rdf0:,rdf1:,rdf2:\\". You can","\\t\\talso use it for temp files, e.g., for Unix: \\"r/tmp\\". Case is","\\t\\tignored. Maximum length of each \'r\' argument is 50","\\t\\tcharacters.","\\t\\t\\t\\t\\t\\t\\t*viminfo-s*","\\ts\\tMaximum size of an item in Kbyte. If zero then registers are","\\t\\tnot saved. Currently only applies to registers. The default","\\t\\t\\"s10\\" will exclude registers with more than 10 Kbyte of text.","\\t\\tAlso see the \'<\' item above: line count limit."],"viminfofile":["string\\t(default: \\"\\")","\\t\\t\\tglobal","\\t\\t\\t{not available when compiled without the |+viminfo|","\\t\\t\\tfeature}","\\tWhen non-empty, overrides the file name used for viminfo.","\\tWhen equal to \\"NONE\\" no viminfo file will be read or written.","\\tThis option can be set with the |-i| command line flag. The |--clean|","\\tcommand line flag sets it to \\"NONE\\".","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."],"weirdinvert":["boolean\\t(default off)","\\t\\t\\tglobal","\\tThis option has the same effect as the \'t_xs\' terminal option.","\\tIt is provided for backwards compatibility with version 4.x.","\\tSetting \'weirdinvert\' has the effect of making \'t_xs\' non-empty, and","\\tvice versa. Has no effect when the GUI is running."],"wincolor":["string (default empty)","\\t\\t\\tlocal to window","\\tHighlight group name to use for this window instead of the Normal","\\tcolor |hl-Normal|."],"winptydll":["string\\t(default \\"winpty32.dll\\" or \\"winpty64.dll\\")","\\t\\t\\tglobal","\\t\\t\\t{only available when compiled with the |terminal|","\\t\\t\\tfeature on MS-Windows}","\\tSpecifies the name of the winpty shared library, used for the","\\t|:terminal| command. The default depends on whether was build as a","\\t32-bit or 64-bit executable. If not found, \\"winpty.dll\\" is tried as","\\ta fallback.","\\tEnvironment variables are expanded |:set_env|.","\\tThis option cannot be set from a |modeline| or in the |sandbox|, for","\\tsecurity reasons."]},"features":{"64":["bits)"],"acl":["|ACL| support"],"bsd":["BSD system (not macOS, use \\"mac\\" for that)."],"iconv":["Can use |iconv()| for conversion."],"+shellslash":["Can use backslashes in filenames (Windows)"],"clipboard":["|clipboard| provider is available."],"mac":["MacOS system."],"nvim":["This is Nvim."],"python2":["Legacy Vim |python2| interface. |has-python|"],"python3":["Legacy Vim |python3| interface. |has-python|"],"pythonx":["Legacy Vim |python_x| interface. |has-pythonx|"],"ttyin":["input is a terminal (tty)"],"ttyout":["output is a terminal (tty)"],"unix":["Unix system."],"vim_starting":["True during |startup|. "],"win32":["Windows system (32 or 64 bit)."],"win64":["Windows system (64 bit)."],"wsl":["WSL (Windows Subsystem for Linux) system"],"all_builtin_terms":["Compiled with all builtin terminals enabled."],"amiga":["Amiga version of Vim."],"arabic":["Compiled with Arabic support |Arabic|."],"arp":["Compiled with ARP support (Amiga)."],"autocmd":["Compiled with autocommand support. (always true)"],"autochdir":["Compiled with support for \'autochdir\'"],"autoservername":["Automatically enable |clientserver|"],"balloon_eval":["Compiled with |balloon-eval| support."],"balloon_multiline":["GUI supports multiline balloons."],"beos":["BeOS version of Vim."],"browse":["Compiled with |:browse| support, and browse() will","\\t\\t\\twork."],"browsefilter":["Compiled with support for |browsefilter|."],"builtin_terms":["Compiled with some builtin terminals."],"byte_offset":["Compiled with support for \'o\' in \'statusline\'"],"cindent":["Compiled with \'cindent\' support."],"clientserver":["Compiled with remote invocation support |clientserver|."],"clipboard_working":["Compiled with \'clipboard\' support and it can be used."],"cmdline_compl":["Compiled with |cmdline-completion| support."],"cmdline_hist":["Compiled with |cmdline-history| support."],"cmdline_info":["Compiled with \'showcmd\' and \'ruler\' support."],"comments":["Compiled with |\'comments\'| support."],"compatible":["Compiled to be very Vi compatible."],"conpty":["Platform where |ConPTY| can be used."],"cryptv":["Compiled with encryption support |encryption|."],"cscope":["Compiled with |cscope| support."],"cursorbind":["Compiled with |\'cursorbind\'| (always true)"],"debug":["Compiled with \\"DEBUG\\" defined."],"dialog_con":["Compiled with console dialog support."],"dialog_gui":["Compiled with GUI dialog support."],"diff":["Compiled with |vimdiff| and \'diff\' support."],"digraphs":["Compiled with support for digraphs."],"directx":["Compiled with support for DirectX and \'renderoptions\'."],"dnd":["Compiled with support for the \\"~ register |quote_~|."],"ebcdic":["Compiled on a machine with ebcdic character set."],"emacs_tags":["Compiled with support for Emacs tags."],"eval":["Compiled with expression evaluation support. Always"],"true,":["of course!"],"ex_extra":["|+ex_extra| (always true)"],"extra_search":["Compiled with support for |\'incsearch\'| and","\\t\\t\\t|\'hlsearch\'|"],"farsi":["Support for Farsi was removed |farsi|."],"file_in_path":["Compiled with support for |gf| and |<cfile>|"],"filterpipe":["When \'shelltemp\' is off pipes are used for shell"],"read/write/filter":["commands"],"find_in_path":["Compiled with support for include file searches","\\t\\t\\t|+find_in_path|."],"float":["Compiled with support for |Float|."],"fname_case":["Case in file names matters (for Amiga, MS-DOS, and"],"Windows":["this is not present)."],"folding":["Compiled with |folding| support."],"footer":["Compiled with GUI footer support. |gui-footer|"],"fork":["Compiled to use fork()/exec() instead of system()."],"gettext":["Compiled with message translation |multi-lang|"],"gui":["Compiled with GUI enabled."],"gui_athena":["Compiled with Athena GUI."],"gui_gnome":["Compiled with Gnome support (gui_gtk is also defined)."],"gui_gtk":["Compiled with GTK+ GUI (any version)."],"gui_gtk2":["Compiled with GTK+ 2 GUI (gui_gtk is also defined)."],"gui_gtk3":["Compiled with GTK+ 3 GUI (gui_gtk is also defined)."],"gui_mac":["Compiled with Macintosh GUI."],"gui_motif":["Compiled with Motif GUI."],"gui_photon":["Compiled with Photon GUI."],"gui_running":["Vim is running in the GUI, or it will start soon."],"gui_win32":["Compiled with MS Windows Win32 GUI."],"gui_win32s":["idem, and Win32s system being used (Windows 3.1)"],"hangul_input":["Compiled with Hangul input support. |hangul|"],"hpux":["HP-UX version of Vim."],"insert_expand":["Compiled with support for CTRL-X expansion commands in"],"Insert":["mode. (always true)"],"jumplist":["Compiled with |jumplist| support."],"keymap":["Compiled with \'keymap\' support."],"lambda":["Compiled with |lambda| support."],"langmap":["Compiled with \'langmap\' support."],"libcall":["Compiled with |libcall()| support."],"linebreak":["Compiled with \'linebreak\', \'breakat\', \'showbreak\' and"],"\'breakindent\'":["support."],"linux":["Linux version of Vim."],"lispindent":["Compiled with support for lisp indenting."],"listcmds":["Compiled with commands for the buffer list |:files|"],"and":["the argument list |arglist|.","special formats of \'titlestring\' and \'iconstring\'."],"localmap":["Compiled with local mappings and abbr. |:map-local|"],"lua":["Compiled with Lua interface |Lua|."],"macunix":["Synonym for osxdarwin"],"menu":["Compiled with support for |:menu|."],"mksession":["Compiled with support for |:mksession|."],"modify_fname":["Compiled with file name modifiers. |filename-modifiers|"],"(always":["true)","true)","true)"],"mouse":["Compiled with support mouse."],"mouse_dec":["Compiled with support for Dec terminal mouse."],"mouse_gpm":["Compiled with support for gpm (Linux console mouse)"],"mouse_gpm_enabled":["GPM mouse is working"],"mouse_netterm":["Compiled with support for netterm mouse."],"mouse_pterm":["Compiled with support for qnx pterm mouse."],"mouse_sysmouse":["Compiled with support for sysmouse (*BSD console mouse)"],"mouse_sgr":["Compiled with support for sgr mouse."],"mouse_urxvt":["Compiled with support for urxvt mouse."],"mouse_xterm":["Compiled with support for xterm mouse."],"mouseshape":["Compiled with support for \'mouseshape\'."],"multi_byte":["Compiled with support for \'encoding\' (always true)"],"multi_byte_encoding":["\'encoding\' is set to a multi-byte encoding."],"multi_byte_ime":["Compiled with support for IME input method."],"multi_lang":["Compiled with support for multiple languages."],"mzscheme":["Compiled with MzScheme interface |mzscheme|."],"netbeans_enabled":["Compiled with support for |netbeans| and connected."],"netbeans_intg":["Compiled with support for |netbeans|."],"num64":["Compiled with 64-bit |Number| support."],"ole":["Compiled with OLE automation support for Win32."],"osx":["Compiled for macOS cf. mac"],"osxdarwin":["Compiled for macOS, with |mac-darwin-feature|"],"packages":["Compiled with |packages| support."],"path_extra":["Compiled with up/downwards search in \'path\' and \'tags\'"],"perl":["Compiled with Perl interface."],"persistent_undo":["Compiled with support for persistent undo history."],"postscript":["Compiled with PostScript file printing."],"printer":["Compiled with |:hardcopy| support."],"profile":["Compiled with |:profile| support."],"python":["Python 2.x interface available. |has-python|"],"python_compiled":["Compiled with Python 2.x interface. |has-python|"],"python_dynamic":["Python 2.x interface is dynamically loaded. |has-python|"],"python3_compiled":["Compiled with Python 3.x interface. |has-python|"],"python3_dynamic":["Python 3.x interface is dynamically loaded. |has-python|"],"qnx":["QNX version of Vim."],"quickfix":["Compiled with |quickfix| support."],"reltime":["Compiled with |reltime()| support."],"rightleft":["Compiled with \'rightleft\' support."],"ruby":["Compiled with Ruby interface |ruby|."],"scrollbind":["Compiled with \'scrollbind\' support. (always true)"],"showcmd":["Compiled with \'showcmd\' support."],"signs":["Compiled with |:sign| support."],"smartindent":["Compiled with \'smartindent\' support."],"sound":["Compiled with sound support, e.g. `sound_playevent()`"],"spell":["Compiled with spell checking support |spell|."],"startuptime":["Compiled with |--startuptime| support."],"statusline":["Compiled with support for \'statusline\', \'rulerformat\'"],"sun":["SunOS version of Vim."],"sun_workshop":["Support for Sun |workshop| has been removed."],"syntax":["Compiled with syntax highlighting support |syntax|."],"syntax_items":["There are active syntax highlighting items for the"],"current":["buffer."],"system":["Compiled to use system() instead of fork()/exec()."],"tag_binary":["Compiled with binary searching in tags files","\\t\\t\\t|tag-binary-search|."],"tag_old_static":["Support for old static tags was removed, see","\\t\\t\\t|tag-old-static|."],"tcl":["Compiled with Tcl interface."],"termguicolors":["Compiled with true color in terminal support."],"terminal":["Compiled with |terminal| support."],"terminfo":["Compiled with terminfo instead of termcap."],"termresponse":["Compiled with support for |t_RV| and |v:termresponse|."],"textobjects":["Compiled with support for |text-objects|."],"textprop":["Compiled with support for |text-properties|."],"tgetent":["Compiled with tgetent support, able to use a termcap"],"or":["terminfo file."],"timers":["Compiled with |timer_start()| support."],"title":["Compiled with window title support |\'title\'|."],"toolbar":["Compiled with support for |gui-toolbar|."],"unnamedplus":["Compiled with support for \\"unnamedplus\\" in \'clipboard\'"],"user_commands":["User-defined commands. (always true)"],"vartabs":["Compiled with variable tabstop support |\'vartabstop\'|."],"vcon":["Win32: Virtual console support is working, can use"],"\'termguicolors\'.":["Also see |+vtp|."],"vertsplit":["Compiled with vertically split windows |:vsplit|."],"viminfo":["Compiled with viminfo support."],"vimscript-1":["Compiled Vim script version 1 support"],"vimscript-2":["Compiled Vim script version 2 support"],"vimscript-3":["Compiled Vim script version 3 support"],"virtualedit":["Compiled with \'virtualedit\' option. (always true)"],"visual":["Compiled with Visual mode. (always true)"],"visualextra":["Compiled with extra Visual mode commands. (always"],"true)":["|blockwise-operators|."],"vms":["VMS version of Vim."],"vreplace":["Compiled with |gR| and |gr| commands. (always true)"],"vtp":["Compiled for vcon support |+vtp| (check vcon to find"],"out":["if it works in the current console)."],"wildignore":["Compiled with \'wildignore\' option."],"wildmenu":["Compiled with \'wildmenu\' option."],"win16":["old version for MS-Windows 3.1 (always false)"],"win32unix":["Win32 version of Vim, using Unix files (Cygwin)"],"win95":["Win32 version for MS-Windows 95/98/ME (always false)"],"winaltkeys":["Compiled with \'winaltkeys\' option."],"windows":["Compiled with support for more than one window."],"writebackup":["Compiled with \'writebackup\' default on."],"xfontset":["Compiled with X fontset support |xfontset|."],"xim":["Compiled with X input method support |xim|."],"xpm":["Compiled with pixmap support."],"xpm_w32":["Compiled with pixmap support for Win32. (Only for"],"backward":["compatibility. Use \\"xpm\\" instead.)"],"xsmp":["Compiled with X session management support."],"xsmp_interact":["Compiled with interactive X session management support."],"xterm_clipboard":["Compiled with support for xterm clipboard."],"xterm_save":["Compiled with support for saving and restoring the"],"xterm":["screen."],"x11":["Compiled with X11 support."]},"expandKeywords":{"<cfile>":["file name under the cursor"],"<afile>":["autocmd file name"],"<abuf>":["autocmd buffer number (as a String!)"],"<amatch>":["autocmd matched name"],"<sfile>":["sourced script file or function name"],"<slnum>":["sourced script file line number"],"<cword>":["word under the cursor"],"<cWORD>":["WORD under the cursor"],"<client>":["the {clientid} of the last received message `server2client()`"]}}}');
25139
25140/***/ }),
25141/* 159 */
25142/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25143
25144"use strict";
25145
25146var __importDefault = (this && this.__importDefault) || function (mod) {
25147 return (mod && mod.__esModule) ? mod : { "default": mod };
25148};
25149Object.defineProperty(exports, "__esModule", ({ value: true }));
25150exports.getProvider = exports.useProvider = void 0;
25151var fuzzy_1 = __importDefault(__webpack_require__(160));
25152var providers = [];
25153function useProvider(p) {
25154 providers.push(p);
25155}
25156exports.useProvider = useProvider;
25157function getProvider() {
25158 return providers.reduce(function (pre, next) {
25159 return function (line, uri, position, word, invalidLength, items) {
25160 // 200 items is enough
25161 if (items.length > 200) {
25162 return items.slice(0, 200);
25163 }
25164 var newItems = next(line, uri, position)
25165 .filter(function (item) { return fuzzy_1.default(item.label, word) >= invalidLength; });
25166 return pre(line, uri, position, word, invalidLength, items.concat(newItems));
25167 };
25168 }, function (_line, _uri, _position, _word, _invalidLength, items) { return items; });
25169}
25170exports.getProvider = getProvider;
25171
25172
25173/***/ }),
25174/* 160 */
25175/***/ ((__unused_webpack_module, exports) => {
25176
25177"use strict";
25178
25179Object.defineProperty(exports, "__esModule", ({ value: true }));
25180function fuzzy(origin, query) {
25181 var score = 0;
25182 for (var qIdx = 0, oIdx = 0; qIdx < query.length && oIdx < origin.length; qIdx++) {
25183 var qc = query.charAt(qIdx).toLowerCase();
25184 for (; oIdx < origin.length; oIdx++) {
25185 var oc = origin.charAt(oIdx).toLowerCase();
25186 if (qc === oc) {
25187 score++;
25188 oIdx++;
25189 break;
25190 }
25191 }
25192 }
25193 return score;
25194}
25195exports.default = fuzzy;
25196
25197
25198/***/ }),
25199/* 161 */
25200/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25201
25202"use strict";
25203
25204Object.defineProperty(exports, "__esModule", ({ value: true }));
25205var patterns_1 = __webpack_require__(72);
25206var util_1 = __webpack_require__(66);
25207var builtin_1 = __webpack_require__(77);
25208var provider_1 = __webpack_require__(159);
25209function provider(line) {
25210 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, line)) {
25211 return builtin_1.builtinDocs.getPredefinedVimVariables();
25212 }
25213 return [];
25214}
25215provider_1.useProvider(provider);
25216
25217
25218/***/ }),
25219/* 162 */
25220/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
25221
25222"use strict";
25223
25224Object.defineProperty(exports, "__esModule", ({ value: true }));
25225var patterns_1 = __webpack_require__(72);
25226var builtin_1 = __webpack_require__(77);
25227var provider_1 = __webpack_require__(159);
25228function provider(line) {
25229 if (patterns_1.colorschemePattern.test(line)) {
25230 return builtin_1.builtinDocs.getColorschemes();
25231 }
25232 return [];
25233}
25234provider_1.useProvider(provider);
25235
25236
25237/***/ }),
25238/* 163 */
25239/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25240
25241"use strict";
25242
25243var __importDefault = (this && this.__importDefault) || function (mod) {
25244 return (mod && mod.__esModule) ? mod : { "default": mod };
25245};
25246Object.defineProperty(exports, "__esModule", ({ value: true }));
25247var patterns_1 = __webpack_require__(72);
25248var util_1 = __webpack_require__(66);
25249var builtin_1 = __webpack_require__(77);
25250var config_1 = __importDefault(__webpack_require__(73));
25251var snippets_1 = __webpack_require__(164);
25252var provider_1 = __webpack_require__(159);
25253function provider(line) {
25254 if (util_1.isSomeMatchPattern(patterns_1.commandPattern, line)) {
25255 // only return snippets when snippetSupport is true
25256 if (config_1.default.snippetSupport) {
25257 return builtin_1.builtinDocs.getVimCommands().concat(snippets_1.commandSnippets);
25258 }
25259 return builtin_1.builtinDocs.getVimCommands();
25260 }
25261 return [];
25262}
25263provider_1.useProvider(provider);
25264
25265
25266/***/ }),
25267/* 164 */
25268/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25269
25270"use strict";
25271
25272var __assign = (this && this.__assign) || function () {
25273 __assign = Object.assign || function(t) {
25274 for (var s, i = 1, n = arguments.length; i < n; i++) {
25275 s = arguments[i];
25276 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25277 t[p] = s[p];
25278 }
25279 return t;
25280 };
25281 return __assign.apply(this, arguments);
25282};
25283Object.defineProperty(exports, "__esModule", ({ value: true }));
25284exports.commandSnippets = void 0;
25285var vscode_languageserver_1 = __webpack_require__(2);
25286var util_1 = __webpack_require__(66);
25287exports.commandSnippets = [
25288 {
25289 label: "func",
25290 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25291 insertText: [
25292 "function ${1:Name}(${2}) ${3:abort}",
25293 "\t${0}",
25294 "endfunction",
25295 ].join("\n"),
25296 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25297 },
25298 {
25299 label: "tryc",
25300 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25301 insertText: [
25302 "try",
25303 "\t${1}",
25304 "catch /.*/",
25305 "\t${0}",
25306 "endtry",
25307 ].join("\n"),
25308 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25309 },
25310 {
25311 label: "tryf",
25312 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25313 insertText: [
25314 "try",
25315 "\t${1}",
25316 "finally",
25317 "\t${0}",
25318 "endtry",
25319 ].join("\n"),
25320 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25321 },
25322 {
25323 label: "trycf",
25324 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25325 insertText: [
25326 "try",
25327 "\t${1}",
25328 "catch /.*/",
25329 "\t${2}",
25330 "finally",
25331 "\t${0}",
25332 "endtry",
25333 ].join("\n"),
25334 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25335 },
25336 {
25337 label: "aug",
25338 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25339 insertText: [
25340 "augroup ${1:Start}",
25341 "\tautocmd!",
25342 "\t${0}",
25343 "augroup END",
25344 ].join("\n"),
25345 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25346 },
25347 {
25348 label: "aut",
25349 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25350 insertText: [
25351 "autocmd ${1:group-event} ${2:pat} ${3:once} ${4:nested} ${5:cmd}",
25352 ].join("\n"),
25353 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25354 },
25355 {
25356 label: "if",
25357 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25358 insertText: [
25359 "if ${1:condition}",
25360 "\t${0}",
25361 "endif",
25362 ].join("\n"),
25363 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25364 },
25365 {
25366 label: "cmd",
25367 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25368 insertText: [
25369 "command! ${1:attr} ${2:cmd} ${3:rep} ${0}",
25370 ].join("\n"),
25371 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25372 },
25373 {
25374 label: "hi",
25375 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
25376 insertText: [
25377 "highlight ${1:default} ${2:group-name} ${3:args} ${0}",
25378 ].join("\n"),
25379 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25380 },
25381].map(function (item) { return (__assign(__assign({}, item), { documentation: util_1.markupSnippets(item.insertText) })); });
25382
25383
25384/***/ }),
25385/* 165 */
25386/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25387
25388"use strict";
25389
25390var __assign = (this && this.__assign) || function () {
25391 __assign = Object.assign || function(t) {
25392 for (var s, i = 1, n = arguments.length; i < n; i++) {
25393 s = arguments[i];
25394 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25395 t[p] = s[p];
25396 }
25397 return t;
25398 };
25399 return __assign.apply(this, arguments);
25400};
25401Object.defineProperty(exports, "__esModule", ({ value: true }));
25402var patterns_1 = __webpack_require__(72);
25403var builtin_1 = __webpack_require__(77);
25404var provider_1 = __webpack_require__(159);
25405function provider(line) {
25406 if (patterns_1.expandPattern[0].test(line)) {
25407 return builtin_1.builtinDocs.getExpandKeywords().map(function (item) {
25408 return __assign(__assign({}, item), { insertText: item.insertText.slice(1) });
25409 });
25410 }
25411 else if (patterns_1.expandPattern[1].test(line)) {
25412 return builtin_1.builtinDocs.getExpandKeywords();
25413 }
25414 return [];
25415}
25416provider_1.useProvider(provider);
25417
25418
25419/***/ }),
25420/* 166 */
25421/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25422
25423"use strict";
25424
25425var __assign = (this && this.__assign) || function () {
25426 __assign = Object.assign || function(t) {
25427 for (var s, i = 1, n = arguments.length; i < n; i++) {
25428 s = arguments[i];
25429 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25430 t[p] = s[p];
25431 }
25432 return t;
25433 };
25434 return __assign.apply(this, arguments);
25435};
25436var __importDefault = (this && this.__importDefault) || function (mod) {
25437 return (mod && mod.__esModule) ? mod : { "default": mod };
25438};
25439Object.defineProperty(exports, "__esModule", ({ value: true }));
25440var patterns_1 = __webpack_require__(72);
25441var util_1 = __webpack_require__(66);
25442var builtin_1 = __webpack_require__(77);
25443var config_1 = __importDefault(__webpack_require__(73));
25444var workspaces_1 = __webpack_require__(167);
25445var provider_1 = __webpack_require__(159);
25446function provider(line, uri, position) {
25447 if (/\b(g:|s:|<SID>)\w*$/.test(line)) {
25448 var list = [];
25449 if (/\bg:\w*$/.test(line)) {
25450 list = workspaces_1.workspace.getFunctionItems(uri)
25451 .filter(function (item) { return /^g:/.test(item.label); });
25452 }
25453 else if (/\b(s:|<SID>)\w*$/i.test(line)) {
25454 list = workspaces_1.workspace.getFunctionItems(uri)
25455 .filter(function (item) { return /^s:/.test(item.label); });
25456 }
25457 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
25458 }
25459 else if (/\B:\w*$/.test(line)) {
25460 return workspaces_1.workspace.getFunctionItems(uri)
25461 .filter(function (item) { return /:/.test(item.label); })
25462 .map(function (item) {
25463 var m = line.match(/:[^:]*$/);
25464 return __assign(__assign({}, item), {
25465 // delete the `:` symbol
25466 textEdit: {
25467 range: {
25468 start: {
25469 line: position.line,
25470 character: line.length - m[0].length,
25471 },
25472 end: {
25473 line: position.line,
25474 character: line.length - m[0].length + 1,
25475 },
25476 },
25477 newText: item.insertText,
25478 } });
25479 });
25480 }
25481 else if (util_1.isSomeMatchPattern(patterns_1.notFunctionPattern, line)) {
25482 return [];
25483 }
25484 return workspaces_1.workspace.getFunctionItems(uri)
25485 .filter(function (item) {
25486 return !builtin_1.builtinDocs.isBuiltinFunction(item.label);
25487 })
25488 .concat(builtin_1.builtinDocs.getBuiltinVimFunctions());
25489}
25490provider_1.useProvider(provider);
25491
25492
25493/***/ }),
25494/* 167 */
25495/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
25496
25497"use strict";
25498
25499var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
25500 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
25501 return new (P || (P = Promise))(function (resolve, reject) {
25502 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25503 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
25504 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
25505 step((generator = generator.apply(thisArg, _arguments || [])).next());
25506 });
25507};
25508var __generator = (this && this.__generator) || function (thisArg, body) {
25509 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
25510 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25511 function verb(n) { return function (v) { return step([n, v]); }; }
25512 function step(op) {
25513 if (f) throw new TypeError("Generator is already executing.");
25514 while (_) try {
25515 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
25516 if (y = 0, t) op = [op[0] & 2, t.value];
25517 switch (op[0]) {
25518 case 0: case 1: t = op; break;
25519 case 4: _.label++; return { value: op[1], done: false };
25520 case 5: _.label++; y = op[1]; op = [0]; continue;
25521 case 7: op = _.ops.pop(); _.trys.pop(); continue;
25522 default:
25523 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
25524 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
25525 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
25526 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
25527 if (t[2]) _.ops.pop();
25528 _.trys.pop(); continue;
25529 }
25530 op = body.call(thisArg, _);
25531 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
25532 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
25533 }
25534};
25535var __importDefault = (this && this.__importDefault) || function (mod) {
25536 return (mod && mod.__esModule) ? mod : { "default": mod };
25537};
25538Object.defineProperty(exports, "__esModule", ({ value: true }));
25539exports.workspace = exports.Workspace = void 0;
25540var vscode_uri_1 = __webpack_require__(168);
25541var vscode_languageserver_1 = __webpack_require__(2);
25542var util_1 = __webpack_require__(66);
25543var buffer_1 = __webpack_require__(169);
25544var config_1 = __importDefault(__webpack_require__(73));
25545// import logger from '../common/logger';
25546// const log = logger('workspace')
25547var Workspace = /** @class */ (function () {
25548 function Workspace() {
25549 this.buffers = {};
25550 }
25551 Workspace.prototype.isExistsBuffer = function (uri) {
25552 if (this.buffers[uri]) {
25553 return true;
25554 }
25555 return false;
25556 };
25557 Workspace.prototype.updateBuffer = function (uri, node) {
25558 return __awaiter(this, void 0, void 0, function () {
25559 var projectRoot;
25560 return __generator(this, function (_a) {
25561 switch (_a.label) {
25562 case 0:
25563 if (!node) {
25564 return [2 /*return*/];
25565 }
25566 if (!this.buffers[uri]) return [3 /*break*/, 1];
25567 this.buffers[uri].updateBufferByNode(node);
25568 return [3 /*break*/, 3];
25569 case 1: return [4 /*yield*/, util_1.findProjectRoot(vscode_uri_1.URI.parse(uri).fsPath, config_1.default.indexes.projectRootPatterns)];
25570 case 2:
25571 projectRoot = _a.sent();
25572 if (config_1.default.vimruntime.trim() !== '' && projectRoot.indexOf(config_1.default.vimruntime) === 0) {
25573 projectRoot = config_1.default.vimruntime;
25574 }
25575 this.buffers[uri] = new buffer_1.Buffer(uri, projectRoot, node);
25576 _a.label = 3;
25577 case 3: return [2 /*return*/];
25578 }
25579 });
25580 });
25581 };
25582 Workspace.prototype.getBufferByUri = function (uri) {
25583 return this.buffers[uri];
25584 };
25585 Workspace.prototype.getFunctionItems = function (uri) {
25586 return this.getScriptFunctionItems(uri).concat(this.getGlobalFunctionItems(uri));
25587 };
25588 Workspace.prototype.getIdentifierItems = function (uri, line) {
25589 return this.getLocalIdentifierItems(uri, line)
25590 .concat(this.getGlobalIdentifierItems(uri));
25591 };
25592 Workspace.prototype.getLocations = function (name, uri, position, locationType) {
25593 var isFunArg = false;
25594 var res = [];
25595 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
25596 res = this.getGlobalLocation(name, uri, position, locationType);
25597 }
25598 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
25599 // get function args references first
25600 res = this.getFunArgLocation(name, uri, position, locationType);
25601 if (res.length) {
25602 isFunArg = true;
25603 }
25604 else {
25605 res = this.getLocalLocation(name, uri, position, locationType);
25606 if (!res.length) {
25607 res = this.getGlobalLocation(name, uri, position, locationType);
25608 }
25609 }
25610 }
25611 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25612 var names = [name];
25613 if (/^<SID>/.test(name)) {
25614 names.push(name.replace(/^<SID>/, "s:"));
25615 }
25616 else {
25617 names.push(name.replace(/^s:/, "<SID>"));
25618 }
25619 res = this.getScriptLocation(names, uri, position, locationType);
25620 }
25621 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25622 res = this.getLocalLocation(name, uri, position, locationType);
25623 }
25624 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25625 res = this.getAIdentifierLocation(name, uri, position, locationType);
25626 }
25627 if (res.length) {
25628 res = res.sort(function (a, b) {
25629 if (a.range.start.line === b.range.start.line) {
25630 return a.range.start.character - b.range.start.character;
25631 }
25632 return a.range.start.line - b.range.start.line;
25633 });
25634 }
25635 return {
25636 isFunArg: isFunArg,
25637 locations: res,
25638 };
25639 };
25640 Workspace.prototype.getLocationsByUri = function (name, uri, position, locationType) {
25641 var isFunArg = false;
25642 var res = [];
25643 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name) && this.buffers[uri]) {
25644 res = this.getGlobalLocationByUri(name, uri, position, locationType);
25645 }
25646 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25647 // get function args references first
25648 res = this.getFunArgLocation(name, uri, position, locationType);
25649 if (res.length) {
25650 isFunArg = true;
25651 }
25652 else {
25653 res = this.getLocalLocation(name, uri, position, locationType);
25654 if (!res.length) {
25655 res = this.getGlobalLocationByUri(name, uri, position, locationType);
25656 }
25657 }
25658 }
25659 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25660 var names = [name];
25661 if (/^<SID>/.test(name)) {
25662 names.push(name.replace(/^<SID>/, "s:"));
25663 }
25664 else {
25665 names.push(name.replace(/^s:/, "<SID>"));
25666 }
25667 res = this.getScriptLocation(names, uri, position, locationType);
25668 }
25669 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25670 res = this.getLocalLocation(name, uri, position, locationType);
25671 }
25672 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
25673 res = this.getAIdentifierLocation(name, uri, position, locationType);
25674 }
25675 if (res.length) {
25676 res = res.sort(function (a, b) {
25677 if (a.range.start.line === b.range.start.line) {
25678 return a.range.start.character - b.range.start.character;
25679 }
25680 return a.range.start.line - b.range.start.line;
25681 });
25682 }
25683 return {
25684 isFunArg: isFunArg,
25685 locations: res,
25686 };
25687 };
25688 Workspace.prototype.filterDuplicate = function (items) {
25689 var tmp = {};
25690 return items.reduce(function (res, next) {
25691 if (!tmp[next.label]) {
25692 tmp[next.label] = true;
25693 res.push(next);
25694 }
25695 return res;
25696 }, []);
25697 };
25698 Workspace.prototype.getGlobalFunctionItems = function (uri) {
25699 var buf = this.buffers[uri];
25700 if (!buf) {
25701 return [];
25702 }
25703 var buffers = config_1.default.suggest.fromRuntimepath
25704 ? Object.values(this.buffers)
25705 : Object.values(this.buffers).filter(function (b) {
25706 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
25707 return true;
25708 }
25709 return b.isBelongToWorkdir(buf.getProjectRoot());
25710 });
25711 return this.filterDuplicate(buffers.reduce(function (res, cur) {
25712 return res.concat(cur.getGlobalFunctionItems());
25713 }, []));
25714 };
25715 Workspace.prototype.getScriptFunctionItems = function (uri) {
25716 if (!this.buffers[uri]) {
25717 return [];
25718 }
25719 return this.buffers[uri].getScriptFunctionItems();
25720 };
25721 Workspace.prototype.getGlobalIdentifierItems = function (uri) {
25722 var buf = this.buffers[uri];
25723 if (!buf) {
25724 return [];
25725 }
25726 var buffers = config_1.default.suggest.fromRuntimepath
25727 ? Object.values(this.buffers)
25728 : Object.values(this.buffers).filter(function (b) {
25729 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
25730 return true;
25731 }
25732 return b.isBelongToWorkdir(buf.getProjectRoot());
25733 });
25734 return this.filterDuplicate(buffers.reduce(function (res, cur) {
25735 return res
25736 .concat(cur.getGlobalIdentifierItems())
25737 .concat(cur.getEnvItems());
25738 }, []));
25739 };
25740 Workspace.prototype.getLocalIdentifierItems = function (uri, line) {
25741 if (!this.buffers[uri]) {
25742 return [];
25743 }
25744 var buf = this.buffers[uri];
25745 return buf.getFunctionLocalIdentifierItems(line)
25746 .concat(buf.getLocalIdentifierItems());
25747 };
25748 Workspace.prototype.getLocation = function (uri, item) {
25749 return {
25750 uri: uri,
25751 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1), vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1 + item.name.length)),
25752 };
25753 };
25754 Workspace.prototype.getGlobalLocation = function (name,
25755 // tslint:disable-next-line: variable-name
25756 _uri,
25757 // tslint:disable-next-line: variable-name
25758 position, locationType) {
25759 var _this = this;
25760 return Object.keys(this.buffers).reduce(function (pre, uri) {
25761 return pre.concat(_this.getGlobalLocationByUri(name, uri, position, locationType));
25762 }, []);
25763 };
25764 Workspace.prototype.getGlobalLocationByUri = function (name,
25765 // tslint:disable-next-line: variable-name
25766 uri,
25767 // tslint:disable-next-line: variable-name
25768 _position, locationType) {
25769 var _this = this;
25770 var res = [];
25771 var tmp = [];
25772 var list = [];
25773 var globalFunctions = locationType === "definition"
25774 ? this.buffers[uri].getGlobalFunctions()
25775 : this.buffers[uri].getGlobalFunctionRefs();
25776 Object.keys(globalFunctions).forEach(function (fname) {
25777 if (fname === name) {
25778 res = res.concat(globalFunctions[fname].map(function (item) { return _this.getLocation(uri, item); }));
25779 }
25780 });
25781 var identifiers = locationType === "definition"
25782 ? this.buffers[uri].getGlobalIdentifiers()
25783 : this.buffers[uri].getGlobalIdentifierRefs();
25784 Object.keys(identifiers).forEach(function (fname) {
25785 if (fname === name) {
25786 tmp = tmp.concat(identifiers[fname].map(function (item) { return _this.getLocation(uri, item); }));
25787 }
25788 });
25789 // filter function local variables
25790 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
25791 var glFunctions = this.buffers[uri].getGlobalFunctions();
25792 var scriptFunctions = this.buffers[uri].getScriptFunctions();
25793 var funList_1 = Object.values(glFunctions).concat(Object.values(scriptFunctions)).reduce(function (aur, fs) { return aur.concat(fs); }, []);
25794 tmp.forEach(function (l) {
25795 if (!funList_1.some(function (fun) {
25796 return fun.startLine - 1 < l.range.start.line && l.range.start.line < fun.endLine - 1;
25797 })) {
25798 list.push(l);
25799 }
25800 });
25801 }
25802 else {
25803 list = tmp;
25804 }
25805 res = res.concat(list);
25806 return res;
25807 };
25808 Workspace.prototype.getScriptLocation = function (names, uri,
25809 // tslint:disable-next-line: variable-name
25810 _position, locationType) {
25811 var _this = this;
25812 var res = [];
25813 if (!this.buffers[uri]) {
25814 return res;
25815 }
25816 var functions = locationType === "definition"
25817 ? this.buffers[uri].getScriptFunctions()
25818 : this.buffers[uri].getScriptFunctionRefs();
25819 Object.keys(functions).forEach(function (fname) {
25820 var idx = names.indexOf(fname);
25821 if (idx !== -1) {
25822 res = res.concat(functions[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
25823 }
25824 });
25825 var identifiers = locationType === "definition"
25826 ? this.buffers[uri].getLocalIdentifiers()
25827 : this.buffers[uri].getLocalIdentifierRefs();
25828 Object.keys(identifiers).forEach(function (fname) {
25829 var idx = names.indexOf(fname);
25830 if (idx !== -1) {
25831 res = res.concat(identifiers[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
25832 }
25833 });
25834 return res;
25835 };
25836 Workspace.prototype.getLocalLocation = function (name, uri, position, locationType) {
25837 var _this = this;
25838 var list = [];
25839 if (!this.buffers[uri]) {
25840 return list;
25841 }
25842 var vimLineNum = position.line + 1;
25843 var startLine = -1;
25844 var endLine = -1;
25845 // get function args completion items
25846 []
25847 .concat(Object
25848 .values(this.buffers[uri].getGlobalFunctions())
25849 .reduce(function (res, next) { return res.concat(next); }, []))
25850 .concat(Object
25851 .values(this.buffers[uri].getScriptFunctions())
25852 .reduce(function (res, next) { return res.concat(next); }, []))
25853 .forEach(function (fun) {
25854 if (fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
25855 startLine = fun.startLine;
25856 endLine = fun.endLine;
25857 }
25858 });
25859 if (startLine !== -1 && endLine !== -1) {
25860 var globalVariables_1 = locationType === "definition"
25861 ? this.buffers[uri].getGlobalIdentifiers()
25862 : this.buffers[uri].getGlobalIdentifierRefs();
25863 Object.keys(globalVariables_1).some(function (key) {
25864 if (key === name) {
25865 globalVariables_1[key].forEach(function (item) {
25866 if (startLine < item.startLine && item.startLine < endLine) {
25867 list.push(_this.getLocation(uri, item));
25868 }
25869 });
25870 return true;
25871 }
25872 return false;
25873 });
25874 var localVariables_1 = locationType === "definition"
25875 ? this.buffers[uri].getLocalIdentifiers()
25876 : this.buffers[uri].getLocalIdentifierRefs();
25877 Object.keys(localVariables_1).some(function (key) {
25878 if (key === name) {
25879 localVariables_1[key].forEach(function (item) {
25880 if (startLine < item.startLine && item.startLine < endLine) {
25881 list.push(_this.getLocation(uri, item));
25882 }
25883 });
25884 return true;
25885 }
25886 return false;
25887 });
25888 }
25889 return list;
25890 };
25891 Workspace.prototype.getAIdentifierLocation = function (name, uri, position, locationType) {
25892 var res = [];
25893 if (!this.buffers[uri]) {
25894 return res;
25895 }
25896 if (locationType === "definition") {
25897 var flist_1 = [];
25898 var globalFunctions_1 = this.buffers[uri].getGlobalFunctions();
25899 Object.keys(globalFunctions_1).forEach(function (fname) {
25900 globalFunctions_1[fname].forEach(function (item) {
25901 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
25902 flist_1.push(item);
25903 }
25904 });
25905 });
25906 var scriptFunctions_1 = this.buffers[uri].getScriptFunctions();
25907 Object.keys(scriptFunctions_1).forEach(function (fname) {
25908 scriptFunctions_1[fname].forEach(function (item) {
25909 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
25910 flist_1.push(item);
25911 }
25912 });
25913 });
25914 if (flist_1.length) {
25915 var n_1 = name.slice(2);
25916 return flist_1.filter(function (item) { return item.args && item.args.some(function (m) { return m.value === n_1; }); })
25917 .map(function (item) {
25918 var startLine = item.startLine - 1;
25919 var startCol = item.startCol - 1;
25920 var endCol = item.startCol - 1;
25921 item.args.some(function (arg) {
25922 if (arg.value === n_1) {
25923 startCol = arg.pos.col - 1;
25924 endCol = startCol + n_1.length;
25925 return true;
25926 }
25927 return false;
25928 });
25929 return {
25930 uri: uri,
25931 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
25932 };
25933 });
25934 }
25935 }
25936 else {
25937 var flist_2 = [];
25938 var globalFunctions_2 = this.buffers[uri].getGlobalFunctions();
25939 Object.keys(globalFunctions_2).forEach(function (fname) {
25940 globalFunctions_2[fname].forEach(function (item) {
25941 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
25942 flist_2.push(item);
25943 }
25944 });
25945 });
25946 var scriptFunctions_2 = this.buffers[uri].getScriptFunctions();
25947 Object.keys(scriptFunctions_2).forEach(function (fname) {
25948 scriptFunctions_2[fname].forEach(function (item) {
25949 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
25950 flist_2.push(item);
25951 }
25952 });
25953 });
25954 if (flist_2.length) {
25955 var identifiers_1 = this.buffers[uri].getLocalIdentifierRefs();
25956 Object.keys(identifiers_1).forEach(function (key) {
25957 if (key === name) {
25958 identifiers_1[name].forEach(function (item) {
25959 flist_2.forEach(function (fitem) {
25960 if (fitem.startLine < item.startLine && item.startLine < fitem.endLine) {
25961 res.push({
25962 uri: uri,
25963 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1), vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1 + item.name.length)),
25964 });
25965 }
25966 });
25967 });
25968 }
25969 });
25970 }
25971 }
25972 return res;
25973 };
25974 Workspace.prototype.getFunArgLocation = function (name, uri, position, locationType) {
25975 var res = [];
25976 if (!this.buffers[uri]) {
25977 return res;
25978 }
25979 if (locationType === "references") {
25980 var globalFunctions = this.buffers[uri].getGlobalFunctions();
25981 var scriptFunctions = this.buffers[uri].getScriptFunctions();
25982 var startLine_1 = -1;
25983 var endLine_1 = -1;
25984 Object.values(globalFunctions).forEach(function (fitems) {
25985 fitems.forEach(function (fitem) {
25986 fitem.args.forEach(function (arg) {
25987 var pos = arg.pos;
25988 if (pos) {
25989 if (pos.lnum === position.line + 1 && arg.value === name) {
25990 startLine_1 = fitem.startLine;
25991 endLine_1 = fitem.endLine;
25992 }
25993 }
25994 });
25995 });
25996 });
25997 if (startLine_1 === -1 && endLine_1 === -1) {
25998 Object.values(scriptFunctions).forEach(function (fitems) {
25999 fitems.forEach(function (fitem) {
26000 fitem.args.forEach(function (arg) {
26001 var pos = arg.pos;
26002 if (pos) {
26003 if (pos.lnum === position.line + 1 && arg.value === name) {
26004 startLine_1 = fitem.startLine;
26005 endLine_1 = fitem.endLine;
26006 }
26007 }
26008 });
26009 });
26010 });
26011 }
26012 if (startLine_1 !== -1 && endLine_1 !== -1) {
26013 var identifiers_2 = this.buffers[uri].getLocalIdentifierRefs();
26014 Object.keys(identifiers_2).forEach(function (key) {
26015 if (key === "a:" + name) {
26016 identifiers_2[key].forEach(function (item) {
26017 if (startLine_1 < item.startLine && item.startLine < endLine_1) {
26018 res.push({
26019 uri: uri,
26020 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1), vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1 + item.name.length)),
26021 });
26022 }
26023 });
26024 }
26025 });
26026 }
26027 }
26028 else {
26029 var flist_3 = [];
26030 var globalFunctions_3 = this.buffers[uri].getGlobalFunctions();
26031 Object.keys(globalFunctions_3).forEach(function (fname) {
26032 globalFunctions_3[fname].forEach(function (item) {
26033 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
26034 flist_3.push(item);
26035 }
26036 });
26037 });
26038 var scriptFunctions_3 = this.buffers[uri].getScriptFunctions();
26039 Object.keys(scriptFunctions_3).forEach(function (fname) {
26040 scriptFunctions_3[fname].forEach(function (item) {
26041 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
26042 flist_3.push(item);
26043 }
26044 });
26045 });
26046 if (flist_3.length) {
26047 return flist_3.filter(function (item) { return item.args && item.args.some(function (n) { return n.value === name; }); })
26048 .map(function (item) {
26049 var startLine = item.startLine - 1;
26050 var startCol = item.startCol - 1;
26051 var endCol = item.startCol - 1;
26052 item.args.some(function (arg) {
26053 if (arg.value === name) {
26054 startCol = arg.pos.col - 1;
26055 endCol = startCol + name.length;
26056 return true;
26057 }
26058 return false;
26059 });
26060 return {
26061 uri: uri,
26062 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
26063 };
26064 });
26065 }
26066 }
26067 return res;
26068 };
26069 return Workspace;
26070}());
26071exports.Workspace = Workspace;
26072exports.workspace = new Workspace();
26073
26074
26075/***/ }),
26076/* 168 */
26077/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
26078
26079"use strict";
26080__webpack_require__.r(__webpack_exports__);
26081/* harmony export */ __webpack_require__.d(__webpack_exports__, {
26082/* harmony export */ "URI": () => (/* binding */ URI),
26083/* harmony export */ "Utils": () => (/* binding */ Utils)
26084/* harmony export */ });
26085var LIB;LIB=(()=>{"use strict";var t={470:t=>{function e(t){if("string"!=typeof t)throw new TypeError("Path must be a string. Received "+JSON.stringify(t))}function r(t,e){for(var r,n="",o=0,i=-1,a=0,h=0;h<=t.length;++h){if(h<t.length)r=t.charCodeAt(h);else{if(47===r)break;r=47}if(47===r){if(i===h-1||1===a);else if(i!==h-1&&2===a){if(n.length<2||2!==o||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var s=n.lastIndexOf("/");if(s!==n.length-1){-1===s?(n="",o=0):o=(n=n.slice(0,s)).length-1-n.lastIndexOf("/"),i=h,a=0;continue}}else if(2===n.length||1===n.length){n="",o=0,i=h,a=0;continue}e&&(n.length>0?n+="/..":n="..",o=2)}else n.length>0?n+="/"+t.slice(i+1,h):n=t.slice(i+1,h),o=h-i-1;i=h,a=0}else 46===r&&-1!==a?++a:a=-1}return n}var n={resolve:function(){for(var t,n="",o=!1,i=arguments.length-1;i>=-1&&!o;i--){var a;i>=0?a=arguments[i]:(void 0===t&&(t=process.cwd()),a=t),e(a),0!==a.length&&(n=a+"/"+n,o=47===a.charCodeAt(0))}return n=r(n,!o),o?n.length>0?"/"+n:"/":n.length>0?n:"."},normalize:function(t){if(e(t),0===t.length)return".";var n=47===t.charCodeAt(0),o=47===t.charCodeAt(t.length-1);return 0!==(t=r(t,!n)).length||n||(t="."),t.length>0&&o&&(t+="/"),n?"/"+t:t},isAbsolute:function(t){return e(t),t.length>0&&47===t.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var t,r=0;r<arguments.length;++r){var o=arguments[r];e(o),o.length>0&&(void 0===t?t=o:t+="/"+o)}return void 0===t?".":n.normalize(t)},relative:function(t,r){if(e(t),e(r),t===r)return"";if((t=n.resolve(t))===(r=n.resolve(r)))return"";for(var o=1;o<t.length&&47===t.charCodeAt(o);++o);for(var i=t.length,a=i-o,h=1;h<r.length&&47===r.charCodeAt(h);++h);for(var s=r.length-h,f=a<s?a:s,u=-1,c=0;c<=f;++c){if(c===f){if(s>f){if(47===r.charCodeAt(h+c))return r.slice(h+c+1);if(0===c)return r.slice(h+c)}else a>f&&(47===t.charCodeAt(o+c)?u=c:0===c&&(u=0));break}var l=t.charCodeAt(o+c);if(l!==r.charCodeAt(h+c))break;47===l&&(u=c)}var p="";for(c=o+u+1;c<=i;++c)c!==i&&47!==t.charCodeAt(c)||(0===p.length?p+="..":p+="/..");return p.length>0?p+r.slice(h+u):(h+=u,47===r.charCodeAt(h)&&++h,r.slice(h))},_makeLong:function(t){return t},dirname:function(t){if(e(t),0===t.length)return".";for(var r=t.charCodeAt(0),n=47===r,o=-1,i=!0,a=t.length-1;a>=1;--a)if(47===(r=t.charCodeAt(a))){if(!i){o=a;break}}else i=!1;return-1===o?n?"/":".":n&&1===o?"//":t.slice(0,o)},basename:function(t,r){if(void 0!==r&&"string"!=typeof r)throw new TypeError('"ext" argument must be a string');e(t);var n,o=0,i=-1,a=!0;if(void 0!==r&&r.length>0&&r.length<=t.length){if(r.length===t.length&&r===t)return"";var h=r.length-1,s=-1;for(n=t.length-1;n>=0;--n){var f=t.charCodeAt(n);if(47===f){if(!a){o=n+1;break}}else-1===s&&(a=!1,s=n+1),h>=0&&(f===r.charCodeAt(h)?-1==--h&&(i=n):(h=-1,i=s))}return o===i?i=s:-1===i&&(i=t.length),t.slice(o,i)}for(n=t.length-1;n>=0;--n)if(47===t.charCodeAt(n)){if(!a){o=n+1;break}}else-1===i&&(a=!1,i=n+1);return-1===i?"":t.slice(o,i)},extname:function(t){e(t);for(var r=-1,n=0,o=-1,i=!0,a=0,h=t.length-1;h>=0;--h){var s=t.charCodeAt(h);if(47!==s)-1===o&&(i=!1,o=h+1),46===s?-1===r?r=h:1!==a&&(a=1):-1!==r&&(a=-1);else if(!i){n=h+1;break}}return-1===r||-1===o||0===a||1===a&&r===o-1&&r===n+1?"":t.slice(r,o)},format:function(t){if(null===t||"object"!=typeof t)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof t);return function(t,e){var r=e.dir||e.root,n=e.base||(e.name||"")+(e.ext||"");return r?r===e.root?r+n:r+"/"+n:n}(0,t)},parse:function(t){e(t);var r={root:"",dir:"",base:"",ext:"",name:""};if(0===t.length)return r;var n,o=t.charCodeAt(0),i=47===o;i?(r.root="/",n=1):n=0;for(var a=-1,h=0,s=-1,f=!0,u=t.length-1,c=0;u>=n;--u)if(47!==(o=t.charCodeAt(u)))-1===s&&(f=!1,s=u+1),46===o?-1===a?a=u:1!==c&&(c=1):-1!==a&&(c=-1);else if(!f){h=u+1;break}return-1===a||-1===s||0===c||1===c&&a===s-1&&a===h+1?-1!==s&&(r.base=r.name=0===h&&i?t.slice(1,s):t.slice(h,s)):(0===h&&i?(r.name=t.slice(1,a),r.base=t.slice(1,s)):(r.name=t.slice(h,a),r.base=t.slice(h,s)),r.ext=t.slice(a,s)),h>0?r.dir=t.slice(0,h-1):i&&(r.dir="/"),r},sep:"/",delimiter:":",win32:null,posix:null};n.posix=n,t.exports=n},447:(t,e,r)=>{var n;if(r.r(e),r.d(e,{URI:()=>g,Utils:()=>O}),"object"==typeof process)n="win32"===process.platform;else if("object"==typeof navigator){var o=navigator.userAgent;n=o.indexOf("Windows")>=0}var i,a,h=(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&(t[r]=e[r])})(t,e)},function(t,e){function r(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}),s=/^\w[\w\d+.-]*$/,f=/^\//,u=/^\/\//,c="",l="/",p=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,g=function(){function t(t,e,r,n,o,i){void 0===i&&(i=!1),"object"==typeof t?(this.scheme=t.scheme||c,this.authority=t.authority||c,this.path=t.path||c,this.query=t.query||c,this.fragment=t.fragment||c):(this.scheme=function(t,e){return t||e?t:"file"}(t,i),this.authority=e||c,this.path=function(t,e){switch(t){case"https":case"http":case"file":e?e[0]!==l&&(e=l+e):e=l}return e}(this.scheme,r||c),this.query=n||c,this.fragment=o||c,function(t,e){if(!t.scheme&&e)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'+t.authority+'", path: "'+t.path+'", query: "'+t.query+'", fragment: "'+t.fragment+'"}');if(t.scheme&&!s.test(t.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(t.path)if(t.authority){if(!f.test(t.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(u.test(t.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}(this,i))}return t.isUri=function(e){return e instanceof t||!!e&&"string"==typeof e.authority&&"string"==typeof e.fragment&&"string"==typeof e.path&&"string"==typeof e.query&&"string"==typeof e.scheme&&"function"==typeof e.fsPath&&"function"==typeof e.with&&"function"==typeof e.toString},Object.defineProperty(t.prototype,"fsPath",{get:function(){return C(this,!1)},enumerable:!1,configurable:!0}),t.prototype.with=function(t){if(!t)return this;var e=t.scheme,r=t.authority,n=t.path,o=t.query,i=t.fragment;return void 0===e?e=this.scheme:null===e&&(e=c),void 0===r?r=this.authority:null===r&&(r=c),void 0===n?n=this.path:null===n&&(n=c),void 0===o?o=this.query:null===o&&(o=c),void 0===i?i=this.fragment:null===i&&(i=c),e===this.scheme&&r===this.authority&&n===this.path&&o===this.query&&i===this.fragment?this:new v(e,r,n,o,i)},t.parse=function(t,e){void 0===e&&(e=!1);var r=p.exec(t);return r?new v(r[2]||c,x(r[4]||c),x(r[5]||c),x(r[7]||c),x(r[9]||c),e):new v(c,c,c,c,c)},t.file=function(t){var e=c;if(n&&(t=t.replace(/\\/g,l)),t[0]===l&&t[1]===l){var r=t.indexOf(l,2);-1===r?(e=t.substring(2),t=l):(e=t.substring(2,r),t=t.substring(r)||l)}return new v("file",e,t,c,c)},t.from=function(t){return new v(t.scheme,t.authority,t.path,t.query,t.fragment)},t.prototype.toString=function(t){return void 0===t&&(t=!1),A(this,t)},t.prototype.toJSON=function(){return this},t.revive=function(e){if(e){if(e instanceof t)return e;var r=new v(e);return r._formatted=e.external,r._fsPath=e._sep===d?e.fsPath:null,r}return e},t}(),d=n?1:void 0,v=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._formatted=null,e._fsPath=null,e}return h(e,t),Object.defineProperty(e.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=C(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),e.prototype.toString=function(t){return void 0===t&&(t=!1),t?A(this,!0):(this._formatted||(this._formatted=A(this,!1)),this._formatted)},e.prototype.toJSON=function(){var t={$mid:1};return this._fsPath&&(t.fsPath=this._fsPath,t._sep=d),this._formatted&&(t.external=this._formatted),this.path&&(t.path=this.path),this.scheme&&(t.scheme=this.scheme),this.authority&&(t.authority=this.authority),this.query&&(t.query=this.query),this.fragment&&(t.fragment=this.fragment),t},e}(g),m=((a={})[58]="%3A",a[47]="%2F",a[63]="%3F",a[35]="%23",a[91]="%5B",a[93]="%5D",a[64]="%40",a[33]="%21",a[36]="%24",a[38]="%26",a[39]="%27",a[40]="%28",a[41]="%29",a[42]="%2A",a[43]="%2B",a[44]="%2C",a[59]="%3B",a[61]="%3D",a[32]="%20",a);function y(t,e){for(var r=void 0,n=-1,o=0;o<t.length;o++){var i=t.charCodeAt(o);if(i>=97&&i<=122||i>=65&&i<=90||i>=48&&i<=57||45===i||46===i||95===i||126===i||e&&47===i)-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),void 0!==r&&(r+=t.charAt(o));else{void 0===r&&(r=t.substr(0,o));var a=m[i];void 0!==a?(-1!==n&&(r+=encodeURIComponent(t.substring(n,o)),n=-1),r+=a):-1===n&&(n=o)}}return-1!==n&&(r+=encodeURIComponent(t.substring(n))),void 0!==r?r:t}function b(t){for(var e=void 0,r=0;r<t.length;r++){var n=t.charCodeAt(r);35===n||63===n?(void 0===e&&(e=t.substr(0,r)),e+=m[n]):void 0!==e&&(e+=t[r])}return void 0!==e?e:t}function C(t,e){var r;return r=t.authority&&t.path.length>1&&"file"===t.scheme?"//"+t.authority+t.path:47===t.path.charCodeAt(0)&&(t.path.charCodeAt(1)>=65&&t.path.charCodeAt(1)<=90||t.path.charCodeAt(1)>=97&&t.path.charCodeAt(1)<=122)&&58===t.path.charCodeAt(2)?e?t.path.substr(1):t.path[1].toLowerCase()+t.path.substr(2):t.path,n&&(r=r.replace(/\//g,"\\")),r}function A(t,e){var r=e?b:y,n="",o=t.scheme,i=t.authority,a=t.path,h=t.query,s=t.fragment;if(o&&(n+=o,n+=":"),(i||"file"===o)&&(n+=l,n+=l),i){var f=i.indexOf("@");if(-1!==f){var u=i.substr(0,f);i=i.substr(f+1),-1===(f=u.indexOf(":"))?n+=r(u,!1):(n+=r(u.substr(0,f),!1),n+=":",n+=r(u.substr(f+1),!1)),n+="@"}-1===(f=(i=i.toLowerCase()).indexOf(":"))?n+=r(i,!1):(n+=r(i.substr(0,f),!1),n+=i.substr(f))}if(a){if(a.length>=3&&47===a.charCodeAt(0)&&58===a.charCodeAt(2))(c=a.charCodeAt(1))>=65&&c<=90&&(a="/"+String.fromCharCode(c+32)+":"+a.substr(3));else if(a.length>=2&&58===a.charCodeAt(1)){var c;(c=a.charCodeAt(0))>=65&&c<=90&&(a=String.fromCharCode(c+32)+":"+a.substr(2))}n+=r(a,!0)}return h&&(n+="?",n+=r(h,!1)),s&&(n+="#",n+=e?s:y(s,!1)),n}function w(t){try{return decodeURIComponent(t)}catch(e){return t.length>3?t.substr(0,3)+w(t.substr(3)):t}}var _=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function x(t){return t.match(_)?t.replace(_,(function(t){return w(t)})):t}var O,P=r(470),j=function(){for(var t=0,e=0,r=arguments.length;e<r;e++)t+=arguments[e].length;var n=Array(t),o=0;for(e=0;e<r;e++)for(var i=arguments[e],a=0,h=i.length;a<h;a++,o++)n[o]=i[a];return n},U=P.posix||P;!function(t){t.joinPath=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];return t.with({path:U.join.apply(U,j([t.path],e))})},t.resolvePath=function(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=t.path||"/";return t.with({path:U.resolve.apply(U,j([n],e))})},t.dirname=function(t){var e=U.dirname(t.path);return 1===e.length&&46===e.charCodeAt(0)?t:t.with({path:e})},t.basename=function(t){return U.basename(t.path)},t.extname=function(t){return U.extname(t.path)}}(O||(O={}))}},e={};function r(n){if(e[n])return e[n].exports;var o=e[n]={exports:{}};return t[n](o,o.exports,r),o.exports}return r.d=(t,e)=>{for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},r.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r(447)})();const{URI,Utils}=LIB;
26086//# sourceMappingURL=index.js.map
26087
26088/***/ }),
26089/* 169 */
26090/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
26091
26092"use strict";
26093
26094var __importDefault = (this && this.__importDefault) || function (mod) {
26095 return (mod && mod.__esModule) ? mod : { "default": mod };
26096};
26097Object.defineProperty(exports, "__esModule", ({ value: true }));
26098exports.Buffer = void 0;
26099var vscode_languageserver_1 = __webpack_require__(2);
26100var constant_1 = __webpack_require__(64);
26101var logger_1 = __importDefault(__webpack_require__(155));
26102var log = logger_1.default("buffer");
26103var NODE_TOPLEVEL = 1;
26104var NODE_EXCMD = 3;
26105var NODE_FUNCTION = 4;
26106var NODE_DELFUNCTION = 6;
26107var NODE_RETURN = 7;
26108var NODE_EXCALL = 8;
26109var NODE_LET = 9;
26110var NODE_UNLET = 10;
26111var NODE_LOCKVAR = 11;
26112var NODE_UNLOCKVAR = 12;
26113var NODE_IF = 13;
26114var NODE_ELSEIF = 14;
26115var NODE_ELSE = 15;
26116var NODE_WHILE = 17;
26117var NODE_FOR = 19;
26118var NODE_TRY = 23;
26119var NODE_CATCH = 24;
26120var NODE_FINALLY = 25;
26121var NODE_THROW = 27;
26122var NODE_ECHO = 28;
26123var NODE_ECHON = 29;
26124var NODE_ECHOMSG = 31;
26125var NODE_ECHOERR = 32;
26126var NODE_EXECUTE = 33;
26127var NODE_TERNARY = 34;
26128var NODE_OR = 35;
26129var NODE_AND = 36;
26130var NODE_EQUAL = 37;
26131var NODE_EQUALCI = 38;
26132var NODE_EQUALCS = 39;
26133var NODE_NEQUAL = 40;
26134var NODE_NEQUALCI = 41;
26135var NODE_NEQUALCS = 42;
26136var NODE_GREATER = 43;
26137var NODE_GREATERCI = 44;
26138var NODE_GREATERCS = 45;
26139var NODE_GEQUAL = 46;
26140var NODE_GEQUALCI = 47;
26141var NODE_GEQUALCS = 48;
26142var NODE_SMALLER = 49;
26143var NODE_SMALLERCI = 50;
26144var NODE_SMALLERCS = 51;
26145var NODE_SEQUAL = 52;
26146var NODE_SEQUALCI = 53;
26147var NODE_SEQUALCS = 54;
26148var NODE_MATCH = 55;
26149var NODE_MATCHCI = 56;
26150var NODE_MATCHCS = 57;
26151var NODE_NOMATCH = 58;
26152var NODE_NOMATCHCI = 59;
26153var NODE_NOMATCHCS = 60;
26154var NODE_IS = 61;
26155var NODE_ISCI = 62;
26156var NODE_ISCS = 63;
26157var NODE_ISNOT = 64;
26158var NODE_ISNOTCI = 65;
26159var NODE_ISNOTCS = 66;
26160var NODE_ADD = 67;
26161var NODE_SUBTRACT = 68;
26162var NODE_CONCAT = 69;
26163var NODE_MULTIPLY = 70;
26164var NODE_DIVIDE = 71;
26165var NODE_REMAINDER = 72;
26166var NODE_NOT = 73;
26167var NODE_MINUS = 74;
26168var NODE_PLUS = 75;
26169var NODE_SUBSCRIPT = 76;
26170var NODE_SLICE = 77;
26171var NODE_CALL = 78;
26172var NODE_DOT = 79;
26173var NODE_NUMBER = 80;
26174var NODE_STRING = 81;
26175var NODE_LIST = 82;
26176var NODE_DICT = 83;
26177var NODE_IDENTIFIER = 86;
26178var NODE_CURLYNAME = 87;
26179var NODE_ENV = 88;
26180var NODE_REG = 89; // TODO
26181var NODE_CURLYNAMEPART = 90; // TODO
26182var NODE_CURLYNAMEEXPR = 91; // TODO
26183var NODE_LAMBDA = 92;
26184var NODE_CONST = 94;
26185var NODE_EVAL = 95;
26186var NODE_HEREDOC = 96;
26187var NODE_METHOD = 97;
26188var globalFuncPattern = /^(g:\w+(\.\w+)*|[a-zA-Z_]\w*(\.\w+)*|\w+(#\w+)+)$/;
26189var scriptFuncPattern = /^(s:\w+(\.\w+)*|<SID>\w+(\.\w+)*)$/i;
26190var globalVariablePattern = /^(g:\w+(\.\w+)*|b:\w+(\.\w+)*|\w{1,}(\.\w+)*|\w+(#\w+)+)$/;
26191var localVariablePattern = /^(s:\w+(\.\w+)*|l:\w+(\.\w+)*|a:\w+(\.\w+)*)$/;
26192var envPattern = /^\$\w+$/;
26193var Buffer = /** @class */ (function () {
26194 function Buffer(uri, projectRoot, node) {
26195 this.uri = uri;
26196 this.projectRoot = projectRoot;
26197 this.node = node;
26198 this.globalFunctions = {};
26199 this.scriptFunctions = {};
26200 this.globalFunctionRefs = {};
26201 this.scriptFunctionRefs = {};
26202 this.globalVariables = {};
26203 this.localVariables = {};
26204 this.globalVariableRefs = {};
26205 this.localVariableRefs = {};
26206 this.envs = {};
26207 this.envRefs = {};
26208 this.ranges = [];
26209 this.updateBufferByNode(this.node);
26210 }
26211 Buffer.prototype.getGlobalFunctions = function () {
26212 return this.globalFunctions;
26213 };
26214 Buffer.prototype.getGlobalFunctionRefs = function () {
26215 return this.globalFunctionRefs;
26216 };
26217 Buffer.prototype.getScriptFunctions = function () {
26218 return this.scriptFunctions;
26219 };
26220 Buffer.prototype.getScriptFunctionRefs = function () {
26221 return this.scriptFunctionRefs;
26222 };
26223 Buffer.prototype.getGlobalIdentifiers = function () {
26224 return this.globalVariables;
26225 };
26226 Buffer.prototype.getGlobalIdentifierRefs = function () {
26227 return this.globalVariableRefs;
26228 };
26229 Buffer.prototype.getLocalIdentifiers = function () {
26230 return this.localVariables;
26231 };
26232 Buffer.prototype.getLocalIdentifierRefs = function () {
26233 return this.localVariableRefs;
26234 };
26235 Buffer.prototype.getRanges = function () {
26236 return this.ranges;
26237 };
26238 Buffer.prototype.getProjectRoot = function () {
26239 return this.projectRoot;
26240 };
26241 Buffer.prototype.isBelongToWorkdir = function (workUri) {
26242 return this.projectRoot === workUri;
26243 };
26244 Buffer.prototype.updateBufferByNode = function (node) {
26245 this.node = node;
26246 this.resetProperties();
26247 try {
26248 this.resolveCompletionItems([node]);
26249 }
26250 catch (error) {
26251 log.warn("updateBufferByNode: " + error.stack);
26252 }
26253 };
26254 /*
26255 * global function
26256 *
26257 * - g:xxx
26258 * - xx#xxx
26259 */
26260 Buffer.prototype.getGlobalFunctionItems = function () {
26261 var _this = this;
26262 var refs = {};
26263 Object.keys(this.globalFunctionRefs).forEach(function (name) {
26264 if (!_this.globalFunctions[name]) {
26265 refs[name] = _this.globalFunctionRefs[name];
26266 }
26267 });
26268 return this.getFunctionItems(this.globalFunctions, constant_1.sortTexts.three)
26269 .concat(this.getFunctionItems(refs, constant_1.sortTexts.three));
26270 };
26271 /*
26272 * script function
26273 *
26274 * - s:xxx
26275 */
26276 Buffer.prototype.getScriptFunctionItems = function () {
26277 var _this = this;
26278 var refs = {};
26279 Object.keys(this.scriptFunctionRefs).forEach(function (name) {
26280 if (!_this.scriptFunctions[name]) {
26281 refs[name] = _this.scriptFunctionRefs[name];
26282 }
26283 });
26284 return this.getFunctionItems(this.scriptFunctions, constant_1.sortTexts.two)
26285 .concat(this.getFunctionItems(refs, constant_1.sortTexts.two));
26286 };
26287 /*
26288 * global identifier
26289 *
26290 * - g:xxx
26291 * - b:xxx
26292 * - [a-zA-Z]+
26293 * - xx#xxx
26294 */
26295 Buffer.prototype.getGlobalIdentifierItems = function () {
26296 var _this = this;
26297 var refs = {};
26298 Object.keys(this.globalVariableRefs).forEach(function (name) {
26299 if (!_this.globalVariables[name]) {
26300 refs[name] = _this.globalVariableRefs[name];
26301 }
26302 });
26303 var globalVariables = [];
26304 var localVariables = [];
26305 this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.three)
26306 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.three))
26307 .forEach(function (item) {
26308 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label)) {
26309 localVariables.push(item);
26310 }
26311 else {
26312 globalVariables.push(item);
26313 }
26314 });
26315 if (localVariables.length) {
26316 var gloalFunctions = this.getGlobalFunctions();
26317 var scriptFunctions = this.getScriptFunctions();
26318 var funList_1 = Object.values(gloalFunctions).concat(Object.values(scriptFunctions)).reduce(function (res, fs) { return res.concat(fs); }, []);
26319 localVariables.forEach(function (l) {
26320 if (l.data.some(function (identifier) {
26321 return funList_1.every(function (fun) {
26322 return !(fun.startLine < identifier.startLine && identifier.startLine < fun.endLine);
26323 });
26324 })) {
26325 globalVariables.push(l);
26326 }
26327 });
26328 }
26329 return globalVariables;
26330 };
26331 /*
26332 * local identifier
26333 *
26334 * - s:xxx
26335 */
26336 Buffer.prototype.getLocalIdentifierItems = function () {
26337 var _this = this;
26338 var refs = {};
26339 Object.keys(this.localVariableRefs).forEach(function (name) {
26340 if (!_this.localVariables[name]) {
26341 refs[name] = _this.localVariableRefs[name];
26342 }
26343 });
26344 return this.getIdentifierItems(this.localVariables, constant_1.sortTexts.two)
26345 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.two))
26346 .filter(function (item) { return !/^(a|l):/.test(item.label); });
26347 };
26348 /*
26349 * function local identifier
26350 *
26351 * - l:xxx
26352 * - a:xxx
26353 * - identifiers in function range
26354 */
26355 Buffer.prototype.getFunctionLocalIdentifierItems = function (line) {
26356 var vimLineNum = line + 1;
26357 var startLine = -1;
26358 var endLine = -1;
26359 // get function args completion items
26360 var funArgs = []
26361 .concat(Object.values(this.globalFunctions).reduce(function (res, next) { return res.concat(next); }, []))
26362 .concat(Object.values(this.scriptFunctions).reduce(function (res, next) { return res.concat(next); }, []))
26363 .filter(function (fun) {
26364 if (startLine === -1 && endLine === -1 && fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
26365 startLine = fun.startLine;
26366 endLine = fun.endLine;
26367 }
26368 else if (fun.startLine > startLine && endLine > fun.endLine) {
26369 startLine = fun.startLine;
26370 endLine = fun.endLine;
26371 }
26372 return fun.startLine < vimLineNum && vimLineNum < fun.endLine;
26373 })
26374 .reduce(function (res, next) {
26375 (next.args || []).forEach(function (name) {
26376 if (res.indexOf(name.value) === -1) {
26377 res.push(name.value);
26378 }
26379 });
26380 return res;
26381 }, [])
26382 .map(function (name) { return ({
26383 label: "a:" + name,
26384 kind: vscode_languageserver_1.CompletionItemKind.Variable,
26385 sortText: constant_1.sortTexts.one,
26386 insertText: "a:" + name,
26387 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
26388 }); });
26389 if (startLine !== -1 && endLine !== -1) {
26390 var funcLocalIdentifiers = this.getIdentifierItems(this.localVariables, constant_1.sortTexts.one)
26391 .concat(this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.one))
26392 .filter(function (item) {
26393 if (!(/^l:/.test(item.label) || /^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label))) {
26394 return false;
26395 }
26396 var data = item.data;
26397 if (!data) {
26398 return false;
26399 }
26400 return data.some(function (i) { return startLine < i.startLine && i.startLine < endLine; });
26401 });
26402 return funArgs.concat(funcLocalIdentifiers);
26403 }
26404 return [];
26405 };
26406 /*
26407 * environment identifier
26408 *
26409 * - $xxx
26410 */
26411 Buffer.prototype.getEnvItems = function () {
26412 return Object.keys(this.envs).map(function (name) {
26413 return {
26414 label: name,
26415 insertText: name,
26416 sortText: constant_1.sortTexts.three,
26417 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
26418 };
26419 });
26420 };
26421 Buffer.prototype.resetProperties = function () {
26422 this.globalFunctions = {};
26423 this.scriptFunctions = {};
26424 this.globalFunctionRefs = {};
26425 this.scriptFunctionRefs = {};
26426 this.globalVariables = {};
26427 this.localVariables = {};
26428 this.globalVariableRefs = {};
26429 this.localVariableRefs = {};
26430 this.envs = {};
26431 this.envRefs = {};
26432 this.ranges = [];
26433 };
26434 Buffer.prototype.resolveCompletionItems = function (nodes) {
26435 var nodeList = [].concat(nodes);
26436 while (nodeList.length > 0) {
26437 var node = nodeList.pop();
26438 switch (node.type) {
26439 case NODE_TOPLEVEL:
26440 nodeList = nodeList.concat(node.body);
26441 break;
26442 // autocmd/command/map
26443 case NODE_EXCMD:
26444 this.takeFuncRefByExcmd(node);
26445 break;
26446 case NODE_EXCALL:
26447 case NODE_RETURN:
26448 case NODE_DELFUNCTION:
26449 case NODE_THROW:
26450 case NODE_EVAL:
26451 nodeList = nodeList.concat(node.left);
26452 break;
26453 case NODE_DOT:
26454 nodeList = nodeList.concat(node.left);
26455 this.takeIdentifier(node);
26456 break;
26457 case NODE_ECHO:
26458 case NODE_ECHON:
26459 case NODE_ECHOMSG:
26460 case NODE_ECHOERR:
26461 case NODE_UNLET:
26462 case NODE_LOCKVAR:
26463 case NODE_UNLOCKVAR:
26464 case NODE_EXECUTE:
26465 nodeList = nodeList.concat(node.list || []);
26466 break;
26467 case NODE_TERNARY:
26468 nodeList = nodeList.concat(node.cond || []);
26469 nodeList = nodeList.concat(node.left || []);
26470 nodeList = nodeList.concat(node.right || []);
26471 break;
26472 case NODE_IF:
26473 case NODE_ELSEIF:
26474 case NODE_ELSE:
26475 case NODE_WHILE:
26476 this.takeRange(node, ['endif', 'endwhile']);
26477 nodeList = nodeList.concat(node.body || []);
26478 nodeList = nodeList.concat(node.cond || []);
26479 nodeList = nodeList.concat(node.elseif || []);
26480 nodeList = nodeList.concat(node._else || []);
26481 break;
26482 case NODE_OR:
26483 case NODE_AND:
26484 case NODE_EQUAL:
26485 case NODE_EQUALCI:
26486 case NODE_EQUALCS:
26487 case NODE_NEQUAL:
26488 case NODE_NEQUALCI:
26489 case NODE_NEQUALCS:
26490 case NODE_GREATER:
26491 case NODE_GREATERCI:
26492 case NODE_GREATERCS:
26493 case NODE_GEQUAL:
26494 case NODE_GEQUALCI:
26495 case NODE_GEQUALCS:
26496 case NODE_SMALLER:
26497 case NODE_SMALLERCI:
26498 case NODE_SMALLERCS:
26499 case NODE_SEQUAL:
26500 case NODE_SEQUALCI:
26501 case NODE_SEQUALCS:
26502 case NODE_MATCH:
26503 case NODE_MATCHCI:
26504 case NODE_MATCHCS:
26505 case NODE_NOMATCH:
26506 case NODE_NOMATCHCI:
26507 case NODE_NOMATCHCS:
26508 case NODE_IS:
26509 case NODE_ISCI:
26510 case NODE_ISCS:
26511 case NODE_ISNOT:
26512 case NODE_ISNOTCI:
26513 case NODE_ISNOTCS:
26514 case NODE_CONCAT:
26515 case NODE_MULTIPLY:
26516 case NODE_DIVIDE:
26517 case NODE_REMAINDER:
26518 case NODE_NOT:
26519 case NODE_MINUS:
26520 case NODE_PLUS:
26521 case NODE_ADD:
26522 case NODE_SUBTRACT:
26523 case NODE_SUBSCRIPT:
26524 case NODE_METHOD:
26525 nodeList = nodeList.concat(node.left || []);
26526 nodeList = nodeList.concat(node.right || []);
26527 break;
26528 case NODE_FOR:
26529 nodeList = nodeList.concat(node.body || []);
26530 nodeList = nodeList.concat(node.right || []);
26531 this.takeFor([].concat(node.left || []).concat(node.list || []));
26532 this.takeRange(node, 'endfor');
26533 break;
26534 case NODE_TRY:
26535 case NODE_CATCH:
26536 case NODE_FINALLY:
26537 this.takeRange(node, 'endtry');
26538 nodeList = nodeList.concat(node.body || []);
26539 nodeList = nodeList.concat(node.catch || []);
26540 nodeList = nodeList.concat(node._finally || []);
26541 break;
26542 case NODE_FUNCTION:
26543 nodeList = nodeList.concat(node.body || []);
26544 if (node.left && node.left.type === NODE_DOT) {
26545 nodeList = nodeList.concat(node.left.left);
26546 }
26547 this.takeFunction(node);
26548 this.takeRange(node, 'endfunction');
26549 break;
26550 case NODE_LIST:
26551 nodeList = nodeList.concat(node.value || []);
26552 break;
26553 case NODE_DICT:
26554 nodeList = nodeList.concat((node.value || []).map(function (item) { return item[1]; }));
26555 break;
26556 case NODE_SLICE:
26557 case NODE_LAMBDA:
26558 nodeList = nodeList.concat(node.left || []);
26559 nodeList = nodeList.concat(node.rlist || []);
26560 break;
26561 case NODE_CALL:
26562 nodeList = nodeList.concat(node.rlist || []);
26563 if (node.left && node.left.type === NODE_DOT) {
26564 nodeList = nodeList.concat(node.left.left);
26565 }
26566 this.takeFuncRefByRef(node);
26567 this.takeFuncRef(node);
26568 break;
26569 case NODE_LET:
26570 case NODE_CONST:
26571 nodeList = nodeList.concat(node.right || []);
26572 if (node.left && node.left.type === NODE_DOT) {
26573 nodeList = nodeList.concat(node.left.left);
26574 }
26575 // not a function by function()/funcref()
26576 if (!this.takeFunctionByRef(node)) {
26577 this.takeLet(node);
26578 }
26579 break;
26580 case NODE_ENV:
26581 case NODE_IDENTIFIER:
26582 this.takeIdentifier(node);
26583 break;
26584 default:
26585 break;
26586 }
26587 }
26588 // log.info(`parse_buffer: ${JSON.stringify(this)}`)
26589 };
26590 Buffer.prototype.takeFunction = function (node) {
26591 var left = node.left, rlist = node.rlist, endfunction = node.endfunction;
26592 var name = this.getDotName(left);
26593 if (!name) {
26594 return;
26595 }
26596 var pos = this.getDotPos(left);
26597 if (!pos) {
26598 return;
26599 }
26600 var func = {
26601 name: name,
26602 args: rlist || [],
26603 startLine: pos.lnum,
26604 startCol: pos.col,
26605 endLine: endfunction.pos.lnum,
26606 endCol: endfunction.pos.col,
26607 range: {
26608 startLine: node.pos.lnum,
26609 startCol: node.pos.col,
26610 endLine: endfunction.pos.lnum,
26611 endCol: endfunction.pos.col,
26612 }
26613 };
26614 if (globalFuncPattern.test(name)) {
26615 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
26616 this.globalFunctions[name] = [];
26617 }
26618 this.globalFunctions[name].push(func);
26619 }
26620 else if (scriptFuncPattern.test(name)) {
26621 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
26622 this.scriptFunctions[name] = [];
26623 }
26624 this.scriptFunctions[name].push(func);
26625 }
26626 };
26627 /*
26628 * vim function
26629 *
26630 * - let funcName = function()
26631 * - let funcName = funcref()
26632 */
26633 Buffer.prototype.takeFunctionByRef = function (node) {
26634 var left = node.left, right = node.right;
26635 if (!right || right.type !== NODE_CALL) {
26636 return;
26637 }
26638 // is not function()/funcref()
26639 if (!right.left ||
26640 !right.left.value ||
26641 ["function", "funcref"].indexOf(right.left.value) === -1) {
26642 return;
26643 }
26644 var name = this.getDotName(left);
26645 if (!name) {
26646 return;
26647 }
26648 var pos = this.getDotPos(left);
26649 if (!pos) {
26650 return false;
26651 }
26652 var func = {
26653 name: name,
26654 args: [],
26655 startLine: pos.lnum,
26656 startCol: pos.col,
26657 endLine: pos.lnum,
26658 endCol: pos.col,
26659 range: {
26660 startLine: pos.lnum,
26661 startCol: pos.col,
26662 endLine: pos.lnum,
26663 endCol: pos.col,
26664 }
26665 };
26666 if (globalFuncPattern.test(name)) {
26667 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
26668 this.globalFunctions[name] = [];
26669 }
26670 this.globalFunctions[name].push(func);
26671 return true;
26672 }
26673 else if (scriptFuncPattern.test(name)) {
26674 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
26675 this.scriptFunctions[name] = [];
26676 }
26677 this.scriptFunctions[name].push(func);
26678 return true;
26679 }
26680 return false;
26681 };
26682 Buffer.prototype.takeFuncRef = function (node) {
26683 var left = node.left, rlist = node.rlist;
26684 var name = "";
26685 if (left.type === NODE_IDENTIFIER) {
26686 name = left.value;
26687 // <SID>funName
26688 }
26689 else if (left.type === NODE_CURLYNAME) {
26690 name = (left.value || []).map(function (item) { return item.value; }).join("");
26691 }
26692 else if (left.type === NODE_DOT) {
26693 name = this.getDotName(left);
26694 }
26695 if (!name) {
26696 return;
26697 }
26698 var pos = this.getDotPos(left);
26699 if (!pos) {
26700 return;
26701 }
26702 var funcRef = {
26703 name: name,
26704 args: rlist || [],
26705 startLine: pos.lnum,
26706 startCol: pos.col,
26707 };
26708 if (globalFuncPattern.test(name)) {
26709 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
26710 this.globalFunctionRefs[name] = [];
26711 }
26712 this.globalFunctionRefs[name].push(funcRef);
26713 }
26714 else if (scriptFuncPattern.test(name)) {
26715 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
26716 this.scriptFunctionRefs[name] = [];
26717 }
26718 this.scriptFunctionRefs[name].push(funcRef);
26719 }
26720 };
26721 /*
26722 * vim function ref
26723 * first value is function name
26724 *
26725 * - function('funcName')
26726 * - funcref('funcName')
26727 */
26728 Buffer.prototype.takeFuncRefByRef = function (node) {
26729 var left = node.left, rlist = node.rlist;
26730 var funcNode = rlist && rlist[0];
26731 if (!left ||
26732 ["function", "funcref"].indexOf(left.value) === -1 ||
26733 !funcNode ||
26734 !funcNode.pos ||
26735 typeof funcNode.value !== "string") {
26736 return;
26737 }
26738 // delete '/" of function name
26739 var name = funcNode.value.replace(/^['"]|['"]$/g, "");
26740 var funcRef = {
26741 name: name,
26742 args: [],
26743 startLine: funcNode.pos.lnum,
26744 startCol: funcNode.pos.col + 1, // +1 by '/"
26745 };
26746 if (globalFuncPattern.test(name)) {
26747 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
26748 this.globalFunctionRefs[name] = [];
26749 }
26750 this.globalFunctionRefs[name].push(funcRef);
26751 }
26752 else if (scriptFuncPattern.test(name)) {
26753 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
26754 this.scriptFunctionRefs[name] = [];
26755 }
26756 this.scriptFunctionRefs[name].push(funcRef);
26757 }
26758 };
26759 /*
26760 * FIXME: take function ref by
26761 *
26762 * - autocmd
26763 * - command
26764 * - map
26765 */
26766 Buffer.prototype.takeFuncRefByExcmd = function (node) {
26767 var pos = node.pos, str = node.str;
26768 if (!str) {
26769 return;
26770 }
26771 // tslint:disable-next-line: max-line-length
26772 if (!/^[ \t]*((au|aut|auto|autoc|autocm|autocmd|com|comm|comma|comman|command)!?[ \t]+|([a-zA-Z]*map!?[ \t]+.*?:))/.test(str)) {
26773 return;
26774 }
26775 var regFunc = /(<sid>[\w_#]+|[a-zA-Z_]:[\w_#]+|[\w_#]+)[ \t]*\(/gi;
26776 var m = regFunc.exec(str);
26777 while (m) {
26778 var name = m[1];
26779 if (name) {
26780 var funcRef = {
26781 name: name,
26782 args: [],
26783 startLine: pos.lnum,
26784 startCol: pos.col + m.index,
26785 };
26786 if (globalFuncPattern.test(name)) {
26787 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
26788 this.globalFunctionRefs[name] = [];
26789 }
26790 this.globalFunctionRefs[name].push(funcRef);
26791 }
26792 else if (scriptFuncPattern.test(name)) {
26793 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
26794 this.scriptFunctionRefs[name] = [];
26795 }
26796 this.scriptFunctionRefs[name].push(funcRef);
26797 }
26798 }
26799 m = regFunc.exec(str);
26800 }
26801 };
26802 Buffer.prototype.takeLet = function (node) {
26803 var pos = this.getDotPos(node.left);
26804 var name = this.getDotName(node.left);
26805 if (!pos || !name) {
26806 return;
26807 }
26808 var identifier = {
26809 name: name,
26810 startLine: pos.lnum,
26811 startCol: pos.col,
26812 };
26813 if (localVariablePattern.test(name)) {
26814 if (!this.localVariables[name] || !Array.isArray(this.localVariables[name])) {
26815 this.localVariables[name] = [];
26816 }
26817 this.localVariables[name].push(identifier);
26818 }
26819 else if (globalVariablePattern.test(name)) {
26820 if (!this.globalVariables[name] || !Array.isArray(this.globalVariables[name])) {
26821 this.globalVariables[name] = [];
26822 }
26823 this.globalVariables[name].push(identifier);
26824 }
26825 else if (envPattern.test(name)) {
26826 if (!this.envs[name] || !Array.isArray(this.envs[name])) {
26827 this.envs[name] = [];
26828 }
26829 this.envs[name].push(identifier);
26830 }
26831 };
26832 Buffer.prototype.takeRange = function (node, keys) {
26833 var _this = this;
26834 [].concat(keys).forEach(function (key) {
26835 if (node.pos && node[key] && node[key].pos) {
26836 _this.ranges.push({
26837 startLine: node.pos.lnum,
26838 startCol: node.pos.col,
26839 endLine: node[key].pos.lnum,
26840 endCol: node[key].pos.col
26841 });
26842 }
26843 });
26844 };
26845 Buffer.prototype.takeFor = function (nodes) {
26846 var _this = this;
26847 nodes.forEach(function (node) {
26848 if (node.type !== NODE_IDENTIFIER || !node.pos) {
26849 return;
26850 }
26851 var name = node.value;
26852 var identifier = {
26853 name: name,
26854 startLine: node.pos.lnum,
26855 startCol: node.pos.col,
26856 };
26857 if (localVariablePattern.test(name)) {
26858 if (!_this.localVariables[name] || !Array.isArray(_this.localVariables[name])) {
26859 _this.localVariables[name] = [];
26860 }
26861 _this.localVariables[name].push(identifier);
26862 }
26863 else if (globalVariablePattern.test(name)) {
26864 if (!_this.globalVariables[name] || !Array.isArray(_this.globalVariables[name])) {
26865 _this.globalVariables[name] = [];
26866 }
26867 _this.globalVariables[name].push(identifier);
26868 }
26869 else if (envPattern.test(name)) {
26870 if (!_this.envs[name] || !Array.isArray(_this.envs[name])) {
26871 _this.envs[name] = [];
26872 }
26873 _this.envs[name].push(identifier);
26874 }
26875 });
26876 };
26877 Buffer.prototype.takeIdentifier = function (node) {
26878 var name = this.getDotName(node);
26879 if (!name) {
26880 return;
26881 }
26882 var pos = this.getDotPos(node);
26883 if (!pos) {
26884 return;
26885 }
26886 var identifier = {
26887 name: name,
26888 startLine: pos.lnum,
26889 startCol: pos.col,
26890 };
26891 if (globalVariablePattern.test(name)) {
26892 if (!this.globalVariableRefs[name] || !Array.isArray(this.globalVariableRefs[name])) {
26893 this.globalVariableRefs[name] = [];
26894 }
26895 this.globalVariableRefs[name].push(identifier);
26896 }
26897 else if (localVariablePattern.test(name)) {
26898 if (!this.localVariableRefs[name] || !Array.isArray(this.localVariableRefs[name])) {
26899 this.localVariableRefs[name] = [];
26900 }
26901 this.localVariableRefs[name].push(identifier);
26902 }
26903 else if (envPattern.test(name)) {
26904 if (!this.envRefs[name] || !Array.isArray(this.envRefs[name])) {
26905 this.envRefs[name] = [];
26906 }
26907 this.envRefs[name].push(identifier);
26908 }
26909 };
26910 Buffer.prototype.getDotPos = function (node) {
26911 if (!node) {
26912 return null;
26913 }
26914 if (node.type === NODE_IDENTIFIER ||
26915 node.type === NODE_ENV ||
26916 node.type === NODE_CURLYNAME) {
26917 return node.pos;
26918 }
26919 var left = node.left;
26920 return this.getDotPos(left);
26921 };
26922 Buffer.prototype.getDotName = function (node) {
26923 if (node.type === NODE_IDENTIFIER ||
26924 node.type === NODE_STRING ||
26925 node.type === NODE_NUMBER ||
26926 node.type === NODE_ENV) {
26927 return node.value;
26928 }
26929 else if (node.type === NODE_CURLYNAME) {
26930 return (node.value || []).map(function (item) { return item.value; }).join("");
26931 }
26932 else if (node.type === NODE_SUBSCRIPT) {
26933 return this.getDotName(node.left);
26934 }
26935 var left = node.left, right = node.right;
26936 var list = [];
26937 if (left) {
26938 list.push(this.getDotName(left));
26939 }
26940 if (right) {
26941 list.push(this.getDotName(right));
26942 }
26943 return list.join(".");
26944 };
26945 Buffer.prototype.getFunctionItems = function (items, sortText) {
26946 return Object.keys(items).map(function (name) {
26947 var list = items[name];
26948 var args = "${1}";
26949 if (list[0] && list[0].args && list[0].args.length > 0) {
26950 args = (list[0].args || []).reduce(function (res, next, idx) {
26951 // FIXME: resove next.value is not string
26952 var value = typeof next.value !== "string" ? "param" : next.value;
26953 if (idx === 0) {
26954 return "${" + (idx + 1) + ":" + value + "}";
26955 }
26956 return res + ", ${" + (idx + 1) + ":" + value + "}";
26957 }, "");
26958 }
26959 var label = name;
26960 if (/^<SID>/.test(name)) {
26961 label = name.replace(/^<SID>/, "s:");
26962 }
26963 return {
26964 label: label,
26965 detail: "any",
26966 sortText: sortText,
26967 documentation: "User defined function",
26968 kind: vscode_languageserver_1.CompletionItemKind.Function,
26969 insertText: label + "(" + args + ")${0}",
26970 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
26971 };
26972 });
26973 };
26974 Buffer.prototype.getIdentifierItems = function (items, sortText) {
26975 var _this = this;
26976 return Object.keys(items)
26977 .filter(function (name) { return !_this.globalFunctions[name] && !_this.scriptFunctions[name]; })
26978 .map(function (name) {
26979 var list = items[name];
26980 return {
26981 label: name,
26982 kind: vscode_languageserver_1.CompletionItemKind.Variable,
26983 sortText: sortText,
26984 documentation: "User defined variable",
26985 insertText: name,
26986 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
26987 data: list || [],
26988 };
26989 });
26990 };
26991 return Buffer;
26992}());
26993exports.Buffer = Buffer;
26994
26995
26996/***/ }),
26997/* 170 */
26998/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
26999
27000"use strict";
27001
27002Object.defineProperty(exports, "__esModule", ({ value: true }));
27003var patterns_1 = __webpack_require__(72);
27004var util_1 = __webpack_require__(66);
27005var builtin_1 = __webpack_require__(77);
27006var provider_1 = __webpack_require__(159);
27007function provider(line) {
27008 if (util_1.isSomeMatchPattern(patterns_1.featurePattern, line)) {
27009 return builtin_1.builtinDocs.getVimFeatures();
27010 }
27011 return [];
27012}
27013provider_1.useProvider(provider);
27014
27015
27016/***/ }),
27017/* 171 */
27018/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27019
27020"use strict";
27021
27022Object.defineProperty(exports, "__esModule", ({ value: true }));
27023var patterns_1 = __webpack_require__(72);
27024var builtin_1 = __webpack_require__(77);
27025var provider_1 = __webpack_require__(159);
27026function provider(line) {
27027 if (!patterns_1.highlightLinkPattern.test(line) &&
27028 !patterns_1.highlightValuePattern.test(line) &&
27029 patterns_1.highlightPattern.test(line)) {
27030 return builtin_1.builtinDocs.getHighlightArgKeys().filter(function (item) {
27031 return line.indexOf(item.label) === -1;
27032 });
27033 }
27034 return [];
27035}
27036provider_1.useProvider(provider);
27037
27038
27039/***/ }),
27040/* 172 */
27041/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27042
27043"use strict";
27044
27045Object.defineProperty(exports, "__esModule", ({ value: true }));
27046var patterns_1 = __webpack_require__(72);
27047var builtin_1 = __webpack_require__(77);
27048var provider_1 = __webpack_require__(159);
27049function provider(line) {
27050 var m = line.match(patterns_1.highlightValuePattern);
27051 if (!patterns_1.highlightLinkPattern.test(line) && m) {
27052 var values = builtin_1.builtinDocs.getHighlightArgValues();
27053 var keyName = m[3];
27054 if (values[keyName]) {
27055 return values[keyName];
27056 }
27057 }
27058 return [];
27059}
27060provider_1.useProvider(provider);
27061
27062
27063/***/ }),
27064/* 173 */
27065/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
27066
27067"use strict";
27068
27069var __assign = (this && this.__assign) || function () {
27070 __assign = Object.assign || function(t) {
27071 for (var s, i = 1, n = arguments.length; i < n; i++) {
27072 s = arguments[i];
27073 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
27074 t[p] = s[p];
27075 }
27076 return t;
27077 };
27078 return __assign.apply(this, arguments);
27079};
27080var __importDefault = (this && this.__importDefault) || function (mod) {
27081 return (mod && mod.__esModule) ? mod : { "default": mod };
27082};
27083Object.defineProperty(exports, "__esModule", ({ value: true }));
27084var patterns_1 = __webpack_require__(72);
27085var util_1 = __webpack_require__(66);
27086var config_1 = __importDefault(__webpack_require__(73));
27087var workspaces_1 = __webpack_require__(167);
27088var provider_1 = __webpack_require__(159);
27089function provider(line, uri, position) {
27090 if (util_1.isSomeMatchPattern(patterns_1.notIdentifierPattern, line)) {
27091 return [];
27092 }
27093 else if (/\b[gbsla]:\w*$/.test(line)) {
27094 var list = [];
27095 if (/\bg:\w*$/.test(line)) {
27096 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
27097 .filter(function (item) { return /^g:/.test(item.label); });
27098 }
27099 else if (/\bb:\w*$/.test(line)) {
27100 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
27101 .filter(function (item) { return /^b:/.test(item.label); });
27102 }
27103 else if (/\bs:\w*$/.test(line)) {
27104 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
27105 .filter(function (item) { return /^s:/.test(item.label); });
27106 }
27107 else if (/\bl:\w*$/.test(line)) {
27108 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
27109 .filter(function (item) { return /^l:/.test(item.label); });
27110 }
27111 else if (/\ba:\w*$/.test(line)) {
27112 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
27113 .filter(function (item) { return /^a:/.test(item.label); });
27114 }
27115 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
27116 }
27117 else if (/\B:\w*$/.test(line)) {
27118 return workspaces_1.workspace.getIdentifierItems(uri, position.line)
27119 .filter(function (item) { return /:/.test(item.label); })
27120 .map(function (item) {
27121 var m = line.match(/:[^:]*$/);
27122 return __assign(__assign({}, item), {
27123 // delete the `:` symbol
27124 textEdit: {
27125 range: {
27126 start: {
27127 line: position.line,
27128 character: line.length - m[0].length,
27129 },
27130 end: {
27131 line: position.line,
27132 character: line.length - m[0].length + 1,
27133 },
27134 },
27135 newText: item.insertText,
27136 } });
27137 });
27138 }
27139 return workspaces_1.workspace.getIdentifierItems(uri, position.line);
27140}
27141provider_1.useProvider(provider);
27142
27143
27144/***/ }),
27145/* 174 */
27146/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
27147
27148"use strict";
27149
27150var __assign = (this && this.__assign) || function () {
27151 __assign = Object.assign || function(t) {
27152 for (var s, i = 1, n = arguments.length; i < n; i++) {
27153 s = arguments[i];
27154 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
27155 t[p] = s[p];
27156 }
27157 return t;
27158 };
27159 return __assign.apply(this, arguments);
27160};
27161Object.defineProperty(exports, "__esModule", ({ value: true }));
27162var patterns_1 = __webpack_require__(72);
27163var builtin_1 = __webpack_require__(77);
27164var provider_1 = __webpack_require__(159);
27165function provider(line) {
27166 if (patterns_1.mapCommandPattern.test(line)) {
27167 if (/<$/.test(line)) {
27168 return builtin_1.builtinDocs.getVimMapArgs().map(function (item) { return (__assign(__assign({}, item), { insertText: item.insertText.slice(1) })); });
27169 }
27170 return builtin_1.builtinDocs.getVimMapArgs();
27171 }
27172 return [];
27173}
27174provider_1.useProvider(provider);
27175
27176
27177/***/ }),
27178/* 175 */
27179/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27180
27181"use strict";
27182
27183Object.defineProperty(exports, "__esModule", ({ value: true }));
27184var patterns_1 = __webpack_require__(72);
27185var util_1 = __webpack_require__(66);
27186var builtin_1 = __webpack_require__(77);
27187var provider_1 = __webpack_require__(159);
27188function provider(line) {
27189 if (util_1.isSomeMatchPattern(patterns_1.optionPattern, line)) {
27190 return builtin_1.builtinDocs.getVimOptions();
27191 }
27192 return [];
27193}
27194provider_1.useProvider(provider);
27195
27196
27197/***/ }),
27198/* 176 */
27199/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27200
27201"use strict";
27202
27203Object.defineProperty(exports, "__esModule", ({ value: true }));
27204exports.completionResolveProvider = void 0;
27205var builtin_1 = __webpack_require__(77);
27206var completionResolveProvider = function (params) {
27207 return builtin_1.builtinDocs.getDocumentByCompletionItem(params);
27208};
27209exports.completionResolveProvider = completionResolveProvider;
27210
27211
27212/***/ }),
27213/* 177 */
27214/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27215
27216"use strict";
27217
27218Object.defineProperty(exports, "__esModule", ({ value: true }));
27219exports.definitionProvider = void 0;
27220var util_1 = __webpack_require__(66);
27221var documents_1 = __webpack_require__(74);
27222var workspaces_1 = __webpack_require__(167);
27223var definitionProvider = function (params) {
27224 var textDocument = params.textDocument, position = params.position;
27225 var doc = documents_1.documents.get(textDocument.uri);
27226 if (!doc) {
27227 return null;
27228 }
27229 var words = util_1.getWordFromPosition(doc, position);
27230 if (!words) {
27231 return null;
27232 }
27233 var currentName = words.word;
27234 if (/\./.test(words.right)) {
27235 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
27236 currentName = words.word.replace(tail, "");
27237 }
27238 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations;
27239};
27240exports.definitionProvider = definitionProvider;
27241
27242
27243/***/ }),
27244/* 178 */
27245/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27246
27247"use strict";
27248
27249Object.defineProperty(exports, "__esModule", ({ value: true }));
27250exports.documentHighlightProvider = void 0;
27251var util_1 = __webpack_require__(66);
27252var documents_1 = __webpack_require__(74);
27253var workspaces_1 = __webpack_require__(167);
27254exports.documentHighlightProvider = (function (params) {
27255 var textDocument = params.textDocument, position = params.position;
27256 var doc = documents_1.documents.get(textDocument.uri);
27257 if (!doc) {
27258 return [];
27259 }
27260 var words = util_1.getWordFromPosition(doc, position);
27261 if (!words) {
27262 return [];
27263 }
27264 var currentName = words.word;
27265 if (/\./.test(words.right)) {
27266 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
27267 currentName = words.word.replace(tail, "");
27268 }
27269 var defs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "definition");
27270 var refs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "references");
27271 return defs.locations.concat(refs.locations)
27272 .map(function (location) {
27273 return {
27274 range: location.range,
27275 };
27276 });
27277});
27278
27279
27280/***/ }),
27281/* 179 */
27282/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27283
27284"use strict";
27285
27286Object.defineProperty(exports, "__esModule", ({ value: true }));
27287exports.foldingRangeProvider = void 0;
27288var workspaces_1 = __webpack_require__(167);
27289var foldingRangeProvider = function (params) {
27290 var res = [];
27291 var textDocument = params.textDocument;
27292 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
27293 if (!buffer) {
27294 return res;
27295 }
27296 var globalFunctions = buffer.getGlobalFunctions();
27297 var scriptFunctions = buffer.getScriptFunctions();
27298 return Object.values(globalFunctions).concat(Object.values(scriptFunctions))
27299 .reduce(function (pre, cur) {
27300 return pre.concat(cur);
27301 }, [])
27302 .map(function (func) {
27303 return {
27304 startLine: func.startLine - 1,
27305 startCharacter: func.startCol - 1,
27306 endLine: func.endLine - 1,
27307 endCharacter: func.endCol - 1,
27308 kind: "region",
27309 };
27310 });
27311};
27312exports.foldingRangeProvider = foldingRangeProvider;
27313
27314
27315/***/ }),
27316/* 180 */
27317/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27318
27319"use strict";
27320
27321Object.defineProperty(exports, "__esModule", ({ value: true }));
27322exports.hoverProvider = void 0;
27323var util_1 = __webpack_require__(66);
27324var builtin_1 = __webpack_require__(77);
27325var documents_1 = __webpack_require__(74);
27326var hoverProvider = function (params) {
27327 var textDocument = params.textDocument, position = params.position;
27328 var doc = documents_1.documents.get(textDocument.uri);
27329 if (!doc) {
27330 return;
27331 }
27332 var words = util_1.getWordFromPosition(doc, position);
27333 if (!words) {
27334 return;
27335 }
27336 return builtin_1.builtinDocs.getHoverDocument(words.word, words.wordLeft, words.wordRight);
27337};
27338exports.hoverProvider = hoverProvider;
27339
27340
27341/***/ }),
27342/* 181 */
27343/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27344
27345"use strict";
27346
27347Object.defineProperty(exports, "__esModule", ({ value: true }));
27348exports.referencesProvider = void 0;
27349var util_1 = __webpack_require__(66);
27350var documents_1 = __webpack_require__(74);
27351var workspaces_1 = __webpack_require__(167);
27352var referencesProvider = function (params) {
27353 var textDocument = params.textDocument, position = params.position;
27354 var doc = documents_1.documents.get(textDocument.uri);
27355 if (!doc) {
27356 return null;
27357 }
27358 var words = util_1.getWordFromPosition(doc, position);
27359 if (!words) {
27360 return null;
27361 }
27362 var currentName = words.word;
27363 if (/\./.test(words.right)) {
27364 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
27365 currentName = words.word.replace(tail, "");
27366 }
27367 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references").locations;
27368};
27369exports.referencesProvider = referencesProvider;
27370
27371
27372/***/ }),
27373/* 182 */
27374/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27375
27376"use strict";
27377
27378Object.defineProperty(exports, "__esModule", ({ value: true }));
27379exports.renameProvider = exports.prepareProvider = void 0;
27380var vscode_languageserver_1 = __webpack_require__(2);
27381var util_1 = __webpack_require__(66);
27382var documents_1 = __webpack_require__(74);
27383var workspaces_1 = __webpack_require__(167);
27384var prepareProvider = function (params) {
27385 var textDocument = params.textDocument, position = params.position;
27386 var doc = documents_1.documents.get(textDocument.uri);
27387 if (!doc) {
27388 return null;
27389 }
27390 var words = util_1.getWordFromPosition(doc, position);
27391 if (!words) {
27392 return null;
27393 }
27394 var currentName = words.word;
27395 if (/\./.test(words.right)) {
27396 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
27397 currentName = words.word.replace(tail, "");
27398 }
27399 return {
27400 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, position.character - words.left.length), vscode_languageserver_1.Position.create(position.line, position.character + words.right.length - 1)),
27401 placeholder: currentName,
27402 };
27403};
27404exports.prepareProvider = prepareProvider;
27405var renameProvider = function (params) {
27406 var textDocument = params.textDocument, position = params.position, newName = params.newName;
27407 var doc = documents_1.documents.get(textDocument.uri);
27408 if (!doc) {
27409 return null;
27410 }
27411 var words = util_1.getWordFromPosition(doc, position);
27412 if (!words) {
27413 return null;
27414 }
27415 var currentName = words.word;
27416 if (/\./.test(words.right)) {
27417 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
27418 currentName = words.word.replace(tail, "");
27419 }
27420 var changes = {};
27421 var isChange = false;
27422 workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations
27423 .forEach(function (l) {
27424 isChange = true;
27425 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
27426 changes[l.uri] = [];
27427 }
27428 changes[l.uri].push({
27429 newText: /^a:/.test(newName) ? newName.slice(2) : newName,
27430 range: l.range,
27431 });
27432 });
27433 var refs = workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references");
27434 refs.locations.forEach(function (l) {
27435 isChange = true;
27436 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
27437 changes[l.uri] = [];
27438 }
27439 changes[l.uri].push({
27440 newText: refs.isFunArg ? "a:" + newName : newName,
27441 range: l.range,
27442 });
27443 });
27444 if (isChange) {
27445 return {
27446 changes: changes,
27447 };
27448 }
27449 return null;
27450};
27451exports.renameProvider = renameProvider;
27452
27453
27454/***/ }),
27455/* 183 */
27456/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
27457
27458"use strict";
27459
27460Object.defineProperty(exports, "__esModule", ({ value: true }));
27461exports.signatureHelpProvider = void 0;
27462var vscode_languageserver_1 = __webpack_require__(2);
27463var patterns_1 = __webpack_require__(72);
27464var builtin_1 = __webpack_require__(77);
27465var documents_1 = __webpack_require__(74);
27466var signatureHelpProvider = function (params) {
27467 var textDocument = params.textDocument, position = params.position;
27468 var doc = documents_1.documents.get(textDocument.uri);
27469 if (!doc) {
27470 return;
27471 }
27472 var currentLine = doc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), vscode_languageserver_1.Position.create(position.line + 1, 0)));
27473 // comment line
27474 if (patterns_1.commentPattern.test(currentLine)) {
27475 return;
27476 }
27477 var preSegment = currentLine.slice(0, position.character);
27478 var m = preSegment.match(/([\w#&:]+)[ \t]*\(([^()]*|\([^)]*\))*$/);
27479 if (!m) {
27480 return;
27481 }
27482 var functionName = m["1"];
27483 var placeIdx = m[0].split(",").length - 1;
27484 return builtin_1.builtinDocs.getSignatureHelpByName(functionName, placeIdx);
27485};
27486exports.signatureHelpProvider = signatureHelpProvider;
27487
27488
27489/***/ }),
27490/* 184 */
27491/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
27492
27493"use strict";
27494
27495var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
27496 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27497 return new (P || (P = Promise))(function (resolve, reject) {
27498 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27499 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27500 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27501 step((generator = generator.apply(thisArg, _arguments || [])).next());
27502 });
27503};
27504var __generator = (this && this.__generator) || function (thisArg, body) {
27505 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27506 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
27507 function verb(n) { return function (v) { return step([n, v]); }; }
27508 function step(op) {
27509 if (f) throw new TypeError("Generator is already executing.");
27510 while (_) try {
27511 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
27512 if (y = 0, t) op = [op[0] & 2, t.value];
27513 switch (op[0]) {
27514 case 0: case 1: t = op; break;
27515 case 4: _.label++; return { value: op[1], done: false };
27516 case 5: _.label++; y = op[1]; op = [0]; continue;
27517 case 7: op = _.ops.pop(); _.trys.pop(); continue;
27518 default:
27519 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27520 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27521 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
27522 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
27523 if (t[2]) _.ops.pop();
27524 _.trys.pop(); continue;
27525 }
27526 op = body.call(thisArg, _);
27527 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
27528 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27529 }
27530};
27531var __importDefault = (this && this.__importDefault) || function (mod) {
27532 return (mod && mod.__esModule) ? mod : { "default": mod };
27533};
27534Object.defineProperty(exports, "__esModule", ({ value: true }));
27535exports.parserFiles = exports.scanRuntimePaths = exports.unsubscribe = exports.next = void 0;
27536var child_process_1 = __importDefault(__webpack_require__(61));
27537var path_1 = __webpack_require__(23);
27538var rxjs_1 = __webpack_require__(185);
27539var waitMap_1 = __webpack_require__(288);
27540var operators_1 = __webpack_require__(289);
27541var vscode_uri_1 = __webpack_require__(168);
27542var logger_1 = __importDefault(__webpack_require__(155));
27543var util_1 = __webpack_require__(66);
27544var diagnostic_1 = __webpack_require__(387);
27545var config_1 = __importDefault(__webpack_require__(73));
27546var workspaces_1 = __webpack_require__(167);
27547var log = logger_1.default("parser");
27548var parserHandles = {};
27549var indexes = {};
27550var indexesFsPaths = {};
27551var origin$ = new rxjs_1.Subject();
27552var parserCallbacks = {};
27553var queueFsPaths = [];
27554var scanProcess;
27555var isScanRuntimepath = false;
27556var isParsing = false;
27557function send(params) {
27558 if (!scanProcess) {
27559 log.log('scan process do not exists');
27560 return false;
27561 }
27562 if (scanProcess.signalCode) {
27563 log.log("scan process signal code: " + scanProcess.signalCode);
27564 return false;
27565 }
27566 if (scanProcess.killed) {
27567 log.log('scan process was killed');
27568 return false;
27569 }
27570 scanProcess.send(params, function (err) {
27571 if (err) {
27572 log.warn("Send error: " + (err.stack || err.message || err.name));
27573 }
27574 });
27575 return true;
27576}
27577function startIndex() {
27578 if (scanProcess) {
27579 return;
27580 }
27581 scanProcess = child_process_1.default.fork(path_1.join(__dirname, "scan.js"), ["--node-ipc"]);
27582 scanProcess.on("message", function (mess) {
27583 var msglog = mess.msglog, id = mess.id, res = mess.res, error = mess.error, fsPaths = mess.fsPaths;
27584 if (msglog) {
27585 log.info("child_log: " + msglog);
27586 }
27587 if (fsPaths) {
27588 parserFiles(fsPaths);
27589 }
27590 if (id && parserCallbacks[id]) {
27591 parserCallbacks[id]({
27592 res: res,
27593 error: error
27594 });
27595 delete parserCallbacks[id];
27596 }
27597 });
27598 scanProcess.on("error", function (err) {
27599 log.warn("" + (err.stack || err.message || err));
27600 });
27601 scanProcess.on('exit', function (code, signal) {
27602 log.log("exit: " + code + ", signal: " + signal);
27603 });
27604 scanProcess.on('close', function (code, signal) {
27605 log.log("close: " + code + ", signal: " + signal);
27606 });
27607 scanProcess.on('uncaughtException', function (err) {
27608 log.log("Uncaught exception: " + (err.stack || err.message || err.name || err));
27609 });
27610 scanProcess.on('disconnect', function () {
27611 log.log("disconnect");
27612 });
27613 send({
27614 config: {
27615 gap: config_1.default.indexes.gap,
27616 count: config_1.default.indexes.count,
27617 projectRootPatterns: config_1.default.indexes.projectRootPatterns,
27618 },
27619 });
27620}
27621function next(textDoc) {
27622 if (!parserHandles[textDoc.uri]) {
27623 var uri_1 = textDoc.uri;
27624 parserHandles[uri_1] = origin$.pipe(operators_1.filter(function (td) { return uri_1 === td.uri; }), operators_1.switchMap(function (td) {
27625 return rxjs_1.timer(100).pipe(operators_1.map(function () { return td; }));
27626 }), waitMap_1.waitMap(function (td) {
27627 var id = Date.now() + "-" + Math.random();
27628 return rxjs_1.from(new Promise(function (res) {
27629 parserCallbacks[id] = res;
27630 send({
27631 id: id,
27632 uri: uri_1,
27633 text: td.getText()
27634 });
27635 })).pipe(operators_1.timeout(10000), operators_1.catchError(function () {
27636 if (parserCallbacks[id]) {
27637 delete parserCallbacks[id];
27638 }
27639 scanProcess.kill();
27640 scanProcess = undefined;
27641 return rxjs_1.of({
27642 res: '',
27643 error: "Timeout: 10000ms",
27644 isTimeout: true,
27645 });
27646 }));
27647 }, true)).subscribe(function (data) {
27648 var res = data.res, error = data.error, isTimeout = data.isTimeout;
27649 if (res) {
27650 if (config_1.default.diagnostic.enable) {
27651 // handle diagnostic
27652 diagnostic_1.handleDiagnostic(textDoc, res[1]);
27653 }
27654 // handle node
27655 workspaces_1.workspace.updateBuffer(uri_1, res[0]);
27656 }
27657 if (error) {
27658 log.error("Parse " + uri_1 + " error: " + error);
27659 }
27660 if (isTimeout) {
27661 log.showErrorMessage("Parse " + uri_1 + " error: " + error);
27662 }
27663 // scan project
27664 if (!indexes[uri_1]) {
27665 indexes[uri_1] = true;
27666 send({
27667 uri: uri_1,
27668 });
27669 if (!isScanRuntimepath) {
27670 isScanRuntimepath = true;
27671 scanRuntimePaths([config_1.default.vimruntime].concat(config_1.default.runtimepath));
27672 }
27673 }
27674 }, function (err) {
27675 log.warn("" + (err.stack || err.message || err));
27676 });
27677 }
27678 if (!scanProcess) {
27679 startIndex();
27680 }
27681 origin$.next(textDoc);
27682}
27683exports.next = next;
27684function unsubscribe(textDoc) {
27685 if (parserHandles[textDoc.uri] !== undefined) {
27686 parserHandles[textDoc.uri].unsubscribe();
27687 }
27688 parserHandles[textDoc.uri] = undefined;
27689}
27690exports.unsubscribe = unsubscribe;
27691// scan directory
27692function scanRuntimePaths(paths) {
27693 if (!scanProcess) {
27694 startIndex();
27695 }
27696 if (config_1.default.indexes.runtimepath) {
27697 var list = [].concat(paths);
27698 for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
27699 var p = list_1[_i];
27700 if (!p) {
27701 continue;
27702 }
27703 p = p.trim();
27704 if (!p || p === "/") {
27705 continue;
27706 }
27707 var uri = vscode_uri_1.URI.file(path_1.join(p, "f")).toString();
27708 if (!indexes[uri]) {
27709 indexes[uri] = true;
27710 send({
27711 uri: uri
27712 });
27713 }
27714 }
27715 }
27716}
27717exports.scanRuntimePaths = scanRuntimePaths;
27718function parserFiles(paths) {
27719 return __awaiter(this, void 0, void 0, function () {
27720 var _this = this;
27721 return __generator(this, function (_a) {
27722 switch (_a.label) {
27723 case 0:
27724 queueFsPaths.push.apply(queueFsPaths, paths);
27725 if (isParsing) {
27726 return [2 /*return*/];
27727 }
27728 isParsing = true;
27729 _a.label = 1;
27730 case 1:
27731 if (!queueFsPaths.length) return [3 /*break*/, 4];
27732 return [4 /*yield*/, Promise.all(Array(config_1.default.indexes.count).fill('').map(function () { return __awaiter(_this, void 0, void 0, function () {
27733 var fsPath, id, data, uri;
27734 return __generator(this, function (_a) {
27735 switch (_a.label) {
27736 case 0:
27737 fsPath = queueFsPaths.shift();
27738 if (!fsPath || indexesFsPaths[fsPath]) {
27739 return [2 /*return*/];
27740 }
27741 indexesFsPaths[fsPath] = true;
27742 id = Date.now() + "-" + Math.random();
27743 return [4 /*yield*/, new Promise(function (res) {
27744 parserCallbacks[id] = res;
27745 var isSend = send({
27746 id: id,
27747 fsPath: fsPath
27748 });
27749 if (isSend) {
27750 setTimeout(function () {
27751 delete parserCallbacks[id];
27752 res({
27753 error: 'Timeout 10000ms',
27754 timeout: true
27755 });
27756 }, 10000);
27757 }
27758 else {
27759 queueFsPaths.unshift(fsPath);
27760 delete parserCallbacks[id];
27761 res({
27762 error: "Cancel parser since scan process does not exists"
27763 });
27764 }
27765 })];
27766 case 1:
27767 data = _a.sent();
27768 if (data.res && data.res[0]) {
27769 uri = vscode_uri_1.URI.file(fsPath).toString();
27770 if (!workspaces_1.workspace.isExistsBuffer(uri)) {
27771 workspaces_1.workspace.updateBuffer(uri, data.res[0]);
27772 }
27773 }
27774 if (data.error) {
27775 log.error("Parse " + fsPath + " error: " + data.error);
27776 }
27777 if (data.timeout) {
27778 scanProcess.kill();
27779 scanProcess = undefined;
27780 startIndex();
27781 log.showErrorMessage("Parse " + fsPath + " error: " + data.error);
27782 }
27783 return [2 /*return*/];
27784 }
27785 });
27786 }); }))];
27787 case 2:
27788 _a.sent();
27789 return [4 /*yield*/, util_1.delay(config_1.default.indexes.gap)];
27790 case 3:
27791 _a.sent();
27792 return [3 /*break*/, 1];
27793 case 4:
27794 isParsing = false;
27795 return [2 /*return*/];
27796 }
27797 });
27798 });
27799}
27800exports.parserFiles = parserFiles;
27801
27802
27803/***/ }),
27804/* 185 */
27805/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27806
27807"use strict";
27808__webpack_require__.r(__webpack_exports__);
27809/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27810/* harmony export */ "Observable": () => (/* reexport safe */ _internal_Observable__WEBPACK_IMPORTED_MODULE_0__.Observable),
27811/* harmony export */ "ConnectableObservable": () => (/* reexport safe */ _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__.ConnectableObservable),
27812/* harmony export */ "GroupedObservable": () => (/* reexport safe */ _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__.GroupedObservable),
27813/* harmony export */ "observable": () => (/* reexport safe */ _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__.observable),
27814/* harmony export */ "Subject": () => (/* reexport safe */ _internal_Subject__WEBPACK_IMPORTED_MODULE_4__.Subject),
27815/* harmony export */ "BehaviorSubject": () => (/* reexport safe */ _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__.BehaviorSubject),
27816/* harmony export */ "ReplaySubject": () => (/* reexport safe */ _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__.ReplaySubject),
27817/* harmony export */ "AsyncSubject": () => (/* reexport safe */ _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__.AsyncSubject),
27818/* harmony export */ "asap": () => (/* reexport safe */ _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__.asap),
27819/* harmony export */ "asapScheduler": () => (/* reexport safe */ _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__.asapScheduler),
27820/* harmony export */ "async": () => (/* reexport safe */ _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__.async),
27821/* harmony export */ "asyncScheduler": () => (/* reexport safe */ _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__.asyncScheduler),
27822/* harmony export */ "queue": () => (/* reexport safe */ _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__.queue),
27823/* harmony export */ "queueScheduler": () => (/* reexport safe */ _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__.queueScheduler),
27824/* harmony export */ "animationFrame": () => (/* reexport safe */ _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__.animationFrame),
27825/* harmony export */ "animationFrameScheduler": () => (/* reexport safe */ _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__.animationFrameScheduler),
27826/* harmony export */ "VirtualTimeScheduler": () => (/* reexport safe */ _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__.VirtualTimeScheduler),
27827/* harmony export */ "VirtualAction": () => (/* reexport safe */ _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__.VirtualAction),
27828/* harmony export */ "Scheduler": () => (/* reexport safe */ _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__.Scheduler),
27829/* harmony export */ "Subscription": () => (/* reexport safe */ _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__.Subscription),
27830/* harmony export */ "Subscriber": () => (/* reexport safe */ _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__.Subscriber),
27831/* harmony export */ "Notification": () => (/* reexport safe */ _internal_Notification__WEBPACK_IMPORTED_MODULE_16__.Notification),
27832/* harmony export */ "NotificationKind": () => (/* reexport safe */ _internal_Notification__WEBPACK_IMPORTED_MODULE_16__.NotificationKind),
27833/* harmony export */ "pipe": () => (/* reexport safe */ _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__.pipe),
27834/* harmony export */ "noop": () => (/* reexport safe */ _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__.noop),
27835/* harmony export */ "identity": () => (/* reexport safe */ _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__.identity),
27836/* harmony export */ "isObservable": () => (/* reexport safe */ _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__.isObservable),
27837/* harmony export */ "ArgumentOutOfRangeError": () => (/* reexport safe */ _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__.ArgumentOutOfRangeError),
27838/* harmony export */ "EmptyError": () => (/* reexport safe */ _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__.EmptyError),
27839/* harmony export */ "ObjectUnsubscribedError": () => (/* reexport safe */ _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__.ObjectUnsubscribedError),
27840/* harmony export */ "UnsubscriptionError": () => (/* reexport safe */ _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__.UnsubscriptionError),
27841/* harmony export */ "TimeoutError": () => (/* reexport safe */ _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__.TimeoutError),
27842/* harmony export */ "bindCallback": () => (/* reexport safe */ _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__.bindCallback),
27843/* harmony export */ "bindNodeCallback": () => (/* reexport safe */ _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__.bindNodeCallback),
27844/* harmony export */ "combineLatest": () => (/* reexport safe */ _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__.combineLatest),
27845/* harmony export */ "concat": () => (/* reexport safe */ _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__.concat),
27846/* harmony export */ "defer": () => (/* reexport safe */ _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__.defer),
27847/* harmony export */ "empty": () => (/* reexport safe */ _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__.empty),
27848/* harmony export */ "forkJoin": () => (/* reexport safe */ _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__.forkJoin),
27849/* harmony export */ "from": () => (/* reexport safe */ _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__.from),
27850/* harmony export */ "fromEvent": () => (/* reexport safe */ _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__.fromEvent),
27851/* harmony export */ "fromEventPattern": () => (/* reexport safe */ _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__.fromEventPattern),
27852/* harmony export */ "generate": () => (/* reexport safe */ _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__.generate),
27853/* harmony export */ "iif": () => (/* reexport safe */ _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__.iif),
27854/* harmony export */ "interval": () => (/* reexport safe */ _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__.interval),
27855/* harmony export */ "merge": () => (/* reexport safe */ _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__.merge),
27856/* harmony export */ "never": () => (/* reexport safe */ _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__.never),
27857/* harmony export */ "of": () => (/* reexport safe */ _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__.of),
27858/* harmony export */ "onErrorResumeNext": () => (/* reexport safe */ _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__.onErrorResumeNext),
27859/* harmony export */ "pairs": () => (/* reexport safe */ _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__.pairs),
27860/* harmony export */ "partition": () => (/* reexport safe */ _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__.partition),
27861/* harmony export */ "race": () => (/* reexport safe */ _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__.race),
27862/* harmony export */ "range": () => (/* reexport safe */ _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__.range),
27863/* harmony export */ "throwError": () => (/* reexport safe */ _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__.throwError),
27864/* harmony export */ "timer": () => (/* reexport safe */ _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__.timer),
27865/* harmony export */ "using": () => (/* reexport safe */ _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__.using),
27866/* harmony export */ "zip": () => (/* reexport safe */ _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__.zip),
27867/* harmony export */ "scheduled": () => (/* reexport safe */ _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__.scheduled),
27868/* harmony export */ "EMPTY": () => (/* reexport safe */ _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__.EMPTY),
27869/* harmony export */ "NEVER": () => (/* reexport safe */ _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__.NEVER),
27870/* harmony export */ "config": () => (/* reexport safe */ _internal_config__WEBPACK_IMPORTED_MODULE_52__.config)
27871/* harmony export */ });
27872/* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
27873/* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
27874/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(208);
27875/* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(200);
27876/* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(205);
27877/* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(209);
27878/* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(210);
27879/* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(227);
27880/* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(228);
27881/* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(232);
27882/* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(220);
27883/* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(233);
27884/* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(236);
27885/* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(223);
27886/* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(194);
27887/* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(188);
27888/* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(212);
27889/* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(201);
27890/* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(237);
27891/* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(202);
27892/* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(238);
27893/* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(239);
27894/* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(240);
27895/* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(206);
27896/* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(196);
27897/* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(241);
27898/* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(242);
27899/* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(244);
27900/* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(245);
27901/* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(256);
27902/* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(268);
27903/* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(219);
27904/* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(269);
27905/* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(260);
27906/* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(270);
27907/* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(271);
27908/* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(272);
27909/* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(273);
27910/* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(274);
27911/* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(276);
27912/* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(277);
27913/* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(213);
27914/* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(278);
27915/* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(279);
27916/* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(280);
27917/* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(283);
27918/* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(284);
27919/* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(218);
27920/* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(285);
27921/* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(286);
27922/* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(287);
27923/* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(261);
27924/* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(191);
27925/** PURE_IMPORTS_START PURE_IMPORTS_END */
27926
27927
27928
27929
27930
27931
27932
27933
27934
27935
27936
27937
27938
27939
27940
27941
27942
27943
27944
27945
27946
27947
27948
27949
27950
27951
27952
27953
27954
27955
27956
27957
27958
27959
27960
27961
27962
27963
27964
27965
27966
27967
27968
27969
27970
27971
27972
27973
27974
27975
27976
27977
27978
27979
27980
27981//# sourceMappingURL=index.js.map
27982
27983
27984/***/ }),
27985/* 186 */
27986/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
27987
27988"use strict";
27989__webpack_require__.r(__webpack_exports__);
27990/* harmony export */ __webpack_require__.d(__webpack_exports__, {
27991/* harmony export */ "Observable": () => (/* binding */ Observable)
27992/* harmony export */ });
27993/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(199);
27994/* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(187);
27995/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(200);
27996/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(201);
27997/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(191);
27998/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */
27999
28000
28001
28002
28003
28004var Observable = /*@__PURE__*/ (function () {
28005 function Observable(subscribe) {
28006 this._isScalar = false;
28007 if (subscribe) {
28008 this._subscribe = subscribe;
28009 }
28010 }
28011 Observable.prototype.lift = function (operator) {
28012 var observable = new Observable();
28013 observable.source = this;
28014 observable.operator = operator;
28015 return observable;
28016 };
28017 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
28018 var operator = this.operator;
28019 var sink = (0,_util_toSubscriber__WEBPACK_IMPORTED_MODULE_0__.toSubscriber)(observerOrNext, error, complete);
28020 if (operator) {
28021 sink.add(operator.call(sink, this.source));
28022 }
28023 else {
28024 sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
28025 this._subscribe(sink) :
28026 this._trySubscribe(sink));
28027 }
28028 if (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling) {
28029 if (sink.syncErrorThrowable) {
28030 sink.syncErrorThrowable = false;
28031 if (sink.syncErrorThrown) {
28032 throw sink.syncErrorValue;
28033 }
28034 }
28035 }
28036 return sink;
28037 };
28038 Observable.prototype._trySubscribe = function (sink) {
28039 try {
28040 return this._subscribe(sink);
28041 }
28042 catch (err) {
28043 if (_config__WEBPACK_IMPORTED_MODULE_1__.config.useDeprecatedSynchronousErrorHandling) {
28044 sink.syncErrorThrown = true;
28045 sink.syncErrorValue = err;
28046 }
28047 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_2__.canReportError)(sink)) {
28048 sink.error(err);
28049 }
28050 else {
28051 console.warn(err);
28052 }
28053 }
28054 };
28055 Observable.prototype.forEach = function (next, promiseCtor) {
28056 var _this = this;
28057 promiseCtor = getPromiseCtor(promiseCtor);
28058 return new promiseCtor(function (resolve, reject) {
28059 var subscription;
28060 subscription = _this.subscribe(function (value) {
28061 try {
28062 next(value);
28063 }
28064 catch (err) {
28065 reject(err);
28066 if (subscription) {
28067 subscription.unsubscribe();
28068 }
28069 }
28070 }, reject, resolve);
28071 });
28072 };
28073 Observable.prototype._subscribe = function (subscriber) {
28074 var source = this.source;
28075 return source && source.subscribe(subscriber);
28076 };
28077 Observable.prototype[_symbol_observable__WEBPACK_IMPORTED_MODULE_3__.observable] = function () {
28078 return this;
28079 };
28080 Observable.prototype.pipe = function () {
28081 var operations = [];
28082 for (var _i = 0; _i < arguments.length; _i++) {
28083 operations[_i] = arguments[_i];
28084 }
28085 if (operations.length === 0) {
28086 return this;
28087 }
28088 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_4__.pipeFromArray)(operations)(this);
28089 };
28090 Observable.prototype.toPromise = function (promiseCtor) {
28091 var _this = this;
28092 promiseCtor = getPromiseCtor(promiseCtor);
28093 return new promiseCtor(function (resolve, reject) {
28094 var value;
28095 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
28096 });
28097 };
28098 Observable.create = function (subscribe) {
28099 return new Observable(subscribe);
28100 };
28101 return Observable;
28102}());
28103
28104function getPromiseCtor(promiseCtor) {
28105 if (!promiseCtor) {
28106 promiseCtor = _config__WEBPACK_IMPORTED_MODULE_1__.config.Promise || Promise;
28107 }
28108 if (!promiseCtor) {
28109 throw new Error('no Promise impl found');
28110 }
28111 return promiseCtor;
28112}
28113//# sourceMappingURL=Observable.js.map
28114
28115
28116/***/ }),
28117/* 187 */
28118/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28119
28120"use strict";
28121__webpack_require__.r(__webpack_exports__);
28122/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28123/* harmony export */ "toSubscriber": () => (/* binding */ toSubscriber)
28124/* harmony export */ });
28125/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(188);
28126/* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(193);
28127/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(190);
28128/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */
28129
28130
28131
28132function toSubscriber(nextOrObserver, error, complete) {
28133 if (nextOrObserver) {
28134 if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber) {
28135 return nextOrObserver;
28136 }
28137 if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__.rxSubscriber]) {
28138 return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__.rxSubscriber]();
28139 }
28140 }
28141 if (!nextOrObserver && !error && !complete) {
28142 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber(_Observer__WEBPACK_IMPORTED_MODULE_2__.empty);
28143 }
28144 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber(nextOrObserver, error, complete);
28145}
28146//# sourceMappingURL=toSubscriber.js.map
28147
28148
28149/***/ }),
28150/* 188 */
28151/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28152
28153"use strict";
28154__webpack_require__.r(__webpack_exports__);
28155/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28156/* harmony export */ "Subscriber": () => (/* binding */ Subscriber),
28157/* harmony export */ "SafeSubscriber": () => (/* binding */ SafeSubscriber)
28158/* harmony export */ });
28159/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
28160/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(195);
28161/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(190);
28162/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(194);
28163/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(193);
28164/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(191);
28165/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(192);
28166/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */
28167
28168
28169
28170
28171
28172
28173
28174var Subscriber = /*@__PURE__*/ (function (_super) {
28175 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Subscriber, _super);
28176 function Subscriber(destinationOrNext, error, complete) {
28177 var _this = _super.call(this) || this;
28178 _this.syncErrorValue = null;
28179 _this.syncErrorThrown = false;
28180 _this.syncErrorThrowable = false;
28181 _this.isStopped = false;
28182 switch (arguments.length) {
28183 case 0:
28184 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__.empty;
28185 break;
28186 case 1:
28187 if (!destinationOrNext) {
28188 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_1__.empty;
28189 break;
28190 }
28191 if (typeof destinationOrNext === 'object') {
28192 if (destinationOrNext instanceof Subscriber) {
28193 _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
28194 _this.destination = destinationOrNext;
28195 destinationOrNext.add(_this);
28196 }
28197 else {
28198 _this.syncErrorThrowable = true;
28199 _this.destination = new SafeSubscriber(_this, destinationOrNext);
28200 }
28201 break;
28202 }
28203 default:
28204 _this.syncErrorThrowable = true;
28205 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
28206 break;
28207 }
28208 return _this;
28209 }
28210 Subscriber.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__.rxSubscriber] = function () { return this; };
28211 Subscriber.create = function (next, error, complete) {
28212 var subscriber = new Subscriber(next, error, complete);
28213 subscriber.syncErrorThrowable = false;
28214 return subscriber;
28215 };
28216 Subscriber.prototype.next = function (value) {
28217 if (!this.isStopped) {
28218 this._next(value);
28219 }
28220 };
28221 Subscriber.prototype.error = function (err) {
28222 if (!this.isStopped) {
28223 this.isStopped = true;
28224 this._error(err);
28225 }
28226 };
28227 Subscriber.prototype.complete = function () {
28228 if (!this.isStopped) {
28229 this.isStopped = true;
28230 this._complete();
28231 }
28232 };
28233 Subscriber.prototype.unsubscribe = function () {
28234 if (this.closed) {
28235 return;
28236 }
28237 this.isStopped = true;
28238 _super.prototype.unsubscribe.call(this);
28239 };
28240 Subscriber.prototype._next = function (value) {
28241 this.destination.next(value);
28242 };
28243 Subscriber.prototype._error = function (err) {
28244 this.destination.error(err);
28245 this.unsubscribe();
28246 };
28247 Subscriber.prototype._complete = function () {
28248 this.destination.complete();
28249 this.unsubscribe();
28250 };
28251 Subscriber.prototype._unsubscribeAndRecycle = function () {
28252 var _parentOrParents = this._parentOrParents;
28253 this._parentOrParents = null;
28254 this.unsubscribe();
28255 this.closed = false;
28256 this.isStopped = false;
28257 this._parentOrParents = _parentOrParents;
28258 return this;
28259 };
28260 return Subscriber;
28261}(_Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription));
28262
28263var SafeSubscriber = /*@__PURE__*/ (function (_super) {
28264 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SafeSubscriber, _super);
28265 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
28266 var _this = _super.call(this) || this;
28267 _this._parentSubscriber = _parentSubscriber;
28268 var next;
28269 var context = _this;
28270 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_4__.isFunction)(observerOrNext)) {
28271 next = observerOrNext;
28272 }
28273 else if (observerOrNext) {
28274 next = observerOrNext.next;
28275 error = observerOrNext.error;
28276 complete = observerOrNext.complete;
28277 if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_1__.empty) {
28278 context = Object.create(observerOrNext);
28279 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_4__.isFunction)(context.unsubscribe)) {
28280 _this.add(context.unsubscribe.bind(context));
28281 }
28282 context.unsubscribe = _this.unsubscribe.bind(_this);
28283 }
28284 }
28285 _this._context = context;
28286 _this._next = next;
28287 _this._error = error;
28288 _this._complete = complete;
28289 return _this;
28290 }
28291 SafeSubscriber.prototype.next = function (value) {
28292 if (!this.isStopped && this._next) {
28293 var _parentSubscriber = this._parentSubscriber;
28294 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
28295 this.__tryOrUnsub(this._next, value);
28296 }
28297 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
28298 this.unsubscribe();
28299 }
28300 }
28301 };
28302 SafeSubscriber.prototype.error = function (err) {
28303 if (!this.isStopped) {
28304 var _parentSubscriber = this._parentSubscriber;
28305 var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling;
28306 if (this._error) {
28307 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
28308 this.__tryOrUnsub(this._error, err);
28309 this.unsubscribe();
28310 }
28311 else {
28312 this.__tryOrSetError(_parentSubscriber, this._error, err);
28313 this.unsubscribe();
28314 }
28315 }
28316 else if (!_parentSubscriber.syncErrorThrowable) {
28317 this.unsubscribe();
28318 if (useDeprecatedSynchronousErrorHandling) {
28319 throw err;
28320 }
28321 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
28322 }
28323 else {
28324 if (useDeprecatedSynchronousErrorHandling) {
28325 _parentSubscriber.syncErrorValue = err;
28326 _parentSubscriber.syncErrorThrown = true;
28327 }
28328 else {
28329 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
28330 }
28331 this.unsubscribe();
28332 }
28333 }
28334 };
28335 SafeSubscriber.prototype.complete = function () {
28336 var _this = this;
28337 if (!this.isStopped) {
28338 var _parentSubscriber = this._parentSubscriber;
28339 if (this._complete) {
28340 var wrappedComplete = function () { return _this._complete.call(_this._context); };
28341 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
28342 this.__tryOrUnsub(wrappedComplete);
28343 this.unsubscribe();
28344 }
28345 else {
28346 this.__tryOrSetError(_parentSubscriber, wrappedComplete);
28347 this.unsubscribe();
28348 }
28349 }
28350 else {
28351 this.unsubscribe();
28352 }
28353 }
28354 };
28355 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
28356 try {
28357 fn.call(this._context, value);
28358 }
28359 catch (err) {
28360 this.unsubscribe();
28361 if (_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
28362 throw err;
28363 }
28364 else {
28365 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
28366 }
28367 }
28368 };
28369 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
28370 if (!_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
28371 throw new Error('bad call');
28372 }
28373 try {
28374 fn.call(this._context, value);
28375 }
28376 catch (err) {
28377 if (_config__WEBPACK_IMPORTED_MODULE_5__.config.useDeprecatedSynchronousErrorHandling) {
28378 parent.syncErrorValue = err;
28379 parent.syncErrorThrown = true;
28380 return true;
28381 }
28382 else {
28383 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__.hostReportError)(err);
28384 return true;
28385 }
28386 }
28387 return false;
28388 };
28389 SafeSubscriber.prototype._unsubscribe = function () {
28390 var _parentSubscriber = this._parentSubscriber;
28391 this._context = null;
28392 this._parentSubscriber = null;
28393 _parentSubscriber.unsubscribe();
28394 };
28395 return SafeSubscriber;
28396}(Subscriber));
28397
28398//# sourceMappingURL=Subscriber.js.map
28399
28400
28401/***/ }),
28402/* 189 */
28403/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28404
28405"use strict";
28406__webpack_require__.r(__webpack_exports__);
28407/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28408/* harmony export */ "__extends": () => (/* binding */ __extends),
28409/* harmony export */ "__assign": () => (/* binding */ __assign),
28410/* harmony export */ "__rest": () => (/* binding */ __rest),
28411/* harmony export */ "__decorate": () => (/* binding */ __decorate),
28412/* harmony export */ "__param": () => (/* binding */ __param),
28413/* harmony export */ "__metadata": () => (/* binding */ __metadata),
28414/* harmony export */ "__awaiter": () => (/* binding */ __awaiter),
28415/* harmony export */ "__generator": () => (/* binding */ __generator),
28416/* harmony export */ "__exportStar": () => (/* binding */ __exportStar),
28417/* harmony export */ "__values": () => (/* binding */ __values),
28418/* harmony export */ "__read": () => (/* binding */ __read),
28419/* harmony export */ "__spread": () => (/* binding */ __spread),
28420/* harmony export */ "__spreadArrays": () => (/* binding */ __spreadArrays),
28421/* harmony export */ "__await": () => (/* binding */ __await),
28422/* harmony export */ "__asyncGenerator": () => (/* binding */ __asyncGenerator),
28423/* harmony export */ "__asyncDelegator": () => (/* binding */ __asyncDelegator),
28424/* harmony export */ "__asyncValues": () => (/* binding */ __asyncValues),
28425/* harmony export */ "__makeTemplateObject": () => (/* binding */ __makeTemplateObject),
28426/* harmony export */ "__importStar": () => (/* binding */ __importStar),
28427/* harmony export */ "__importDefault": () => (/* binding */ __importDefault)
28428/* harmony export */ });
28429/*! *****************************************************************************
28430Copyright (c) Microsoft Corporation. All rights reserved.
28431Licensed under the Apache License, Version 2.0 (the "License"); you may not use
28432this file except in compliance with the License. You may obtain a copy of the
28433License at http://www.apache.org/licenses/LICENSE-2.0
28434
28435THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
28436KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
28437WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
28438MERCHANTABLITY OR NON-INFRINGEMENT.
28439
28440See the Apache Version 2.0 License for specific language governing permissions
28441and limitations under the License.
28442***************************************************************************** */
28443/* global Reflect, Promise */
28444
28445var extendStatics = function(d, b) {
28446 extendStatics = Object.setPrototypeOf ||
28447 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
28448 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
28449 return extendStatics(d, b);
28450};
28451
28452function __extends(d, b) {
28453 extendStatics(d, b);
28454 function __() { this.constructor = d; }
28455 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28456}
28457
28458var __assign = function() {
28459 __assign = Object.assign || function __assign(t) {
28460 for (var s, i = 1, n = arguments.length; i < n; i++) {
28461 s = arguments[i];
28462 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
28463 }
28464 return t;
28465 }
28466 return __assign.apply(this, arguments);
28467}
28468
28469function __rest(s, e) {
28470 var t = {};
28471 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
28472 t[p] = s[p];
28473 if (s != null && typeof Object.getOwnPropertySymbols === "function")
28474 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
28475 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
28476 t[p[i]] = s[p[i]];
28477 }
28478 return t;
28479}
28480
28481function __decorate(decorators, target, key, desc) {
28482 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28483 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28484 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28485 return c > 3 && r && Object.defineProperty(target, key, r), r;
28486}
28487
28488function __param(paramIndex, decorator) {
28489 return function (target, key) { decorator(target, key, paramIndex); }
28490}
28491
28492function __metadata(metadataKey, metadataValue) {
28493 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
28494}
28495
28496function __awaiter(thisArg, _arguments, P, generator) {
28497 return new (P || (P = Promise))(function (resolve, reject) {
28498 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
28499 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
28500 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
28501 step((generator = generator.apply(thisArg, _arguments || [])).next());
28502 });
28503}
28504
28505function __generator(thisArg, body) {
28506 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28507 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
28508 function verb(n) { return function (v) { return step([n, v]); }; }
28509 function step(op) {
28510 if (f) throw new TypeError("Generator is already executing.");
28511 while (_) try {
28512 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
28513 if (y = 0, t) op = [op[0] & 2, t.value];
28514 switch (op[0]) {
28515 case 0: case 1: t = op; break;
28516 case 4: _.label++; return { value: op[1], done: false };
28517 case 5: _.label++; y = op[1]; op = [0]; continue;
28518 case 7: op = _.ops.pop(); _.trys.pop(); continue;
28519 default:
28520 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28521 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28522 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
28523 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
28524 if (t[2]) _.ops.pop();
28525 _.trys.pop(); continue;
28526 }
28527 op = body.call(thisArg, _);
28528 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
28529 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
28530 }
28531}
28532
28533function __exportStar(m, exports) {
28534 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
28535}
28536
28537function __values(o) {
28538 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
28539 if (m) return m.call(o);
28540 return {
28541 next: function () {
28542 if (o && i >= o.length) o = void 0;
28543 return { value: o && o[i++], done: !o };
28544 }
28545 };
28546}
28547
28548function __read(o, n) {
28549 var m = typeof Symbol === "function" && o[Symbol.iterator];
28550 if (!m) return o;
28551 var i = m.call(o), r, ar = [], e;
28552 try {
28553 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
28554 }
28555 catch (error) { e = { error: error }; }
28556 finally {
28557 try {
28558 if (r && !r.done && (m = i["return"])) m.call(i);
28559 }
28560 finally { if (e) throw e.error; }
28561 }
28562 return ar;
28563}
28564
28565function __spread() {
28566 for (var ar = [], i = 0; i < arguments.length; i++)
28567 ar = ar.concat(__read(arguments[i]));
28568 return ar;
28569}
28570
28571function __spreadArrays() {
28572 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
28573 for (var r = Array(s), k = 0, i = 0; i < il; i++)
28574 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
28575 r[k] = a[j];
28576 return r;
28577};
28578
28579function __await(v) {
28580 return this instanceof __await ? (this.v = v, this) : new __await(v);
28581}
28582
28583function __asyncGenerator(thisArg, _arguments, generator) {
28584 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
28585 var g = generator.apply(thisArg, _arguments || []), i, q = [];
28586 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
28587 function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
28588 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
28589 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
28590 function fulfill(value) { resume("next", value); }
28591 function reject(value) { resume("throw", value); }
28592 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
28593}
28594
28595function __asyncDelegator(o) {
28596 var i, p;
28597 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
28598 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
28599}
28600
28601function __asyncValues(o) {
28602 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
28603 var m = o[Symbol.asyncIterator], i;
28604 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
28605 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
28606 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
28607}
28608
28609function __makeTemplateObject(cooked, raw) {
28610 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
28611 return cooked;
28612};
28613
28614function __importStar(mod) {
28615 if (mod && mod.__esModule) return mod;
28616 var result = {};
28617 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
28618 result.default = mod;
28619 return result;
28620}
28621
28622function __importDefault(mod) {
28623 return (mod && mod.__esModule) ? mod : { default: mod };
28624}
28625
28626
28627/***/ }),
28628/* 190 */
28629/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28630
28631"use strict";
28632__webpack_require__.r(__webpack_exports__);
28633/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28634/* harmony export */ "empty": () => (/* binding */ empty)
28635/* harmony export */ });
28636/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(191);
28637/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(192);
28638/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */
28639
28640
28641var empty = {
28642 closed: true,
28643 next: function (value) { },
28644 error: function (err) {
28645 if (_config__WEBPACK_IMPORTED_MODULE_0__.config.useDeprecatedSynchronousErrorHandling) {
28646 throw err;
28647 }
28648 else {
28649 (0,_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__.hostReportError)(err);
28650 }
28651 },
28652 complete: function () { }
28653};
28654//# sourceMappingURL=Observer.js.map
28655
28656
28657/***/ }),
28658/* 191 */
28659/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28660
28661"use strict";
28662__webpack_require__.r(__webpack_exports__);
28663/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28664/* harmony export */ "config": () => (/* binding */ config)
28665/* harmony export */ });
28666/** PURE_IMPORTS_START PURE_IMPORTS_END */
28667var _enable_super_gross_mode_that_will_cause_bad_things = false;
28668var config = {
28669 Promise: undefined,
28670 set useDeprecatedSynchronousErrorHandling(value) {
28671 if (value) {
28672 var error = /*@__PURE__*/ new Error();
28673 /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
28674 }
28675 else if (_enable_super_gross_mode_that_will_cause_bad_things) {
28676 /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');
28677 }
28678 _enable_super_gross_mode_that_will_cause_bad_things = value;
28679 },
28680 get useDeprecatedSynchronousErrorHandling() {
28681 return _enable_super_gross_mode_that_will_cause_bad_things;
28682 },
28683};
28684//# sourceMappingURL=config.js.map
28685
28686
28687/***/ }),
28688/* 192 */
28689/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28690
28691"use strict";
28692__webpack_require__.r(__webpack_exports__);
28693/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28694/* harmony export */ "hostReportError": () => (/* binding */ hostReportError)
28695/* harmony export */ });
28696/** PURE_IMPORTS_START PURE_IMPORTS_END */
28697function hostReportError(err) {
28698 setTimeout(function () { throw err; }, 0);
28699}
28700//# sourceMappingURL=hostReportError.js.map
28701
28702
28703/***/ }),
28704/* 193 */
28705/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28706
28707"use strict";
28708__webpack_require__.r(__webpack_exports__);
28709/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28710/* harmony export */ "rxSubscriber": () => (/* binding */ rxSubscriber),
28711/* harmony export */ "$$rxSubscriber": () => (/* binding */ $$rxSubscriber)
28712/* harmony export */ });
28713/** PURE_IMPORTS_START PURE_IMPORTS_END */
28714var rxSubscriber = /*@__PURE__*/ (function () {
28715 return typeof Symbol === 'function'
28716 ? /*@__PURE__*/ Symbol('rxSubscriber')
28717 : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();
28718})();
28719var $$rxSubscriber = rxSubscriber;
28720//# sourceMappingURL=rxSubscriber.js.map
28721
28722
28723/***/ }),
28724/* 194 */
28725/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28726
28727"use strict";
28728__webpack_require__.r(__webpack_exports__);
28729/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28730/* harmony export */ "Subscription": () => (/* binding */ Subscription)
28731/* harmony export */ });
28732/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
28733/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(198);
28734/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
28735/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(196);
28736/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
28737
28738
28739
28740
28741var Subscription = /*@__PURE__*/ (function () {
28742 function Subscription(unsubscribe) {
28743 this.closed = false;
28744 this._parentOrParents = null;
28745 this._subscriptions = null;
28746 if (unsubscribe) {
28747 this._ctorUnsubscribe = true;
28748 this._unsubscribe = unsubscribe;
28749 }
28750 }
28751 Subscription.prototype.unsubscribe = function () {
28752 var errors;
28753 if (this.closed) {
28754 return;
28755 }
28756 var _a = this, _parentOrParents = _a._parentOrParents, _ctorUnsubscribe = _a._ctorUnsubscribe, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
28757 this.closed = true;
28758 this._parentOrParents = null;
28759 this._subscriptions = null;
28760 if (_parentOrParents instanceof Subscription) {
28761 _parentOrParents.remove(this);
28762 }
28763 else if (_parentOrParents !== null) {
28764 for (var index = 0; index < _parentOrParents.length; ++index) {
28765 var parent_1 = _parentOrParents[index];
28766 parent_1.remove(this);
28767 }
28768 }
28769 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(_unsubscribe)) {
28770 if (_ctorUnsubscribe) {
28771 this._unsubscribe = undefined;
28772 }
28773 try {
28774 _unsubscribe.call(this);
28775 }
28776 catch (e) {
28777 errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError ? flattenUnsubscriptionErrors(e.errors) : [e];
28778 }
28779 }
28780 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(_subscriptions)) {
28781 var index = -1;
28782 var len = _subscriptions.length;
28783 while (++index < len) {
28784 var sub = _subscriptions[index];
28785 if ((0,_util_isObject__WEBPACK_IMPORTED_MODULE_3__.isObject)(sub)) {
28786 try {
28787 sub.unsubscribe();
28788 }
28789 catch (e) {
28790 errors = errors || [];
28791 if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError) {
28792 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
28793 }
28794 else {
28795 errors.push(e);
28796 }
28797 }
28798 }
28799 }
28800 }
28801 if (errors) {
28802 throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError(errors);
28803 }
28804 };
28805 Subscription.prototype.add = function (teardown) {
28806 var subscription = teardown;
28807 if (!teardown) {
28808 return Subscription.EMPTY;
28809 }
28810 switch (typeof teardown) {
28811 case 'function':
28812 subscription = new Subscription(teardown);
28813 case 'object':
28814 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
28815 return subscription;
28816 }
28817 else if (this.closed) {
28818 subscription.unsubscribe();
28819 return subscription;
28820 }
28821 else if (!(subscription instanceof Subscription)) {
28822 var tmp = subscription;
28823 subscription = new Subscription();
28824 subscription._subscriptions = [tmp];
28825 }
28826 break;
28827 default: {
28828 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
28829 }
28830 }
28831 var _parentOrParents = subscription._parentOrParents;
28832 if (_parentOrParents === null) {
28833 subscription._parentOrParents = this;
28834 }
28835 else if (_parentOrParents instanceof Subscription) {
28836 if (_parentOrParents === this) {
28837 return subscription;
28838 }
28839 subscription._parentOrParents = [_parentOrParents, this];
28840 }
28841 else if (_parentOrParents.indexOf(this) === -1) {
28842 _parentOrParents.push(this);
28843 }
28844 else {
28845 return subscription;
28846 }
28847 var subscriptions = this._subscriptions;
28848 if (subscriptions === null) {
28849 this._subscriptions = [subscription];
28850 }
28851 else {
28852 subscriptions.push(subscription);
28853 }
28854 return subscription;
28855 };
28856 Subscription.prototype.remove = function (subscription) {
28857 var subscriptions = this._subscriptions;
28858 if (subscriptions) {
28859 var subscriptionIndex = subscriptions.indexOf(subscription);
28860 if (subscriptionIndex !== -1) {
28861 subscriptions.splice(subscriptionIndex, 1);
28862 }
28863 }
28864 };
28865 Subscription.EMPTY = (function (empty) {
28866 empty.closed = true;
28867 return empty;
28868 }(new Subscription()));
28869 return Subscription;
28870}());
28871
28872function flattenUnsubscriptionErrors(errors) {
28873 return errors.reduce(function (errs, err) { return errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_1__.UnsubscriptionError) ? err.errors : err); }, []);
28874}
28875//# sourceMappingURL=Subscription.js.map
28876
28877
28878/***/ }),
28879/* 195 */
28880/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28881
28882"use strict";
28883__webpack_require__.r(__webpack_exports__);
28884/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28885/* harmony export */ "isFunction": () => (/* binding */ isFunction)
28886/* harmony export */ });
28887/** PURE_IMPORTS_START PURE_IMPORTS_END */
28888function isFunction(x) {
28889 return typeof x === 'function';
28890}
28891//# sourceMappingURL=isFunction.js.map
28892
28893
28894/***/ }),
28895/* 196 */
28896/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28897
28898"use strict";
28899__webpack_require__.r(__webpack_exports__);
28900/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28901/* harmony export */ "UnsubscriptionError": () => (/* binding */ UnsubscriptionError)
28902/* harmony export */ });
28903/** PURE_IMPORTS_START PURE_IMPORTS_END */
28904var UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {
28905 function UnsubscriptionErrorImpl(errors) {
28906 Error.call(this);
28907 this.message = errors ?
28908 errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : '';
28909 this.name = 'UnsubscriptionError';
28910 this.errors = errors;
28911 return this;
28912 }
28913 UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
28914 return UnsubscriptionErrorImpl;
28915})();
28916var UnsubscriptionError = UnsubscriptionErrorImpl;
28917//# sourceMappingURL=UnsubscriptionError.js.map
28918
28919
28920/***/ }),
28921/* 197 */
28922/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28923
28924"use strict";
28925__webpack_require__.r(__webpack_exports__);
28926/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28927/* harmony export */ "isArray": () => (/* binding */ isArray)
28928/* harmony export */ });
28929/** PURE_IMPORTS_START PURE_IMPORTS_END */
28930var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();
28931//# sourceMappingURL=isArray.js.map
28932
28933
28934/***/ }),
28935/* 198 */
28936/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28937
28938"use strict";
28939__webpack_require__.r(__webpack_exports__);
28940/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28941/* harmony export */ "isObject": () => (/* binding */ isObject)
28942/* harmony export */ });
28943/** PURE_IMPORTS_START PURE_IMPORTS_END */
28944function isObject(x) {
28945 return x !== null && typeof x === 'object';
28946}
28947//# sourceMappingURL=isObject.js.map
28948
28949
28950/***/ }),
28951/* 199 */
28952/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28953
28954"use strict";
28955__webpack_require__.r(__webpack_exports__);
28956/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28957/* harmony export */ "canReportError": () => (/* binding */ canReportError)
28958/* harmony export */ });
28959/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(188);
28960/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */
28961
28962function canReportError(observer) {
28963 while (observer) {
28964 var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
28965 if (closed_1 || isStopped) {
28966 return false;
28967 }
28968 else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__.Subscriber) {
28969 observer = destination;
28970 }
28971 else {
28972 observer = null;
28973 }
28974 }
28975 return true;
28976}
28977//# sourceMappingURL=canReportError.js.map
28978
28979
28980/***/ }),
28981/* 200 */
28982/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28983
28984"use strict";
28985__webpack_require__.r(__webpack_exports__);
28986/* harmony export */ __webpack_require__.d(__webpack_exports__, {
28987/* harmony export */ "observable": () => (/* binding */ observable)
28988/* harmony export */ });
28989/** PURE_IMPORTS_START PURE_IMPORTS_END */
28990var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();
28991//# sourceMappingURL=observable.js.map
28992
28993
28994/***/ }),
28995/* 201 */
28996/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
28997
28998"use strict";
28999__webpack_require__.r(__webpack_exports__);
29000/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29001/* harmony export */ "pipe": () => (/* binding */ pipe),
29002/* harmony export */ "pipeFromArray": () => (/* binding */ pipeFromArray)
29003/* harmony export */ });
29004/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
29005/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */
29006
29007function pipe() {
29008 var fns = [];
29009 for (var _i = 0; _i < arguments.length; _i++) {
29010 fns[_i] = arguments[_i];
29011 }
29012 return pipeFromArray(fns);
29013}
29014function pipeFromArray(fns) {
29015 if (fns.length === 0) {
29016 return _identity__WEBPACK_IMPORTED_MODULE_0__.identity;
29017 }
29018 if (fns.length === 1) {
29019 return fns[0];
29020 }
29021 return function piped(input) {
29022 return fns.reduce(function (prev, fn) { return fn(prev); }, input);
29023 };
29024}
29025//# sourceMappingURL=pipe.js.map
29026
29027
29028/***/ }),
29029/* 202 */
29030/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29031
29032"use strict";
29033__webpack_require__.r(__webpack_exports__);
29034/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29035/* harmony export */ "identity": () => (/* binding */ identity)
29036/* harmony export */ });
29037/** PURE_IMPORTS_START PURE_IMPORTS_END */
29038function identity(x) {
29039 return x;
29040}
29041//# sourceMappingURL=identity.js.map
29042
29043
29044/***/ }),
29045/* 203 */
29046/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29047
29048"use strict";
29049__webpack_require__.r(__webpack_exports__);
29050/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29051/* harmony export */ "ConnectableObservable": () => (/* binding */ ConnectableObservable),
29052/* harmony export */ "connectableObservableDescriptor": () => (/* binding */ connectableObservableDescriptor)
29053/* harmony export */ });
29054/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29055/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(205);
29056/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
29057/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(188);
29058/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29059/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(204);
29060/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */
29061
29062
29063
29064
29065
29066
29067var ConnectableObservable = /*@__PURE__*/ (function (_super) {
29068 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ConnectableObservable, _super);
29069 function ConnectableObservable(source, subjectFactory) {
29070 var _this = _super.call(this) || this;
29071 _this.source = source;
29072 _this.subjectFactory = subjectFactory;
29073 _this._refCount = 0;
29074 _this._isComplete = false;
29075 return _this;
29076 }
29077 ConnectableObservable.prototype._subscribe = function (subscriber) {
29078 return this.getSubject().subscribe(subscriber);
29079 };
29080 ConnectableObservable.prototype.getSubject = function () {
29081 var subject = this._subject;
29082 if (!subject || subject.isStopped) {
29083 this._subject = this.subjectFactory();
29084 }
29085 return this._subject;
29086 };
29087 ConnectableObservable.prototype.connect = function () {
29088 var connection = this._connection;
29089 if (!connection) {
29090 this._isComplete = false;
29091 connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
29092 connection.add(this.source
29093 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
29094 if (connection.closed) {
29095 this._connection = null;
29096 connection = _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
29097 }
29098 }
29099 return connection;
29100 };
29101 ConnectableObservable.prototype.refCount = function () {
29102 return (0,_operators_refCount__WEBPACK_IMPORTED_MODULE_2__.refCount)()(this);
29103 };
29104 return ConnectableObservable;
29105}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
29106
29107var connectableObservableDescriptor = /*@__PURE__*/ (function () {
29108 var connectableProto = ConnectableObservable.prototype;
29109 return {
29110 operator: { value: null },
29111 _refCount: { value: 0, writable: true },
29112 _subject: { value: null, writable: true },
29113 _connection: { value: null, writable: true },
29114 _subscribe: { value: connectableProto._subscribe },
29115 _isComplete: { value: connectableProto._isComplete, writable: true },
29116 getSubject: { value: connectableProto.getSubject },
29117 connect: { value: connectableProto.connect },
29118 refCount: { value: connectableProto.refCount }
29119 };
29120})();
29121var ConnectableSubscriber = /*@__PURE__*/ (function (_super) {
29122 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ConnectableSubscriber, _super);
29123 function ConnectableSubscriber(destination, connectable) {
29124 var _this = _super.call(this, destination) || this;
29125 _this.connectable = connectable;
29126 return _this;
29127 }
29128 ConnectableSubscriber.prototype._error = function (err) {
29129 this._unsubscribe();
29130 _super.prototype._error.call(this, err);
29131 };
29132 ConnectableSubscriber.prototype._complete = function () {
29133 this.connectable._isComplete = true;
29134 this._unsubscribe();
29135 _super.prototype._complete.call(this);
29136 };
29137 ConnectableSubscriber.prototype._unsubscribe = function () {
29138 var connectable = this.connectable;
29139 if (connectable) {
29140 this.connectable = null;
29141 var connection = connectable._connection;
29142 connectable._refCount = 0;
29143 connectable._subject = null;
29144 connectable._connection = null;
29145 if (connection) {
29146 connection.unsubscribe();
29147 }
29148 }
29149 };
29150 return ConnectableSubscriber;
29151}(_Subject__WEBPACK_IMPORTED_MODULE_4__.SubjectSubscriber));
29152var RefCountOperator = /*@__PURE__*/ (function () {
29153 function RefCountOperator(connectable) {
29154 this.connectable = connectable;
29155 }
29156 RefCountOperator.prototype.call = function (subscriber, source) {
29157 var connectable = this.connectable;
29158 connectable._refCount++;
29159 var refCounter = new RefCountSubscriber(subscriber, connectable);
29160 var subscription = source.subscribe(refCounter);
29161 if (!refCounter.closed) {
29162 refCounter.connection = connectable.connect();
29163 }
29164 return subscription;
29165 };
29166 return RefCountOperator;
29167}());
29168var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
29169 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RefCountSubscriber, _super);
29170 function RefCountSubscriber(destination, connectable) {
29171 var _this = _super.call(this, destination) || this;
29172 _this.connectable = connectable;
29173 return _this;
29174 }
29175 RefCountSubscriber.prototype._unsubscribe = function () {
29176 var connectable = this.connectable;
29177 if (!connectable) {
29178 this.connection = null;
29179 return;
29180 }
29181 this.connectable = null;
29182 var refCount = connectable._refCount;
29183 if (refCount <= 0) {
29184 this.connection = null;
29185 return;
29186 }
29187 connectable._refCount = refCount - 1;
29188 if (refCount > 1) {
29189 this.connection = null;
29190 return;
29191 }
29192 var connection = this.connection;
29193 var sharedConnection = connectable._connection;
29194 this.connection = null;
29195 if (sharedConnection && (!connection || sharedConnection === connection)) {
29196 sharedConnection.unsubscribe();
29197 }
29198 };
29199 return RefCountSubscriber;
29200}(_Subscriber__WEBPACK_IMPORTED_MODULE_5__.Subscriber));
29201//# sourceMappingURL=ConnectableObservable.js.map
29202
29203
29204/***/ }),
29205/* 204 */
29206/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29207
29208"use strict";
29209__webpack_require__.r(__webpack_exports__);
29210/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29211/* harmony export */ "refCount": () => (/* binding */ refCount)
29212/* harmony export */ });
29213/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29214/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
29215/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29216
29217
29218function refCount() {
29219 return function refCountOperatorFunction(source) {
29220 return source.lift(new RefCountOperator(source));
29221 };
29222}
29223var RefCountOperator = /*@__PURE__*/ (function () {
29224 function RefCountOperator(connectable) {
29225 this.connectable = connectable;
29226 }
29227 RefCountOperator.prototype.call = function (subscriber, source) {
29228 var connectable = this.connectable;
29229 connectable._refCount++;
29230 var refCounter = new RefCountSubscriber(subscriber, connectable);
29231 var subscription = source.subscribe(refCounter);
29232 if (!refCounter.closed) {
29233 refCounter.connection = connectable.connect();
29234 }
29235 return subscription;
29236 };
29237 return RefCountOperator;
29238}());
29239var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
29240 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RefCountSubscriber, _super);
29241 function RefCountSubscriber(destination, connectable) {
29242 var _this = _super.call(this, destination) || this;
29243 _this.connectable = connectable;
29244 return _this;
29245 }
29246 RefCountSubscriber.prototype._unsubscribe = function () {
29247 var connectable = this.connectable;
29248 if (!connectable) {
29249 this.connection = null;
29250 return;
29251 }
29252 this.connectable = null;
29253 var refCount = connectable._refCount;
29254 if (refCount <= 0) {
29255 this.connection = null;
29256 return;
29257 }
29258 connectable._refCount = refCount - 1;
29259 if (refCount > 1) {
29260 this.connection = null;
29261 return;
29262 }
29263 var connection = this.connection;
29264 var sharedConnection = connectable._connection;
29265 this.connection = null;
29266 if (sharedConnection && (!connection || sharedConnection === connection)) {
29267 sharedConnection.unsubscribe();
29268 }
29269 };
29270 return RefCountSubscriber;
29271}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
29272//# sourceMappingURL=refCount.js.map
29273
29274
29275/***/ }),
29276/* 205 */
29277/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29278
29279"use strict";
29280__webpack_require__.r(__webpack_exports__);
29281/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29282/* harmony export */ "SubjectSubscriber": () => (/* binding */ SubjectSubscriber),
29283/* harmony export */ "Subject": () => (/* binding */ Subject),
29284/* harmony export */ "AnonymousSubject": () => (/* binding */ AnonymousSubject)
29285/* harmony export */ });
29286/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29287/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(186);
29288/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
29289/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(194);
29290/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(206);
29291/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(207);
29292/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(193);
29293/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */
29294
29295
29296
29297
29298
29299
29300
29301var SubjectSubscriber = /*@__PURE__*/ (function (_super) {
29302 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubjectSubscriber, _super);
29303 function SubjectSubscriber(destination) {
29304 var _this = _super.call(this, destination) || this;
29305 _this.destination = destination;
29306 return _this;
29307 }
29308 return SubjectSubscriber;
29309}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
29310
29311var Subject = /*@__PURE__*/ (function (_super) {
29312 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Subject, _super);
29313 function Subject() {
29314 var _this = _super.call(this) || this;
29315 _this.observers = [];
29316 _this.closed = false;
29317 _this.isStopped = false;
29318 _this.hasError = false;
29319 _this.thrownError = null;
29320 return _this;
29321 }
29322 Subject.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_2__.rxSubscriber] = function () {
29323 return new SubjectSubscriber(this);
29324 };
29325 Subject.prototype.lift = function (operator) {
29326 var subject = new AnonymousSubject(this, this);
29327 subject.operator = operator;
29328 return subject;
29329 };
29330 Subject.prototype.next = function (value) {
29331 if (this.closed) {
29332 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
29333 }
29334 if (!this.isStopped) {
29335 var observers = this.observers;
29336 var len = observers.length;
29337 var copy = observers.slice();
29338 for (var i = 0; i < len; i++) {
29339 copy[i].next(value);
29340 }
29341 }
29342 };
29343 Subject.prototype.error = function (err) {
29344 if (this.closed) {
29345 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
29346 }
29347 this.hasError = true;
29348 this.thrownError = err;
29349 this.isStopped = true;
29350 var observers = this.observers;
29351 var len = observers.length;
29352 var copy = observers.slice();
29353 for (var i = 0; i < len; i++) {
29354 copy[i].error(err);
29355 }
29356 this.observers.length = 0;
29357 };
29358 Subject.prototype.complete = function () {
29359 if (this.closed) {
29360 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
29361 }
29362 this.isStopped = true;
29363 var observers = this.observers;
29364 var len = observers.length;
29365 var copy = observers.slice();
29366 for (var i = 0; i < len; i++) {
29367 copy[i].complete();
29368 }
29369 this.observers.length = 0;
29370 };
29371 Subject.prototype.unsubscribe = function () {
29372 this.isStopped = true;
29373 this.closed = true;
29374 this.observers = null;
29375 };
29376 Subject.prototype._trySubscribe = function (subscriber) {
29377 if (this.closed) {
29378 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
29379 }
29380 else {
29381 return _super.prototype._trySubscribe.call(this, subscriber);
29382 }
29383 };
29384 Subject.prototype._subscribe = function (subscriber) {
29385 if (this.closed) {
29386 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_3__.ObjectUnsubscribedError();
29387 }
29388 else if (this.hasError) {
29389 subscriber.error(this.thrownError);
29390 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
29391 }
29392 else if (this.isStopped) {
29393 subscriber.complete();
29394 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
29395 }
29396 else {
29397 this.observers.push(subscriber);
29398 return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__.SubjectSubscription(this, subscriber);
29399 }
29400 };
29401 Subject.prototype.asObservable = function () {
29402 var observable = new _Observable__WEBPACK_IMPORTED_MODULE_6__.Observable();
29403 observable.source = this;
29404 return observable;
29405 };
29406 Subject.create = function (destination, source) {
29407 return new AnonymousSubject(destination, source);
29408 };
29409 return Subject;
29410}(_Observable__WEBPACK_IMPORTED_MODULE_6__.Observable));
29411
29412var AnonymousSubject = /*@__PURE__*/ (function (_super) {
29413 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnonymousSubject, _super);
29414 function AnonymousSubject(destination, source) {
29415 var _this = _super.call(this) || this;
29416 _this.destination = destination;
29417 _this.source = source;
29418 return _this;
29419 }
29420 AnonymousSubject.prototype.next = function (value) {
29421 var destination = this.destination;
29422 if (destination && destination.next) {
29423 destination.next(value);
29424 }
29425 };
29426 AnonymousSubject.prototype.error = function (err) {
29427 var destination = this.destination;
29428 if (destination && destination.error) {
29429 this.destination.error(err);
29430 }
29431 };
29432 AnonymousSubject.prototype.complete = function () {
29433 var destination = this.destination;
29434 if (destination && destination.complete) {
29435 this.destination.complete();
29436 }
29437 };
29438 AnonymousSubject.prototype._subscribe = function (subscriber) {
29439 var source = this.source;
29440 if (source) {
29441 return this.source.subscribe(subscriber);
29442 }
29443 else {
29444 return _Subscription__WEBPACK_IMPORTED_MODULE_4__.Subscription.EMPTY;
29445 }
29446 };
29447 return AnonymousSubject;
29448}(Subject));
29449
29450//# sourceMappingURL=Subject.js.map
29451
29452
29453/***/ }),
29454/* 206 */
29455/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29456
29457"use strict";
29458__webpack_require__.r(__webpack_exports__);
29459/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29460/* harmony export */ "ObjectUnsubscribedError": () => (/* binding */ ObjectUnsubscribedError)
29461/* harmony export */ });
29462/** PURE_IMPORTS_START PURE_IMPORTS_END */
29463var ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {
29464 function ObjectUnsubscribedErrorImpl() {
29465 Error.call(this);
29466 this.message = 'object unsubscribed';
29467 this.name = 'ObjectUnsubscribedError';
29468 return this;
29469 }
29470 ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29471 return ObjectUnsubscribedErrorImpl;
29472})();
29473var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
29474//# sourceMappingURL=ObjectUnsubscribedError.js.map
29475
29476
29477/***/ }),
29478/* 207 */
29479/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29480
29481"use strict";
29482__webpack_require__.r(__webpack_exports__);
29483/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29484/* harmony export */ "SubjectSubscription": () => (/* binding */ SubjectSubscription)
29485/* harmony export */ });
29486/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29487/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29488/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
29489
29490
29491var SubjectSubscription = /*@__PURE__*/ (function (_super) {
29492 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubjectSubscription, _super);
29493 function SubjectSubscription(subject, subscriber) {
29494 var _this = _super.call(this) || this;
29495 _this.subject = subject;
29496 _this.subscriber = subscriber;
29497 _this.closed = false;
29498 return _this;
29499 }
29500 SubjectSubscription.prototype.unsubscribe = function () {
29501 if (this.closed) {
29502 return;
29503 }
29504 this.closed = true;
29505 var subject = this.subject;
29506 var observers = subject.observers;
29507 this.subject = null;
29508 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
29509 return;
29510 }
29511 var subscriberIndex = observers.indexOf(this.subscriber);
29512 if (subscriberIndex !== -1) {
29513 observers.splice(subscriberIndex, 1);
29514 }
29515 };
29516 return SubjectSubscription;
29517}(_Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription));
29518
29519//# sourceMappingURL=SubjectSubscription.js.map
29520
29521
29522/***/ }),
29523/* 208 */
29524/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29525
29526"use strict";
29527__webpack_require__.r(__webpack_exports__);
29528/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29529/* harmony export */ "groupBy": () => (/* binding */ groupBy),
29530/* harmony export */ "GroupedObservable": () => (/* binding */ GroupedObservable)
29531/* harmony export */ });
29532/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29533/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
29534/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(194);
29535/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(186);
29536/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29537/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription,_Observable,_Subject PURE_IMPORTS_END */
29538
29539
29540
29541
29542
29543function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
29544 return function (source) {
29545 return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
29546 };
29547}
29548var GroupByOperator = /*@__PURE__*/ (function () {
29549 function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
29550 this.keySelector = keySelector;
29551 this.elementSelector = elementSelector;
29552 this.durationSelector = durationSelector;
29553 this.subjectSelector = subjectSelector;
29554 }
29555 GroupByOperator.prototype.call = function (subscriber, source) {
29556 return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
29557 };
29558 return GroupByOperator;
29559}());
29560var GroupBySubscriber = /*@__PURE__*/ (function (_super) {
29561 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupBySubscriber, _super);
29562 function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
29563 var _this = _super.call(this, destination) || this;
29564 _this.keySelector = keySelector;
29565 _this.elementSelector = elementSelector;
29566 _this.durationSelector = durationSelector;
29567 _this.subjectSelector = subjectSelector;
29568 _this.groups = null;
29569 _this.attemptedToUnsubscribe = false;
29570 _this.count = 0;
29571 return _this;
29572 }
29573 GroupBySubscriber.prototype._next = function (value) {
29574 var key;
29575 try {
29576 key = this.keySelector(value);
29577 }
29578 catch (err) {
29579 this.error(err);
29580 return;
29581 }
29582 this._group(value, key);
29583 };
29584 GroupBySubscriber.prototype._group = function (value, key) {
29585 var groups = this.groups;
29586 if (!groups) {
29587 groups = this.groups = new Map();
29588 }
29589 var group = groups.get(key);
29590 var element;
29591 if (this.elementSelector) {
29592 try {
29593 element = this.elementSelector(value);
29594 }
29595 catch (err) {
29596 this.error(err);
29597 }
29598 }
29599 else {
29600 element = value;
29601 }
29602 if (!group) {
29603 group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject());
29604 groups.set(key, group);
29605 var groupedObservable = new GroupedObservable(key, group, this);
29606 this.destination.next(groupedObservable);
29607 if (this.durationSelector) {
29608 var duration = void 0;
29609 try {
29610 duration = this.durationSelector(new GroupedObservable(key, group));
29611 }
29612 catch (err) {
29613 this.error(err);
29614 return;
29615 }
29616 this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
29617 }
29618 }
29619 if (!group.closed) {
29620 group.next(element);
29621 }
29622 };
29623 GroupBySubscriber.prototype._error = function (err) {
29624 var groups = this.groups;
29625 if (groups) {
29626 groups.forEach(function (group, key) {
29627 group.error(err);
29628 });
29629 groups.clear();
29630 }
29631 this.destination.error(err);
29632 };
29633 GroupBySubscriber.prototype._complete = function () {
29634 var groups = this.groups;
29635 if (groups) {
29636 groups.forEach(function (group, key) {
29637 group.complete();
29638 });
29639 groups.clear();
29640 }
29641 this.destination.complete();
29642 };
29643 GroupBySubscriber.prototype.removeGroup = function (key) {
29644 this.groups.delete(key);
29645 };
29646 GroupBySubscriber.prototype.unsubscribe = function () {
29647 if (!this.closed) {
29648 this.attemptedToUnsubscribe = true;
29649 if (this.count === 0) {
29650 _super.prototype.unsubscribe.call(this);
29651 }
29652 }
29653 };
29654 return GroupBySubscriber;
29655}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
29656var GroupDurationSubscriber = /*@__PURE__*/ (function (_super) {
29657 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupDurationSubscriber, _super);
29658 function GroupDurationSubscriber(key, group, parent) {
29659 var _this = _super.call(this, group) || this;
29660 _this.key = key;
29661 _this.group = group;
29662 _this.parent = parent;
29663 return _this;
29664 }
29665 GroupDurationSubscriber.prototype._next = function (value) {
29666 this.complete();
29667 };
29668 GroupDurationSubscriber.prototype._unsubscribe = function () {
29669 var _a = this, parent = _a.parent, key = _a.key;
29670 this.key = this.parent = null;
29671 if (parent) {
29672 parent.removeGroup(key);
29673 }
29674 };
29675 return GroupDurationSubscriber;
29676}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
29677var GroupedObservable = /*@__PURE__*/ (function (_super) {
29678 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(GroupedObservable, _super);
29679 function GroupedObservable(key, groupSubject, refCountSubscription) {
29680 var _this = _super.call(this) || this;
29681 _this.key = key;
29682 _this.groupSubject = groupSubject;
29683 _this.refCountSubscription = refCountSubscription;
29684 return _this;
29685 }
29686 GroupedObservable.prototype._subscribe = function (subscriber) {
29687 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription();
29688 var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
29689 if (refCountSubscription && !refCountSubscription.closed) {
29690 subscription.add(new InnerRefCountSubscription(refCountSubscription));
29691 }
29692 subscription.add(groupSubject.subscribe(subscriber));
29693 return subscription;
29694 };
29695 return GroupedObservable;
29696}(_Observable__WEBPACK_IMPORTED_MODULE_4__.Observable));
29697
29698var InnerRefCountSubscription = /*@__PURE__*/ (function (_super) {
29699 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(InnerRefCountSubscription, _super);
29700 function InnerRefCountSubscription(parent) {
29701 var _this = _super.call(this) || this;
29702 _this.parent = parent;
29703 parent.count++;
29704 return _this;
29705 }
29706 InnerRefCountSubscription.prototype.unsubscribe = function () {
29707 var parent = this.parent;
29708 if (!parent.closed && !this.closed) {
29709 _super.prototype.unsubscribe.call(this);
29710 parent.count -= 1;
29711 if (parent.count === 0 && parent.attemptedToUnsubscribe) {
29712 parent.unsubscribe();
29713 }
29714 }
29715 };
29716 return InnerRefCountSubscription;
29717}(_Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription));
29718//# sourceMappingURL=groupBy.js.map
29719
29720
29721/***/ }),
29722/* 209 */
29723/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29724
29725"use strict";
29726__webpack_require__.r(__webpack_exports__);
29727/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29728/* harmony export */ "BehaviorSubject": () => (/* binding */ BehaviorSubject)
29729/* harmony export */ });
29730/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29731/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
29732/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(206);
29733/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */
29734
29735
29736
29737var BehaviorSubject = /*@__PURE__*/ (function (_super) {
29738 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BehaviorSubject, _super);
29739 function BehaviorSubject(_value) {
29740 var _this = _super.call(this) || this;
29741 _this._value = _value;
29742 return _this;
29743 }
29744 Object.defineProperty(BehaviorSubject.prototype, "value", {
29745 get: function () {
29746 return this.getValue();
29747 },
29748 enumerable: true,
29749 configurable: true
29750 });
29751 BehaviorSubject.prototype._subscribe = function (subscriber) {
29752 var subscription = _super.prototype._subscribe.call(this, subscriber);
29753 if (subscription && !subscription.closed) {
29754 subscriber.next(this._value);
29755 }
29756 return subscription;
29757 };
29758 BehaviorSubject.prototype.getValue = function () {
29759 if (this.hasError) {
29760 throw this.thrownError;
29761 }
29762 else if (this.closed) {
29763 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__.ObjectUnsubscribedError();
29764 }
29765 else {
29766 return this._value;
29767 }
29768 };
29769 BehaviorSubject.prototype.next = function (value) {
29770 _super.prototype.next.call(this, this._value = value);
29771 };
29772 return BehaviorSubject;
29773}(_Subject__WEBPACK_IMPORTED_MODULE_2__.Subject));
29774
29775//# sourceMappingURL=BehaviorSubject.js.map
29776
29777
29778/***/ }),
29779/* 210 */
29780/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29781
29782"use strict";
29783__webpack_require__.r(__webpack_exports__);
29784/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29785/* harmony export */ "ReplaySubject": () => (/* binding */ ReplaySubject)
29786/* harmony export */ });
29787/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29788/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(205);
29789/* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(220);
29790/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
29791/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(211);
29792/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(206);
29793/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(207);
29794/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */
29795
29796
29797
29798
29799
29800
29801
29802var ReplaySubject = /*@__PURE__*/ (function (_super) {
29803 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ReplaySubject, _super);
29804 function ReplaySubject(bufferSize, windowTime, scheduler) {
29805 if (bufferSize === void 0) {
29806 bufferSize = Number.POSITIVE_INFINITY;
29807 }
29808 if (windowTime === void 0) {
29809 windowTime = Number.POSITIVE_INFINITY;
29810 }
29811 var _this = _super.call(this) || this;
29812 _this.scheduler = scheduler;
29813 _this._events = [];
29814 _this._infiniteTimeWindow = false;
29815 _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
29816 _this._windowTime = windowTime < 1 ? 1 : windowTime;
29817 if (windowTime === Number.POSITIVE_INFINITY) {
29818 _this._infiniteTimeWindow = true;
29819 _this.next = _this.nextInfiniteTimeWindow;
29820 }
29821 else {
29822 _this.next = _this.nextTimeWindow;
29823 }
29824 return _this;
29825 }
29826 ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
29827 if (!this.isStopped) {
29828 var _events = this._events;
29829 _events.push(value);
29830 if (_events.length > this._bufferSize) {
29831 _events.shift();
29832 }
29833 }
29834 _super.prototype.next.call(this, value);
29835 };
29836 ReplaySubject.prototype.nextTimeWindow = function (value) {
29837 if (!this.isStopped) {
29838 this._events.push(new ReplayEvent(this._getNow(), value));
29839 this._trimBufferThenGetEvents();
29840 }
29841 _super.prototype.next.call(this, value);
29842 };
29843 ReplaySubject.prototype._subscribe = function (subscriber) {
29844 var _infiniteTimeWindow = this._infiniteTimeWindow;
29845 var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
29846 var scheduler = this.scheduler;
29847 var len = _events.length;
29848 var subscription;
29849 if (this.closed) {
29850 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_1__.ObjectUnsubscribedError();
29851 }
29852 else if (this.isStopped || this.hasError) {
29853 subscription = _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription.EMPTY;
29854 }
29855 else {
29856 this.observers.push(subscriber);
29857 subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_3__.SubjectSubscription(this, subscriber);
29858 }
29859 if (scheduler) {
29860 subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__.ObserveOnSubscriber(subscriber, scheduler));
29861 }
29862 if (_infiniteTimeWindow) {
29863 for (var i = 0; i < len && !subscriber.closed; i++) {
29864 subscriber.next(_events[i]);
29865 }
29866 }
29867 else {
29868 for (var i = 0; i < len && !subscriber.closed; i++) {
29869 subscriber.next(_events[i].value);
29870 }
29871 }
29872 if (this.hasError) {
29873 subscriber.error(this.thrownError);
29874 }
29875 else if (this.isStopped) {
29876 subscriber.complete();
29877 }
29878 return subscription;
29879 };
29880 ReplaySubject.prototype._getNow = function () {
29881 return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_5__.queue).now();
29882 };
29883 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
29884 var now = this._getNow();
29885 var _bufferSize = this._bufferSize;
29886 var _windowTime = this._windowTime;
29887 var _events = this._events;
29888 var eventsCount = _events.length;
29889 var spliceCount = 0;
29890 while (spliceCount < eventsCount) {
29891 if ((now - _events[spliceCount].time) < _windowTime) {
29892 break;
29893 }
29894 spliceCount++;
29895 }
29896 if (eventsCount > _bufferSize) {
29897 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
29898 }
29899 if (spliceCount > 0) {
29900 _events.splice(0, spliceCount);
29901 }
29902 return _events;
29903 };
29904 return ReplaySubject;
29905}(_Subject__WEBPACK_IMPORTED_MODULE_6__.Subject));
29906
29907var ReplayEvent = /*@__PURE__*/ (function () {
29908 function ReplayEvent(time, value) {
29909 this.time = time;
29910 this.value = value;
29911 }
29912 return ReplayEvent;
29913}());
29914//# sourceMappingURL=ReplaySubject.js.map
29915
29916
29917/***/ }),
29918/* 211 */
29919/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
29920
29921"use strict";
29922__webpack_require__.r(__webpack_exports__);
29923/* harmony export */ __webpack_require__.d(__webpack_exports__, {
29924/* harmony export */ "observeOn": () => (/* binding */ observeOn),
29925/* harmony export */ "ObserveOnOperator": () => (/* binding */ ObserveOnOperator),
29926/* harmony export */ "ObserveOnSubscriber": () => (/* binding */ ObserveOnSubscriber),
29927/* harmony export */ "ObserveOnMessage": () => (/* binding */ ObserveOnMessage)
29928/* harmony export */ });
29929/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
29930/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
29931/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
29932/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
29933
29934
29935
29936function observeOn(scheduler, delay) {
29937 if (delay === void 0) {
29938 delay = 0;
29939 }
29940 return function observeOnOperatorFunction(source) {
29941 return source.lift(new ObserveOnOperator(scheduler, delay));
29942 };
29943}
29944var ObserveOnOperator = /*@__PURE__*/ (function () {
29945 function ObserveOnOperator(scheduler, delay) {
29946 if (delay === void 0) {
29947 delay = 0;
29948 }
29949 this.scheduler = scheduler;
29950 this.delay = delay;
29951 }
29952 ObserveOnOperator.prototype.call = function (subscriber, source) {
29953 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
29954 };
29955 return ObserveOnOperator;
29956}());
29957
29958var ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {
29959 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ObserveOnSubscriber, _super);
29960 function ObserveOnSubscriber(destination, scheduler, delay) {
29961 if (delay === void 0) {
29962 delay = 0;
29963 }
29964 var _this = _super.call(this, destination) || this;
29965 _this.scheduler = scheduler;
29966 _this.delay = delay;
29967 return _this;
29968 }
29969 ObserveOnSubscriber.dispatch = function (arg) {
29970 var notification = arg.notification, destination = arg.destination;
29971 notification.observe(destination);
29972 this.unsubscribe();
29973 };
29974 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
29975 var destination = this.destination;
29976 destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
29977 };
29978 ObserveOnSubscriber.prototype._next = function (value) {
29979 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createNext(value));
29980 };
29981 ObserveOnSubscriber.prototype._error = function (err) {
29982 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createError(err));
29983 this.unsubscribe();
29984 };
29985 ObserveOnSubscriber.prototype._complete = function () {
29986 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createComplete());
29987 this.unsubscribe();
29988 };
29989 return ObserveOnSubscriber;
29990}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
29991
29992var ObserveOnMessage = /*@__PURE__*/ (function () {
29993 function ObserveOnMessage(notification, destination) {
29994 this.notification = notification;
29995 this.destination = destination;
29996 }
29997 return ObserveOnMessage;
29998}());
29999
30000//# sourceMappingURL=observeOn.js.map
30001
30002
30003/***/ }),
30004/* 212 */
30005/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30006
30007"use strict";
30008__webpack_require__.r(__webpack_exports__);
30009/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30010/* harmony export */ "NotificationKind": () => (/* binding */ NotificationKind),
30011/* harmony export */ "Notification": () => (/* binding */ Notification)
30012/* harmony export */ });
30013/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(219);
30014/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
30015/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(218);
30016/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */
30017
30018
30019
30020var NotificationKind;
30021/*@__PURE__*/ (function (NotificationKind) {
30022 NotificationKind["NEXT"] = "N";
30023 NotificationKind["ERROR"] = "E";
30024 NotificationKind["COMPLETE"] = "C";
30025})(NotificationKind || (NotificationKind = {}));
30026var Notification = /*@__PURE__*/ (function () {
30027 function Notification(kind, value, error) {
30028 this.kind = kind;
30029 this.value = value;
30030 this.error = error;
30031 this.hasValue = kind === 'N';
30032 }
30033 Notification.prototype.observe = function (observer) {
30034 switch (this.kind) {
30035 case 'N':
30036 return observer.next && observer.next(this.value);
30037 case 'E':
30038 return observer.error && observer.error(this.error);
30039 case 'C':
30040 return observer.complete && observer.complete();
30041 }
30042 };
30043 Notification.prototype.do = function (next, error, complete) {
30044 var kind = this.kind;
30045 switch (kind) {
30046 case 'N':
30047 return next && next(this.value);
30048 case 'E':
30049 return error && error(this.error);
30050 case 'C':
30051 return complete && complete();
30052 }
30053 };
30054 Notification.prototype.accept = function (nextOrObserver, error, complete) {
30055 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
30056 return this.observe(nextOrObserver);
30057 }
30058 else {
30059 return this.do(nextOrObserver, error, complete);
30060 }
30061 };
30062 Notification.prototype.toObservable = function () {
30063 var kind = this.kind;
30064 switch (kind) {
30065 case 'N':
30066 return (0,_observable_of__WEBPACK_IMPORTED_MODULE_0__.of)(this.value);
30067 case 'E':
30068 return (0,_observable_throwError__WEBPACK_IMPORTED_MODULE_1__.throwError)(this.error);
30069 case 'C':
30070 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_2__.empty)();
30071 }
30072 throw new Error('unexpected notification kind value');
30073 };
30074 Notification.createNext = function (value) {
30075 if (typeof value !== 'undefined') {
30076 return new Notification('N', value);
30077 }
30078 return Notification.undefinedValueNotification;
30079 };
30080 Notification.createError = function (err) {
30081 return new Notification('E', undefined, err);
30082 };
30083 Notification.createComplete = function () {
30084 return Notification.completeNotification;
30085 };
30086 Notification.completeNotification = new Notification('C');
30087 Notification.undefinedValueNotification = new Notification('N', undefined);
30088 return Notification;
30089}());
30090
30091//# sourceMappingURL=Notification.js.map
30092
30093
30094/***/ }),
30095/* 213 */
30096/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30097
30098"use strict";
30099__webpack_require__.r(__webpack_exports__);
30100/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30101/* harmony export */ "of": () => (/* binding */ of)
30102/* harmony export */ });
30103/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
30104/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(216);
30105/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(215);
30106/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */
30107
30108
30109
30110function of() {
30111 var args = [];
30112 for (var _i = 0; _i < arguments.length; _i++) {
30113 args[_i] = arguments[_i];
30114 }
30115 var scheduler = args[args.length - 1];
30116 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(scheduler)) {
30117 args.pop();
30118 return (0,_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_1__.scheduleArray)(args, scheduler);
30119 }
30120 else {
30121 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_2__.fromArray)(args);
30122 }
30123}
30124//# sourceMappingURL=of.js.map
30125
30126
30127/***/ }),
30128/* 214 */
30129/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30130
30131"use strict";
30132__webpack_require__.r(__webpack_exports__);
30133/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30134/* harmony export */ "isScheduler": () => (/* binding */ isScheduler)
30135/* harmony export */ });
30136/** PURE_IMPORTS_START PURE_IMPORTS_END */
30137function isScheduler(value) {
30138 return value && typeof value.schedule === 'function';
30139}
30140//# sourceMappingURL=isScheduler.js.map
30141
30142
30143/***/ }),
30144/* 215 */
30145/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30146
30147"use strict";
30148__webpack_require__.r(__webpack_exports__);
30149/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30150/* harmony export */ "scheduleArray": () => (/* binding */ scheduleArray)
30151/* harmony export */ });
30152/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
30153/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
30154/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
30155
30156
30157function scheduleArray(input, scheduler) {
30158 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
30159 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
30160 var i = 0;
30161 sub.add(scheduler.schedule(function () {
30162 if (i === input.length) {
30163 subscriber.complete();
30164 return;
30165 }
30166 subscriber.next(input[i++]);
30167 if (!subscriber.closed) {
30168 sub.add(this.schedule());
30169 }
30170 }));
30171 return sub;
30172 });
30173}
30174//# sourceMappingURL=scheduleArray.js.map
30175
30176
30177/***/ }),
30178/* 216 */
30179/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30180
30181"use strict";
30182__webpack_require__.r(__webpack_exports__);
30183/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30184/* harmony export */ "fromArray": () => (/* binding */ fromArray)
30185/* harmony export */ });
30186/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
30187/* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(217);
30188/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(215);
30189/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */
30190
30191
30192
30193function fromArray(input, scheduler) {
30194 if (!scheduler) {
30195 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable((0,_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__.subscribeToArray)(input));
30196 }
30197 else {
30198 return (0,_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__.scheduleArray)(input, scheduler);
30199 }
30200}
30201//# sourceMappingURL=fromArray.js.map
30202
30203
30204/***/ }),
30205/* 217 */
30206/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30207
30208"use strict";
30209__webpack_require__.r(__webpack_exports__);
30210/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30211/* harmony export */ "subscribeToArray": () => (/* binding */ subscribeToArray)
30212/* harmony export */ });
30213/** PURE_IMPORTS_START PURE_IMPORTS_END */
30214var subscribeToArray = function (array) {
30215 return function (subscriber) {
30216 for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
30217 subscriber.next(array[i]);
30218 }
30219 subscriber.complete();
30220 };
30221};
30222//# sourceMappingURL=subscribeToArray.js.map
30223
30224
30225/***/ }),
30226/* 218 */
30227/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30228
30229"use strict";
30230__webpack_require__.r(__webpack_exports__);
30231/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30232/* harmony export */ "throwError": () => (/* binding */ throwError)
30233/* harmony export */ });
30234/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
30235/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
30236
30237function throwError(error, scheduler) {
30238 if (!scheduler) {
30239 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return subscriber.error(error); });
30240 }
30241 else {
30242 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
30243 }
30244}
30245function dispatch(_a) {
30246 var error = _a.error, subscriber = _a.subscriber;
30247 subscriber.error(error);
30248}
30249//# sourceMappingURL=throwError.js.map
30250
30251
30252/***/ }),
30253/* 219 */
30254/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30255
30256"use strict";
30257__webpack_require__.r(__webpack_exports__);
30258/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30259/* harmony export */ "EMPTY": () => (/* binding */ EMPTY),
30260/* harmony export */ "empty": () => (/* binding */ empty)
30261/* harmony export */ });
30262/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
30263/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
30264
30265var EMPTY = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return subscriber.complete(); });
30266function empty(scheduler) {
30267 return scheduler ? emptyScheduled(scheduler) : EMPTY;
30268}
30269function emptyScheduled(scheduler) {
30270 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
30271}
30272//# sourceMappingURL=empty.js.map
30273
30274
30275/***/ }),
30276/* 220 */
30277/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30278
30279"use strict";
30280__webpack_require__.r(__webpack_exports__);
30281/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30282/* harmony export */ "queueScheduler": () => (/* binding */ queueScheduler),
30283/* harmony export */ "queue": () => (/* binding */ queue)
30284/* harmony export */ });
30285/* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(224);
30286/* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
30287/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */
30288
30289
30290var queueScheduler = /*@__PURE__*/ new _QueueScheduler__WEBPACK_IMPORTED_MODULE_0__.QueueScheduler(_QueueAction__WEBPACK_IMPORTED_MODULE_1__.QueueAction);
30291var queue = queueScheduler;
30292//# sourceMappingURL=queue.js.map
30293
30294
30295/***/ }),
30296/* 221 */
30297/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30298
30299"use strict";
30300__webpack_require__.r(__webpack_exports__);
30301/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30302/* harmony export */ "QueueScheduler": () => (/* binding */ QueueScheduler)
30303/* harmony export */ });
30304/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30305/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
30306/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
30307
30308
30309var QueueScheduler = /*@__PURE__*/ (function (_super) {
30310 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(QueueScheduler, _super);
30311 function QueueScheduler() {
30312 return _super !== null && _super.apply(this, arguments) || this;
30313 }
30314 return QueueScheduler;
30315}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
30316
30317//# sourceMappingURL=QueueScheduler.js.map
30318
30319
30320/***/ }),
30321/* 222 */
30322/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30323
30324"use strict";
30325__webpack_require__.r(__webpack_exports__);
30326/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30327/* harmony export */ "AsyncScheduler": () => (/* binding */ AsyncScheduler)
30328/* harmony export */ });
30329/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30330/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
30331/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */
30332
30333
30334var AsyncScheduler = /*@__PURE__*/ (function (_super) {
30335 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncScheduler, _super);
30336 function AsyncScheduler(SchedulerAction, now) {
30337 if (now === void 0) {
30338 now = _Scheduler__WEBPACK_IMPORTED_MODULE_1__.Scheduler.now;
30339 }
30340 var _this = _super.call(this, SchedulerAction, function () {
30341 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
30342 return AsyncScheduler.delegate.now();
30343 }
30344 else {
30345 return now();
30346 }
30347 }) || this;
30348 _this.actions = [];
30349 _this.active = false;
30350 _this.scheduled = undefined;
30351 return _this;
30352 }
30353 AsyncScheduler.prototype.schedule = function (work, delay, state) {
30354 if (delay === void 0) {
30355 delay = 0;
30356 }
30357 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
30358 return AsyncScheduler.delegate.schedule(work, delay, state);
30359 }
30360 else {
30361 return _super.prototype.schedule.call(this, work, delay, state);
30362 }
30363 };
30364 AsyncScheduler.prototype.flush = function (action) {
30365 var actions = this.actions;
30366 if (this.active) {
30367 actions.push(action);
30368 return;
30369 }
30370 var error;
30371 this.active = true;
30372 do {
30373 if (error = action.execute(action.state, action.delay)) {
30374 break;
30375 }
30376 } while (action = actions.shift());
30377 this.active = false;
30378 if (error) {
30379 while (action = actions.shift()) {
30380 action.unsubscribe();
30381 }
30382 throw error;
30383 }
30384 };
30385 return AsyncScheduler;
30386}(_Scheduler__WEBPACK_IMPORTED_MODULE_1__.Scheduler));
30387
30388//# sourceMappingURL=AsyncScheduler.js.map
30389
30390
30391/***/ }),
30392/* 223 */
30393/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30394
30395"use strict";
30396__webpack_require__.r(__webpack_exports__);
30397/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30398/* harmony export */ "Scheduler": () => (/* binding */ Scheduler)
30399/* harmony export */ });
30400var Scheduler = /*@__PURE__*/ (function () {
30401 function Scheduler(SchedulerAction, now) {
30402 if (now === void 0) {
30403 now = Scheduler.now;
30404 }
30405 this.SchedulerAction = SchedulerAction;
30406 this.now = now;
30407 }
30408 Scheduler.prototype.schedule = function (work, delay, state) {
30409 if (delay === void 0) {
30410 delay = 0;
30411 }
30412 return new this.SchedulerAction(this, work).schedule(state, delay);
30413 };
30414 Scheduler.now = function () { return Date.now(); };
30415 return Scheduler;
30416}());
30417
30418//# sourceMappingURL=Scheduler.js.map
30419
30420
30421/***/ }),
30422/* 224 */
30423/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30424
30425"use strict";
30426__webpack_require__.r(__webpack_exports__);
30427/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30428/* harmony export */ "QueueAction": () => (/* binding */ QueueAction)
30429/* harmony export */ });
30430/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30431/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(225);
30432/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
30433
30434
30435var QueueAction = /*@__PURE__*/ (function (_super) {
30436 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(QueueAction, _super);
30437 function QueueAction(scheduler, work) {
30438 var _this = _super.call(this, scheduler, work) || this;
30439 _this.scheduler = scheduler;
30440 _this.work = work;
30441 return _this;
30442 }
30443 QueueAction.prototype.schedule = function (state, delay) {
30444 if (delay === void 0) {
30445 delay = 0;
30446 }
30447 if (delay > 0) {
30448 return _super.prototype.schedule.call(this, state, delay);
30449 }
30450 this.delay = delay;
30451 this.state = state;
30452 this.scheduler.flush(this);
30453 return this;
30454 };
30455 QueueAction.prototype.execute = function (state, delay) {
30456 return (delay > 0 || this.closed) ?
30457 _super.prototype.execute.call(this, state, delay) :
30458 this._execute(state, delay);
30459 };
30460 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
30461 if (delay === void 0) {
30462 delay = 0;
30463 }
30464 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
30465 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
30466 }
30467 return scheduler.flush(this);
30468 };
30469 return QueueAction;
30470}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction));
30471
30472//# sourceMappingURL=QueueAction.js.map
30473
30474
30475/***/ }),
30476/* 225 */
30477/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30478
30479"use strict";
30480__webpack_require__.r(__webpack_exports__);
30481/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30482/* harmony export */ "AsyncAction": () => (/* binding */ AsyncAction)
30483/* harmony export */ });
30484/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30485/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
30486/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */
30487
30488
30489var AsyncAction = /*@__PURE__*/ (function (_super) {
30490 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncAction, _super);
30491 function AsyncAction(scheduler, work) {
30492 var _this = _super.call(this, scheduler, work) || this;
30493 _this.scheduler = scheduler;
30494 _this.work = work;
30495 _this.pending = false;
30496 return _this;
30497 }
30498 AsyncAction.prototype.schedule = function (state, delay) {
30499 if (delay === void 0) {
30500 delay = 0;
30501 }
30502 if (this.closed) {
30503 return this;
30504 }
30505 this.state = state;
30506 var id = this.id;
30507 var scheduler = this.scheduler;
30508 if (id != null) {
30509 this.id = this.recycleAsyncId(scheduler, id, delay);
30510 }
30511 this.pending = true;
30512 this.delay = delay;
30513 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
30514 return this;
30515 };
30516 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
30517 if (delay === void 0) {
30518 delay = 0;
30519 }
30520 return setInterval(scheduler.flush.bind(scheduler, this), delay);
30521 };
30522 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
30523 if (delay === void 0) {
30524 delay = 0;
30525 }
30526 if (delay !== null && this.delay === delay && this.pending === false) {
30527 return id;
30528 }
30529 clearInterval(id);
30530 return undefined;
30531 };
30532 AsyncAction.prototype.execute = function (state, delay) {
30533 if (this.closed) {
30534 return new Error('executing a cancelled action');
30535 }
30536 this.pending = false;
30537 var error = this._execute(state, delay);
30538 if (error) {
30539 return error;
30540 }
30541 else if (this.pending === false && this.id != null) {
30542 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
30543 }
30544 };
30545 AsyncAction.prototype._execute = function (state, delay) {
30546 var errored = false;
30547 var errorValue = undefined;
30548 try {
30549 this.work(state);
30550 }
30551 catch (e) {
30552 errored = true;
30553 errorValue = !!e && e || new Error(e);
30554 }
30555 if (errored) {
30556 this.unsubscribe();
30557 return errorValue;
30558 }
30559 };
30560 AsyncAction.prototype._unsubscribe = function () {
30561 var id = this.id;
30562 var scheduler = this.scheduler;
30563 var actions = scheduler.actions;
30564 var index = actions.indexOf(this);
30565 this.work = null;
30566 this.state = null;
30567 this.pending = false;
30568 this.scheduler = null;
30569 if (index !== -1) {
30570 actions.splice(index, 1);
30571 }
30572 if (id != null) {
30573 this.id = this.recycleAsyncId(scheduler, id, null);
30574 }
30575 this.delay = null;
30576 };
30577 return AsyncAction;
30578}(_Action__WEBPACK_IMPORTED_MODULE_1__.Action));
30579
30580//# sourceMappingURL=AsyncAction.js.map
30581
30582
30583/***/ }),
30584/* 226 */
30585/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30586
30587"use strict";
30588__webpack_require__.r(__webpack_exports__);
30589/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30590/* harmony export */ "Action": () => (/* binding */ Action)
30591/* harmony export */ });
30592/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30593/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
30594/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
30595
30596
30597var Action = /*@__PURE__*/ (function (_super) {
30598 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(Action, _super);
30599 function Action(scheduler, work) {
30600 return _super.call(this) || this;
30601 }
30602 Action.prototype.schedule = function (state, delay) {
30603 if (delay === void 0) {
30604 delay = 0;
30605 }
30606 return this;
30607 };
30608 return Action;
30609}(_Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription));
30610
30611//# sourceMappingURL=Action.js.map
30612
30613
30614/***/ }),
30615/* 227 */
30616/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30617
30618"use strict";
30619__webpack_require__.r(__webpack_exports__);
30620/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30621/* harmony export */ "AsyncSubject": () => (/* binding */ AsyncSubject)
30622/* harmony export */ });
30623/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30624/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
30625/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
30626/** PURE_IMPORTS_START tslib,_Subject,_Subscription PURE_IMPORTS_END */
30627
30628
30629
30630var AsyncSubject = /*@__PURE__*/ (function (_super) {
30631 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsyncSubject, _super);
30632 function AsyncSubject() {
30633 var _this = _super !== null && _super.apply(this, arguments) || this;
30634 _this.value = null;
30635 _this.hasNext = false;
30636 _this.hasCompleted = false;
30637 return _this;
30638 }
30639 AsyncSubject.prototype._subscribe = function (subscriber) {
30640 if (this.hasError) {
30641 subscriber.error(this.thrownError);
30642 return _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
30643 }
30644 else if (this.hasCompleted && this.hasNext) {
30645 subscriber.next(this.value);
30646 subscriber.complete();
30647 return _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription.EMPTY;
30648 }
30649 return _super.prototype._subscribe.call(this, subscriber);
30650 };
30651 AsyncSubject.prototype.next = function (value) {
30652 if (!this.hasCompleted) {
30653 this.value = value;
30654 this.hasNext = true;
30655 }
30656 };
30657 AsyncSubject.prototype.error = function (error) {
30658 if (!this.hasCompleted) {
30659 _super.prototype.error.call(this, error);
30660 }
30661 };
30662 AsyncSubject.prototype.complete = function () {
30663 this.hasCompleted = true;
30664 if (this.hasNext) {
30665 _super.prototype.next.call(this, this.value);
30666 }
30667 _super.prototype.complete.call(this);
30668 };
30669 return AsyncSubject;
30670}(_Subject__WEBPACK_IMPORTED_MODULE_2__.Subject));
30671
30672//# sourceMappingURL=AsyncSubject.js.map
30673
30674
30675/***/ }),
30676/* 228 */
30677/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30678
30679"use strict";
30680__webpack_require__.r(__webpack_exports__);
30681/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30682/* harmony export */ "asapScheduler": () => (/* binding */ asapScheduler),
30683/* harmony export */ "asap": () => (/* binding */ asap)
30684/* harmony export */ });
30685/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
30686/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(229);
30687/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */
30688
30689
30690var asapScheduler = /*@__PURE__*/ new _AsapScheduler__WEBPACK_IMPORTED_MODULE_0__.AsapScheduler(_AsapAction__WEBPACK_IMPORTED_MODULE_1__.AsapAction);
30691var asap = asapScheduler;
30692//# sourceMappingURL=asap.js.map
30693
30694
30695/***/ }),
30696/* 229 */
30697/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30698
30699"use strict";
30700__webpack_require__.r(__webpack_exports__);
30701/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30702/* harmony export */ "AsapScheduler": () => (/* binding */ AsapScheduler)
30703/* harmony export */ });
30704/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30705/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
30706/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
30707
30708
30709var AsapScheduler = /*@__PURE__*/ (function (_super) {
30710 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsapScheduler, _super);
30711 function AsapScheduler() {
30712 return _super !== null && _super.apply(this, arguments) || this;
30713 }
30714 AsapScheduler.prototype.flush = function (action) {
30715 this.active = true;
30716 this.scheduled = undefined;
30717 var actions = this.actions;
30718 var error;
30719 var index = -1;
30720 var count = actions.length;
30721 action = action || actions.shift();
30722 do {
30723 if (error = action.execute(action.state, action.delay)) {
30724 break;
30725 }
30726 } while (++index < count && (action = actions.shift()));
30727 this.active = false;
30728 if (error) {
30729 while (++index < count && (action = actions.shift())) {
30730 action.unsubscribe();
30731 }
30732 throw error;
30733 }
30734 };
30735 return AsapScheduler;
30736}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
30737
30738//# sourceMappingURL=AsapScheduler.js.map
30739
30740
30741/***/ }),
30742/* 230 */
30743/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30744
30745"use strict";
30746__webpack_require__.r(__webpack_exports__);
30747/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30748/* harmony export */ "AsapAction": () => (/* binding */ AsapAction)
30749/* harmony export */ });
30750/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30751/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(231);
30752/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(225);
30753/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */
30754
30755
30756
30757var AsapAction = /*@__PURE__*/ (function (_super) {
30758 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AsapAction, _super);
30759 function AsapAction(scheduler, work) {
30760 var _this = _super.call(this, scheduler, work) || this;
30761 _this.scheduler = scheduler;
30762 _this.work = work;
30763 return _this;
30764 }
30765 AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
30766 if (delay === void 0) {
30767 delay = 0;
30768 }
30769 if (delay !== null && delay > 0) {
30770 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
30771 }
30772 scheduler.actions.push(this);
30773 return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_1__.Immediate.setImmediate(scheduler.flush.bind(scheduler, null)));
30774 };
30775 AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
30776 if (delay === void 0) {
30777 delay = 0;
30778 }
30779 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
30780 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
30781 }
30782 if (scheduler.actions.length === 0) {
30783 _util_Immediate__WEBPACK_IMPORTED_MODULE_1__.Immediate.clearImmediate(id);
30784 scheduler.scheduled = undefined;
30785 }
30786 return undefined;
30787 };
30788 return AsapAction;
30789}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__.AsyncAction));
30790
30791//# sourceMappingURL=AsapAction.js.map
30792
30793
30794/***/ }),
30795/* 231 */
30796/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30797
30798"use strict";
30799__webpack_require__.r(__webpack_exports__);
30800/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30801/* harmony export */ "Immediate": () => (/* binding */ Immediate),
30802/* harmony export */ "TestTools": () => (/* binding */ TestTools)
30803/* harmony export */ });
30804/** PURE_IMPORTS_START PURE_IMPORTS_END */
30805var nextHandle = 1;
30806var RESOLVED = /*@__PURE__*/ (function () { return /*@__PURE__*/ Promise.resolve(); })();
30807var activeHandles = {};
30808function findAndClearHandle(handle) {
30809 if (handle in activeHandles) {
30810 delete activeHandles[handle];
30811 return true;
30812 }
30813 return false;
30814}
30815var Immediate = {
30816 setImmediate: function (cb) {
30817 var handle = nextHandle++;
30818 activeHandles[handle] = true;
30819 RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); });
30820 return handle;
30821 },
30822 clearImmediate: function (handle) {
30823 findAndClearHandle(handle);
30824 },
30825};
30826var TestTools = {
30827 pending: function () {
30828 return Object.keys(activeHandles).length;
30829 }
30830};
30831//# sourceMappingURL=Immediate.js.map
30832
30833
30834/***/ }),
30835/* 232 */
30836/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30837
30838"use strict";
30839__webpack_require__.r(__webpack_exports__);
30840/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30841/* harmony export */ "asyncScheduler": () => (/* binding */ asyncScheduler),
30842/* harmony export */ "async": () => (/* binding */ async)
30843/* harmony export */ });
30844/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(225);
30845/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(222);
30846/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
30847
30848
30849var asyncScheduler = /*@__PURE__*/ new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_0__.AsyncScheduler(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction);
30850var async = asyncScheduler;
30851//# sourceMappingURL=async.js.map
30852
30853
30854/***/ }),
30855/* 233 */
30856/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30857
30858"use strict";
30859__webpack_require__.r(__webpack_exports__);
30860/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30861/* harmony export */ "animationFrameScheduler": () => (/* binding */ animationFrameScheduler),
30862/* harmony export */ "animationFrame": () => (/* binding */ animationFrame)
30863/* harmony export */ });
30864/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(235);
30865/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(234);
30866/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */
30867
30868
30869var animationFrameScheduler = /*@__PURE__*/ new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_0__.AnimationFrameScheduler(_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_1__.AnimationFrameAction);
30870var animationFrame = animationFrameScheduler;
30871//# sourceMappingURL=animationFrame.js.map
30872
30873
30874/***/ }),
30875/* 234 */
30876/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30877
30878"use strict";
30879__webpack_require__.r(__webpack_exports__);
30880/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30881/* harmony export */ "AnimationFrameScheduler": () => (/* binding */ AnimationFrameScheduler)
30882/* harmony export */ });
30883/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30884/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
30885/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
30886
30887
30888var AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {
30889 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnimationFrameScheduler, _super);
30890 function AnimationFrameScheduler() {
30891 return _super !== null && _super.apply(this, arguments) || this;
30892 }
30893 AnimationFrameScheduler.prototype.flush = function (action) {
30894 this.active = true;
30895 this.scheduled = undefined;
30896 var actions = this.actions;
30897 var error;
30898 var index = -1;
30899 var count = actions.length;
30900 action = action || actions.shift();
30901 do {
30902 if (error = action.execute(action.state, action.delay)) {
30903 break;
30904 }
30905 } while (++index < count && (action = actions.shift()));
30906 this.active = false;
30907 if (error) {
30908 while (++index < count && (action = actions.shift())) {
30909 action.unsubscribe();
30910 }
30911 throw error;
30912 }
30913 };
30914 return AnimationFrameScheduler;
30915}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
30916
30917//# sourceMappingURL=AnimationFrameScheduler.js.map
30918
30919
30920/***/ }),
30921/* 235 */
30922/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30923
30924"use strict";
30925__webpack_require__.r(__webpack_exports__);
30926/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30927/* harmony export */ "AnimationFrameAction": () => (/* binding */ AnimationFrameAction)
30928/* harmony export */ });
30929/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30930/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(225);
30931/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
30932
30933
30934var AnimationFrameAction = /*@__PURE__*/ (function (_super) {
30935 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AnimationFrameAction, _super);
30936 function AnimationFrameAction(scheduler, work) {
30937 var _this = _super.call(this, scheduler, work) || this;
30938 _this.scheduler = scheduler;
30939 _this.work = work;
30940 return _this;
30941 }
30942 AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
30943 if (delay === void 0) {
30944 delay = 0;
30945 }
30946 if (delay !== null && delay > 0) {
30947 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
30948 }
30949 scheduler.actions.push(this);
30950 return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
30951 };
30952 AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
30953 if (delay === void 0) {
30954 delay = 0;
30955 }
30956 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
30957 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
30958 }
30959 if (scheduler.actions.length === 0) {
30960 cancelAnimationFrame(id);
30961 scheduler.scheduled = undefined;
30962 }
30963 return undefined;
30964 };
30965 return AnimationFrameAction;
30966}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__.AsyncAction));
30967
30968//# sourceMappingURL=AnimationFrameAction.js.map
30969
30970
30971/***/ }),
30972/* 236 */
30973/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
30974
30975"use strict";
30976__webpack_require__.r(__webpack_exports__);
30977/* harmony export */ __webpack_require__.d(__webpack_exports__, {
30978/* harmony export */ "VirtualTimeScheduler": () => (/* binding */ VirtualTimeScheduler),
30979/* harmony export */ "VirtualAction": () => (/* binding */ VirtualAction)
30980/* harmony export */ });
30981/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
30982/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(225);
30983/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
30984/** PURE_IMPORTS_START tslib,_AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
30985
30986
30987
30988var VirtualTimeScheduler = /*@__PURE__*/ (function (_super) {
30989 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(VirtualTimeScheduler, _super);
30990 function VirtualTimeScheduler(SchedulerAction, maxFrames) {
30991 if (SchedulerAction === void 0) {
30992 SchedulerAction = VirtualAction;
30993 }
30994 if (maxFrames === void 0) {
30995 maxFrames = Number.POSITIVE_INFINITY;
30996 }
30997 var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
30998 _this.maxFrames = maxFrames;
30999 _this.frame = 0;
31000 _this.index = -1;
31001 return _this;
31002 }
31003 VirtualTimeScheduler.prototype.flush = function () {
31004 var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
31005 var error, action;
31006 while ((action = actions[0]) && action.delay <= maxFrames) {
31007 actions.shift();
31008 this.frame = action.delay;
31009 if (error = action.execute(action.state, action.delay)) {
31010 break;
31011 }
31012 }
31013 if (error) {
31014 while (action = actions.shift()) {
31015 action.unsubscribe();
31016 }
31017 throw error;
31018 }
31019 };
31020 VirtualTimeScheduler.frameTimeFactor = 10;
31021 return VirtualTimeScheduler;
31022}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__.AsyncScheduler));
31023
31024var VirtualAction = /*@__PURE__*/ (function (_super) {
31025 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(VirtualAction, _super);
31026 function VirtualAction(scheduler, work, index) {
31027 if (index === void 0) {
31028 index = scheduler.index += 1;
31029 }
31030 var _this = _super.call(this, scheduler, work) || this;
31031 _this.scheduler = scheduler;
31032 _this.work = work;
31033 _this.index = index;
31034 _this.active = true;
31035 _this.index = scheduler.index = index;
31036 return _this;
31037 }
31038 VirtualAction.prototype.schedule = function (state, delay) {
31039 if (delay === void 0) {
31040 delay = 0;
31041 }
31042 if (!this.id) {
31043 return _super.prototype.schedule.call(this, state, delay);
31044 }
31045 this.active = false;
31046 var action = new VirtualAction(this.scheduler, this.work);
31047 this.add(action);
31048 return action.schedule(state, delay);
31049 };
31050 VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
31051 if (delay === void 0) {
31052 delay = 0;
31053 }
31054 this.delay = scheduler.frame + delay;
31055 var actions = scheduler.actions;
31056 actions.push(this);
31057 actions.sort(VirtualAction.sortActions);
31058 return true;
31059 };
31060 VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
31061 if (delay === void 0) {
31062 delay = 0;
31063 }
31064 return undefined;
31065 };
31066 VirtualAction.prototype._execute = function (state, delay) {
31067 if (this.active === true) {
31068 return _super.prototype._execute.call(this, state, delay);
31069 }
31070 };
31071 VirtualAction.sortActions = function (a, b) {
31072 if (a.delay === b.delay) {
31073 if (a.index === b.index) {
31074 return 0;
31075 }
31076 else if (a.index > b.index) {
31077 return 1;
31078 }
31079 else {
31080 return -1;
31081 }
31082 }
31083 else if (a.delay > b.delay) {
31084 return 1;
31085 }
31086 else {
31087 return -1;
31088 }
31089 };
31090 return VirtualAction;
31091}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__.AsyncAction));
31092
31093//# sourceMappingURL=VirtualTimeScheduler.js.map
31094
31095
31096/***/ }),
31097/* 237 */
31098/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31099
31100"use strict";
31101__webpack_require__.r(__webpack_exports__);
31102/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31103/* harmony export */ "noop": () => (/* binding */ noop)
31104/* harmony export */ });
31105/** PURE_IMPORTS_START PURE_IMPORTS_END */
31106function noop() { }
31107//# sourceMappingURL=noop.js.map
31108
31109
31110/***/ }),
31111/* 238 */
31112/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31113
31114"use strict";
31115__webpack_require__.r(__webpack_exports__);
31116/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31117/* harmony export */ "isObservable": () => (/* binding */ isObservable)
31118/* harmony export */ });
31119/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
31120/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
31121
31122function isObservable(obj) {
31123 return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
31124}
31125//# sourceMappingURL=isObservable.js.map
31126
31127
31128/***/ }),
31129/* 239 */
31130/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31131
31132"use strict";
31133__webpack_require__.r(__webpack_exports__);
31134/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31135/* harmony export */ "ArgumentOutOfRangeError": () => (/* binding */ ArgumentOutOfRangeError)
31136/* harmony export */ });
31137/** PURE_IMPORTS_START PURE_IMPORTS_END */
31138var ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {
31139 function ArgumentOutOfRangeErrorImpl() {
31140 Error.call(this);
31141 this.message = 'argument out of range';
31142 this.name = 'ArgumentOutOfRangeError';
31143 return this;
31144 }
31145 ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
31146 return ArgumentOutOfRangeErrorImpl;
31147})();
31148var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
31149//# sourceMappingURL=ArgumentOutOfRangeError.js.map
31150
31151
31152/***/ }),
31153/* 240 */
31154/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31155
31156"use strict";
31157__webpack_require__.r(__webpack_exports__);
31158/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31159/* harmony export */ "EmptyError": () => (/* binding */ EmptyError)
31160/* harmony export */ });
31161/** PURE_IMPORTS_START PURE_IMPORTS_END */
31162var EmptyErrorImpl = /*@__PURE__*/ (function () {
31163 function EmptyErrorImpl() {
31164 Error.call(this);
31165 this.message = 'no elements in sequence';
31166 this.name = 'EmptyError';
31167 return this;
31168 }
31169 EmptyErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
31170 return EmptyErrorImpl;
31171})();
31172var EmptyError = EmptyErrorImpl;
31173//# sourceMappingURL=EmptyError.js.map
31174
31175
31176/***/ }),
31177/* 241 */
31178/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31179
31180"use strict";
31181__webpack_require__.r(__webpack_exports__);
31182/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31183/* harmony export */ "TimeoutError": () => (/* binding */ TimeoutError)
31184/* harmony export */ });
31185/** PURE_IMPORTS_START PURE_IMPORTS_END */
31186var TimeoutErrorImpl = /*@__PURE__*/ (function () {
31187 function TimeoutErrorImpl() {
31188 Error.call(this);
31189 this.message = 'Timeout has occurred';
31190 this.name = 'TimeoutError';
31191 return this;
31192 }
31193 TimeoutErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
31194 return TimeoutErrorImpl;
31195})();
31196var TimeoutError = TimeoutErrorImpl;
31197//# sourceMappingURL=TimeoutError.js.map
31198
31199
31200/***/ }),
31201/* 242 */
31202/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31203
31204"use strict";
31205__webpack_require__.r(__webpack_exports__);
31206/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31207/* harmony export */ "bindCallback": () => (/* binding */ bindCallback)
31208/* harmony export */ });
31209/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
31210/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(227);
31211/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(243);
31212/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(199);
31213/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
31214/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
31215/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */
31216
31217
31218
31219
31220
31221
31222function bindCallback(callbackFunc, resultSelector, scheduler) {
31223 if (resultSelector) {
31224 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(resultSelector)) {
31225 scheduler = resultSelector;
31226 }
31227 else {
31228 return function () {
31229 var args = [];
31230 for (var _i = 0; _i < arguments.length; _i++) {
31231 args[_i] = arguments[_i];
31232 }
31233 return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
31234 };
31235 }
31236 }
31237 return function () {
31238 var args = [];
31239 for (var _i = 0; _i < arguments.length; _i++) {
31240 args[_i] = arguments[_i];
31241 }
31242 var context = this;
31243 var subject;
31244 var params = {
31245 context: context,
31246 subject: subject,
31247 callbackFunc: callbackFunc,
31248 scheduler: scheduler,
31249 };
31250 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
31251 if (!scheduler) {
31252 if (!subject) {
31253 subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
31254 var handler = function () {
31255 var innerArgs = [];
31256 for (var _i = 0; _i < arguments.length; _i++) {
31257 innerArgs[_i] = arguments[_i];
31258 }
31259 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
31260 subject.complete();
31261 };
31262 try {
31263 callbackFunc.apply(context, args.concat([handler]));
31264 }
31265 catch (err) {
31266 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_5__.canReportError)(subject)) {
31267 subject.error(err);
31268 }
31269 else {
31270 console.warn(err);
31271 }
31272 }
31273 }
31274 return subject.subscribe(subscriber);
31275 }
31276 else {
31277 var state = {
31278 args: args, subscriber: subscriber, params: params,
31279 };
31280 return scheduler.schedule(dispatch, 0, state);
31281 }
31282 });
31283 };
31284}
31285function dispatch(state) {
31286 var _this = this;
31287 var self = this;
31288 var args = state.args, subscriber = state.subscriber, params = state.params;
31289 var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
31290 var subject = params.subject;
31291 if (!subject) {
31292 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
31293 var handler = function () {
31294 var innerArgs = [];
31295 for (var _i = 0; _i < arguments.length; _i++) {
31296 innerArgs[_i] = arguments[_i];
31297 }
31298 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
31299 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
31300 };
31301 try {
31302 callbackFunc.apply(context, args.concat([handler]));
31303 }
31304 catch (err) {
31305 subject.error(err);
31306 }
31307 }
31308 this.add(subject.subscribe(subscriber));
31309}
31310function dispatchNext(state) {
31311 var value = state.value, subject = state.subject;
31312 subject.next(value);
31313 subject.complete();
31314}
31315function dispatchError(state) {
31316 var err = state.err, subject = state.subject;
31317 subject.error(err);
31318}
31319//# sourceMappingURL=bindCallback.js.map
31320
31321
31322/***/ }),
31323/* 243 */
31324/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31325
31326"use strict";
31327__webpack_require__.r(__webpack_exports__);
31328/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31329/* harmony export */ "map": () => (/* binding */ map),
31330/* harmony export */ "MapOperator": () => (/* binding */ MapOperator)
31331/* harmony export */ });
31332/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
31333/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
31334/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31335
31336
31337function map(project, thisArg) {
31338 return function mapOperation(source) {
31339 if (typeof project !== 'function') {
31340 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
31341 }
31342 return source.lift(new MapOperator(project, thisArg));
31343 };
31344}
31345var MapOperator = /*@__PURE__*/ (function () {
31346 function MapOperator(project, thisArg) {
31347 this.project = project;
31348 this.thisArg = thisArg;
31349 }
31350 MapOperator.prototype.call = function (subscriber, source) {
31351 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
31352 };
31353 return MapOperator;
31354}());
31355
31356var MapSubscriber = /*@__PURE__*/ (function (_super) {
31357 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MapSubscriber, _super);
31358 function MapSubscriber(destination, project, thisArg) {
31359 var _this = _super.call(this, destination) || this;
31360 _this.project = project;
31361 _this.count = 0;
31362 _this.thisArg = thisArg || _this;
31363 return _this;
31364 }
31365 MapSubscriber.prototype._next = function (value) {
31366 var result;
31367 try {
31368 result = this.project.call(this.thisArg, value, this.count++);
31369 }
31370 catch (err) {
31371 this.destination.error(err);
31372 return;
31373 }
31374 this.destination.next(result);
31375 };
31376 return MapSubscriber;
31377}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
31378//# sourceMappingURL=map.js.map
31379
31380
31381/***/ }),
31382/* 244 */
31383/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31384
31385"use strict";
31386__webpack_require__.r(__webpack_exports__);
31387/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31388/* harmony export */ "bindNodeCallback": () => (/* binding */ bindNodeCallback)
31389/* harmony export */ });
31390/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
31391/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(227);
31392/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(243);
31393/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(199);
31394/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
31395/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
31396/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isScheduler,_util_isArray PURE_IMPORTS_END */
31397
31398
31399
31400
31401
31402
31403function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
31404 if (resultSelector) {
31405 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(resultSelector)) {
31406 scheduler = resultSelector;
31407 }
31408 else {
31409 return function () {
31410 var args = [];
31411 for (var _i = 0; _i < arguments.length; _i++) {
31412 args[_i] = arguments[_i];
31413 }
31414 return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
31415 };
31416 }
31417 }
31418 return function () {
31419 var args = [];
31420 for (var _i = 0; _i < arguments.length; _i++) {
31421 args[_i] = arguments[_i];
31422 }
31423 var params = {
31424 subject: undefined,
31425 args: args,
31426 callbackFunc: callbackFunc,
31427 scheduler: scheduler,
31428 context: this,
31429 };
31430 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
31431 var context = params.context;
31432 var subject = params.subject;
31433 if (!scheduler) {
31434 if (!subject) {
31435 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
31436 var handler = function () {
31437 var innerArgs = [];
31438 for (var _i = 0; _i < arguments.length; _i++) {
31439 innerArgs[_i] = arguments[_i];
31440 }
31441 var err = innerArgs.shift();
31442 if (err) {
31443 subject.error(err);
31444 return;
31445 }
31446 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
31447 subject.complete();
31448 };
31449 try {
31450 callbackFunc.apply(context, args.concat([handler]));
31451 }
31452 catch (err) {
31453 if ((0,_util_canReportError__WEBPACK_IMPORTED_MODULE_5__.canReportError)(subject)) {
31454 subject.error(err);
31455 }
31456 else {
31457 console.warn(err);
31458 }
31459 }
31460 }
31461 return subject.subscribe(subscriber);
31462 }
31463 else {
31464 return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context });
31465 }
31466 });
31467 };
31468}
31469function dispatch(state) {
31470 var _this = this;
31471 var params = state.params, subscriber = state.subscriber, context = state.context;
31472 var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
31473 var subject = params.subject;
31474 if (!subject) {
31475 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_4__.AsyncSubject();
31476 var handler = function () {
31477 var innerArgs = [];
31478 for (var _i = 0; _i < arguments.length; _i++) {
31479 innerArgs[_i] = arguments[_i];
31480 }
31481 var err = innerArgs.shift();
31482 if (err) {
31483 _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
31484 }
31485 else {
31486 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
31487 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
31488 }
31489 };
31490 try {
31491 callbackFunc.apply(context, args.concat([handler]));
31492 }
31493 catch (err) {
31494 this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
31495 }
31496 }
31497 this.add(subject.subscribe(subscriber));
31498}
31499function dispatchNext(arg) {
31500 var value = arg.value, subject = arg.subject;
31501 subject.next(value);
31502 subject.complete();
31503}
31504function dispatchError(arg) {
31505 var err = arg.err, subject = arg.subject;
31506 subject.error(err);
31507}
31508//# sourceMappingURL=bindNodeCallback.js.map
31509
31510
31511/***/ }),
31512/* 245 */
31513/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31514
31515"use strict";
31516__webpack_require__.r(__webpack_exports__);
31517/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31518/* harmony export */ "combineLatest": () => (/* binding */ combineLatest),
31519/* harmony export */ "CombineLatestOperator": () => (/* binding */ CombineLatestOperator),
31520/* harmony export */ "CombineLatestSubscriber": () => (/* binding */ CombineLatestSubscriber)
31521/* harmony export */ });
31522/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
31523/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(214);
31524/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
31525/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(255);
31526/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246);
31527/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(216);
31528/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */
31529
31530
31531
31532
31533
31534
31535var NONE = {};
31536function combineLatest() {
31537 var observables = [];
31538 for (var _i = 0; _i < arguments.length; _i++) {
31539 observables[_i] = arguments[_i];
31540 }
31541 var resultSelector = undefined;
31542 var scheduler = undefined;
31543 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(observables[observables.length - 1])) {
31544 scheduler = observables.pop();
31545 }
31546 if (typeof observables[observables.length - 1] === 'function') {
31547 resultSelector = observables.pop();
31548 }
31549 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(observables[0])) {
31550 observables = observables[0];
31551 }
31552 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_3__.fromArray)(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
31553}
31554var CombineLatestOperator = /*@__PURE__*/ (function () {
31555 function CombineLatestOperator(resultSelector) {
31556 this.resultSelector = resultSelector;
31557 }
31558 CombineLatestOperator.prototype.call = function (subscriber, source) {
31559 return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
31560 };
31561 return CombineLatestOperator;
31562}());
31563
31564var CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {
31565 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CombineLatestSubscriber, _super);
31566 function CombineLatestSubscriber(destination, resultSelector) {
31567 var _this = _super.call(this, destination) || this;
31568 _this.resultSelector = resultSelector;
31569 _this.active = 0;
31570 _this.values = [];
31571 _this.observables = [];
31572 return _this;
31573 }
31574 CombineLatestSubscriber.prototype._next = function (observable) {
31575 this.values.push(NONE);
31576 this.observables.push(observable);
31577 };
31578 CombineLatestSubscriber.prototype._complete = function () {
31579 var observables = this.observables;
31580 var len = observables.length;
31581 if (len === 0) {
31582 this.destination.complete();
31583 }
31584 else {
31585 this.active = len;
31586 this.toRespond = len;
31587 for (var i = 0; i < len; i++) {
31588 var observable = observables[i];
31589 this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__.subscribeToResult)(this, observable, undefined, i));
31590 }
31591 }
31592 };
31593 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
31594 if ((this.active -= 1) === 0) {
31595 this.destination.complete();
31596 }
31597 };
31598 CombineLatestSubscriber.prototype.notifyNext = function (_outerValue, innerValue, outerIndex) {
31599 var values = this.values;
31600 var oldVal = values[outerIndex];
31601 var toRespond = !this.toRespond
31602 ? 0
31603 : oldVal === NONE ? --this.toRespond : this.toRespond;
31604 values[outerIndex] = innerValue;
31605 if (toRespond === 0) {
31606 if (this.resultSelector) {
31607 this._tryResultSelector(values);
31608 }
31609 else {
31610 this.destination.next(values.slice());
31611 }
31612 }
31613 };
31614 CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
31615 var result;
31616 try {
31617 result = this.resultSelector.apply(this, values);
31618 }
31619 catch (err) {
31620 this.destination.error(err);
31621 return;
31622 }
31623 this.destination.next(result);
31624 };
31625 return CombineLatestSubscriber;
31626}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_5__.OuterSubscriber));
31627
31628//# sourceMappingURL=combineLatest.js.map
31629
31630
31631/***/ }),
31632/* 246 */
31633/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31634
31635"use strict";
31636__webpack_require__.r(__webpack_exports__);
31637/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31638/* harmony export */ "subscribeToResult": () => (/* binding */ subscribeToResult)
31639/* harmony export */ });
31640/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(247);
31641/* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248);
31642/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
31643/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */
31644
31645
31646
31647function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) {
31648 if (innerSubscriber === void 0) {
31649 innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
31650 }
31651 if (innerSubscriber.closed) {
31652 return undefined;
31653 }
31654 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable) {
31655 return result.subscribe(innerSubscriber);
31656 }
31657 return (0,_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(result)(innerSubscriber);
31658}
31659//# sourceMappingURL=subscribeToResult.js.map
31660
31661
31662/***/ }),
31663/* 247 */
31664/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31665
31666"use strict";
31667__webpack_require__.r(__webpack_exports__);
31668/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31669/* harmony export */ "InnerSubscriber": () => (/* binding */ InnerSubscriber)
31670/* harmony export */ });
31671/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
31672/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
31673/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31674
31675
31676var InnerSubscriber = /*@__PURE__*/ (function (_super) {
31677 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(InnerSubscriber, _super);
31678 function InnerSubscriber(parent, outerValue, outerIndex) {
31679 var _this = _super.call(this) || this;
31680 _this.parent = parent;
31681 _this.outerValue = outerValue;
31682 _this.outerIndex = outerIndex;
31683 _this.index = 0;
31684 return _this;
31685 }
31686 InnerSubscriber.prototype._next = function (value) {
31687 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
31688 };
31689 InnerSubscriber.prototype._error = function (error) {
31690 this.parent.notifyError(error, this);
31691 this.unsubscribe();
31692 };
31693 InnerSubscriber.prototype._complete = function () {
31694 this.parent.notifyComplete(this);
31695 this.unsubscribe();
31696 };
31697 return InnerSubscriber;
31698}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
31699
31700//# sourceMappingURL=InnerSubscriber.js.map
31701
31702
31703/***/ }),
31704/* 248 */
31705/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31706
31707"use strict";
31708__webpack_require__.r(__webpack_exports__);
31709/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31710/* harmony export */ "subscribeTo": () => (/* binding */ subscribeTo)
31711/* harmony export */ });
31712/* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(217);
31713/* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(252);
31714/* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(254);
31715/* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(249);
31716/* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(250);
31717/* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(251);
31718/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(198);
31719/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(253);
31720/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(200);
31721/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */
31722
31723
31724
31725
31726
31727
31728
31729
31730
31731var subscribeTo = function (result) {
31732 if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable] === 'function') {
31733 return (0,_subscribeToObservable__WEBPACK_IMPORTED_MODULE_1__.subscribeToObservable)(result);
31734 }
31735 else if ((0,_isArrayLike__WEBPACK_IMPORTED_MODULE_2__.isArrayLike)(result)) {
31736 return (0,_subscribeToArray__WEBPACK_IMPORTED_MODULE_3__.subscribeToArray)(result);
31737 }
31738 else if ((0,_isPromise__WEBPACK_IMPORTED_MODULE_4__.isPromise)(result)) {
31739 return (0,_subscribeToPromise__WEBPACK_IMPORTED_MODULE_5__.subscribeToPromise)(result);
31740 }
31741 else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__.iterator] === 'function') {
31742 return (0,_subscribeToIterable__WEBPACK_IMPORTED_MODULE_7__.subscribeToIterable)(result);
31743 }
31744 else {
31745 var value = (0,_isObject__WEBPACK_IMPORTED_MODULE_8__.isObject)(result) ? 'an invalid object' : "'" + result + "'";
31746 var msg = "You provided " + value + " where a stream was expected."
31747 + ' You can provide an Observable, Promise, Array, or Iterable.';
31748 throw new TypeError(msg);
31749 }
31750};
31751//# sourceMappingURL=subscribeTo.js.map
31752
31753
31754/***/ }),
31755/* 249 */
31756/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31757
31758"use strict";
31759__webpack_require__.r(__webpack_exports__);
31760/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31761/* harmony export */ "subscribeToObservable": () => (/* binding */ subscribeToObservable)
31762/* harmony export */ });
31763/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(200);
31764/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
31765
31766var subscribeToObservable = function (obj) {
31767 return function (subscriber) {
31768 var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable]();
31769 if (typeof obs.subscribe !== 'function') {
31770 throw new TypeError('Provided object does not correctly implement Symbol.observable');
31771 }
31772 else {
31773 return obs.subscribe(subscriber);
31774 }
31775 };
31776};
31777//# sourceMappingURL=subscribeToObservable.js.map
31778
31779
31780/***/ }),
31781/* 250 */
31782/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31783
31784"use strict";
31785__webpack_require__.r(__webpack_exports__);
31786/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31787/* harmony export */ "isArrayLike": () => (/* binding */ isArrayLike)
31788/* harmony export */ });
31789/** PURE_IMPORTS_START PURE_IMPORTS_END */
31790var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
31791//# sourceMappingURL=isArrayLike.js.map
31792
31793
31794/***/ }),
31795/* 251 */
31796/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31797
31798"use strict";
31799__webpack_require__.r(__webpack_exports__);
31800/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31801/* harmony export */ "isPromise": () => (/* binding */ isPromise)
31802/* harmony export */ });
31803/** PURE_IMPORTS_START PURE_IMPORTS_END */
31804function isPromise(value) {
31805 return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
31806}
31807//# sourceMappingURL=isPromise.js.map
31808
31809
31810/***/ }),
31811/* 252 */
31812/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31813
31814"use strict";
31815__webpack_require__.r(__webpack_exports__);
31816/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31817/* harmony export */ "subscribeToPromise": () => (/* binding */ subscribeToPromise)
31818/* harmony export */ });
31819/* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(192);
31820/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */
31821
31822var subscribeToPromise = function (promise) {
31823 return function (subscriber) {
31824 promise.then(function (value) {
31825 if (!subscriber.closed) {
31826 subscriber.next(value);
31827 subscriber.complete();
31828 }
31829 }, function (err) { return subscriber.error(err); })
31830 .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__.hostReportError);
31831 return subscriber;
31832 };
31833};
31834//# sourceMappingURL=subscribeToPromise.js.map
31835
31836
31837/***/ }),
31838/* 253 */
31839/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31840
31841"use strict";
31842__webpack_require__.r(__webpack_exports__);
31843/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31844/* harmony export */ "getSymbolIterator": () => (/* binding */ getSymbolIterator),
31845/* harmony export */ "iterator": () => (/* binding */ iterator),
31846/* harmony export */ "$$iterator": () => (/* binding */ $$iterator)
31847/* harmony export */ });
31848/** PURE_IMPORTS_START PURE_IMPORTS_END */
31849function getSymbolIterator() {
31850 if (typeof Symbol !== 'function' || !Symbol.iterator) {
31851 return '@@iterator';
31852 }
31853 return Symbol.iterator;
31854}
31855var iterator = /*@__PURE__*/ getSymbolIterator();
31856var $$iterator = iterator;
31857//# sourceMappingURL=iterator.js.map
31858
31859
31860/***/ }),
31861/* 254 */
31862/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31863
31864"use strict";
31865__webpack_require__.r(__webpack_exports__);
31866/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31867/* harmony export */ "subscribeToIterable": () => (/* binding */ subscribeToIterable)
31868/* harmony export */ });
31869/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(253);
31870/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
31871
31872var subscribeToIterable = function (iterable) {
31873 return function (subscriber) {
31874 var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__.iterator]();
31875 do {
31876 var item = void 0;
31877 try {
31878 item = iterator.next();
31879 }
31880 catch (err) {
31881 subscriber.error(err);
31882 return subscriber;
31883 }
31884 if (item.done) {
31885 subscriber.complete();
31886 break;
31887 }
31888 subscriber.next(item.value);
31889 if (subscriber.closed) {
31890 break;
31891 }
31892 } while (true);
31893 if (typeof iterator.return === 'function') {
31894 subscriber.add(function () {
31895 if (iterator.return) {
31896 iterator.return();
31897 }
31898 });
31899 }
31900 return subscriber;
31901 };
31902};
31903//# sourceMappingURL=subscribeToIterable.js.map
31904
31905
31906/***/ }),
31907/* 255 */
31908/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31909
31910"use strict";
31911__webpack_require__.r(__webpack_exports__);
31912/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31913/* harmony export */ "OuterSubscriber": () => (/* binding */ OuterSubscriber)
31914/* harmony export */ });
31915/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
31916/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
31917/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31918
31919
31920var OuterSubscriber = /*@__PURE__*/ (function (_super) {
31921 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(OuterSubscriber, _super);
31922 function OuterSubscriber() {
31923 return _super !== null && _super.apply(this, arguments) || this;
31924 }
31925 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31926 this.destination.next(innerValue);
31927 };
31928 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
31929 this.destination.error(error);
31930 };
31931 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
31932 this.destination.complete();
31933 };
31934 return OuterSubscriber;
31935}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
31936
31937//# sourceMappingURL=OuterSubscriber.js.map
31938
31939
31940/***/ }),
31941/* 256 */
31942/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31943
31944"use strict";
31945__webpack_require__.r(__webpack_exports__);
31946/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31947/* harmony export */ "concat": () => (/* binding */ concat)
31948/* harmony export */ });
31949/* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
31950/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(257);
31951/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */
31952
31953
31954function concat() {
31955 var observables = [];
31956 for (var _i = 0; _i < arguments.length; _i++) {
31957 observables[_i] = arguments[_i];
31958 }
31959 return (0,_operators_concatAll__WEBPACK_IMPORTED_MODULE_0__.concatAll)()(_of__WEBPACK_IMPORTED_MODULE_1__.of.apply(void 0, observables));
31960}
31961//# sourceMappingURL=concat.js.map
31962
31963
31964/***/ }),
31965/* 257 */
31966/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31967
31968"use strict";
31969__webpack_require__.r(__webpack_exports__);
31970/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31971/* harmony export */ "concatAll": () => (/* binding */ concatAll)
31972/* harmony export */ });
31973/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(258);
31974/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */
31975
31976function concatAll() {
31977 return (0,_mergeAll__WEBPACK_IMPORTED_MODULE_0__.mergeAll)(1);
31978}
31979//# sourceMappingURL=concatAll.js.map
31980
31981
31982/***/ }),
31983/* 258 */
31984/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
31985
31986"use strict";
31987__webpack_require__.r(__webpack_exports__);
31988/* harmony export */ __webpack_require__.d(__webpack_exports__, {
31989/* harmony export */ "mergeAll": () => (/* binding */ mergeAll)
31990/* harmony export */ });
31991/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(259);
31992/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
31993/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */
31994
31995
31996function mergeAll(concurrent) {
31997 if (concurrent === void 0) {
31998 concurrent = Number.POSITIVE_INFINITY;
31999 }
32000 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(_util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, concurrent);
32001}
32002//# sourceMappingURL=mergeAll.js.map
32003
32004
32005/***/ }),
32006/* 259 */
32007/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32008
32009"use strict";
32010__webpack_require__.r(__webpack_exports__);
32011/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32012/* harmony export */ "mergeMap": () => (/* binding */ mergeMap),
32013/* harmony export */ "MergeMapOperator": () => (/* binding */ MergeMapOperator),
32014/* harmony export */ "MergeMapSubscriber": () => (/* binding */ MergeMapSubscriber),
32015/* harmony export */ "flatMap": () => (/* binding */ flatMap)
32016/* harmony export */ });
32017/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
32018/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(243);
32019/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
32020/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267);
32021/** PURE_IMPORTS_START tslib,_map,_observable_from,_innerSubscribe PURE_IMPORTS_END */
32022
32023
32024
32025
32026function mergeMap(project, resultSelector, concurrent) {
32027 if (concurrent === void 0) {
32028 concurrent = Number.POSITIVE_INFINITY;
32029 }
32030 if (typeof resultSelector === 'function') {
32031 return function (source) { return source.pipe(mergeMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };
32032 }
32033 else if (typeof resultSelector === 'number') {
32034 concurrent = resultSelector;
32035 }
32036 return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
32037}
32038var MergeMapOperator = /*@__PURE__*/ (function () {
32039 function MergeMapOperator(project, concurrent) {
32040 if (concurrent === void 0) {
32041 concurrent = Number.POSITIVE_INFINITY;
32042 }
32043 this.project = project;
32044 this.concurrent = concurrent;
32045 }
32046 MergeMapOperator.prototype.call = function (observer, source) {
32047 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
32048 };
32049 return MergeMapOperator;
32050}());
32051
32052var MergeMapSubscriber = /*@__PURE__*/ (function (_super) {
32053 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MergeMapSubscriber, _super);
32054 function MergeMapSubscriber(destination, project, concurrent) {
32055 if (concurrent === void 0) {
32056 concurrent = Number.POSITIVE_INFINITY;
32057 }
32058 var _this = _super.call(this, destination) || this;
32059 _this.project = project;
32060 _this.concurrent = concurrent;
32061 _this.hasCompleted = false;
32062 _this.buffer = [];
32063 _this.active = 0;
32064 _this.index = 0;
32065 return _this;
32066 }
32067 MergeMapSubscriber.prototype._next = function (value) {
32068 if (this.active < this.concurrent) {
32069 this._tryNext(value);
32070 }
32071 else {
32072 this.buffer.push(value);
32073 }
32074 };
32075 MergeMapSubscriber.prototype._tryNext = function (value) {
32076 var result;
32077 var index = this.index++;
32078 try {
32079 result = this.project(value, index);
32080 }
32081 catch (err) {
32082 this.destination.error(err);
32083 return;
32084 }
32085 this.active++;
32086 this._innerSub(result);
32087 };
32088 MergeMapSubscriber.prototype._innerSub = function (ish) {
32089 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleInnerSubscriber(this);
32090 var destination = this.destination;
32091 destination.add(innerSubscriber);
32092 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.innerSubscribe)(ish, innerSubscriber);
32093 if (innerSubscription !== innerSubscriber) {
32094 destination.add(innerSubscription);
32095 }
32096 };
32097 MergeMapSubscriber.prototype._complete = function () {
32098 this.hasCompleted = true;
32099 if (this.active === 0 && this.buffer.length === 0) {
32100 this.destination.complete();
32101 }
32102 this.unsubscribe();
32103 };
32104 MergeMapSubscriber.prototype.notifyNext = function (innerValue) {
32105 this.destination.next(innerValue);
32106 };
32107 MergeMapSubscriber.prototype.notifyComplete = function () {
32108 var buffer = this.buffer;
32109 this.active--;
32110 if (buffer.length > 0) {
32111 this._next(buffer.shift());
32112 }
32113 else if (this.active === 0 && this.hasCompleted) {
32114 this.destination.complete();
32115 }
32116 };
32117 return MergeMapSubscriber;
32118}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleOuterSubscriber));
32119
32120var flatMap = mergeMap;
32121//# sourceMappingURL=mergeMap.js.map
32122
32123
32124/***/ }),
32125/* 260 */
32126/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32127
32128"use strict";
32129__webpack_require__.r(__webpack_exports__);
32130/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32131/* harmony export */ "from": () => (/* binding */ from)
32132/* harmony export */ });
32133/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
32134/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(248);
32135/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(261);
32136/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */
32137
32138
32139
32140function from(input, scheduler) {
32141 if (!scheduler) {
32142 if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable) {
32143 return input;
32144 }
32145 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__.subscribeTo)(input));
32146 }
32147 else {
32148 return (0,_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__.scheduled)(input, scheduler);
32149 }
32150}
32151//# sourceMappingURL=from.js.map
32152
32153
32154/***/ }),
32155/* 261 */
32156/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32157
32158"use strict";
32159__webpack_require__.r(__webpack_exports__);
32160/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32161/* harmony export */ "scheduled": () => (/* binding */ scheduled)
32162/* harmony export */ });
32163/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(263);
32164/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(264);
32165/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(215);
32166/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(266);
32167/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(262);
32168/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(251);
32169/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(250);
32170/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(265);
32171/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */
32172
32173
32174
32175
32176
32177
32178
32179
32180function scheduled(input, scheduler) {
32181 if (input != null) {
32182 if ((0,_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_0__.isInteropObservable)(input)) {
32183 return (0,_scheduleObservable__WEBPACK_IMPORTED_MODULE_1__.scheduleObservable)(input, scheduler);
32184 }
32185 else if ((0,_util_isPromise__WEBPACK_IMPORTED_MODULE_2__.isPromise)(input)) {
32186 return (0,_schedulePromise__WEBPACK_IMPORTED_MODULE_3__.schedulePromise)(input, scheduler);
32187 }
32188 else if ((0,_util_isArrayLike__WEBPACK_IMPORTED_MODULE_4__.isArrayLike)(input)) {
32189 return (0,_scheduleArray__WEBPACK_IMPORTED_MODULE_5__.scheduleArray)(input, scheduler);
32190 }
32191 else if ((0,_util_isIterable__WEBPACK_IMPORTED_MODULE_6__.isIterable)(input) || typeof input === 'string') {
32192 return (0,_scheduleIterable__WEBPACK_IMPORTED_MODULE_7__.scheduleIterable)(input, scheduler);
32193 }
32194 }
32195 throw new TypeError((input !== null && typeof input || input) + ' is not observable');
32196}
32197//# sourceMappingURL=scheduled.js.map
32198
32199
32200/***/ }),
32201/* 262 */
32202/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32203
32204"use strict";
32205__webpack_require__.r(__webpack_exports__);
32206/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32207/* harmony export */ "isInteropObservable": () => (/* binding */ isInteropObservable)
32208/* harmony export */ });
32209/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(200);
32210/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
32211
32212function isInteropObservable(input) {
32213 return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__.observable] === 'function';
32214}
32215//# sourceMappingURL=isInteropObservable.js.map
32216
32217
32218/***/ }),
32219/* 263 */
32220/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32221
32222"use strict";
32223__webpack_require__.r(__webpack_exports__);
32224/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32225/* harmony export */ "scheduleObservable": () => (/* binding */ scheduleObservable)
32226/* harmony export */ });
32227/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
32228/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
32229/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(200);
32230/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */
32231
32232
32233
32234function scheduleObservable(input, scheduler) {
32235 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
32236 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
32237 sub.add(scheduler.schedule(function () {
32238 var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__.observable]();
32239 sub.add(observable.subscribe({
32240 next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
32241 error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
32242 complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
32243 }));
32244 }));
32245 return sub;
32246 });
32247}
32248//# sourceMappingURL=scheduleObservable.js.map
32249
32250
32251/***/ }),
32252/* 264 */
32253/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32254
32255"use strict";
32256__webpack_require__.r(__webpack_exports__);
32257/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32258/* harmony export */ "schedulePromise": () => (/* binding */ schedulePromise)
32259/* harmony export */ });
32260/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
32261/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
32262/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
32263
32264
32265function schedulePromise(input, scheduler) {
32266 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
32267 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
32268 sub.add(scheduler.schedule(function () {
32269 return input.then(function (value) {
32270 sub.add(scheduler.schedule(function () {
32271 subscriber.next(value);
32272 sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
32273 }));
32274 }, function (err) {
32275 sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
32276 });
32277 }));
32278 return sub;
32279 });
32280}
32281//# sourceMappingURL=schedulePromise.js.map
32282
32283
32284/***/ }),
32285/* 265 */
32286/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32287
32288"use strict";
32289__webpack_require__.r(__webpack_exports__);
32290/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32291/* harmony export */ "isIterable": () => (/* binding */ isIterable)
32292/* harmony export */ });
32293/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(253);
32294/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
32295
32296function isIterable(input) {
32297 return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__.iterator] === 'function';
32298}
32299//# sourceMappingURL=isIterable.js.map
32300
32301
32302/***/ }),
32303/* 266 */
32304/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32305
32306"use strict";
32307__webpack_require__.r(__webpack_exports__);
32308/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32309/* harmony export */ "scheduleIterable": () => (/* binding */ scheduleIterable)
32310/* harmony export */ });
32311/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
32312/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
32313/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(253);
32314/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */
32315
32316
32317
32318function scheduleIterable(input, scheduler) {
32319 if (!input) {
32320 throw new Error('Iterable cannot be null');
32321 }
32322 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
32323 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
32324 var iterator;
32325 sub.add(function () {
32326 if (iterator && typeof iterator.return === 'function') {
32327 iterator.return();
32328 }
32329 });
32330 sub.add(scheduler.schedule(function () {
32331 iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__.iterator]();
32332 sub.add(scheduler.schedule(function () {
32333 if (subscriber.closed) {
32334 return;
32335 }
32336 var value;
32337 var done;
32338 try {
32339 var result = iterator.next();
32340 value = result.value;
32341 done = result.done;
32342 }
32343 catch (err) {
32344 subscriber.error(err);
32345 return;
32346 }
32347 if (done) {
32348 subscriber.complete();
32349 }
32350 else {
32351 subscriber.next(value);
32352 this.schedule();
32353 }
32354 }));
32355 }));
32356 return sub;
32357 });
32358}
32359//# sourceMappingURL=scheduleIterable.js.map
32360
32361
32362/***/ }),
32363/* 267 */
32364/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32365
32366"use strict";
32367__webpack_require__.r(__webpack_exports__);
32368/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32369/* harmony export */ "SimpleInnerSubscriber": () => (/* binding */ SimpleInnerSubscriber),
32370/* harmony export */ "ComplexInnerSubscriber": () => (/* binding */ ComplexInnerSubscriber),
32371/* harmony export */ "SimpleOuterSubscriber": () => (/* binding */ SimpleOuterSubscriber),
32372/* harmony export */ "ComplexOuterSubscriber": () => (/* binding */ ComplexOuterSubscriber),
32373/* harmony export */ "innerSubscribe": () => (/* binding */ innerSubscribe)
32374/* harmony export */ });
32375/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
32376/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
32377/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
32378/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(248);
32379/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_util_subscribeTo PURE_IMPORTS_END */
32380
32381
32382
32383
32384var SimpleInnerSubscriber = /*@__PURE__*/ (function (_super) {
32385 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SimpleInnerSubscriber, _super);
32386 function SimpleInnerSubscriber(parent) {
32387 var _this = _super.call(this) || this;
32388 _this.parent = parent;
32389 return _this;
32390 }
32391 SimpleInnerSubscriber.prototype._next = function (value) {
32392 this.parent.notifyNext(value);
32393 };
32394 SimpleInnerSubscriber.prototype._error = function (error) {
32395 this.parent.notifyError(error);
32396 this.unsubscribe();
32397 };
32398 SimpleInnerSubscriber.prototype._complete = function () {
32399 this.parent.notifyComplete();
32400 this.unsubscribe();
32401 };
32402 return SimpleInnerSubscriber;
32403}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32404
32405var ComplexInnerSubscriber = /*@__PURE__*/ (function (_super) {
32406 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ComplexInnerSubscriber, _super);
32407 function ComplexInnerSubscriber(parent, outerValue, outerIndex) {
32408 var _this = _super.call(this) || this;
32409 _this.parent = parent;
32410 _this.outerValue = outerValue;
32411 _this.outerIndex = outerIndex;
32412 return _this;
32413 }
32414 ComplexInnerSubscriber.prototype._next = function (value) {
32415 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this);
32416 };
32417 ComplexInnerSubscriber.prototype._error = function (error) {
32418 this.parent.notifyError(error);
32419 this.unsubscribe();
32420 };
32421 ComplexInnerSubscriber.prototype._complete = function () {
32422 this.parent.notifyComplete(this);
32423 this.unsubscribe();
32424 };
32425 return ComplexInnerSubscriber;
32426}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32427
32428var SimpleOuterSubscriber = /*@__PURE__*/ (function (_super) {
32429 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SimpleOuterSubscriber, _super);
32430 function SimpleOuterSubscriber() {
32431 return _super !== null && _super.apply(this, arguments) || this;
32432 }
32433 SimpleOuterSubscriber.prototype.notifyNext = function (innerValue) {
32434 this.destination.next(innerValue);
32435 };
32436 SimpleOuterSubscriber.prototype.notifyError = function (err) {
32437 this.destination.error(err);
32438 };
32439 SimpleOuterSubscriber.prototype.notifyComplete = function () {
32440 this.destination.complete();
32441 };
32442 return SimpleOuterSubscriber;
32443}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32444
32445var ComplexOuterSubscriber = /*@__PURE__*/ (function (_super) {
32446 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ComplexOuterSubscriber, _super);
32447 function ComplexOuterSubscriber() {
32448 return _super !== null && _super.apply(this, arguments) || this;
32449 }
32450 ComplexOuterSubscriber.prototype.notifyNext = function (_outerValue, innerValue, _outerIndex, _innerSub) {
32451 this.destination.next(innerValue);
32452 };
32453 ComplexOuterSubscriber.prototype.notifyError = function (error) {
32454 this.destination.error(error);
32455 };
32456 ComplexOuterSubscriber.prototype.notifyComplete = function (_innerSub) {
32457 this.destination.complete();
32458 };
32459 return ComplexOuterSubscriber;
32460}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
32461
32462function innerSubscribe(result, innerSubscriber) {
32463 if (innerSubscriber.closed) {
32464 return undefined;
32465 }
32466 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable) {
32467 return result.subscribe(innerSubscriber);
32468 }
32469 var subscription;
32470 try {
32471 subscription = (0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_3__.subscribeTo)(result)(innerSubscriber);
32472 }
32473 catch (error) {
32474 innerSubscriber.error(error);
32475 }
32476 return subscription;
32477}
32478//# sourceMappingURL=innerSubscribe.js.map
32479
32480
32481/***/ }),
32482/* 268 */
32483/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32484
32485"use strict";
32486__webpack_require__.r(__webpack_exports__);
32487/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32488/* harmony export */ "defer": () => (/* binding */ defer)
32489/* harmony export */ });
32490/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
32491/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
32492/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(219);
32493/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
32494
32495
32496
32497function defer(observableFactory) {
32498 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
32499 var input;
32500 try {
32501 input = observableFactory();
32502 }
32503 catch (err) {
32504 subscriber.error(err);
32505 return undefined;
32506 }
32507 var source = input ? (0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(input) : (0,_empty__WEBPACK_IMPORTED_MODULE_2__.empty)();
32508 return source.subscribe(subscriber);
32509 });
32510}
32511//# sourceMappingURL=defer.js.map
32512
32513
32514/***/ }),
32515/* 269 */
32516/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32517
32518"use strict";
32519__webpack_require__.r(__webpack_exports__);
32520/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32521/* harmony export */ "forkJoin": () => (/* binding */ forkJoin)
32522/* harmony export */ });
32523/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
32524/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(197);
32525/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(243);
32526/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(198);
32527/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(260);
32528/** PURE_IMPORTS_START _Observable,_util_isArray,_operators_map,_util_isObject,_from PURE_IMPORTS_END */
32529
32530
32531
32532
32533
32534function forkJoin() {
32535 var sources = [];
32536 for (var _i = 0; _i < arguments.length; _i++) {
32537 sources[_i] = arguments[_i];
32538 }
32539 if (sources.length === 1) {
32540 var first_1 = sources[0];
32541 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(first_1)) {
32542 return forkJoinInternal(first_1, null);
32543 }
32544 if ((0,_util_isObject__WEBPACK_IMPORTED_MODULE_1__.isObject)(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
32545 var keys = Object.keys(first_1);
32546 return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
32547 }
32548 }
32549 if (typeof sources[sources.length - 1] === 'function') {
32550 var resultSelector_1 = sources.pop();
32551 sources = (sources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(sources[0])) ? sources[0] : sources;
32552 return forkJoinInternal(sources, null).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (args) { return resultSelector_1.apply(void 0, args); }));
32553 }
32554 return forkJoinInternal(sources, null);
32555}
32556function forkJoinInternal(sources, keys) {
32557 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
32558 var len = sources.length;
32559 if (len === 0) {
32560 subscriber.complete();
32561 return;
32562 }
32563 var values = new Array(len);
32564 var completed = 0;
32565 var emitted = 0;
32566 var _loop_1 = function (i) {
32567 var source = (0,_from__WEBPACK_IMPORTED_MODULE_4__.from)(sources[i]);
32568 var hasValue = false;
32569 subscriber.add(source.subscribe({
32570 next: function (value) {
32571 if (!hasValue) {
32572 hasValue = true;
32573 emitted++;
32574 }
32575 values[i] = value;
32576 },
32577 error: function (err) { return subscriber.error(err); },
32578 complete: function () {
32579 completed++;
32580 if (completed === len || !hasValue) {
32581 if (emitted === len) {
32582 subscriber.next(keys ?
32583 keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
32584 values);
32585 }
32586 subscriber.complete();
32587 }
32588 }
32589 }));
32590 };
32591 for (var i = 0; i < len; i++) {
32592 _loop_1(i);
32593 }
32594 });
32595}
32596//# sourceMappingURL=forkJoin.js.map
32597
32598
32599/***/ }),
32600/* 270 */
32601/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32602
32603"use strict";
32604__webpack_require__.r(__webpack_exports__);
32605/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32606/* harmony export */ "fromEvent": () => (/* binding */ fromEvent)
32607/* harmony export */ });
32608/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
32609/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
32610/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
32611/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(243);
32612/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
32613
32614
32615
32616
32617var toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();
32618function fromEvent(target, eventName, options, resultSelector) {
32619 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_0__.isFunction)(options)) {
32620 resultSelector = options;
32621 options = undefined;
32622 }
32623 if (resultSelector) {
32624 return fromEvent(target, eventName, options).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
32625 }
32626 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
32627 function handler(e) {
32628 if (arguments.length > 1) {
32629 subscriber.next(Array.prototype.slice.call(arguments));
32630 }
32631 else {
32632 subscriber.next(e);
32633 }
32634 }
32635 setupSubscription(target, eventName, handler, subscriber, options);
32636 });
32637}
32638function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
32639 var unsubscribe;
32640 if (isEventTarget(sourceObj)) {
32641 var source_1 = sourceObj;
32642 sourceObj.addEventListener(eventName, handler, options);
32643 unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
32644 }
32645 else if (isJQueryStyleEventEmitter(sourceObj)) {
32646 var source_2 = sourceObj;
32647 sourceObj.on(eventName, handler);
32648 unsubscribe = function () { return source_2.off(eventName, handler); };
32649 }
32650 else if (isNodeStyleEventEmitter(sourceObj)) {
32651 var source_3 = sourceObj;
32652 sourceObj.addListener(eventName, handler);
32653 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
32654 }
32655 else if (sourceObj && sourceObj.length) {
32656 for (var i = 0, len = sourceObj.length; i < len; i++) {
32657 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
32658 }
32659 }
32660 else {
32661 throw new TypeError('Invalid event target');
32662 }
32663 subscriber.add(unsubscribe);
32664}
32665function isNodeStyleEventEmitter(sourceObj) {
32666 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
32667}
32668function isJQueryStyleEventEmitter(sourceObj) {
32669 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
32670}
32671function isEventTarget(sourceObj) {
32672 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
32673}
32674//# sourceMappingURL=fromEvent.js.map
32675
32676
32677/***/ }),
32678/* 271 */
32679/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32680
32681"use strict";
32682__webpack_require__.r(__webpack_exports__);
32683/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32684/* harmony export */ "fromEventPattern": () => (/* binding */ fromEventPattern)
32685/* harmony export */ });
32686/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
32687/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
32688/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(195);
32689/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
32690/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
32691
32692
32693
32694
32695function fromEventPattern(addHandler, removeHandler, resultSelector) {
32696 if (resultSelector) {
32697 return fromEventPattern(addHandler, removeHandler).pipe((0,_operators_map__WEBPACK_IMPORTED_MODULE_0__.map)(function (args) { return (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
32698 }
32699 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
32700 var handler = function () {
32701 var e = [];
32702 for (var _i = 0; _i < arguments.length; _i++) {
32703 e[_i] = arguments[_i];
32704 }
32705 return subscriber.next(e.length === 1 ? e[0] : e);
32706 };
32707 var retValue;
32708 try {
32709 retValue = addHandler(handler);
32710 }
32711 catch (err) {
32712 subscriber.error(err);
32713 return undefined;
32714 }
32715 if (!(0,_util_isFunction__WEBPACK_IMPORTED_MODULE_3__.isFunction)(removeHandler)) {
32716 return undefined;
32717 }
32718 return function () { return removeHandler(handler, retValue); };
32719 });
32720}
32721//# sourceMappingURL=fromEventPattern.js.map
32722
32723
32724/***/ }),
32725/* 272 */
32726/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32727
32728"use strict";
32729__webpack_require__.r(__webpack_exports__);
32730/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32731/* harmony export */ "generate": () => (/* binding */ generate)
32732/* harmony export */ });
32733/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
32734/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
32735/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(214);
32736/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
32737
32738
32739
32740function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
32741 var resultSelector;
32742 var initialState;
32743 if (arguments.length == 1) {
32744 var options = initialStateOrOptions;
32745 initialState = options.initialState;
32746 condition = options.condition;
32747 iterate = options.iterate;
32748 resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity;
32749 scheduler = options.scheduler;
32750 }
32751 else if (resultSelectorOrObservable === undefined || (0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(resultSelectorOrObservable)) {
32752 initialState = initialStateOrOptions;
32753 resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_0__.identity;
32754 scheduler = resultSelectorOrObservable;
32755 }
32756 else {
32757 initialState = initialStateOrOptions;
32758 resultSelector = resultSelectorOrObservable;
32759 }
32760 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
32761 var state = initialState;
32762 if (scheduler) {
32763 return scheduler.schedule(dispatch, 0, {
32764 subscriber: subscriber,
32765 iterate: iterate,
32766 condition: condition,
32767 resultSelector: resultSelector,
32768 state: state
32769 });
32770 }
32771 do {
32772 if (condition) {
32773 var conditionResult = void 0;
32774 try {
32775 conditionResult = condition(state);
32776 }
32777 catch (err) {
32778 subscriber.error(err);
32779 return undefined;
32780 }
32781 if (!conditionResult) {
32782 subscriber.complete();
32783 break;
32784 }
32785 }
32786 var value = void 0;
32787 try {
32788 value = resultSelector(state);
32789 }
32790 catch (err) {
32791 subscriber.error(err);
32792 return undefined;
32793 }
32794 subscriber.next(value);
32795 if (subscriber.closed) {
32796 break;
32797 }
32798 try {
32799 state = iterate(state);
32800 }
32801 catch (err) {
32802 subscriber.error(err);
32803 return undefined;
32804 }
32805 } while (true);
32806 return undefined;
32807 });
32808}
32809function dispatch(state) {
32810 var subscriber = state.subscriber, condition = state.condition;
32811 if (subscriber.closed) {
32812 return undefined;
32813 }
32814 if (state.needIterate) {
32815 try {
32816 state.state = state.iterate(state.state);
32817 }
32818 catch (err) {
32819 subscriber.error(err);
32820 return undefined;
32821 }
32822 }
32823 else {
32824 state.needIterate = true;
32825 }
32826 if (condition) {
32827 var conditionResult = void 0;
32828 try {
32829 conditionResult = condition(state.state);
32830 }
32831 catch (err) {
32832 subscriber.error(err);
32833 return undefined;
32834 }
32835 if (!conditionResult) {
32836 subscriber.complete();
32837 return undefined;
32838 }
32839 if (subscriber.closed) {
32840 return undefined;
32841 }
32842 }
32843 var value;
32844 try {
32845 value = state.resultSelector(state.state);
32846 }
32847 catch (err) {
32848 subscriber.error(err);
32849 return undefined;
32850 }
32851 if (subscriber.closed) {
32852 return undefined;
32853 }
32854 subscriber.next(value);
32855 if (subscriber.closed) {
32856 return undefined;
32857 }
32858 return this.schedule(state);
32859}
32860//# sourceMappingURL=generate.js.map
32861
32862
32863/***/ }),
32864/* 273 */
32865/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32866
32867"use strict";
32868__webpack_require__.r(__webpack_exports__);
32869/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32870/* harmony export */ "iif": () => (/* binding */ iif)
32871/* harmony export */ });
32872/* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(268);
32873/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
32874/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */
32875
32876
32877function iif(condition, trueResult, falseResult) {
32878 if (trueResult === void 0) {
32879 trueResult = _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
32880 }
32881 if (falseResult === void 0) {
32882 falseResult = _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
32883 }
32884 return (0,_defer__WEBPACK_IMPORTED_MODULE_1__.defer)(function () { return condition() ? trueResult : falseResult; });
32885}
32886//# sourceMappingURL=iif.js.map
32887
32888
32889/***/ }),
32890/* 274 */
32891/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32892
32893"use strict";
32894__webpack_require__.r(__webpack_exports__);
32895/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32896/* harmony export */ "interval": () => (/* binding */ interval)
32897/* harmony export */ });
32898/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
32899/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(232);
32900/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(275);
32901/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */
32902
32903
32904
32905function interval(period, scheduler) {
32906 if (period === void 0) {
32907 period = 0;
32908 }
32909 if (scheduler === void 0) {
32910 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
32911 }
32912 if (!(0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_1__.isNumeric)(period) || period < 0) {
32913 period = 0;
32914 }
32915 if (!scheduler || typeof scheduler.schedule !== 'function') {
32916 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
32917 }
32918 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
32919 subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));
32920 return subscriber;
32921 });
32922}
32923function dispatch(state) {
32924 var subscriber = state.subscriber, counter = state.counter, period = state.period;
32925 subscriber.next(counter);
32926 this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
32927}
32928//# sourceMappingURL=interval.js.map
32929
32930
32931/***/ }),
32932/* 275 */
32933/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32934
32935"use strict";
32936__webpack_require__.r(__webpack_exports__);
32937/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32938/* harmony export */ "isNumeric": () => (/* binding */ isNumeric)
32939/* harmony export */ });
32940/* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(197);
32941/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */
32942
32943function isNumeric(val) {
32944 return !(0,_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(val) && (val - parseFloat(val) + 1) >= 0;
32945}
32946//# sourceMappingURL=isNumeric.js.map
32947
32948
32949/***/ }),
32950/* 276 */
32951/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32952
32953"use strict";
32954__webpack_require__.r(__webpack_exports__);
32955/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32956/* harmony export */ "merge": () => (/* binding */ merge)
32957/* harmony export */ });
32958/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
32959/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
32960/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(258);
32961/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(216);
32962/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */
32963
32964
32965
32966
32967function merge() {
32968 var observables = [];
32969 for (var _i = 0; _i < arguments.length; _i++) {
32970 observables[_i] = arguments[_i];
32971 }
32972 var concurrent = Number.POSITIVE_INFINITY;
32973 var scheduler = null;
32974 var last = observables[observables.length - 1];
32975 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(last)) {
32976 scheduler = observables.pop();
32977 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
32978 concurrent = observables.pop();
32979 }
32980 }
32981 else if (typeof last === 'number') {
32982 concurrent = observables.pop();
32983 }
32984 if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable) {
32985 return observables[0];
32986 }
32987 return (0,_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__.mergeAll)(concurrent)((0,_fromArray__WEBPACK_IMPORTED_MODULE_3__.fromArray)(observables, scheduler));
32988}
32989//# sourceMappingURL=merge.js.map
32990
32991
32992/***/ }),
32993/* 277 */
32994/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
32995
32996"use strict";
32997__webpack_require__.r(__webpack_exports__);
32998/* harmony export */ __webpack_require__.d(__webpack_exports__, {
32999/* harmony export */ "NEVER": () => (/* binding */ NEVER),
33000/* harmony export */ "never": () => (/* binding */ never)
33001/* harmony export */ });
33002/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
33003/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(237);
33004/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */
33005
33006
33007var NEVER = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(_util_noop__WEBPACK_IMPORTED_MODULE_1__.noop);
33008function never() {
33009 return NEVER;
33010}
33011//# sourceMappingURL=never.js.map
33012
33013
33014/***/ }),
33015/* 278 */
33016/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33017
33018"use strict";
33019__webpack_require__.r(__webpack_exports__);
33020/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33021/* harmony export */ "onErrorResumeNext": () => (/* binding */ onErrorResumeNext)
33022/* harmony export */ });
33023/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
33024/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(260);
33025/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
33026/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
33027/** PURE_IMPORTS_START _Observable,_from,_util_isArray,_empty PURE_IMPORTS_END */
33028
33029
33030
33031
33032function onErrorResumeNext() {
33033 var sources = [];
33034 for (var _i = 0; _i < arguments.length; _i++) {
33035 sources[_i] = arguments[_i];
33036 }
33037 if (sources.length === 0) {
33038 return _empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY;
33039 }
33040 var first = sources[0], remainder = sources.slice(1);
33041 if (sources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(first)) {
33042 return onErrorResumeNext.apply(void 0, first);
33043 }
33044 return new _Observable__WEBPACK_IMPORTED_MODULE_2__.Observable(function (subscriber) {
33045 var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
33046 return (0,_from__WEBPACK_IMPORTED_MODULE_3__.from)(first).subscribe({
33047 next: function (value) { subscriber.next(value); },
33048 error: subNext,
33049 complete: subNext,
33050 });
33051 });
33052}
33053//# sourceMappingURL=onErrorResumeNext.js.map
33054
33055
33056/***/ }),
33057/* 279 */
33058/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33059
33060"use strict";
33061__webpack_require__.r(__webpack_exports__);
33062/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33063/* harmony export */ "pairs": () => (/* binding */ pairs),
33064/* harmony export */ "dispatch": () => (/* binding */ dispatch)
33065/* harmony export */ });
33066/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
33067/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
33068/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
33069
33070
33071function pairs(obj, scheduler) {
33072 if (!scheduler) {
33073 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
33074 var keys = Object.keys(obj);
33075 for (var i = 0; i < keys.length && !subscriber.closed; i++) {
33076 var key = keys[i];
33077 if (obj.hasOwnProperty(key)) {
33078 subscriber.next([key, obj[key]]);
33079 }
33080 }
33081 subscriber.complete();
33082 });
33083 }
33084 else {
33085 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
33086 var keys = Object.keys(obj);
33087 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
33088 subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
33089 return subscription;
33090 });
33091 }
33092}
33093function dispatch(state) {
33094 var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
33095 if (!subscriber.closed) {
33096 if (index < keys.length) {
33097 var key = keys[index];
33098 subscriber.next([key, obj[key]]);
33099 subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
33100 }
33101 else {
33102 subscriber.complete();
33103 }
33104 }
33105}
33106//# sourceMappingURL=pairs.js.map
33107
33108
33109/***/ }),
33110/* 280 */
33111/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33112
33113"use strict";
33114__webpack_require__.r(__webpack_exports__);
33115/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33116/* harmony export */ "partition": () => (/* binding */ partition)
33117/* harmony export */ });
33118/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(282);
33119/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248);
33120/* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
33121/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
33122/** PURE_IMPORTS_START _util_not,_util_subscribeTo,_operators_filter,_Observable PURE_IMPORTS_END */
33123
33124
33125
33126
33127function partition(source, predicate, thisArg) {
33128 return [
33129 (0,_operators_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(predicate, thisArg)(new _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(source))),
33130 (0,_operators_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((0,_util_not__WEBPACK_IMPORTED_MODULE_3__.not)(predicate, thisArg))(new _Observable__WEBPACK_IMPORTED_MODULE_1__.Observable((0,_util_subscribeTo__WEBPACK_IMPORTED_MODULE_2__.subscribeTo)(source)))
33131 ];
33132}
33133//# sourceMappingURL=partition.js.map
33134
33135
33136/***/ }),
33137/* 281 */
33138/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33139
33140"use strict";
33141__webpack_require__.r(__webpack_exports__);
33142/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33143/* harmony export */ "filter": () => (/* binding */ filter)
33144/* harmony export */ });
33145/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
33146/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
33147/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33148
33149
33150function filter(predicate, thisArg) {
33151 return function filterOperatorFunction(source) {
33152 return source.lift(new FilterOperator(predicate, thisArg));
33153 };
33154}
33155var FilterOperator = /*@__PURE__*/ (function () {
33156 function FilterOperator(predicate, thisArg) {
33157 this.predicate = predicate;
33158 this.thisArg = thisArg;
33159 }
33160 FilterOperator.prototype.call = function (subscriber, source) {
33161 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
33162 };
33163 return FilterOperator;
33164}());
33165var FilterSubscriber = /*@__PURE__*/ (function (_super) {
33166 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FilterSubscriber, _super);
33167 function FilterSubscriber(destination, predicate, thisArg) {
33168 var _this = _super.call(this, destination) || this;
33169 _this.predicate = predicate;
33170 _this.thisArg = thisArg;
33171 _this.count = 0;
33172 return _this;
33173 }
33174 FilterSubscriber.prototype._next = function (value) {
33175 var result;
33176 try {
33177 result = this.predicate.call(this.thisArg, value, this.count++);
33178 }
33179 catch (err) {
33180 this.destination.error(err);
33181 return;
33182 }
33183 if (result) {
33184 this.destination.next(value);
33185 }
33186 };
33187 return FilterSubscriber;
33188}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
33189//# sourceMappingURL=filter.js.map
33190
33191
33192/***/ }),
33193/* 282 */
33194/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33195
33196"use strict";
33197__webpack_require__.r(__webpack_exports__);
33198/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33199/* harmony export */ "not": () => (/* binding */ not)
33200/* harmony export */ });
33201/** PURE_IMPORTS_START PURE_IMPORTS_END */
33202function not(pred, thisArg) {
33203 function notPred() {
33204 return !(notPred.pred.apply(notPred.thisArg, arguments));
33205 }
33206 notPred.pred = pred;
33207 notPred.thisArg = thisArg;
33208 return notPred;
33209}
33210//# sourceMappingURL=not.js.map
33211
33212
33213/***/ }),
33214/* 283 */
33215/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33216
33217"use strict";
33218__webpack_require__.r(__webpack_exports__);
33219/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33220/* harmony export */ "race": () => (/* binding */ race),
33221/* harmony export */ "RaceOperator": () => (/* binding */ RaceOperator),
33222/* harmony export */ "RaceSubscriber": () => (/* binding */ RaceSubscriber)
33223/* harmony export */ });
33224/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
33225/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
33226/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(216);
33227/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(255);
33228/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(246);
33229/** PURE_IMPORTS_START tslib,_util_isArray,_fromArray,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33230
33231
33232
33233
33234
33235function race() {
33236 var observables = [];
33237 for (var _i = 0; _i < arguments.length; _i++) {
33238 observables[_i] = arguments[_i];
33239 }
33240 if (observables.length === 1) {
33241 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(observables[0])) {
33242 observables = observables[0];
33243 }
33244 else {
33245 return observables[0];
33246 }
33247 }
33248 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_2__.fromArray)(observables, undefined).lift(new RaceOperator());
33249}
33250var RaceOperator = /*@__PURE__*/ (function () {
33251 function RaceOperator() {
33252 }
33253 RaceOperator.prototype.call = function (subscriber, source) {
33254 return source.subscribe(new RaceSubscriber(subscriber));
33255 };
33256 return RaceOperator;
33257}());
33258
33259var RaceSubscriber = /*@__PURE__*/ (function (_super) {
33260 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RaceSubscriber, _super);
33261 function RaceSubscriber(destination) {
33262 var _this = _super.call(this, destination) || this;
33263 _this.hasFirst = false;
33264 _this.observables = [];
33265 _this.subscriptions = [];
33266 return _this;
33267 }
33268 RaceSubscriber.prototype._next = function (observable) {
33269 this.observables.push(observable);
33270 };
33271 RaceSubscriber.prototype._complete = function () {
33272 var observables = this.observables;
33273 var len = observables.length;
33274 if (len === 0) {
33275 this.destination.complete();
33276 }
33277 else {
33278 for (var i = 0; i < len && !this.hasFirst; i++) {
33279 var observable = observables[i];
33280 var subscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__.subscribeToResult)(this, observable, undefined, i);
33281 if (this.subscriptions) {
33282 this.subscriptions.push(subscription);
33283 }
33284 this.add(subscription);
33285 }
33286 this.observables = null;
33287 }
33288 };
33289 RaceSubscriber.prototype.notifyNext = function (_outerValue, innerValue, outerIndex) {
33290 if (!this.hasFirst) {
33291 this.hasFirst = true;
33292 for (var i = 0; i < this.subscriptions.length; i++) {
33293 if (i !== outerIndex) {
33294 var subscription = this.subscriptions[i];
33295 subscription.unsubscribe();
33296 this.remove(subscription);
33297 }
33298 }
33299 this.subscriptions = null;
33300 }
33301 this.destination.next(innerValue);
33302 };
33303 return RaceSubscriber;
33304}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__.OuterSubscriber));
33305
33306//# sourceMappingURL=race.js.map
33307
33308
33309/***/ }),
33310/* 284 */
33311/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33312
33313"use strict";
33314__webpack_require__.r(__webpack_exports__);
33315/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33316/* harmony export */ "range": () => (/* binding */ range),
33317/* harmony export */ "dispatch": () => (/* binding */ dispatch)
33318/* harmony export */ });
33319/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
33320/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
33321
33322function range(start, count, scheduler) {
33323 if (start === void 0) {
33324 start = 0;
33325 }
33326 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
33327 if (count === undefined) {
33328 count = start;
33329 start = 0;
33330 }
33331 var index = 0;
33332 var current = start;
33333 if (scheduler) {
33334 return scheduler.schedule(dispatch, 0, {
33335 index: index, count: count, start: start, subscriber: subscriber
33336 });
33337 }
33338 else {
33339 do {
33340 if (index++ >= count) {
33341 subscriber.complete();
33342 break;
33343 }
33344 subscriber.next(current++);
33345 if (subscriber.closed) {
33346 break;
33347 }
33348 } while (true);
33349 }
33350 return undefined;
33351 });
33352}
33353function dispatch(state) {
33354 var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
33355 if (index >= count) {
33356 subscriber.complete();
33357 return;
33358 }
33359 subscriber.next(start);
33360 if (subscriber.closed) {
33361 return;
33362 }
33363 state.index = index + 1;
33364 state.start = start + 1;
33365 this.schedule(state);
33366}
33367//# sourceMappingURL=range.js.map
33368
33369
33370/***/ }),
33371/* 285 */
33372/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33373
33374"use strict";
33375__webpack_require__.r(__webpack_exports__);
33376/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33377/* harmony export */ "timer": () => (/* binding */ timer)
33378/* harmony export */ });
33379/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
33380/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(232);
33381/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(275);
33382/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(214);
33383/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
33384
33385
33386
33387
33388function timer(dueTime, periodOrScheduler, scheduler) {
33389 if (dueTime === void 0) {
33390 dueTime = 0;
33391 }
33392 var period = -1;
33393 if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(periodOrScheduler)) {
33394 period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
33395 }
33396 else if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(periodOrScheduler)) {
33397 scheduler = periodOrScheduler;
33398 }
33399 if (!(0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__.isScheduler)(scheduler)) {
33400 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__.async;
33401 }
33402 return new _Observable__WEBPACK_IMPORTED_MODULE_3__.Observable(function (subscriber) {
33403 var due = (0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_0__.isNumeric)(dueTime)
33404 ? dueTime
33405 : (+dueTime - scheduler.now());
33406 return scheduler.schedule(dispatch, due, {
33407 index: 0, period: period, subscriber: subscriber
33408 });
33409 });
33410}
33411function dispatch(state) {
33412 var index = state.index, period = state.period, subscriber = state.subscriber;
33413 subscriber.next(index);
33414 if (subscriber.closed) {
33415 return;
33416 }
33417 else if (period === -1) {
33418 return subscriber.complete();
33419 }
33420 state.index = index + 1;
33421 this.schedule(state, period);
33422}
33423//# sourceMappingURL=timer.js.map
33424
33425
33426/***/ }),
33427/* 286 */
33428/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33429
33430"use strict";
33431__webpack_require__.r(__webpack_exports__);
33432/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33433/* harmony export */ "using": () => (/* binding */ using)
33434/* harmony export */ });
33435/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(186);
33436/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
33437/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(219);
33438/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
33439
33440
33441
33442function using(resourceFactory, observableFactory) {
33443 return new _Observable__WEBPACK_IMPORTED_MODULE_0__.Observable(function (subscriber) {
33444 var resource;
33445 try {
33446 resource = resourceFactory();
33447 }
33448 catch (err) {
33449 subscriber.error(err);
33450 return undefined;
33451 }
33452 var result;
33453 try {
33454 result = observableFactory(resource);
33455 }
33456 catch (err) {
33457 subscriber.error(err);
33458 return undefined;
33459 }
33460 var source = result ? (0,_from__WEBPACK_IMPORTED_MODULE_1__.from)(result) : _empty__WEBPACK_IMPORTED_MODULE_2__.EMPTY;
33461 var subscription = source.subscribe(subscriber);
33462 return function () {
33463 subscription.unsubscribe();
33464 if (resource) {
33465 resource.unsubscribe();
33466 }
33467 };
33468 });
33469}
33470//# sourceMappingURL=using.js.map
33471
33472
33473/***/ }),
33474/* 287 */
33475/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33476
33477"use strict";
33478__webpack_require__.r(__webpack_exports__);
33479/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33480/* harmony export */ "zip": () => (/* binding */ zip),
33481/* harmony export */ "ZipOperator": () => (/* binding */ ZipOperator),
33482/* harmony export */ "ZipSubscriber": () => (/* binding */ ZipSubscriber)
33483/* harmony export */ });
33484/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
33485/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(216);
33486/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
33487/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(188);
33488/* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(253);
33489/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(267);
33490/** PURE_IMPORTS_START tslib,_fromArray,_util_isArray,_Subscriber,_.._internal_symbol_iterator,_innerSubscribe PURE_IMPORTS_END */
33491
33492
33493
33494
33495
33496
33497function zip() {
33498 var observables = [];
33499 for (var _i = 0; _i < arguments.length; _i++) {
33500 observables[_i] = arguments[_i];
33501 }
33502 var resultSelector = observables[observables.length - 1];
33503 if (typeof resultSelector === 'function') {
33504 observables.pop();
33505 }
33506 return (0,_fromArray__WEBPACK_IMPORTED_MODULE_1__.fromArray)(observables, undefined).lift(new ZipOperator(resultSelector));
33507}
33508var ZipOperator = /*@__PURE__*/ (function () {
33509 function ZipOperator(resultSelector) {
33510 this.resultSelector = resultSelector;
33511 }
33512 ZipOperator.prototype.call = function (subscriber, source) {
33513 return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
33514 };
33515 return ZipOperator;
33516}());
33517
33518var ZipSubscriber = /*@__PURE__*/ (function (_super) {
33519 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ZipSubscriber, _super);
33520 function ZipSubscriber(destination, resultSelector, values) {
33521 if (values === void 0) {
33522 values = Object.create(null);
33523 }
33524 var _this = _super.call(this, destination) || this;
33525 _this.resultSelector = resultSelector;
33526 _this.iterators = [];
33527 _this.active = 0;
33528 _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : undefined;
33529 return _this;
33530 }
33531 ZipSubscriber.prototype._next = function (value) {
33532 var iterators = this.iterators;
33533 if ((0,_util_isArray__WEBPACK_IMPORTED_MODULE_2__.isArray)(value)) {
33534 iterators.push(new StaticArrayIterator(value));
33535 }
33536 else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] === 'function') {
33537 iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator]()));
33538 }
33539 else {
33540 iterators.push(new ZipBufferIterator(this.destination, this, value));
33541 }
33542 };
33543 ZipSubscriber.prototype._complete = function () {
33544 var iterators = this.iterators;
33545 var len = iterators.length;
33546 this.unsubscribe();
33547 if (len === 0) {
33548 this.destination.complete();
33549 return;
33550 }
33551 this.active = len;
33552 for (var i = 0; i < len; i++) {
33553 var iterator = iterators[i];
33554 if (iterator.stillUnsubscribed) {
33555 var destination = this.destination;
33556 destination.add(iterator.subscribe());
33557 }
33558 else {
33559 this.active--;
33560 }
33561 }
33562 };
33563 ZipSubscriber.prototype.notifyInactive = function () {
33564 this.active--;
33565 if (this.active === 0) {
33566 this.destination.complete();
33567 }
33568 };
33569 ZipSubscriber.prototype.checkIterators = function () {
33570 var iterators = this.iterators;
33571 var len = iterators.length;
33572 var destination = this.destination;
33573 for (var i = 0; i < len; i++) {
33574 var iterator = iterators[i];
33575 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
33576 return;
33577 }
33578 }
33579 var shouldComplete = false;
33580 var args = [];
33581 for (var i = 0; i < len; i++) {
33582 var iterator = iterators[i];
33583 var result = iterator.next();
33584 if (iterator.hasCompleted()) {
33585 shouldComplete = true;
33586 }
33587 if (result.done) {
33588 destination.complete();
33589 return;
33590 }
33591 args.push(result.value);
33592 }
33593 if (this.resultSelector) {
33594 this._tryresultSelector(args);
33595 }
33596 else {
33597 destination.next(args);
33598 }
33599 if (shouldComplete) {
33600 destination.complete();
33601 }
33602 };
33603 ZipSubscriber.prototype._tryresultSelector = function (args) {
33604 var result;
33605 try {
33606 result = this.resultSelector.apply(this, args);
33607 }
33608 catch (err) {
33609 this.destination.error(err);
33610 return;
33611 }
33612 this.destination.next(result);
33613 };
33614 return ZipSubscriber;
33615}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
33616
33617var StaticIterator = /*@__PURE__*/ (function () {
33618 function StaticIterator(iterator) {
33619 this.iterator = iterator;
33620 this.nextResult = iterator.next();
33621 }
33622 StaticIterator.prototype.hasValue = function () {
33623 return true;
33624 };
33625 StaticIterator.prototype.next = function () {
33626 var result = this.nextResult;
33627 this.nextResult = this.iterator.next();
33628 return result;
33629 };
33630 StaticIterator.prototype.hasCompleted = function () {
33631 var nextResult = this.nextResult;
33632 return Boolean(nextResult && nextResult.done);
33633 };
33634 return StaticIterator;
33635}());
33636var StaticArrayIterator = /*@__PURE__*/ (function () {
33637 function StaticArrayIterator(array) {
33638 this.array = array;
33639 this.index = 0;
33640 this.length = 0;
33641 this.length = array.length;
33642 }
33643 StaticArrayIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] = function () {
33644 return this;
33645 };
33646 StaticArrayIterator.prototype.next = function (value) {
33647 var i = this.index++;
33648 var array = this.array;
33649 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
33650 };
33651 StaticArrayIterator.prototype.hasValue = function () {
33652 return this.array.length > this.index;
33653 };
33654 StaticArrayIterator.prototype.hasCompleted = function () {
33655 return this.array.length === this.index;
33656 };
33657 return StaticArrayIterator;
33658}());
33659var ZipBufferIterator = /*@__PURE__*/ (function (_super) {
33660 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ZipBufferIterator, _super);
33661 function ZipBufferIterator(destination, parent, observable) {
33662 var _this = _super.call(this, destination) || this;
33663 _this.parent = parent;
33664 _this.observable = observable;
33665 _this.stillUnsubscribed = true;
33666 _this.buffer = [];
33667 _this.isComplete = false;
33668 return _this;
33669 }
33670 ZipBufferIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_3__.iterator] = function () {
33671 return this;
33672 };
33673 ZipBufferIterator.prototype.next = function () {
33674 var buffer = this.buffer;
33675 if (buffer.length === 0 && this.isComplete) {
33676 return { value: null, done: true };
33677 }
33678 else {
33679 return { value: buffer.shift(), done: false };
33680 }
33681 };
33682 ZipBufferIterator.prototype.hasValue = function () {
33683 return this.buffer.length > 0;
33684 };
33685 ZipBufferIterator.prototype.hasCompleted = function () {
33686 return this.buffer.length === 0 && this.isComplete;
33687 };
33688 ZipBufferIterator.prototype.notifyComplete = function () {
33689 if (this.buffer.length > 0) {
33690 this.isComplete = true;
33691 this.parent.notifyInactive();
33692 }
33693 else {
33694 this.destination.complete();
33695 }
33696 };
33697 ZipBufferIterator.prototype.notifyNext = function (innerValue) {
33698 this.buffer.push(innerValue);
33699 this.parent.checkIterators();
33700 };
33701 ZipBufferIterator.prototype.subscribe = function () {
33702 return (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_5__.innerSubscribe)(this.observable, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_5__.SimpleInnerSubscriber(this));
33703 };
33704 return ZipBufferIterator;
33705}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_5__.SimpleOuterSubscriber));
33706//# sourceMappingURL=zip.js.map
33707
33708
33709/***/ }),
33710/* 288 */
33711/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
33712
33713"use strict";
33714
33715Object.defineProperty(exports, "__esModule", ({ value: true }));
33716var rxjs_1 = __webpack_require__(185);
33717/**
33718 *
33719 * only keep the lastest source observable value until the inner observable complete,
33720 * then trigger the lastest source observable value
33721 *
33722 * @param isAbandon - is abandon inner observable value when there is newer source observable value
33723 *
33724 */
33725function waitMap(fn, isAbandon) {
33726 if (isAbandon === void 0) { isAbandon = true; }
33727 return function (preObs) {
33728 return rxjs_1.Observable.create(function (observer) {
33729 var closed = false;
33730 var latestRes;
33731 var resultSubp;
33732 var subp;
33733 var run = function (res) {
33734 var obs = fn(res);
33735 return obs.subscribe({
33736 next: function (res) {
33737 if (latestRes !== undefined && isAbandon) {
33738 return;
33739 }
33740 observer.next(res);
33741 },
33742 error: function (err) {
33743 closed = true;
33744 observer.error(err);
33745 resultSubp.unsubscribe();
33746 },
33747 complete: function () {
33748 if (latestRes && !closed) {
33749 var res_1 = latestRes;
33750 latestRes = undefined;
33751 run(res_1);
33752 }
33753 }
33754 });
33755 };
33756 resultSubp = preObs.subscribe({
33757 next: function (res) {
33758 latestRes = res;
33759 if (!subp || subp.closed) {
33760 latestRes = undefined;
33761 subp = run(res);
33762 }
33763 },
33764 error: function (err) {
33765 closed = true;
33766 observer.error(err);
33767 },
33768 complete: function () {
33769 closed = true;
33770 observer.complete();
33771 }
33772 });
33773 return resultSubp;
33774 });
33775 };
33776}
33777exports.waitMap = waitMap;
33778
33779
33780/***/ }),
33781/* 289 */
33782/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
33783
33784"use strict";
33785__webpack_require__.r(__webpack_exports__);
33786/* harmony export */ __webpack_require__.d(__webpack_exports__, {
33787/* harmony export */ "audit": () => (/* reexport safe */ _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__.audit),
33788/* harmony export */ "auditTime": () => (/* reexport safe */ _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__.auditTime),
33789/* harmony export */ "buffer": () => (/* reexport safe */ _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__.buffer),
33790/* harmony export */ "bufferCount": () => (/* reexport safe */ _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__.bufferCount),
33791/* harmony export */ "bufferTime": () => (/* reexport safe */ _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__.bufferTime),
33792/* harmony export */ "bufferToggle": () => (/* reexport safe */ _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__.bufferToggle),
33793/* harmony export */ "bufferWhen": () => (/* reexport safe */ _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__.bufferWhen),
33794/* harmony export */ "catchError": () => (/* reexport safe */ _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__.catchError),
33795/* harmony export */ "combineAll": () => (/* reexport safe */ _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__.combineAll),
33796/* harmony export */ "combineLatest": () => (/* reexport safe */ _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__.combineLatest),
33797/* harmony export */ "concat": () => (/* reexport safe */ _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__.concat),
33798/* harmony export */ "concatAll": () => (/* reexport safe */ _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__.concatAll),
33799/* harmony export */ "concatMap": () => (/* reexport safe */ _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__.concatMap),
33800/* harmony export */ "concatMapTo": () => (/* reexport safe */ _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__.concatMapTo),
33801/* harmony export */ "count": () => (/* reexport safe */ _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__.count),
33802/* harmony export */ "debounce": () => (/* reexport safe */ _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__.debounce),
33803/* harmony export */ "debounceTime": () => (/* reexport safe */ _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__.debounceTime),
33804/* harmony export */ "defaultIfEmpty": () => (/* reexport safe */ _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__.defaultIfEmpty),
33805/* harmony export */ "delay": () => (/* reexport safe */ _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__.delay),
33806/* harmony export */ "delayWhen": () => (/* reexport safe */ _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__.delayWhen),
33807/* harmony export */ "dematerialize": () => (/* reexport safe */ _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__.dematerialize),
33808/* harmony export */ "distinct": () => (/* reexport safe */ _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__.distinct),
33809/* harmony export */ "distinctUntilChanged": () => (/* reexport safe */ _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__.distinctUntilChanged),
33810/* harmony export */ "distinctUntilKeyChanged": () => (/* reexport safe */ _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__.distinctUntilKeyChanged),
33811/* harmony export */ "elementAt": () => (/* reexport safe */ _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__.elementAt),
33812/* harmony export */ "endWith": () => (/* reexport safe */ _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__.endWith),
33813/* harmony export */ "every": () => (/* reexport safe */ _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__.every),
33814/* harmony export */ "exhaust": () => (/* reexport safe */ _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__.exhaust),
33815/* harmony export */ "exhaustMap": () => (/* reexport safe */ _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__.exhaustMap),
33816/* harmony export */ "expand": () => (/* reexport safe */ _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__.expand),
33817/* harmony export */ "filter": () => (/* reexport safe */ _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__.filter),
33818/* harmony export */ "finalize": () => (/* reexport safe */ _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__.finalize),
33819/* harmony export */ "find": () => (/* reexport safe */ _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__.find),
33820/* harmony export */ "findIndex": () => (/* reexport safe */ _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__.findIndex),
33821/* harmony export */ "first": () => (/* reexport safe */ _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__.first),
33822/* harmony export */ "groupBy": () => (/* reexport safe */ _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__.groupBy),
33823/* harmony export */ "ignoreElements": () => (/* reexport safe */ _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__.ignoreElements),
33824/* harmony export */ "isEmpty": () => (/* reexport safe */ _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__.isEmpty),
33825/* harmony export */ "last": () => (/* reexport safe */ _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__.last),
33826/* harmony export */ "map": () => (/* reexport safe */ _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__.map),
33827/* harmony export */ "mapTo": () => (/* reexport safe */ _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__.mapTo),
33828/* harmony export */ "materialize": () => (/* reexport safe */ _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__.materialize),
33829/* harmony export */ "max": () => (/* reexport safe */ _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__.max),
33830/* harmony export */ "merge": () => (/* reexport safe */ _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__.merge),
33831/* harmony export */ "mergeAll": () => (/* reexport safe */ _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__.mergeAll),
33832/* harmony export */ "mergeMap": () => (/* reexport safe */ _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__.mergeMap),
33833/* harmony export */ "flatMap": () => (/* reexport safe */ _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__.flatMap),
33834/* harmony export */ "mergeMapTo": () => (/* reexport safe */ _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__.mergeMapTo),
33835/* harmony export */ "mergeScan": () => (/* reexport safe */ _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__.mergeScan),
33836/* harmony export */ "min": () => (/* reexport safe */ _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__.min),
33837/* harmony export */ "multicast": () => (/* reexport safe */ _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__.multicast),
33838/* harmony export */ "observeOn": () => (/* reexport safe */ _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__.observeOn),
33839/* harmony export */ "onErrorResumeNext": () => (/* reexport safe */ _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__.onErrorResumeNext),
33840/* harmony export */ "pairwise": () => (/* reexport safe */ _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__.pairwise),
33841/* harmony export */ "partition": () => (/* reexport safe */ _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__.partition),
33842/* harmony export */ "pluck": () => (/* reexport safe */ _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__.pluck),
33843/* harmony export */ "publish": () => (/* reexport safe */ _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__.publish),
33844/* harmony export */ "publishBehavior": () => (/* reexport safe */ _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__.publishBehavior),
33845/* harmony export */ "publishLast": () => (/* reexport safe */ _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__.publishLast),
33846/* harmony export */ "publishReplay": () => (/* reexport safe */ _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__.publishReplay),
33847/* harmony export */ "race": () => (/* reexport safe */ _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__.race),
33848/* harmony export */ "reduce": () => (/* reexport safe */ _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__.reduce),
33849/* harmony export */ "repeat": () => (/* reexport safe */ _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__.repeat),
33850/* harmony export */ "repeatWhen": () => (/* reexport safe */ _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__.repeatWhen),
33851/* harmony export */ "retry": () => (/* reexport safe */ _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__.retry),
33852/* harmony export */ "retryWhen": () => (/* reexport safe */ _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__.retryWhen),
33853/* harmony export */ "refCount": () => (/* reexport safe */ _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__.refCount),
33854/* harmony export */ "sample": () => (/* reexport safe */ _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__.sample),
33855/* harmony export */ "sampleTime": () => (/* reexport safe */ _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__.sampleTime),
33856/* harmony export */ "scan": () => (/* reexport safe */ _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__.scan),
33857/* harmony export */ "sequenceEqual": () => (/* reexport safe */ _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__.sequenceEqual),
33858/* harmony export */ "share": () => (/* reexport safe */ _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__.share),
33859/* harmony export */ "shareReplay": () => (/* reexport safe */ _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__.shareReplay),
33860/* harmony export */ "single": () => (/* reexport safe */ _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__.single),
33861/* harmony export */ "skip": () => (/* reexport safe */ _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__.skip),
33862/* harmony export */ "skipLast": () => (/* reexport safe */ _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__.skipLast),
33863/* harmony export */ "skipUntil": () => (/* reexport safe */ _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__.skipUntil),
33864/* harmony export */ "skipWhile": () => (/* reexport safe */ _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__.skipWhile),
33865/* harmony export */ "startWith": () => (/* reexport safe */ _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__.startWith),
33866/* harmony export */ "subscribeOn": () => (/* reexport safe */ _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__.subscribeOn),
33867/* harmony export */ "switchAll": () => (/* reexport safe */ _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__.switchAll),
33868/* harmony export */ "switchMap": () => (/* reexport safe */ _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__.switchMap),
33869/* harmony export */ "switchMapTo": () => (/* reexport safe */ _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__.switchMapTo),
33870/* harmony export */ "take": () => (/* reexport safe */ _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__.take),
33871/* harmony export */ "takeLast": () => (/* reexport safe */ _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__.takeLast),
33872/* harmony export */ "takeUntil": () => (/* reexport safe */ _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__.takeUntil),
33873/* harmony export */ "takeWhile": () => (/* reexport safe */ _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__.takeWhile),
33874/* harmony export */ "tap": () => (/* reexport safe */ _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__.tap),
33875/* harmony export */ "throttle": () => (/* reexport safe */ _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__.throttle),
33876/* harmony export */ "throttleTime": () => (/* reexport safe */ _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__.throttleTime),
33877/* harmony export */ "throwIfEmpty": () => (/* reexport safe */ _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__.throwIfEmpty),
33878/* harmony export */ "timeInterval": () => (/* reexport safe */ _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__.timeInterval),
33879/* harmony export */ "timeout": () => (/* reexport safe */ _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__.timeout),
33880/* harmony export */ "timeoutWith": () => (/* reexport safe */ _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__.timeoutWith),
33881/* harmony export */ "timestamp": () => (/* reexport safe */ _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__.timestamp),
33882/* harmony export */ "toArray": () => (/* reexport safe */ _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__.toArray),
33883/* harmony export */ "window": () => (/* reexport safe */ _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__.window),
33884/* harmony export */ "windowCount": () => (/* reexport safe */ _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__.windowCount),
33885/* harmony export */ "windowTime": () => (/* reexport safe */ _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__.windowTime),
33886/* harmony export */ "windowToggle": () => (/* reexport safe */ _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__.windowToggle),
33887/* harmony export */ "windowWhen": () => (/* reexport safe */ _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__.windowWhen),
33888/* harmony export */ "withLatestFrom": () => (/* reexport safe */ _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__.withLatestFrom),
33889/* harmony export */ "zip": () => (/* reexport safe */ _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__.zip),
33890/* harmony export */ "zipAll": () => (/* reexport safe */ _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__.zipAll)
33891/* harmony export */ });
33892/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(290);
33893/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(291);
33894/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(292);
33895/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(293);
33896/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(294);
33897/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(295);
33898/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(296);
33899/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(297);
33900/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(298);
33901/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(299);
33902/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(300);
33903/* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(257);
33904/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(301);
33905/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(302);
33906/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(303);
33907/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(304);
33908/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(305);
33909/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(306);
33910/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(307);
33911/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(309);
33912/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(310);
33913/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(311);
33914/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(312);
33915/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(313);
33916/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(314);
33917/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(317);
33918/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(318);
33919/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(319);
33920/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(320);
33921/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(321);
33922/* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(281);
33923/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(322);
33924/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(323);
33925/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(324);
33926/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(325);
33927/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(208);
33928/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(326);
33929/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(327);
33930/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(328);
33931/* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(243);
33932/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(330);
33933/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(331);
33934/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(332);
33935/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(335);
33936/* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(258);
33937/* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(259);
33938/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(336);
33939/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(337);
33940/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(338);
33941/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(339);
33942/* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(211);
33943/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(340);
33944/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(341);
33945/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(342);
33946/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(343);
33947/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(344);
33948/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(345);
33949/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(346);
33950/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(347);
33951/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(348);
33952/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(333);
33953/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(349);
33954/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(350);
33955/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(351);
33956/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(352);
33957/* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(204);
33958/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(353);
33959/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(354);
33960/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(334);
33961/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(355);
33962/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(356);
33963/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(357);
33964/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(358);
33965/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(359);
33966/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(360);
33967/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(361);
33968/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(362);
33969/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(363);
33970/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(364);
33971/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(366);
33972/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(367);
33973/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(368);
33974/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(315);
33975/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(329);
33976/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(369);
33977/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(370);
33978/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(371);
33979/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(372);
33980/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(373);
33981/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(316);
33982/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(374);
33983/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(375);
33984/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(376);
33985/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(377);
33986/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(378);
33987/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(379);
33988/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(380);
33989/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(381);
33990/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(382);
33991/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(383);
33992/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(384);
33993/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(385);
33994/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(386);
33995/** PURE_IMPORTS_START PURE_IMPORTS_END */
33996
33997
33998
33999
34000
34001
34002
34003
34004
34005
34006
34007
34008
34009
34010
34011
34012
34013
34014
34015
34016
34017
34018
34019
34020
34021
34022
34023
34024
34025
34026
34027
34028
34029
34030
34031
34032
34033
34034
34035
34036
34037
34038
34039
34040
34041
34042
34043
34044
34045
34046
34047
34048
34049
34050
34051
34052
34053
34054
34055
34056
34057
34058
34059
34060
34061
34062
34063
34064
34065
34066
34067
34068
34069
34070
34071
34072
34073
34074
34075
34076
34077
34078
34079
34080
34081
34082
34083
34084
34085
34086
34087
34088
34089
34090
34091
34092
34093
34094
34095
34096
34097
34098
34099//# sourceMappingURL=index.js.map
34100
34101
34102/***/ }),
34103/* 290 */
34104/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34105
34106"use strict";
34107__webpack_require__.r(__webpack_exports__);
34108/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34109/* harmony export */ "audit": () => (/* binding */ audit)
34110/* harmony export */ });
34111/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34112/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
34113/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
34114
34115
34116function audit(durationSelector) {
34117 return function auditOperatorFunction(source) {
34118 return source.lift(new AuditOperator(durationSelector));
34119 };
34120}
34121var AuditOperator = /*@__PURE__*/ (function () {
34122 function AuditOperator(durationSelector) {
34123 this.durationSelector = durationSelector;
34124 }
34125 AuditOperator.prototype.call = function (subscriber, source) {
34126 return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
34127 };
34128 return AuditOperator;
34129}());
34130var AuditSubscriber = /*@__PURE__*/ (function (_super) {
34131 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(AuditSubscriber, _super);
34132 function AuditSubscriber(destination, durationSelector) {
34133 var _this = _super.call(this, destination) || this;
34134 _this.durationSelector = durationSelector;
34135 _this.hasValue = false;
34136 return _this;
34137 }
34138 AuditSubscriber.prototype._next = function (value) {
34139 this.value = value;
34140 this.hasValue = true;
34141 if (!this.throttled) {
34142 var duration = void 0;
34143 try {
34144 var durationSelector = this.durationSelector;
34145 duration = durationSelector(value);
34146 }
34147 catch (err) {
34148 return this.destination.error(err);
34149 }
34150 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this));
34151 if (!innerSubscription || innerSubscription.closed) {
34152 this.clearThrottle();
34153 }
34154 else {
34155 this.add(this.throttled = innerSubscription);
34156 }
34157 }
34158 };
34159 AuditSubscriber.prototype.clearThrottle = function () {
34160 var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
34161 if (throttled) {
34162 this.remove(throttled);
34163 this.throttled = undefined;
34164 throttled.unsubscribe();
34165 }
34166 if (hasValue) {
34167 this.value = undefined;
34168 this.hasValue = false;
34169 this.destination.next(value);
34170 }
34171 };
34172 AuditSubscriber.prototype.notifyNext = function () {
34173 this.clearThrottle();
34174 };
34175 AuditSubscriber.prototype.notifyComplete = function () {
34176 this.clearThrottle();
34177 };
34178 return AuditSubscriber;
34179}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
34180//# sourceMappingURL=audit.js.map
34181
34182
34183/***/ }),
34184/* 291 */
34185/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34186
34187"use strict";
34188__webpack_require__.r(__webpack_exports__);
34189/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34190/* harmony export */ "auditTime": () => (/* binding */ auditTime)
34191/* harmony export */ });
34192/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(232);
34193/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(290);
34194/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(285);
34195/** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */
34196
34197
34198
34199function auditTime(duration, scheduler) {
34200 if (scheduler === void 0) {
34201 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
34202 }
34203 return (0,_audit__WEBPACK_IMPORTED_MODULE_1__.audit)(function () { return (0,_observable_timer__WEBPACK_IMPORTED_MODULE_2__.timer)(duration, scheduler); });
34204}
34205//# sourceMappingURL=auditTime.js.map
34206
34207
34208/***/ }),
34209/* 292 */
34210/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34211
34212"use strict";
34213__webpack_require__.r(__webpack_exports__);
34214/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34215/* harmony export */ "buffer": () => (/* binding */ buffer)
34216/* harmony export */ });
34217/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34218/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
34219/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
34220
34221
34222function buffer(closingNotifier) {
34223 return function bufferOperatorFunction(source) {
34224 return source.lift(new BufferOperator(closingNotifier));
34225 };
34226}
34227var BufferOperator = /*@__PURE__*/ (function () {
34228 function BufferOperator(closingNotifier) {
34229 this.closingNotifier = closingNotifier;
34230 }
34231 BufferOperator.prototype.call = function (subscriber, source) {
34232 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
34233 };
34234 return BufferOperator;
34235}());
34236var BufferSubscriber = /*@__PURE__*/ (function (_super) {
34237 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferSubscriber, _super);
34238 function BufferSubscriber(destination, closingNotifier) {
34239 var _this = _super.call(this, destination) || this;
34240 _this.buffer = [];
34241 _this.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(closingNotifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(_this)));
34242 return _this;
34243 }
34244 BufferSubscriber.prototype._next = function (value) {
34245 this.buffer.push(value);
34246 };
34247 BufferSubscriber.prototype.notifyNext = function () {
34248 var buffer = this.buffer;
34249 this.buffer = [];
34250 this.destination.next(buffer);
34251 };
34252 return BufferSubscriber;
34253}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
34254//# sourceMappingURL=buffer.js.map
34255
34256
34257/***/ }),
34258/* 293 */
34259/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34260
34261"use strict";
34262__webpack_require__.r(__webpack_exports__);
34263/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34264/* harmony export */ "bufferCount": () => (/* binding */ bufferCount)
34265/* harmony export */ });
34266/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34267/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
34268/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34269
34270
34271function bufferCount(bufferSize, startBufferEvery) {
34272 if (startBufferEvery === void 0) {
34273 startBufferEvery = null;
34274 }
34275 return function bufferCountOperatorFunction(source) {
34276 return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
34277 };
34278}
34279var BufferCountOperator = /*@__PURE__*/ (function () {
34280 function BufferCountOperator(bufferSize, startBufferEvery) {
34281 this.bufferSize = bufferSize;
34282 this.startBufferEvery = startBufferEvery;
34283 if (!startBufferEvery || bufferSize === startBufferEvery) {
34284 this.subscriberClass = BufferCountSubscriber;
34285 }
34286 else {
34287 this.subscriberClass = BufferSkipCountSubscriber;
34288 }
34289 }
34290 BufferCountOperator.prototype.call = function (subscriber, source) {
34291 return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
34292 };
34293 return BufferCountOperator;
34294}());
34295var BufferCountSubscriber = /*@__PURE__*/ (function (_super) {
34296 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferCountSubscriber, _super);
34297 function BufferCountSubscriber(destination, bufferSize) {
34298 var _this = _super.call(this, destination) || this;
34299 _this.bufferSize = bufferSize;
34300 _this.buffer = [];
34301 return _this;
34302 }
34303 BufferCountSubscriber.prototype._next = function (value) {
34304 var buffer = this.buffer;
34305 buffer.push(value);
34306 if (buffer.length == this.bufferSize) {
34307 this.destination.next(buffer);
34308 this.buffer = [];
34309 }
34310 };
34311 BufferCountSubscriber.prototype._complete = function () {
34312 var buffer = this.buffer;
34313 if (buffer.length > 0) {
34314 this.destination.next(buffer);
34315 }
34316 _super.prototype._complete.call(this);
34317 };
34318 return BufferCountSubscriber;
34319}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34320var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {
34321 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferSkipCountSubscriber, _super);
34322 function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
34323 var _this = _super.call(this, destination) || this;
34324 _this.bufferSize = bufferSize;
34325 _this.startBufferEvery = startBufferEvery;
34326 _this.buffers = [];
34327 _this.count = 0;
34328 return _this;
34329 }
34330 BufferSkipCountSubscriber.prototype._next = function (value) {
34331 var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
34332 this.count++;
34333 if (count % startBufferEvery === 0) {
34334 buffers.push([]);
34335 }
34336 for (var i = buffers.length; i--;) {
34337 var buffer = buffers[i];
34338 buffer.push(value);
34339 if (buffer.length === bufferSize) {
34340 buffers.splice(i, 1);
34341 this.destination.next(buffer);
34342 }
34343 }
34344 };
34345 BufferSkipCountSubscriber.prototype._complete = function () {
34346 var _a = this, buffers = _a.buffers, destination = _a.destination;
34347 while (buffers.length > 0) {
34348 var buffer = buffers.shift();
34349 if (buffer.length > 0) {
34350 destination.next(buffer);
34351 }
34352 }
34353 _super.prototype._complete.call(this);
34354 };
34355 return BufferSkipCountSubscriber;
34356}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34357//# sourceMappingURL=bufferCount.js.map
34358
34359
34360/***/ }),
34361/* 294 */
34362/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34363
34364"use strict";
34365__webpack_require__.r(__webpack_exports__);
34366/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34367/* harmony export */ "bufferTime": () => (/* binding */ bufferTime)
34368/* harmony export */ });
34369/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34370/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
34371/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(188);
34372/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(214);
34373/** PURE_IMPORTS_START tslib,_scheduler_async,_Subscriber,_util_isScheduler PURE_IMPORTS_END */
34374
34375
34376
34377
34378function bufferTime(bufferTimeSpan) {
34379 var length = arguments.length;
34380 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
34381 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[arguments.length - 1])) {
34382 scheduler = arguments[arguments.length - 1];
34383 length--;
34384 }
34385 var bufferCreationInterval = null;
34386 if (length >= 2) {
34387 bufferCreationInterval = arguments[1];
34388 }
34389 var maxBufferSize = Number.POSITIVE_INFINITY;
34390 if (length >= 3) {
34391 maxBufferSize = arguments[2];
34392 }
34393 return function bufferTimeOperatorFunction(source) {
34394 return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
34395 };
34396}
34397var BufferTimeOperator = /*@__PURE__*/ (function () {
34398 function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
34399 this.bufferTimeSpan = bufferTimeSpan;
34400 this.bufferCreationInterval = bufferCreationInterval;
34401 this.maxBufferSize = maxBufferSize;
34402 this.scheduler = scheduler;
34403 }
34404 BufferTimeOperator.prototype.call = function (subscriber, source) {
34405 return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
34406 };
34407 return BufferTimeOperator;
34408}());
34409var Context = /*@__PURE__*/ (function () {
34410 function Context() {
34411 this.buffer = [];
34412 }
34413 return Context;
34414}());
34415var BufferTimeSubscriber = /*@__PURE__*/ (function (_super) {
34416 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferTimeSubscriber, _super);
34417 function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
34418 var _this = _super.call(this, destination) || this;
34419 _this.bufferTimeSpan = bufferTimeSpan;
34420 _this.bufferCreationInterval = bufferCreationInterval;
34421 _this.maxBufferSize = maxBufferSize;
34422 _this.scheduler = scheduler;
34423 _this.contexts = [];
34424 var context = _this.openContext();
34425 _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
34426 if (_this.timespanOnly) {
34427 var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
34428 _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
34429 }
34430 else {
34431 var closeState = { subscriber: _this, context: context };
34432 var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
34433 _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
34434 _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
34435 }
34436 return _this;
34437 }
34438 BufferTimeSubscriber.prototype._next = function (value) {
34439 var contexts = this.contexts;
34440 var len = contexts.length;
34441 var filledBufferContext;
34442 for (var i = 0; i < len; i++) {
34443 var context_1 = contexts[i];
34444 var buffer = context_1.buffer;
34445 buffer.push(value);
34446 if (buffer.length == this.maxBufferSize) {
34447 filledBufferContext = context_1;
34448 }
34449 }
34450 if (filledBufferContext) {
34451 this.onBufferFull(filledBufferContext);
34452 }
34453 };
34454 BufferTimeSubscriber.prototype._error = function (err) {
34455 this.contexts.length = 0;
34456 _super.prototype._error.call(this, err);
34457 };
34458 BufferTimeSubscriber.prototype._complete = function () {
34459 var _a = this, contexts = _a.contexts, destination = _a.destination;
34460 while (contexts.length > 0) {
34461 var context_2 = contexts.shift();
34462 destination.next(context_2.buffer);
34463 }
34464 _super.prototype._complete.call(this);
34465 };
34466 BufferTimeSubscriber.prototype._unsubscribe = function () {
34467 this.contexts = null;
34468 };
34469 BufferTimeSubscriber.prototype.onBufferFull = function (context) {
34470 this.closeContext(context);
34471 var closeAction = context.closeAction;
34472 closeAction.unsubscribe();
34473 this.remove(closeAction);
34474 if (!this.closed && this.timespanOnly) {
34475 context = this.openContext();
34476 var bufferTimeSpan = this.bufferTimeSpan;
34477 var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
34478 this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
34479 }
34480 };
34481 BufferTimeSubscriber.prototype.openContext = function () {
34482 var context = new Context();
34483 this.contexts.push(context);
34484 return context;
34485 };
34486 BufferTimeSubscriber.prototype.closeContext = function (context) {
34487 this.destination.next(context.buffer);
34488 var contexts = this.contexts;
34489 var spliceIndex = contexts ? contexts.indexOf(context) : -1;
34490 if (spliceIndex >= 0) {
34491 contexts.splice(contexts.indexOf(context), 1);
34492 }
34493 };
34494 return BufferTimeSubscriber;
34495}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
34496function dispatchBufferTimeSpanOnly(state) {
34497 var subscriber = state.subscriber;
34498 var prevContext = state.context;
34499 if (prevContext) {
34500 subscriber.closeContext(prevContext);
34501 }
34502 if (!subscriber.closed) {
34503 state.context = subscriber.openContext();
34504 state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
34505 }
34506}
34507function dispatchBufferCreation(state) {
34508 var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
34509 var context = subscriber.openContext();
34510 var action = this;
34511 if (!subscriber.closed) {
34512 subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
34513 action.schedule(state, bufferCreationInterval);
34514 }
34515}
34516function dispatchBufferClose(arg) {
34517 var subscriber = arg.subscriber, context = arg.context;
34518 subscriber.closeContext(context);
34519}
34520//# sourceMappingURL=bufferTime.js.map
34521
34522
34523/***/ }),
34524/* 295 */
34525/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34526
34527"use strict";
34528__webpack_require__.r(__webpack_exports__);
34529/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34530/* harmony export */ "bufferToggle": () => (/* binding */ bufferToggle)
34531/* harmony export */ });
34532/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34533/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
34534/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246);
34535/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(255);
34536/** PURE_IMPORTS_START tslib,_Subscription,_util_subscribeToResult,_OuterSubscriber PURE_IMPORTS_END */
34537
34538
34539
34540
34541function bufferToggle(openings, closingSelector) {
34542 return function bufferToggleOperatorFunction(source) {
34543 return source.lift(new BufferToggleOperator(openings, closingSelector));
34544 };
34545}
34546var BufferToggleOperator = /*@__PURE__*/ (function () {
34547 function BufferToggleOperator(openings, closingSelector) {
34548 this.openings = openings;
34549 this.closingSelector = closingSelector;
34550 }
34551 BufferToggleOperator.prototype.call = function (subscriber, source) {
34552 return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
34553 };
34554 return BufferToggleOperator;
34555}());
34556var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) {
34557 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferToggleSubscriber, _super);
34558 function BufferToggleSubscriber(destination, openings, closingSelector) {
34559 var _this = _super.call(this, destination) || this;
34560 _this.closingSelector = closingSelector;
34561 _this.contexts = [];
34562 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, openings));
34563 return _this;
34564 }
34565 BufferToggleSubscriber.prototype._next = function (value) {
34566 var contexts = this.contexts;
34567 var len = contexts.length;
34568 for (var i = 0; i < len; i++) {
34569 contexts[i].buffer.push(value);
34570 }
34571 };
34572 BufferToggleSubscriber.prototype._error = function (err) {
34573 var contexts = this.contexts;
34574 while (contexts.length > 0) {
34575 var context_1 = contexts.shift();
34576 context_1.subscription.unsubscribe();
34577 context_1.buffer = null;
34578 context_1.subscription = null;
34579 }
34580 this.contexts = null;
34581 _super.prototype._error.call(this, err);
34582 };
34583 BufferToggleSubscriber.prototype._complete = function () {
34584 var contexts = this.contexts;
34585 while (contexts.length > 0) {
34586 var context_2 = contexts.shift();
34587 this.destination.next(context_2.buffer);
34588 context_2.subscription.unsubscribe();
34589 context_2.buffer = null;
34590 context_2.subscription = null;
34591 }
34592 this.contexts = null;
34593 _super.prototype._complete.call(this);
34594 };
34595 BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue) {
34596 outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
34597 };
34598 BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
34599 this.closeBuffer(innerSub.context);
34600 };
34601 BufferToggleSubscriber.prototype.openBuffer = function (value) {
34602 try {
34603 var closingSelector = this.closingSelector;
34604 var closingNotifier = closingSelector.call(this, value);
34605 if (closingNotifier) {
34606 this.trySubscribe(closingNotifier);
34607 }
34608 }
34609 catch (err) {
34610 this._error(err);
34611 }
34612 };
34613 BufferToggleSubscriber.prototype.closeBuffer = function (context) {
34614 var contexts = this.contexts;
34615 if (contexts && context) {
34616 var buffer = context.buffer, subscription = context.subscription;
34617 this.destination.next(buffer);
34618 contexts.splice(contexts.indexOf(context), 1);
34619 this.remove(subscription);
34620 subscription.unsubscribe();
34621 }
34622 };
34623 BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
34624 var contexts = this.contexts;
34625 var buffer = [];
34626 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__.Subscription();
34627 var context = { buffer: buffer, subscription: subscription };
34628 contexts.push(context);
34629 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, closingNotifier, context);
34630 if (!innerSubscription || innerSubscription.closed) {
34631 this.closeBuffer(context);
34632 }
34633 else {
34634 innerSubscription.context = context;
34635 this.add(innerSubscription);
34636 subscription.add(innerSubscription);
34637 }
34638 };
34639 return BufferToggleSubscriber;
34640}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
34641//# sourceMappingURL=bufferToggle.js.map
34642
34643
34644/***/ }),
34645/* 296 */
34646/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34647
34648"use strict";
34649__webpack_require__.r(__webpack_exports__);
34650/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34651/* harmony export */ "bufferWhen": () => (/* binding */ bufferWhen)
34652/* harmony export */ });
34653/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34654/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
34655/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(267);
34656/** PURE_IMPORTS_START tslib,_Subscription,_innerSubscribe PURE_IMPORTS_END */
34657
34658
34659
34660function bufferWhen(closingSelector) {
34661 return function (source) {
34662 return source.lift(new BufferWhenOperator(closingSelector));
34663 };
34664}
34665var BufferWhenOperator = /*@__PURE__*/ (function () {
34666 function BufferWhenOperator(closingSelector) {
34667 this.closingSelector = closingSelector;
34668 }
34669 BufferWhenOperator.prototype.call = function (subscriber, source) {
34670 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
34671 };
34672 return BufferWhenOperator;
34673}());
34674var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) {
34675 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(BufferWhenSubscriber, _super);
34676 function BufferWhenSubscriber(destination, closingSelector) {
34677 var _this = _super.call(this, destination) || this;
34678 _this.closingSelector = closingSelector;
34679 _this.subscribing = false;
34680 _this.openBuffer();
34681 return _this;
34682 }
34683 BufferWhenSubscriber.prototype._next = function (value) {
34684 this.buffer.push(value);
34685 };
34686 BufferWhenSubscriber.prototype._complete = function () {
34687 var buffer = this.buffer;
34688 if (buffer) {
34689 this.destination.next(buffer);
34690 }
34691 _super.prototype._complete.call(this);
34692 };
34693 BufferWhenSubscriber.prototype._unsubscribe = function () {
34694 this.buffer = undefined;
34695 this.subscribing = false;
34696 };
34697 BufferWhenSubscriber.prototype.notifyNext = function () {
34698 this.openBuffer();
34699 };
34700 BufferWhenSubscriber.prototype.notifyComplete = function () {
34701 if (this.subscribing) {
34702 this.complete();
34703 }
34704 else {
34705 this.openBuffer();
34706 }
34707 };
34708 BufferWhenSubscriber.prototype.openBuffer = function () {
34709 var closingSubscription = this.closingSubscription;
34710 if (closingSubscription) {
34711 this.remove(closingSubscription);
34712 closingSubscription.unsubscribe();
34713 }
34714 var buffer = this.buffer;
34715 if (this.buffer) {
34716 this.destination.next(buffer);
34717 }
34718 this.buffer = [];
34719 var closingNotifier;
34720 try {
34721 var closingSelector = this.closingSelector;
34722 closingNotifier = closingSelector();
34723 }
34724 catch (err) {
34725 return this.error(err);
34726 }
34727 closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription();
34728 this.closingSubscription = closingSubscription;
34729 this.add(closingSubscription);
34730 this.subscribing = true;
34731 closingSubscription.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.innerSubscribe)(closingNotifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleInnerSubscriber(this)));
34732 this.subscribing = false;
34733 };
34734 return BufferWhenSubscriber;
34735}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleOuterSubscriber));
34736//# sourceMappingURL=bufferWhen.js.map
34737
34738
34739/***/ }),
34740/* 297 */
34741/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34742
34743"use strict";
34744__webpack_require__.r(__webpack_exports__);
34745/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34746/* harmony export */ "catchError": () => (/* binding */ catchError)
34747/* harmony export */ });
34748/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34749/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
34750/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
34751
34752
34753function catchError(selector) {
34754 return function catchErrorOperatorFunction(source) {
34755 var operator = new CatchOperator(selector);
34756 var caught = source.lift(operator);
34757 return (operator.caught = caught);
34758 };
34759}
34760var CatchOperator = /*@__PURE__*/ (function () {
34761 function CatchOperator(selector) {
34762 this.selector = selector;
34763 }
34764 CatchOperator.prototype.call = function (subscriber, source) {
34765 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
34766 };
34767 return CatchOperator;
34768}());
34769var CatchSubscriber = /*@__PURE__*/ (function (_super) {
34770 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CatchSubscriber, _super);
34771 function CatchSubscriber(destination, selector, caught) {
34772 var _this = _super.call(this, destination) || this;
34773 _this.selector = selector;
34774 _this.caught = caught;
34775 return _this;
34776 }
34777 CatchSubscriber.prototype.error = function (err) {
34778 if (!this.isStopped) {
34779 var result = void 0;
34780 try {
34781 result = this.selector(err, this.caught);
34782 }
34783 catch (err2) {
34784 _super.prototype.error.call(this, err2);
34785 return;
34786 }
34787 this._unsubscribeAndRecycle();
34788 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this);
34789 this.add(innerSubscriber);
34790 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(result, innerSubscriber);
34791 if (innerSubscription !== innerSubscriber) {
34792 this.add(innerSubscription);
34793 }
34794 }
34795 };
34796 return CatchSubscriber;
34797}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
34798//# sourceMappingURL=catchError.js.map
34799
34800
34801/***/ }),
34802/* 298 */
34803/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34804
34805"use strict";
34806__webpack_require__.r(__webpack_exports__);
34807/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34808/* harmony export */ "combineAll": () => (/* binding */ combineAll)
34809/* harmony export */ });
34810/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(245);
34811/** PURE_IMPORTS_START _observable_combineLatest PURE_IMPORTS_END */
34812
34813function combineAll(project) {
34814 return function (source) { return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__.CombineLatestOperator(project)); };
34815}
34816//# sourceMappingURL=combineAll.js.map
34817
34818
34819/***/ }),
34820/* 299 */
34821/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34822
34823"use strict";
34824__webpack_require__.r(__webpack_exports__);
34825/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34826/* harmony export */ "combineLatest": () => (/* binding */ combineLatest)
34827/* harmony export */ });
34828/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(197);
34829/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(245);
34830/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
34831/** PURE_IMPORTS_START _util_isArray,_observable_combineLatest,_observable_from PURE_IMPORTS_END */
34832
34833
34834
34835var none = {};
34836function combineLatest() {
34837 var observables = [];
34838 for (var _i = 0; _i < arguments.length; _i++) {
34839 observables[_i] = arguments[_i];
34840 }
34841 var project = null;
34842 if (typeof observables[observables.length - 1] === 'function') {
34843 project = observables.pop();
34844 }
34845 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(observables[0])) {
34846 observables = observables[0].slice();
34847 }
34848 return function (source) { return source.lift.call((0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)([source].concat(observables)), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_2__.CombineLatestOperator(project)); };
34849}
34850//# sourceMappingURL=combineLatest.js.map
34851
34852
34853/***/ }),
34854/* 300 */
34855/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34856
34857"use strict";
34858__webpack_require__.r(__webpack_exports__);
34859/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34860/* harmony export */ "concat": () => (/* binding */ concat)
34861/* harmony export */ });
34862/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(256);
34863/** PURE_IMPORTS_START _observable_concat PURE_IMPORTS_END */
34864
34865function concat() {
34866 var observables = [];
34867 for (var _i = 0; _i < arguments.length; _i++) {
34868 observables[_i] = arguments[_i];
34869 }
34870 return function (source) { return source.lift.call(_observable_concat__WEBPACK_IMPORTED_MODULE_0__.concat.apply(void 0, [source].concat(observables))); };
34871}
34872//# sourceMappingURL=concat.js.map
34873
34874
34875/***/ }),
34876/* 301 */
34877/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34878
34879"use strict";
34880__webpack_require__.r(__webpack_exports__);
34881/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34882/* harmony export */ "concatMap": () => (/* binding */ concatMap)
34883/* harmony export */ });
34884/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(259);
34885/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
34886
34887function concatMap(project, resultSelector) {
34888 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(project, resultSelector, 1);
34889}
34890//# sourceMappingURL=concatMap.js.map
34891
34892
34893/***/ }),
34894/* 302 */
34895/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34896
34897"use strict";
34898__webpack_require__.r(__webpack_exports__);
34899/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34900/* harmony export */ "concatMapTo": () => (/* binding */ concatMapTo)
34901/* harmony export */ });
34902/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(301);
34903/** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */
34904
34905function concatMapTo(innerObservable, resultSelector) {
34906 return (0,_concatMap__WEBPACK_IMPORTED_MODULE_0__.concatMap)(function () { return innerObservable; }, resultSelector);
34907}
34908//# sourceMappingURL=concatMapTo.js.map
34909
34910
34911/***/ }),
34912/* 303 */
34913/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34914
34915"use strict";
34916__webpack_require__.r(__webpack_exports__);
34917/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34918/* harmony export */ "count": () => (/* binding */ count)
34919/* harmony export */ });
34920/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34921/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
34922/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34923
34924
34925function count(predicate) {
34926 return function (source) { return source.lift(new CountOperator(predicate, source)); };
34927}
34928var CountOperator = /*@__PURE__*/ (function () {
34929 function CountOperator(predicate, source) {
34930 this.predicate = predicate;
34931 this.source = source;
34932 }
34933 CountOperator.prototype.call = function (subscriber, source) {
34934 return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
34935 };
34936 return CountOperator;
34937}());
34938var CountSubscriber = /*@__PURE__*/ (function (_super) {
34939 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CountSubscriber, _super);
34940 function CountSubscriber(destination, predicate, source) {
34941 var _this = _super.call(this, destination) || this;
34942 _this.predicate = predicate;
34943 _this.source = source;
34944 _this.count = 0;
34945 _this.index = 0;
34946 return _this;
34947 }
34948 CountSubscriber.prototype._next = function (value) {
34949 if (this.predicate) {
34950 this._tryPredicate(value);
34951 }
34952 else {
34953 this.count++;
34954 }
34955 };
34956 CountSubscriber.prototype._tryPredicate = function (value) {
34957 var result;
34958 try {
34959 result = this.predicate(value, this.index++, this.source);
34960 }
34961 catch (err) {
34962 this.destination.error(err);
34963 return;
34964 }
34965 if (result) {
34966 this.count++;
34967 }
34968 };
34969 CountSubscriber.prototype._complete = function () {
34970 this.destination.next(this.count);
34971 this.destination.complete();
34972 };
34973 return CountSubscriber;
34974}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
34975//# sourceMappingURL=count.js.map
34976
34977
34978/***/ }),
34979/* 304 */
34980/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
34981
34982"use strict";
34983__webpack_require__.r(__webpack_exports__);
34984/* harmony export */ __webpack_require__.d(__webpack_exports__, {
34985/* harmony export */ "debounce": () => (/* binding */ debounce)
34986/* harmony export */ });
34987/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
34988/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
34989/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
34990
34991
34992function debounce(durationSelector) {
34993 return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
34994}
34995var DebounceOperator = /*@__PURE__*/ (function () {
34996 function DebounceOperator(durationSelector) {
34997 this.durationSelector = durationSelector;
34998 }
34999 DebounceOperator.prototype.call = function (subscriber, source) {
35000 return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
35001 };
35002 return DebounceOperator;
35003}());
35004var DebounceSubscriber = /*@__PURE__*/ (function (_super) {
35005 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DebounceSubscriber, _super);
35006 function DebounceSubscriber(destination, durationSelector) {
35007 var _this = _super.call(this, destination) || this;
35008 _this.durationSelector = durationSelector;
35009 _this.hasValue = false;
35010 return _this;
35011 }
35012 DebounceSubscriber.prototype._next = function (value) {
35013 try {
35014 var result = this.durationSelector.call(this, value);
35015 if (result) {
35016 this._tryNext(value, result);
35017 }
35018 }
35019 catch (err) {
35020 this.destination.error(err);
35021 }
35022 };
35023 DebounceSubscriber.prototype._complete = function () {
35024 this.emitValue();
35025 this.destination.complete();
35026 };
35027 DebounceSubscriber.prototype._tryNext = function (value, duration) {
35028 var subscription = this.durationSubscription;
35029 this.value = value;
35030 this.hasValue = true;
35031 if (subscription) {
35032 subscription.unsubscribe();
35033 this.remove(subscription);
35034 }
35035 subscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this));
35036 if (subscription && !subscription.closed) {
35037 this.add(this.durationSubscription = subscription);
35038 }
35039 };
35040 DebounceSubscriber.prototype.notifyNext = function () {
35041 this.emitValue();
35042 };
35043 DebounceSubscriber.prototype.notifyComplete = function () {
35044 this.emitValue();
35045 };
35046 DebounceSubscriber.prototype.emitValue = function () {
35047 if (this.hasValue) {
35048 var value = this.value;
35049 var subscription = this.durationSubscription;
35050 if (subscription) {
35051 this.durationSubscription = undefined;
35052 subscription.unsubscribe();
35053 this.remove(subscription);
35054 }
35055 this.value = undefined;
35056 this.hasValue = false;
35057 _super.prototype._next.call(this, value);
35058 }
35059 };
35060 return DebounceSubscriber;
35061}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
35062//# sourceMappingURL=debounce.js.map
35063
35064
35065/***/ }),
35066/* 305 */
35067/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35068
35069"use strict";
35070__webpack_require__.r(__webpack_exports__);
35071/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35072/* harmony export */ "debounceTime": () => (/* binding */ debounceTime)
35073/* harmony export */ });
35074/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35075/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
35076/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
35077/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
35078
35079
35080
35081function debounceTime(dueTime, scheduler) {
35082 if (scheduler === void 0) {
35083 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
35084 }
35085 return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
35086}
35087var DebounceTimeOperator = /*@__PURE__*/ (function () {
35088 function DebounceTimeOperator(dueTime, scheduler) {
35089 this.dueTime = dueTime;
35090 this.scheduler = scheduler;
35091 }
35092 DebounceTimeOperator.prototype.call = function (subscriber, source) {
35093 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
35094 };
35095 return DebounceTimeOperator;
35096}());
35097var DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {
35098 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DebounceTimeSubscriber, _super);
35099 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
35100 var _this = _super.call(this, destination) || this;
35101 _this.dueTime = dueTime;
35102 _this.scheduler = scheduler;
35103 _this.debouncedSubscription = null;
35104 _this.lastValue = null;
35105 _this.hasValue = false;
35106 return _this;
35107 }
35108 DebounceTimeSubscriber.prototype._next = function (value) {
35109 this.clearDebounce();
35110 this.lastValue = value;
35111 this.hasValue = true;
35112 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
35113 };
35114 DebounceTimeSubscriber.prototype._complete = function () {
35115 this.debouncedNext();
35116 this.destination.complete();
35117 };
35118 DebounceTimeSubscriber.prototype.debouncedNext = function () {
35119 this.clearDebounce();
35120 if (this.hasValue) {
35121 var lastValue = this.lastValue;
35122 this.lastValue = null;
35123 this.hasValue = false;
35124 this.destination.next(lastValue);
35125 }
35126 };
35127 DebounceTimeSubscriber.prototype.clearDebounce = function () {
35128 var debouncedSubscription = this.debouncedSubscription;
35129 if (debouncedSubscription !== null) {
35130 this.remove(debouncedSubscription);
35131 debouncedSubscription.unsubscribe();
35132 this.debouncedSubscription = null;
35133 }
35134 };
35135 return DebounceTimeSubscriber;
35136}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
35137function dispatchNext(subscriber) {
35138 subscriber.debouncedNext();
35139}
35140//# sourceMappingURL=debounceTime.js.map
35141
35142
35143/***/ }),
35144/* 306 */
35145/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35146
35147"use strict";
35148__webpack_require__.r(__webpack_exports__);
35149/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35150/* harmony export */ "defaultIfEmpty": () => (/* binding */ defaultIfEmpty)
35151/* harmony export */ });
35152/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35153/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
35154/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35155
35156
35157function defaultIfEmpty(defaultValue) {
35158 if (defaultValue === void 0) {
35159 defaultValue = null;
35160 }
35161 return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
35162}
35163var DefaultIfEmptyOperator = /*@__PURE__*/ (function () {
35164 function DefaultIfEmptyOperator(defaultValue) {
35165 this.defaultValue = defaultValue;
35166 }
35167 DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
35168 return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
35169 };
35170 return DefaultIfEmptyOperator;
35171}());
35172var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
35173 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DefaultIfEmptySubscriber, _super);
35174 function DefaultIfEmptySubscriber(destination, defaultValue) {
35175 var _this = _super.call(this, destination) || this;
35176 _this.defaultValue = defaultValue;
35177 _this.isEmpty = true;
35178 return _this;
35179 }
35180 DefaultIfEmptySubscriber.prototype._next = function (value) {
35181 this.isEmpty = false;
35182 this.destination.next(value);
35183 };
35184 DefaultIfEmptySubscriber.prototype._complete = function () {
35185 if (this.isEmpty) {
35186 this.destination.next(this.defaultValue);
35187 }
35188 this.destination.complete();
35189 };
35190 return DefaultIfEmptySubscriber;
35191}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35192//# sourceMappingURL=defaultIfEmpty.js.map
35193
35194
35195/***/ }),
35196/* 307 */
35197/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35198
35199"use strict";
35200__webpack_require__.r(__webpack_exports__);
35201/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35202/* harmony export */ "delay": () => (/* binding */ delay)
35203/* harmony export */ });
35204/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35205/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
35206/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(308);
35207/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(188);
35208/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(212);
35209/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */
35210
35211
35212
35213
35214
35215function delay(delay, scheduler) {
35216 if (scheduler === void 0) {
35217 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
35218 }
35219 var absoluteDelay = (0,_util_isDate__WEBPACK_IMPORTED_MODULE_2__.isDate)(delay);
35220 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
35221 return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
35222}
35223var DelayOperator = /*@__PURE__*/ (function () {
35224 function DelayOperator(delay, scheduler) {
35225 this.delay = delay;
35226 this.scheduler = scheduler;
35227 }
35228 DelayOperator.prototype.call = function (subscriber, source) {
35229 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
35230 };
35231 return DelayOperator;
35232}());
35233var DelaySubscriber = /*@__PURE__*/ (function (_super) {
35234 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DelaySubscriber, _super);
35235 function DelaySubscriber(destination, delay, scheduler) {
35236 var _this = _super.call(this, destination) || this;
35237 _this.delay = delay;
35238 _this.scheduler = scheduler;
35239 _this.queue = [];
35240 _this.active = false;
35241 _this.errored = false;
35242 return _this;
35243 }
35244 DelaySubscriber.dispatch = function (state) {
35245 var source = state.source;
35246 var queue = source.queue;
35247 var scheduler = state.scheduler;
35248 var destination = state.destination;
35249 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
35250 queue.shift().notification.observe(destination);
35251 }
35252 if (queue.length > 0) {
35253 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
35254 this.schedule(state, delay_1);
35255 }
35256 else {
35257 this.unsubscribe();
35258 source.active = false;
35259 }
35260 };
35261 DelaySubscriber.prototype._schedule = function (scheduler) {
35262 this.active = true;
35263 var destination = this.destination;
35264 destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
35265 source: this, destination: this.destination, scheduler: scheduler
35266 }));
35267 };
35268 DelaySubscriber.prototype.scheduleNotification = function (notification) {
35269 if (this.errored === true) {
35270 return;
35271 }
35272 var scheduler = this.scheduler;
35273 var message = new DelayMessage(scheduler.now() + this.delay, notification);
35274 this.queue.push(message);
35275 if (this.active === false) {
35276 this._schedule(scheduler);
35277 }
35278 };
35279 DelaySubscriber.prototype._next = function (value) {
35280 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__.Notification.createNext(value));
35281 };
35282 DelaySubscriber.prototype._error = function (err) {
35283 this.errored = true;
35284 this.queue = [];
35285 this.destination.error(err);
35286 this.unsubscribe();
35287 };
35288 DelaySubscriber.prototype._complete = function () {
35289 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_3__.Notification.createComplete());
35290 this.unsubscribe();
35291 };
35292 return DelaySubscriber;
35293}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
35294var DelayMessage = /*@__PURE__*/ (function () {
35295 function DelayMessage(time, notification) {
35296 this.time = time;
35297 this.notification = notification;
35298 }
35299 return DelayMessage;
35300}());
35301//# sourceMappingURL=delay.js.map
35302
35303
35304/***/ }),
35305/* 308 */
35306/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35307
35308"use strict";
35309__webpack_require__.r(__webpack_exports__);
35310/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35311/* harmony export */ "isDate": () => (/* binding */ isDate)
35312/* harmony export */ });
35313/** PURE_IMPORTS_START PURE_IMPORTS_END */
35314function isDate(value) {
35315 return value instanceof Date && !isNaN(+value);
35316}
35317//# sourceMappingURL=isDate.js.map
35318
35319
35320/***/ }),
35321/* 309 */
35322/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35323
35324"use strict";
35325__webpack_require__.r(__webpack_exports__);
35326/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35327/* harmony export */ "delayWhen": () => (/* binding */ delayWhen)
35328/* harmony export */ });
35329/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35330/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(188);
35331/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
35332/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
35333/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246);
35334/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35335
35336
35337
35338
35339
35340function delayWhen(delayDurationSelector, subscriptionDelay) {
35341 if (subscriptionDelay) {
35342 return function (source) {
35343 return new SubscriptionDelayObservable(source, subscriptionDelay)
35344 .lift(new DelayWhenOperator(delayDurationSelector));
35345 };
35346 }
35347 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
35348}
35349var DelayWhenOperator = /*@__PURE__*/ (function () {
35350 function DelayWhenOperator(delayDurationSelector) {
35351 this.delayDurationSelector = delayDurationSelector;
35352 }
35353 DelayWhenOperator.prototype.call = function (subscriber, source) {
35354 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
35355 };
35356 return DelayWhenOperator;
35357}());
35358var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
35359 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DelayWhenSubscriber, _super);
35360 function DelayWhenSubscriber(destination, delayDurationSelector) {
35361 var _this = _super.call(this, destination) || this;
35362 _this.delayDurationSelector = delayDurationSelector;
35363 _this.completed = false;
35364 _this.delayNotifierSubscriptions = [];
35365 _this.index = 0;
35366 return _this;
35367 }
35368 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
35369 this.destination.next(outerValue);
35370 this.removeSubscription(innerSub);
35371 this.tryComplete();
35372 };
35373 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
35374 this._error(error);
35375 };
35376 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
35377 var value = this.removeSubscription(innerSub);
35378 if (value) {
35379 this.destination.next(value);
35380 }
35381 this.tryComplete();
35382 };
35383 DelayWhenSubscriber.prototype._next = function (value) {
35384 var index = this.index++;
35385 try {
35386 var delayNotifier = this.delayDurationSelector(value, index);
35387 if (delayNotifier) {
35388 this.tryDelay(delayNotifier, value);
35389 }
35390 }
35391 catch (err) {
35392 this.destination.error(err);
35393 }
35394 };
35395 DelayWhenSubscriber.prototype._complete = function () {
35396 this.completed = true;
35397 this.tryComplete();
35398 this.unsubscribe();
35399 };
35400 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
35401 subscription.unsubscribe();
35402 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
35403 if (subscriptionIdx !== -1) {
35404 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
35405 }
35406 return subscription.outerValue;
35407 };
35408 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
35409 var notifierSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, delayNotifier, value);
35410 if (notifierSubscription && !notifierSubscription.closed) {
35411 var destination = this.destination;
35412 destination.add(notifierSubscription);
35413 this.delayNotifierSubscriptions.push(notifierSubscription);
35414 }
35415 };
35416 DelayWhenSubscriber.prototype.tryComplete = function () {
35417 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
35418 this.destination.complete();
35419 }
35420 };
35421 return DelayWhenSubscriber;
35422}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
35423var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
35424 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscriptionDelayObservable, _super);
35425 function SubscriptionDelayObservable(source, subscriptionDelay) {
35426 var _this = _super.call(this) || this;
35427 _this.source = source;
35428 _this.subscriptionDelay = subscriptionDelay;
35429 return _this;
35430 }
35431 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
35432 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
35433 };
35434 return SubscriptionDelayObservable;
35435}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
35436var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
35437 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscriptionDelaySubscriber, _super);
35438 function SubscriptionDelaySubscriber(parent, source) {
35439 var _this = _super.call(this) || this;
35440 _this.parent = parent;
35441 _this.source = source;
35442 _this.sourceSubscribed = false;
35443 return _this;
35444 }
35445 SubscriptionDelaySubscriber.prototype._next = function (unused) {
35446 this.subscribeToSource();
35447 };
35448 SubscriptionDelaySubscriber.prototype._error = function (err) {
35449 this.unsubscribe();
35450 this.parent.error(err);
35451 };
35452 SubscriptionDelaySubscriber.prototype._complete = function () {
35453 this.unsubscribe();
35454 this.subscribeToSource();
35455 };
35456 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
35457 if (!this.sourceSubscribed) {
35458 this.sourceSubscribed = true;
35459 this.unsubscribe();
35460 this.source.subscribe(this.parent);
35461 }
35462 };
35463 return SubscriptionDelaySubscriber;
35464}(_Subscriber__WEBPACK_IMPORTED_MODULE_4__.Subscriber));
35465//# sourceMappingURL=delayWhen.js.map
35466
35467
35468/***/ }),
35469/* 310 */
35470/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35471
35472"use strict";
35473__webpack_require__.r(__webpack_exports__);
35474/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35475/* harmony export */ "dematerialize": () => (/* binding */ dematerialize)
35476/* harmony export */ });
35477/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35478/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
35479/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35480
35481
35482function dematerialize() {
35483 return function dematerializeOperatorFunction(source) {
35484 return source.lift(new DeMaterializeOperator());
35485 };
35486}
35487var DeMaterializeOperator = /*@__PURE__*/ (function () {
35488 function DeMaterializeOperator() {
35489 }
35490 DeMaterializeOperator.prototype.call = function (subscriber, source) {
35491 return source.subscribe(new DeMaterializeSubscriber(subscriber));
35492 };
35493 return DeMaterializeOperator;
35494}());
35495var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) {
35496 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DeMaterializeSubscriber, _super);
35497 function DeMaterializeSubscriber(destination) {
35498 return _super.call(this, destination) || this;
35499 }
35500 DeMaterializeSubscriber.prototype._next = function (value) {
35501 value.observe(this.destination);
35502 };
35503 return DeMaterializeSubscriber;
35504}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35505//# sourceMappingURL=dematerialize.js.map
35506
35507
35508/***/ }),
35509/* 311 */
35510/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35511
35512"use strict";
35513__webpack_require__.r(__webpack_exports__);
35514/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35515/* harmony export */ "distinct": () => (/* binding */ distinct),
35516/* harmony export */ "DistinctSubscriber": () => (/* binding */ DistinctSubscriber)
35517/* harmony export */ });
35518/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35519/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
35520/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
35521
35522
35523function distinct(keySelector, flushes) {
35524 return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
35525}
35526var DistinctOperator = /*@__PURE__*/ (function () {
35527 function DistinctOperator(keySelector, flushes) {
35528 this.keySelector = keySelector;
35529 this.flushes = flushes;
35530 }
35531 DistinctOperator.prototype.call = function (subscriber, source) {
35532 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
35533 };
35534 return DistinctOperator;
35535}());
35536var DistinctSubscriber = /*@__PURE__*/ (function (_super) {
35537 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DistinctSubscriber, _super);
35538 function DistinctSubscriber(destination, keySelector, flushes) {
35539 var _this = _super.call(this, destination) || this;
35540 _this.keySelector = keySelector;
35541 _this.values = new Set();
35542 if (flushes) {
35543 _this.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(flushes, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(_this)));
35544 }
35545 return _this;
35546 }
35547 DistinctSubscriber.prototype.notifyNext = function () {
35548 this.values.clear();
35549 };
35550 DistinctSubscriber.prototype.notifyError = function (error) {
35551 this._error(error);
35552 };
35553 DistinctSubscriber.prototype._next = function (value) {
35554 if (this.keySelector) {
35555 this._useKeySelector(value);
35556 }
35557 else {
35558 this._finalizeNext(value, value);
35559 }
35560 };
35561 DistinctSubscriber.prototype._useKeySelector = function (value) {
35562 var key;
35563 var destination = this.destination;
35564 try {
35565 key = this.keySelector(value);
35566 }
35567 catch (err) {
35568 destination.error(err);
35569 return;
35570 }
35571 this._finalizeNext(key, value);
35572 };
35573 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
35574 var values = this.values;
35575 if (!values.has(key)) {
35576 values.add(key);
35577 this.destination.next(value);
35578 }
35579 };
35580 return DistinctSubscriber;
35581}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
35582
35583//# sourceMappingURL=distinct.js.map
35584
35585
35586/***/ }),
35587/* 312 */
35588/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35589
35590"use strict";
35591__webpack_require__.r(__webpack_exports__);
35592/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35593/* harmony export */ "distinctUntilChanged": () => (/* binding */ distinctUntilChanged)
35594/* harmony export */ });
35595/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35596/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
35597/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35598
35599
35600function distinctUntilChanged(compare, keySelector) {
35601 return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
35602}
35603var DistinctUntilChangedOperator = /*@__PURE__*/ (function () {
35604 function DistinctUntilChangedOperator(compare, keySelector) {
35605 this.compare = compare;
35606 this.keySelector = keySelector;
35607 }
35608 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
35609 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
35610 };
35611 return DistinctUntilChangedOperator;
35612}());
35613var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {
35614 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(DistinctUntilChangedSubscriber, _super);
35615 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
35616 var _this = _super.call(this, destination) || this;
35617 _this.keySelector = keySelector;
35618 _this.hasKey = false;
35619 if (typeof compare === 'function') {
35620 _this.compare = compare;
35621 }
35622 return _this;
35623 }
35624 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
35625 return x === y;
35626 };
35627 DistinctUntilChangedSubscriber.prototype._next = function (value) {
35628 var key;
35629 try {
35630 var keySelector = this.keySelector;
35631 key = keySelector ? keySelector(value) : value;
35632 }
35633 catch (err) {
35634 return this.destination.error(err);
35635 }
35636 var result = false;
35637 if (this.hasKey) {
35638 try {
35639 var compare = this.compare;
35640 result = compare(this.key, key);
35641 }
35642 catch (err) {
35643 return this.destination.error(err);
35644 }
35645 }
35646 else {
35647 this.hasKey = true;
35648 }
35649 if (!result) {
35650 this.key = key;
35651 this.destination.next(value);
35652 }
35653 };
35654 return DistinctUntilChangedSubscriber;
35655}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35656//# sourceMappingURL=distinctUntilChanged.js.map
35657
35658
35659/***/ }),
35660/* 313 */
35661/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35662
35663"use strict";
35664__webpack_require__.r(__webpack_exports__);
35665/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35666/* harmony export */ "distinctUntilKeyChanged": () => (/* binding */ distinctUntilKeyChanged)
35667/* harmony export */ });
35668/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(312);
35669/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */
35670
35671function distinctUntilKeyChanged(key, compare) {
35672 return (0,_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__.distinctUntilChanged)(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
35673}
35674//# sourceMappingURL=distinctUntilKeyChanged.js.map
35675
35676
35677/***/ }),
35678/* 314 */
35679/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35680
35681"use strict";
35682__webpack_require__.r(__webpack_exports__);
35683/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35684/* harmony export */ "elementAt": () => (/* binding */ elementAt)
35685/* harmony export */ });
35686/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
35687/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(281);
35688/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(316);
35689/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(306);
35690/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(315);
35691/** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */
35692
35693
35694
35695
35696
35697function elementAt(index, defaultValue) {
35698 if (index < 0) {
35699 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__.ArgumentOutOfRangeError();
35700 }
35701 var hasDefaultValue = arguments.length >= 2;
35702 return function (source) {
35703 return source.pipe((0,_filter__WEBPACK_IMPORTED_MODULE_1__.filter)(function (v, i) { return i === index; }), (0,_take__WEBPACK_IMPORTED_MODULE_2__.take)(1), hasDefaultValue
35704 ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue)
35705 : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__.ArgumentOutOfRangeError(); }));
35706 };
35707}
35708//# sourceMappingURL=elementAt.js.map
35709
35710
35711/***/ }),
35712/* 315 */
35713/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35714
35715"use strict";
35716__webpack_require__.r(__webpack_exports__);
35717/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35718/* harmony export */ "take": () => (/* binding */ take)
35719/* harmony export */ });
35720/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35721/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(188);
35722/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(239);
35723/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(219);
35724/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
35725
35726
35727
35728
35729function take(count) {
35730 return function (source) {
35731 if (count === 0) {
35732 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
35733 }
35734 else {
35735 return source.lift(new TakeOperator(count));
35736 }
35737 };
35738}
35739var TakeOperator = /*@__PURE__*/ (function () {
35740 function TakeOperator(total) {
35741 this.total = total;
35742 if (this.total < 0) {
35743 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__.ArgumentOutOfRangeError;
35744 }
35745 }
35746 TakeOperator.prototype.call = function (subscriber, source) {
35747 return source.subscribe(new TakeSubscriber(subscriber, this.total));
35748 };
35749 return TakeOperator;
35750}());
35751var TakeSubscriber = /*@__PURE__*/ (function (_super) {
35752 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeSubscriber, _super);
35753 function TakeSubscriber(destination, total) {
35754 var _this = _super.call(this, destination) || this;
35755 _this.total = total;
35756 _this.count = 0;
35757 return _this;
35758 }
35759 TakeSubscriber.prototype._next = function (value) {
35760 var total = this.total;
35761 var count = ++this.count;
35762 if (count <= total) {
35763 this.destination.next(value);
35764 if (count === total) {
35765 this.destination.complete();
35766 this.unsubscribe();
35767 }
35768 }
35769 };
35770 return TakeSubscriber;
35771}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
35772//# sourceMappingURL=take.js.map
35773
35774
35775/***/ }),
35776/* 316 */
35777/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35778
35779"use strict";
35780__webpack_require__.r(__webpack_exports__);
35781/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35782/* harmony export */ "throwIfEmpty": () => (/* binding */ throwIfEmpty)
35783/* harmony export */ });
35784/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35785/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(240);
35786/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
35787/** PURE_IMPORTS_START tslib,_util_EmptyError,_Subscriber PURE_IMPORTS_END */
35788
35789
35790
35791function throwIfEmpty(errorFactory) {
35792 if (errorFactory === void 0) {
35793 errorFactory = defaultErrorFactory;
35794 }
35795 return function (source) {
35796 return source.lift(new ThrowIfEmptyOperator(errorFactory));
35797 };
35798}
35799var ThrowIfEmptyOperator = /*@__PURE__*/ (function () {
35800 function ThrowIfEmptyOperator(errorFactory) {
35801 this.errorFactory = errorFactory;
35802 }
35803 ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
35804 return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
35805 };
35806 return ThrowIfEmptyOperator;
35807}());
35808var ThrowIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
35809 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrowIfEmptySubscriber, _super);
35810 function ThrowIfEmptySubscriber(destination, errorFactory) {
35811 var _this = _super.call(this, destination) || this;
35812 _this.errorFactory = errorFactory;
35813 _this.hasValue = false;
35814 return _this;
35815 }
35816 ThrowIfEmptySubscriber.prototype._next = function (value) {
35817 this.hasValue = true;
35818 this.destination.next(value);
35819 };
35820 ThrowIfEmptySubscriber.prototype._complete = function () {
35821 if (!this.hasValue) {
35822 var err = void 0;
35823 try {
35824 err = this.errorFactory();
35825 }
35826 catch (e) {
35827 err = e;
35828 }
35829 this.destination.error(err);
35830 }
35831 else {
35832 return this.destination.complete();
35833 }
35834 };
35835 return ThrowIfEmptySubscriber;
35836}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35837function defaultErrorFactory() {
35838 return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__.EmptyError();
35839}
35840//# sourceMappingURL=throwIfEmpty.js.map
35841
35842
35843/***/ }),
35844/* 317 */
35845/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35846
35847"use strict";
35848__webpack_require__.r(__webpack_exports__);
35849/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35850/* harmony export */ "endWith": () => (/* binding */ endWith)
35851/* harmony export */ });
35852/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(256);
35853/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
35854/** PURE_IMPORTS_START _observable_concat,_observable_of PURE_IMPORTS_END */
35855
35856
35857function endWith() {
35858 var array = [];
35859 for (var _i = 0; _i < arguments.length; _i++) {
35860 array[_i] = arguments[_i];
35861 }
35862 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_0__.concat)(source, _observable_of__WEBPACK_IMPORTED_MODULE_1__.of.apply(void 0, array)); };
35863}
35864//# sourceMappingURL=endWith.js.map
35865
35866
35867/***/ }),
35868/* 318 */
35869/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35870
35871"use strict";
35872__webpack_require__.r(__webpack_exports__);
35873/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35874/* harmony export */ "every": () => (/* binding */ every)
35875/* harmony export */ });
35876/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35877/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
35878/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35879
35880
35881function every(predicate, thisArg) {
35882 return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
35883}
35884var EveryOperator = /*@__PURE__*/ (function () {
35885 function EveryOperator(predicate, thisArg, source) {
35886 this.predicate = predicate;
35887 this.thisArg = thisArg;
35888 this.source = source;
35889 }
35890 EveryOperator.prototype.call = function (observer, source) {
35891 return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
35892 };
35893 return EveryOperator;
35894}());
35895var EverySubscriber = /*@__PURE__*/ (function (_super) {
35896 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(EverySubscriber, _super);
35897 function EverySubscriber(destination, predicate, thisArg, source) {
35898 var _this = _super.call(this, destination) || this;
35899 _this.predicate = predicate;
35900 _this.thisArg = thisArg;
35901 _this.source = source;
35902 _this.index = 0;
35903 _this.thisArg = thisArg || _this;
35904 return _this;
35905 }
35906 EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
35907 this.destination.next(everyValueMatch);
35908 this.destination.complete();
35909 };
35910 EverySubscriber.prototype._next = function (value) {
35911 var result = false;
35912 try {
35913 result = this.predicate.call(this.thisArg, value, this.index++, this.source);
35914 }
35915 catch (err) {
35916 this.destination.error(err);
35917 return;
35918 }
35919 if (!result) {
35920 this.notifyComplete(false);
35921 }
35922 };
35923 EverySubscriber.prototype._complete = function () {
35924 this.notifyComplete(true);
35925 };
35926 return EverySubscriber;
35927}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
35928//# sourceMappingURL=every.js.map
35929
35930
35931/***/ }),
35932/* 319 */
35933/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35934
35935"use strict";
35936__webpack_require__.r(__webpack_exports__);
35937/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35938/* harmony export */ "exhaust": () => (/* binding */ exhaust)
35939/* harmony export */ });
35940/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35941/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
35942/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
35943
35944
35945function exhaust() {
35946 return function (source) { return source.lift(new SwitchFirstOperator()); };
35947}
35948var SwitchFirstOperator = /*@__PURE__*/ (function () {
35949 function SwitchFirstOperator() {
35950 }
35951 SwitchFirstOperator.prototype.call = function (subscriber, source) {
35952 return source.subscribe(new SwitchFirstSubscriber(subscriber));
35953 };
35954 return SwitchFirstOperator;
35955}());
35956var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) {
35957 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SwitchFirstSubscriber, _super);
35958 function SwitchFirstSubscriber(destination) {
35959 var _this = _super.call(this, destination) || this;
35960 _this.hasCompleted = false;
35961 _this.hasSubscription = false;
35962 return _this;
35963 }
35964 SwitchFirstSubscriber.prototype._next = function (value) {
35965 if (!this.hasSubscription) {
35966 this.hasSubscription = true;
35967 this.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(value, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this)));
35968 }
35969 };
35970 SwitchFirstSubscriber.prototype._complete = function () {
35971 this.hasCompleted = true;
35972 if (!this.hasSubscription) {
35973 this.destination.complete();
35974 }
35975 };
35976 SwitchFirstSubscriber.prototype.notifyComplete = function () {
35977 this.hasSubscription = false;
35978 if (this.hasCompleted) {
35979 this.destination.complete();
35980 }
35981 };
35982 return SwitchFirstSubscriber;
35983}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
35984//# sourceMappingURL=exhaust.js.map
35985
35986
35987/***/ }),
35988/* 320 */
35989/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
35990
35991"use strict";
35992__webpack_require__.r(__webpack_exports__);
35993/* harmony export */ __webpack_require__.d(__webpack_exports__, {
35994/* harmony export */ "exhaustMap": () => (/* binding */ exhaustMap)
35995/* harmony export */ });
35996/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
35997/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(243);
35998/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
35999/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267);
36000/** PURE_IMPORTS_START tslib,_map,_observable_from,_innerSubscribe PURE_IMPORTS_END */
36001
36002
36003
36004
36005function exhaustMap(project, resultSelector) {
36006 if (resultSelector) {
36007 return function (source) { return source.pipe(exhaustMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
36008 }
36009 return function (source) {
36010 return source.lift(new ExhaustMapOperator(project));
36011 };
36012}
36013var ExhaustMapOperator = /*@__PURE__*/ (function () {
36014 function ExhaustMapOperator(project) {
36015 this.project = project;
36016 }
36017 ExhaustMapOperator.prototype.call = function (subscriber, source) {
36018 return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
36019 };
36020 return ExhaustMapOperator;
36021}());
36022var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) {
36023 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ExhaustMapSubscriber, _super);
36024 function ExhaustMapSubscriber(destination, project) {
36025 var _this = _super.call(this, destination) || this;
36026 _this.project = project;
36027 _this.hasSubscription = false;
36028 _this.hasCompleted = false;
36029 _this.index = 0;
36030 return _this;
36031 }
36032 ExhaustMapSubscriber.prototype._next = function (value) {
36033 if (!this.hasSubscription) {
36034 this.tryNext(value);
36035 }
36036 };
36037 ExhaustMapSubscriber.prototype.tryNext = function (value) {
36038 var result;
36039 var index = this.index++;
36040 try {
36041 result = this.project(value, index);
36042 }
36043 catch (err) {
36044 this.destination.error(err);
36045 return;
36046 }
36047 this.hasSubscription = true;
36048 this._innerSub(result);
36049 };
36050 ExhaustMapSubscriber.prototype._innerSub = function (result) {
36051 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleInnerSubscriber(this);
36052 var destination = this.destination;
36053 destination.add(innerSubscriber);
36054 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.innerSubscribe)(result, innerSubscriber);
36055 if (innerSubscription !== innerSubscriber) {
36056 destination.add(innerSubscription);
36057 }
36058 };
36059 ExhaustMapSubscriber.prototype._complete = function () {
36060 this.hasCompleted = true;
36061 if (!this.hasSubscription) {
36062 this.destination.complete();
36063 }
36064 this.unsubscribe();
36065 };
36066 ExhaustMapSubscriber.prototype.notifyNext = function (innerValue) {
36067 this.destination.next(innerValue);
36068 };
36069 ExhaustMapSubscriber.prototype.notifyError = function (err) {
36070 this.destination.error(err);
36071 };
36072 ExhaustMapSubscriber.prototype.notifyComplete = function () {
36073 this.hasSubscription = false;
36074 if (this.hasCompleted) {
36075 this.destination.complete();
36076 }
36077 };
36078 return ExhaustMapSubscriber;
36079}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleOuterSubscriber));
36080//# sourceMappingURL=exhaustMap.js.map
36081
36082
36083/***/ }),
36084/* 321 */
36085/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36086
36087"use strict";
36088__webpack_require__.r(__webpack_exports__);
36089/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36090/* harmony export */ "expand": () => (/* binding */ expand),
36091/* harmony export */ "ExpandOperator": () => (/* binding */ ExpandOperator),
36092/* harmony export */ "ExpandSubscriber": () => (/* binding */ ExpandSubscriber)
36093/* harmony export */ });
36094/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36095/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
36096/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
36097
36098
36099function expand(project, concurrent, scheduler) {
36100 if (concurrent === void 0) {
36101 concurrent = Number.POSITIVE_INFINITY;
36102 }
36103 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
36104 return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
36105}
36106var ExpandOperator = /*@__PURE__*/ (function () {
36107 function ExpandOperator(project, concurrent, scheduler) {
36108 this.project = project;
36109 this.concurrent = concurrent;
36110 this.scheduler = scheduler;
36111 }
36112 ExpandOperator.prototype.call = function (subscriber, source) {
36113 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
36114 };
36115 return ExpandOperator;
36116}());
36117
36118var ExpandSubscriber = /*@__PURE__*/ (function (_super) {
36119 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ExpandSubscriber, _super);
36120 function ExpandSubscriber(destination, project, concurrent, scheduler) {
36121 var _this = _super.call(this, destination) || this;
36122 _this.project = project;
36123 _this.concurrent = concurrent;
36124 _this.scheduler = scheduler;
36125 _this.index = 0;
36126 _this.active = 0;
36127 _this.hasCompleted = false;
36128 if (concurrent < Number.POSITIVE_INFINITY) {
36129 _this.buffer = [];
36130 }
36131 return _this;
36132 }
36133 ExpandSubscriber.dispatch = function (arg) {
36134 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
36135 subscriber.subscribeToProjection(result, value, index);
36136 };
36137 ExpandSubscriber.prototype._next = function (value) {
36138 var destination = this.destination;
36139 if (destination.closed) {
36140 this._complete();
36141 return;
36142 }
36143 var index = this.index++;
36144 if (this.active < this.concurrent) {
36145 destination.next(value);
36146 try {
36147 var project = this.project;
36148 var result = project(value, index);
36149 if (!this.scheduler) {
36150 this.subscribeToProjection(result, value, index);
36151 }
36152 else {
36153 var state = { subscriber: this, result: result, value: value, index: index };
36154 var destination_1 = this.destination;
36155 destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
36156 }
36157 }
36158 catch (e) {
36159 destination.error(e);
36160 }
36161 }
36162 else {
36163 this.buffer.push(value);
36164 }
36165 };
36166 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
36167 this.active++;
36168 var destination = this.destination;
36169 destination.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(result, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this)));
36170 };
36171 ExpandSubscriber.prototype._complete = function () {
36172 this.hasCompleted = true;
36173 if (this.hasCompleted && this.active === 0) {
36174 this.destination.complete();
36175 }
36176 this.unsubscribe();
36177 };
36178 ExpandSubscriber.prototype.notifyNext = function (innerValue) {
36179 this._next(innerValue);
36180 };
36181 ExpandSubscriber.prototype.notifyComplete = function () {
36182 var buffer = this.buffer;
36183 this.active--;
36184 if (buffer && buffer.length > 0) {
36185 this._next(buffer.shift());
36186 }
36187 if (this.hasCompleted && this.active === 0) {
36188 this.destination.complete();
36189 }
36190 };
36191 return ExpandSubscriber;
36192}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
36193
36194//# sourceMappingURL=expand.js.map
36195
36196
36197/***/ }),
36198/* 322 */
36199/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36200
36201"use strict";
36202__webpack_require__.r(__webpack_exports__);
36203/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36204/* harmony export */ "finalize": () => (/* binding */ finalize)
36205/* harmony export */ });
36206/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36207/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
36208/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
36209/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */
36210
36211
36212
36213function finalize(callback) {
36214 return function (source) { return source.lift(new FinallyOperator(callback)); };
36215}
36216var FinallyOperator = /*@__PURE__*/ (function () {
36217 function FinallyOperator(callback) {
36218 this.callback = callback;
36219 }
36220 FinallyOperator.prototype.call = function (subscriber, source) {
36221 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
36222 };
36223 return FinallyOperator;
36224}());
36225var FinallySubscriber = /*@__PURE__*/ (function (_super) {
36226 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FinallySubscriber, _super);
36227 function FinallySubscriber(destination, callback) {
36228 var _this = _super.call(this, destination) || this;
36229 _this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_1__.Subscription(callback));
36230 return _this;
36231 }
36232 return FinallySubscriber;
36233}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
36234//# sourceMappingURL=finalize.js.map
36235
36236
36237/***/ }),
36238/* 323 */
36239/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36240
36241"use strict";
36242__webpack_require__.r(__webpack_exports__);
36243/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36244/* harmony export */ "find": () => (/* binding */ find),
36245/* harmony export */ "FindValueOperator": () => (/* binding */ FindValueOperator),
36246/* harmony export */ "FindValueSubscriber": () => (/* binding */ FindValueSubscriber)
36247/* harmony export */ });
36248/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36249/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36250/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36251
36252
36253function find(predicate, thisArg) {
36254 if (typeof predicate !== 'function') {
36255 throw new TypeError('predicate is not a function');
36256 }
36257 return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
36258}
36259var FindValueOperator = /*@__PURE__*/ (function () {
36260 function FindValueOperator(predicate, source, yieldIndex, thisArg) {
36261 this.predicate = predicate;
36262 this.source = source;
36263 this.yieldIndex = yieldIndex;
36264 this.thisArg = thisArg;
36265 }
36266 FindValueOperator.prototype.call = function (observer, source) {
36267 return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
36268 };
36269 return FindValueOperator;
36270}());
36271
36272var FindValueSubscriber = /*@__PURE__*/ (function (_super) {
36273 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(FindValueSubscriber, _super);
36274 function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
36275 var _this = _super.call(this, destination) || this;
36276 _this.predicate = predicate;
36277 _this.source = source;
36278 _this.yieldIndex = yieldIndex;
36279 _this.thisArg = thisArg;
36280 _this.index = 0;
36281 return _this;
36282 }
36283 FindValueSubscriber.prototype.notifyComplete = function (value) {
36284 var destination = this.destination;
36285 destination.next(value);
36286 destination.complete();
36287 this.unsubscribe();
36288 };
36289 FindValueSubscriber.prototype._next = function (value) {
36290 var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
36291 var index = this.index++;
36292 try {
36293 var result = predicate.call(thisArg || this, value, index, this.source);
36294 if (result) {
36295 this.notifyComplete(this.yieldIndex ? index : value);
36296 }
36297 }
36298 catch (err) {
36299 this.destination.error(err);
36300 }
36301 };
36302 FindValueSubscriber.prototype._complete = function () {
36303 this.notifyComplete(this.yieldIndex ? -1 : undefined);
36304 };
36305 return FindValueSubscriber;
36306}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36307
36308//# sourceMappingURL=find.js.map
36309
36310
36311/***/ }),
36312/* 324 */
36313/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36314
36315"use strict";
36316__webpack_require__.r(__webpack_exports__);
36317/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36318/* harmony export */ "findIndex": () => (/* binding */ findIndex)
36319/* harmony export */ });
36320/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(323);
36321/** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */
36322
36323function findIndex(predicate, thisArg) {
36324 return function (source) { return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__.FindValueOperator(predicate, source, true, thisArg)); };
36325}
36326//# sourceMappingURL=findIndex.js.map
36327
36328
36329/***/ }),
36330/* 325 */
36331/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36332
36333"use strict";
36334__webpack_require__.r(__webpack_exports__);
36335/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36336/* harmony export */ "first": () => (/* binding */ first)
36337/* harmony export */ });
36338/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(240);
36339/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
36340/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(315);
36341/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(306);
36342/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(316);
36343/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
36344/** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */
36345
36346
36347
36348
36349
36350
36351function first(predicate, defaultValue) {
36352 var hasDefaultValue = arguments.length >= 2;
36353 return function (source) { return source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_take__WEBPACK_IMPORTED_MODULE_2__.take)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError(); })); };
36354}
36355//# sourceMappingURL=first.js.map
36356
36357
36358/***/ }),
36359/* 326 */
36360/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36361
36362"use strict";
36363__webpack_require__.r(__webpack_exports__);
36364/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36365/* harmony export */ "ignoreElements": () => (/* binding */ ignoreElements)
36366/* harmony export */ });
36367/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36368/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36369/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36370
36371
36372function ignoreElements() {
36373 return function ignoreElementsOperatorFunction(source) {
36374 return source.lift(new IgnoreElementsOperator());
36375 };
36376}
36377var IgnoreElementsOperator = /*@__PURE__*/ (function () {
36378 function IgnoreElementsOperator() {
36379 }
36380 IgnoreElementsOperator.prototype.call = function (subscriber, source) {
36381 return source.subscribe(new IgnoreElementsSubscriber(subscriber));
36382 };
36383 return IgnoreElementsOperator;
36384}());
36385var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) {
36386 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(IgnoreElementsSubscriber, _super);
36387 function IgnoreElementsSubscriber() {
36388 return _super !== null && _super.apply(this, arguments) || this;
36389 }
36390 IgnoreElementsSubscriber.prototype._next = function (unused) {
36391 };
36392 return IgnoreElementsSubscriber;
36393}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36394//# sourceMappingURL=ignoreElements.js.map
36395
36396
36397/***/ }),
36398/* 327 */
36399/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36400
36401"use strict";
36402__webpack_require__.r(__webpack_exports__);
36403/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36404/* harmony export */ "isEmpty": () => (/* binding */ isEmpty)
36405/* harmony export */ });
36406/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36407/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36408/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36409
36410
36411function isEmpty() {
36412 return function (source) { return source.lift(new IsEmptyOperator()); };
36413}
36414var IsEmptyOperator = /*@__PURE__*/ (function () {
36415 function IsEmptyOperator() {
36416 }
36417 IsEmptyOperator.prototype.call = function (observer, source) {
36418 return source.subscribe(new IsEmptySubscriber(observer));
36419 };
36420 return IsEmptyOperator;
36421}());
36422var IsEmptySubscriber = /*@__PURE__*/ (function (_super) {
36423 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(IsEmptySubscriber, _super);
36424 function IsEmptySubscriber(destination) {
36425 return _super.call(this, destination) || this;
36426 }
36427 IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
36428 var destination = this.destination;
36429 destination.next(isEmpty);
36430 destination.complete();
36431 };
36432 IsEmptySubscriber.prototype._next = function (value) {
36433 this.notifyComplete(false);
36434 };
36435 IsEmptySubscriber.prototype._complete = function () {
36436 this.notifyComplete(true);
36437 };
36438 return IsEmptySubscriber;
36439}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36440//# sourceMappingURL=isEmpty.js.map
36441
36442
36443/***/ }),
36444/* 328 */
36445/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36446
36447"use strict";
36448__webpack_require__.r(__webpack_exports__);
36449/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36450/* harmony export */ "last": () => (/* binding */ last)
36451/* harmony export */ });
36452/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(240);
36453/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
36454/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(329);
36455/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(316);
36456/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(306);
36457/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
36458/** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */
36459
36460
36461
36462
36463
36464
36465function last(predicate, defaultValue) {
36466 var hasDefaultValue = arguments.length >= 2;
36467 return function (source) { return source.pipe(predicate ? (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_1__.identity, (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1), hasDefaultValue ? (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(defaultValue) : (0,_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__.throwIfEmpty)(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_5__.EmptyError(); })); };
36468}
36469//# sourceMappingURL=last.js.map
36470
36471
36472/***/ }),
36473/* 329 */
36474/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36475
36476"use strict";
36477__webpack_require__.r(__webpack_exports__);
36478/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36479/* harmony export */ "takeLast": () => (/* binding */ takeLast)
36480/* harmony export */ });
36481/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36482/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(188);
36483/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(239);
36484/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(219);
36485/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
36486
36487
36488
36489
36490function takeLast(count) {
36491 return function takeLastOperatorFunction(source) {
36492 if (count === 0) {
36493 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
36494 }
36495 else {
36496 return source.lift(new TakeLastOperator(count));
36497 }
36498 };
36499}
36500var TakeLastOperator = /*@__PURE__*/ (function () {
36501 function TakeLastOperator(total) {
36502 this.total = total;
36503 if (this.total < 0) {
36504 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__.ArgumentOutOfRangeError;
36505 }
36506 }
36507 TakeLastOperator.prototype.call = function (subscriber, source) {
36508 return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
36509 };
36510 return TakeLastOperator;
36511}());
36512var TakeLastSubscriber = /*@__PURE__*/ (function (_super) {
36513 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeLastSubscriber, _super);
36514 function TakeLastSubscriber(destination, total) {
36515 var _this = _super.call(this, destination) || this;
36516 _this.total = total;
36517 _this.ring = new Array();
36518 _this.count = 0;
36519 return _this;
36520 }
36521 TakeLastSubscriber.prototype._next = function (value) {
36522 var ring = this.ring;
36523 var total = this.total;
36524 var count = this.count++;
36525 if (ring.length < total) {
36526 ring.push(value);
36527 }
36528 else {
36529 var index = count % total;
36530 ring[index] = value;
36531 }
36532 };
36533 TakeLastSubscriber.prototype._complete = function () {
36534 var destination = this.destination;
36535 var count = this.count;
36536 if (count > 0) {
36537 var total = this.count >= this.total ? this.total : this.count;
36538 var ring = this.ring;
36539 for (var i = 0; i < total; i++) {
36540 var idx = (count++) % total;
36541 destination.next(ring[idx]);
36542 }
36543 }
36544 destination.complete();
36545 };
36546 return TakeLastSubscriber;
36547}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
36548//# sourceMappingURL=takeLast.js.map
36549
36550
36551/***/ }),
36552/* 330 */
36553/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36554
36555"use strict";
36556__webpack_require__.r(__webpack_exports__);
36557/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36558/* harmony export */ "mapTo": () => (/* binding */ mapTo)
36559/* harmony export */ });
36560/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36561/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36562/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36563
36564
36565function mapTo(value) {
36566 return function (source) { return source.lift(new MapToOperator(value)); };
36567}
36568var MapToOperator = /*@__PURE__*/ (function () {
36569 function MapToOperator(value) {
36570 this.value = value;
36571 }
36572 MapToOperator.prototype.call = function (subscriber, source) {
36573 return source.subscribe(new MapToSubscriber(subscriber, this.value));
36574 };
36575 return MapToOperator;
36576}());
36577var MapToSubscriber = /*@__PURE__*/ (function (_super) {
36578 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MapToSubscriber, _super);
36579 function MapToSubscriber(destination, value) {
36580 var _this = _super.call(this, destination) || this;
36581 _this.value = value;
36582 return _this;
36583 }
36584 MapToSubscriber.prototype._next = function (x) {
36585 this.destination.next(this.value);
36586 };
36587 return MapToSubscriber;
36588}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36589//# sourceMappingURL=mapTo.js.map
36590
36591
36592/***/ }),
36593/* 331 */
36594/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36595
36596"use strict";
36597__webpack_require__.r(__webpack_exports__);
36598/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36599/* harmony export */ "materialize": () => (/* binding */ materialize)
36600/* harmony export */ });
36601/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36602/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
36603/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
36604/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
36605
36606
36607
36608function materialize() {
36609 return function materializeOperatorFunction(source) {
36610 return source.lift(new MaterializeOperator());
36611 };
36612}
36613var MaterializeOperator = /*@__PURE__*/ (function () {
36614 function MaterializeOperator() {
36615 }
36616 MaterializeOperator.prototype.call = function (subscriber, source) {
36617 return source.subscribe(new MaterializeSubscriber(subscriber));
36618 };
36619 return MaterializeOperator;
36620}());
36621var MaterializeSubscriber = /*@__PURE__*/ (function (_super) {
36622 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MaterializeSubscriber, _super);
36623 function MaterializeSubscriber(destination) {
36624 return _super.call(this, destination) || this;
36625 }
36626 MaterializeSubscriber.prototype._next = function (value) {
36627 this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createNext(value));
36628 };
36629 MaterializeSubscriber.prototype._error = function (err) {
36630 var destination = this.destination;
36631 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createError(err));
36632 destination.complete();
36633 };
36634 MaterializeSubscriber.prototype._complete = function () {
36635 var destination = this.destination;
36636 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_1__.Notification.createComplete());
36637 destination.complete();
36638 };
36639 return MaterializeSubscriber;
36640}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
36641//# sourceMappingURL=materialize.js.map
36642
36643
36644/***/ }),
36645/* 332 */
36646/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36647
36648"use strict";
36649__webpack_require__.r(__webpack_exports__);
36650/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36651/* harmony export */ "max": () => (/* binding */ max)
36652/* harmony export */ });
36653/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(333);
36654/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
36655
36656function max(comparer) {
36657 var max = (typeof comparer === 'function')
36658 ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
36659 : function (x, y) { return x > y ? x : y; };
36660 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(max);
36661}
36662//# sourceMappingURL=max.js.map
36663
36664
36665/***/ }),
36666/* 333 */
36667/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36668
36669"use strict";
36670__webpack_require__.r(__webpack_exports__);
36671/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36672/* harmony export */ "reduce": () => (/* binding */ reduce)
36673/* harmony export */ });
36674/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(334);
36675/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(329);
36676/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(306);
36677/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(201);
36678/** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */
36679
36680
36681
36682
36683function reduce(accumulator, seed) {
36684 if (arguments.length >= 2) {
36685 return function reduceOperatorFunctionWithSeed(source) {
36686 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_0__.pipe)((0,_scan__WEBPACK_IMPORTED_MODULE_1__.scan)(accumulator, seed), (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1), (0,_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__.defaultIfEmpty)(seed))(source);
36687 };
36688 }
36689 return function reduceOperatorFunction(source) {
36690 return (0,_util_pipe__WEBPACK_IMPORTED_MODULE_0__.pipe)((0,_scan__WEBPACK_IMPORTED_MODULE_1__.scan)(function (acc, value, index) { return accumulator(acc, value, index + 1); }), (0,_takeLast__WEBPACK_IMPORTED_MODULE_2__.takeLast)(1))(source);
36691 };
36692}
36693//# sourceMappingURL=reduce.js.map
36694
36695
36696/***/ }),
36697/* 334 */
36698/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36699
36700"use strict";
36701__webpack_require__.r(__webpack_exports__);
36702/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36703/* harmony export */ "scan": () => (/* binding */ scan)
36704/* harmony export */ });
36705/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36706/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36707/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36708
36709
36710function scan(accumulator, seed) {
36711 var hasSeed = false;
36712 if (arguments.length >= 2) {
36713 hasSeed = true;
36714 }
36715 return function scanOperatorFunction(source) {
36716 return source.lift(new ScanOperator(accumulator, seed, hasSeed));
36717 };
36718}
36719var ScanOperator = /*@__PURE__*/ (function () {
36720 function ScanOperator(accumulator, seed, hasSeed) {
36721 if (hasSeed === void 0) {
36722 hasSeed = false;
36723 }
36724 this.accumulator = accumulator;
36725 this.seed = seed;
36726 this.hasSeed = hasSeed;
36727 }
36728 ScanOperator.prototype.call = function (subscriber, source) {
36729 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
36730 };
36731 return ScanOperator;
36732}());
36733var ScanSubscriber = /*@__PURE__*/ (function (_super) {
36734 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ScanSubscriber, _super);
36735 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
36736 var _this = _super.call(this, destination) || this;
36737 _this.accumulator = accumulator;
36738 _this._seed = _seed;
36739 _this.hasSeed = hasSeed;
36740 _this.index = 0;
36741 return _this;
36742 }
36743 Object.defineProperty(ScanSubscriber.prototype, "seed", {
36744 get: function () {
36745 return this._seed;
36746 },
36747 set: function (value) {
36748 this.hasSeed = true;
36749 this._seed = value;
36750 },
36751 enumerable: true,
36752 configurable: true
36753 });
36754 ScanSubscriber.prototype._next = function (value) {
36755 if (!this.hasSeed) {
36756 this.seed = value;
36757 this.destination.next(value);
36758 }
36759 else {
36760 return this._tryNext(value);
36761 }
36762 };
36763 ScanSubscriber.prototype._tryNext = function (value) {
36764 var index = this.index++;
36765 var result;
36766 try {
36767 result = this.accumulator(this.seed, value, index);
36768 }
36769 catch (err) {
36770 this.destination.error(err);
36771 }
36772 this.seed = result;
36773 this.destination.next(result);
36774 };
36775 return ScanSubscriber;
36776}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
36777//# sourceMappingURL=scan.js.map
36778
36779
36780/***/ }),
36781/* 335 */
36782/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36783
36784"use strict";
36785__webpack_require__.r(__webpack_exports__);
36786/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36787/* harmony export */ "merge": () => (/* binding */ merge)
36788/* harmony export */ });
36789/* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(276);
36790/** PURE_IMPORTS_START _observable_merge PURE_IMPORTS_END */
36791
36792function merge() {
36793 var observables = [];
36794 for (var _i = 0; _i < arguments.length; _i++) {
36795 observables[_i] = arguments[_i];
36796 }
36797 return function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__.merge.apply(void 0, [source].concat(observables))); };
36798}
36799//# sourceMappingURL=merge.js.map
36800
36801
36802/***/ }),
36803/* 336 */
36804/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36805
36806"use strict";
36807__webpack_require__.r(__webpack_exports__);
36808/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36809/* harmony export */ "mergeMapTo": () => (/* binding */ mergeMapTo)
36810/* harmony export */ });
36811/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(259);
36812/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
36813
36814function mergeMapTo(innerObservable, resultSelector, concurrent) {
36815 if (concurrent === void 0) {
36816 concurrent = Number.POSITIVE_INFINITY;
36817 }
36818 if (typeof resultSelector === 'function') {
36819 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(function () { return innerObservable; }, resultSelector, concurrent);
36820 }
36821 if (typeof resultSelector === 'number') {
36822 concurrent = resultSelector;
36823 }
36824 return (0,_mergeMap__WEBPACK_IMPORTED_MODULE_0__.mergeMap)(function () { return innerObservable; }, concurrent);
36825}
36826//# sourceMappingURL=mergeMapTo.js.map
36827
36828
36829/***/ }),
36830/* 337 */
36831/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36832
36833"use strict";
36834__webpack_require__.r(__webpack_exports__);
36835/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36836/* harmony export */ "mergeScan": () => (/* binding */ mergeScan),
36837/* harmony export */ "MergeScanOperator": () => (/* binding */ MergeScanOperator),
36838/* harmony export */ "MergeScanSubscriber": () => (/* binding */ MergeScanSubscriber)
36839/* harmony export */ });
36840/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
36841/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
36842/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
36843
36844
36845function mergeScan(accumulator, seed, concurrent) {
36846 if (concurrent === void 0) {
36847 concurrent = Number.POSITIVE_INFINITY;
36848 }
36849 return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
36850}
36851var MergeScanOperator = /*@__PURE__*/ (function () {
36852 function MergeScanOperator(accumulator, seed, concurrent) {
36853 this.accumulator = accumulator;
36854 this.seed = seed;
36855 this.concurrent = concurrent;
36856 }
36857 MergeScanOperator.prototype.call = function (subscriber, source) {
36858 return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
36859 };
36860 return MergeScanOperator;
36861}());
36862
36863var MergeScanSubscriber = /*@__PURE__*/ (function (_super) {
36864 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(MergeScanSubscriber, _super);
36865 function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
36866 var _this = _super.call(this, destination) || this;
36867 _this.accumulator = accumulator;
36868 _this.acc = acc;
36869 _this.concurrent = concurrent;
36870 _this.hasValue = false;
36871 _this.hasCompleted = false;
36872 _this.buffer = [];
36873 _this.active = 0;
36874 _this.index = 0;
36875 return _this;
36876 }
36877 MergeScanSubscriber.prototype._next = function (value) {
36878 if (this.active < this.concurrent) {
36879 var index = this.index++;
36880 var destination = this.destination;
36881 var ish = void 0;
36882 try {
36883 var accumulator = this.accumulator;
36884 ish = accumulator(this.acc, value, index);
36885 }
36886 catch (e) {
36887 return destination.error(e);
36888 }
36889 this.active++;
36890 this._innerSub(ish);
36891 }
36892 else {
36893 this.buffer.push(value);
36894 }
36895 };
36896 MergeScanSubscriber.prototype._innerSub = function (ish) {
36897 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this);
36898 var destination = this.destination;
36899 destination.add(innerSubscriber);
36900 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(ish, innerSubscriber);
36901 if (innerSubscription !== innerSubscriber) {
36902 destination.add(innerSubscription);
36903 }
36904 };
36905 MergeScanSubscriber.prototype._complete = function () {
36906 this.hasCompleted = true;
36907 if (this.active === 0 && this.buffer.length === 0) {
36908 if (this.hasValue === false) {
36909 this.destination.next(this.acc);
36910 }
36911 this.destination.complete();
36912 }
36913 this.unsubscribe();
36914 };
36915 MergeScanSubscriber.prototype.notifyNext = function (innerValue) {
36916 var destination = this.destination;
36917 this.acc = innerValue;
36918 this.hasValue = true;
36919 destination.next(innerValue);
36920 };
36921 MergeScanSubscriber.prototype.notifyComplete = function () {
36922 var buffer = this.buffer;
36923 this.active--;
36924 if (buffer.length > 0) {
36925 this._next(buffer.shift());
36926 }
36927 else if (this.active === 0 && this.hasCompleted) {
36928 if (this.hasValue === false) {
36929 this.destination.next(this.acc);
36930 }
36931 this.destination.complete();
36932 }
36933 };
36934 return MergeScanSubscriber;
36935}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
36936
36937//# sourceMappingURL=mergeScan.js.map
36938
36939
36940/***/ }),
36941/* 338 */
36942/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36943
36944"use strict";
36945__webpack_require__.r(__webpack_exports__);
36946/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36947/* harmony export */ "min": () => (/* binding */ min)
36948/* harmony export */ });
36949/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(333);
36950/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
36951
36952function min(comparer) {
36953 var min = (typeof comparer === 'function')
36954 ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
36955 : function (x, y) { return x < y ? x : y; };
36956 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(min);
36957}
36958//# sourceMappingURL=min.js.map
36959
36960
36961/***/ }),
36962/* 339 */
36963/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
36964
36965"use strict";
36966__webpack_require__.r(__webpack_exports__);
36967/* harmony export */ __webpack_require__.d(__webpack_exports__, {
36968/* harmony export */ "multicast": () => (/* binding */ multicast),
36969/* harmony export */ "MulticastOperator": () => (/* binding */ MulticastOperator)
36970/* harmony export */ });
36971/* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(203);
36972/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */
36973
36974function multicast(subjectOrSubjectFactory, selector) {
36975 return function multicastOperatorFunction(source) {
36976 var subjectFactory;
36977 if (typeof subjectOrSubjectFactory === 'function') {
36978 subjectFactory = subjectOrSubjectFactory;
36979 }
36980 else {
36981 subjectFactory = function subjectFactory() {
36982 return subjectOrSubjectFactory;
36983 };
36984 }
36985 if (typeof selector === 'function') {
36986 return source.lift(new MulticastOperator(subjectFactory, selector));
36987 }
36988 var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__.connectableObservableDescriptor);
36989 connectable.source = source;
36990 connectable.subjectFactory = subjectFactory;
36991 return connectable;
36992 };
36993}
36994var MulticastOperator = /*@__PURE__*/ (function () {
36995 function MulticastOperator(subjectFactory, selector) {
36996 this.subjectFactory = subjectFactory;
36997 this.selector = selector;
36998 }
36999 MulticastOperator.prototype.call = function (subscriber, source) {
37000 var selector = this.selector;
37001 var subject = this.subjectFactory();
37002 var subscription = selector(subject).subscribe(subscriber);
37003 subscription.add(source.subscribe(subject));
37004 return subscription;
37005 };
37006 return MulticastOperator;
37007}());
37008
37009//# sourceMappingURL=multicast.js.map
37010
37011
37012/***/ }),
37013/* 340 */
37014/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37015
37016"use strict";
37017__webpack_require__.r(__webpack_exports__);
37018/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37019/* harmony export */ "onErrorResumeNext": () => (/* binding */ onErrorResumeNext),
37020/* harmony export */ "onErrorResumeNextStatic": () => (/* binding */ onErrorResumeNextStatic)
37021/* harmony export */ });
37022/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37023/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(260);
37024/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
37025/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267);
37026/** PURE_IMPORTS_START tslib,_observable_from,_util_isArray,_innerSubscribe PURE_IMPORTS_END */
37027
37028
37029
37030
37031function onErrorResumeNext() {
37032 var nextSources = [];
37033 for (var _i = 0; _i < arguments.length; _i++) {
37034 nextSources[_i] = arguments[_i];
37035 }
37036 if (nextSources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(nextSources[0])) {
37037 nextSources = nextSources[0];
37038 }
37039 return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
37040}
37041function onErrorResumeNextStatic() {
37042 var nextSources = [];
37043 for (var _i = 0; _i < arguments.length; _i++) {
37044 nextSources[_i] = arguments[_i];
37045 }
37046 var source = undefined;
37047 if (nextSources.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_1__.isArray)(nextSources[0])) {
37048 nextSources = nextSources[0];
37049 }
37050 source = nextSources.shift();
37051 return (0,_observable_from__WEBPACK_IMPORTED_MODULE_2__.from)(source).lift(new OnErrorResumeNextOperator(nextSources));
37052}
37053var OnErrorResumeNextOperator = /*@__PURE__*/ (function () {
37054 function OnErrorResumeNextOperator(nextSources) {
37055 this.nextSources = nextSources;
37056 }
37057 OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
37058 return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
37059 };
37060 return OnErrorResumeNextOperator;
37061}());
37062var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) {
37063 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(OnErrorResumeNextSubscriber, _super);
37064 function OnErrorResumeNextSubscriber(destination, nextSources) {
37065 var _this = _super.call(this, destination) || this;
37066 _this.destination = destination;
37067 _this.nextSources = nextSources;
37068 return _this;
37069 }
37070 OnErrorResumeNextSubscriber.prototype.notifyError = function () {
37071 this.subscribeToNextSource();
37072 };
37073 OnErrorResumeNextSubscriber.prototype.notifyComplete = function () {
37074 this.subscribeToNextSource();
37075 };
37076 OnErrorResumeNextSubscriber.prototype._error = function (err) {
37077 this.subscribeToNextSource();
37078 this.unsubscribe();
37079 };
37080 OnErrorResumeNextSubscriber.prototype._complete = function () {
37081 this.subscribeToNextSource();
37082 this.unsubscribe();
37083 };
37084 OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
37085 var next = this.nextSources.shift();
37086 if (!!next) {
37087 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleInnerSubscriber(this);
37088 var destination = this.destination;
37089 destination.add(innerSubscriber);
37090 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.innerSubscribe)(next, innerSubscriber);
37091 if (innerSubscription !== innerSubscriber) {
37092 destination.add(innerSubscription);
37093 }
37094 }
37095 else {
37096 this.destination.complete();
37097 }
37098 };
37099 return OnErrorResumeNextSubscriber;
37100}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleOuterSubscriber));
37101//# sourceMappingURL=onErrorResumeNext.js.map
37102
37103
37104/***/ }),
37105/* 341 */
37106/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37107
37108"use strict";
37109__webpack_require__.r(__webpack_exports__);
37110/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37111/* harmony export */ "pairwise": () => (/* binding */ pairwise)
37112/* harmony export */ });
37113/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37114/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
37115/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
37116
37117
37118function pairwise() {
37119 return function (source) { return source.lift(new PairwiseOperator()); };
37120}
37121var PairwiseOperator = /*@__PURE__*/ (function () {
37122 function PairwiseOperator() {
37123 }
37124 PairwiseOperator.prototype.call = function (subscriber, source) {
37125 return source.subscribe(new PairwiseSubscriber(subscriber));
37126 };
37127 return PairwiseOperator;
37128}());
37129var PairwiseSubscriber = /*@__PURE__*/ (function (_super) {
37130 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(PairwiseSubscriber, _super);
37131 function PairwiseSubscriber(destination) {
37132 var _this = _super.call(this, destination) || this;
37133 _this.hasPrev = false;
37134 return _this;
37135 }
37136 PairwiseSubscriber.prototype._next = function (value) {
37137 var pair;
37138 if (this.hasPrev) {
37139 pair = [this.prev, value];
37140 }
37141 else {
37142 this.hasPrev = true;
37143 }
37144 this.prev = value;
37145 if (pair) {
37146 this.destination.next(pair);
37147 }
37148 };
37149 return PairwiseSubscriber;
37150}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
37151//# sourceMappingURL=pairwise.js.map
37152
37153
37154/***/ }),
37155/* 342 */
37156/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37157
37158"use strict";
37159__webpack_require__.r(__webpack_exports__);
37160/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37161/* harmony export */ "partition": () => (/* binding */ partition)
37162/* harmony export */ });
37163/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(282);
37164/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
37165/** PURE_IMPORTS_START _util_not,_filter PURE_IMPORTS_END */
37166
37167
37168function partition(predicate, thisArg) {
37169 return function (source) {
37170 return [
37171 (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)(predicate, thisArg)(source),
37172 (0,_filter__WEBPACK_IMPORTED_MODULE_0__.filter)((0,_util_not__WEBPACK_IMPORTED_MODULE_1__.not)(predicate, thisArg))(source)
37173 ];
37174 };
37175}
37176//# sourceMappingURL=partition.js.map
37177
37178
37179/***/ }),
37180/* 343 */
37181/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37182
37183"use strict";
37184__webpack_require__.r(__webpack_exports__);
37185/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37186/* harmony export */ "pluck": () => (/* binding */ pluck)
37187/* harmony export */ });
37188/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
37189/** PURE_IMPORTS_START _map PURE_IMPORTS_END */
37190
37191function pluck() {
37192 var properties = [];
37193 for (var _i = 0; _i < arguments.length; _i++) {
37194 properties[_i] = arguments[_i];
37195 }
37196 var length = properties.length;
37197 if (length === 0) {
37198 throw new Error('list of properties cannot be empty.');
37199 }
37200 return function (source) { return (0,_map__WEBPACK_IMPORTED_MODULE_0__.map)(plucker(properties, length))(source); };
37201}
37202function plucker(props, length) {
37203 var mapper = function (x) {
37204 var currentProp = x;
37205 for (var i = 0; i < length; i++) {
37206 var p = currentProp != null ? currentProp[props[i]] : undefined;
37207 if (p !== void 0) {
37208 currentProp = p;
37209 }
37210 else {
37211 return undefined;
37212 }
37213 }
37214 return currentProp;
37215 };
37216 return mapper;
37217}
37218//# sourceMappingURL=pluck.js.map
37219
37220
37221/***/ }),
37222/* 344 */
37223/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37224
37225"use strict";
37226__webpack_require__.r(__webpack_exports__);
37227/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37228/* harmony export */ "publish": () => (/* binding */ publish)
37229/* harmony export */ });
37230/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
37231/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(339);
37232/** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */
37233
37234
37235function publish(selector) {
37236 return selector ?
37237 (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(function () { return new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject(); }, selector) :
37238 (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject());
37239}
37240//# sourceMappingURL=publish.js.map
37241
37242
37243/***/ }),
37244/* 345 */
37245/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37246
37247"use strict";
37248__webpack_require__.r(__webpack_exports__);
37249/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37250/* harmony export */ "publishBehavior": () => (/* binding */ publishBehavior)
37251/* harmony export */ });
37252/* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
37253/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(339);
37254/** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */
37255
37256
37257function publishBehavior(value) {
37258 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_1__.BehaviorSubject(value))(source); };
37259}
37260//# sourceMappingURL=publishBehavior.js.map
37261
37262
37263/***/ }),
37264/* 346 */
37265/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37266
37267"use strict";
37268__webpack_require__.r(__webpack_exports__);
37269/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37270/* harmony export */ "publishLast": () => (/* binding */ publishLast)
37271/* harmony export */ });
37272/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
37273/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(339);
37274/** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */
37275
37276
37277function publishLast() {
37278 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_0__.multicast)(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__.AsyncSubject())(source); };
37279}
37280//# sourceMappingURL=publishLast.js.map
37281
37282
37283/***/ }),
37284/* 347 */
37285/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37286
37287"use strict";
37288__webpack_require__.r(__webpack_exports__);
37289/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37290/* harmony export */ "publishReplay": () => (/* binding */ publishReplay)
37291/* harmony export */ });
37292/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(210);
37293/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(339);
37294/** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */
37295
37296
37297function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
37298 if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
37299 scheduler = selectorOrScheduler;
37300 }
37301 var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
37302 var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__.ReplaySubject(bufferSize, windowTime, scheduler);
37303 return function (source) { return (0,_multicast__WEBPACK_IMPORTED_MODULE_1__.multicast)(function () { return subject; }, selector)(source); };
37304}
37305//# sourceMappingURL=publishReplay.js.map
37306
37307
37308/***/ }),
37309/* 348 */
37310/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37311
37312"use strict";
37313__webpack_require__.r(__webpack_exports__);
37314/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37315/* harmony export */ "race": () => (/* binding */ race)
37316/* harmony export */ });
37317/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(197);
37318/* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(283);
37319/** PURE_IMPORTS_START _util_isArray,_observable_race PURE_IMPORTS_END */
37320
37321
37322function race() {
37323 var observables = [];
37324 for (var _i = 0; _i < arguments.length; _i++) {
37325 observables[_i] = arguments[_i];
37326 }
37327 return function raceOperatorFunction(source) {
37328 if (observables.length === 1 && (0,_util_isArray__WEBPACK_IMPORTED_MODULE_0__.isArray)(observables[0])) {
37329 observables = observables[0];
37330 }
37331 return source.lift.call(_observable_race__WEBPACK_IMPORTED_MODULE_1__.race.apply(void 0, [source].concat(observables)));
37332 };
37333}
37334//# sourceMappingURL=race.js.map
37335
37336
37337/***/ }),
37338/* 349 */
37339/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37340
37341"use strict";
37342__webpack_require__.r(__webpack_exports__);
37343/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37344/* harmony export */ "repeat": () => (/* binding */ repeat)
37345/* harmony export */ });
37346/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37347/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
37348/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(219);
37349/** PURE_IMPORTS_START tslib,_Subscriber,_observable_empty PURE_IMPORTS_END */
37350
37351
37352
37353function repeat(count) {
37354 if (count === void 0) {
37355 count = -1;
37356 }
37357 return function (source) {
37358 if (count === 0) {
37359 return (0,_observable_empty__WEBPACK_IMPORTED_MODULE_1__.empty)();
37360 }
37361 else if (count < 0) {
37362 return source.lift(new RepeatOperator(-1, source));
37363 }
37364 else {
37365 return source.lift(new RepeatOperator(count - 1, source));
37366 }
37367 };
37368}
37369var RepeatOperator = /*@__PURE__*/ (function () {
37370 function RepeatOperator(count, source) {
37371 this.count = count;
37372 this.source = source;
37373 }
37374 RepeatOperator.prototype.call = function (subscriber, source) {
37375 return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
37376 };
37377 return RepeatOperator;
37378}());
37379var RepeatSubscriber = /*@__PURE__*/ (function (_super) {
37380 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RepeatSubscriber, _super);
37381 function RepeatSubscriber(destination, count, source) {
37382 var _this = _super.call(this, destination) || this;
37383 _this.count = count;
37384 _this.source = source;
37385 return _this;
37386 }
37387 RepeatSubscriber.prototype.complete = function () {
37388 if (!this.isStopped) {
37389 var _a = this, source = _a.source, count = _a.count;
37390 if (count === 0) {
37391 return _super.prototype.complete.call(this);
37392 }
37393 else if (count > -1) {
37394 this.count = count - 1;
37395 }
37396 source.subscribe(this._unsubscribeAndRecycle());
37397 }
37398 };
37399 return RepeatSubscriber;
37400}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
37401//# sourceMappingURL=repeat.js.map
37402
37403
37404/***/ }),
37405/* 350 */
37406/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37407
37408"use strict";
37409__webpack_require__.r(__webpack_exports__);
37410/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37411/* harmony export */ "repeatWhen": () => (/* binding */ repeatWhen)
37412/* harmony export */ });
37413/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37414/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
37415/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(267);
37416/** PURE_IMPORTS_START tslib,_Subject,_innerSubscribe PURE_IMPORTS_END */
37417
37418
37419
37420function repeatWhen(notifier) {
37421 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
37422}
37423var RepeatWhenOperator = /*@__PURE__*/ (function () {
37424 function RepeatWhenOperator(notifier) {
37425 this.notifier = notifier;
37426 }
37427 RepeatWhenOperator.prototype.call = function (subscriber, source) {
37428 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
37429 };
37430 return RepeatWhenOperator;
37431}());
37432var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
37433 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RepeatWhenSubscriber, _super);
37434 function RepeatWhenSubscriber(destination, notifier, source) {
37435 var _this = _super.call(this, destination) || this;
37436 _this.notifier = notifier;
37437 _this.source = source;
37438 _this.sourceIsBeingSubscribedTo = true;
37439 return _this;
37440 }
37441 RepeatWhenSubscriber.prototype.notifyNext = function () {
37442 this.sourceIsBeingSubscribedTo = true;
37443 this.source.subscribe(this);
37444 };
37445 RepeatWhenSubscriber.prototype.notifyComplete = function () {
37446 if (this.sourceIsBeingSubscribedTo === false) {
37447 return _super.prototype.complete.call(this);
37448 }
37449 };
37450 RepeatWhenSubscriber.prototype.complete = function () {
37451 this.sourceIsBeingSubscribedTo = false;
37452 if (!this.isStopped) {
37453 if (!this.retries) {
37454 this.subscribeToRetries();
37455 }
37456 if (!this.retriesSubscription || this.retriesSubscription.closed) {
37457 return _super.prototype.complete.call(this);
37458 }
37459 this._unsubscribeAndRecycle();
37460 this.notifications.next(undefined);
37461 }
37462 };
37463 RepeatWhenSubscriber.prototype._unsubscribe = function () {
37464 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
37465 if (notifications) {
37466 notifications.unsubscribe();
37467 this.notifications = undefined;
37468 }
37469 if (retriesSubscription) {
37470 retriesSubscription.unsubscribe();
37471 this.retriesSubscription = undefined;
37472 }
37473 this.retries = undefined;
37474 };
37475 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
37476 var _unsubscribe = this._unsubscribe;
37477 this._unsubscribe = null;
37478 _super.prototype._unsubscribeAndRecycle.call(this);
37479 this._unsubscribe = _unsubscribe;
37480 return this;
37481 };
37482 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
37483 this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
37484 var retries;
37485 try {
37486 var notifier = this.notifier;
37487 retries = notifier(this.notifications);
37488 }
37489 catch (e) {
37490 return _super.prototype.complete.call(this);
37491 }
37492 this.retries = retries;
37493 this.retriesSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.innerSubscribe)(retries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleInnerSubscriber(this));
37494 };
37495 return RepeatWhenSubscriber;
37496}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleOuterSubscriber));
37497//# sourceMappingURL=repeatWhen.js.map
37498
37499
37500/***/ }),
37501/* 351 */
37502/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37503
37504"use strict";
37505__webpack_require__.r(__webpack_exports__);
37506/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37507/* harmony export */ "retry": () => (/* binding */ retry)
37508/* harmony export */ });
37509/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37510/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
37511/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
37512
37513
37514function retry(count) {
37515 if (count === void 0) {
37516 count = -1;
37517 }
37518 return function (source) { return source.lift(new RetryOperator(count, source)); };
37519}
37520var RetryOperator = /*@__PURE__*/ (function () {
37521 function RetryOperator(count, source) {
37522 this.count = count;
37523 this.source = source;
37524 }
37525 RetryOperator.prototype.call = function (subscriber, source) {
37526 return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
37527 };
37528 return RetryOperator;
37529}());
37530var RetrySubscriber = /*@__PURE__*/ (function (_super) {
37531 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RetrySubscriber, _super);
37532 function RetrySubscriber(destination, count, source) {
37533 var _this = _super.call(this, destination) || this;
37534 _this.count = count;
37535 _this.source = source;
37536 return _this;
37537 }
37538 RetrySubscriber.prototype.error = function (err) {
37539 if (!this.isStopped) {
37540 var _a = this, source = _a.source, count = _a.count;
37541 if (count === 0) {
37542 return _super.prototype.error.call(this, err);
37543 }
37544 else if (count > -1) {
37545 this.count = count - 1;
37546 }
37547 source.subscribe(this._unsubscribeAndRecycle());
37548 }
37549 };
37550 return RetrySubscriber;
37551}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
37552//# sourceMappingURL=retry.js.map
37553
37554
37555/***/ }),
37556/* 352 */
37557/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37558
37559"use strict";
37560__webpack_require__.r(__webpack_exports__);
37561/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37562/* harmony export */ "retryWhen": () => (/* binding */ retryWhen)
37563/* harmony export */ });
37564/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37565/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
37566/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(267);
37567/** PURE_IMPORTS_START tslib,_Subject,_innerSubscribe PURE_IMPORTS_END */
37568
37569
37570
37571function retryWhen(notifier) {
37572 return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
37573}
37574var RetryWhenOperator = /*@__PURE__*/ (function () {
37575 function RetryWhenOperator(notifier, source) {
37576 this.notifier = notifier;
37577 this.source = source;
37578 }
37579 RetryWhenOperator.prototype.call = function (subscriber, source) {
37580 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
37581 };
37582 return RetryWhenOperator;
37583}());
37584var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) {
37585 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(RetryWhenSubscriber, _super);
37586 function RetryWhenSubscriber(destination, notifier, source) {
37587 var _this = _super.call(this, destination) || this;
37588 _this.notifier = notifier;
37589 _this.source = source;
37590 return _this;
37591 }
37592 RetryWhenSubscriber.prototype.error = function (err) {
37593 if (!this.isStopped) {
37594 var errors = this.errors;
37595 var retries = this.retries;
37596 var retriesSubscription = this.retriesSubscription;
37597 if (!retries) {
37598 errors = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
37599 try {
37600 var notifier = this.notifier;
37601 retries = notifier(errors);
37602 }
37603 catch (e) {
37604 return _super.prototype.error.call(this, e);
37605 }
37606 retriesSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.innerSubscribe)(retries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleInnerSubscriber(this));
37607 }
37608 else {
37609 this.errors = undefined;
37610 this.retriesSubscription = undefined;
37611 }
37612 this._unsubscribeAndRecycle();
37613 this.errors = errors;
37614 this.retries = retries;
37615 this.retriesSubscription = retriesSubscription;
37616 errors.next(err);
37617 }
37618 };
37619 RetryWhenSubscriber.prototype._unsubscribe = function () {
37620 var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
37621 if (errors) {
37622 errors.unsubscribe();
37623 this.errors = undefined;
37624 }
37625 if (retriesSubscription) {
37626 retriesSubscription.unsubscribe();
37627 this.retriesSubscription = undefined;
37628 }
37629 this.retries = undefined;
37630 };
37631 RetryWhenSubscriber.prototype.notifyNext = function () {
37632 var _unsubscribe = this._unsubscribe;
37633 this._unsubscribe = null;
37634 this._unsubscribeAndRecycle();
37635 this._unsubscribe = _unsubscribe;
37636 this.source.subscribe(this);
37637 };
37638 return RetryWhenSubscriber;
37639}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_2__.SimpleOuterSubscriber));
37640//# sourceMappingURL=retryWhen.js.map
37641
37642
37643/***/ }),
37644/* 353 */
37645/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37646
37647"use strict";
37648__webpack_require__.r(__webpack_exports__);
37649/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37650/* harmony export */ "sample": () => (/* binding */ sample)
37651/* harmony export */ });
37652/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37653/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
37654/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
37655
37656
37657function sample(notifier) {
37658 return function (source) { return source.lift(new SampleOperator(notifier)); };
37659}
37660var SampleOperator = /*@__PURE__*/ (function () {
37661 function SampleOperator(notifier) {
37662 this.notifier = notifier;
37663 }
37664 SampleOperator.prototype.call = function (subscriber, source) {
37665 var sampleSubscriber = new SampleSubscriber(subscriber);
37666 var subscription = source.subscribe(sampleSubscriber);
37667 subscription.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(this.notifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(sampleSubscriber)));
37668 return subscription;
37669 };
37670 return SampleOperator;
37671}());
37672var SampleSubscriber = /*@__PURE__*/ (function (_super) {
37673 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SampleSubscriber, _super);
37674 function SampleSubscriber() {
37675 var _this = _super !== null && _super.apply(this, arguments) || this;
37676 _this.hasValue = false;
37677 return _this;
37678 }
37679 SampleSubscriber.prototype._next = function (value) {
37680 this.value = value;
37681 this.hasValue = true;
37682 };
37683 SampleSubscriber.prototype.notifyNext = function () {
37684 this.emitValue();
37685 };
37686 SampleSubscriber.prototype.notifyComplete = function () {
37687 this.emitValue();
37688 };
37689 SampleSubscriber.prototype.emitValue = function () {
37690 if (this.hasValue) {
37691 this.hasValue = false;
37692 this.destination.next(this.value);
37693 }
37694 };
37695 return SampleSubscriber;
37696}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
37697//# sourceMappingURL=sample.js.map
37698
37699
37700/***/ }),
37701/* 354 */
37702/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37703
37704"use strict";
37705__webpack_require__.r(__webpack_exports__);
37706/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37707/* harmony export */ "sampleTime": () => (/* binding */ sampleTime)
37708/* harmony export */ });
37709/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37710/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
37711/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
37712/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
37713
37714
37715
37716function sampleTime(period, scheduler) {
37717 if (scheduler === void 0) {
37718 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
37719 }
37720 return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
37721}
37722var SampleTimeOperator = /*@__PURE__*/ (function () {
37723 function SampleTimeOperator(period, scheduler) {
37724 this.period = period;
37725 this.scheduler = scheduler;
37726 }
37727 SampleTimeOperator.prototype.call = function (subscriber, source) {
37728 return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
37729 };
37730 return SampleTimeOperator;
37731}());
37732var SampleTimeSubscriber = /*@__PURE__*/ (function (_super) {
37733 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SampleTimeSubscriber, _super);
37734 function SampleTimeSubscriber(destination, period, scheduler) {
37735 var _this = _super.call(this, destination) || this;
37736 _this.period = period;
37737 _this.scheduler = scheduler;
37738 _this.hasValue = false;
37739 _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
37740 return _this;
37741 }
37742 SampleTimeSubscriber.prototype._next = function (value) {
37743 this.lastValue = value;
37744 this.hasValue = true;
37745 };
37746 SampleTimeSubscriber.prototype.notifyNext = function () {
37747 if (this.hasValue) {
37748 this.hasValue = false;
37749 this.destination.next(this.lastValue);
37750 }
37751 };
37752 return SampleTimeSubscriber;
37753}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
37754function dispatchNotification(state) {
37755 var subscriber = state.subscriber, period = state.period;
37756 subscriber.notifyNext();
37757 this.schedule(state, period);
37758}
37759//# sourceMappingURL=sampleTime.js.map
37760
37761
37762/***/ }),
37763/* 355 */
37764/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37765
37766"use strict";
37767__webpack_require__.r(__webpack_exports__);
37768/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37769/* harmony export */ "sequenceEqual": () => (/* binding */ sequenceEqual),
37770/* harmony export */ "SequenceEqualOperator": () => (/* binding */ SequenceEqualOperator),
37771/* harmony export */ "SequenceEqualSubscriber": () => (/* binding */ SequenceEqualSubscriber)
37772/* harmony export */ });
37773/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37774/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
37775/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
37776
37777
37778function sequenceEqual(compareTo, comparator) {
37779 return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
37780}
37781var SequenceEqualOperator = /*@__PURE__*/ (function () {
37782 function SequenceEqualOperator(compareTo, comparator) {
37783 this.compareTo = compareTo;
37784 this.comparator = comparator;
37785 }
37786 SequenceEqualOperator.prototype.call = function (subscriber, source) {
37787 return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
37788 };
37789 return SequenceEqualOperator;
37790}());
37791
37792var SequenceEqualSubscriber = /*@__PURE__*/ (function (_super) {
37793 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SequenceEqualSubscriber, _super);
37794 function SequenceEqualSubscriber(destination, compareTo, comparator) {
37795 var _this = _super.call(this, destination) || this;
37796 _this.compareTo = compareTo;
37797 _this.comparator = comparator;
37798 _this._a = [];
37799 _this._b = [];
37800 _this._oneComplete = false;
37801 _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
37802 return _this;
37803 }
37804 SequenceEqualSubscriber.prototype._next = function (value) {
37805 if (this._oneComplete && this._b.length === 0) {
37806 this.emit(false);
37807 }
37808 else {
37809 this._a.push(value);
37810 this.checkValues();
37811 }
37812 };
37813 SequenceEqualSubscriber.prototype._complete = function () {
37814 if (this._oneComplete) {
37815 this.emit(this._a.length === 0 && this._b.length === 0);
37816 }
37817 else {
37818 this._oneComplete = true;
37819 }
37820 this.unsubscribe();
37821 };
37822 SequenceEqualSubscriber.prototype.checkValues = function () {
37823 var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
37824 while (_a.length > 0 && _b.length > 0) {
37825 var a = _a.shift();
37826 var b = _b.shift();
37827 var areEqual = false;
37828 try {
37829 areEqual = comparator ? comparator(a, b) : a === b;
37830 }
37831 catch (e) {
37832 this.destination.error(e);
37833 }
37834 if (!areEqual) {
37835 this.emit(false);
37836 }
37837 }
37838 };
37839 SequenceEqualSubscriber.prototype.emit = function (value) {
37840 var destination = this.destination;
37841 destination.next(value);
37842 destination.complete();
37843 };
37844 SequenceEqualSubscriber.prototype.nextB = function (value) {
37845 if (this._oneComplete && this._a.length === 0) {
37846 this.emit(false);
37847 }
37848 else {
37849 this._b.push(value);
37850 this.checkValues();
37851 }
37852 };
37853 SequenceEqualSubscriber.prototype.completeB = function () {
37854 if (this._oneComplete) {
37855 this.emit(this._a.length === 0 && this._b.length === 0);
37856 }
37857 else {
37858 this._oneComplete = true;
37859 }
37860 };
37861 return SequenceEqualSubscriber;
37862}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
37863
37864var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) {
37865 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SequenceEqualCompareToSubscriber, _super);
37866 function SequenceEqualCompareToSubscriber(destination, parent) {
37867 var _this = _super.call(this, destination) || this;
37868 _this.parent = parent;
37869 return _this;
37870 }
37871 SequenceEqualCompareToSubscriber.prototype._next = function (value) {
37872 this.parent.nextB(value);
37873 };
37874 SequenceEqualCompareToSubscriber.prototype._error = function (err) {
37875 this.parent.error(err);
37876 this.unsubscribe();
37877 };
37878 SequenceEqualCompareToSubscriber.prototype._complete = function () {
37879 this.parent.completeB();
37880 this.unsubscribe();
37881 };
37882 return SequenceEqualCompareToSubscriber;
37883}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
37884//# sourceMappingURL=sequenceEqual.js.map
37885
37886
37887/***/ }),
37888/* 356 */
37889/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37890
37891"use strict";
37892__webpack_require__.r(__webpack_exports__);
37893/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37894/* harmony export */ "share": () => (/* binding */ share)
37895/* harmony export */ });
37896/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(339);
37897/* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
37898/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(205);
37899/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */
37900
37901
37902
37903function shareSubjectFactory() {
37904 return new _Subject__WEBPACK_IMPORTED_MODULE_0__.Subject();
37905}
37906function share() {
37907 return function (source) { return (0,_refCount__WEBPACK_IMPORTED_MODULE_1__.refCount)()((0,_multicast__WEBPACK_IMPORTED_MODULE_2__.multicast)(shareSubjectFactory)(source)); };
37908}
37909//# sourceMappingURL=share.js.map
37910
37911
37912/***/ }),
37913/* 357 */
37914/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37915
37916"use strict";
37917__webpack_require__.r(__webpack_exports__);
37918/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37919/* harmony export */ "shareReplay": () => (/* binding */ shareReplay)
37920/* harmony export */ });
37921/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(210);
37922/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */
37923
37924function shareReplay(configOrBufferSize, windowTime, scheduler) {
37925 var config;
37926 if (configOrBufferSize && typeof configOrBufferSize === 'object') {
37927 config = configOrBufferSize;
37928 }
37929 else {
37930 config = {
37931 bufferSize: configOrBufferSize,
37932 windowTime: windowTime,
37933 refCount: false,
37934 scheduler: scheduler,
37935 };
37936 }
37937 return function (source) { return source.lift(shareReplayOperator(config)); };
37938}
37939function shareReplayOperator(_a) {
37940 var _b = _a.bufferSize, bufferSize = _b === void 0 ? Number.POSITIVE_INFINITY : _b, _c = _a.windowTime, windowTime = _c === void 0 ? Number.POSITIVE_INFINITY : _c, useRefCount = _a.refCount, scheduler = _a.scheduler;
37941 var subject;
37942 var refCount = 0;
37943 var subscription;
37944 var hasError = false;
37945 var isComplete = false;
37946 return function shareReplayOperation(source) {
37947 refCount++;
37948 var innerSub;
37949 if (!subject || hasError) {
37950 hasError = false;
37951 subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__.ReplaySubject(bufferSize, windowTime, scheduler);
37952 innerSub = subject.subscribe(this);
37953 subscription = source.subscribe({
37954 next: function (value) {
37955 subject.next(value);
37956 },
37957 error: function (err) {
37958 hasError = true;
37959 subject.error(err);
37960 },
37961 complete: function () {
37962 isComplete = true;
37963 subscription = undefined;
37964 subject.complete();
37965 },
37966 });
37967 if (isComplete) {
37968 subscription = undefined;
37969 }
37970 }
37971 else {
37972 innerSub = subject.subscribe(this);
37973 }
37974 this.add(function () {
37975 refCount--;
37976 innerSub.unsubscribe();
37977 innerSub = undefined;
37978 if (subscription && !isComplete && useRefCount && refCount === 0) {
37979 subscription.unsubscribe();
37980 subscription = undefined;
37981 subject = undefined;
37982 }
37983 });
37984 };
37985}
37986//# sourceMappingURL=shareReplay.js.map
37987
37988
37989/***/ }),
37990/* 358 */
37991/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
37992
37993"use strict";
37994__webpack_require__.r(__webpack_exports__);
37995/* harmony export */ __webpack_require__.d(__webpack_exports__, {
37996/* harmony export */ "single": () => (/* binding */ single)
37997/* harmony export */ });
37998/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
37999/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
38000/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(240);
38001/** PURE_IMPORTS_START tslib,_Subscriber,_util_EmptyError PURE_IMPORTS_END */
38002
38003
38004
38005function single(predicate) {
38006 return function (source) { return source.lift(new SingleOperator(predicate, source)); };
38007}
38008var SingleOperator = /*@__PURE__*/ (function () {
38009 function SingleOperator(predicate, source) {
38010 this.predicate = predicate;
38011 this.source = source;
38012 }
38013 SingleOperator.prototype.call = function (subscriber, source) {
38014 return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
38015 };
38016 return SingleOperator;
38017}());
38018var SingleSubscriber = /*@__PURE__*/ (function (_super) {
38019 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SingleSubscriber, _super);
38020 function SingleSubscriber(destination, predicate, source) {
38021 var _this = _super.call(this, destination) || this;
38022 _this.predicate = predicate;
38023 _this.source = source;
38024 _this.seenValue = false;
38025 _this.index = 0;
38026 return _this;
38027 }
38028 SingleSubscriber.prototype.applySingleValue = function (value) {
38029 if (this.seenValue) {
38030 this.destination.error('Sequence contains more than one element');
38031 }
38032 else {
38033 this.seenValue = true;
38034 this.singleValue = value;
38035 }
38036 };
38037 SingleSubscriber.prototype._next = function (value) {
38038 var index = this.index++;
38039 if (this.predicate) {
38040 this.tryNext(value, index);
38041 }
38042 else {
38043 this.applySingleValue(value);
38044 }
38045 };
38046 SingleSubscriber.prototype.tryNext = function (value, index) {
38047 try {
38048 if (this.predicate(value, index, this.source)) {
38049 this.applySingleValue(value);
38050 }
38051 }
38052 catch (err) {
38053 this.destination.error(err);
38054 }
38055 };
38056 SingleSubscriber.prototype._complete = function () {
38057 var destination = this.destination;
38058 if (this.index > 0) {
38059 destination.next(this.seenValue ? this.singleValue : undefined);
38060 destination.complete();
38061 }
38062 else {
38063 destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__.EmptyError);
38064 }
38065 };
38066 return SingleSubscriber;
38067}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
38068//# sourceMappingURL=single.js.map
38069
38070
38071/***/ }),
38072/* 359 */
38073/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38074
38075"use strict";
38076__webpack_require__.r(__webpack_exports__);
38077/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38078/* harmony export */ "skip": () => (/* binding */ skip)
38079/* harmony export */ });
38080/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38081/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
38082/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
38083
38084
38085function skip(count) {
38086 return function (source) { return source.lift(new SkipOperator(count)); };
38087}
38088var SkipOperator = /*@__PURE__*/ (function () {
38089 function SkipOperator(total) {
38090 this.total = total;
38091 }
38092 SkipOperator.prototype.call = function (subscriber, source) {
38093 return source.subscribe(new SkipSubscriber(subscriber, this.total));
38094 };
38095 return SkipOperator;
38096}());
38097var SkipSubscriber = /*@__PURE__*/ (function (_super) {
38098 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipSubscriber, _super);
38099 function SkipSubscriber(destination, total) {
38100 var _this = _super.call(this, destination) || this;
38101 _this.total = total;
38102 _this.count = 0;
38103 return _this;
38104 }
38105 SkipSubscriber.prototype._next = function (x) {
38106 if (++this.count > this.total) {
38107 this.destination.next(x);
38108 }
38109 };
38110 return SkipSubscriber;
38111}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
38112//# sourceMappingURL=skip.js.map
38113
38114
38115/***/ }),
38116/* 360 */
38117/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38118
38119"use strict";
38120__webpack_require__.r(__webpack_exports__);
38121/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38122/* harmony export */ "skipLast": () => (/* binding */ skipLast)
38123/* harmony export */ });
38124/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38125/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
38126/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(239);
38127/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError PURE_IMPORTS_END */
38128
38129
38130
38131function skipLast(count) {
38132 return function (source) { return source.lift(new SkipLastOperator(count)); };
38133}
38134var SkipLastOperator = /*@__PURE__*/ (function () {
38135 function SkipLastOperator(_skipCount) {
38136 this._skipCount = _skipCount;
38137 if (this._skipCount < 0) {
38138 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_1__.ArgumentOutOfRangeError;
38139 }
38140 }
38141 SkipLastOperator.prototype.call = function (subscriber, source) {
38142 if (this._skipCount === 0) {
38143 return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber(subscriber));
38144 }
38145 else {
38146 return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
38147 }
38148 };
38149 return SkipLastOperator;
38150}());
38151var SkipLastSubscriber = /*@__PURE__*/ (function (_super) {
38152 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipLastSubscriber, _super);
38153 function SkipLastSubscriber(destination, _skipCount) {
38154 var _this = _super.call(this, destination) || this;
38155 _this._skipCount = _skipCount;
38156 _this._count = 0;
38157 _this._ring = new Array(_skipCount);
38158 return _this;
38159 }
38160 SkipLastSubscriber.prototype._next = function (value) {
38161 var skipCount = this._skipCount;
38162 var count = this._count++;
38163 if (count < skipCount) {
38164 this._ring[count] = value;
38165 }
38166 else {
38167 var currentIndex = count % skipCount;
38168 var ring = this._ring;
38169 var oldValue = ring[currentIndex];
38170 ring[currentIndex] = value;
38171 this.destination.next(oldValue);
38172 }
38173 };
38174 return SkipLastSubscriber;
38175}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
38176//# sourceMappingURL=skipLast.js.map
38177
38178
38179/***/ }),
38180/* 361 */
38181/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38182
38183"use strict";
38184__webpack_require__.r(__webpack_exports__);
38185/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38186/* harmony export */ "skipUntil": () => (/* binding */ skipUntil)
38187/* harmony export */ });
38188/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38189/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
38190/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
38191
38192
38193function skipUntil(notifier) {
38194 return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
38195}
38196var SkipUntilOperator = /*@__PURE__*/ (function () {
38197 function SkipUntilOperator(notifier) {
38198 this.notifier = notifier;
38199 }
38200 SkipUntilOperator.prototype.call = function (destination, source) {
38201 return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
38202 };
38203 return SkipUntilOperator;
38204}());
38205var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) {
38206 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipUntilSubscriber, _super);
38207 function SkipUntilSubscriber(destination, notifier) {
38208 var _this = _super.call(this, destination) || this;
38209 _this.hasValue = false;
38210 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(_this);
38211 _this.add(innerSubscriber);
38212 _this.innerSubscription = innerSubscriber;
38213 var innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(notifier, innerSubscriber);
38214 if (innerSubscription !== innerSubscriber) {
38215 _this.add(innerSubscription);
38216 _this.innerSubscription = innerSubscription;
38217 }
38218 return _this;
38219 }
38220 SkipUntilSubscriber.prototype._next = function (value) {
38221 if (this.hasValue) {
38222 _super.prototype._next.call(this, value);
38223 }
38224 };
38225 SkipUntilSubscriber.prototype.notifyNext = function () {
38226 this.hasValue = true;
38227 if (this.innerSubscription) {
38228 this.innerSubscription.unsubscribe();
38229 }
38230 };
38231 SkipUntilSubscriber.prototype.notifyComplete = function () {
38232 };
38233 return SkipUntilSubscriber;
38234}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
38235//# sourceMappingURL=skipUntil.js.map
38236
38237
38238/***/ }),
38239/* 362 */
38240/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38241
38242"use strict";
38243__webpack_require__.r(__webpack_exports__);
38244/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38245/* harmony export */ "skipWhile": () => (/* binding */ skipWhile)
38246/* harmony export */ });
38247/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38248/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
38249/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
38250
38251
38252function skipWhile(predicate) {
38253 return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
38254}
38255var SkipWhileOperator = /*@__PURE__*/ (function () {
38256 function SkipWhileOperator(predicate) {
38257 this.predicate = predicate;
38258 }
38259 SkipWhileOperator.prototype.call = function (subscriber, source) {
38260 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
38261 };
38262 return SkipWhileOperator;
38263}());
38264var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) {
38265 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SkipWhileSubscriber, _super);
38266 function SkipWhileSubscriber(destination, predicate) {
38267 var _this = _super.call(this, destination) || this;
38268 _this.predicate = predicate;
38269 _this.skipping = true;
38270 _this.index = 0;
38271 return _this;
38272 }
38273 SkipWhileSubscriber.prototype._next = function (value) {
38274 var destination = this.destination;
38275 if (this.skipping) {
38276 this.tryCallPredicate(value);
38277 }
38278 if (!this.skipping) {
38279 destination.next(value);
38280 }
38281 };
38282 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
38283 try {
38284 var result = this.predicate(value, this.index++);
38285 this.skipping = Boolean(result);
38286 }
38287 catch (err) {
38288 this.destination.error(err);
38289 }
38290 };
38291 return SkipWhileSubscriber;
38292}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
38293//# sourceMappingURL=skipWhile.js.map
38294
38295
38296/***/ }),
38297/* 363 */
38298/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38299
38300"use strict";
38301__webpack_require__.r(__webpack_exports__);
38302/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38303/* harmony export */ "startWith": () => (/* binding */ startWith)
38304/* harmony export */ });
38305/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(256);
38306/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(214);
38307/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */
38308
38309
38310function startWith() {
38311 var array = [];
38312 for (var _i = 0; _i < arguments.length; _i++) {
38313 array[_i] = arguments[_i];
38314 }
38315 var scheduler = array[array.length - 1];
38316 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__.isScheduler)(scheduler)) {
38317 array.pop();
38318 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_1__.concat)(array, source, scheduler); };
38319 }
38320 else {
38321 return function (source) { return (0,_observable_concat__WEBPACK_IMPORTED_MODULE_1__.concat)(array, source); };
38322 }
38323}
38324//# sourceMappingURL=startWith.js.map
38325
38326
38327/***/ }),
38328/* 364 */
38329/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38330
38331"use strict";
38332__webpack_require__.r(__webpack_exports__);
38333/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38334/* harmony export */ "subscribeOn": () => (/* binding */ subscribeOn)
38335/* harmony export */ });
38336/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(365);
38337/** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */
38338
38339function subscribeOn(scheduler, delay) {
38340 if (delay === void 0) {
38341 delay = 0;
38342 }
38343 return function subscribeOnOperatorFunction(source) {
38344 return source.lift(new SubscribeOnOperator(scheduler, delay));
38345 };
38346}
38347var SubscribeOnOperator = /*@__PURE__*/ (function () {
38348 function SubscribeOnOperator(scheduler, delay) {
38349 this.scheduler = scheduler;
38350 this.delay = delay;
38351 }
38352 SubscribeOnOperator.prototype.call = function (subscriber, source) {
38353 return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__.SubscribeOnObservable(source, this.delay, this.scheduler).subscribe(subscriber);
38354 };
38355 return SubscribeOnOperator;
38356}());
38357//# sourceMappingURL=subscribeOn.js.map
38358
38359
38360/***/ }),
38361/* 365 */
38362/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38363
38364"use strict";
38365__webpack_require__.r(__webpack_exports__);
38366/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38367/* harmony export */ "SubscribeOnObservable": () => (/* binding */ SubscribeOnObservable)
38368/* harmony export */ });
38369/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38370/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
38371/* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
38372/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(275);
38373/** PURE_IMPORTS_START tslib,_Observable,_scheduler_asap,_util_isNumeric PURE_IMPORTS_END */
38374
38375
38376
38377
38378var SubscribeOnObservable = /*@__PURE__*/ (function (_super) {
38379 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SubscribeOnObservable, _super);
38380 function SubscribeOnObservable(source, delayTime, scheduler) {
38381 if (delayTime === void 0) {
38382 delayTime = 0;
38383 }
38384 if (scheduler === void 0) {
38385 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
38386 }
38387 var _this = _super.call(this) || this;
38388 _this.source = source;
38389 _this.delayTime = delayTime;
38390 _this.scheduler = scheduler;
38391 if (!(0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__.isNumeric)(delayTime) || delayTime < 0) {
38392 _this.delayTime = 0;
38393 }
38394 if (!scheduler || typeof scheduler.schedule !== 'function') {
38395 _this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
38396 }
38397 return _this;
38398 }
38399 SubscribeOnObservable.create = function (source, delay, scheduler) {
38400 if (delay === void 0) {
38401 delay = 0;
38402 }
38403 if (scheduler === void 0) {
38404 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_1__.asap;
38405 }
38406 return new SubscribeOnObservable(source, delay, scheduler);
38407 };
38408 SubscribeOnObservable.dispatch = function (arg) {
38409 var source = arg.source, subscriber = arg.subscriber;
38410 return this.add(source.subscribe(subscriber));
38411 };
38412 SubscribeOnObservable.prototype._subscribe = function (subscriber) {
38413 var delay = this.delayTime;
38414 var source = this.source;
38415 var scheduler = this.scheduler;
38416 return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
38417 source: source, subscriber: subscriber
38418 });
38419 };
38420 return SubscribeOnObservable;
38421}(_Observable__WEBPACK_IMPORTED_MODULE_3__.Observable));
38422
38423//# sourceMappingURL=SubscribeOnObservable.js.map
38424
38425
38426/***/ }),
38427/* 366 */
38428/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38429
38430"use strict";
38431__webpack_require__.r(__webpack_exports__);
38432/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38433/* harmony export */ "switchAll": () => (/* binding */ switchAll)
38434/* harmony export */ });
38435/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(367);
38436/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
38437/** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */
38438
38439
38440function switchAll() {
38441 return (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(_util_identity__WEBPACK_IMPORTED_MODULE_1__.identity);
38442}
38443//# sourceMappingURL=switchAll.js.map
38444
38445
38446/***/ }),
38447/* 367 */
38448/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38449
38450"use strict";
38451__webpack_require__.r(__webpack_exports__);
38452/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38453/* harmony export */ "switchMap": () => (/* binding */ switchMap)
38454/* harmony export */ });
38455/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38456/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(243);
38457/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(260);
38458/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267);
38459/** PURE_IMPORTS_START tslib,_map,_observable_from,_innerSubscribe PURE_IMPORTS_END */
38460
38461
38462
38463
38464function switchMap(project, resultSelector) {
38465 if (typeof resultSelector === 'function') {
38466 return function (source) { return source.pipe(switchMap(function (a, i) { return (0,_observable_from__WEBPACK_IMPORTED_MODULE_1__.from)(project(a, i)).pipe((0,_map__WEBPACK_IMPORTED_MODULE_2__.map)(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
38467 }
38468 return function (source) { return source.lift(new SwitchMapOperator(project)); };
38469}
38470var SwitchMapOperator = /*@__PURE__*/ (function () {
38471 function SwitchMapOperator(project) {
38472 this.project = project;
38473 }
38474 SwitchMapOperator.prototype.call = function (subscriber, source) {
38475 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
38476 };
38477 return SwitchMapOperator;
38478}());
38479var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {
38480 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(SwitchMapSubscriber, _super);
38481 function SwitchMapSubscriber(destination, project) {
38482 var _this = _super.call(this, destination) || this;
38483 _this.project = project;
38484 _this.index = 0;
38485 return _this;
38486 }
38487 SwitchMapSubscriber.prototype._next = function (value) {
38488 var result;
38489 var index = this.index++;
38490 try {
38491 result = this.project(value, index);
38492 }
38493 catch (error) {
38494 this.destination.error(error);
38495 return;
38496 }
38497 this._innerSub(result);
38498 };
38499 SwitchMapSubscriber.prototype._innerSub = function (result) {
38500 var innerSubscription = this.innerSubscription;
38501 if (innerSubscription) {
38502 innerSubscription.unsubscribe();
38503 }
38504 var innerSubscriber = new _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleInnerSubscriber(this);
38505 var destination = this.destination;
38506 destination.add(innerSubscriber);
38507 this.innerSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.innerSubscribe)(result, innerSubscriber);
38508 if (this.innerSubscription !== innerSubscriber) {
38509 destination.add(this.innerSubscription);
38510 }
38511 };
38512 SwitchMapSubscriber.prototype._complete = function () {
38513 var innerSubscription = this.innerSubscription;
38514 if (!innerSubscription || innerSubscription.closed) {
38515 _super.prototype._complete.call(this);
38516 }
38517 this.unsubscribe();
38518 };
38519 SwitchMapSubscriber.prototype._unsubscribe = function () {
38520 this.innerSubscription = undefined;
38521 };
38522 SwitchMapSubscriber.prototype.notifyComplete = function () {
38523 this.innerSubscription = undefined;
38524 if (this.isStopped) {
38525 _super.prototype._complete.call(this);
38526 }
38527 };
38528 SwitchMapSubscriber.prototype.notifyNext = function (innerValue) {
38529 this.destination.next(innerValue);
38530 };
38531 return SwitchMapSubscriber;
38532}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleOuterSubscriber));
38533//# sourceMappingURL=switchMap.js.map
38534
38535
38536/***/ }),
38537/* 368 */
38538/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38539
38540"use strict";
38541__webpack_require__.r(__webpack_exports__);
38542/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38543/* harmony export */ "switchMapTo": () => (/* binding */ switchMapTo)
38544/* harmony export */ });
38545/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(367);
38546/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */
38547
38548function switchMapTo(innerObservable, resultSelector) {
38549 return resultSelector ? (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(function () { return innerObservable; }, resultSelector) : (0,_switchMap__WEBPACK_IMPORTED_MODULE_0__.switchMap)(function () { return innerObservable; });
38550}
38551//# sourceMappingURL=switchMapTo.js.map
38552
38553
38554/***/ }),
38555/* 369 */
38556/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38557
38558"use strict";
38559__webpack_require__.r(__webpack_exports__);
38560/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38561/* harmony export */ "takeUntil": () => (/* binding */ takeUntil)
38562/* harmony export */ });
38563/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38564/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
38565/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
38566
38567
38568function takeUntil(notifier) {
38569 return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
38570}
38571var TakeUntilOperator = /*@__PURE__*/ (function () {
38572 function TakeUntilOperator(notifier) {
38573 this.notifier = notifier;
38574 }
38575 TakeUntilOperator.prototype.call = function (subscriber, source) {
38576 var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
38577 var notifierSubscription = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(this.notifier, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(takeUntilSubscriber));
38578 if (notifierSubscription && !takeUntilSubscriber.seenValue) {
38579 takeUntilSubscriber.add(notifierSubscription);
38580 return source.subscribe(takeUntilSubscriber);
38581 }
38582 return takeUntilSubscriber;
38583 };
38584 return TakeUntilOperator;
38585}());
38586var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {
38587 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeUntilSubscriber, _super);
38588 function TakeUntilSubscriber(destination) {
38589 var _this = _super.call(this, destination) || this;
38590 _this.seenValue = false;
38591 return _this;
38592 }
38593 TakeUntilSubscriber.prototype.notifyNext = function () {
38594 this.seenValue = true;
38595 this.complete();
38596 };
38597 TakeUntilSubscriber.prototype.notifyComplete = function () {
38598 };
38599 return TakeUntilSubscriber;
38600}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
38601//# sourceMappingURL=takeUntil.js.map
38602
38603
38604/***/ }),
38605/* 370 */
38606/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38607
38608"use strict";
38609__webpack_require__.r(__webpack_exports__);
38610/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38611/* harmony export */ "takeWhile": () => (/* binding */ takeWhile)
38612/* harmony export */ });
38613/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38614/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
38615/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
38616
38617
38618function takeWhile(predicate, inclusive) {
38619 if (inclusive === void 0) {
38620 inclusive = false;
38621 }
38622 return function (source) {
38623 return source.lift(new TakeWhileOperator(predicate, inclusive));
38624 };
38625}
38626var TakeWhileOperator = /*@__PURE__*/ (function () {
38627 function TakeWhileOperator(predicate, inclusive) {
38628 this.predicate = predicate;
38629 this.inclusive = inclusive;
38630 }
38631 TakeWhileOperator.prototype.call = function (subscriber, source) {
38632 return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
38633 };
38634 return TakeWhileOperator;
38635}());
38636var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) {
38637 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TakeWhileSubscriber, _super);
38638 function TakeWhileSubscriber(destination, predicate, inclusive) {
38639 var _this = _super.call(this, destination) || this;
38640 _this.predicate = predicate;
38641 _this.inclusive = inclusive;
38642 _this.index = 0;
38643 return _this;
38644 }
38645 TakeWhileSubscriber.prototype._next = function (value) {
38646 var destination = this.destination;
38647 var result;
38648 try {
38649 result = this.predicate(value, this.index++);
38650 }
38651 catch (err) {
38652 destination.error(err);
38653 return;
38654 }
38655 this.nextOrComplete(value, result);
38656 };
38657 TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
38658 var destination = this.destination;
38659 if (Boolean(predicateResult)) {
38660 destination.next(value);
38661 }
38662 else {
38663 if (this.inclusive) {
38664 destination.next(value);
38665 }
38666 destination.complete();
38667 }
38668 };
38669 return TakeWhileSubscriber;
38670}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__.Subscriber));
38671//# sourceMappingURL=takeWhile.js.map
38672
38673
38674/***/ }),
38675/* 371 */
38676/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38677
38678"use strict";
38679__webpack_require__.r(__webpack_exports__);
38680/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38681/* harmony export */ "tap": () => (/* binding */ tap)
38682/* harmony export */ });
38683/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38684/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(188);
38685/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(237);
38686/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
38687/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */
38688
38689
38690
38691
38692function tap(nextOrObserver, error, complete) {
38693 return function tapOperatorFunction(source) {
38694 return source.lift(new DoOperator(nextOrObserver, error, complete));
38695 };
38696}
38697var DoOperator = /*@__PURE__*/ (function () {
38698 function DoOperator(nextOrObserver, error, complete) {
38699 this.nextOrObserver = nextOrObserver;
38700 this.error = error;
38701 this.complete = complete;
38702 }
38703 DoOperator.prototype.call = function (subscriber, source) {
38704 return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
38705 };
38706 return DoOperator;
38707}());
38708var TapSubscriber = /*@__PURE__*/ (function (_super) {
38709 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TapSubscriber, _super);
38710 function TapSubscriber(destination, observerOrNext, error, complete) {
38711 var _this = _super.call(this, destination) || this;
38712 _this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38713 _this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38714 _this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38715 _this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38716 _this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38717 if ((0,_util_isFunction__WEBPACK_IMPORTED_MODULE_2__.isFunction)(observerOrNext)) {
38718 _this._context = _this;
38719 _this._tapNext = observerOrNext;
38720 }
38721 else if (observerOrNext) {
38722 _this._context = observerOrNext;
38723 _this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38724 _this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38725 _this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_1__.noop;
38726 }
38727 return _this;
38728 }
38729 TapSubscriber.prototype._next = function (value) {
38730 try {
38731 this._tapNext.call(this._context, value);
38732 }
38733 catch (err) {
38734 this.destination.error(err);
38735 return;
38736 }
38737 this.destination.next(value);
38738 };
38739 TapSubscriber.prototype._error = function (err) {
38740 try {
38741 this._tapError.call(this._context, err);
38742 }
38743 catch (err) {
38744 this.destination.error(err);
38745 return;
38746 }
38747 this.destination.error(err);
38748 };
38749 TapSubscriber.prototype._complete = function () {
38750 try {
38751 this._tapComplete.call(this._context);
38752 }
38753 catch (err) {
38754 this.destination.error(err);
38755 return;
38756 }
38757 return this.destination.complete();
38758 };
38759 return TapSubscriber;
38760}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
38761//# sourceMappingURL=tap.js.map
38762
38763
38764/***/ }),
38765/* 372 */
38766/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38767
38768"use strict";
38769__webpack_require__.r(__webpack_exports__);
38770/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38771/* harmony export */ "defaultThrottleConfig": () => (/* binding */ defaultThrottleConfig),
38772/* harmony export */ "throttle": () => (/* binding */ throttle)
38773/* harmony export */ });
38774/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38775/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
38776/** PURE_IMPORTS_START tslib,_innerSubscribe PURE_IMPORTS_END */
38777
38778
38779var defaultThrottleConfig = {
38780 leading: true,
38781 trailing: false
38782};
38783function throttle(durationSelector, config) {
38784 if (config === void 0) {
38785 config = defaultThrottleConfig;
38786 }
38787 return function (source) { return source.lift(new ThrottleOperator(durationSelector, !!config.leading, !!config.trailing)); };
38788}
38789var ThrottleOperator = /*@__PURE__*/ (function () {
38790 function ThrottleOperator(durationSelector, leading, trailing) {
38791 this.durationSelector = durationSelector;
38792 this.leading = leading;
38793 this.trailing = trailing;
38794 }
38795 ThrottleOperator.prototype.call = function (subscriber, source) {
38796 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
38797 };
38798 return ThrottleOperator;
38799}());
38800var ThrottleSubscriber = /*@__PURE__*/ (function (_super) {
38801 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrottleSubscriber, _super);
38802 function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
38803 var _this = _super.call(this, destination) || this;
38804 _this.destination = destination;
38805 _this.durationSelector = durationSelector;
38806 _this._leading = _leading;
38807 _this._trailing = _trailing;
38808 _this._hasValue = false;
38809 return _this;
38810 }
38811 ThrottleSubscriber.prototype._next = function (value) {
38812 this._hasValue = true;
38813 this._sendValue = value;
38814 if (!this._throttled) {
38815 if (this._leading) {
38816 this.send();
38817 }
38818 else {
38819 this.throttle(value);
38820 }
38821 }
38822 };
38823 ThrottleSubscriber.prototype.send = function () {
38824 var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
38825 if (_hasValue) {
38826 this.destination.next(_sendValue);
38827 this.throttle(_sendValue);
38828 }
38829 this._hasValue = false;
38830 this._sendValue = undefined;
38831 };
38832 ThrottleSubscriber.prototype.throttle = function (value) {
38833 var duration = this.tryDurationSelector(value);
38834 if (!!duration) {
38835 this.add(this._throttled = (0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(duration, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(this)));
38836 }
38837 };
38838 ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
38839 try {
38840 return this.durationSelector(value);
38841 }
38842 catch (err) {
38843 this.destination.error(err);
38844 return null;
38845 }
38846 };
38847 ThrottleSubscriber.prototype.throttlingDone = function () {
38848 var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
38849 if (_throttled) {
38850 _throttled.unsubscribe();
38851 }
38852 this._throttled = undefined;
38853 if (_trailing) {
38854 this.send();
38855 }
38856 };
38857 ThrottleSubscriber.prototype.notifyNext = function () {
38858 this.throttlingDone();
38859 };
38860 ThrottleSubscriber.prototype.notifyComplete = function () {
38861 this.throttlingDone();
38862 };
38863 return ThrottleSubscriber;
38864}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
38865//# sourceMappingURL=throttle.js.map
38866
38867
38868/***/ }),
38869/* 373 */
38870/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38871
38872"use strict";
38873__webpack_require__.r(__webpack_exports__);
38874/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38875/* harmony export */ "throttleTime": () => (/* binding */ throttleTime)
38876/* harmony export */ });
38877/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
38878/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(188);
38879/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
38880/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(372);
38881/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
38882
38883
38884
38885
38886function throttleTime(duration, scheduler, config) {
38887 if (scheduler === void 0) {
38888 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
38889 }
38890 if (config === void 0) {
38891 config = _throttle__WEBPACK_IMPORTED_MODULE_2__.defaultThrottleConfig;
38892 }
38893 return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
38894}
38895var ThrottleTimeOperator = /*@__PURE__*/ (function () {
38896 function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
38897 this.duration = duration;
38898 this.scheduler = scheduler;
38899 this.leading = leading;
38900 this.trailing = trailing;
38901 }
38902 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
38903 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
38904 };
38905 return ThrottleTimeOperator;
38906}());
38907var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
38908 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(ThrottleTimeSubscriber, _super);
38909 function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
38910 var _this = _super.call(this, destination) || this;
38911 _this.duration = duration;
38912 _this.scheduler = scheduler;
38913 _this.leading = leading;
38914 _this.trailing = trailing;
38915 _this._hasTrailingValue = false;
38916 _this._trailingValue = null;
38917 return _this;
38918 }
38919 ThrottleTimeSubscriber.prototype._next = function (value) {
38920 if (this.throttled) {
38921 if (this.trailing) {
38922 this._trailingValue = value;
38923 this._hasTrailingValue = true;
38924 }
38925 }
38926 else {
38927 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
38928 if (this.leading) {
38929 this.destination.next(value);
38930 }
38931 else if (this.trailing) {
38932 this._trailingValue = value;
38933 this._hasTrailingValue = true;
38934 }
38935 }
38936 };
38937 ThrottleTimeSubscriber.prototype._complete = function () {
38938 if (this._hasTrailingValue) {
38939 this.destination.next(this._trailingValue);
38940 this.destination.complete();
38941 }
38942 else {
38943 this.destination.complete();
38944 }
38945 };
38946 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
38947 var throttled = this.throttled;
38948 if (throttled) {
38949 if (this.trailing && this._hasTrailingValue) {
38950 this.destination.next(this._trailingValue);
38951 this._trailingValue = null;
38952 this._hasTrailingValue = false;
38953 }
38954 throttled.unsubscribe();
38955 this.remove(throttled);
38956 this.throttled = null;
38957 }
38958 };
38959 return ThrottleTimeSubscriber;
38960}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__.Subscriber));
38961function dispatchNext(arg) {
38962 var subscriber = arg.subscriber;
38963 subscriber.clearThrottle();
38964}
38965//# sourceMappingURL=throttleTime.js.map
38966
38967
38968/***/ }),
38969/* 374 */
38970/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38971
38972"use strict";
38973__webpack_require__.r(__webpack_exports__);
38974/* harmony export */ __webpack_require__.d(__webpack_exports__, {
38975/* harmony export */ "timeInterval": () => (/* binding */ timeInterval),
38976/* harmony export */ "TimeInterval": () => (/* binding */ TimeInterval)
38977/* harmony export */ });
38978/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(232);
38979/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(334);
38980/* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(268);
38981/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(243);
38982/** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */
38983
38984
38985
38986
38987function timeInterval(scheduler) {
38988 if (scheduler === void 0) {
38989 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
38990 }
38991 return function (source) {
38992 return (0,_observable_defer__WEBPACK_IMPORTED_MODULE_1__.defer)(function () {
38993 return source.pipe((0,_scan__WEBPACK_IMPORTED_MODULE_2__.scan)(function (_a, value) {
38994 var current = _a.current;
38995 return ({ value: value, current: scheduler.now(), last: current });
38996 }, { current: scheduler.now(), value: undefined, last: undefined }), (0,_map__WEBPACK_IMPORTED_MODULE_3__.map)(function (_a) {
38997 var current = _a.current, last = _a.last, value = _a.value;
38998 return new TimeInterval(value, current - last);
38999 }));
39000 });
39001 };
39002}
39003var TimeInterval = /*@__PURE__*/ (function () {
39004 function TimeInterval(value, interval) {
39005 this.value = value;
39006 this.interval = interval;
39007 }
39008 return TimeInterval;
39009}());
39010
39011//# sourceMappingURL=timeInterval.js.map
39012
39013
39014/***/ }),
39015/* 375 */
39016/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39017
39018"use strict";
39019__webpack_require__.r(__webpack_exports__);
39020/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39021/* harmony export */ "timeout": () => (/* binding */ timeout)
39022/* harmony export */ });
39023/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(232);
39024/* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(241);
39025/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(376);
39026/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(218);
39027/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */
39028
39029
39030
39031
39032function timeout(due, scheduler) {
39033 if (scheduler === void 0) {
39034 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
39035 }
39036 return (0,_timeoutWith__WEBPACK_IMPORTED_MODULE_1__.timeoutWith)(due, (0,_observable_throwError__WEBPACK_IMPORTED_MODULE_2__.throwError)(new _util_TimeoutError__WEBPACK_IMPORTED_MODULE_3__.TimeoutError()), scheduler);
39037}
39038//# sourceMappingURL=timeout.js.map
39039
39040
39041/***/ }),
39042/* 376 */
39043/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39044
39045"use strict";
39046__webpack_require__.r(__webpack_exports__);
39047/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39048/* harmony export */ "timeoutWith": () => (/* binding */ timeoutWith)
39049/* harmony export */ });
39050/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39051/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
39052/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(308);
39053/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(267);
39054/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_innerSubscribe PURE_IMPORTS_END */
39055
39056
39057
39058
39059function timeoutWith(due, withObservable, scheduler) {
39060 if (scheduler === void 0) {
39061 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
39062 }
39063 return function (source) {
39064 var absoluteTimeout = (0,_util_isDate__WEBPACK_IMPORTED_MODULE_2__.isDate)(due);
39065 var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
39066 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
39067 };
39068}
39069var TimeoutWithOperator = /*@__PURE__*/ (function () {
39070 function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
39071 this.waitFor = waitFor;
39072 this.absoluteTimeout = absoluteTimeout;
39073 this.withObservable = withObservable;
39074 this.scheduler = scheduler;
39075 }
39076 TimeoutWithOperator.prototype.call = function (subscriber, source) {
39077 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
39078 };
39079 return TimeoutWithOperator;
39080}());
39081var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) {
39082 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(TimeoutWithSubscriber, _super);
39083 function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
39084 var _this = _super.call(this, destination) || this;
39085 _this.absoluteTimeout = absoluteTimeout;
39086 _this.waitFor = waitFor;
39087 _this.withObservable = withObservable;
39088 _this.scheduler = scheduler;
39089 _this.scheduleTimeout();
39090 return _this;
39091 }
39092 TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
39093 var withObservable = subscriber.withObservable;
39094 subscriber._unsubscribeAndRecycle();
39095 subscriber.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.innerSubscribe)(withObservable, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleInnerSubscriber(subscriber)));
39096 };
39097 TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
39098 var action = this.action;
39099 if (action) {
39100 this.action = action.schedule(this, this.waitFor);
39101 }
39102 else {
39103 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
39104 }
39105 };
39106 TimeoutWithSubscriber.prototype._next = function (value) {
39107 if (!this.absoluteTimeout) {
39108 this.scheduleTimeout();
39109 }
39110 _super.prototype._next.call(this, value);
39111 };
39112 TimeoutWithSubscriber.prototype._unsubscribe = function () {
39113 this.action = undefined;
39114 this.scheduler = null;
39115 this.withObservable = null;
39116 };
39117 return TimeoutWithSubscriber;
39118}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_3__.SimpleOuterSubscriber));
39119//# sourceMappingURL=timeoutWith.js.map
39120
39121
39122/***/ }),
39123/* 377 */
39124/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39125
39126"use strict";
39127__webpack_require__.r(__webpack_exports__);
39128/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39129/* harmony export */ "timestamp": () => (/* binding */ timestamp),
39130/* harmony export */ "Timestamp": () => (/* binding */ Timestamp)
39131/* harmony export */ });
39132/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(232);
39133/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(243);
39134/** PURE_IMPORTS_START _scheduler_async,_map PURE_IMPORTS_END */
39135
39136
39137function timestamp(scheduler) {
39138 if (scheduler === void 0) {
39139 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__.async;
39140 }
39141 return (0,_map__WEBPACK_IMPORTED_MODULE_1__.map)(function (value) { return new Timestamp(value, scheduler.now()); });
39142}
39143var Timestamp = /*@__PURE__*/ (function () {
39144 function Timestamp(value, timestamp) {
39145 this.value = value;
39146 this.timestamp = timestamp;
39147 }
39148 return Timestamp;
39149}());
39150
39151//# sourceMappingURL=timestamp.js.map
39152
39153
39154/***/ }),
39155/* 378 */
39156/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39157
39158"use strict";
39159__webpack_require__.r(__webpack_exports__);
39160/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39161/* harmony export */ "toArray": () => (/* binding */ toArray)
39162/* harmony export */ });
39163/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(333);
39164/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
39165
39166function toArrayReducer(arr, item, index) {
39167 if (index === 0) {
39168 return [item];
39169 }
39170 arr.push(item);
39171 return arr;
39172}
39173function toArray() {
39174 return (0,_reduce__WEBPACK_IMPORTED_MODULE_0__.reduce)(toArrayReducer, []);
39175}
39176//# sourceMappingURL=toArray.js.map
39177
39178
39179/***/ }),
39180/* 379 */
39181/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39182
39183"use strict";
39184__webpack_require__.r(__webpack_exports__);
39185/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39186/* harmony export */ "window": () => (/* binding */ window)
39187/* harmony export */ });
39188/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39189/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
39190/* harmony import */ var _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(267);
39191/** PURE_IMPORTS_START tslib,_Subject,_innerSubscribe PURE_IMPORTS_END */
39192
39193
39194
39195function window(windowBoundaries) {
39196 return function windowOperatorFunction(source) {
39197 return source.lift(new WindowOperator(windowBoundaries));
39198 };
39199}
39200var WindowOperator = /*@__PURE__*/ (function () {
39201 function WindowOperator(windowBoundaries) {
39202 this.windowBoundaries = windowBoundaries;
39203 }
39204 WindowOperator.prototype.call = function (subscriber, source) {
39205 var windowSubscriber = new WindowSubscriber(subscriber);
39206 var sourceSubscription = source.subscribe(windowSubscriber);
39207 if (!sourceSubscription.closed) {
39208 windowSubscriber.add((0,_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.innerSubscribe)(this.windowBoundaries, new _innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleInnerSubscriber(windowSubscriber)));
39209 }
39210 return sourceSubscription;
39211 };
39212 return WindowOperator;
39213}());
39214var WindowSubscriber = /*@__PURE__*/ (function (_super) {
39215 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowSubscriber, _super);
39216 function WindowSubscriber(destination) {
39217 var _this = _super.call(this, destination) || this;
39218 _this.window = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
39219 destination.next(_this.window);
39220 return _this;
39221 }
39222 WindowSubscriber.prototype.notifyNext = function () {
39223 this.openWindow();
39224 };
39225 WindowSubscriber.prototype.notifyError = function (error) {
39226 this._error(error);
39227 };
39228 WindowSubscriber.prototype.notifyComplete = function () {
39229 this._complete();
39230 };
39231 WindowSubscriber.prototype._next = function (value) {
39232 this.window.next(value);
39233 };
39234 WindowSubscriber.prototype._error = function (err) {
39235 this.window.error(err);
39236 this.destination.error(err);
39237 };
39238 WindowSubscriber.prototype._complete = function () {
39239 this.window.complete();
39240 this.destination.complete();
39241 };
39242 WindowSubscriber.prototype._unsubscribe = function () {
39243 this.window = null;
39244 };
39245 WindowSubscriber.prototype.openWindow = function () {
39246 var prevWindow = this.window;
39247 if (prevWindow) {
39248 prevWindow.complete();
39249 }
39250 var destination = this.destination;
39251 var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
39252 destination.next(newWindow);
39253 };
39254 return WindowSubscriber;
39255}(_innerSubscribe__WEBPACK_IMPORTED_MODULE_1__.SimpleOuterSubscriber));
39256//# sourceMappingURL=window.js.map
39257
39258
39259/***/ }),
39260/* 380 */
39261/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39262
39263"use strict";
39264__webpack_require__.r(__webpack_exports__);
39265/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39266/* harmony export */ "windowCount": () => (/* binding */ windowCount)
39267/* harmony export */ });
39268/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39269/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
39270/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
39271/** PURE_IMPORTS_START tslib,_Subscriber,_Subject PURE_IMPORTS_END */
39272
39273
39274
39275function windowCount(windowSize, startWindowEvery) {
39276 if (startWindowEvery === void 0) {
39277 startWindowEvery = 0;
39278 }
39279 return function windowCountOperatorFunction(source) {
39280 return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
39281 };
39282}
39283var WindowCountOperator = /*@__PURE__*/ (function () {
39284 function WindowCountOperator(windowSize, startWindowEvery) {
39285 this.windowSize = windowSize;
39286 this.startWindowEvery = startWindowEvery;
39287 }
39288 WindowCountOperator.prototype.call = function (subscriber, source) {
39289 return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
39290 };
39291 return WindowCountOperator;
39292}());
39293var WindowCountSubscriber = /*@__PURE__*/ (function (_super) {
39294 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowCountSubscriber, _super);
39295 function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
39296 var _this = _super.call(this, destination) || this;
39297 _this.destination = destination;
39298 _this.windowSize = windowSize;
39299 _this.startWindowEvery = startWindowEvery;
39300 _this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject()];
39301 _this.count = 0;
39302 destination.next(_this.windows[0]);
39303 return _this;
39304 }
39305 WindowCountSubscriber.prototype._next = function (value) {
39306 var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
39307 var destination = this.destination;
39308 var windowSize = this.windowSize;
39309 var windows = this.windows;
39310 var len = windows.length;
39311 for (var i = 0; i < len && !this.closed; i++) {
39312 windows[i].next(value);
39313 }
39314 var c = this.count - windowSize + 1;
39315 if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
39316 windows.shift().complete();
39317 }
39318 if (++this.count % startWindowEvery === 0 && !this.closed) {
39319 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
39320 windows.push(window_1);
39321 destination.next(window_1);
39322 }
39323 };
39324 WindowCountSubscriber.prototype._error = function (err) {
39325 var windows = this.windows;
39326 if (windows) {
39327 while (windows.length > 0 && !this.closed) {
39328 windows.shift().error(err);
39329 }
39330 }
39331 this.destination.error(err);
39332 };
39333 WindowCountSubscriber.prototype._complete = function () {
39334 var windows = this.windows;
39335 if (windows) {
39336 while (windows.length > 0 && !this.closed) {
39337 windows.shift().complete();
39338 }
39339 }
39340 this.destination.complete();
39341 };
39342 WindowCountSubscriber.prototype._unsubscribe = function () {
39343 this.count = 0;
39344 this.windows = null;
39345 };
39346 return WindowCountSubscriber;
39347}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__.Subscriber));
39348//# sourceMappingURL=windowCount.js.map
39349
39350
39351/***/ }),
39352/* 381 */
39353/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39354
39355"use strict";
39356__webpack_require__.r(__webpack_exports__);
39357/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39358/* harmony export */ "windowTime": () => (/* binding */ windowTime)
39359/* harmony export */ });
39360/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39361/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(205);
39362/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(232);
39363/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(188);
39364/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(275);
39365/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(214);
39366/** PURE_IMPORTS_START tslib,_Subject,_scheduler_async,_Subscriber,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
39367
39368
39369
39370
39371
39372
39373function windowTime(windowTimeSpan) {
39374 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__.async;
39375 var windowCreationInterval = null;
39376 var maxWindowSize = Number.POSITIVE_INFINITY;
39377 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[3])) {
39378 scheduler = arguments[3];
39379 }
39380 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[2])) {
39381 scheduler = arguments[2];
39382 }
39383 else if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(arguments[2])) {
39384 maxWindowSize = Number(arguments[2]);
39385 }
39386 if ((0,_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__.isScheduler)(arguments[1])) {
39387 scheduler = arguments[1];
39388 }
39389 else if ((0,_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__.isNumeric)(arguments[1])) {
39390 windowCreationInterval = Number(arguments[1]);
39391 }
39392 return function windowTimeOperatorFunction(source) {
39393 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
39394 };
39395}
39396var WindowTimeOperator = /*@__PURE__*/ (function () {
39397 function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
39398 this.windowTimeSpan = windowTimeSpan;
39399 this.windowCreationInterval = windowCreationInterval;
39400 this.maxWindowSize = maxWindowSize;
39401 this.scheduler = scheduler;
39402 }
39403 WindowTimeOperator.prototype.call = function (subscriber, source) {
39404 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
39405 };
39406 return WindowTimeOperator;
39407}());
39408var CountedSubject = /*@__PURE__*/ (function (_super) {
39409 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(CountedSubject, _super);
39410 function CountedSubject() {
39411 var _this = _super !== null && _super.apply(this, arguments) || this;
39412 _this._numberOfNextedValues = 0;
39413 return _this;
39414 }
39415 CountedSubject.prototype.next = function (value) {
39416 this._numberOfNextedValues++;
39417 _super.prototype.next.call(this, value);
39418 };
39419 Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
39420 get: function () {
39421 return this._numberOfNextedValues;
39422 },
39423 enumerable: true,
39424 configurable: true
39425 });
39426 return CountedSubject;
39427}(_Subject__WEBPACK_IMPORTED_MODULE_4__.Subject));
39428var WindowTimeSubscriber = /*@__PURE__*/ (function (_super) {
39429 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowTimeSubscriber, _super);
39430 function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
39431 var _this = _super.call(this, destination) || this;
39432 _this.destination = destination;
39433 _this.windowTimeSpan = windowTimeSpan;
39434 _this.windowCreationInterval = windowCreationInterval;
39435 _this.maxWindowSize = maxWindowSize;
39436 _this.scheduler = scheduler;
39437 _this.windows = [];
39438 var window = _this.openWindow();
39439 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
39440 var closeState = { subscriber: _this, window: window, context: null };
39441 var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
39442 _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
39443 _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
39444 }
39445 else {
39446 var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
39447 _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
39448 }
39449 return _this;
39450 }
39451 WindowTimeSubscriber.prototype._next = function (value) {
39452 var windows = this.windows;
39453 var len = windows.length;
39454 for (var i = 0; i < len; i++) {
39455 var window_1 = windows[i];
39456 if (!window_1.closed) {
39457 window_1.next(value);
39458 if (window_1.numberOfNextedValues >= this.maxWindowSize) {
39459 this.closeWindow(window_1);
39460 }
39461 }
39462 }
39463 };
39464 WindowTimeSubscriber.prototype._error = function (err) {
39465 var windows = this.windows;
39466 while (windows.length > 0) {
39467 windows.shift().error(err);
39468 }
39469 this.destination.error(err);
39470 };
39471 WindowTimeSubscriber.prototype._complete = function () {
39472 var windows = this.windows;
39473 while (windows.length > 0) {
39474 var window_2 = windows.shift();
39475 if (!window_2.closed) {
39476 window_2.complete();
39477 }
39478 }
39479 this.destination.complete();
39480 };
39481 WindowTimeSubscriber.prototype.openWindow = function () {
39482 var window = new CountedSubject();
39483 this.windows.push(window);
39484 var destination = this.destination;
39485 destination.next(window);
39486 return window;
39487 };
39488 WindowTimeSubscriber.prototype.closeWindow = function (window) {
39489 window.complete();
39490 var windows = this.windows;
39491 windows.splice(windows.indexOf(window), 1);
39492 };
39493 return WindowTimeSubscriber;
39494}(_Subscriber__WEBPACK_IMPORTED_MODULE_5__.Subscriber));
39495function dispatchWindowTimeSpanOnly(state) {
39496 var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
39497 if (window) {
39498 subscriber.closeWindow(window);
39499 }
39500 state.window = subscriber.openWindow();
39501 this.schedule(state, windowTimeSpan);
39502}
39503function dispatchWindowCreation(state) {
39504 var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
39505 var window = subscriber.openWindow();
39506 var action = this;
39507 var context = { action: action, subscription: null };
39508 var timeSpanState = { subscriber: subscriber, window: window, context: context };
39509 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
39510 action.add(context.subscription);
39511 action.schedule(state, windowCreationInterval);
39512}
39513function dispatchWindowClose(state) {
39514 var subscriber = state.subscriber, window = state.window, context = state.context;
39515 if (context && context.action && context.subscription) {
39516 context.action.remove(context.subscription);
39517 }
39518 subscriber.closeWindow(window);
39519}
39520//# sourceMappingURL=windowTime.js.map
39521
39522
39523/***/ }),
39524/* 382 */
39525/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39526
39527"use strict";
39528__webpack_require__.r(__webpack_exports__);
39529/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39530/* harmony export */ "windowToggle": () => (/* binding */ windowToggle)
39531/* harmony export */ });
39532/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39533/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(205);
39534/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(194);
39535/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(255);
39536/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246);
39537/** PURE_IMPORTS_START tslib,_Subject,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
39538
39539
39540
39541
39542
39543function windowToggle(openings, closingSelector) {
39544 return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
39545}
39546var WindowToggleOperator = /*@__PURE__*/ (function () {
39547 function WindowToggleOperator(openings, closingSelector) {
39548 this.openings = openings;
39549 this.closingSelector = closingSelector;
39550 }
39551 WindowToggleOperator.prototype.call = function (subscriber, source) {
39552 return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
39553 };
39554 return WindowToggleOperator;
39555}());
39556var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) {
39557 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowToggleSubscriber, _super);
39558 function WindowToggleSubscriber(destination, openings, closingSelector) {
39559 var _this = _super.call(this, destination) || this;
39560 _this.openings = openings;
39561 _this.closingSelector = closingSelector;
39562 _this.contexts = [];
39563 _this.add(_this.openSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, openings, openings));
39564 return _this;
39565 }
39566 WindowToggleSubscriber.prototype._next = function (value) {
39567 var contexts = this.contexts;
39568 if (contexts) {
39569 var len = contexts.length;
39570 for (var i = 0; i < len; i++) {
39571 contexts[i].window.next(value);
39572 }
39573 }
39574 };
39575 WindowToggleSubscriber.prototype._error = function (err) {
39576 var contexts = this.contexts;
39577 this.contexts = null;
39578 if (contexts) {
39579 var len = contexts.length;
39580 var index = -1;
39581 while (++index < len) {
39582 var context_1 = contexts[index];
39583 context_1.window.error(err);
39584 context_1.subscription.unsubscribe();
39585 }
39586 }
39587 _super.prototype._error.call(this, err);
39588 };
39589 WindowToggleSubscriber.prototype._complete = function () {
39590 var contexts = this.contexts;
39591 this.contexts = null;
39592 if (contexts) {
39593 var len = contexts.length;
39594 var index = -1;
39595 while (++index < len) {
39596 var context_2 = contexts[index];
39597 context_2.window.complete();
39598 context_2.subscription.unsubscribe();
39599 }
39600 }
39601 _super.prototype._complete.call(this);
39602 };
39603 WindowToggleSubscriber.prototype._unsubscribe = function () {
39604 var contexts = this.contexts;
39605 this.contexts = null;
39606 if (contexts) {
39607 var len = contexts.length;
39608 var index = -1;
39609 while (++index < len) {
39610 var context_3 = contexts[index];
39611 context_3.window.unsubscribe();
39612 context_3.subscription.unsubscribe();
39613 }
39614 }
39615 };
39616 WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
39617 if (outerValue === this.openings) {
39618 var closingNotifier = void 0;
39619 try {
39620 var closingSelector = this.closingSelector;
39621 closingNotifier = closingSelector(innerValue);
39622 }
39623 catch (e) {
39624 return this.error(e);
39625 }
39626 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_2__.Subject();
39627 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_3__.Subscription();
39628 var context_4 = { window: window_1, subscription: subscription };
39629 this.contexts.push(context_4);
39630 var innerSubscription = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(this, closingNotifier, context_4);
39631 if (innerSubscription.closed) {
39632 this.closeWindow(this.contexts.length - 1);
39633 }
39634 else {
39635 innerSubscription.context = context_4;
39636 subscription.add(innerSubscription);
39637 }
39638 this.destination.next(window_1);
39639 }
39640 else {
39641 this.closeWindow(this.contexts.indexOf(outerValue));
39642 }
39643 };
39644 WindowToggleSubscriber.prototype.notifyError = function (err) {
39645 this.error(err);
39646 };
39647 WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
39648 if (inner !== this.openSubscription) {
39649 this.closeWindow(this.contexts.indexOf(inner.context));
39650 }
39651 };
39652 WindowToggleSubscriber.prototype.closeWindow = function (index) {
39653 if (index === -1) {
39654 return;
39655 }
39656 var contexts = this.contexts;
39657 var context = contexts[index];
39658 var window = context.window, subscription = context.subscription;
39659 contexts.splice(index, 1);
39660 window.complete();
39661 subscription.unsubscribe();
39662 };
39663 return WindowToggleSubscriber;
39664}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__.OuterSubscriber));
39665//# sourceMappingURL=windowToggle.js.map
39666
39667
39668/***/ }),
39669/* 383 */
39670/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39671
39672"use strict";
39673__webpack_require__.r(__webpack_exports__);
39674/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39675/* harmony export */ "windowWhen": () => (/* binding */ windowWhen)
39676/* harmony export */ });
39677/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39678/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
39679/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(255);
39680/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(246);
39681/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
39682
39683
39684
39685
39686function windowWhen(closingSelector) {
39687 return function windowWhenOperatorFunction(source) {
39688 return source.lift(new WindowOperator(closingSelector));
39689 };
39690}
39691var WindowOperator = /*@__PURE__*/ (function () {
39692 function WindowOperator(closingSelector) {
39693 this.closingSelector = closingSelector;
39694 }
39695 WindowOperator.prototype.call = function (subscriber, source) {
39696 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
39697 };
39698 return WindowOperator;
39699}());
39700var WindowSubscriber = /*@__PURE__*/ (function (_super) {
39701 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WindowSubscriber, _super);
39702 function WindowSubscriber(destination, closingSelector) {
39703 var _this = _super.call(this, destination) || this;
39704 _this.destination = destination;
39705 _this.closingSelector = closingSelector;
39706 _this.openWindow();
39707 return _this;
39708 }
39709 WindowSubscriber.prototype.notifyNext = function (_outerValue, _innerValue, _outerIndex, _innerIndex, innerSub) {
39710 this.openWindow(innerSub);
39711 };
39712 WindowSubscriber.prototype.notifyError = function (error) {
39713 this._error(error);
39714 };
39715 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
39716 this.openWindow(innerSub);
39717 };
39718 WindowSubscriber.prototype._next = function (value) {
39719 this.window.next(value);
39720 };
39721 WindowSubscriber.prototype._error = function (err) {
39722 this.window.error(err);
39723 this.destination.error(err);
39724 this.unsubscribeClosingNotification();
39725 };
39726 WindowSubscriber.prototype._complete = function () {
39727 this.window.complete();
39728 this.destination.complete();
39729 this.unsubscribeClosingNotification();
39730 };
39731 WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
39732 if (this.closingNotification) {
39733 this.closingNotification.unsubscribe();
39734 }
39735 };
39736 WindowSubscriber.prototype.openWindow = function (innerSub) {
39737 if (innerSub === void 0) {
39738 innerSub = null;
39739 }
39740 if (innerSub) {
39741 this.remove(innerSub);
39742 innerSub.unsubscribe();
39743 }
39744 var prevWindow = this.window;
39745 if (prevWindow) {
39746 prevWindow.complete();
39747 }
39748 var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__.Subject();
39749 this.destination.next(window);
39750 var closingNotifier;
39751 try {
39752 var closingSelector = this.closingSelector;
39753 closingNotifier = closingSelector();
39754 }
39755 catch (e) {
39756 this.destination.error(e);
39757 this.window.error(e);
39758 return;
39759 }
39760 this.add(this.closingNotification = (0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__.subscribeToResult)(this, closingNotifier));
39761 };
39762 return WindowSubscriber;
39763}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__.OuterSubscriber));
39764//# sourceMappingURL=windowWhen.js.map
39765
39766
39767/***/ }),
39768/* 384 */
39769/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39770
39771"use strict";
39772__webpack_require__.r(__webpack_exports__);
39773/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39774/* harmony export */ "withLatestFrom": () => (/* binding */ withLatestFrom)
39775/* harmony export */ });
39776/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(189);
39777/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
39778/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(246);
39779/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
39780
39781
39782
39783function withLatestFrom() {
39784 var args = [];
39785 for (var _i = 0; _i < arguments.length; _i++) {
39786 args[_i] = arguments[_i];
39787 }
39788 return function (source) {
39789 var project;
39790 if (typeof args[args.length - 1] === 'function') {
39791 project = args.pop();
39792 }
39793 var observables = args;
39794 return source.lift(new WithLatestFromOperator(observables, project));
39795 };
39796}
39797var WithLatestFromOperator = /*@__PURE__*/ (function () {
39798 function WithLatestFromOperator(observables, project) {
39799 this.observables = observables;
39800 this.project = project;
39801 }
39802 WithLatestFromOperator.prototype.call = function (subscriber, source) {
39803 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
39804 };
39805 return WithLatestFromOperator;
39806}());
39807var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {
39808 tslib__WEBPACK_IMPORTED_MODULE_0__.__extends(WithLatestFromSubscriber, _super);
39809 function WithLatestFromSubscriber(destination, observables, project) {
39810 var _this = _super.call(this, destination) || this;
39811 _this.observables = observables;
39812 _this.project = project;
39813 _this.toRespond = [];
39814 var len = observables.length;
39815 _this.values = new Array(len);
39816 for (var i = 0; i < len; i++) {
39817 _this.toRespond.push(i);
39818 }
39819 for (var i = 0; i < len; i++) {
39820 var observable = observables[i];
39821 _this.add((0,_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__.subscribeToResult)(_this, observable, undefined, i));
39822 }
39823 return _this;
39824 }
39825 WithLatestFromSubscriber.prototype.notifyNext = function (_outerValue, innerValue, outerIndex) {
39826 this.values[outerIndex] = innerValue;
39827 var toRespond = this.toRespond;
39828 if (toRespond.length > 0) {
39829 var found = toRespond.indexOf(outerIndex);
39830 if (found !== -1) {
39831 toRespond.splice(found, 1);
39832 }
39833 }
39834 };
39835 WithLatestFromSubscriber.prototype.notifyComplete = function () {
39836 };
39837 WithLatestFromSubscriber.prototype._next = function (value) {
39838 if (this.toRespond.length === 0) {
39839 var args = [value].concat(this.values);
39840 if (this.project) {
39841 this._tryProject(args);
39842 }
39843 else {
39844 this.destination.next(args);
39845 }
39846 }
39847 };
39848 WithLatestFromSubscriber.prototype._tryProject = function (args) {
39849 var result;
39850 try {
39851 result = this.project.apply(this, args);
39852 }
39853 catch (err) {
39854 this.destination.error(err);
39855 return;
39856 }
39857 this.destination.next(result);
39858 };
39859 return WithLatestFromSubscriber;
39860}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__.OuterSubscriber));
39861//# sourceMappingURL=withLatestFrom.js.map
39862
39863
39864/***/ }),
39865/* 385 */
39866/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39867
39868"use strict";
39869__webpack_require__.r(__webpack_exports__);
39870/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39871/* harmony export */ "zip": () => (/* binding */ zip)
39872/* harmony export */ });
39873/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(287);
39874/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
39875
39876function zip() {
39877 var observables = [];
39878 for (var _i = 0; _i < arguments.length; _i++) {
39879 observables[_i] = arguments[_i];
39880 }
39881 return function zipOperatorFunction(source) {
39882 return source.lift.call(_observable_zip__WEBPACK_IMPORTED_MODULE_0__.zip.apply(void 0, [source].concat(observables)));
39883 };
39884}
39885//# sourceMappingURL=zip.js.map
39886
39887
39888/***/ }),
39889/* 386 */
39890/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
39891
39892"use strict";
39893__webpack_require__.r(__webpack_exports__);
39894/* harmony export */ __webpack_require__.d(__webpack_exports__, {
39895/* harmony export */ "zipAll": () => (/* binding */ zipAll)
39896/* harmony export */ });
39897/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(287);
39898/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
39899
39900function zipAll(project) {
39901 return function (source) { return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__.ZipOperator(project)); };
39902}
39903//# sourceMappingURL=zipAll.js.map
39904
39905
39906/***/ }),
39907/* 387 */
39908/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
39909
39910"use strict";
39911
39912var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
39913 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
39914 return new (P || (P = Promise))(function (resolve, reject) {
39915 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39916 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
39917 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
39918 step((generator = generator.apply(thisArg, _arguments || [])).next());
39919 });
39920};
39921var __generator = (this && this.__generator) || function (thisArg, body) {
39922 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
39923 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
39924 function verb(n) { return function (v) { return step([n, v]); }; }
39925 function step(op) {
39926 if (f) throw new TypeError("Generator is already executing.");
39927 while (_) try {
39928 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
39929 if (y = 0, t) op = [op[0] & 2, t.value];
39930 switch (op[0]) {
39931 case 0: case 1: t = op; break;
39932 case 4: _.label++; return { value: op[1], done: false };
39933 case 5: _.label++; y = op[1]; op = [0]; continue;
39934 case 7: op = _.ops.pop(); _.trys.pop(); continue;
39935 default:
39936 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
39937 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39938 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
39939 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
39940 if (t[2]) _.ops.pop();
39941 _.trys.pop(); continue;
39942 }
39943 op = body.call(thisArg, _);
39944 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
39945 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
39946 }
39947};
39948Object.defineProperty(exports, "__esModule", ({ value: true }));
39949exports.handleDiagnostic = void 0;
39950var vscode_languageserver_1 = __webpack_require__(2);
39951var patterns_1 = __webpack_require__(72);
39952var connection_1 = __webpack_require__(156);
39953var fixNegativeNum = function (num) {
39954 if (num < 0) {
39955 return 0;
39956 }
39957 return num;
39958};
39959function handleDiagnostic(textDoc, error) {
39960 return __awaiter(this, void 0, void 0, function () {
39961 var m, lines, line, col;
39962 return __generator(this, function (_a) {
39963 m = (error || "").match(patterns_1.errorLinePattern);
39964 if (m) {
39965 lines = textDoc.lineCount;
39966 line = fixNegativeNum(parseFloat(m[2]) - 1);
39967 col = fixNegativeNum(parseFloat(m[3]) - 1);
39968 return [2 /*return*/, connection_1.connection.sendDiagnostics({
39969 uri: textDoc.uri,
39970 diagnostics: [{
39971 source: "vimlsp",
39972 message: m[1],
39973 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(line > lines ? lines : line, col), vscode_languageserver_1.Position.create(line > lines ? lines : line, col + 1)),
39974 severity: vscode_languageserver_1.DiagnosticSeverity.Error,
39975 }],
39976 })];
39977 }
39978 // clear diagnostics
39979 connection_1.connection.sendDiagnostics({
39980 uri: textDoc.uri,
39981 diagnostics: [],
39982 });
39983 return [2 /*return*/];
39984 });
39985 });
39986}
39987exports.handleDiagnostic = handleDiagnostic;
39988
39989
39990/***/ }),
39991/* 388 */
39992/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
39993
39994"use strict";
39995
39996Object.defineProperty(exports, "__esModule", ({ value: true }));
39997exports.selectionRangeProvider = void 0;
39998var vscode_languageserver_1 = __webpack_require__(2);
39999var workspaces_1 = __webpack_require__(167);
40000var documents_1 = __webpack_require__(74);
40001var selectionRangeProvider = function (params) {
40002 var selectRanges = [];
40003 var textDocument = params.textDocument, positions = params.positions;
40004 if (!positions || positions.length === 0) {
40005 return selectRanges;
40006 }
40007 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
40008 var document = documents_1.documents.get(textDocument.uri);
40009 if (!buffer || !document) {
40010 return selectRanges;
40011 }
40012 var vimRanges = buffer.getRanges();
40013 if (vimRanges.length === 0) {
40014 return selectRanges;
40015 }
40016 var range = vscode_languageserver_1.Range.create(positions[0], positions[0]);
40017 if (positions.length > 1) {
40018 range = vscode_languageserver_1.Range.create(positions[0], positions[positions.length - 1]);
40019 }
40020 var ranges = [];
40021 vimRanges.forEach(function (vimRange) {
40022 var line = document.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.endLine - 1, 0), vscode_languageserver_1.Position.create(vimRange.endLine, 0)));
40023 var newRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.startLine - 1, vimRange.startCol - 1), vscode_languageserver_1.Position.create(vimRange.endLine - 1, vimRange.endCol - 1 + line.slice(vimRange.endCol - 1).split(' ')[0].length));
40024 if (range.start.line >= newRange.start.line && range.end.line <= newRange.end.line) {
40025 if (ranges.length === 0) {
40026 ranges.push(newRange);
40027 }
40028 else {
40029 var i = 0;
40030 for (var len = ranges.length; i < len; i++) {
40031 if (ranges[i].start.line <= newRange.start.line && ranges[i].end.line >= newRange.end.line) {
40032 ranges.splice(i, 0, newRange);
40033 break;
40034 }
40035 }
40036 if (i === ranges.length) {
40037 ranges.push(newRange);
40038 }
40039 }
40040 }
40041 });
40042 if (ranges.length) {
40043 if (ranges.length > 1) {
40044 ranges = ranges.filter(function (newRange) {
40045 return range.start.line !== newRange.start.line || range.end.line !== newRange.end.line;
40046 });
40047 }
40048 selectRanges.push(ranges.reverse().reduce(function (pre, cur, idx) {
40049 if (idx === 0) {
40050 return pre;
40051 }
40052 return {
40053 range: cur,
40054 parent: pre
40055 };
40056 }, { range: ranges[0] }));
40057 }
40058 return selectRanges;
40059};
40060exports.selectionRangeProvider = selectionRangeProvider;
40061
40062
40063/***/ }),
40064/* 389 */
40065/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
40066
40067"use strict";
40068
40069var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
40070 if (k2 === undefined) k2 = k;
40071 Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
40072}) : (function(o, m, k, k2) {
40073 if (k2 === undefined) k2 = k;
40074 o[k2] = m[k];
40075}));
40076var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40077 Object.defineProperty(o, "default", { enumerable: true, value: v });
40078}) : function(o, v) {
40079 o["default"] = v;
40080});
40081var __importStar = (this && this.__importStar) || function (mod) {
40082 if (mod && mod.__esModule) return mod;
40083 var result = {};
40084 if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
40085 __setModuleDefault(result, mod);
40086 return result;
40087};
40088var __importDefault = (this && this.__importDefault) || function (mod) {
40089 return (mod && mod.__esModule) ? mod : { "default": mod };
40090};
40091Object.defineProperty(exports, "__esModule", ({ value: true }));
40092exports.documentSymbolProvider = void 0;
40093var vscode_languageserver_1 = __webpack_require__(2);
40094var shvl = __importStar(__webpack_require__(1));
40095var workspaces_1 = __webpack_require__(167);
40096var documents_1 = __webpack_require__(74);
40097var config_1 = __importDefault(__webpack_require__(73));
40098var documentSymbolProvider = function (params) {
40099 var documentSymbols = [];
40100 var textDocument = params.textDocument;
40101 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
40102 var document = documents_1.documents.get(textDocument.uri);
40103 if (!buffer || !document) {
40104 return documentSymbols;
40105 }
40106 var globalFunctions = buffer.getGlobalFunctions();
40107 var scriptFunctions = buffer.getScriptFunctions();
40108 var globalVariables = buffer.getGlobalIdentifiers();
40109 var localVariables = buffer.getLocalIdentifiers();
40110 var functions = Object.values(globalFunctions).concat(Object.values(scriptFunctions)).reduce(function (pre, cur) {
40111 return pre.concat(cur);
40112 }, []);
40113 var variables = Object.values(globalVariables).concat(Object.values(localVariables)).reduce(function (pre, cur) {
40114 return pre.concat(cur);
40115 }, []);
40116 // hierarchicalDocumentSymbolSupport: false
40117 if (!config_1.default.capabilities || !shvl.get(config_1.default.capabilities, 'textDocument.documentSymbol.hierarchicalDocumentSymbolSupport')) {
40118 return [].concat(functions, variables).sort(function (a, b) {
40119 if (a.startLine === b.startLine) {
40120 return a.startCol - b.startCol;
40121 }
40122 return a.startLine - b.startLine;
40123 }).map(function (item) {
40124 var vimRange = item.range;
40125 var line = vimRange
40126 ? document.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.endLine - 1, 0), vscode_languageserver_1.Position.create(vimRange.endLine, 0)))
40127 : '';
40128 var range = vimRange
40129 ? vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.startLine - 1, vimRange.startCol - 1), vscode_languageserver_1.Position.create(vimRange.endLine - 1, vimRange.endCol - 1 + line.slice(vimRange.endCol - 1).split(' ')[0].length))
40130 :
40131 vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(item.startLine - 1, item.startCol - 1), vscode_languageserver_1.Position.create(item.startLine, item.startCol - 1 + item.name.length));
40132 return {
40133 name: item.name,
40134 kind: vimRange ? vscode_languageserver_1.SymbolKind.Function : vscode_languageserver_1.SymbolKind.Variable,
40135 location: {
40136 uri: textDocument.uri,
40137 range: range,
40138 }
40139 };
40140 });
40141 }
40142 var sortFunctions = [];
40143 functions.forEach(function (func) {
40144 if (sortFunctions.length === 0) {
40145 return sortFunctions.push(func);
40146 }
40147 var i = 0;
40148 for (var len = sortFunctions.length; i < len; i += 1) {
40149 var sf = sortFunctions[i];
40150 if (func.range.endLine < sf.range.endLine) {
40151 sortFunctions.splice(i, 0, func);
40152 break;
40153 }
40154 }
40155 if (i === sortFunctions.length) {
40156 sortFunctions.push(func);
40157 }
40158 });
40159 return sortFunctions
40160 .map(function (func) {
40161 var vimRange = func.range;
40162 var line = document.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.endLine - 1, 0), vscode_languageserver_1.Position.create(vimRange.endLine, 0)));
40163 var range = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.startLine - 1, vimRange.startCol - 1), vscode_languageserver_1.Position.create(vimRange.endLine - 1, vimRange.endCol - 1 + line.slice(vimRange.endCol - 1).split(' ')[0].length));
40164 var ds = {
40165 name: func.name,
40166 kind: vscode_languageserver_1.SymbolKind.Function,
40167 range: range,
40168 selectionRange: range,
40169 children: []
40170 };
40171 variables = variables.filter(function (v) {
40172 if (v.startLine >= vimRange.startLine && v.startLine <= vimRange.endLine) {
40173 var vRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(v.startLine - 1, v.startCol - 1), vscode_languageserver_1.Position.create(v.startLine, v.startCol - 1 + v.name.length));
40174 ds.children.push({
40175 name: v.name,
40176 kind: vscode_languageserver_1.SymbolKind.Variable,
40177 range: vRange,
40178 selectionRange: vRange
40179 });
40180 return false;
40181 }
40182 return true;
40183 });
40184 return ds;
40185 })
40186 .reduce(function (res, cur) {
40187 if (res.length === 0) {
40188 res.push(cur);
40189 }
40190 else {
40191 res = res.filter(function (item) {
40192 if (item.range.start.line >= cur.range.start.line && item.range.end.line <= cur.range.end.line) {
40193 cur.children.push(item);
40194 return false;
40195 }
40196 return true;
40197 });
40198 res.push(cur);
40199 }
40200 return res;
40201 }, [])
40202 .concat(variables.map(function (v) {
40203 var vRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(v.startLine - 1, v.startCol - 1), vscode_languageserver_1.Position.create(v.startLine, v.startCol - 1 + v.name.length));
40204 return {
40205 name: v.name,
40206 kind: vscode_languageserver_1.SymbolKind.Variable,
40207 range: vRange,
40208 selectionRange: vRange
40209 };
40210 }));
40211};
40212exports.documentSymbolProvider = documentSymbolProvider;
40213
40214
40215/***/ })
40216/******/ ]);
40217/************************************************************************/
40218/******/ // The module cache
40219/******/ var __webpack_module_cache__ = {};
40220/******/
40221/******/ // The require function
40222/******/ function __webpack_require__(moduleId) {
40223/******/ // Check if module is in cache
40224/******/ var cachedModule = __webpack_module_cache__[moduleId];
40225/******/ if (cachedModule !== undefined) {
40226/******/ return cachedModule.exports;
40227/******/ }
40228/******/ // Create a new module (and put it into the cache)
40229/******/ var module = __webpack_module_cache__[moduleId] = {
40230/******/ id: moduleId,
40231/******/ loaded: false,
40232/******/ exports: {}
40233/******/ };
40234/******/
40235/******/ // Execute the module function
40236/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
40237/******/
40238/******/ // Flag the module as loaded
40239/******/ module.loaded = true;
40240/******/
40241/******/ // Return the exports of the module
40242/******/ return module.exports;
40243/******/ }
40244/******/
40245/******/ // expose the module cache
40246/******/ __webpack_require__.c = __webpack_module_cache__;
40247/******/
40248/************************************************************************/
40249/******/ /* webpack/runtime/define property getters */
40250/******/ (() => {
40251/******/ // define getter functions for harmony exports
40252/******/ __webpack_require__.d = (exports, definition) => {
40253/******/ for(var key in definition) {
40254/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
40255/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
40256/******/ }
40257/******/ }
40258/******/ };
40259/******/ })();
40260/******/
40261/******/ /* webpack/runtime/hasOwnProperty shorthand */
40262/******/ (() => {
40263/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
40264/******/ })();
40265/******/
40266/******/ /* webpack/runtime/make namespace object */
40267/******/ (() => {
40268/******/ // define __esModule on exports
40269/******/ __webpack_require__.r = (exports) => {
40270/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
40271/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
40272/******/ }
40273/******/ Object.defineProperty(exports, '__esModule', { value: true });
40274/******/ };
40275/******/ })();
40276/******/
40277/******/ /* webpack/runtime/node module decorator */
40278/******/ (() => {
40279/******/ __webpack_require__.nmd = (module) => {
40280/******/ module.paths = [];
40281/******/ if (!module.children) module.children = [];
40282/******/ return module;
40283/******/ };
40284/******/ })();
40285/******/
40286/************************************************************************/
40287/******/
40288/******/ // module cache are used so entry inlining is disabled
40289/******/ // startup
40290/******/ // Load entry module and return exports
40291/******/ var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 0);
40292/******/ var __webpack_export_target__ = exports;
40293/******/ for(var i in __webpack_exports__) __webpack_export_target__[i] = __webpack_exports__[i];
40294/******/ if(__webpack_exports__.__esModule) Object.defineProperty(__webpack_export_target__, "__esModule", { value: true });
40295/******/
40296/******/ })()
40297;
\No newline at end of file