UNPKG

2.63 MBJavaScriptView Raw
1(function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap
2/******/ // The module cache
3/******/ var installedModules = {};
4/******/
5/******/ // The require function
6/******/ function __webpack_require__(moduleId) {
7/******/
8/******/ // Check if module is in cache
9/******/ if(installedModules[moduleId]) {
10/******/ return installedModules[moduleId].exports;
11/******/ }
12/******/ // Create a new module (and put it into the cache)
13/******/ var module = installedModules[moduleId] = {
14/******/ i: moduleId,
15/******/ l: false,
16/******/ exports: {}
17/******/ };
18/******/
19/******/ // Execute the module function
20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ // Flag the module as loaded
23/******/ module.l = true;
24/******/
25/******/ // Return the exports of the module
26/******/ return module.exports;
27/******/ }
28/******/
29/******/
30/******/ // expose the modules object (__webpack_modules__)
31/******/ __webpack_require__.m = modules;
32/******/
33/******/ // expose the module cache
34/******/ __webpack_require__.c = installedModules;
35/******/
36/******/ // define getter function for harmony exports
37/******/ __webpack_require__.d = function(exports, name, getter) {
38/******/ if(!__webpack_require__.o(exports, name)) {
39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40/******/ }
41/******/ };
42/******/
43/******/ // define __esModule on exports
44/******/ __webpack_require__.r = function(exports) {
45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47/******/ }
48/******/ Object.defineProperty(exports, '__esModule', { value: true });
49/******/ };
50/******/
51/******/ // create a fake namespace object
52/******/ // mode & 1: value is a module id, require it
53/******/ // mode & 2: merge all properties of value into the ns
54/******/ // mode & 4: return value when already ns object
55/******/ // mode & 8|1: behave like require
56/******/ __webpack_require__.t = function(value, mode) {
57/******/ if(mode & 1) value = __webpack_require__(value);
58/******/ if(mode & 8) return value;
59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60/******/ var ns = Object.create(null);
61/******/ __webpack_require__.r(ns);
62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64/******/ return ns;
65/******/ };
66/******/
67/******/ // getDefaultExport function for compatibility with non-harmony modules
68/******/ __webpack_require__.n = function(module) {
69/******/ var getter = module && module.__esModule ?
70/******/ function getDefault() { return module['default']; } :
71/******/ function getModuleExports() { return module; };
72/******/ __webpack_require__.d(getter, 'a', getter);
73/******/ return getter;
74/******/ };
75/******/
76/******/ // Object.prototype.hasOwnProperty.call
77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78/******/
79/******/ // __webpack_public_path__
80/******/ __webpack_require__.p = "";
81/******/
82/******/
83/******/ // Load entry module and return exports
84/******/ return __webpack_require__(__webpack_require__.s = 0);
85/******/ })
86/************************************************************************/
87/******/ ([
88/* 0 */
89/***/ (function(module, exports, __webpack_require__) {
90
91"use strict";
92
93var __assign = (this && this.__assign) || function () {
94 __assign = Object.assign || function(t) {
95 for (var s, i = 1, n = arguments.length; i < n; i++) {
96 s = arguments[i];
97 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
98 t[p] = s[p];
99 }
100 return t;
101 };
102 return __assign.apply(this, arguments);
103};
104var __importStar = (this && this.__importStar) || function (mod) {
105 if (mod && mod.__esModule) return mod;
106 var result = {};
107 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
108 result["default"] = mod;
109 return result;
110};
111var __importDefault = (this && this.__importDefault) || function (mod) {
112 return (mod && mod.__esModule) ? mod : { "default": mod };
113};
114Object.defineProperty(exports, "__esModule", { value: true });
115var shvl = __importStar(__webpack_require__(1));
116var vscode_languageserver_1 = __webpack_require__(2);
117var constant_1 = __webpack_require__(44);
118var completion_1 = __webpack_require__(45);
119var completionResolve_1 = __webpack_require__(157);
120var definition_1 = __webpack_require__(158);
121var documentHighlight_1 = __webpack_require__(159);
122var foldingRange_1 = __webpack_require__(160);
123var hover_1 = __webpack_require__(161);
124var references_1 = __webpack_require__(162);
125var rename_1 = __webpack_require__(163);
126var signatureHelp_1 = __webpack_require__(164);
127var builtin_1 = __webpack_require__(59);
128var config_1 = __importDefault(__webpack_require__(55));
129var connection_1 = __webpack_require__(138);
130var documents_1 = __webpack_require__(56);
131var parser_1 = __webpack_require__(165);
132var selectionRange_1 = __webpack_require__(368);
133var documentSymbol_1 = __webpack_require__(369);
134// lsp initialize
135connection_1.connection.onInitialize(function (param) {
136 var _a = param.initializationOptions, initializationOptions = _a === void 0 ? {} : _a;
137 var iskeyword = initializationOptions.iskeyword, runtimepath = initializationOptions.runtimepath, vimruntime = initializationOptions.vimruntime, diagnostic = initializationOptions.diagnostic, suggest = initializationOptions.suggest, indexes = initializationOptions.indexes;
138 var runtimepaths = runtimepath ? runtimepath.split(",") : [];
139 // config by user's initializationOptions
140 var conf = {
141 iskeyword: iskeyword || "",
142 runtimepath: runtimepaths,
143 vimruntime: (vimruntime || "").trim(),
144 diagnostic: __assign({ enable: true }, (diagnostic || {})),
145 snippetSupport: shvl.get(param, "capabilities.textDocument.completion.completionItem.snippetSupport"),
146 suggest: __assign({ fromRuntimepath: false, fromVimruntime: true }, (suggest || {})),
147 indexes: __assign({ runtimepath: true, gap: 100, count: 1, projectRootPatterns: constant_1.projectRootPatterns }, (indexes || {})),
148 };
149 // init config
150 config_1.default.init(conf);
151 // init builtin docs
152 builtin_1.builtinDocs.init();
153 return {
154 capabilities: {
155 textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
156 documentHighlightProvider: true,
157 foldingRangeProvider: true,
158 selectionRangeProvider: true,
159 documentSymbolProvider: true,
160 hoverProvider: true,
161 completionProvider: {
162 triggerCharacters: [".", ":", "#", "[", "&", "$", "<", '"', "'"],
163 resolveProvider: true,
164 },
165 signatureHelpProvider: {
166 triggerCharacters: ["(", ","],
167 },
168 definitionProvider: true,
169 referencesProvider: true,
170 renameProvider: {
171 prepareProvider: true,
172 },
173 },
174 };
175});
176// document change or open
177documents_1.documents.onDidChangeContent(function (change) {
178 parser_1.next(change.document);
179});
180documents_1.documents.onDidClose(function (evt) {
181 parser_1.unsubscribe(evt.document);
182});
183// listen for document's open/close/change
184documents_1.documents.listen(connection_1.connection);
185// handle completion
186connection_1.connection.onCompletion(completion_1.completionProvider);
187// handle completion resolve
188connection_1.connection.onCompletionResolve(completionResolve_1.completionResolveProvider);
189// handle signature help
190connection_1.connection.onSignatureHelp(signatureHelp_1.signatureHelpProvider);
191// handle hover
192connection_1.connection.onHover(hover_1.hoverProvider);
193// handle definition request
194connection_1.connection.onDefinition(definition_1.definitionProvider);
195// handle references
196connection_1.connection.onReferences(references_1.referencesProvider);
197// handle rename
198connection_1.connection.onPrepareRename(rename_1.prepareProvider);
199connection_1.connection.onRenameRequest(rename_1.renameProvider);
200// document highlight
201connection_1.connection.onDocumentHighlight(documentHighlight_1.documentHighlightProvider);
202// folding range
203connection_1.connection.onFoldingRanges(foldingRange_1.foldingRangeProvider);
204// select range
205connection_1.connection.onSelectionRanges(selectionRange_1.selectionRangeProvider);
206// document symbols
207connection_1.connection.onDocumentSymbol(documentSymbol_1.documentSymbolProvider);
208connection_1.connection.onNotification('$/change/iskeyword', function (iskeyword) {
209 config_1.default.changeByKey('iskeyword', iskeyword);
210});
211// lsp start
212connection_1.connection.listen();
213
214
215/***/ }),
216/* 1 */
217/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
218
219"use strict";
220__webpack_require__.r(__webpack_exports__);
221/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return t; });
222/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return n; });
223function 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}
224//# sourceMappingURL=shvl.mjs.map
225
226
227/***/ }),
228/* 2 */
229/***/ (function(module, exports, __webpack_require__) {
230
231"use strict";
232/* --------------------------------------------------------------------------------------------
233 * Copyright (c) Microsoft Corporation. All rights reserved.
234 * Licensed under the MIT License. See License.txt in the project root for license information.
235 * ------------------------------------------------------------------------------------------ */
236/// <reference path="../typings/thenable.d.ts" />
237
238function __export(m) {
239 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
240}
241Object.defineProperty(exports, "__esModule", { value: true });
242const vscode_languageserver_protocol_1 = __webpack_require__(3);
243exports.Event = vscode_languageserver_protocol_1.Event;
244const configuration_1 = __webpack_require__(33);
245const workspaceFolders_1 = __webpack_require__(35);
246const progress_1 = __webpack_require__(36);
247const Is = __webpack_require__(34);
248const UUID = __webpack_require__(37);
249// ------------- Reexport the API surface of the language worker API ----------------------
250__export(__webpack_require__(3));
251const fm = __webpack_require__(38);
252var Files;
253(function (Files) {
254 Files.uriToFilePath = fm.uriToFilePath;
255 Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
256 Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
257 Files.resolve = fm.resolve;
258 Files.resolveModulePath = fm.resolveModulePath;
259})(Files = exports.Files || (exports.Files = {}));
260let shutdownReceived = false;
261let exitTimer = undefined;
262function setupExitTimer() {
263 const argName = '--clientProcessId';
264 function runTimer(value) {
265 try {
266 let processId = parseInt(value);
267 if (!isNaN(processId)) {
268 exitTimer = setInterval(() => {
269 try {
270 process.kill(processId, 0);
271 }
272 catch (ex) {
273 // Parent process doesn't exist anymore. Exit the server.
274 process.exit(shutdownReceived ? 0 : 1);
275 }
276 }, 3000);
277 }
278 }
279 catch (e) {
280 // Ignore errors;
281 }
282 }
283 for (let i = 2; i < process.argv.length; i++) {
284 let arg = process.argv[i];
285 if (arg === argName && i + 1 < process.argv.length) {
286 runTimer(process.argv[i + 1]);
287 return;
288 }
289 else {
290 let args = arg.split('=');
291 if (args[0] === argName) {
292 runTimer(args[1]);
293 }
294 }
295 }
296}
297setupExitTimer();
298function null2Undefined(value) {
299 if (value === null) {
300 return void 0;
301 }
302 return value;
303}
304/**
305 * A manager for simple text documents
306 */
307class TextDocuments {
308 /**
309 * Create a new text document manager.
310 */
311 constructor(configuration) {
312 this._documents = Object.create(null);
313 this._configuration = configuration;
314 this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
315 this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
316 this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
317 this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
318 this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
319 }
320 /**
321 * An event that fires when a text document managed by this manager
322 * has been opened or the content changes.
323 */
324 get onDidChangeContent() {
325 return this._onDidChangeContent.event;
326 }
327 /**
328 * An event that fires when a text document managed by this manager
329 * has been opened.
330 */
331 get onDidOpen() {
332 return this._onDidOpen.event;
333 }
334 /**
335 * An event that fires when a text document managed by this manager
336 * will be saved.
337 */
338 get onWillSave() {
339 return this._onWillSave.event;
340 }
341 /**
342 * Sets a handler that will be called if a participant wants to provide
343 * edits during a text document save.
344 */
345 onWillSaveWaitUntil(handler) {
346 this._willSaveWaitUntil = handler;
347 }
348 /**
349 * An event that fires when a text document managed by this manager
350 * has been saved.
351 */
352 get onDidSave() {
353 return this._onDidSave.event;
354 }
355 /**
356 * An event that fires when a text document managed by this manager
357 * has been closed.
358 */
359 get onDidClose() {
360 return this._onDidClose.event;
361 }
362 /**
363 * Returns the document for the given URI. Returns undefined if
364 * the document is not mananged by this instance.
365 *
366 * @param uri The text document's URI to retrieve.
367 * @return the text document or `undefined`.
368 */
369 get(uri) {
370 return this._documents[uri];
371 }
372 /**
373 * Returns all text documents managed by this instance.
374 *
375 * @return all text documents.
376 */
377 all() {
378 return Object.keys(this._documents).map(key => this._documents[key]);
379 }
380 /**
381 * Returns the URIs of all text documents managed by this instance.
382 *
383 * @return the URI's of all text documents.
384 */
385 keys() {
386 return Object.keys(this._documents);
387 }
388 /**
389 * Listens for `low level` notification on the given connection to
390 * update the text documents managed by this instance.
391 *
392 * @param connection The connection to listen on.
393 */
394 listen(connection) {
395 connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
396 connection.onDidOpenTextDocument((event) => {
397 let td = event.textDocument;
398 let document = this._configuration.create(td.uri, td.languageId, td.version, td.text);
399 this._documents[td.uri] = document;
400 let toFire = Object.freeze({ document });
401 this._onDidOpen.fire(toFire);
402 this._onDidChangeContent.fire(toFire);
403 });
404 connection.onDidChangeTextDocument((event) => {
405 let td = event.textDocument;
406 let changes = event.contentChanges;
407 if (changes.length === 0) {
408 return;
409 }
410 let document = this._documents[td.uri];
411 const { version } = td;
412 if (version === null || version === void 0) {
413 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
414 }
415 document = this._configuration.update(document, changes, version);
416 this._documents[td.uri] = document;
417 this._onDidChangeContent.fire(Object.freeze({ document }));
418 });
419 connection.onDidCloseTextDocument((event) => {
420 let document = this._documents[event.textDocument.uri];
421 if (document) {
422 delete this._documents[event.textDocument.uri];
423 this._onDidClose.fire(Object.freeze({ document }));
424 }
425 });
426 connection.onWillSaveTextDocument((event) => {
427 let document = this._documents[event.textDocument.uri];
428 if (document) {
429 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
430 }
431 });
432 connection.onWillSaveTextDocumentWaitUntil((event, token) => {
433 let document = this._documents[event.textDocument.uri];
434 if (document && this._willSaveWaitUntil) {
435 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
436 }
437 else {
438 return [];
439 }
440 });
441 connection.onDidSaveTextDocument((event) => {
442 let document = this._documents[event.textDocument.uri];
443 if (document) {
444 this._onDidSave.fire(Object.freeze({ document }));
445 }
446 });
447 }
448}
449exports.TextDocuments = TextDocuments;
450/**
451 * Helps tracking error message. Equal occurences of the same
452 * message are only stored once. This class is for example
453 * useful if text documents are validated in a loop and equal
454 * error message should be folded into one.
455 */
456class ErrorMessageTracker {
457 constructor() {
458 this._messages = Object.create(null);
459 }
460 /**
461 * Add a message to the tracker.
462 *
463 * @param message The message to add.
464 */
465 add(message) {
466 let count = this._messages[message];
467 if (!count) {
468 count = 0;
469 }
470 count++;
471 this._messages[message] = count;
472 }
473 /**
474 * Send all tracked messages to the connection's window.
475 *
476 * @param connection The connection established between client and server.
477 */
478 sendErrors(connection) {
479 Object.keys(this._messages).forEach(message => {
480 connection.window.showErrorMessage(message);
481 });
482 }
483}
484exports.ErrorMessageTracker = ErrorMessageTracker;
485class RemoteConsoleImpl {
486 constructor() {
487 }
488 rawAttach(connection) {
489 this._rawConnection = connection;
490 }
491 attach(connection) {
492 this._connection = connection;
493 }
494 get connection() {
495 if (!this._connection) {
496 throw new Error('Remote is not attached to a connection yet.');
497 }
498 return this._connection;
499 }
500 fillServerCapabilities(_capabilities) {
501 }
502 initialize(_capabilities) {
503 }
504 error(message) {
505 this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
506 }
507 warn(message) {
508 this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
509 }
510 info(message) {
511 this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
512 }
513 log(message) {
514 this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
515 }
516 send(type, message) {
517 if (this._rawConnection) {
518 this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
519 }
520 }
521}
522class _RemoteWindowImpl {
523 constructor() {
524 }
525 attach(connection) {
526 this._connection = connection;
527 }
528 get connection() {
529 if (!this._connection) {
530 throw new Error('Remote is not attached to a connection yet.');
531 }
532 return this._connection;
533 }
534 initialize(_capabilities) {
535 }
536 fillServerCapabilities(_capabilities) {
537 }
538 showErrorMessage(message, ...actions) {
539 let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
540 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
541 }
542 showWarningMessage(message, ...actions) {
543 let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
544 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
545 }
546 showInformationMessage(message, ...actions) {
547 let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
548 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
549 }
550}
551const RemoteWindowImpl = progress_1.ProgressFeature(_RemoteWindowImpl);
552var BulkRegistration;
553(function (BulkRegistration) {
554 /**
555 * Creates a new bulk registration.
556 * @return an empty bulk registration.
557 */
558 function create() {
559 return new BulkRegistrationImpl();
560 }
561 BulkRegistration.create = create;
562})(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
563class BulkRegistrationImpl {
564 constructor() {
565 this._registrations = [];
566 this._registered = new Set();
567 }
568 add(type, registerOptions) {
569 const method = Is.string(type) ? type : type.method;
570 if (this._registered.has(method)) {
571 throw new Error(`${method} is already added to this registration`);
572 }
573 const id = UUID.generateUuid();
574 this._registrations.push({
575 id: id,
576 method: method,
577 registerOptions: registerOptions || {}
578 });
579 this._registered.add(method);
580 }
581 asRegistrationParams() {
582 return {
583 registrations: this._registrations
584 };
585 }
586}
587var BulkUnregistration;
588(function (BulkUnregistration) {
589 function create() {
590 return new BulkUnregistrationImpl(undefined, []);
591 }
592 BulkUnregistration.create = create;
593})(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
594class BulkUnregistrationImpl {
595 constructor(_connection, unregistrations) {
596 this._connection = _connection;
597 this._unregistrations = new Map();
598 unregistrations.forEach(unregistration => {
599 this._unregistrations.set(unregistration.method, unregistration);
600 });
601 }
602 get isAttached() {
603 return !!this._connection;
604 }
605 attach(connection) {
606 this._connection = connection;
607 }
608 add(unregistration) {
609 this._unregistrations.set(unregistration.method, unregistration);
610 }
611 dispose() {
612 let unregistrations = [];
613 for (let unregistration of this._unregistrations.values()) {
614 unregistrations.push(unregistration);
615 }
616 let params = {
617 unregisterations: unregistrations
618 };
619 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
620 this._connection.console.info(`Bulk unregistration failed.`);
621 });
622 }
623 disposeSingle(arg) {
624 const method = Is.string(arg) ? arg : arg.method;
625 const unregistration = this._unregistrations.get(method);
626 if (!unregistration) {
627 return false;
628 }
629 let params = {
630 unregisterations: [unregistration]
631 };
632 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
633 this._unregistrations.delete(method);
634 }, (_error) => {
635 this._connection.console.info(`Unregistering request handler for ${unregistration.id} failed.`);
636 });
637 return true;
638 }
639}
640class RemoteClientImpl {
641 attach(connection) {
642 this._connection = connection;
643 }
644 get connection() {
645 if (!this._connection) {
646 throw new Error('Remote is not attached to a connection yet.');
647 }
648 return this._connection;
649 }
650 initialize(_capabilities) {
651 }
652 fillServerCapabilities(_capabilities) {
653 }
654 register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
655 if (typeOrRegistrations instanceof BulkRegistrationImpl) {
656 return this.registerMany(typeOrRegistrations);
657 }
658 else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
659 return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
660 }
661 else {
662 return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
663 }
664 }
665 registerSingle1(unregistration, type, registerOptions) {
666 const method = Is.string(type) ? type : type.method;
667 const id = UUID.generateUuid();
668 let params = {
669 registrations: [{ id, method, registerOptions: registerOptions || {} }]
670 };
671 if (!unregistration.isAttached) {
672 unregistration.attach(this._connection);
673 }
674 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
675 unregistration.add({ id: id, method: method });
676 return unregistration;
677 }, (_error) => {
678 this.connection.console.info(`Registering request handler for ${method} failed.`);
679 return Promise.reject(_error);
680 });
681 }
682 registerSingle2(type, registerOptions) {
683 const method = Is.string(type) ? type : type.method;
684 const id = UUID.generateUuid();
685 let params = {
686 registrations: [{ id, method, registerOptions: registerOptions || {} }]
687 };
688 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
689 return vscode_languageserver_protocol_1.Disposable.create(() => {
690 this.unregisterSingle(id, method);
691 });
692 }, (_error) => {
693 this.connection.console.info(`Registering request handler for ${method} failed.`);
694 return Promise.reject(_error);
695 });
696 }
697 unregisterSingle(id, method) {
698 let params = {
699 unregisterations: [{ id, method }]
700 };
701 return this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
702 this.connection.console.info(`Unregistering request handler for ${id} failed.`);
703 });
704 }
705 registerMany(registrations) {
706 let params = registrations.asRegistrationParams();
707 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
708 return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
709 }, (_error) => {
710 this.connection.console.info(`Bulk registration failed.`);
711 return Promise.reject(_error);
712 });
713 }
714}
715class _RemoteWorkspaceImpl {
716 constructor() {
717 }
718 attach(connection) {
719 this._connection = connection;
720 }
721 get connection() {
722 if (!this._connection) {
723 throw new Error('Remote is not attached to a connection yet.');
724 }
725 return this._connection;
726 }
727 initialize(_capabilities) {
728 }
729 fillServerCapabilities(_capabilities) {
730 }
731 applyEdit(paramOrEdit) {
732 function isApplyWorkspaceEditParams(value) {
733 return value && !!value.edit;
734 }
735 let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
736 return this._connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
737 }
738}
739const RemoteWorkspaceImpl = workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl));
740class TelemetryImpl {
741 constructor() {
742 }
743 attach(connection) {
744 this._connection = connection;
745 }
746 get connection() {
747 if (!this._connection) {
748 throw new Error('Remote is not attached to a connection yet.');
749 }
750 return this._connection;
751 }
752 initialize(_capabilities) {
753 }
754 fillServerCapabilities(_capabilities) {
755 }
756 logEvent(data) {
757 this._connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
758 }
759}
760class TracerImpl {
761 constructor() {
762 this._trace = vscode_languageserver_protocol_1.Trace.Off;
763 }
764 attach(connection) {
765 this._connection = connection;
766 }
767 get connection() {
768 if (!this._connection) {
769 throw new Error('Remote is not attached to a connection yet.');
770 }
771 return this._connection;
772 }
773 initialize(_capabilities) {
774 }
775 fillServerCapabilities(_capabilities) {
776 }
777 set trace(value) {
778 this._trace = value;
779 }
780 log(message, verbose) {
781 if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
782 return;
783 }
784 this._connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
785 message: message,
786 verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
787 });
788 }
789}
790class LanguagesImpl {
791 constructor() {
792 }
793 attach(connection) {
794 this._connection = connection;
795 }
796 get connection() {
797 if (!this._connection) {
798 throw new Error('Remote is not attached to a connection yet.');
799 }
800 return this._connection;
801 }
802 initialize(_capabilities) {
803 }
804 fillServerCapabilities(_capabilities) {
805 }
806 attachWorkDoneProgress(params) {
807 return progress_1.attachWorkDone(this.connection, params);
808 }
809 attachPartialResultProgress(_type, params) {
810 return progress_1.attachPartialResult(this.connection, params);
811 }
812}
813exports.LanguagesImpl = LanguagesImpl;
814function combineConsoleFeatures(one, two) {
815 return function (Base) {
816 return two(one(Base));
817 };
818}
819exports.combineConsoleFeatures = combineConsoleFeatures;
820function combineTelemetryFeatures(one, two) {
821 return function (Base) {
822 return two(one(Base));
823 };
824}
825exports.combineTelemetryFeatures = combineTelemetryFeatures;
826function combineTracerFeatures(one, two) {
827 return function (Base) {
828 return two(one(Base));
829 };
830}
831exports.combineTracerFeatures = combineTracerFeatures;
832function combineClientFeatures(one, two) {
833 return function (Base) {
834 return two(one(Base));
835 };
836}
837exports.combineClientFeatures = combineClientFeatures;
838function combineWindowFeatures(one, two) {
839 return function (Base) {
840 return two(one(Base));
841 };
842}
843exports.combineWindowFeatures = combineWindowFeatures;
844function combineWorkspaceFeatures(one, two) {
845 return function (Base) {
846 return two(one(Base));
847 };
848}
849exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
850function combineLanguagesFeatures(one, two) {
851 return function (Base) {
852 return two(one(Base));
853 };
854}
855exports.combineLanguagesFeatures = combineLanguagesFeatures;
856function combineFeatures(one, two) {
857 function combine(one, two, func) {
858 if (one && two) {
859 return func(one, two);
860 }
861 else if (one) {
862 return one;
863 }
864 else {
865 return two;
866 }
867 }
868 let result = {
869 __brand: 'features',
870 console: combine(one.console, two.console, combineConsoleFeatures),
871 tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
872 telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
873 client: combine(one.client, two.client, combineClientFeatures),
874 window: combine(one.window, two.window, combineWindowFeatures),
875 workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
876 };
877 return result;
878}
879exports.combineFeatures = combineFeatures;
880function createConnection(arg1, arg2, arg3, arg4) {
881 let factories;
882 let input;
883 let output;
884 let strategy;
885 if (arg1 !== void 0 && arg1.__brand === 'features') {
886 factories = arg1;
887 arg1 = arg2;
888 arg2 = arg3;
889 arg3 = arg4;
890 }
891 if (vscode_languageserver_protocol_1.ConnectionStrategy.is(arg1)) {
892 strategy = arg1;
893 }
894 else {
895 input = arg1;
896 output = arg2;
897 strategy = arg3;
898 }
899 return _createConnection(input, output, strategy, factories);
900}
901exports.createConnection = createConnection;
902function _createConnection(input, output, strategy, factories) {
903 if (!input && !output && process.argv.length > 2) {
904 let port = void 0;
905 let pipeName = void 0;
906 let argv = process.argv.slice(2);
907 for (let i = 0; i < argv.length; i++) {
908 let arg = argv[i];
909 if (arg === '--node-ipc') {
910 input = new vscode_languageserver_protocol_1.IPCMessageReader(process);
911 output = new vscode_languageserver_protocol_1.IPCMessageWriter(process);
912 break;
913 }
914 else if (arg === '--stdio') {
915 input = process.stdin;
916 output = process.stdout;
917 break;
918 }
919 else if (arg === '--socket') {
920 port = parseInt(argv[i + 1]);
921 break;
922 }
923 else if (arg === '--pipe') {
924 pipeName = argv[i + 1];
925 break;
926 }
927 else {
928 var args = arg.split('=');
929 if (args[0] === '--socket') {
930 port = parseInt(args[1]);
931 break;
932 }
933 else if (args[0] === '--pipe') {
934 pipeName = args[1];
935 break;
936 }
937 }
938 }
939 if (port) {
940 let transport = vscode_languageserver_protocol_1.createServerSocketTransport(port);
941 input = transport[0];
942 output = transport[1];
943 }
944 else if (pipeName) {
945 let transport = vscode_languageserver_protocol_1.createServerPipeTransport(pipeName);
946 input = transport[0];
947 output = transport[1];
948 }
949 }
950 var commandLineMessage = 'Use arguments of createConnection or set command line parameters: \'--node-ipc\', \'--stdio\' or \'--socket={number}\'';
951 if (!input) {
952 throw new Error('Connection input stream is not set. ' + commandLineMessage);
953 }
954 if (!output) {
955 throw new Error('Connection output stream is not set. ' + commandLineMessage);
956 }
957 // Backwards compatibility
958 if (Is.func(input.read) && Is.func(input.on)) {
959 let inputStream = input;
960 inputStream.on('end', () => {
961 process.exit(shutdownReceived ? 0 : 1);
962 });
963 inputStream.on('close', () => {
964 process.exit(shutdownReceived ? 0 : 1);
965 });
966 }
967 const logger = (factories && factories.console ? new (factories.console(RemoteConsoleImpl))() : new RemoteConsoleImpl());
968 const connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger, strategy);
969 logger.rawAttach(connection);
970 const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
971 const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
972 const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
973 const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
974 const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
975 const languages = (factories && factories.languages ? new (factories.languages(LanguagesImpl))() : new LanguagesImpl());
976 const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace, languages];
977 function asPromise(value) {
978 if (value instanceof Promise) {
979 return value;
980 }
981 else if (Is.thenable(value)) {
982 return new Promise((resolve, reject) => {
983 value.then((resolved) => resolve(resolved), (error) => reject(error));
984 });
985 }
986 else {
987 return Promise.resolve(value);
988 }
989 }
990 let shutdownHandler = undefined;
991 let initializeHandler = undefined;
992 let exitHandler = undefined;
993 let protocolConnection = {
994 listen: () => connection.listen(),
995 sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
996 onRequest: (type, handler) => connection.onRequest(type, handler),
997 sendNotification: (type, param) => {
998 const method = Is.string(type) ? type : type.method;
999 if (arguments.length === 1) {
1000 connection.sendNotification(method);
1001 }
1002 else {
1003 connection.sendNotification(method, param);
1004 }
1005 },
1006 onNotification: (type, handler) => connection.onNotification(type, handler),
1007 onProgress: connection.onProgress,
1008 sendProgress: connection.sendProgress,
1009 onInitialize: (handler) => initializeHandler = handler,
1010 onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
1011 onShutdown: (handler) => shutdownHandler = handler,
1012 onExit: (handler) => exitHandler = handler,
1013 get console() { return logger; },
1014 get telemetry() { return telemetry; },
1015 get tracer() { return tracer; },
1016 get client() { return client; },
1017 get window() { return remoteWindow; },
1018 get workspace() { return workspace; },
1019 get languages() { return languages; },
1020 onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
1021 onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
1022 __textDocumentSync: undefined,
1023 onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
1024 onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
1025 onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
1026 onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
1027 onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
1028 onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
1029 sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
1030 onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, (params, cancel) => {
1031 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1032 }),
1033 onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, (params, cancel) => {
1034 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1035 }),
1036 onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
1037 onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, (params, cancel) => {
1038 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1039 }),
1040 onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, (params, cancel) => {
1041 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1042 }),
1043 onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, (params, cancel) => {
1044 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1045 }),
1046 onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, (params, cancel) => {
1047 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1048 }),
1049 onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, (params, cancel) => {
1050 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1051 }),
1052 onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, (params, cancel) => {
1053 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1054 }),
1055 onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, (params, cancel) => {
1056 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1057 }),
1058 onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, (params, cancel) => {
1059 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1060 }),
1061 onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, (params, cancel) => {
1062 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1063 }),
1064 onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, (params, cancel) => {
1065 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1066 }),
1067 onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, (params, cancel) => {
1068 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1069 }),
1070 onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, (params, cancel) => {
1071 return handler(params, cancel);
1072 }),
1073 onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, (params, cancel) => {
1074 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1075 }),
1076 onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, (params, cancel) => {
1077 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1078 }),
1079 onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, (params, cancel) => {
1080 return handler(params, cancel);
1081 }),
1082 onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, (params, cancel) => {
1083 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1084 }),
1085 onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, (params, cancel) => {
1086 return handler(params, cancel);
1087 }),
1088 onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, (params, cancel) => {
1089 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1090 }),
1091 onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, (params, cancel) => {
1092 return handler(params, cancel);
1093 }),
1094 onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, (params, cancel) => {
1095 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1096 }),
1097 onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, (params, cancel) => {
1098 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1099 }),
1100 onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, (params, cancel) => {
1101 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1102 }),
1103 onSelectionRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, (params, cancel) => {
1104 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1105 }),
1106 onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, (params, cancel) => {
1107 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1108 }),
1109 dispose: () => connection.dispose()
1110 };
1111 for (let remote of allRemotes) {
1112 remote.attach(protocolConnection);
1113 }
1114 connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
1115 const processId = params.processId;
1116 if (Is.number(processId) && exitTimer === void 0) {
1117 // We received a parent process id. Set up a timer to periodically check
1118 // if the parent is still alive.
1119 setInterval(() => {
1120 try {
1121 process.kill(processId, 0);
1122 }
1123 catch (ex) {
1124 // Parent process doesn't exist anymore. Exit the server.
1125 process.exit(shutdownReceived ? 0 : 1);
1126 }
1127 }, 3000);
1128 }
1129 if (Is.string(params.trace)) {
1130 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
1131 }
1132 for (let remote of allRemotes) {
1133 remote.initialize(params.capabilities);
1134 }
1135 if (initializeHandler) {
1136 let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token, progress_1.attachWorkDone(connection, params), undefined);
1137 return asPromise(result).then((value) => {
1138 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
1139 return value;
1140 }
1141 let result = value;
1142 if (!result) {
1143 result = { capabilities: {} };
1144 }
1145 let capabilities = result.capabilities;
1146 if (!capabilities) {
1147 capabilities = {};
1148 result.capabilities = capabilities;
1149 }
1150 if (capabilities.textDocumentSync === void 0 || capabilities.textDocumentSync === null) {
1151 capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1152 }
1153 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
1154 capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1155 }
1156 for (let remote of allRemotes) {
1157 remote.fillServerCapabilities(capabilities);
1158 }
1159 return result;
1160 });
1161 }
1162 else {
1163 let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
1164 for (let remote of allRemotes) {
1165 remote.fillServerCapabilities(result.capabilities);
1166 }
1167 return result;
1168 }
1169 });
1170 connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
1171 shutdownReceived = true;
1172 if (shutdownHandler) {
1173 return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1174 }
1175 else {
1176 return undefined;
1177 }
1178 });
1179 connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
1180 try {
1181 if (exitHandler) {
1182 exitHandler();
1183 }
1184 }
1185 finally {
1186 if (shutdownReceived) {
1187 process.exit(0);
1188 }
1189 else {
1190 process.exit(1);
1191 }
1192 }
1193 });
1194 connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
1195 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
1196 });
1197 return protocolConnection;
1198}
1199// Export the protocol currently in proposed state.
1200const callHierarchy_proposed_1 = __webpack_require__(42);
1201const st = __webpack_require__(43);
1202var ProposedFeatures;
1203(function (ProposedFeatures) {
1204 ProposedFeatures.all = {
1205 __brand: 'features',
1206 languages: combineLanguagesFeatures(callHierarchy_proposed_1.CallHierarchyFeature, st.SemanticTokensFeature)
1207 };
1208 ProposedFeatures.SemanticTokensBuilder = st.SemanticTokensBuilder;
1209})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
1210//# sourceMappingURL=main.js.map
1211
1212/***/ }),
1213/* 3 */
1214/***/ (function(module, exports, __webpack_require__) {
1215
1216"use strict";
1217/* --------------------------------------------------------------------------------------------
1218 * Copyright (c) Microsoft Corporation. All rights reserved.
1219 * Licensed under the MIT License. See License.txt in the project root for license information.
1220 * ------------------------------------------------------------------------------------------ */
1221
1222function __export(m) {
1223 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1224}
1225Object.defineProperty(exports, "__esModule", { value: true });
1226const vscode_jsonrpc_1 = __webpack_require__(4);
1227exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
1228exports.ResponseError = vscode_jsonrpc_1.ResponseError;
1229exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;
1230exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
1231exports.Disposable = vscode_jsonrpc_1.Disposable;
1232exports.Event = vscode_jsonrpc_1.Event;
1233exports.Emitter = vscode_jsonrpc_1.Emitter;
1234exports.Trace = vscode_jsonrpc_1.Trace;
1235exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;
1236exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
1237exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
1238exports.RequestType = vscode_jsonrpc_1.RequestType;
1239exports.RequestType0 = vscode_jsonrpc_1.RequestType0;
1240exports.NotificationType = vscode_jsonrpc_1.NotificationType;
1241exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
1242exports.MessageReader = vscode_jsonrpc_1.MessageReader;
1243exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;
1244exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
1245exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
1246exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
1247exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
1248exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
1249exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
1250exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
1251exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
1252exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
1253exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
1254exports.ProgressType = vscode_jsonrpc_1.ProgressType;
1255__export(__webpack_require__(18));
1256__export(__webpack_require__(19));
1257const callHierarchy = __webpack_require__(31);
1258const st = __webpack_require__(32);
1259var Proposed;
1260(function (Proposed) {
1261 let CallHierarchyPrepareRequest;
1262 (function (CallHierarchyPrepareRequest) {
1263 CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;
1264 CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;
1265 })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));
1266 let CallHierarchyIncomingCallsRequest;
1267 (function (CallHierarchyIncomingCallsRequest) {
1268 CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
1269 CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
1270 })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));
1271 let CallHierarchyOutgoingCallsRequest;
1272 (function (CallHierarchyOutgoingCallsRequest) {
1273 CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
1274 CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
1275 })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));
1276 Proposed.SemanticTokenTypes = st.SemanticTokenTypes;
1277 Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;
1278 Proposed.SemanticTokens = st.SemanticTokens;
1279 let SemanticTokensRequest;
1280 (function (SemanticTokensRequest) {
1281 SemanticTokensRequest.method = st.SemanticTokensRequest.method;
1282 SemanticTokensRequest.type = st.SemanticTokensRequest.type;
1283 })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));
1284 let SemanticTokensEditsRequest;
1285 (function (SemanticTokensEditsRequest) {
1286 SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;
1287 SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;
1288 })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));
1289 let SemanticTokensRangeRequest;
1290 (function (SemanticTokensRangeRequest) {
1291 SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;
1292 SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;
1293 })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));
1294})(Proposed = exports.Proposed || (exports.Proposed = {}));
1295function createProtocolConnection(reader, writer, logger, strategy) {
1296 return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
1297}
1298exports.createProtocolConnection = createProtocolConnection;
1299
1300
1301/***/ }),
1302/* 4 */
1303/***/ (function(module, exports, __webpack_require__) {
1304
1305"use strict";
1306/* --------------------------------------------------------------------------------------------
1307 * Copyright (c) Microsoft Corporation. All rights reserved.
1308 * Licensed under the MIT License. See License.txt in the project root for license information.
1309 * ------------------------------------------------------------------------------------------ */
1310/// <reference path="../typings/thenable.d.ts" />
1311
1312function __export(m) {
1313 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1314}
1315Object.defineProperty(exports, "__esModule", { value: true });
1316const Is = __webpack_require__(5);
1317const messages_1 = __webpack_require__(6);
1318exports.RequestType = messages_1.RequestType;
1319exports.RequestType0 = messages_1.RequestType0;
1320exports.RequestType1 = messages_1.RequestType1;
1321exports.RequestType2 = messages_1.RequestType2;
1322exports.RequestType3 = messages_1.RequestType3;
1323exports.RequestType4 = messages_1.RequestType4;
1324exports.RequestType5 = messages_1.RequestType5;
1325exports.RequestType6 = messages_1.RequestType6;
1326exports.RequestType7 = messages_1.RequestType7;
1327exports.RequestType8 = messages_1.RequestType8;
1328exports.RequestType9 = messages_1.RequestType9;
1329exports.ResponseError = messages_1.ResponseError;
1330exports.ErrorCodes = messages_1.ErrorCodes;
1331exports.NotificationType = messages_1.NotificationType;
1332exports.NotificationType0 = messages_1.NotificationType0;
1333exports.NotificationType1 = messages_1.NotificationType1;
1334exports.NotificationType2 = messages_1.NotificationType2;
1335exports.NotificationType3 = messages_1.NotificationType3;
1336exports.NotificationType4 = messages_1.NotificationType4;
1337exports.NotificationType5 = messages_1.NotificationType5;
1338exports.NotificationType6 = messages_1.NotificationType6;
1339exports.NotificationType7 = messages_1.NotificationType7;
1340exports.NotificationType8 = messages_1.NotificationType8;
1341exports.NotificationType9 = messages_1.NotificationType9;
1342const messageReader_1 = __webpack_require__(7);
1343exports.MessageReader = messageReader_1.MessageReader;
1344exports.StreamMessageReader = messageReader_1.StreamMessageReader;
1345exports.IPCMessageReader = messageReader_1.IPCMessageReader;
1346exports.SocketMessageReader = messageReader_1.SocketMessageReader;
1347const messageWriter_1 = __webpack_require__(9);
1348exports.MessageWriter = messageWriter_1.MessageWriter;
1349exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
1350exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
1351exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
1352const events_1 = __webpack_require__(8);
1353exports.Disposable = events_1.Disposable;
1354exports.Event = events_1.Event;
1355exports.Emitter = events_1.Emitter;
1356const cancellation_1 = __webpack_require__(10);
1357exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;
1358exports.CancellationToken = cancellation_1.CancellationToken;
1359const linkedMap_1 = __webpack_require__(11);
1360__export(__webpack_require__(12));
1361__export(__webpack_require__(17));
1362var CancelNotification;
1363(function (CancelNotification) {
1364 CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
1365})(CancelNotification || (CancelNotification = {}));
1366var ProgressNotification;
1367(function (ProgressNotification) {
1368 ProgressNotification.type = new messages_1.NotificationType('$/progress');
1369})(ProgressNotification || (ProgressNotification = {}));
1370class ProgressType {
1371 constructor() {
1372 }
1373}
1374exports.ProgressType = ProgressType;
1375exports.NullLogger = Object.freeze({
1376 error: () => { },
1377 warn: () => { },
1378 info: () => { },
1379 log: () => { }
1380});
1381var Trace;
1382(function (Trace) {
1383 Trace[Trace["Off"] = 0] = "Off";
1384 Trace[Trace["Messages"] = 1] = "Messages";
1385 Trace[Trace["Verbose"] = 2] = "Verbose";
1386})(Trace = exports.Trace || (exports.Trace = {}));
1387(function (Trace) {
1388 function fromString(value) {
1389 if (!Is.string(value)) {
1390 return Trace.Off;
1391 }
1392 value = value.toLowerCase();
1393 switch (value) {
1394 case 'off':
1395 return Trace.Off;
1396 case 'messages':
1397 return Trace.Messages;
1398 case 'verbose':
1399 return Trace.Verbose;
1400 default:
1401 return Trace.Off;
1402 }
1403 }
1404 Trace.fromString = fromString;
1405 function toString(value) {
1406 switch (value) {
1407 case Trace.Off:
1408 return 'off';
1409 case Trace.Messages:
1410 return 'messages';
1411 case Trace.Verbose:
1412 return 'verbose';
1413 default:
1414 return 'off';
1415 }
1416 }
1417 Trace.toString = toString;
1418})(Trace = exports.Trace || (exports.Trace = {}));
1419var TraceFormat;
1420(function (TraceFormat) {
1421 TraceFormat["Text"] = "text";
1422 TraceFormat["JSON"] = "json";
1423})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1424(function (TraceFormat) {
1425 function fromString(value) {
1426 value = value.toLowerCase();
1427 if (value === 'json') {
1428 return TraceFormat.JSON;
1429 }
1430 else {
1431 return TraceFormat.Text;
1432 }
1433 }
1434 TraceFormat.fromString = fromString;
1435})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1436var SetTraceNotification;
1437(function (SetTraceNotification) {
1438 SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');
1439})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
1440var LogTraceNotification;
1441(function (LogTraceNotification) {
1442 LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');
1443})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
1444var ConnectionErrors;
1445(function (ConnectionErrors) {
1446 /**
1447 * The connection is closed.
1448 */
1449 ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
1450 /**
1451 * The connection got disposed.
1452 */
1453 ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
1454 /**
1455 * The connection is already in listening mode.
1456 */
1457 ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
1458})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
1459class ConnectionError extends Error {
1460 constructor(code, message) {
1461 super(message);
1462 this.code = code;
1463 Object.setPrototypeOf(this, ConnectionError.prototype);
1464 }
1465}
1466exports.ConnectionError = ConnectionError;
1467var ConnectionStrategy;
1468(function (ConnectionStrategy) {
1469 function is(value) {
1470 let candidate = value;
1471 return candidate && Is.func(candidate.cancelUndispatched);
1472 }
1473 ConnectionStrategy.is = is;
1474})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
1475var ConnectionState;
1476(function (ConnectionState) {
1477 ConnectionState[ConnectionState["New"] = 1] = "New";
1478 ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
1479 ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
1480 ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
1481})(ConnectionState || (ConnectionState = {}));
1482function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
1483 let sequenceNumber = 0;
1484 let notificationSquenceNumber = 0;
1485 let unknownResponseSquenceNumber = 0;
1486 const version = '2.0';
1487 let starRequestHandler = undefined;
1488 let requestHandlers = Object.create(null);
1489 let starNotificationHandler = undefined;
1490 let notificationHandlers = Object.create(null);
1491 let progressHandlers = new Map();
1492 let timer;
1493 let messageQueue = new linkedMap_1.LinkedMap();
1494 let responsePromises = Object.create(null);
1495 let requestTokens = Object.create(null);
1496 let trace = Trace.Off;
1497 let traceFormat = TraceFormat.Text;
1498 let tracer;
1499 let state = ConnectionState.New;
1500 let errorEmitter = new events_1.Emitter();
1501 let closeEmitter = new events_1.Emitter();
1502 let unhandledNotificationEmitter = new events_1.Emitter();
1503 let unhandledProgressEmitter = new events_1.Emitter();
1504 let disposeEmitter = new events_1.Emitter();
1505 function createRequestQueueKey(id) {
1506 return 'req-' + id.toString();
1507 }
1508 function createResponseQueueKey(id) {
1509 if (id === null) {
1510 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
1511 }
1512 else {
1513 return 'res-' + id.toString();
1514 }
1515 }
1516 function createNotificationQueueKey() {
1517 return 'not-' + (++notificationSquenceNumber).toString();
1518 }
1519 function addMessageToQueue(queue, message) {
1520 if (messages_1.isRequestMessage(message)) {
1521 queue.set(createRequestQueueKey(message.id), message);
1522 }
1523 else if (messages_1.isResponseMessage(message)) {
1524 queue.set(createResponseQueueKey(message.id), message);
1525 }
1526 else {
1527 queue.set(createNotificationQueueKey(), message);
1528 }
1529 }
1530 function cancelUndispatched(_message) {
1531 return undefined;
1532 }
1533 function isListening() {
1534 return state === ConnectionState.Listening;
1535 }
1536 function isClosed() {
1537 return state === ConnectionState.Closed;
1538 }
1539 function isDisposed() {
1540 return state === ConnectionState.Disposed;
1541 }
1542 function closeHandler() {
1543 if (state === ConnectionState.New || state === ConnectionState.Listening) {
1544 state = ConnectionState.Closed;
1545 closeEmitter.fire(undefined);
1546 }
1547 // If the connection is disposed don't sent close events.
1548 }
1549 function readErrorHandler(error) {
1550 errorEmitter.fire([error, undefined, undefined]);
1551 }
1552 function writeErrorHandler(data) {
1553 errorEmitter.fire(data);
1554 }
1555 messageReader.onClose(closeHandler);
1556 messageReader.onError(readErrorHandler);
1557 messageWriter.onClose(closeHandler);
1558 messageWriter.onError(writeErrorHandler);
1559 function triggerMessageQueue() {
1560 if (timer || messageQueue.size === 0) {
1561 return;
1562 }
1563 timer = setImmediate(() => {
1564 timer = undefined;
1565 processMessageQueue();
1566 });
1567 }
1568 function processMessageQueue() {
1569 if (messageQueue.size === 0) {
1570 return;
1571 }
1572 let message = messageQueue.shift();
1573 try {
1574 if (messages_1.isRequestMessage(message)) {
1575 handleRequest(message);
1576 }
1577 else if (messages_1.isNotificationMessage(message)) {
1578 handleNotification(message);
1579 }
1580 else if (messages_1.isResponseMessage(message)) {
1581 handleResponse(message);
1582 }
1583 else {
1584 handleInvalidMessage(message);
1585 }
1586 }
1587 finally {
1588 triggerMessageQueue();
1589 }
1590 }
1591 let callback = (message) => {
1592 try {
1593 // We have received a cancellation message. Check if the message is still in the queue
1594 // and cancel it if allowed to do so.
1595 if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1596 let key = createRequestQueueKey(message.params.id);
1597 let toCancel = messageQueue.get(key);
1598 if (messages_1.isRequestMessage(toCancel)) {
1599 let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
1600 if (response && (response.error !== void 0 || response.result !== void 0)) {
1601 messageQueue.delete(key);
1602 response.id = toCancel.id;
1603 traceSendingResponse(response, message.method, Date.now());
1604 messageWriter.write(response);
1605 return;
1606 }
1607 }
1608 }
1609 addMessageToQueue(messageQueue, message);
1610 }
1611 finally {
1612 triggerMessageQueue();
1613 }
1614 };
1615 function handleRequest(requestMessage) {
1616 if (isDisposed()) {
1617 // we return here silently since we fired an event when the
1618 // connection got disposed.
1619 return;
1620 }
1621 function reply(resultOrError, method, startTime) {
1622 let message = {
1623 jsonrpc: version,
1624 id: requestMessage.id
1625 };
1626 if (resultOrError instanceof messages_1.ResponseError) {
1627 message.error = resultOrError.toJson();
1628 }
1629 else {
1630 message.result = resultOrError === void 0 ? null : resultOrError;
1631 }
1632 traceSendingResponse(message, method, startTime);
1633 messageWriter.write(message);
1634 }
1635 function replyError(error, method, startTime) {
1636 let message = {
1637 jsonrpc: version,
1638 id: requestMessage.id,
1639 error: error.toJson()
1640 };
1641 traceSendingResponse(message, method, startTime);
1642 messageWriter.write(message);
1643 }
1644 function replySuccess(result, method, startTime) {
1645 // The JSON RPC defines that a response must either have a result or an error
1646 // So we can't treat undefined as a valid response result.
1647 if (result === void 0) {
1648 result = null;
1649 }
1650 let message = {
1651 jsonrpc: version,
1652 id: requestMessage.id,
1653 result: result
1654 };
1655 traceSendingResponse(message, method, startTime);
1656 messageWriter.write(message);
1657 }
1658 traceReceivedRequest(requestMessage);
1659 let element = requestHandlers[requestMessage.method];
1660 let type;
1661 let requestHandler;
1662 if (element) {
1663 type = element.type;
1664 requestHandler = element.handler;
1665 }
1666 let startTime = Date.now();
1667 if (requestHandler || starRequestHandler) {
1668 let cancellationSource = new cancellation_1.CancellationTokenSource();
1669 let tokenKey = String(requestMessage.id);
1670 requestTokens[tokenKey] = cancellationSource;
1671 try {
1672 let handlerResult;
1673 if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1674 handlerResult = requestHandler
1675 ? requestHandler(cancellationSource.token)
1676 : starRequestHandler(requestMessage.method, cancellationSource.token);
1677 }
1678 else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
1679 handlerResult = requestHandler
1680 ? requestHandler(...requestMessage.params, cancellationSource.token)
1681 : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
1682 }
1683 else {
1684 handlerResult = requestHandler
1685 ? requestHandler(requestMessage.params, cancellationSource.token)
1686 : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
1687 }
1688 let promise = handlerResult;
1689 if (!handlerResult) {
1690 delete requestTokens[tokenKey];
1691 replySuccess(handlerResult, requestMessage.method, startTime);
1692 }
1693 else if (promise.then) {
1694 promise.then((resultOrError) => {
1695 delete requestTokens[tokenKey];
1696 reply(resultOrError, requestMessage.method, startTime);
1697 }, error => {
1698 delete requestTokens[tokenKey];
1699 if (error instanceof messages_1.ResponseError) {
1700 replyError(error, requestMessage.method, startTime);
1701 }
1702 else if (error && Is.string(error.message)) {
1703 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1704 }
1705 else {
1706 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1707 }
1708 });
1709 }
1710 else {
1711 delete requestTokens[tokenKey];
1712 reply(handlerResult, requestMessage.method, startTime);
1713 }
1714 }
1715 catch (error) {
1716 delete requestTokens[tokenKey];
1717 if (error instanceof messages_1.ResponseError) {
1718 reply(error, requestMessage.method, startTime);
1719 }
1720 else if (error && Is.string(error.message)) {
1721 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1722 }
1723 else {
1724 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1725 }
1726 }
1727 }
1728 else {
1729 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
1730 }
1731 }
1732 function handleResponse(responseMessage) {
1733 if (isDisposed()) {
1734 // See handle request.
1735 return;
1736 }
1737 if (responseMessage.id === null) {
1738 if (responseMessage.error) {
1739 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
1740 }
1741 else {
1742 logger.error(`Received response message without id. No further error information provided.`);
1743 }
1744 }
1745 else {
1746 let key = String(responseMessage.id);
1747 let responsePromise = responsePromises[key];
1748 traceReceivedResponse(responseMessage, responsePromise);
1749 if (responsePromise) {
1750 delete responsePromises[key];
1751 try {
1752 if (responseMessage.error) {
1753 let error = responseMessage.error;
1754 responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
1755 }
1756 else if (responseMessage.result !== void 0) {
1757 responsePromise.resolve(responseMessage.result);
1758 }
1759 else {
1760 throw new Error('Should never happen.');
1761 }
1762 }
1763 catch (error) {
1764 if (error.message) {
1765 logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
1766 }
1767 else {
1768 logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
1769 }
1770 }
1771 }
1772 }
1773 }
1774 function handleNotification(message) {
1775 if (isDisposed()) {
1776 // See handle request.
1777 return;
1778 }
1779 let type = undefined;
1780 let notificationHandler;
1781 if (message.method === CancelNotification.type.method) {
1782 notificationHandler = (params) => {
1783 let id = params.id;
1784 let source = requestTokens[String(id)];
1785 if (source) {
1786 source.cancel();
1787 }
1788 };
1789 }
1790 else {
1791 let element = notificationHandlers[message.method];
1792 if (element) {
1793 notificationHandler = element.handler;
1794 type = element.type;
1795 }
1796 }
1797 if (notificationHandler || starNotificationHandler) {
1798 try {
1799 traceReceivedNotification(message);
1800 if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1801 notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
1802 }
1803 else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
1804 notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
1805 }
1806 else {
1807 notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
1808 }
1809 }
1810 catch (error) {
1811 if (error.message) {
1812 logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
1813 }
1814 else {
1815 logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
1816 }
1817 }
1818 }
1819 else {
1820 unhandledNotificationEmitter.fire(message);
1821 }
1822 }
1823 function handleInvalidMessage(message) {
1824 if (!message) {
1825 logger.error('Received empty message.');
1826 return;
1827 }
1828 logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
1829 // Test whether we find an id to reject the promise
1830 let responseMessage = message;
1831 if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
1832 let key = String(responseMessage.id);
1833 let responseHandler = responsePromises[key];
1834 if (responseHandler) {
1835 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
1836 }
1837 }
1838 }
1839 function traceSendingRequest(message) {
1840 if (trace === Trace.Off || !tracer) {
1841 return;
1842 }
1843 if (traceFormat === TraceFormat.Text) {
1844 let data = undefined;
1845 if (trace === Trace.Verbose && message.params) {
1846 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1847 }
1848 tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
1849 }
1850 else {
1851 logLSPMessage('send-request', message);
1852 }
1853 }
1854 function traceSendingNotification(message) {
1855 if (trace === Trace.Off || !tracer) {
1856 return;
1857 }
1858 if (traceFormat === TraceFormat.Text) {
1859 let data = undefined;
1860 if (trace === Trace.Verbose) {
1861 if (message.params) {
1862 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1863 }
1864 else {
1865 data = 'No parameters provided.\n\n';
1866 }
1867 }
1868 tracer.log(`Sending notification '${message.method}'.`, data);
1869 }
1870 else {
1871 logLSPMessage('send-notification', message);
1872 }
1873 }
1874 function traceSendingResponse(message, method, startTime) {
1875 if (trace === Trace.Off || !tracer) {
1876 return;
1877 }
1878 if (traceFormat === TraceFormat.Text) {
1879 let data = undefined;
1880 if (trace === Trace.Verbose) {
1881 if (message.error && message.error.data) {
1882 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1883 }
1884 else {
1885 if (message.result) {
1886 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1887 }
1888 else if (message.error === void 0) {
1889 data = 'No result returned.\n\n';
1890 }
1891 }
1892 }
1893 tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
1894 }
1895 else {
1896 logLSPMessage('send-response', message);
1897 }
1898 }
1899 function traceReceivedRequest(message) {
1900 if (trace === Trace.Off || !tracer) {
1901 return;
1902 }
1903 if (traceFormat === TraceFormat.Text) {
1904 let data = undefined;
1905 if (trace === Trace.Verbose && message.params) {
1906 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1907 }
1908 tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
1909 }
1910 else {
1911 logLSPMessage('receive-request', message);
1912 }
1913 }
1914 function traceReceivedNotification(message) {
1915 if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
1916 return;
1917 }
1918 if (traceFormat === TraceFormat.Text) {
1919 let data = undefined;
1920 if (trace === Trace.Verbose) {
1921 if (message.params) {
1922 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1923 }
1924 else {
1925 data = 'No parameters provided.\n\n';
1926 }
1927 }
1928 tracer.log(`Received notification '${message.method}'.`, data);
1929 }
1930 else {
1931 logLSPMessage('receive-notification', message);
1932 }
1933 }
1934 function traceReceivedResponse(message, responsePromise) {
1935 if (trace === Trace.Off || !tracer) {
1936 return;
1937 }
1938 if (traceFormat === TraceFormat.Text) {
1939 let data = undefined;
1940 if (trace === Trace.Verbose) {
1941 if (message.error && message.error.data) {
1942 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1943 }
1944 else {
1945 if (message.result) {
1946 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1947 }
1948 else if (message.error === void 0) {
1949 data = 'No result returned.\n\n';
1950 }
1951 }
1952 }
1953 if (responsePromise) {
1954 let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
1955 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
1956 }
1957 else {
1958 tracer.log(`Received response ${message.id} without active response promise.`, data);
1959 }
1960 }
1961 else {
1962 logLSPMessage('receive-response', message);
1963 }
1964 }
1965 function logLSPMessage(type, message) {
1966 if (!tracer || trace === Trace.Off) {
1967 return;
1968 }
1969 const lspMessage = {
1970 isLSPMessage: true,
1971 type,
1972 message,
1973 timestamp: Date.now()
1974 };
1975 tracer.log(lspMessage);
1976 }
1977 function throwIfClosedOrDisposed() {
1978 if (isClosed()) {
1979 throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
1980 }
1981 if (isDisposed()) {
1982 throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
1983 }
1984 }
1985 function throwIfListening() {
1986 if (isListening()) {
1987 throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
1988 }
1989 }
1990 function throwIfNotListening() {
1991 if (!isListening()) {
1992 throw new Error('Call listen() first.');
1993 }
1994 }
1995 function undefinedToNull(param) {
1996 if (param === void 0) {
1997 return null;
1998 }
1999 else {
2000 return param;
2001 }
2002 }
2003 function computeMessageParams(type, params) {
2004 let result;
2005 let numberOfParams = type.numberOfParams;
2006 switch (numberOfParams) {
2007 case 0:
2008 result = null;
2009 break;
2010 case 1:
2011 result = undefinedToNull(params[0]);
2012 break;
2013 default:
2014 result = [];
2015 for (let i = 0; i < params.length && i < numberOfParams; i++) {
2016 result.push(undefinedToNull(params[i]));
2017 }
2018 if (params.length < numberOfParams) {
2019 for (let i = params.length; i < numberOfParams; i++) {
2020 result.push(null);
2021 }
2022 }
2023 break;
2024 }
2025 return result;
2026 }
2027 let connection = {
2028 sendNotification: (type, ...params) => {
2029 throwIfClosedOrDisposed();
2030 let method;
2031 let messageParams;
2032 if (Is.string(type)) {
2033 method = type;
2034 switch (params.length) {
2035 case 0:
2036 messageParams = null;
2037 break;
2038 case 1:
2039 messageParams = params[0];
2040 break;
2041 default:
2042 messageParams = params;
2043 break;
2044 }
2045 }
2046 else {
2047 method = type.method;
2048 messageParams = computeMessageParams(type, params);
2049 }
2050 let notificationMessage = {
2051 jsonrpc: version,
2052 method: method,
2053 params: messageParams
2054 };
2055 traceSendingNotification(notificationMessage);
2056 messageWriter.write(notificationMessage);
2057 },
2058 onNotification: (type, handler) => {
2059 throwIfClosedOrDisposed();
2060 if (Is.func(type)) {
2061 starNotificationHandler = type;
2062 }
2063 else if (handler) {
2064 if (Is.string(type)) {
2065 notificationHandlers[type] = { type: undefined, handler };
2066 }
2067 else {
2068 notificationHandlers[type.method] = { type, handler };
2069 }
2070 }
2071 },
2072 onProgress: (_type, token, handler) => {
2073 if (progressHandlers.has(token)) {
2074 throw new Error(`Progress handler for token ${token} already registered`);
2075 }
2076 progressHandlers.set(token, handler);
2077 return {
2078 dispose: () => {
2079 progressHandlers.delete(token);
2080 }
2081 };
2082 },
2083 sendProgress: (_type, token, value) => {
2084 connection.sendNotification(ProgressNotification.type, { token, value });
2085 },
2086 onUnhandledProgress: unhandledProgressEmitter.event,
2087 sendRequest: (type, ...params) => {
2088 throwIfClosedOrDisposed();
2089 throwIfNotListening();
2090 let method;
2091 let messageParams;
2092 let token = undefined;
2093 if (Is.string(type)) {
2094 method = type;
2095 switch (params.length) {
2096 case 0:
2097 messageParams = null;
2098 break;
2099 case 1:
2100 // The cancellation token is optional so it can also be undefined.
2101 if (cancellation_1.CancellationToken.is(params[0])) {
2102 messageParams = null;
2103 token = params[0];
2104 }
2105 else {
2106 messageParams = undefinedToNull(params[0]);
2107 }
2108 break;
2109 default:
2110 const last = params.length - 1;
2111 if (cancellation_1.CancellationToken.is(params[last])) {
2112 token = params[last];
2113 if (params.length === 2) {
2114 messageParams = undefinedToNull(params[0]);
2115 }
2116 else {
2117 messageParams = params.slice(0, last).map(value => undefinedToNull(value));
2118 }
2119 }
2120 else {
2121 messageParams = params.map(value => undefinedToNull(value));
2122 }
2123 break;
2124 }
2125 }
2126 else {
2127 method = type.method;
2128 messageParams = computeMessageParams(type, params);
2129 let numberOfParams = type.numberOfParams;
2130 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
2131 }
2132 let id = sequenceNumber++;
2133 let result = new Promise((resolve, reject) => {
2134 let requestMessage = {
2135 jsonrpc: version,
2136 id: id,
2137 method: method,
2138 params: messageParams
2139 };
2140 let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };
2141 traceSendingRequest(requestMessage);
2142 try {
2143 messageWriter.write(requestMessage);
2144 }
2145 catch (e) {
2146 // Writing the message failed. So we need to reject the promise.
2147 responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
2148 responsePromise = null;
2149 }
2150 if (responsePromise) {
2151 responsePromises[String(id)] = responsePromise;
2152 }
2153 });
2154 if (token) {
2155 token.onCancellationRequested(() => {
2156 connection.sendNotification(CancelNotification.type, { id });
2157 });
2158 }
2159 return result;
2160 },
2161 onRequest: (type, handler) => {
2162 throwIfClosedOrDisposed();
2163 if (Is.func(type)) {
2164 starRequestHandler = type;
2165 }
2166 else if (handler) {
2167 if (Is.string(type)) {
2168 requestHandlers[type] = { type: undefined, handler };
2169 }
2170 else {
2171 requestHandlers[type.method] = { type, handler };
2172 }
2173 }
2174 },
2175 trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2176 let _sendNotification = false;
2177 let _traceFormat = TraceFormat.Text;
2178 if (sendNotificationOrTraceOptions !== void 0) {
2179 if (Is.boolean(sendNotificationOrTraceOptions)) {
2180 _sendNotification = sendNotificationOrTraceOptions;
2181 }
2182 else {
2183 _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2184 _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2185 }
2186 }
2187 trace = _value;
2188 traceFormat = _traceFormat;
2189 if (trace === Trace.Off) {
2190 tracer = undefined;
2191 }
2192 else {
2193 tracer = _tracer;
2194 }
2195 if (_sendNotification && !isClosed() && !isDisposed()) {
2196 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
2197 }
2198 },
2199 onError: errorEmitter.event,
2200 onClose: closeEmitter.event,
2201 onUnhandledNotification: unhandledNotificationEmitter.event,
2202 onDispose: disposeEmitter.event,
2203 dispose: () => {
2204 if (isDisposed()) {
2205 return;
2206 }
2207 state = ConnectionState.Disposed;
2208 disposeEmitter.fire(undefined);
2209 let error = new Error('Connection got disposed.');
2210 Object.keys(responsePromises).forEach((key) => {
2211 responsePromises[key].reject(error);
2212 });
2213 responsePromises = Object.create(null);
2214 requestTokens = Object.create(null);
2215 messageQueue = new linkedMap_1.LinkedMap();
2216 // Test for backwards compatibility
2217 if (Is.func(messageWriter.dispose)) {
2218 messageWriter.dispose();
2219 }
2220 if (Is.func(messageReader.dispose)) {
2221 messageReader.dispose();
2222 }
2223 },
2224 listen: () => {
2225 throwIfClosedOrDisposed();
2226 throwIfListening();
2227 state = ConnectionState.Listening;
2228 messageReader.listen(callback);
2229 },
2230 inspect: () => {
2231 // eslint-disable-next-line no-console
2232 console.log('inspect');
2233 }
2234 };
2235 connection.onNotification(LogTraceNotification.type, (params) => {
2236 if (trace === Trace.Off || !tracer) {
2237 return;
2238 }
2239 tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
2240 });
2241 connection.onNotification(ProgressNotification.type, (params) => {
2242 const handler = progressHandlers.get(params.token);
2243 if (handler) {
2244 handler(params.value);
2245 }
2246 else {
2247 unhandledProgressEmitter.fire(params);
2248 }
2249 });
2250 return connection;
2251}
2252function isMessageReader(value) {
2253 return value.listen !== void 0 && value.read === void 0;
2254}
2255function isMessageWriter(value) {
2256 return value.write !== void 0 && value.end === void 0;
2257}
2258function createMessageConnection(input, output, logger, strategy) {
2259 if (!logger) {
2260 logger = exports.NullLogger;
2261 }
2262 let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
2263 let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
2264 return _createMessageConnection(reader, writer, logger, strategy);
2265}
2266exports.createMessageConnection = createMessageConnection;
2267
2268
2269/***/ }),
2270/* 5 */
2271/***/ (function(module, exports, __webpack_require__) {
2272
2273"use strict";
2274/* --------------------------------------------------------------------------------------------
2275 * Copyright (c) Microsoft Corporation. All rights reserved.
2276 * Licensed under the MIT License. See License.txt in the project root for license information.
2277 * ------------------------------------------------------------------------------------------ */
2278
2279Object.defineProperty(exports, "__esModule", { value: true });
2280function boolean(value) {
2281 return value === true || value === false;
2282}
2283exports.boolean = boolean;
2284function string(value) {
2285 return typeof value === 'string' || value instanceof String;
2286}
2287exports.string = string;
2288function number(value) {
2289 return typeof value === 'number' || value instanceof Number;
2290}
2291exports.number = number;
2292function error(value) {
2293 return value instanceof Error;
2294}
2295exports.error = error;
2296function func(value) {
2297 return typeof value === 'function';
2298}
2299exports.func = func;
2300function array(value) {
2301 return Array.isArray(value);
2302}
2303exports.array = array;
2304function stringArray(value) {
2305 return array(value) && value.every(elem => string(elem));
2306}
2307exports.stringArray = stringArray;
2308
2309
2310/***/ }),
2311/* 6 */
2312/***/ (function(module, exports, __webpack_require__) {
2313
2314"use strict";
2315/* --------------------------------------------------------------------------------------------
2316 * Copyright (c) Microsoft Corporation. All rights reserved.
2317 * Licensed under the MIT License. See License.txt in the project root for license information.
2318 * ------------------------------------------------------------------------------------------ */
2319
2320Object.defineProperty(exports, "__esModule", { value: true });
2321const is = __webpack_require__(5);
2322/**
2323 * Predefined error codes.
2324 */
2325var ErrorCodes;
2326(function (ErrorCodes) {
2327 // Defined by JSON RPC
2328 ErrorCodes.ParseError = -32700;
2329 ErrorCodes.InvalidRequest = -32600;
2330 ErrorCodes.MethodNotFound = -32601;
2331 ErrorCodes.InvalidParams = -32602;
2332 ErrorCodes.InternalError = -32603;
2333 ErrorCodes.serverErrorStart = -32099;
2334 ErrorCodes.serverErrorEnd = -32000;
2335 ErrorCodes.ServerNotInitialized = -32002;
2336 ErrorCodes.UnknownErrorCode = -32001;
2337 // Defined by the protocol.
2338 ErrorCodes.RequestCancelled = -32800;
2339 ErrorCodes.ContentModified = -32801;
2340 // Defined by VSCode library.
2341 ErrorCodes.MessageWriteError = 1;
2342 ErrorCodes.MessageReadError = 2;
2343})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
2344/**
2345 * An error object return in a response in case a request
2346 * has failed.
2347 */
2348class ResponseError extends Error {
2349 constructor(code, message, data) {
2350 super(message);
2351 this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
2352 this.data = data;
2353 Object.setPrototypeOf(this, ResponseError.prototype);
2354 }
2355 toJson() {
2356 return {
2357 code: this.code,
2358 message: this.message,
2359 data: this.data,
2360 };
2361 }
2362}
2363exports.ResponseError = ResponseError;
2364/**
2365 * An abstract implementation of a MessageType.
2366 */
2367class AbstractMessageType {
2368 constructor(_method, _numberOfParams) {
2369 this._method = _method;
2370 this._numberOfParams = _numberOfParams;
2371 }
2372 get method() {
2373 return this._method;
2374 }
2375 get numberOfParams() {
2376 return this._numberOfParams;
2377 }
2378}
2379exports.AbstractMessageType = AbstractMessageType;
2380/**
2381 * Classes to type request response pairs
2382 *
2383 * The type parameter RO will be removed in the next major version
2384 * of the JSON RPC library since it is a LSP concept and doesn't
2385 * belong here. For now it is tagged as default never.
2386 */
2387class RequestType0 extends AbstractMessageType {
2388 constructor(method) {
2389 super(method, 0);
2390 }
2391}
2392exports.RequestType0 = RequestType0;
2393class RequestType extends AbstractMessageType {
2394 constructor(method) {
2395 super(method, 1);
2396 }
2397}
2398exports.RequestType = RequestType;
2399class RequestType1 extends AbstractMessageType {
2400 constructor(method) {
2401 super(method, 1);
2402 }
2403}
2404exports.RequestType1 = RequestType1;
2405class RequestType2 extends AbstractMessageType {
2406 constructor(method) {
2407 super(method, 2);
2408 }
2409}
2410exports.RequestType2 = RequestType2;
2411class RequestType3 extends AbstractMessageType {
2412 constructor(method) {
2413 super(method, 3);
2414 }
2415}
2416exports.RequestType3 = RequestType3;
2417class RequestType4 extends AbstractMessageType {
2418 constructor(method) {
2419 super(method, 4);
2420 }
2421}
2422exports.RequestType4 = RequestType4;
2423class RequestType5 extends AbstractMessageType {
2424 constructor(method) {
2425 super(method, 5);
2426 }
2427}
2428exports.RequestType5 = RequestType5;
2429class RequestType6 extends AbstractMessageType {
2430 constructor(method) {
2431 super(method, 6);
2432 }
2433}
2434exports.RequestType6 = RequestType6;
2435class RequestType7 extends AbstractMessageType {
2436 constructor(method) {
2437 super(method, 7);
2438 }
2439}
2440exports.RequestType7 = RequestType7;
2441class RequestType8 extends AbstractMessageType {
2442 constructor(method) {
2443 super(method, 8);
2444 }
2445}
2446exports.RequestType8 = RequestType8;
2447class RequestType9 extends AbstractMessageType {
2448 constructor(method) {
2449 super(method, 9);
2450 }
2451}
2452exports.RequestType9 = RequestType9;
2453/**
2454 * The type parameter RO will be removed in the next major version
2455 * of the JSON RPC library since it is a LSP concept and doesn't
2456 * belong here. For now it is tagged as default never.
2457 */
2458class NotificationType extends AbstractMessageType {
2459 constructor(method) {
2460 super(method, 1);
2461 this._ = undefined;
2462 }
2463}
2464exports.NotificationType = NotificationType;
2465class NotificationType0 extends AbstractMessageType {
2466 constructor(method) {
2467 super(method, 0);
2468 }
2469}
2470exports.NotificationType0 = NotificationType0;
2471class NotificationType1 extends AbstractMessageType {
2472 constructor(method) {
2473 super(method, 1);
2474 }
2475}
2476exports.NotificationType1 = NotificationType1;
2477class NotificationType2 extends AbstractMessageType {
2478 constructor(method) {
2479 super(method, 2);
2480 }
2481}
2482exports.NotificationType2 = NotificationType2;
2483class NotificationType3 extends AbstractMessageType {
2484 constructor(method) {
2485 super(method, 3);
2486 }
2487}
2488exports.NotificationType3 = NotificationType3;
2489class NotificationType4 extends AbstractMessageType {
2490 constructor(method) {
2491 super(method, 4);
2492 }
2493}
2494exports.NotificationType4 = NotificationType4;
2495class NotificationType5 extends AbstractMessageType {
2496 constructor(method) {
2497 super(method, 5);
2498 }
2499}
2500exports.NotificationType5 = NotificationType5;
2501class NotificationType6 extends AbstractMessageType {
2502 constructor(method) {
2503 super(method, 6);
2504 }
2505}
2506exports.NotificationType6 = NotificationType6;
2507class NotificationType7 extends AbstractMessageType {
2508 constructor(method) {
2509 super(method, 7);
2510 }
2511}
2512exports.NotificationType7 = NotificationType7;
2513class NotificationType8 extends AbstractMessageType {
2514 constructor(method) {
2515 super(method, 8);
2516 }
2517}
2518exports.NotificationType8 = NotificationType8;
2519class NotificationType9 extends AbstractMessageType {
2520 constructor(method) {
2521 super(method, 9);
2522 }
2523}
2524exports.NotificationType9 = NotificationType9;
2525/**
2526 * Tests if the given message is a request message
2527 */
2528function isRequestMessage(message) {
2529 let candidate = message;
2530 return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
2531}
2532exports.isRequestMessage = isRequestMessage;
2533/**
2534 * Tests if the given message is a notification message
2535 */
2536function isNotificationMessage(message) {
2537 let candidate = message;
2538 return candidate && is.string(candidate.method) && message.id === void 0;
2539}
2540exports.isNotificationMessage = isNotificationMessage;
2541/**
2542 * Tests if the given message is a response message
2543 */
2544function isResponseMessage(message) {
2545 let candidate = message;
2546 return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
2547}
2548exports.isResponseMessage = isResponseMessage;
2549
2550
2551/***/ }),
2552/* 7 */
2553/***/ (function(module, exports, __webpack_require__) {
2554
2555"use strict";
2556/* --------------------------------------------------------------------------------------------
2557 * Copyright (c) Microsoft Corporation. All rights reserved.
2558 * Licensed under the MIT License. See License.txt in the project root for license information.
2559 * ------------------------------------------------------------------------------------------ */
2560
2561Object.defineProperty(exports, "__esModule", { value: true });
2562const events_1 = __webpack_require__(8);
2563const Is = __webpack_require__(5);
2564let DefaultSize = 8192;
2565let CR = Buffer.from('\r', 'ascii')[0];
2566let LF = Buffer.from('\n', 'ascii')[0];
2567let CRLF = '\r\n';
2568class MessageBuffer {
2569 constructor(encoding = 'utf8') {
2570 this.encoding = encoding;
2571 this.index = 0;
2572 this.buffer = Buffer.allocUnsafe(DefaultSize);
2573 }
2574 append(chunk) {
2575 var toAppend = chunk;
2576 if (typeof (chunk) === 'string') {
2577 var str = chunk;
2578 var bufferLen = Buffer.byteLength(str, this.encoding);
2579 toAppend = Buffer.allocUnsafe(bufferLen);
2580 toAppend.write(str, 0, bufferLen, this.encoding);
2581 }
2582 if (this.buffer.length - this.index >= toAppend.length) {
2583 toAppend.copy(this.buffer, this.index, 0, toAppend.length);
2584 }
2585 else {
2586 var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
2587 if (this.index === 0) {
2588 this.buffer = Buffer.allocUnsafe(newSize);
2589 toAppend.copy(this.buffer, 0, 0, toAppend.length);
2590 }
2591 else {
2592 this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
2593 }
2594 }
2595 this.index += toAppend.length;
2596 }
2597 tryReadHeaders() {
2598 let result = undefined;
2599 let current = 0;
2600 while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
2601 current++;
2602 }
2603 // No header / body separator found (e.g CRLFCRLF)
2604 if (current + 3 >= this.index) {
2605 return result;
2606 }
2607 result = Object.create(null);
2608 let headers = this.buffer.toString('ascii', 0, current).split(CRLF);
2609 headers.forEach((header) => {
2610 let index = header.indexOf(':');
2611 if (index === -1) {
2612 throw new Error('Message header must separate key and value using :');
2613 }
2614 let key = header.substr(0, index);
2615 let value = header.substr(index + 1).trim();
2616 result[key] = value;
2617 });
2618 let nextStart = current + 4;
2619 this.buffer = this.buffer.slice(nextStart);
2620 this.index = this.index - nextStart;
2621 return result;
2622 }
2623 tryReadContent(length) {
2624 if (this.index < length) {
2625 return null;
2626 }
2627 let result = this.buffer.toString(this.encoding, 0, length);
2628 let nextStart = length;
2629 this.buffer.copy(this.buffer, 0, nextStart);
2630 this.index = this.index - nextStart;
2631 return result;
2632 }
2633 get numberOfBytes() {
2634 return this.index;
2635 }
2636}
2637var MessageReader;
2638(function (MessageReader) {
2639 function is(value) {
2640 let candidate = value;
2641 return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
2642 Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
2643 }
2644 MessageReader.is = is;
2645})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
2646class AbstractMessageReader {
2647 constructor() {
2648 this.errorEmitter = new events_1.Emitter();
2649 this.closeEmitter = new events_1.Emitter();
2650 this.partialMessageEmitter = new events_1.Emitter();
2651 }
2652 dispose() {
2653 this.errorEmitter.dispose();
2654 this.closeEmitter.dispose();
2655 }
2656 get onError() {
2657 return this.errorEmitter.event;
2658 }
2659 fireError(error) {
2660 this.errorEmitter.fire(this.asError(error));
2661 }
2662 get onClose() {
2663 return this.closeEmitter.event;
2664 }
2665 fireClose() {
2666 this.closeEmitter.fire(undefined);
2667 }
2668 get onPartialMessage() {
2669 return this.partialMessageEmitter.event;
2670 }
2671 firePartialMessage(info) {
2672 this.partialMessageEmitter.fire(info);
2673 }
2674 asError(error) {
2675 if (error instanceof Error) {
2676 return error;
2677 }
2678 else {
2679 return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2680 }
2681 }
2682}
2683exports.AbstractMessageReader = AbstractMessageReader;
2684class StreamMessageReader extends AbstractMessageReader {
2685 constructor(readable, encoding = 'utf8') {
2686 super();
2687 this.readable = readable;
2688 this.buffer = new MessageBuffer(encoding);
2689 this._partialMessageTimeout = 10000;
2690 }
2691 set partialMessageTimeout(timeout) {
2692 this._partialMessageTimeout = timeout;
2693 }
2694 get partialMessageTimeout() {
2695 return this._partialMessageTimeout;
2696 }
2697 listen(callback) {
2698 this.nextMessageLength = -1;
2699 this.messageToken = 0;
2700 this.partialMessageTimer = undefined;
2701 this.callback = callback;
2702 this.readable.on('data', (data) => {
2703 this.onData(data);
2704 });
2705 this.readable.on('error', (error) => this.fireError(error));
2706 this.readable.on('close', () => this.fireClose());
2707 }
2708 onData(data) {
2709 this.buffer.append(data);
2710 while (true) {
2711 if (this.nextMessageLength === -1) {
2712 let headers = this.buffer.tryReadHeaders();
2713 if (!headers) {
2714 return;
2715 }
2716 let contentLength = headers['Content-Length'];
2717 if (!contentLength) {
2718 throw new Error('Header must provide a Content-Length property.');
2719 }
2720 let length = parseInt(contentLength);
2721 if (isNaN(length)) {
2722 throw new Error('Content-Length value must be a number.');
2723 }
2724 this.nextMessageLength = length;
2725 // Take the encoding form the header. For compatibility
2726 // treat both utf-8 and utf8 as node utf8
2727 }
2728 var msg = this.buffer.tryReadContent(this.nextMessageLength);
2729 if (msg === null) {
2730 /** We haven't received the full message yet. */
2731 this.setPartialMessageTimer();
2732 return;
2733 }
2734 this.clearPartialMessageTimer();
2735 this.nextMessageLength = -1;
2736 this.messageToken++;
2737 var json = JSON.parse(msg);
2738 this.callback(json);
2739 }
2740 }
2741 clearPartialMessageTimer() {
2742 if (this.partialMessageTimer) {
2743 clearTimeout(this.partialMessageTimer);
2744 this.partialMessageTimer = undefined;
2745 }
2746 }
2747 setPartialMessageTimer() {
2748 this.clearPartialMessageTimer();
2749 if (this._partialMessageTimeout <= 0) {
2750 return;
2751 }
2752 this.partialMessageTimer = setTimeout((token, timeout) => {
2753 this.partialMessageTimer = undefined;
2754 if (token === this.messageToken) {
2755 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
2756 this.setPartialMessageTimer();
2757 }
2758 }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
2759 }
2760}
2761exports.StreamMessageReader = StreamMessageReader;
2762class IPCMessageReader extends AbstractMessageReader {
2763 constructor(process) {
2764 super();
2765 this.process = process;
2766 let eventEmitter = this.process;
2767 eventEmitter.on('error', (error) => this.fireError(error));
2768 eventEmitter.on('close', () => this.fireClose());
2769 }
2770 listen(callback) {
2771 this.process.on('message', callback);
2772 }
2773}
2774exports.IPCMessageReader = IPCMessageReader;
2775class SocketMessageReader extends StreamMessageReader {
2776 constructor(socket, encoding = 'utf-8') {
2777 super(socket, encoding);
2778 }
2779}
2780exports.SocketMessageReader = SocketMessageReader;
2781
2782
2783/***/ }),
2784/* 8 */
2785/***/ (function(module, exports, __webpack_require__) {
2786
2787"use strict";
2788/* --------------------------------------------------------------------------------------------
2789 * Copyright (c) Microsoft Corporation. All rights reserved.
2790 * Licensed under the MIT License. See License.txt in the project root for license information.
2791 * ------------------------------------------------------------------------------------------ */
2792
2793Object.defineProperty(exports, "__esModule", { value: true });
2794var Disposable;
2795(function (Disposable) {
2796 function create(func) {
2797 return {
2798 dispose: func
2799 };
2800 }
2801 Disposable.create = create;
2802})(Disposable = exports.Disposable || (exports.Disposable = {}));
2803var Event;
2804(function (Event) {
2805 const _disposable = { dispose() { } };
2806 Event.None = function () { return _disposable; };
2807})(Event = exports.Event || (exports.Event = {}));
2808class CallbackList {
2809 add(callback, context = null, bucket) {
2810 if (!this._callbacks) {
2811 this._callbacks = [];
2812 this._contexts = [];
2813 }
2814 this._callbacks.push(callback);
2815 this._contexts.push(context);
2816 if (Array.isArray(bucket)) {
2817 bucket.push({ dispose: () => this.remove(callback, context) });
2818 }
2819 }
2820 remove(callback, context = null) {
2821 if (!this._callbacks) {
2822 return;
2823 }
2824 var foundCallbackWithDifferentContext = false;
2825 for (var i = 0, len = this._callbacks.length; i < len; i++) {
2826 if (this._callbacks[i] === callback) {
2827 if (this._contexts[i] === context) {
2828 // callback & context match => remove it
2829 this._callbacks.splice(i, 1);
2830 this._contexts.splice(i, 1);
2831 return;
2832 }
2833 else {
2834 foundCallbackWithDifferentContext = true;
2835 }
2836 }
2837 }
2838 if (foundCallbackWithDifferentContext) {
2839 throw new Error('When adding a listener with a context, you should remove it with the same context');
2840 }
2841 }
2842 invoke(...args) {
2843 if (!this._callbacks) {
2844 return [];
2845 }
2846 var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
2847 for (var i = 0, len = callbacks.length; i < len; i++) {
2848 try {
2849 ret.push(callbacks[i].apply(contexts[i], args));
2850 }
2851 catch (e) {
2852 // eslint-disable-next-line no-console
2853 console.error(e);
2854 }
2855 }
2856 return ret;
2857 }
2858 isEmpty() {
2859 return !this._callbacks || this._callbacks.length === 0;
2860 }
2861 dispose() {
2862 this._callbacks = undefined;
2863 this._contexts = undefined;
2864 }
2865}
2866class Emitter {
2867 constructor(_options) {
2868 this._options = _options;
2869 }
2870 /**
2871 * For the public to allow to subscribe
2872 * to events from this Emitter
2873 */
2874 get event() {
2875 if (!this._event) {
2876 this._event = (listener, thisArgs, disposables) => {
2877 if (!this._callbacks) {
2878 this._callbacks = new CallbackList();
2879 }
2880 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
2881 this._options.onFirstListenerAdd(this);
2882 }
2883 this._callbacks.add(listener, thisArgs);
2884 let result;
2885 result = {
2886 dispose: () => {
2887 this._callbacks.remove(listener, thisArgs);
2888 result.dispose = Emitter._noop;
2889 if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
2890 this._options.onLastListenerRemove(this);
2891 }
2892 }
2893 };
2894 if (Array.isArray(disposables)) {
2895 disposables.push(result);
2896 }
2897 return result;
2898 };
2899 }
2900 return this._event;
2901 }
2902 /**
2903 * To be kept private to fire an event to
2904 * subscribers
2905 */
2906 fire(event) {
2907 if (this._callbacks) {
2908 this._callbacks.invoke.call(this._callbacks, event);
2909 }
2910 }
2911 dispose() {
2912 if (this._callbacks) {
2913 this._callbacks.dispose();
2914 this._callbacks = undefined;
2915 }
2916 }
2917}
2918exports.Emitter = Emitter;
2919Emitter._noop = function () { };
2920
2921
2922/***/ }),
2923/* 9 */
2924/***/ (function(module, exports, __webpack_require__) {
2925
2926"use strict";
2927/* --------------------------------------------------------------------------------------------
2928 * Copyright (c) Microsoft Corporation. All rights reserved.
2929 * Licensed under the MIT License. See License.txt in the project root for license information.
2930 * ------------------------------------------------------------------------------------------ */
2931
2932Object.defineProperty(exports, "__esModule", { value: true });
2933const events_1 = __webpack_require__(8);
2934const Is = __webpack_require__(5);
2935let ContentLength = 'Content-Length: ';
2936let CRLF = '\r\n';
2937var MessageWriter;
2938(function (MessageWriter) {
2939 function is(value) {
2940 let candidate = value;
2941 return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
2942 Is.func(candidate.onError) && Is.func(candidate.write);
2943 }
2944 MessageWriter.is = is;
2945})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
2946class AbstractMessageWriter {
2947 constructor() {
2948 this.errorEmitter = new events_1.Emitter();
2949 this.closeEmitter = new events_1.Emitter();
2950 }
2951 dispose() {
2952 this.errorEmitter.dispose();
2953 this.closeEmitter.dispose();
2954 }
2955 get onError() {
2956 return this.errorEmitter.event;
2957 }
2958 fireError(error, message, count) {
2959 this.errorEmitter.fire([this.asError(error), message, count]);
2960 }
2961 get onClose() {
2962 return this.closeEmitter.event;
2963 }
2964 fireClose() {
2965 this.closeEmitter.fire(undefined);
2966 }
2967 asError(error) {
2968 if (error instanceof Error) {
2969 return error;
2970 }
2971 else {
2972 return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2973 }
2974 }
2975}
2976exports.AbstractMessageWriter = AbstractMessageWriter;
2977class StreamMessageWriter extends AbstractMessageWriter {
2978 constructor(writable, encoding = 'utf8') {
2979 super();
2980 this.writable = writable;
2981 this.encoding = encoding;
2982 this.errorCount = 0;
2983 this.writable.on('error', (error) => this.fireError(error));
2984 this.writable.on('close', () => this.fireClose());
2985 }
2986 write(msg) {
2987 let json = JSON.stringify(msg);
2988 let contentLength = Buffer.byteLength(json, this.encoding);
2989 let headers = [
2990 ContentLength, contentLength.toString(), CRLF,
2991 CRLF
2992 ];
2993 try {
2994 // Header must be written in ASCII encoding
2995 this.writable.write(headers.join(''), 'ascii');
2996 // Now write the content. This can be written in any encoding
2997 this.writable.write(json, this.encoding);
2998 this.errorCount = 0;
2999 }
3000 catch (error) {
3001 this.errorCount++;
3002 this.fireError(error, msg, this.errorCount);
3003 }
3004 }
3005}
3006exports.StreamMessageWriter = StreamMessageWriter;
3007class IPCMessageWriter extends AbstractMessageWriter {
3008 constructor(process) {
3009 super();
3010 this.process = process;
3011 this.errorCount = 0;
3012 this.queue = [];
3013 this.sending = false;
3014 let eventEmitter = this.process;
3015 eventEmitter.on('error', (error) => this.fireError(error));
3016 eventEmitter.on('close', () => this.fireClose);
3017 }
3018 write(msg) {
3019 if (!this.sending && this.queue.length === 0) {
3020 // See https://github.com/nodejs/node/issues/7657
3021 this.doWriteMessage(msg);
3022 }
3023 else {
3024 this.queue.push(msg);
3025 }
3026 }
3027 doWriteMessage(msg) {
3028 try {
3029 if (this.process.send) {
3030 this.sending = true;
3031 this.process.send(msg, undefined, undefined, (error) => {
3032 this.sending = false;
3033 if (error) {
3034 this.errorCount++;
3035 this.fireError(error, msg, this.errorCount);
3036 }
3037 else {
3038 this.errorCount = 0;
3039 }
3040 if (this.queue.length > 0) {
3041 this.doWriteMessage(this.queue.shift());
3042 }
3043 });
3044 }
3045 }
3046 catch (error) {
3047 this.errorCount++;
3048 this.fireError(error, msg, this.errorCount);
3049 }
3050 }
3051}
3052exports.IPCMessageWriter = IPCMessageWriter;
3053class SocketMessageWriter extends AbstractMessageWriter {
3054 constructor(socket, encoding = 'utf8') {
3055 super();
3056 this.socket = socket;
3057 this.queue = [];
3058 this.sending = false;
3059 this.encoding = encoding;
3060 this.errorCount = 0;
3061 this.socket.on('error', (error) => this.fireError(error));
3062 this.socket.on('close', () => this.fireClose());
3063 }
3064 dispose() {
3065 super.dispose();
3066 this.socket.destroy();
3067 }
3068 write(msg) {
3069 if (!this.sending && this.queue.length === 0) {
3070 // See https://github.com/nodejs/node/issues/7657
3071 this.doWriteMessage(msg);
3072 }
3073 else {
3074 this.queue.push(msg);
3075 }
3076 }
3077 doWriteMessage(msg) {
3078 let json = JSON.stringify(msg);
3079 let contentLength = Buffer.byteLength(json, this.encoding);
3080 let headers = [
3081 ContentLength, contentLength.toString(), CRLF,
3082 CRLF
3083 ];
3084 try {
3085 // Header must be written in ASCII encoding
3086 this.sending = true;
3087 this.socket.write(headers.join(''), 'ascii', (error) => {
3088 if (error) {
3089 this.handleError(error, msg);
3090 }
3091 try {
3092 // Now write the content. This can be written in any encoding
3093 this.socket.write(json, this.encoding, (error) => {
3094 this.sending = false;
3095 if (error) {
3096 this.handleError(error, msg);
3097 }
3098 else {
3099 this.errorCount = 0;
3100 }
3101 if (this.queue.length > 0) {
3102 this.doWriteMessage(this.queue.shift());
3103 }
3104 });
3105 }
3106 catch (error) {
3107 this.handleError(error, msg);
3108 }
3109 });
3110 }
3111 catch (error) {
3112 this.handleError(error, msg);
3113 }
3114 }
3115 handleError(error, msg) {
3116 this.errorCount++;
3117 this.fireError(error, msg, this.errorCount);
3118 }
3119}
3120exports.SocketMessageWriter = SocketMessageWriter;
3121
3122
3123/***/ }),
3124/* 10 */
3125/***/ (function(module, exports, __webpack_require__) {
3126
3127"use strict";
3128/*---------------------------------------------------------------------------------------------
3129 * Copyright (c) Microsoft Corporation. All rights reserved.
3130 * Licensed under the MIT License. See License.txt in the project root for license information.
3131 *--------------------------------------------------------------------------------------------*/
3132
3133Object.defineProperty(exports, "__esModule", { value: true });
3134const events_1 = __webpack_require__(8);
3135const Is = __webpack_require__(5);
3136var CancellationToken;
3137(function (CancellationToken) {
3138 CancellationToken.None = Object.freeze({
3139 isCancellationRequested: false,
3140 onCancellationRequested: events_1.Event.None
3141 });
3142 CancellationToken.Cancelled = Object.freeze({
3143 isCancellationRequested: true,
3144 onCancellationRequested: events_1.Event.None
3145 });
3146 function is(value) {
3147 let candidate = value;
3148 return candidate && (candidate === CancellationToken.None
3149 || candidate === CancellationToken.Cancelled
3150 || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
3151 }
3152 CancellationToken.is = is;
3153})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
3154const shortcutEvent = Object.freeze(function (callback, context) {
3155 let handle = setTimeout(callback.bind(context), 0);
3156 return { dispose() { clearTimeout(handle); } };
3157});
3158class MutableToken {
3159 constructor() {
3160 this._isCancelled = false;
3161 }
3162 cancel() {
3163 if (!this._isCancelled) {
3164 this._isCancelled = true;
3165 if (this._emitter) {
3166 this._emitter.fire(undefined);
3167 this.dispose();
3168 }
3169 }
3170 }
3171 get isCancellationRequested() {
3172 return this._isCancelled;
3173 }
3174 get onCancellationRequested() {
3175 if (this._isCancelled) {
3176 return shortcutEvent;
3177 }
3178 if (!this._emitter) {
3179 this._emitter = new events_1.Emitter();
3180 }
3181 return this._emitter.event;
3182 }
3183 dispose() {
3184 if (this._emitter) {
3185 this._emitter.dispose();
3186 this._emitter = undefined;
3187 }
3188 }
3189}
3190class CancellationTokenSource {
3191 get token() {
3192 if (!this._token) {
3193 // be lazy and create the token only when
3194 // actually needed
3195 this._token = new MutableToken();
3196 }
3197 return this._token;
3198 }
3199 cancel() {
3200 if (!this._token) {
3201 // save an object by returning the default
3202 // cancelled token when cancellation happens
3203 // before someone asks for the token
3204 this._token = CancellationToken.Cancelled;
3205 }
3206 else {
3207 this._token.cancel();
3208 }
3209 }
3210 dispose() {
3211 if (!this._token) {
3212 // ensure to initialize with an empty token if we had none
3213 this._token = CancellationToken.None;
3214 }
3215 else if (this._token instanceof MutableToken) {
3216 // actually dispose
3217 this._token.dispose();
3218 }
3219 }
3220}
3221exports.CancellationTokenSource = CancellationTokenSource;
3222
3223
3224/***/ }),
3225/* 11 */
3226/***/ (function(module, exports, __webpack_require__) {
3227
3228"use strict";
3229
3230/*---------------------------------------------------------------------------------------------
3231 * Copyright (c) Microsoft Corporation. All rights reserved.
3232 * Licensed under the MIT License. See License.txt in the project root for license information.
3233 *--------------------------------------------------------------------------------------------*/
3234Object.defineProperty(exports, "__esModule", { value: true });
3235var Touch;
3236(function (Touch) {
3237 Touch.None = 0;
3238 Touch.First = 1;
3239 Touch.Last = 2;
3240})(Touch = exports.Touch || (exports.Touch = {}));
3241class LinkedMap {
3242 constructor() {
3243 this._map = new Map();
3244 this._head = undefined;
3245 this._tail = undefined;
3246 this._size = 0;
3247 }
3248 clear() {
3249 this._map.clear();
3250 this._head = undefined;
3251 this._tail = undefined;
3252 this._size = 0;
3253 }
3254 isEmpty() {
3255 return !this._head && !this._tail;
3256 }
3257 get size() {
3258 return this._size;
3259 }
3260 has(key) {
3261 return this._map.has(key);
3262 }
3263 get(key) {
3264 const item = this._map.get(key);
3265 if (!item) {
3266 return undefined;
3267 }
3268 return item.value;
3269 }
3270 set(key, value, touch = Touch.None) {
3271 let item = this._map.get(key);
3272 if (item) {
3273 item.value = value;
3274 if (touch !== Touch.None) {
3275 this.touch(item, touch);
3276 }
3277 }
3278 else {
3279 item = { key, value, next: undefined, previous: undefined };
3280 switch (touch) {
3281 case Touch.None:
3282 this.addItemLast(item);
3283 break;
3284 case Touch.First:
3285 this.addItemFirst(item);
3286 break;
3287 case Touch.Last:
3288 this.addItemLast(item);
3289 break;
3290 default:
3291 this.addItemLast(item);
3292 break;
3293 }
3294 this._map.set(key, item);
3295 this._size++;
3296 }
3297 }
3298 delete(key) {
3299 const item = this._map.get(key);
3300 if (!item) {
3301 return false;
3302 }
3303 this._map.delete(key);
3304 this.removeItem(item);
3305 this._size--;
3306 return true;
3307 }
3308 shift() {
3309 if (!this._head && !this._tail) {
3310 return undefined;
3311 }
3312 if (!this._head || !this._tail) {
3313 throw new Error('Invalid list');
3314 }
3315 const item = this._head;
3316 this._map.delete(item.key);
3317 this.removeItem(item);
3318 this._size--;
3319 return item.value;
3320 }
3321 forEach(callbackfn, thisArg) {
3322 let current = this._head;
3323 while (current) {
3324 if (thisArg) {
3325 callbackfn.bind(thisArg)(current.value, current.key, this);
3326 }
3327 else {
3328 callbackfn(current.value, current.key, this);
3329 }
3330 current = current.next;
3331 }
3332 }
3333 forEachReverse(callbackfn, thisArg) {
3334 let current = this._tail;
3335 while (current) {
3336 if (thisArg) {
3337 callbackfn.bind(thisArg)(current.value, current.key, this);
3338 }
3339 else {
3340 callbackfn(current.value, current.key, this);
3341 }
3342 current = current.previous;
3343 }
3344 }
3345 values() {
3346 let result = [];
3347 let current = this._head;
3348 while (current) {
3349 result.push(current.value);
3350 current = current.next;
3351 }
3352 return result;
3353 }
3354 keys() {
3355 let result = [];
3356 let current = this._head;
3357 while (current) {
3358 result.push(current.key);
3359 current = current.next;
3360 }
3361 return result;
3362 }
3363 /* JSON RPC run on es5 which has no Symbol.iterator
3364 public keys(): IterableIterator<K> {
3365 let current = this._head;
3366 let iterator: IterableIterator<K> = {
3367 [Symbol.iterator]() {
3368 return iterator;
3369 },
3370 next():IteratorResult<K> {
3371 if (current) {
3372 let result = { value: current.key, done: false };
3373 current = current.next;
3374 return result;
3375 } else {
3376 return { value: undefined, done: true };
3377 }
3378 }
3379 };
3380 return iterator;
3381 }
3382
3383 public values(): IterableIterator<V> {
3384 let current = this._head;
3385 let iterator: IterableIterator<V> = {
3386 [Symbol.iterator]() {
3387 return iterator;
3388 },
3389 next():IteratorResult<V> {
3390 if (current) {
3391 let result = { value: current.value, done: false };
3392 current = current.next;
3393 return result;
3394 } else {
3395 return { value: undefined, done: true };
3396 }
3397 }
3398 };
3399 return iterator;
3400 }
3401 */
3402 addItemFirst(item) {
3403 // First time Insert
3404 if (!this._head && !this._tail) {
3405 this._tail = item;
3406 }
3407 else if (!this._head) {
3408 throw new Error('Invalid list');
3409 }
3410 else {
3411 item.next = this._head;
3412 this._head.previous = item;
3413 }
3414 this._head = item;
3415 }
3416 addItemLast(item) {
3417 // First time Insert
3418 if (!this._head && !this._tail) {
3419 this._head = item;
3420 }
3421 else if (!this._tail) {
3422 throw new Error('Invalid list');
3423 }
3424 else {
3425 item.previous = this._tail;
3426 this._tail.next = item;
3427 }
3428 this._tail = item;
3429 }
3430 removeItem(item) {
3431 if (item === this._head && item === this._tail) {
3432 this._head = undefined;
3433 this._tail = undefined;
3434 }
3435 else if (item === this._head) {
3436 this._head = item.next;
3437 }
3438 else if (item === this._tail) {
3439 this._tail = item.previous;
3440 }
3441 else {
3442 const next = item.next;
3443 const previous = item.previous;
3444 if (!next || !previous) {
3445 throw new Error('Invalid list');
3446 }
3447 next.previous = previous;
3448 previous.next = next;
3449 }
3450 }
3451 touch(item, touch) {
3452 if (!this._head || !this._tail) {
3453 throw new Error('Invalid list');
3454 }
3455 if ((touch !== Touch.First && touch !== Touch.Last)) {
3456 return;
3457 }
3458 if (touch === Touch.First) {
3459 if (item === this._head) {
3460 return;
3461 }
3462 const next = item.next;
3463 const previous = item.previous;
3464 // Unlink the item
3465 if (item === this._tail) {
3466 // previous must be defined since item was not head but is tail
3467 // So there are more than on item in the map
3468 previous.next = undefined;
3469 this._tail = previous;
3470 }
3471 else {
3472 // Both next and previous are not undefined since item was neither head nor tail.
3473 next.previous = previous;
3474 previous.next = next;
3475 }
3476 // Insert the node at head
3477 item.previous = undefined;
3478 item.next = this._head;
3479 this._head.previous = item;
3480 this._head = item;
3481 }
3482 else if (touch === Touch.Last) {
3483 if (item === this._tail) {
3484 return;
3485 }
3486 const next = item.next;
3487 const previous = item.previous;
3488 // Unlink the item.
3489 if (item === this._head) {
3490 // next must be defined since item was not tail but is head
3491 // So there are more than on item in the map
3492 next.previous = undefined;
3493 this._head = next;
3494 }
3495 else {
3496 // Both next and previous are not undefined since item was neither head nor tail.
3497 next.previous = previous;
3498 previous.next = next;
3499 }
3500 item.next = undefined;
3501 item.previous = this._tail;
3502 this._tail.next = item;
3503 this._tail = item;
3504 }
3505 }
3506}
3507exports.LinkedMap = LinkedMap;
3508
3509
3510/***/ }),
3511/* 12 */
3512/***/ (function(module, exports, __webpack_require__) {
3513
3514"use strict";
3515/* --------------------------------------------------------------------------------------------
3516 * Copyright (c) Microsoft Corporation. All rights reserved.
3517 * Licensed under the MIT License. See License.txt in the project root for license information.
3518 * ------------------------------------------------------------------------------------------ */
3519
3520Object.defineProperty(exports, "__esModule", { value: true });
3521const path_1 = __webpack_require__(13);
3522const os_1 = __webpack_require__(14);
3523const crypto_1 = __webpack_require__(15);
3524const net_1 = __webpack_require__(16);
3525const messageReader_1 = __webpack_require__(7);
3526const messageWriter_1 = __webpack_require__(9);
3527function generateRandomPipeName() {
3528 const randomSuffix = crypto_1.randomBytes(21).toString('hex');
3529 if (process.platform === 'win32') {
3530 return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
3531 }
3532 else {
3533 // Mac/Unix: use socket file
3534 return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
3535 }
3536}
3537exports.generateRandomPipeName = generateRandomPipeName;
3538function createClientPipeTransport(pipeName, encoding = 'utf-8') {
3539 let connectResolve;
3540 let connected = new Promise((resolve, _reject) => {
3541 connectResolve = resolve;
3542 });
3543 return new Promise((resolve, reject) => {
3544 let server = net_1.createServer((socket) => {
3545 server.close();
3546 connectResolve([
3547 new messageReader_1.SocketMessageReader(socket, encoding),
3548 new messageWriter_1.SocketMessageWriter(socket, encoding)
3549 ]);
3550 });
3551 server.on('error', reject);
3552 server.listen(pipeName, () => {
3553 server.removeListener('error', reject);
3554 resolve({
3555 onConnected: () => { return connected; }
3556 });
3557 });
3558 });
3559}
3560exports.createClientPipeTransport = createClientPipeTransport;
3561function createServerPipeTransport(pipeName, encoding = 'utf-8') {
3562 const socket = net_1.createConnection(pipeName);
3563 return [
3564 new messageReader_1.SocketMessageReader(socket, encoding),
3565 new messageWriter_1.SocketMessageWriter(socket, encoding)
3566 ];
3567}
3568exports.createServerPipeTransport = createServerPipeTransport;
3569
3570
3571/***/ }),
3572/* 13 */
3573/***/ (function(module, exports) {
3574
3575module.exports = require("path");
3576
3577/***/ }),
3578/* 14 */
3579/***/ (function(module, exports) {
3580
3581module.exports = require("os");
3582
3583/***/ }),
3584/* 15 */
3585/***/ (function(module, exports) {
3586
3587module.exports = require("crypto");
3588
3589/***/ }),
3590/* 16 */
3591/***/ (function(module, exports) {
3592
3593module.exports = require("net");
3594
3595/***/ }),
3596/* 17 */
3597/***/ (function(module, exports, __webpack_require__) {
3598
3599"use strict";
3600/* --------------------------------------------------------------------------------------------
3601 * Copyright (c) Microsoft Corporation. All rights reserved.
3602 * Licensed under the MIT License. See License.txt in the project root for license information.
3603 * ------------------------------------------------------------------------------------------ */
3604
3605Object.defineProperty(exports, "__esModule", { value: true });
3606const net_1 = __webpack_require__(16);
3607const messageReader_1 = __webpack_require__(7);
3608const messageWriter_1 = __webpack_require__(9);
3609function createClientSocketTransport(port, encoding = 'utf-8') {
3610 let connectResolve;
3611 let connected = new Promise((resolve, _reject) => {
3612 connectResolve = resolve;
3613 });
3614 return new Promise((resolve, reject) => {
3615 let server = net_1.createServer((socket) => {
3616 server.close();
3617 connectResolve([
3618 new messageReader_1.SocketMessageReader(socket, encoding),
3619 new messageWriter_1.SocketMessageWriter(socket, encoding)
3620 ]);
3621 });
3622 server.on('error', reject);
3623 server.listen(port, '127.0.0.1', () => {
3624 server.removeListener('error', reject);
3625 resolve({
3626 onConnected: () => { return connected; }
3627 });
3628 });
3629 });
3630}
3631exports.createClientSocketTransport = createClientSocketTransport;
3632function createServerSocketTransport(port, encoding = 'utf-8') {
3633 const socket = net_1.createConnection(port, '127.0.0.1');
3634 return [
3635 new messageReader_1.SocketMessageReader(socket, encoding),
3636 new messageWriter_1.SocketMessageWriter(socket, encoding)
3637 ];
3638}
3639exports.createServerSocketTransport = createServerSocketTransport;
3640
3641
3642/***/ }),
3643/* 18 */
3644/***/ (function(module, __webpack_exports__, __webpack_require__) {
3645
3646"use strict";
3647__webpack_require__.r(__webpack_exports__);
3648/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });
3649/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Range", function() { return Range; });
3650/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
3651/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationLink", function() { return LocationLink; });
3652/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; });
3653/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorInformation", function() { return ColorInformation; });
3654/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPresentation", function() { return ColorPresentation; });
3655/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRangeKind", function() { return FoldingRangeKind; });
3656/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRange", function() { return FoldingRange; });
3657/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticRelatedInformation", function() { return DiagnosticRelatedInformation; });
3658/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticSeverity", function() { return DiagnosticSeverity; });
3659/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticTag", function() { return DiagnosticTag; });
3660/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Diagnostic", function() { return Diagnostic; });
3661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Command", function() { return Command; });
3662/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEdit", function() { return TextEdit; });
3663/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentEdit", function() { return TextDocumentEdit; });
3664/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateFile", function() { return CreateFile; });
3665/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenameFile", function() { return RenameFile; });
3666/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DeleteFile", function() { return DeleteFile; });
3667/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceEdit", function() { return WorkspaceEdit; });
3668/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceChange", function() { return WorkspaceChange; });
3669/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentIdentifier", function() { return TextDocumentIdentifier; });
3670/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VersionedTextDocumentIdentifier", function() { return VersionedTextDocumentIdentifier; });
3671/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentItem", function() { return TextDocumentItem; });
3672/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupKind", function() { return MarkupKind; });
3673/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupContent", function() { return MarkupContent; });
3674/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemKind", function() { return CompletionItemKind; });
3675/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InsertTextFormat", function() { return InsertTextFormat; });
3676/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemTag", function() { return CompletionItemTag; });
3677/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItem", function() { return CompletionItem; });
3678/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionList", function() { return CompletionList; });
3679/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkedString", function() { return MarkedString; });
3680/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hover", function() { return Hover; });
3681/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParameterInformation", function() { return ParameterInformation; });
3682/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignatureInformation", function() { return SignatureInformation; });
3683/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlightKind", function() { return DocumentHighlightKind; });
3684/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlight", function() { return DocumentHighlight; });
3685/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolKind", function() { return SymbolKind; });
3686/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolTag", function() { return SymbolTag; });
3687/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolInformation", function() { return SymbolInformation; });
3688/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentSymbol", function() { return DocumentSymbol; });
3689/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionKind", function() { return CodeActionKind; });
3690/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionContext", function() { return CodeActionContext; });
3691/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeAction", function() { return CodeAction; });
3692/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeLens", function() { return CodeLens; });
3693/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormattingOptions", function() { return FormattingOptions; });
3694/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentLink", function() { return DocumentLink; });
3695/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectionRange", function() { return SelectionRange; });
3696/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EOL", function() { return EOL; });
3697/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
3698/* --------------------------------------------------------------------------------------------
3699 * Copyright (c) Microsoft Corporation. All rights reserved.
3700 * Licensed under the MIT License. See License.txt in the project root for license information.
3701 * ------------------------------------------------------------------------------------------ */
3702
3703/**
3704 * The Position namespace provides helper functions to work with
3705 * [Position](#Position) literals.
3706 */
3707var Position;
3708(function (Position) {
3709 /**
3710 * Creates a new Position literal from the given line and character.
3711 * @param line The position's line.
3712 * @param character The position's character.
3713 */
3714 function create(line, character) {
3715 return { line: line, character: character };
3716 }
3717 Position.create = create;
3718 /**
3719 * Checks whether the given liternal conforms to the [Position](#Position) interface.
3720 */
3721 function is(value) {
3722 var candidate = value;
3723 return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
3724 }
3725 Position.is = is;
3726})(Position || (Position = {}));
3727/**
3728 * The Range namespace provides helper functions to work with
3729 * [Range](#Range) literals.
3730 */
3731var Range;
3732(function (Range) {
3733 function create(one, two, three, four) {
3734 if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
3735 return { start: Position.create(one, two), end: Position.create(three, four) };
3736 }
3737 else if (Position.is(one) && Position.is(two)) {
3738 return { start: one, end: two };
3739 }
3740 else {
3741 throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3742 }
3743 }
3744 Range.create = create;
3745 /**
3746 * Checks whether the given literal conforms to the [Range](#Range) interface.
3747 */
3748 function is(value) {
3749 var candidate = value;
3750 return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
3751 }
3752 Range.is = is;
3753})(Range || (Range = {}));
3754/**
3755 * The Location namespace provides helper functions to work with
3756 * [Location](#Location) literals.
3757 */
3758var Location;
3759(function (Location) {
3760 /**
3761 * Creates a Location literal.
3762 * @param uri The location's uri.
3763 * @param range The location's range.
3764 */
3765 function create(uri, range) {
3766 return { uri: uri, range: range };
3767 }
3768 Location.create = create;
3769 /**
3770 * Checks whether the given literal conforms to the [Location](#Location) interface.
3771 */
3772 function is(value) {
3773 var candidate = value;
3774 return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3775 }
3776 Location.is = is;
3777})(Location || (Location = {}));
3778/**
3779 * The LocationLink namespace provides helper functions to work with
3780 * [LocationLink](#LocationLink) literals.
3781 */
3782var LocationLink;
3783(function (LocationLink) {
3784 /**
3785 * Creates a LocationLink literal.
3786 * @param targetUri The definition's uri.
3787 * @param targetRange The full range of the definition.
3788 * @param targetSelectionRange The span of the symbol definition at the target.
3789 * @param originSelectionRange The span of the symbol being defined in the originating source file.
3790 */
3791 function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3792 return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
3793 }
3794 LocationLink.create = create;
3795 /**
3796 * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
3797 */
3798 function is(value) {
3799 var candidate = value;
3800 return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
3801 && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
3802 && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3803 }
3804 LocationLink.is = is;
3805})(LocationLink || (LocationLink = {}));
3806/**
3807 * The Color namespace provides helper functions to work with
3808 * [Color](#Color) literals.
3809 */
3810var Color;
3811(function (Color) {
3812 /**
3813 * Creates a new Color literal.
3814 */
3815 function create(red, green, blue, alpha) {
3816 return {
3817 red: red,
3818 green: green,
3819 blue: blue,
3820 alpha: alpha,
3821 };
3822 }
3823 Color.create = create;
3824 /**
3825 * Checks whether the given literal conforms to the [Color](#Color) interface.
3826 */
3827 function is(value) {
3828 var candidate = value;
3829 return Is.number(candidate.red)
3830 && Is.number(candidate.green)
3831 && Is.number(candidate.blue)
3832 && Is.number(candidate.alpha);
3833 }
3834 Color.is = is;
3835})(Color || (Color = {}));
3836/**
3837 * The ColorInformation namespace provides helper functions to work with
3838 * [ColorInformation](#ColorInformation) literals.
3839 */
3840var ColorInformation;
3841(function (ColorInformation) {
3842 /**
3843 * Creates a new ColorInformation literal.
3844 */
3845 function create(range, color) {
3846 return {
3847 range: range,
3848 color: color,
3849 };
3850 }
3851 ColorInformation.create = create;
3852 /**
3853 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3854 */
3855 function is(value) {
3856 var candidate = value;
3857 return Range.is(candidate.range) && Color.is(candidate.color);
3858 }
3859 ColorInformation.is = is;
3860})(ColorInformation || (ColorInformation = {}));
3861/**
3862 * The Color namespace provides helper functions to work with
3863 * [ColorPresentation](#ColorPresentation) literals.
3864 */
3865var ColorPresentation;
3866(function (ColorPresentation) {
3867 /**
3868 * Creates a new ColorInformation literal.
3869 */
3870 function create(label, textEdit, additionalTextEdits) {
3871 return {
3872 label: label,
3873 textEdit: textEdit,
3874 additionalTextEdits: additionalTextEdits,
3875 };
3876 }
3877 ColorPresentation.create = create;
3878 /**
3879 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3880 */
3881 function is(value) {
3882 var candidate = value;
3883 return Is.string(candidate.label)
3884 && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
3885 && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
3886 }
3887 ColorPresentation.is = is;
3888})(ColorPresentation || (ColorPresentation = {}));
3889/**
3890 * Enum of known range kinds
3891 */
3892var FoldingRangeKind;
3893(function (FoldingRangeKind) {
3894 /**
3895 * Folding range for a comment
3896 */
3897 FoldingRangeKind["Comment"] = "comment";
3898 /**
3899 * Folding range for a imports or includes
3900 */
3901 FoldingRangeKind["Imports"] = "imports";
3902 /**
3903 * Folding range for a region (e.g. `#region`)
3904 */
3905 FoldingRangeKind["Region"] = "region";
3906})(FoldingRangeKind || (FoldingRangeKind = {}));
3907/**
3908 * The folding range namespace provides helper functions to work with
3909 * [FoldingRange](#FoldingRange) literals.
3910 */
3911var FoldingRange;
3912(function (FoldingRange) {
3913 /**
3914 * Creates a new FoldingRange literal.
3915 */
3916 function create(startLine, endLine, startCharacter, endCharacter, kind) {
3917 var result = {
3918 startLine: startLine,
3919 endLine: endLine
3920 };
3921 if (Is.defined(startCharacter)) {
3922 result.startCharacter = startCharacter;
3923 }
3924 if (Is.defined(endCharacter)) {
3925 result.endCharacter = endCharacter;
3926 }
3927 if (Is.defined(kind)) {
3928 result.kind = kind;
3929 }
3930 return result;
3931 }
3932 FoldingRange.create = create;
3933 /**
3934 * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
3935 */
3936 function is(value) {
3937 var candidate = value;
3938 return Is.number(candidate.startLine) && Is.number(candidate.startLine)
3939 && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))
3940 && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))
3941 && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3942 }
3943 FoldingRange.is = is;
3944})(FoldingRange || (FoldingRange = {}));
3945/**
3946 * The DiagnosticRelatedInformation namespace provides helper functions to work with
3947 * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
3948 */
3949var DiagnosticRelatedInformation;
3950(function (DiagnosticRelatedInformation) {
3951 /**
3952 * Creates a new DiagnosticRelatedInformation literal.
3953 */
3954 function create(location, message) {
3955 return {
3956 location: location,
3957 message: message
3958 };
3959 }
3960 DiagnosticRelatedInformation.create = create;
3961 /**
3962 * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
3963 */
3964 function is(value) {
3965 var candidate = value;
3966 return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
3967 }
3968 DiagnosticRelatedInformation.is = is;
3969})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
3970/**
3971 * The diagnostic's severity.
3972 */
3973var DiagnosticSeverity;
3974(function (DiagnosticSeverity) {
3975 /**
3976 * Reports an error.
3977 */
3978 DiagnosticSeverity.Error = 1;
3979 /**
3980 * Reports a warning.
3981 */
3982 DiagnosticSeverity.Warning = 2;
3983 /**
3984 * Reports an information.
3985 */
3986 DiagnosticSeverity.Information = 3;
3987 /**
3988 * Reports a hint.
3989 */
3990 DiagnosticSeverity.Hint = 4;
3991})(DiagnosticSeverity || (DiagnosticSeverity = {}));
3992/**
3993 * The diagnostic tags.
3994 *
3995 * @since 3.15.0
3996 */
3997var DiagnosticTag;
3998(function (DiagnosticTag) {
3999 /**
4000 * Unused or unnecessary code.
4001 *
4002 * Clients are allowed to render diagnostics with this tag faded out instead of having
4003 * an error squiggle.
4004 */
4005 DiagnosticTag.Unnecessary = 1;
4006 /**
4007 * Deprecated or obsolete code.
4008 *
4009 * Clients are allowed to rendered diagnostics with this tag strike through.
4010 */
4011 DiagnosticTag.Deprecated = 2;
4012})(DiagnosticTag || (DiagnosticTag = {}));
4013/**
4014 * The Diagnostic namespace provides helper functions to work with
4015 * [Diagnostic](#Diagnostic) literals.
4016 */
4017var Diagnostic;
4018(function (Diagnostic) {
4019 /**
4020 * Creates a new Diagnostic literal.
4021 */
4022 function create(range, message, severity, code, source, relatedInformation) {
4023 var result = { range: range, message: message };
4024 if (Is.defined(severity)) {
4025 result.severity = severity;
4026 }
4027 if (Is.defined(code)) {
4028 result.code = code;
4029 }
4030 if (Is.defined(source)) {
4031 result.source = source;
4032 }
4033 if (Is.defined(relatedInformation)) {
4034 result.relatedInformation = relatedInformation;
4035 }
4036 return result;
4037 }
4038 Diagnostic.create = create;
4039 /**
4040 * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
4041 */
4042 function is(value) {
4043 var candidate = value;
4044 return Is.defined(candidate)
4045 && Range.is(candidate.range)
4046 && Is.string(candidate.message)
4047 && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
4048 && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
4049 && (Is.string(candidate.source) || Is.undefined(candidate.source))
4050 && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
4051 }
4052 Diagnostic.is = is;
4053})(Diagnostic || (Diagnostic = {}));
4054/**
4055 * The Command namespace provides helper functions to work with
4056 * [Command](#Command) literals.
4057 */
4058var Command;
4059(function (Command) {
4060 /**
4061 * Creates a new Command literal.
4062 */
4063 function create(title, command) {
4064 var args = [];
4065 for (var _i = 2; _i < arguments.length; _i++) {
4066 args[_i - 2] = arguments[_i];
4067 }
4068 var result = { title: title, command: command };
4069 if (Is.defined(args) && args.length > 0) {
4070 result.arguments = args;
4071 }
4072 return result;
4073 }
4074 Command.create = create;
4075 /**
4076 * Checks whether the given literal conforms to the [Command](#Command) interface.
4077 */
4078 function is(value) {
4079 var candidate = value;
4080 return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
4081 }
4082 Command.is = is;
4083})(Command || (Command = {}));
4084/**
4085 * The TextEdit namespace provides helper function to create replace,
4086 * insert and delete edits more easily.
4087 */
4088var TextEdit;
4089(function (TextEdit) {
4090 /**
4091 * Creates a replace text edit.
4092 * @param range The range of text to be replaced.
4093 * @param newText The new text.
4094 */
4095 function replace(range, newText) {
4096 return { range: range, newText: newText };
4097 }
4098 TextEdit.replace = replace;
4099 /**
4100 * Creates a insert text edit.
4101 * @param position The position to insert the text at.
4102 * @param newText The text to be inserted.
4103 */
4104 function insert(position, newText) {
4105 return { range: { start: position, end: position }, newText: newText };
4106 }
4107 TextEdit.insert = insert;
4108 /**
4109 * Creates a delete text edit.
4110 * @param range The range of text to be deleted.
4111 */
4112 function del(range) {
4113 return { range: range, newText: '' };
4114 }
4115 TextEdit.del = del;
4116 function is(value) {
4117 var candidate = value;
4118 return Is.objectLiteral(candidate)
4119 && Is.string(candidate.newText)
4120 && Range.is(candidate.range);
4121 }
4122 TextEdit.is = is;
4123})(TextEdit || (TextEdit = {}));
4124/**
4125 * The TextDocumentEdit namespace provides helper function to create
4126 * an edit that manipulates a text document.
4127 */
4128var TextDocumentEdit;
4129(function (TextDocumentEdit) {
4130 /**
4131 * Creates a new `TextDocumentEdit`
4132 */
4133 function create(textDocument, edits) {
4134 return { textDocument: textDocument, edits: edits };
4135 }
4136 TextDocumentEdit.create = create;
4137 function is(value) {
4138 var candidate = value;
4139 return Is.defined(candidate)
4140 && VersionedTextDocumentIdentifier.is(candidate.textDocument)
4141 && Array.isArray(candidate.edits);
4142 }
4143 TextDocumentEdit.is = is;
4144})(TextDocumentEdit || (TextDocumentEdit = {}));
4145var CreateFile;
4146(function (CreateFile) {
4147 function create(uri, options) {
4148 var result = {
4149 kind: 'create',
4150 uri: uri
4151 };
4152 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4153 result.options = options;
4154 }
4155 return result;
4156 }
4157 CreateFile.create = create;
4158 function is(value) {
4159 var candidate = value;
4160 return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&
4161 (candidate.options === void 0 ||
4162 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4163 }
4164 CreateFile.is = is;
4165})(CreateFile || (CreateFile = {}));
4166var RenameFile;
4167(function (RenameFile) {
4168 function create(oldUri, newUri, options) {
4169 var result = {
4170 kind: 'rename',
4171 oldUri: oldUri,
4172 newUri: newUri
4173 };
4174 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4175 result.options = options;
4176 }
4177 return result;
4178 }
4179 RenameFile.create = create;
4180 function is(value) {
4181 var candidate = value;
4182 return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&
4183 (candidate.options === void 0 ||
4184 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4185 }
4186 RenameFile.is = is;
4187})(RenameFile || (RenameFile = {}));
4188var DeleteFile;
4189(function (DeleteFile) {
4190 function create(uri, options) {
4191 var result = {
4192 kind: 'delete',
4193 uri: uri
4194 };
4195 if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
4196 result.options = options;
4197 }
4198 return result;
4199 }
4200 DeleteFile.create = create;
4201 function is(value) {
4202 var candidate = value;
4203 return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&
4204 (candidate.options === void 0 ||
4205 ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));
4206 }
4207 DeleteFile.is = is;
4208})(DeleteFile || (DeleteFile = {}));
4209var WorkspaceEdit;
4210(function (WorkspaceEdit) {
4211 function is(value) {
4212 var candidate = value;
4213 return candidate &&
4214 (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&
4215 (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {
4216 if (Is.string(change.kind)) {
4217 return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
4218 }
4219 else {
4220 return TextDocumentEdit.is(change);
4221 }
4222 }));
4223 }
4224 WorkspaceEdit.is = is;
4225})(WorkspaceEdit || (WorkspaceEdit = {}));
4226var TextEditChangeImpl = /** @class */ (function () {
4227 function TextEditChangeImpl(edits) {
4228 this.edits = edits;
4229 }
4230 TextEditChangeImpl.prototype.insert = function (position, newText) {
4231 this.edits.push(TextEdit.insert(position, newText));
4232 };
4233 TextEditChangeImpl.prototype.replace = function (range, newText) {
4234 this.edits.push(TextEdit.replace(range, newText));
4235 };
4236 TextEditChangeImpl.prototype.delete = function (range) {
4237 this.edits.push(TextEdit.del(range));
4238 };
4239 TextEditChangeImpl.prototype.add = function (edit) {
4240 this.edits.push(edit);
4241 };
4242 TextEditChangeImpl.prototype.all = function () {
4243 return this.edits;
4244 };
4245 TextEditChangeImpl.prototype.clear = function () {
4246 this.edits.splice(0, this.edits.length);
4247 };
4248 return TextEditChangeImpl;
4249}());
4250/**
4251 * A workspace change helps constructing changes to a workspace.
4252 */
4253var WorkspaceChange = /** @class */ (function () {
4254 function WorkspaceChange(workspaceEdit) {
4255 var _this = this;
4256 this._textEditChanges = Object.create(null);
4257 if (workspaceEdit) {
4258 this._workspaceEdit = workspaceEdit;
4259 if (workspaceEdit.documentChanges) {
4260 workspaceEdit.documentChanges.forEach(function (change) {
4261 if (TextDocumentEdit.is(change)) {
4262 var textEditChange = new TextEditChangeImpl(change.edits);
4263 _this._textEditChanges[change.textDocument.uri] = textEditChange;
4264 }
4265 });
4266 }
4267 else if (workspaceEdit.changes) {
4268 Object.keys(workspaceEdit.changes).forEach(function (key) {
4269 var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
4270 _this._textEditChanges[key] = textEditChange;
4271 });
4272 }
4273 }
4274 }
4275 Object.defineProperty(WorkspaceChange.prototype, "edit", {
4276 /**
4277 * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
4278 * use to be returned from a workspace edit operation like rename.
4279 */
4280 get: function () {
4281 return this._workspaceEdit;
4282 },
4283 enumerable: true,
4284 configurable: true
4285 });
4286 WorkspaceChange.prototype.getTextEditChange = function (key) {
4287 if (VersionedTextDocumentIdentifier.is(key)) {
4288 if (!this._workspaceEdit) {
4289 this._workspaceEdit = {
4290 documentChanges: []
4291 };
4292 }
4293 if (!this._workspaceEdit.documentChanges) {
4294 throw new Error('Workspace edit is not configured for document changes.');
4295 }
4296 var textDocument = key;
4297 var result = this._textEditChanges[textDocument.uri];
4298 if (!result) {
4299 var edits = [];
4300 var textDocumentEdit = {
4301 textDocument: textDocument,
4302 edits: edits
4303 };
4304 this._workspaceEdit.documentChanges.push(textDocumentEdit);
4305 result = new TextEditChangeImpl(edits);
4306 this._textEditChanges[textDocument.uri] = result;
4307 }
4308 return result;
4309 }
4310 else {
4311 if (!this._workspaceEdit) {
4312 this._workspaceEdit = {
4313 changes: Object.create(null)
4314 };
4315 }
4316 if (!this._workspaceEdit.changes) {
4317 throw new Error('Workspace edit is not configured for normal text edit changes.');
4318 }
4319 var result = this._textEditChanges[key];
4320 if (!result) {
4321 var edits = [];
4322 this._workspaceEdit.changes[key] = edits;
4323 result = new TextEditChangeImpl(edits);
4324 this._textEditChanges[key] = result;
4325 }
4326 return result;
4327 }
4328 };
4329 WorkspaceChange.prototype.createFile = function (uri, options) {
4330 this.checkDocumentChanges();
4331 this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
4332 };
4333 WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {
4334 this.checkDocumentChanges();
4335 this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
4336 };
4337 WorkspaceChange.prototype.deleteFile = function (uri, options) {
4338 this.checkDocumentChanges();
4339 this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
4340 };
4341 WorkspaceChange.prototype.checkDocumentChanges = function () {
4342 if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
4343 throw new Error('Workspace edit is not configured for document changes.');
4344 }
4345 };
4346 return WorkspaceChange;
4347}());
4348
4349/**
4350 * The TextDocumentIdentifier namespace provides helper functions to work with
4351 * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
4352 */
4353var TextDocumentIdentifier;
4354(function (TextDocumentIdentifier) {
4355 /**
4356 * Creates a new TextDocumentIdentifier literal.
4357 * @param uri The document's uri.
4358 */
4359 function create(uri) {
4360 return { uri: uri };
4361 }
4362 TextDocumentIdentifier.create = create;
4363 /**
4364 * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
4365 */
4366 function is(value) {
4367 var candidate = value;
4368 return Is.defined(candidate) && Is.string(candidate.uri);
4369 }
4370 TextDocumentIdentifier.is = is;
4371})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
4372/**
4373 * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
4374 * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
4375 */
4376var VersionedTextDocumentIdentifier;
4377(function (VersionedTextDocumentIdentifier) {
4378 /**
4379 * Creates a new VersionedTextDocumentIdentifier literal.
4380 * @param uri The document's uri.
4381 * @param uri The document's text.
4382 */
4383 function create(uri, version) {
4384 return { uri: uri, version: version };
4385 }
4386 VersionedTextDocumentIdentifier.create = create;
4387 /**
4388 * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
4389 */
4390 function is(value) {
4391 var candidate = value;
4392 return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
4393 }
4394 VersionedTextDocumentIdentifier.is = is;
4395})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
4396/**
4397 * The TextDocumentItem namespace provides helper functions to work with
4398 * [TextDocumentItem](#TextDocumentItem) literals.
4399 */
4400var TextDocumentItem;
4401(function (TextDocumentItem) {
4402 /**
4403 * Creates a new TextDocumentItem literal.
4404 * @param uri The document's uri.
4405 * @param languageId The document's language identifier.
4406 * @param version The document's version number.
4407 * @param text The document's text.
4408 */
4409 function create(uri, languageId, version, text) {
4410 return { uri: uri, languageId: languageId, version: version, text: text };
4411 }
4412 TextDocumentItem.create = create;
4413 /**
4414 * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
4415 */
4416 function is(value) {
4417 var candidate = value;
4418 return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
4419 }
4420 TextDocumentItem.is = is;
4421})(TextDocumentItem || (TextDocumentItem = {}));
4422/**
4423 * Describes the content type that a client supports in various
4424 * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
4425 *
4426 * Please note that `MarkupKinds` must not start with a `$`. This kinds
4427 * are reserved for internal usage.
4428 */
4429var MarkupKind;
4430(function (MarkupKind) {
4431 /**
4432 * Plain text is supported as a content format
4433 */
4434 MarkupKind.PlainText = 'plaintext';
4435 /**
4436 * Markdown is supported as a content format
4437 */
4438 MarkupKind.Markdown = 'markdown';
4439})(MarkupKind || (MarkupKind = {}));
4440(function (MarkupKind) {
4441 /**
4442 * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
4443 */
4444 function is(value) {
4445 var candidate = value;
4446 return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
4447 }
4448 MarkupKind.is = is;
4449})(MarkupKind || (MarkupKind = {}));
4450var MarkupContent;
4451(function (MarkupContent) {
4452 /**
4453 * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
4454 */
4455 function is(value) {
4456 var candidate = value;
4457 return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
4458 }
4459 MarkupContent.is = is;
4460})(MarkupContent || (MarkupContent = {}));
4461/**
4462 * The kind of a completion entry.
4463 */
4464var CompletionItemKind;
4465(function (CompletionItemKind) {
4466 CompletionItemKind.Text = 1;
4467 CompletionItemKind.Method = 2;
4468 CompletionItemKind.Function = 3;
4469 CompletionItemKind.Constructor = 4;
4470 CompletionItemKind.Field = 5;
4471 CompletionItemKind.Variable = 6;
4472 CompletionItemKind.Class = 7;
4473 CompletionItemKind.Interface = 8;
4474 CompletionItemKind.Module = 9;
4475 CompletionItemKind.Property = 10;
4476 CompletionItemKind.Unit = 11;
4477 CompletionItemKind.Value = 12;
4478 CompletionItemKind.Enum = 13;
4479 CompletionItemKind.Keyword = 14;
4480 CompletionItemKind.Snippet = 15;
4481 CompletionItemKind.Color = 16;
4482 CompletionItemKind.File = 17;
4483 CompletionItemKind.Reference = 18;
4484 CompletionItemKind.Folder = 19;
4485 CompletionItemKind.EnumMember = 20;
4486 CompletionItemKind.Constant = 21;
4487 CompletionItemKind.Struct = 22;
4488 CompletionItemKind.Event = 23;
4489 CompletionItemKind.Operator = 24;
4490 CompletionItemKind.TypeParameter = 25;
4491})(CompletionItemKind || (CompletionItemKind = {}));
4492/**
4493 * Defines whether the insert text in a completion item should be interpreted as
4494 * plain text or a snippet.
4495 */
4496var InsertTextFormat;
4497(function (InsertTextFormat) {
4498 /**
4499 * The primary text to be inserted is treated as a plain string.
4500 */
4501 InsertTextFormat.PlainText = 1;
4502 /**
4503 * The primary text to be inserted is treated as a snippet.
4504 *
4505 * A snippet can define tab stops and placeholders with `$1`, `$2`
4506 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
4507 * the end of the snippet. Placeholders with equal identifiers are linked,
4508 * that is typing in one will update others too.
4509 *
4510 * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
4511 */
4512 InsertTextFormat.Snippet = 2;
4513})(InsertTextFormat || (InsertTextFormat = {}));
4514/**
4515 * Completion item tags are extra annotations that tweak the rendering of a completion
4516 * item.
4517 *
4518 * @since 3.15.0
4519 */
4520var CompletionItemTag;
4521(function (CompletionItemTag) {
4522 /**
4523 * Render a completion as obsolete, usually using a strike-out.
4524 */
4525 CompletionItemTag.Deprecated = 1;
4526})(CompletionItemTag || (CompletionItemTag = {}));
4527/**
4528 * The CompletionItem namespace provides functions to deal with
4529 * completion items.
4530 */
4531var CompletionItem;
4532(function (CompletionItem) {
4533 /**
4534 * Create a completion item and seed it with a label.
4535 * @param label The completion item's label
4536 */
4537 function create(label) {
4538 return { label: label };
4539 }
4540 CompletionItem.create = create;
4541})(CompletionItem || (CompletionItem = {}));
4542/**
4543 * The CompletionList namespace provides functions to deal with
4544 * completion lists.
4545 */
4546var CompletionList;
4547(function (CompletionList) {
4548 /**
4549 * Creates a new completion list.
4550 *
4551 * @param items The completion items.
4552 * @param isIncomplete The list is not complete.
4553 */
4554 function create(items, isIncomplete) {
4555 return { items: items ? items : [], isIncomplete: !!isIncomplete };
4556 }
4557 CompletionList.create = create;
4558})(CompletionList || (CompletionList = {}));
4559var MarkedString;
4560(function (MarkedString) {
4561 /**
4562 * Creates a marked string from plain text.
4563 *
4564 * @param plainText The plain text.
4565 */
4566 function fromPlainText(plainText) {
4567 return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
4568 }
4569 MarkedString.fromPlainText = fromPlainText;
4570 /**
4571 * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
4572 */
4573 function is(value) {
4574 var candidate = value;
4575 return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
4576 }
4577 MarkedString.is = is;
4578})(MarkedString || (MarkedString = {}));
4579var Hover;
4580(function (Hover) {
4581 /**
4582 * Checks whether the given value conforms to the [Hover](#Hover) interface.
4583 */
4584 function is(value) {
4585 var candidate = value;
4586 return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
4587 MarkedString.is(candidate.contents) ||
4588 Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
4589 }
4590 Hover.is = is;
4591})(Hover || (Hover = {}));
4592/**
4593 * The ParameterInformation namespace provides helper functions to work with
4594 * [ParameterInformation](#ParameterInformation) literals.
4595 */
4596var ParameterInformation;
4597(function (ParameterInformation) {
4598 /**
4599 * Creates a new parameter information literal.
4600 *
4601 * @param label A label string.
4602 * @param documentation A doc string.
4603 */
4604 function create(label, documentation) {
4605 return documentation ? { label: label, documentation: documentation } : { label: label };
4606 }
4607 ParameterInformation.create = create;
4608})(ParameterInformation || (ParameterInformation = {}));
4609/**
4610 * The SignatureInformation namespace provides helper functions to work with
4611 * [SignatureInformation](#SignatureInformation) literals.
4612 */
4613var SignatureInformation;
4614(function (SignatureInformation) {
4615 function create(label, documentation) {
4616 var parameters = [];
4617 for (var _i = 2; _i < arguments.length; _i++) {
4618 parameters[_i - 2] = arguments[_i];
4619 }
4620 var result = { label: label };
4621 if (Is.defined(documentation)) {
4622 result.documentation = documentation;
4623 }
4624 if (Is.defined(parameters)) {
4625 result.parameters = parameters;
4626 }
4627 else {
4628 result.parameters = [];
4629 }
4630 return result;
4631 }
4632 SignatureInformation.create = create;
4633})(SignatureInformation || (SignatureInformation = {}));
4634/**
4635 * A document highlight kind.
4636 */
4637var DocumentHighlightKind;
4638(function (DocumentHighlightKind) {
4639 /**
4640 * A textual occurrence.
4641 */
4642 DocumentHighlightKind.Text = 1;
4643 /**
4644 * Read-access of a symbol, like reading a variable.
4645 */
4646 DocumentHighlightKind.Read = 2;
4647 /**
4648 * Write-access of a symbol, like writing to a variable.
4649 */
4650 DocumentHighlightKind.Write = 3;
4651})(DocumentHighlightKind || (DocumentHighlightKind = {}));
4652/**
4653 * DocumentHighlight namespace to provide helper functions to work with
4654 * [DocumentHighlight](#DocumentHighlight) literals.
4655 */
4656var DocumentHighlight;
4657(function (DocumentHighlight) {
4658 /**
4659 * Create a DocumentHighlight object.
4660 * @param range The range the highlight applies to.
4661 */
4662 function create(range, kind) {
4663 var result = { range: range };
4664 if (Is.number(kind)) {
4665 result.kind = kind;
4666 }
4667 return result;
4668 }
4669 DocumentHighlight.create = create;
4670})(DocumentHighlight || (DocumentHighlight = {}));
4671/**
4672 * A symbol kind.
4673 */
4674var SymbolKind;
4675(function (SymbolKind) {
4676 SymbolKind.File = 1;
4677 SymbolKind.Module = 2;
4678 SymbolKind.Namespace = 3;
4679 SymbolKind.Package = 4;
4680 SymbolKind.Class = 5;
4681 SymbolKind.Method = 6;
4682 SymbolKind.Property = 7;
4683 SymbolKind.Field = 8;
4684 SymbolKind.Constructor = 9;
4685 SymbolKind.Enum = 10;
4686 SymbolKind.Interface = 11;
4687 SymbolKind.Function = 12;
4688 SymbolKind.Variable = 13;
4689 SymbolKind.Constant = 14;
4690 SymbolKind.String = 15;
4691 SymbolKind.Number = 16;
4692 SymbolKind.Boolean = 17;
4693 SymbolKind.Array = 18;
4694 SymbolKind.Object = 19;
4695 SymbolKind.Key = 20;
4696 SymbolKind.Null = 21;
4697 SymbolKind.EnumMember = 22;
4698 SymbolKind.Struct = 23;
4699 SymbolKind.Event = 24;
4700 SymbolKind.Operator = 25;
4701 SymbolKind.TypeParameter = 26;
4702})(SymbolKind || (SymbolKind = {}));
4703/**
4704 * Symbol tags are extra annotations that tweak the rendering of a symbol.
4705 * @since 3.15
4706 */
4707var SymbolTag;
4708(function (SymbolTag) {
4709 /**
4710 * Render a symbol as obsolete, usually using a strike-out.
4711 */
4712 SymbolTag.Deprecated = 1;
4713})(SymbolTag || (SymbolTag = {}));
4714var SymbolInformation;
4715(function (SymbolInformation) {
4716 /**
4717 * Creates a new symbol information literal.
4718 *
4719 * @param name The name of the symbol.
4720 * @param kind The kind of the symbol.
4721 * @param range The range of the location of the symbol.
4722 * @param uri The resource of the location of symbol, defaults to the current document.
4723 * @param containerName The name of the symbol containing the symbol.
4724 */
4725 function create(name, kind, range, uri, containerName) {
4726 var result = {
4727 name: name,
4728 kind: kind,
4729 location: { uri: uri, range: range }
4730 };
4731 if (containerName) {
4732 result.containerName = containerName;
4733 }
4734 return result;
4735 }
4736 SymbolInformation.create = create;
4737})(SymbolInformation || (SymbolInformation = {}));
4738var DocumentSymbol;
4739(function (DocumentSymbol) {
4740 /**
4741 * Creates a new symbol information literal.
4742 *
4743 * @param name The name of the symbol.
4744 * @param detail The detail of the symbol.
4745 * @param kind The kind of the symbol.
4746 * @param range The range of the symbol.
4747 * @param selectionRange The selectionRange of the symbol.
4748 * @param children Children of the symbol.
4749 */
4750 function create(name, detail, kind, range, selectionRange, children) {
4751 var result = {
4752 name: name,
4753 detail: detail,
4754 kind: kind,
4755 range: range,
4756 selectionRange: selectionRange
4757 };
4758 if (children !== void 0) {
4759 result.children = children;
4760 }
4761 return result;
4762 }
4763 DocumentSymbol.create = create;
4764 /**
4765 * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
4766 */
4767 function is(value) {
4768 var candidate = value;
4769 return candidate &&
4770 Is.string(candidate.name) && Is.number(candidate.kind) &&
4771 Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
4772 (candidate.detail === void 0 || Is.string(candidate.detail)) &&
4773 (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&
4774 (candidate.children === void 0 || Array.isArray(candidate.children));
4775 }
4776 DocumentSymbol.is = is;
4777})(DocumentSymbol || (DocumentSymbol = {}));
4778/**
4779 * A set of predefined code action kinds
4780 */
4781var CodeActionKind;
4782(function (CodeActionKind) {
4783 /**
4784 * Empty kind.
4785 */
4786 CodeActionKind.Empty = '';
4787 /**
4788 * Base kind for quickfix actions: 'quickfix'
4789 */
4790 CodeActionKind.QuickFix = 'quickfix';
4791 /**
4792 * Base kind for refactoring actions: 'refactor'
4793 */
4794 CodeActionKind.Refactor = 'refactor';
4795 /**
4796 * Base kind for refactoring extraction actions: 'refactor.extract'
4797 *
4798 * Example extract actions:
4799 *
4800 * - Extract method
4801 * - Extract function
4802 * - Extract variable
4803 * - Extract interface from class
4804 * - ...
4805 */
4806 CodeActionKind.RefactorExtract = 'refactor.extract';
4807 /**
4808 * Base kind for refactoring inline actions: 'refactor.inline'
4809 *
4810 * Example inline actions:
4811 *
4812 * - Inline function
4813 * - Inline variable
4814 * - Inline constant
4815 * - ...
4816 */
4817 CodeActionKind.RefactorInline = 'refactor.inline';
4818 /**
4819 * Base kind for refactoring rewrite actions: 'refactor.rewrite'
4820 *
4821 * Example rewrite actions:
4822 *
4823 * - Convert JavaScript function to class
4824 * - Add or remove parameter
4825 * - Encapsulate field
4826 * - Make method static
4827 * - Move method to base class
4828 * - ...
4829 */
4830 CodeActionKind.RefactorRewrite = 'refactor.rewrite';
4831 /**
4832 * Base kind for source actions: `source`
4833 *
4834 * Source code actions apply to the entire file.
4835 */
4836 CodeActionKind.Source = 'source';
4837 /**
4838 * Base kind for an organize imports source action: `source.organizeImports`
4839 */
4840 CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
4841 /**
4842 * Base kind for auto-fix source actions: `source.fixAll`.
4843 *
4844 * Fix all actions automatically fix errors that have a clear fix that do not require user input.
4845 * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
4846 *
4847 * @since 3.15.0
4848 */
4849 CodeActionKind.SourceFixAll = 'source.fixAll';
4850})(CodeActionKind || (CodeActionKind = {}));
4851/**
4852 * The CodeActionContext namespace provides helper functions to work with
4853 * [CodeActionContext](#CodeActionContext) literals.
4854 */
4855var CodeActionContext;
4856(function (CodeActionContext) {
4857 /**
4858 * Creates a new CodeActionContext literal.
4859 */
4860 function create(diagnostics, only) {
4861 var result = { diagnostics: diagnostics };
4862 if (only !== void 0 && only !== null) {
4863 result.only = only;
4864 }
4865 return result;
4866 }
4867 CodeActionContext.create = create;
4868 /**
4869 * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
4870 */
4871 function is(value) {
4872 var candidate = value;
4873 return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
4874 }
4875 CodeActionContext.is = is;
4876})(CodeActionContext || (CodeActionContext = {}));
4877var CodeAction;
4878(function (CodeAction) {
4879 function create(title, commandOrEdit, kind) {
4880 var result = { title: title };
4881 if (Command.is(commandOrEdit)) {
4882 result.command = commandOrEdit;
4883 }
4884 else {
4885 result.edit = commandOrEdit;
4886 }
4887 if (kind !== void 0) {
4888 result.kind = kind;
4889 }
4890 return result;
4891 }
4892 CodeAction.create = create;
4893 function is(value) {
4894 var candidate = value;
4895 return candidate && Is.string(candidate.title) &&
4896 (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
4897 (candidate.kind === void 0 || Is.string(candidate.kind)) &&
4898 (candidate.edit !== void 0 || candidate.command !== void 0) &&
4899 (candidate.command === void 0 || Command.is(candidate.command)) &&
4900 (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&
4901 (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
4902 }
4903 CodeAction.is = is;
4904})(CodeAction || (CodeAction = {}));
4905/**
4906 * The CodeLens namespace provides helper functions to work with
4907 * [CodeLens](#CodeLens) literals.
4908 */
4909var CodeLens;
4910(function (CodeLens) {
4911 /**
4912 * Creates a new CodeLens literal.
4913 */
4914 function create(range, data) {
4915 var result = { range: range };
4916 if (Is.defined(data)) {
4917 result.data = data;
4918 }
4919 return result;
4920 }
4921 CodeLens.create = create;
4922 /**
4923 * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
4924 */
4925 function is(value) {
4926 var candidate = value;
4927 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
4928 }
4929 CodeLens.is = is;
4930})(CodeLens || (CodeLens = {}));
4931/**
4932 * The FormattingOptions namespace provides helper functions to work with
4933 * [FormattingOptions](#FormattingOptions) literals.
4934 */
4935var FormattingOptions;
4936(function (FormattingOptions) {
4937 /**
4938 * Creates a new FormattingOptions literal.
4939 */
4940 function create(tabSize, insertSpaces) {
4941 return { tabSize: tabSize, insertSpaces: insertSpaces };
4942 }
4943 FormattingOptions.create = create;
4944 /**
4945 * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
4946 */
4947 function is(value) {
4948 var candidate = value;
4949 return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4950 }
4951 FormattingOptions.is = is;
4952})(FormattingOptions || (FormattingOptions = {}));
4953/**
4954 * The DocumentLink namespace provides helper functions to work with
4955 * [DocumentLink](#DocumentLink) literals.
4956 */
4957var DocumentLink;
4958(function (DocumentLink) {
4959 /**
4960 * Creates a new DocumentLink literal.
4961 */
4962 function create(range, target, data) {
4963 return { range: range, target: target, data: data };
4964 }
4965 DocumentLink.create = create;
4966 /**
4967 * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
4968 */
4969 function is(value) {
4970 var candidate = value;
4971 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4972 }
4973 DocumentLink.is = is;
4974})(DocumentLink || (DocumentLink = {}));
4975/**
4976 * The SelectionRange namespace provides helper function to work with
4977 * SelectionRange literals.
4978 */
4979var SelectionRange;
4980(function (SelectionRange) {
4981 /**
4982 * Creates a new SelectionRange
4983 * @param range the range.
4984 * @param parent an optional parent.
4985 */
4986 function create(range, parent) {
4987 return { range: range, parent: parent };
4988 }
4989 SelectionRange.create = create;
4990 function is(value) {
4991 var candidate = value;
4992 return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
4993 }
4994 SelectionRange.is = is;
4995})(SelectionRange || (SelectionRange = {}));
4996var EOL = ['\n', '\r\n', '\r'];
4997/**
4998 * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
4999 */
5000var TextDocument;
5001(function (TextDocument) {
5002 /**
5003 * Creates a new ITextDocument literal from the given uri and content.
5004 * @param uri The document's uri.
5005 * @param languageId The document's language Id.
5006 * @param content The document's content.
5007 */
5008 function create(uri, languageId, version, content) {
5009 return new FullTextDocument(uri, languageId, version, content);
5010 }
5011 TextDocument.create = create;
5012 /**
5013 * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
5014 */
5015 function is(value) {
5016 var candidate = value;
5017 return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)
5018 && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
5019 }
5020 TextDocument.is = is;
5021 function applyEdits(document, edits) {
5022 var text = document.getText();
5023 var sortedEdits = mergeSort(edits, function (a, b) {
5024 var diff = a.range.start.line - b.range.start.line;
5025 if (diff === 0) {
5026 return a.range.start.character - b.range.start.character;
5027 }
5028 return diff;
5029 });
5030 var lastModifiedOffset = text.length;
5031 for (var i = sortedEdits.length - 1; i >= 0; i--) {
5032 var e = sortedEdits[i];
5033 var startOffset = document.offsetAt(e.range.start);
5034 var endOffset = document.offsetAt(e.range.end);
5035 if (endOffset <= lastModifiedOffset) {
5036 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
5037 }
5038 else {
5039 throw new Error('Overlapping edit');
5040 }
5041 lastModifiedOffset = startOffset;
5042 }
5043 return text;
5044 }
5045 TextDocument.applyEdits = applyEdits;
5046 function mergeSort(data, compare) {
5047 if (data.length <= 1) {
5048 // sorted
5049 return data;
5050 }
5051 var p = (data.length / 2) | 0;
5052 var left = data.slice(0, p);
5053 var right = data.slice(p);
5054 mergeSort(left, compare);
5055 mergeSort(right, compare);
5056 var leftIdx = 0;
5057 var rightIdx = 0;
5058 var i = 0;
5059 while (leftIdx < left.length && rightIdx < right.length) {
5060 var ret = compare(left[leftIdx], right[rightIdx]);
5061 if (ret <= 0) {
5062 // smaller_equal -> take left to preserve order
5063 data[i++] = left[leftIdx++];
5064 }
5065 else {
5066 // greater -> take right
5067 data[i++] = right[rightIdx++];
5068 }
5069 }
5070 while (leftIdx < left.length) {
5071 data[i++] = left[leftIdx++];
5072 }
5073 while (rightIdx < right.length) {
5074 data[i++] = right[rightIdx++];
5075 }
5076 return data;
5077 }
5078})(TextDocument || (TextDocument = {}));
5079var FullTextDocument = /** @class */ (function () {
5080 function FullTextDocument(uri, languageId, version, content) {
5081 this._uri = uri;
5082 this._languageId = languageId;
5083 this._version = version;
5084 this._content = content;
5085 this._lineOffsets = undefined;
5086 }
5087 Object.defineProperty(FullTextDocument.prototype, "uri", {
5088 get: function () {
5089 return this._uri;
5090 },
5091 enumerable: true,
5092 configurable: true
5093 });
5094 Object.defineProperty(FullTextDocument.prototype, "languageId", {
5095 get: function () {
5096 return this._languageId;
5097 },
5098 enumerable: true,
5099 configurable: true
5100 });
5101 Object.defineProperty(FullTextDocument.prototype, "version", {
5102 get: function () {
5103 return this._version;
5104 },
5105 enumerable: true,
5106 configurable: true
5107 });
5108 FullTextDocument.prototype.getText = function (range) {
5109 if (range) {
5110 var start = this.offsetAt(range.start);
5111 var end = this.offsetAt(range.end);
5112 return this._content.substring(start, end);
5113 }
5114 return this._content;
5115 };
5116 FullTextDocument.prototype.update = function (event, version) {
5117 this._content = event.text;
5118 this._version = version;
5119 this._lineOffsets = undefined;
5120 };
5121 FullTextDocument.prototype.getLineOffsets = function () {
5122 if (this._lineOffsets === undefined) {
5123 var lineOffsets = [];
5124 var text = this._content;
5125 var isLineStart = true;
5126 for (var i = 0; i < text.length; i++) {
5127 if (isLineStart) {
5128 lineOffsets.push(i);
5129 isLineStart = false;
5130 }
5131 var ch = text.charAt(i);
5132 isLineStart = (ch === '\r' || ch === '\n');
5133 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
5134 i++;
5135 }
5136 }
5137 if (isLineStart && text.length > 0) {
5138 lineOffsets.push(text.length);
5139 }
5140 this._lineOffsets = lineOffsets;
5141 }
5142 return this._lineOffsets;
5143 };
5144 FullTextDocument.prototype.positionAt = function (offset) {
5145 offset = Math.max(Math.min(offset, this._content.length), 0);
5146 var lineOffsets = this.getLineOffsets();
5147 var low = 0, high = lineOffsets.length;
5148 if (high === 0) {
5149 return Position.create(0, offset);
5150 }
5151 while (low < high) {
5152 var mid = Math.floor((low + high) / 2);
5153 if (lineOffsets[mid] > offset) {
5154 high = mid;
5155 }
5156 else {
5157 low = mid + 1;
5158 }
5159 }
5160 // low is the least x for which the line offset is larger than the current offset
5161 // or array.length if no line offset is larger than the current offset
5162 var line = low - 1;
5163 return Position.create(line, offset - lineOffsets[line]);
5164 };
5165 FullTextDocument.prototype.offsetAt = function (position) {
5166 var lineOffsets = this.getLineOffsets();
5167 if (position.line >= lineOffsets.length) {
5168 return this._content.length;
5169 }
5170 else if (position.line < 0) {
5171 return 0;
5172 }
5173 var lineOffset = lineOffsets[position.line];
5174 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
5175 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
5176 };
5177 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
5178 get: function () {
5179 return this.getLineOffsets().length;
5180 },
5181 enumerable: true,
5182 configurable: true
5183 });
5184 return FullTextDocument;
5185}());
5186var Is;
5187(function (Is) {
5188 var toString = Object.prototype.toString;
5189 function defined(value) {
5190 return typeof value !== 'undefined';
5191 }
5192 Is.defined = defined;
5193 function undefined(value) {
5194 return typeof value === 'undefined';
5195 }
5196 Is.undefined = undefined;
5197 function boolean(value) {
5198 return value === true || value === false;
5199 }
5200 Is.boolean = boolean;
5201 function string(value) {
5202 return toString.call(value) === '[object String]';
5203 }
5204 Is.string = string;
5205 function number(value) {
5206 return toString.call(value) === '[object Number]';
5207 }
5208 Is.number = number;
5209 function func(value) {
5210 return toString.call(value) === '[object Function]';
5211 }
5212 Is.func = func;
5213 function objectLiteral(value) {
5214 // Strictly speaking class instances pass this check as well. Since the LSP
5215 // doesn't use classes we ignore this for now. If we do we need to add something
5216 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5217 return value !== null && typeof value === 'object';
5218 }
5219 Is.objectLiteral = objectLiteral;
5220 function typedArray(value, check) {
5221 return Array.isArray(value) && value.every(check);
5222 }
5223 Is.typedArray = typedArray;
5224})(Is || (Is = {}));
5225
5226
5227/***/ }),
5228/* 19 */
5229/***/ (function(module, exports, __webpack_require__) {
5230
5231"use strict";
5232/* --------------------------------------------------------------------------------------------
5233 * Copyright (c) Microsoft Corporation. All rights reserved.
5234 * Licensed under the MIT License. See License.txt in the project root for license information.
5235 * ------------------------------------------------------------------------------------------ */
5236
5237Object.defineProperty(exports, "__esModule", { value: true });
5238const Is = __webpack_require__(20);
5239const vscode_jsonrpc_1 = __webpack_require__(4);
5240const messages_1 = __webpack_require__(21);
5241const protocol_implementation_1 = __webpack_require__(22);
5242exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
5243const protocol_typeDefinition_1 = __webpack_require__(23);
5244exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
5245const protocol_workspaceFolders_1 = __webpack_require__(24);
5246exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
5247exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
5248const protocol_configuration_1 = __webpack_require__(25);
5249exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
5250const protocol_colorProvider_1 = __webpack_require__(26);
5251exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
5252exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
5253const protocol_foldingRange_1 = __webpack_require__(27);
5254exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
5255const protocol_declaration_1 = __webpack_require__(28);
5256exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
5257const protocol_selectionRange_1 = __webpack_require__(29);
5258exports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
5259const protocol_progress_1 = __webpack_require__(30);
5260exports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
5261exports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
5262exports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
5263// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5264let __noDynamicImport;
5265/**
5266 * The DocumentFilter namespace provides helper functions to work with
5267 * [DocumentFilter](#DocumentFilter) literals.
5268 */
5269var DocumentFilter;
5270(function (DocumentFilter) {
5271 function is(value) {
5272 const candidate = value;
5273 return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
5274 }
5275 DocumentFilter.is = is;
5276})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
5277/**
5278 * The DocumentSelector namespace provides helper functions to work with
5279 * [DocumentSelector](#DocumentSelector)s.
5280 */
5281var DocumentSelector;
5282(function (DocumentSelector) {
5283 function is(value) {
5284 if (!Array.isArray(value)) {
5285 return false;
5286 }
5287 for (let elem of value) {
5288 if (!Is.string(elem) && !DocumentFilter.is(elem)) {
5289 return false;
5290 }
5291 }
5292 return true;
5293 }
5294 DocumentSelector.is = is;
5295})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));
5296/**
5297 * The `client/registerCapability` request is sent from the server to the client to register a new capability
5298 * handler on the client side.
5299 */
5300var RegistrationRequest;
5301(function (RegistrationRequest) {
5302 RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');
5303})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
5304/**
5305 * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
5306 * handler on the client side.
5307 */
5308var UnregistrationRequest;
5309(function (UnregistrationRequest) {
5310 UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');
5311})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
5312var ResourceOperationKind;
5313(function (ResourceOperationKind) {
5314 /**
5315 * Supports creating new files and folders.
5316 */
5317 ResourceOperationKind.Create = 'create';
5318 /**
5319 * Supports renaming existing files and folders.
5320 */
5321 ResourceOperationKind.Rename = 'rename';
5322 /**
5323 * Supports deleting existing files and folders.
5324 */
5325 ResourceOperationKind.Delete = 'delete';
5326})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
5327var FailureHandlingKind;
5328(function (FailureHandlingKind) {
5329 /**
5330 * Applying the workspace change is simply aborted if one of the changes provided
5331 * fails. All operations executed before the failing operation stay executed.
5332 */
5333 FailureHandlingKind.Abort = 'abort';
5334 /**
5335 * All operations are executed transactional. That means they either all
5336 * succeed or no changes at all are applied to the workspace.
5337 */
5338 FailureHandlingKind.Transactional = 'transactional';
5339 /**
5340 * If the workspace edit contains only textual file changes they are executed transactional.
5341 * If resource changes (create, rename or delete file) are part of the change the failure
5342 * handling startegy is abort.
5343 */
5344 FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
5345 /**
5346 * The client tries to undo the operations already executed. But there is no
5347 * guarantee that this is succeeding.
5348 */
5349 FailureHandlingKind.Undo = 'undo';
5350})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
5351/**
5352 * The StaticRegistrationOptions namespace provides helper functions to work with
5353 * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.
5354 */
5355var StaticRegistrationOptions;
5356(function (StaticRegistrationOptions) {
5357 function hasId(value) {
5358 const candidate = value;
5359 return candidate && Is.string(candidate.id) && candidate.id.length > 0;
5360 }
5361 StaticRegistrationOptions.hasId = hasId;
5362})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));
5363/**
5364 * The TextDocumentRegistrationOptions namespace provides helper functions to work with
5365 * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.
5366 */
5367var TextDocumentRegistrationOptions;
5368(function (TextDocumentRegistrationOptions) {
5369 function is(value) {
5370 const candidate = value;
5371 return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
5372 }
5373 TextDocumentRegistrationOptions.is = is;
5374})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));
5375/**
5376 * The WorkDoneProgressOptions namespace provides helper functions to work with
5377 * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.
5378 */
5379var WorkDoneProgressOptions;
5380(function (WorkDoneProgressOptions) {
5381 function is(value) {
5382 const candidate = value;
5383 return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
5384 }
5385 WorkDoneProgressOptions.is = is;
5386 function hasWorkDoneProgress(value) {
5387 const candidate = value;
5388 return candidate && Is.boolean(candidate.workDoneProgress);
5389 }
5390 WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
5391})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));
5392/**
5393 * The initialize request is sent from the client to the server.
5394 * It is sent once as the request after starting up the server.
5395 * The requests parameter is of type [InitializeParams](#InitializeParams)
5396 * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
5397 * resolves to such.
5398 */
5399var InitializeRequest;
5400(function (InitializeRequest) {
5401 InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');
5402})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
5403/**
5404 * Known error codes for an `InitializeError`;
5405 */
5406var InitializeError;
5407(function (InitializeError) {
5408 /**
5409 * If the protocol version provided by the client can't be handled by the server.
5410 * @deprecated This initialize error got replaced by client capabilities. There is
5411 * no version handshake in version 3.0x
5412 */
5413 InitializeError.unknownProtocolVersion = 1;
5414})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
5415/**
5416 * The intialized notification is sent from the client to the
5417 * server after the client is fully initialized and the server
5418 * is allowed to send requests from the server to the client.
5419 */
5420var InitializedNotification;
5421(function (InitializedNotification) {
5422 InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');
5423})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
5424//---- Shutdown Method ----
5425/**
5426 * A shutdown request is sent from the client to the server.
5427 * It is sent once when the client decides to shutdown the
5428 * server. The only notification that is sent after a shutdown request
5429 * is the exit event.
5430 */
5431var ShutdownRequest;
5432(function (ShutdownRequest) {
5433 ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');
5434})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
5435//---- Exit Notification ----
5436/**
5437 * The exit event is sent from the client to the server to
5438 * ask the server to exit its process.
5439 */
5440var ExitNotification;
5441(function (ExitNotification) {
5442 ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');
5443})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
5444/**
5445 * The configuration change notification is sent from the client to the server
5446 * when the client's configuration has changed. The notification contains
5447 * the changed configuration as defined by the language client.
5448 */
5449var DidChangeConfigurationNotification;
5450(function (DidChangeConfigurationNotification) {
5451 DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');
5452})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
5453//---- Message show and log notifications ----
5454/**
5455 * The message type
5456 */
5457var MessageType;
5458(function (MessageType) {
5459 /**
5460 * An error message.
5461 */
5462 MessageType.Error = 1;
5463 /**
5464 * A warning message.
5465 */
5466 MessageType.Warning = 2;
5467 /**
5468 * An information message.
5469 */
5470 MessageType.Info = 3;
5471 /**
5472 * A log message.
5473 */
5474 MessageType.Log = 4;
5475})(MessageType = exports.MessageType || (exports.MessageType = {}));
5476/**
5477 * The show message notification is sent from a server to a client to ask
5478 * the client to display a particular message in the user interface.
5479 */
5480var ShowMessageNotification;
5481(function (ShowMessageNotification) {
5482 ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');
5483})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
5484/**
5485 * The show message request is sent from the server to the client to show a message
5486 * and a set of options actions to the user.
5487 */
5488var ShowMessageRequest;
5489(function (ShowMessageRequest) {
5490 ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');
5491})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
5492/**
5493 * The log message notification is sent from the server to the client to ask
5494 * the client to log a particular message.
5495 */
5496var LogMessageNotification;
5497(function (LogMessageNotification) {
5498 LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');
5499})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
5500//---- Telemetry notification
5501/**
5502 * The telemetry event notification is sent from the server to the client to ask
5503 * the client to log telemetry data.
5504 */
5505var TelemetryEventNotification;
5506(function (TelemetryEventNotification) {
5507 TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');
5508})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
5509/**
5510 * Defines how the host (editor) should sync
5511 * document changes to the language server.
5512 */
5513var TextDocumentSyncKind;
5514(function (TextDocumentSyncKind) {
5515 /**
5516 * Documents should not be synced at all.
5517 */
5518 TextDocumentSyncKind.None = 0;
5519 /**
5520 * Documents are synced by always sending the full content
5521 * of the document.
5522 */
5523 TextDocumentSyncKind.Full = 1;
5524 /**
5525 * Documents are synced by sending the full content on open.
5526 * After that only incremental updates to the document are
5527 * send.
5528 */
5529 TextDocumentSyncKind.Incremental = 2;
5530})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
5531/**
5532 * The document open notification is sent from the client to the server to signal
5533 * newly opened text documents. The document's truth is now managed by the client
5534 * and the server must not try to read the document's truth using the document's
5535 * uri. Open in this sense means it is managed by the client. It doesn't necessarily
5536 * mean that its content is presented in an editor. An open notification must not
5537 * be sent more than once without a corresponding close notification send before.
5538 * This means open and close notification must be balanced and the max open count
5539 * is one.
5540 */
5541var DidOpenTextDocumentNotification;
5542(function (DidOpenTextDocumentNotification) {
5543 DidOpenTextDocumentNotification.method = 'textDocument/didOpen';
5544 DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
5545})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
5546/**
5547 * The document change notification is sent from the client to the server to signal
5548 * changes to a text document.
5549 */
5550var DidChangeTextDocumentNotification;
5551(function (DidChangeTextDocumentNotification) {
5552 DidChangeTextDocumentNotification.method = 'textDocument/didChange';
5553 DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
5554})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
5555/**
5556 * The document close notification is sent from the client to the server when
5557 * the document got closed in the client. The document's truth now exists where
5558 * the document's uri points to (e.g. if the document's uri is a file uri the
5559 * truth now exists on disk). As with the open notification the close notification
5560 * is about managing the document's content. Receiving a close notification
5561 * doesn't mean that the document was open in an editor before. A close
5562 * notification requires a previous open notification to be sent.
5563 */
5564var DidCloseTextDocumentNotification;
5565(function (DidCloseTextDocumentNotification) {
5566 DidCloseTextDocumentNotification.method = 'textDocument/didClose';
5567 DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
5568})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
5569/**
5570 * The document save notification is sent from the client to the server when
5571 * the document got saved in the client.
5572 */
5573var DidSaveTextDocumentNotification;
5574(function (DidSaveTextDocumentNotification) {
5575 DidSaveTextDocumentNotification.method = 'textDocument/didSave';
5576 DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
5577})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
5578/**
5579 * Represents reasons why a text document is saved.
5580 */
5581var TextDocumentSaveReason;
5582(function (TextDocumentSaveReason) {
5583 /**
5584 * Manually triggered, e.g. by the user pressing save, by starting debugging,
5585 * or by an API call.
5586 */
5587 TextDocumentSaveReason.Manual = 1;
5588 /**
5589 * Automatic after a delay.
5590 */
5591 TextDocumentSaveReason.AfterDelay = 2;
5592 /**
5593 * When the editor lost focus.
5594 */
5595 TextDocumentSaveReason.FocusOut = 3;
5596})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));
5597/**
5598 * A document will save notification is sent from the client to the server before
5599 * the document is actually saved.
5600 */
5601var WillSaveTextDocumentNotification;
5602(function (WillSaveTextDocumentNotification) {
5603 WillSaveTextDocumentNotification.method = 'textDocument/willSave';
5604 WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
5605})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
5606/**
5607 * A document will save request is sent from the client to the server before
5608 * the document is actually saved. The request can return an array of TextEdits
5609 * which will be applied to the text document before it is saved. Please note that
5610 * clients might drop results if computing the text edits took too long or if a
5611 * server constantly fails on this request. This is done to keep the save fast and
5612 * reliable.
5613 */
5614var WillSaveTextDocumentWaitUntilRequest;
5615(function (WillSaveTextDocumentWaitUntilRequest) {
5616 WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';
5617 WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
5618})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
5619/**
5620 * The watched files notification is sent from the client to the server when
5621 * the client detects changes to file watched by the language client.
5622 */
5623var DidChangeWatchedFilesNotification;
5624(function (DidChangeWatchedFilesNotification) {
5625 DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');
5626})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
5627/**
5628 * The file event type
5629 */
5630var FileChangeType;
5631(function (FileChangeType) {
5632 /**
5633 * The file got created.
5634 */
5635 FileChangeType.Created = 1;
5636 /**
5637 * The file got changed.
5638 */
5639 FileChangeType.Changed = 2;
5640 /**
5641 * The file got deleted.
5642 */
5643 FileChangeType.Deleted = 3;
5644})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
5645var WatchKind;
5646(function (WatchKind) {
5647 /**
5648 * Interested in create events.
5649 */
5650 WatchKind.Create = 1;
5651 /**
5652 * Interested in change events
5653 */
5654 WatchKind.Change = 2;
5655 /**
5656 * Interested in delete events
5657 */
5658 WatchKind.Delete = 4;
5659})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
5660/**
5661 * Diagnostics notification are sent from the server to the client to signal
5662 * results of validation runs.
5663 */
5664var PublishDiagnosticsNotification;
5665(function (PublishDiagnosticsNotification) {
5666 PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');
5667})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
5668/**
5669 * How a completion was triggered
5670 */
5671var CompletionTriggerKind;
5672(function (CompletionTriggerKind) {
5673 /**
5674 * Completion was triggered by typing an identifier (24x7 code
5675 * complete), manual invocation (e.g Ctrl+Space) or via API.
5676 */
5677 CompletionTriggerKind.Invoked = 1;
5678 /**
5679 * Completion was triggered by a trigger character specified by
5680 * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
5681 */
5682 CompletionTriggerKind.TriggerCharacter = 2;
5683 /**
5684 * Completion was re-triggered as current completion list is incomplete
5685 */
5686 CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
5687})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
5688/**
5689 * Request to request completion at a given text document position. The request's
5690 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
5691 * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
5692 * or a Thenable that resolves to such.
5693 *
5694 * The request can delay the computation of the [`detail`](#CompletionItem.detail)
5695 * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
5696 * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
5697 * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
5698 */
5699var CompletionRequest;
5700(function (CompletionRequest) {
5701 CompletionRequest.method = 'textDocument/completion';
5702 CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
5703 /** @deprecated Use CompletionRequest.type */
5704 CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5705})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
5706/**
5707 * Request to resolve additional information for a given completion item.The request's
5708 * parameter is of type [CompletionItem](#CompletionItem) the response
5709 * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
5710 */
5711var CompletionResolveRequest;
5712(function (CompletionResolveRequest) {
5713 CompletionResolveRequest.method = 'completionItem/resolve';
5714 CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
5715})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
5716/**
5717 * Request to request hover information at a given text document position. The request's
5718 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
5719 * type [Hover](#Hover) or a Thenable that resolves to such.
5720 */
5721var HoverRequest;
5722(function (HoverRequest) {
5723 HoverRequest.method = 'textDocument/hover';
5724 HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
5725})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
5726/**
5727 * How a signature help was triggered.
5728 *
5729 * @since 3.15.0
5730 */
5731var SignatureHelpTriggerKind;
5732(function (SignatureHelpTriggerKind) {
5733 /**
5734 * Signature help was invoked manually by the user or by a command.
5735 */
5736 SignatureHelpTriggerKind.Invoked = 1;
5737 /**
5738 * Signature help was triggered by a trigger character.
5739 */
5740 SignatureHelpTriggerKind.TriggerCharacter = 2;
5741 /**
5742 * Signature help was triggered by the cursor moving or by the document content changing.
5743 */
5744 SignatureHelpTriggerKind.ContentChange = 3;
5745})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));
5746var SignatureHelpRequest;
5747(function (SignatureHelpRequest) {
5748 SignatureHelpRequest.method = 'textDocument/signatureHelp';
5749 SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
5750})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
5751/**
5752 * A request to resolve the definition location of a symbol at a given text
5753 * document position. The request's parameter is of type [TextDocumentPosition]
5754 * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
5755 * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
5756 * to such.
5757 */
5758var DefinitionRequest;
5759(function (DefinitionRequest) {
5760 DefinitionRequest.method = 'textDocument/definition';
5761 DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
5762 /** @deprecated Use DefinitionRequest.type */
5763 DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5764})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
5765/**
5766 * A request to resolve project-wide references for the symbol denoted
5767 * by the given text document position. The request's parameter is of
5768 * type [ReferenceParams](#ReferenceParams) the response is of type
5769 * [Location[]](#Location) or a Thenable that resolves to such.
5770 */
5771var ReferencesRequest;
5772(function (ReferencesRequest) {
5773 ReferencesRequest.method = 'textDocument/references';
5774 ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
5775 /** @deprecated Use ReferencesRequest.type */
5776 ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5777})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
5778/**
5779 * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
5780 * text document position. The request's parameter is of type [TextDocumentPosition]
5781 * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
5782 * (#DocumentHighlight) or a Thenable that resolves to such.
5783 */
5784var DocumentHighlightRequest;
5785(function (DocumentHighlightRequest) {
5786 DocumentHighlightRequest.method = 'textDocument/documentHighlight';
5787 DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
5788 /** @deprecated Use DocumentHighlightRequest.type */
5789 DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5790})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
5791/**
5792 * A request to list all symbols found in a given text document. The request's
5793 * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
5794 * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
5795 * that resolves to such.
5796 */
5797var DocumentSymbolRequest;
5798(function (DocumentSymbolRequest) {
5799 DocumentSymbolRequest.method = 'textDocument/documentSymbol';
5800 DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
5801 /** @deprecated Use DocumentSymbolRequest.type */
5802 DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5803})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
5804/**
5805 * A request to provide commands for the given text document and range.
5806 */
5807var CodeActionRequest;
5808(function (CodeActionRequest) {
5809 CodeActionRequest.method = 'textDocument/codeAction';
5810 CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
5811 /** @deprecated Use CodeActionRequest.type */
5812 CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5813})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
5814/**
5815 * A request to list project-wide symbols matching the query string given
5816 * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
5817 * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
5818 * resolves to such.
5819 */
5820var WorkspaceSymbolRequest;
5821(function (WorkspaceSymbolRequest) {
5822 WorkspaceSymbolRequest.method = 'workspace/symbol';
5823 WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
5824 /** @deprecated Use WorkspaceSymbolRequest.type */
5825 WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5826})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
5827/**
5828 * A request to provide code lens for the given text document.
5829 */
5830var CodeLensRequest;
5831(function (CodeLensRequest) {
5832 CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');
5833 /** @deprecated Use CodeLensRequest.type */
5834 CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5835})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
5836/**
5837 * A request to resolve a command for a given code lens.
5838 */
5839var CodeLensResolveRequest;
5840(function (CodeLensResolveRequest) {
5841 CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');
5842})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
5843/**
5844 * A request to provide document links
5845 */
5846var DocumentLinkRequest;
5847(function (DocumentLinkRequest) {
5848 DocumentLinkRequest.method = 'textDocument/documentLink';
5849 DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
5850 /** @deprecated Use DocumentLinkRequest.type */
5851 DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5852})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
5853/**
5854 * Request to resolve additional information for a given document link. The request's
5855 * parameter is of type [DocumentLink](#DocumentLink) the response
5856 * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
5857 */
5858var DocumentLinkResolveRequest;
5859(function (DocumentLinkResolveRequest) {
5860 DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');
5861})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
5862/**
5863 * A request to to format a whole document.
5864 */
5865var DocumentFormattingRequest;
5866(function (DocumentFormattingRequest) {
5867 DocumentFormattingRequest.method = 'textDocument/formatting';
5868 DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
5869})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
5870/**
5871 * A request to to format a range in a document.
5872 */
5873var DocumentRangeFormattingRequest;
5874(function (DocumentRangeFormattingRequest) {
5875 DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';
5876 DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
5877})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
5878/**
5879 * A request to format a document on type.
5880 */
5881var DocumentOnTypeFormattingRequest;
5882(function (DocumentOnTypeFormattingRequest) {
5883 DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';
5884 DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
5885})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
5886/**
5887 * A request to rename a symbol.
5888 */
5889var RenameRequest;
5890(function (RenameRequest) {
5891 RenameRequest.method = 'textDocument/rename';
5892 RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
5893})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
5894/**
5895 * A request to test and perform the setup necessary for a rename.
5896 */
5897var PrepareRenameRequest;
5898(function (PrepareRenameRequest) {
5899 PrepareRenameRequest.method = 'textDocument/prepareRename';
5900 PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
5901})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
5902/**
5903 * A request send from the client to the server to execute a command. The request might return
5904 * a workspace edit which the client will apply to the workspace.
5905 */
5906var ExecuteCommandRequest;
5907(function (ExecuteCommandRequest) {
5908 ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');
5909})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
5910/**
5911 * A request sent from the server to the client to modified certain resources.
5912 */
5913var ApplyWorkspaceEditRequest;
5914(function (ApplyWorkspaceEditRequest) {
5915 ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');
5916})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
5917
5918
5919/***/ }),
5920/* 20 */
5921/***/ (function(module, exports, __webpack_require__) {
5922
5923"use strict";
5924/* --------------------------------------------------------------------------------------------
5925 * Copyright (c) Microsoft Corporation. All rights reserved.
5926 * Licensed under the MIT License. See License.txt in the project root for license information.
5927 * ------------------------------------------------------------------------------------------ */
5928
5929Object.defineProperty(exports, "__esModule", { value: true });
5930function boolean(value) {
5931 return value === true || value === false;
5932}
5933exports.boolean = boolean;
5934function string(value) {
5935 return typeof value === 'string' || value instanceof String;
5936}
5937exports.string = string;
5938function number(value) {
5939 return typeof value === 'number' || value instanceof Number;
5940}
5941exports.number = number;
5942function error(value) {
5943 return value instanceof Error;
5944}
5945exports.error = error;
5946function func(value) {
5947 return typeof value === 'function';
5948}
5949exports.func = func;
5950function array(value) {
5951 return Array.isArray(value);
5952}
5953exports.array = array;
5954function stringArray(value) {
5955 return array(value) && value.every(elem => string(elem));
5956}
5957exports.stringArray = stringArray;
5958function typedArray(value, check) {
5959 return Array.isArray(value) && value.every(check);
5960}
5961exports.typedArray = typedArray;
5962function objectLiteral(value) {
5963 // Strictly speaking class instances pass this check as well. Since the LSP
5964 // doesn't use classes we ignore this for now. If we do we need to add something
5965 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5966 return value !== null && typeof value === 'object';
5967}
5968exports.objectLiteral = objectLiteral;
5969
5970
5971/***/ }),
5972/* 21 */
5973/***/ (function(module, exports, __webpack_require__) {
5974
5975"use strict";
5976/* --------------------------------------------------------------------------------------------
5977 * Copyright (c) Microsoft Corporation. All rights reserved.
5978 * Licensed under the MIT License. See License.txt in the project root for license information.
5979 * ------------------------------------------------------------------------------------------ */
5980
5981Object.defineProperty(exports, "__esModule", { value: true });
5982const vscode_jsonrpc_1 = __webpack_require__(4);
5983class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
5984 constructor(method) {
5985 super(method);
5986 }
5987}
5988exports.ProtocolRequestType0 = ProtocolRequestType0;
5989class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
5990 constructor(method) {
5991 super(method);
5992 }
5993}
5994exports.ProtocolRequestType = ProtocolRequestType;
5995class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
5996 constructor(method) {
5997 super(method);
5998 }
5999}
6000exports.ProtocolNotificationType = ProtocolNotificationType;
6001class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
6002 constructor(method) {
6003 super(method);
6004 }
6005}
6006exports.ProtocolNotificationType0 = ProtocolNotificationType0;
6007
6008
6009/***/ }),
6010/* 22 */
6011/***/ (function(module, exports, __webpack_require__) {
6012
6013"use strict";
6014/* --------------------------------------------------------------------------------------------
6015 * Copyright (c) Microsoft Corporation. All rights reserved.
6016 * Licensed under the MIT License. See License.txt in the project root for license information.
6017 * ------------------------------------------------------------------------------------------ */
6018
6019Object.defineProperty(exports, "__esModule", { value: true });
6020const vscode_jsonrpc_1 = __webpack_require__(4);
6021const messages_1 = __webpack_require__(21);
6022// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6023let __noDynamicImport;
6024/**
6025 * A request to resolve the implementation locations of a symbol at a given text
6026 * document position. The request's parameter is of type [TextDocumentPositioParams]
6027 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6028 * Thenable that resolves to such.
6029 */
6030var ImplementationRequest;
6031(function (ImplementationRequest) {
6032 ImplementationRequest.method = 'textDocument/implementation';
6033 ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
6034 /** @deprecated Use ImplementationRequest.type */
6035 ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6036})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
6037
6038
6039/***/ }),
6040/* 23 */
6041/***/ (function(module, exports, __webpack_require__) {
6042
6043"use strict";
6044/* --------------------------------------------------------------------------------------------
6045 * Copyright (c) Microsoft Corporation. All rights reserved.
6046 * Licensed under the MIT License. See License.txt in the project root for license information.
6047 * ------------------------------------------------------------------------------------------ */
6048
6049Object.defineProperty(exports, "__esModule", { value: true });
6050const vscode_jsonrpc_1 = __webpack_require__(4);
6051const messages_1 = __webpack_require__(21);
6052// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6053let __noDynamicImport;
6054/**
6055 * A request to resolve the type definition locations of a symbol at a given text
6056 * document position. The request's parameter is of type [TextDocumentPositioParams]
6057 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6058 * Thenable that resolves to such.
6059 */
6060var TypeDefinitionRequest;
6061(function (TypeDefinitionRequest) {
6062 TypeDefinitionRequest.method = 'textDocument/typeDefinition';
6063 TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
6064 /** @deprecated Use TypeDefinitionRequest.type */
6065 TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6066})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
6067
6068
6069/***/ }),
6070/* 24 */
6071/***/ (function(module, exports, __webpack_require__) {
6072
6073"use strict";
6074/* --------------------------------------------------------------------------------------------
6075 * Copyright (c) Microsoft Corporation. All rights reserved.
6076 * Licensed under the MIT License. See License.txt in the project root for license information.
6077 * ------------------------------------------------------------------------------------------ */
6078
6079Object.defineProperty(exports, "__esModule", { value: true });
6080const messages_1 = __webpack_require__(21);
6081/**
6082 * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
6083 */
6084var WorkspaceFoldersRequest;
6085(function (WorkspaceFoldersRequest) {
6086 WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');
6087})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
6088/**
6089 * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
6090 * folder configuration changes.
6091 */
6092var DidChangeWorkspaceFoldersNotification;
6093(function (DidChangeWorkspaceFoldersNotification) {
6094 DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');
6095})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
6096
6097
6098/***/ }),
6099/* 25 */
6100/***/ (function(module, exports, __webpack_require__) {
6101
6102"use strict";
6103/* --------------------------------------------------------------------------------------------
6104 * Copyright (c) Microsoft Corporation. All rights reserved.
6105 * Licensed under the MIT License. See License.txt in the project root for license information.
6106 * ------------------------------------------------------------------------------------------ */
6107
6108Object.defineProperty(exports, "__esModule", { value: true });
6109const messages_1 = __webpack_require__(21);
6110/**
6111 * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
6112 * configuration setting.
6113 *
6114 * This pull model replaces the old push model were the client signaled configuration change via an
6115 * event. If the server still needs to react to configuration changes (since the server caches the
6116 * result of `workspace/configuration` requests) the server should register for an empty configuration
6117 * change event and empty the cache if such an event is received.
6118 */
6119var ConfigurationRequest;
6120(function (ConfigurationRequest) {
6121 ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');
6122})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
6123
6124
6125/***/ }),
6126/* 26 */
6127/***/ (function(module, exports, __webpack_require__) {
6128
6129"use strict";
6130/* --------------------------------------------------------------------------------------------
6131 * Copyright (c) Microsoft Corporation. All rights reserved.
6132 * Licensed under the MIT License. See License.txt in the project root for license information.
6133 * ------------------------------------------------------------------------------------------ */
6134
6135Object.defineProperty(exports, "__esModule", { value: true });
6136const vscode_jsonrpc_1 = __webpack_require__(4);
6137const messages_1 = __webpack_require__(21);
6138/**
6139 * A request to list all color symbols found in a given text document. The request's
6140 * parameter is of type [DocumentColorParams](#DocumentColorParams) the
6141 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6142 * that resolves to such.
6143 */
6144var DocumentColorRequest;
6145(function (DocumentColorRequest) {
6146 DocumentColorRequest.method = 'textDocument/documentColor';
6147 DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
6148 /** @deprecated Use DocumentColorRequest.type */
6149 DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6150})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
6151/**
6152 * A request to list all presentation for a color. The request's
6153 * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
6154 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6155 * that resolves to such.
6156 */
6157var ColorPresentationRequest;
6158(function (ColorPresentationRequest) {
6159 ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');
6160})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
6161
6162
6163/***/ }),
6164/* 27 */
6165/***/ (function(module, exports, __webpack_require__) {
6166
6167"use strict";
6168
6169/*---------------------------------------------------------------------------------------------
6170 * Copyright (c) Microsoft Corporation. All rights reserved.
6171 * Licensed under the MIT License. See License.txt in the project root for license information.
6172 *--------------------------------------------------------------------------------------------*/
6173Object.defineProperty(exports, "__esModule", { value: true });
6174const vscode_jsonrpc_1 = __webpack_require__(4);
6175const messages_1 = __webpack_require__(21);
6176/**
6177 * Enum of known range kinds
6178 */
6179var FoldingRangeKind;
6180(function (FoldingRangeKind) {
6181 /**
6182 * Folding range for a comment
6183 */
6184 FoldingRangeKind["Comment"] = "comment";
6185 /**
6186 * Folding range for a imports or includes
6187 */
6188 FoldingRangeKind["Imports"] = "imports";
6189 /**
6190 * Folding range for a region (e.g. `#region`)
6191 */
6192 FoldingRangeKind["Region"] = "region";
6193})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
6194/**
6195 * A request to provide folding ranges in a document. The request's
6196 * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
6197 * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
6198 * that resolves to such.
6199 */
6200var FoldingRangeRequest;
6201(function (FoldingRangeRequest) {
6202 FoldingRangeRequest.method = 'textDocument/foldingRange';
6203 FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
6204 /** @deprecated Use FoldingRangeRequest.type */
6205 FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6206})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
6207
6208
6209/***/ }),
6210/* 28 */
6211/***/ (function(module, exports, __webpack_require__) {
6212
6213"use strict";
6214/* --------------------------------------------------------------------------------------------
6215 * Copyright (c) Microsoft Corporation. All rights reserved.
6216 * Licensed under the MIT License. See License.txt in the project root for license information.
6217 * ------------------------------------------------------------------------------------------ */
6218
6219Object.defineProperty(exports, "__esModule", { value: true });
6220const vscode_jsonrpc_1 = __webpack_require__(4);
6221const messages_1 = __webpack_require__(21);
6222// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6223let __noDynamicImport;
6224/**
6225 * A request to resolve the type definition locations of a symbol at a given text
6226 * document position. The request's parameter is of type [TextDocumentPositioParams]
6227 * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
6228 * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
6229 * to such.
6230 */
6231var DeclarationRequest;
6232(function (DeclarationRequest) {
6233 DeclarationRequest.method = 'textDocument/declaration';
6234 DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
6235 /** @deprecated Use DeclarationRequest.type */
6236 DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6237})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
6238
6239
6240/***/ }),
6241/* 29 */
6242/***/ (function(module, exports, __webpack_require__) {
6243
6244"use strict";
6245
6246/*---------------------------------------------------------------------------------------------
6247 * Copyright (c) Microsoft Corporation. All rights reserved.
6248 * Licensed under the MIT License. See License.txt in the project root for license information.
6249 *--------------------------------------------------------------------------------------------*/
6250Object.defineProperty(exports, "__esModule", { value: true });
6251const vscode_jsonrpc_1 = __webpack_require__(4);
6252const messages_1 = __webpack_require__(21);
6253/**
6254 * A request to provide selection ranges in a document. The request's
6255 * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the
6256 * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable
6257 * that resolves to such.
6258 */
6259var SelectionRangeRequest;
6260(function (SelectionRangeRequest) {
6261 SelectionRangeRequest.method = 'textDocument/selectionRange';
6262 SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
6263 /** @deprecated Use SelectionRangeRequest.type */
6264 SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6265})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));
6266
6267
6268/***/ }),
6269/* 30 */
6270/***/ (function(module, exports, __webpack_require__) {
6271
6272"use strict";
6273/* --------------------------------------------------------------------------------------------
6274 * Copyright (c) Microsoft Corporation. All rights reserved.
6275 * Licensed under the MIT License. See License.txt in the project root for license information.
6276 * ------------------------------------------------------------------------------------------ */
6277
6278Object.defineProperty(exports, "__esModule", { value: true });
6279const vscode_jsonrpc_1 = __webpack_require__(4);
6280const messages_1 = __webpack_require__(21);
6281var WorkDoneProgress;
6282(function (WorkDoneProgress) {
6283 WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
6284})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));
6285/**
6286 * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
6287 * reporting from the server.
6288 */
6289var WorkDoneProgressCreateRequest;
6290(function (WorkDoneProgressCreateRequest) {
6291 WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');
6292})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));
6293/**
6294 * The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
6295 * initiated on the server side.
6296 */
6297var WorkDoneProgressCancelNotification;
6298(function (WorkDoneProgressCancelNotification) {
6299 WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');
6300})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));
6301
6302
6303/***/ }),
6304/* 31 */
6305/***/ (function(module, exports, __webpack_require__) {
6306
6307"use strict";
6308/* --------------------------------------------------------------------------------------------
6309 * Copyright (c) TypeFox and others. All rights reserved.
6310 * Licensed under the MIT License. See License.txt in the project root for license information.
6311 * ------------------------------------------------------------------------------------------ */
6312
6313Object.defineProperty(exports, "__esModule", { value: true });
6314const messages_1 = __webpack_require__(21);
6315/**
6316 * A request to result a `CallHierarchyItem` in a document at a given position.
6317 * Can be used as an input to a incoming or outgoing call hierarchy.
6318 *
6319 * @since 3.16.0 - Proposed state
6320 */
6321var CallHierarchyPrepareRequest;
6322(function (CallHierarchyPrepareRequest) {
6323 CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';
6324 CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
6325})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));
6326/**
6327 * A request to resolve the incoming calls for a given `CallHierarchyItem`.
6328 *
6329 * @since 3.16.0 - Proposed state
6330 */
6331var CallHierarchyIncomingCallsRequest;
6332(function (CallHierarchyIncomingCallsRequest) {
6333 CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';
6334 CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
6335})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));
6336/**
6337 * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
6338 *
6339 * @since 3.16.0 - Proposed state
6340 */
6341var CallHierarchyOutgoingCallsRequest;
6342(function (CallHierarchyOutgoingCallsRequest) {
6343 CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';
6344 CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
6345})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));
6346
6347
6348/***/ }),
6349/* 32 */
6350/***/ (function(module, exports, __webpack_require__) {
6351
6352"use strict";
6353/* --------------------------------------------------------------------------------------------
6354 * Copyright (c) Microsoft Corporation. All rights reserved.
6355 * Licensed under the MIT License. See License.txt in the project root for license information.
6356 * ------------------------------------------------------------------------------------------ */
6357
6358Object.defineProperty(exports, "__esModule", { value: true });
6359const messages_1 = __webpack_require__(21);
6360/**
6361 * A set of predefined token types. This set is not fixed
6362 * an clients can specify additional token types via the
6363 * corresponding client capabilities.
6364 *
6365 * @since 3.16.0 - Proposed state
6366 */
6367var SemanticTokenTypes;
6368(function (SemanticTokenTypes) {
6369 SemanticTokenTypes["comment"] = "comment";
6370 SemanticTokenTypes["keyword"] = "keyword";
6371 SemanticTokenTypes["string"] = "string";
6372 SemanticTokenTypes["number"] = "number";
6373 SemanticTokenTypes["regexp"] = "regexp";
6374 SemanticTokenTypes["operator"] = "operator";
6375 SemanticTokenTypes["namespace"] = "namespace";
6376 SemanticTokenTypes["type"] = "type";
6377 SemanticTokenTypes["struct"] = "struct";
6378 SemanticTokenTypes["class"] = "class";
6379 SemanticTokenTypes["interface"] = "interface";
6380 SemanticTokenTypes["enum"] = "enum";
6381 SemanticTokenTypes["typeParameter"] = "typeParameter";
6382 SemanticTokenTypes["function"] = "function";
6383 SemanticTokenTypes["member"] = "member";
6384 SemanticTokenTypes["property"] = "property";
6385 SemanticTokenTypes["macro"] = "macro";
6386 SemanticTokenTypes["variable"] = "variable";
6387 SemanticTokenTypes["parameter"] = "parameter";
6388 SemanticTokenTypes["label"] = "label";
6389})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));
6390/**
6391 * A set of predefined token modifiers. This set is not fixed
6392 * an clients can specify additional token types via the
6393 * corresponding client capabilities.
6394 *
6395 * @since 3.16.0 - Proposed state
6396 */
6397var SemanticTokenModifiers;
6398(function (SemanticTokenModifiers) {
6399 SemanticTokenModifiers["documentation"] = "documentation";
6400 SemanticTokenModifiers["declaration"] = "declaration";
6401 SemanticTokenModifiers["definition"] = "definition";
6402 SemanticTokenModifiers["reference"] = "reference";
6403 SemanticTokenModifiers["static"] = "static";
6404 SemanticTokenModifiers["abstract"] = "abstract";
6405 SemanticTokenModifiers["deprecated"] = "deprecated";
6406 SemanticTokenModifiers["async"] = "async";
6407 SemanticTokenModifiers["volatile"] = "volatile";
6408 SemanticTokenModifiers["readonly"] = "readonly";
6409})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));
6410/**
6411 * @since 3.16.0 - Proposed state
6412 */
6413var SemanticTokens;
6414(function (SemanticTokens) {
6415 function is(value) {
6416 const candidate = value;
6417 return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&
6418 Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');
6419 }
6420 SemanticTokens.is = is;
6421})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));
6422/**
6423 * @since 3.16.0 - Proposed state
6424 */
6425var SemanticTokensRequest;
6426(function (SemanticTokensRequest) {
6427 SemanticTokensRequest.method = 'textDocument/semanticTokens';
6428 SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
6429})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));
6430/**
6431 * @since 3.16.0 - Proposed state
6432 */
6433var SemanticTokensEditsRequest;
6434(function (SemanticTokensEditsRequest) {
6435 SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';
6436 SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);
6437})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));
6438/**
6439 * @since 3.16.0 - Proposed state
6440 */
6441var SemanticTokensRangeRequest;
6442(function (SemanticTokensRangeRequest) {
6443 SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';
6444 SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
6445})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));
6446
6447
6448/***/ }),
6449/* 33 */
6450/***/ (function(module, exports, __webpack_require__) {
6451
6452"use strict";
6453/* --------------------------------------------------------------------------------------------
6454 * Copyright (c) Microsoft Corporation. All rights reserved.
6455 * Licensed under the MIT License. See License.txt in the project root for license information.
6456 * ------------------------------------------------------------------------------------------ */
6457
6458Object.defineProperty(exports, "__esModule", { value: true });
6459const vscode_languageserver_protocol_1 = __webpack_require__(3);
6460const Is = __webpack_require__(34);
6461exports.ConfigurationFeature = (Base) => {
6462 return class extends Base {
6463 getConfiguration(arg) {
6464 if (!arg) {
6465 return this._getConfiguration({});
6466 }
6467 else if (Is.string(arg)) {
6468 return this._getConfiguration({ section: arg });
6469 }
6470 else {
6471 return this._getConfiguration(arg);
6472 }
6473 }
6474 _getConfiguration(arg) {
6475 let params = {
6476 items: Array.isArray(arg) ? arg : [arg]
6477 };
6478 return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
6479 return Array.isArray(arg) ? result : result[0];
6480 });
6481 }
6482 };
6483};
6484//# sourceMappingURL=configuration.js.map
6485
6486/***/ }),
6487/* 34 */
6488/***/ (function(module, exports, __webpack_require__) {
6489
6490"use strict";
6491/* --------------------------------------------------------------------------------------------
6492 * Copyright (c) Microsoft Corporation. All rights reserved.
6493 * Licensed under the MIT License. See License.txt in the project root for license information.
6494 * ------------------------------------------------------------------------------------------ */
6495
6496Object.defineProperty(exports, "__esModule", { value: true });
6497function boolean(value) {
6498 return value === true || value === false;
6499}
6500exports.boolean = boolean;
6501function string(value) {
6502 return typeof value === 'string' || value instanceof String;
6503}
6504exports.string = string;
6505function number(value) {
6506 return typeof value === 'number' || value instanceof Number;
6507}
6508exports.number = number;
6509function error(value) {
6510 return value instanceof Error;
6511}
6512exports.error = error;
6513function func(value) {
6514 return typeof value === 'function';
6515}
6516exports.func = func;
6517function array(value) {
6518 return Array.isArray(value);
6519}
6520exports.array = array;
6521function stringArray(value) {
6522 return array(value) && value.every(elem => string(elem));
6523}
6524exports.stringArray = stringArray;
6525function typedArray(value, check) {
6526 return Array.isArray(value) && value.every(check);
6527}
6528exports.typedArray = typedArray;
6529function thenable(value) {
6530 return value && func(value.then);
6531}
6532exports.thenable = thenable;
6533//# sourceMappingURL=is.js.map
6534
6535/***/ }),
6536/* 35 */
6537/***/ (function(module, exports, __webpack_require__) {
6538
6539"use strict";
6540/* --------------------------------------------------------------------------------------------
6541 * Copyright (c) Microsoft Corporation. All rights reserved.
6542 * Licensed under the MIT License. See License.txt in the project root for license information.
6543 * ------------------------------------------------------------------------------------------ */
6544
6545Object.defineProperty(exports, "__esModule", { value: true });
6546const vscode_languageserver_protocol_1 = __webpack_require__(3);
6547exports.WorkspaceFoldersFeature = (Base) => {
6548 return class extends Base {
6549 initialize(capabilities) {
6550 let workspaceCapabilities = capabilities.workspace;
6551 if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
6552 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
6553 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
6554 this._onDidChangeWorkspaceFolders.fire(params.event);
6555 });
6556 }
6557 }
6558 getWorkspaceFolders() {
6559 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
6560 }
6561 get onDidChangeWorkspaceFolders() {
6562 if (!this._onDidChangeWorkspaceFolders) {
6563 throw new Error('Client doesn\'t support sending workspace folder change events.');
6564 }
6565 if (!this._unregistration) {
6566 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
6567 }
6568 return this._onDidChangeWorkspaceFolders.event;
6569 }
6570 };
6571};
6572//# sourceMappingURL=workspaceFolders.js.map
6573
6574/***/ }),
6575/* 36 */
6576/***/ (function(module, exports, __webpack_require__) {
6577
6578"use strict";
6579/* --------------------------------------------------------------------------------------------
6580 * Copyright (c) Microsoft Corporation. All rights reserved.
6581 * Licensed under the MIT License. See License.txt in the project root for license information.
6582 * ------------------------------------------------------------------------------------------ */
6583
6584Object.defineProperty(exports, "__esModule", { value: true });
6585const vscode_languageserver_protocol_1 = __webpack_require__(3);
6586const uuid_1 = __webpack_require__(37);
6587class WorkDoneProgressImpl {
6588 constructor(_connection, _token) {
6589 this._connection = _connection;
6590 this._token = _token;
6591 WorkDoneProgressImpl.Instances.set(this._token, this);
6592 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6593 }
6594 get token() {
6595 return this._source.token;
6596 }
6597 begin(title, percentage, message, cancellable) {
6598 let param = {
6599 kind: 'begin',
6600 title,
6601 percentage,
6602 message,
6603 cancellable
6604 };
6605 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6606 }
6607 report(arg0, arg1) {
6608 let param = {
6609 kind: 'report'
6610 };
6611 if (typeof arg0 === 'number') {
6612 param.percentage = arg0;
6613 if (arg1 !== undefined) {
6614 param.message = arg1;
6615 }
6616 }
6617 else {
6618 param.message = arg0;
6619 }
6620 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6621 }
6622 done() {
6623 WorkDoneProgressImpl.Instances.delete(this._token);
6624 this._source.dispose();
6625 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
6626 }
6627 cancel() {
6628 this._source.cancel();
6629 }
6630}
6631WorkDoneProgressImpl.Instances = new Map();
6632class NullProgress {
6633 constructor() {
6634 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6635 }
6636 get token() {
6637 return this._source.token;
6638 }
6639 begin() {
6640 }
6641 report() {
6642 }
6643 done() {
6644 }
6645}
6646function attachWorkDone(connection, params) {
6647 if (params === undefined || params.workDoneToken === undefined) {
6648 return new NullProgress();
6649 }
6650 const token = params.workDoneToken;
6651 delete params.workDoneToken;
6652 return new WorkDoneProgressImpl(connection, token);
6653}
6654exports.attachWorkDone = attachWorkDone;
6655exports.ProgressFeature = (Base) => {
6656 return class extends Base {
6657 initialize(capabilities) {
6658 var _a;
6659 if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
6660 this._progressSupported = true;
6661 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
6662 let progress = WorkDoneProgressImpl.Instances.get(params.token);
6663 if (progress !== undefined) {
6664 progress.cancel();
6665 }
6666 });
6667 }
6668 }
6669 attachWorkDoneProgress(token) {
6670 if (token === undefined) {
6671 return new NullProgress();
6672 }
6673 else {
6674 return new WorkDoneProgressImpl(this.connection, token);
6675 }
6676 }
6677 createWorkDoneProgress() {
6678 if (this._progressSupported) {
6679 const token = uuid_1.generateUuid();
6680 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
6681 const result = new WorkDoneProgressImpl(this.connection, token);
6682 return result;
6683 });
6684 }
6685 else {
6686 return Promise.resolve(new NullProgress());
6687 }
6688 }
6689 };
6690};
6691var ResultProgress;
6692(function (ResultProgress) {
6693 ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
6694})(ResultProgress || (ResultProgress = {}));
6695class ResultProgressImpl {
6696 constructor(_connection, _token) {
6697 this._connection = _connection;
6698 this._token = _token;
6699 }
6700 report(data) {
6701 this._connection.sendProgress(ResultProgress.type, this._token, data);
6702 }
6703}
6704function attachPartialResult(connection, params) {
6705 if (params === undefined || params.partialResultToken === undefined) {
6706 return undefined;
6707 }
6708 const token = params.partialResultToken;
6709 delete params.partialResultToken;
6710 return new ResultProgressImpl(connection, token);
6711}
6712exports.attachPartialResult = attachPartialResult;
6713//# sourceMappingURL=progress.js.map
6714
6715/***/ }),
6716/* 37 */
6717/***/ (function(module, exports, __webpack_require__) {
6718
6719"use strict";
6720/*---------------------------------------------------------------------------------------------
6721 * Copyright (c) Microsoft Corporation. All rights reserved.
6722 * Licensed under the MIT License. See License.txt in the project root for license information.
6723 *--------------------------------------------------------------------------------------------*/
6724
6725Object.defineProperty(exports, "__esModule", { value: true });
6726class ValueUUID {
6727 constructor(_value) {
6728 this._value = _value;
6729 // empty
6730 }
6731 asHex() {
6732 return this._value;
6733 }
6734 equals(other) {
6735 return this.asHex() === other.asHex();
6736 }
6737}
6738class V4UUID extends ValueUUID {
6739 constructor() {
6740 super([
6741 V4UUID._randomHex(),
6742 V4UUID._randomHex(),
6743 V4UUID._randomHex(),
6744 V4UUID._randomHex(),
6745 V4UUID._randomHex(),
6746 V4UUID._randomHex(),
6747 V4UUID._randomHex(),
6748 V4UUID._randomHex(),
6749 '-',
6750 V4UUID._randomHex(),
6751 V4UUID._randomHex(),
6752 V4UUID._randomHex(),
6753 V4UUID._randomHex(),
6754 '-',
6755 '4',
6756 V4UUID._randomHex(),
6757 V4UUID._randomHex(),
6758 V4UUID._randomHex(),
6759 '-',
6760 V4UUID._oneOf(V4UUID._timeHighBits),
6761 V4UUID._randomHex(),
6762 V4UUID._randomHex(),
6763 V4UUID._randomHex(),
6764 '-',
6765 V4UUID._randomHex(),
6766 V4UUID._randomHex(),
6767 V4UUID._randomHex(),
6768 V4UUID._randomHex(),
6769 V4UUID._randomHex(),
6770 V4UUID._randomHex(),
6771 V4UUID._randomHex(),
6772 V4UUID._randomHex(),
6773 V4UUID._randomHex(),
6774 V4UUID._randomHex(),
6775 V4UUID._randomHex(),
6776 V4UUID._randomHex(),
6777 ].join(''));
6778 }
6779 static _oneOf(array) {
6780 return array[Math.floor(array.length * Math.random())];
6781 }
6782 static _randomHex() {
6783 return V4UUID._oneOf(V4UUID._chars);
6784 }
6785}
6786V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
6787V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
6788/**
6789 * An empty UUID that contains only zeros.
6790 */
6791exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
6792function v4() {
6793 return new V4UUID();
6794}
6795exports.v4 = v4;
6796const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6797function isUUID(value) {
6798 return _UUIDPattern.test(value);
6799}
6800exports.isUUID = isUUID;
6801/**
6802 * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
6803 * @param value A uuid string.
6804 */
6805function parse(value) {
6806 if (!isUUID(value)) {
6807 throw new Error('invalid uuid');
6808 }
6809 return new ValueUUID(value);
6810}
6811exports.parse = parse;
6812function generateUuid() {
6813 return v4().asHex();
6814}
6815exports.generateUuid = generateUuid;
6816//# sourceMappingURL=uuid.js.map
6817
6818/***/ }),
6819/* 38 */
6820/***/ (function(module, exports, __webpack_require__) {
6821
6822"use strict";
6823/* --------------------------------------------------------------------------------------------
6824 * Copyright (c) Microsoft Corporation. All rights reserved.
6825 * Licensed under the MIT License. See License.txt in the project root for license information.
6826 * ------------------------------------------------------------------------------------------ */
6827
6828Object.defineProperty(exports, "__esModule", { value: true });
6829const url = __webpack_require__(39);
6830const path = __webpack_require__(13);
6831const fs = __webpack_require__(40);
6832const child_process_1 = __webpack_require__(41);
6833/**
6834 * @deprecated Use the `vscode-uri` npm module which provides a more
6835 * complete implementation of handling VS Code URIs.
6836 */
6837function uriToFilePath(uri) {
6838 let parsed = url.parse(uri);
6839 if (parsed.protocol !== 'file:' || !parsed.path) {
6840 return undefined;
6841 }
6842 let segments = parsed.path.split('/');
6843 for (var i = 0, len = segments.length; i < len; i++) {
6844 segments[i] = decodeURIComponent(segments[i]);
6845 }
6846 if (process.platform === 'win32' && segments.length > 1) {
6847 let first = segments[0];
6848 let second = segments[1];
6849 // Do we have a drive letter and we started with a / which is the
6850 // case if the first segement is empty (see split above)
6851 if (first.length === 0 && second.length > 1 && second[1] === ':') {
6852 // Remove first slash
6853 segments.shift();
6854 }
6855 }
6856 return path.normalize(segments.join('/'));
6857}
6858exports.uriToFilePath = uriToFilePath;
6859function isWindows() {
6860 return process.platform === 'win32';
6861}
6862function resolve(moduleName, nodePath, cwd, tracer) {
6863 const nodePathKey = 'NODE_PATH';
6864 const app = [
6865 'var p = process;',
6866 'p.on(\'message\',function(m){',
6867 'if(m.c===\'e\'){',
6868 'p.exit(0);',
6869 '}',
6870 'else if(m.c===\'rs\'){',
6871 'try{',
6872 'var r=require.resolve(m.a);',
6873 'p.send({c:\'r\',s:true,r:r});',
6874 '}',
6875 'catch(err){',
6876 'p.send({c:\'r\',s:false});',
6877 '}',
6878 '}',
6879 '});'
6880 ].join('');
6881 return new Promise((resolve, reject) => {
6882 let env = process.env;
6883 let newEnv = Object.create(null);
6884 Object.keys(env).forEach(key => newEnv[key] = env[key]);
6885 if (nodePath && fs.existsSync(nodePath) /* see issue 545 */) {
6886 if (newEnv[nodePathKey]) {
6887 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
6888 }
6889 else {
6890 newEnv[nodePathKey] = nodePath;
6891 }
6892 if (tracer) {
6893 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
6894 }
6895 }
6896 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
6897 try {
6898 let cp = child_process_1.fork('', [], {
6899 cwd: cwd,
6900 env: newEnv,
6901 execArgv: ['-e', app]
6902 });
6903 if (cp.pid === void 0) {
6904 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
6905 return;
6906 }
6907 cp.on('error', (error) => {
6908 reject(error);
6909 });
6910 cp.on('message', (message) => {
6911 if (message.c === 'r') {
6912 cp.send({ c: 'e' });
6913 if (message.s) {
6914 resolve(message.r);
6915 }
6916 else {
6917 reject(new Error(`Failed to resolve module: ${moduleName}`));
6918 }
6919 }
6920 });
6921 let message = {
6922 c: 'rs',
6923 a: moduleName
6924 };
6925 cp.send(message);
6926 }
6927 catch (error) {
6928 reject(error);
6929 }
6930 });
6931}
6932exports.resolve = resolve;
6933/**
6934 * Resolve the global npm package path.
6935 * @deprecated Since this depends on the used package manager and their version the best is that servers
6936 * implement this themselves since they know best what kind of package managers to support.
6937 * @param tracer the tracer to use
6938 */
6939function resolveGlobalNodePath(tracer) {
6940 let npmCommand = 'npm';
6941 const env = Object.create(null);
6942 Object.keys(process.env).forEach(key => env[key] = process.env[key]);
6943 env['NO_UPDATE_NOTIFIER'] = 'true';
6944 const options = {
6945 encoding: 'utf8',
6946 env
6947 };
6948 if (isWindows()) {
6949 npmCommand = 'npm.cmd';
6950 options.shell = true;
6951 }
6952 let handler = () => { };
6953 try {
6954 process.on('SIGPIPE', handler);
6955 let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
6956 if (!stdout) {
6957 if (tracer) {
6958 tracer(`'npm config get prefix' didn't return a value.`);
6959 }
6960 return undefined;
6961 }
6962 let prefix = stdout.trim();
6963 if (tracer) {
6964 tracer(`'npm config get prefix' value is: ${prefix}`);
6965 }
6966 if (prefix.length > 0) {
6967 if (isWindows()) {
6968 return path.join(prefix, 'node_modules');
6969 }
6970 else {
6971 return path.join(prefix, 'lib', 'node_modules');
6972 }
6973 }
6974 return undefined;
6975 }
6976 catch (err) {
6977 return undefined;
6978 }
6979 finally {
6980 process.removeListener('SIGPIPE', handler);
6981 }
6982}
6983exports.resolveGlobalNodePath = resolveGlobalNodePath;
6984/*
6985 * Resolve the global yarn pakage path.
6986 * @deprecated Since this depends on the used package manager and their version the best is that servers
6987 * implement this themselves since they know best what kind of package managers to support.
6988 * @param tracer the tracer to use
6989 */
6990function resolveGlobalYarnPath(tracer) {
6991 let yarnCommand = 'yarn';
6992 let options = {
6993 encoding: 'utf8'
6994 };
6995 if (isWindows()) {
6996 yarnCommand = 'yarn.cmd';
6997 options.shell = true;
6998 }
6999 let handler = () => { };
7000 try {
7001 process.on('SIGPIPE', handler);
7002 let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
7003 let stdout = results.stdout;
7004 if (!stdout) {
7005 if (tracer) {
7006 tracer(`'yarn global dir' didn't return a value.`);
7007 if (results.stderr) {
7008 tracer(results.stderr);
7009 }
7010 }
7011 return undefined;
7012 }
7013 let lines = stdout.trim().split(/\r?\n/);
7014 for (let line of lines) {
7015 try {
7016 let yarn = JSON.parse(line);
7017 if (yarn.type === 'log') {
7018 return path.join(yarn.data, 'node_modules');
7019 }
7020 }
7021 catch (e) {
7022 // Do nothing. Ignore the line
7023 }
7024 }
7025 return undefined;
7026 }
7027 catch (err) {
7028 return undefined;
7029 }
7030 finally {
7031 process.removeListener('SIGPIPE', handler);
7032 }
7033}
7034exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
7035var FileSystem;
7036(function (FileSystem) {
7037 let _isCaseSensitive = undefined;
7038 function isCaseSensitive() {
7039 if (_isCaseSensitive !== void 0) {
7040 return _isCaseSensitive;
7041 }
7042 if (process.platform === 'win32') {
7043 _isCaseSensitive = false;
7044 }
7045 else {
7046 // convert current file name to upper case / lower case and check if file exists
7047 // (guards against cases when name is already all uppercase or lowercase)
7048 _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
7049 }
7050 return _isCaseSensitive;
7051 }
7052 FileSystem.isCaseSensitive = isCaseSensitive;
7053 function isParent(parent, child) {
7054 if (isCaseSensitive()) {
7055 return path.normalize(child).indexOf(path.normalize(parent)) === 0;
7056 }
7057 else {
7058 return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) === 0;
7059 }
7060 }
7061 FileSystem.isParent = isParent;
7062})(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
7063function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
7064 if (nodePath) {
7065 if (!path.isAbsolute(nodePath)) {
7066 nodePath = path.join(workspaceRoot, nodePath);
7067 }
7068 return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
7069 if (FileSystem.isParent(nodePath, value)) {
7070 return value;
7071 }
7072 else {
7073 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
7074 }
7075 }).then(undefined, (_error) => {
7076 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7077 });
7078 }
7079 else {
7080 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7081 }
7082}
7083exports.resolveModulePath = resolveModulePath;
7084//# sourceMappingURL=files.js.map
7085
7086/***/ }),
7087/* 39 */
7088/***/ (function(module, exports) {
7089
7090module.exports = require("url");
7091
7092/***/ }),
7093/* 40 */
7094/***/ (function(module, exports) {
7095
7096module.exports = require("fs");
7097
7098/***/ }),
7099/* 41 */
7100/***/ (function(module, exports) {
7101
7102module.exports = require("child_process");
7103
7104/***/ }),
7105/* 42 */
7106/***/ (function(module, exports, __webpack_require__) {
7107
7108"use strict";
7109/* --------------------------------------------------------------------------------------------
7110 * Copyright (c) Microsoft Corporation. All rights reserved.
7111 * Licensed under the MIT License. See License.txt in the project root for license information.
7112 * ------------------------------------------------------------------------------------------ */
7113
7114Object.defineProperty(exports, "__esModule", { value: true });
7115const vscode_languageserver_protocol_1 = __webpack_require__(3);
7116exports.CallHierarchyFeature = (Base) => {
7117 return class extends Base {
7118 get callHierarchy() {
7119 return {
7120 onPrepare: (handler) => {
7121 this.connection.onRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, (params, cancel) => {
7122 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
7123 });
7124 },
7125 onIncomingCalls: (handler) => {
7126 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type;
7127 this.connection.onRequest(type, (params, cancel) => {
7128 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7129 });
7130 },
7131 onOutgoingCalls: (handler) => {
7132 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type;
7133 this.connection.onRequest(type, (params, cancel) => {
7134 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7135 });
7136 }
7137 };
7138 }
7139 };
7140};
7141//# sourceMappingURL=callHierarchy.proposed.js.map
7142
7143/***/ }),
7144/* 43 */
7145/***/ (function(module, exports, __webpack_require__) {
7146
7147"use strict";
7148/* --------------------------------------------------------------------------------------------
7149 * Copyright (c) Microsoft Corporation. All rights reserved.
7150 * Licensed under the MIT License. See License.txt in the project root for license information.
7151 * ------------------------------------------------------------------------------------------ */
7152
7153Object.defineProperty(exports, "__esModule", { value: true });
7154const vscode_languageserver_protocol_1 = __webpack_require__(3);
7155exports.SemanticTokensFeature = (Base) => {
7156 return class extends Base {
7157 get semanticTokens() {
7158 return {
7159 on: (handler) => {
7160 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type;
7161 this.connection.onRequest(type, (params, cancel) => {
7162 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7163 });
7164 },
7165 onEdits: (handler) => {
7166 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type;
7167 this.connection.onRequest(type, (params, cancel) => {
7168 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7169 });
7170 },
7171 onRange: (handler) => {
7172 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type;
7173 this.connection.onRequest(type, (params, cancel) => {
7174 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7175 });
7176 }
7177 };
7178 }
7179 };
7180};
7181class SemanticTokensBuilder {
7182 constructor() {
7183 this._prevData = undefined;
7184 this.initialize();
7185 }
7186 initialize() {
7187 this._id = Date.now();
7188 this._prevLine = 0;
7189 this._prevChar = 0;
7190 this._data = [];
7191 this._dataLen = 0;
7192 }
7193 push(line, char, length, tokenType, tokenModifiers) {
7194 let pushLine = line;
7195 let pushChar = char;
7196 if (this._dataLen > 0) {
7197 pushLine -= this._prevLine;
7198 if (pushLine === 0) {
7199 pushChar -= this._prevChar;
7200 }
7201 }
7202 this._data[this._dataLen++] = pushLine;
7203 this._data[this._dataLen++] = pushChar;
7204 this._data[this._dataLen++] = length;
7205 this._data[this._dataLen++] = tokenType;
7206 this._data[this._dataLen++] = tokenModifiers;
7207 this._prevLine = line;
7208 this._prevChar = char;
7209 }
7210 get id() {
7211 return this._id.toString();
7212 }
7213 previousResult(id) {
7214 if (this.id === id) {
7215 this._prevData = this._data;
7216 }
7217 this.initialize();
7218 }
7219 build() {
7220 this._prevData = undefined;
7221 return {
7222 resultId: this.id,
7223 data: this._data
7224 };
7225 }
7226 canBuildEdits() {
7227 return this._prevData !== undefined;
7228 }
7229 buildEdits() {
7230 if (this._prevData !== undefined) {
7231 const prevDataLength = this._prevData.length;
7232 const dataLength = this._data.length;
7233 let startIndex = 0;
7234 while (startIndex < dataLength && startIndex < prevDataLength && this._prevData[startIndex] === this._data[startIndex]) {
7235 startIndex++;
7236 }
7237 if (startIndex < dataLength && startIndex < prevDataLength) {
7238 // Find end index
7239 let endIndex = 0;
7240 while (endIndex < dataLength && endIndex < prevDataLength && this._prevData[prevDataLength - 1 - endIndex] === this._data[dataLength - 1 - endIndex]) {
7241 endIndex++;
7242 }
7243 const newData = this._data.slice(startIndex, dataLength - endIndex);
7244 const result = {
7245 resultId: this.id,
7246 edits: [
7247 { start: startIndex, deleteCount: prevDataLength - endIndex - startIndex, data: newData }
7248 ]
7249 };
7250 return result;
7251 }
7252 else if (startIndex < dataLength) {
7253 return { resultId: this.id, edits: [
7254 { start: startIndex, deleteCount: 0, data: this._data.slice(startIndex) }
7255 ] };
7256 }
7257 else if (startIndex < prevDataLength) {
7258 return { resultId: this.id, edits: [
7259 { start: startIndex, deleteCount: prevDataLength - startIndex }
7260 ] };
7261 }
7262 else {
7263 return { resultId: this.id, edits: [] };
7264 }
7265 }
7266 else {
7267 return this.build();
7268 }
7269 }
7270}
7271exports.SemanticTokensBuilder = SemanticTokensBuilder;
7272//# sourceMappingURL=sematicTokens.proposed.js.map
7273
7274/***/ }),
7275/* 44 */
7276/***/ (function(module, exports, __webpack_require__) {
7277
7278"use strict";
7279
7280Object.defineProperty(exports, "__esModule", { value: true });
7281exports.sortTexts = {
7282 one: "00001",
7283 two: "00002",
7284 three: "00003",
7285 four: "00004",
7286};
7287exports.projectRootPatterns = [".git", "autoload", "plugin"];
7288
7289
7290/***/ }),
7291/* 45 */
7292/***/ (function(module, exports, __webpack_require__) {
7293
7294"use strict";
7295
7296var __importDefault = (this && this.__importDefault) || function (mod) {
7297 return (mod && mod.__esModule) ? mod : { "default": mod };
7298};
7299Object.defineProperty(exports, "__esModule", { value: true });
7300var vscode_languageserver_1 = __webpack_require__(2);
7301var util_1 = __webpack_require__(46);
7302var config_1 = __importDefault(__webpack_require__(55));
7303var documents_1 = __webpack_require__(56);
7304__webpack_require__(58);
7305__webpack_require__(142);
7306__webpack_require__(143);
7307__webpack_require__(144);
7308__webpack_require__(146);
7309__webpack_require__(147);
7310__webpack_require__(151);
7311__webpack_require__(152);
7312__webpack_require__(153);
7313__webpack_require__(154);
7314__webpack_require__(155);
7315__webpack_require__(156);
7316var provider_1 = __webpack_require__(140);
7317var provider = provider_1.getProvider();
7318exports.completionProvider = function (params) {
7319 var textDocument = params.textDocument, position = params.position;
7320 var textDoc = documents_1.documents.get(textDocument.uri);
7321 if (textDoc) {
7322 var line = textDoc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), position));
7323 var words = util_1.getWordFromPosition(textDoc, { line: position.line, character: position.character - 1 });
7324 var word = words && words.word || "";
7325 if (word === "" && words && words.wordRight.trim() === ":") {
7326 word = ":";
7327 }
7328 // options items start with &
7329 var invalidLength = word.replace(/^&/, "").length;
7330 var completionItems = provider(line, textDoc.uri, position, word, invalidLength, []);
7331 if (!config_1.default.snippetSupport) {
7332 return {
7333 isIncomplete: true,
7334 items: util_1.removeSnippets(completionItems)
7335 };
7336 }
7337 return {
7338 isIncomplete: true,
7339 items: completionItems
7340 };
7341 }
7342 return [];
7343};
7344
7345
7346/***/ }),
7347/* 46 */
7348/***/ (function(module, exports, __webpack_require__) {
7349
7350"use strict";
7351
7352var __assign = (this && this.__assign) || function () {
7353 __assign = Object.assign || function(t) {
7354 for (var s, i = 1, n = arguments.length; i < n; i++) {
7355 s = arguments[i];
7356 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7357 t[p] = s[p];
7358 }
7359 return t;
7360 };
7361 return __assign.apply(this, arguments);
7362};
7363var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7364 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7365 return new (P || (P = Promise))(function (resolve, reject) {
7366 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7367 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7368 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7369 step((generator = generator.apply(thisArg, _arguments || [])).next());
7370 });
7371};
7372var __generator = (this && this.__generator) || function (thisArg, body) {
7373 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
7374 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
7375 function verb(n) { return function (v) { return step([n, v]); }; }
7376 function step(op) {
7377 if (f) throw new TypeError("Generator is already executing.");
7378 while (_) try {
7379 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;
7380 if (y = 0, t) op = [op[0] & 2, t.value];
7381 switch (op[0]) {
7382 case 0: case 1: t = op; break;
7383 case 4: _.label++; return { value: op[1], done: false };
7384 case 5: _.label++; y = op[1]; op = [0]; continue;
7385 case 7: op = _.ops.pop(); _.trys.pop(); continue;
7386 default:
7387 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
7388 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
7389 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
7390 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
7391 if (t[2]) _.ops.pop();
7392 _.trys.pop(); continue;
7393 }
7394 op = body.call(thisArg, _);
7395 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
7396 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
7397 }
7398};
7399var __spreadArrays = (this && this.__spreadArrays) || function () {
7400 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
7401 for (var r = Array(s), k = 0, i = 0; i < il; i++)
7402 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
7403 r[k] = a[j];
7404 return r;
7405};
7406var __importDefault = (this && this.__importDefault) || function (mod) {
7407 return (mod && mod.__esModule) ? mod : { "default": mod };
7408};
7409Object.defineProperty(exports, "__esModule", { value: true });
7410var child_process_1 = __webpack_require__(41);
7411var findup_1 = __importDefault(__webpack_require__(47));
7412var fs_1 = __importDefault(__webpack_require__(40));
7413var path_1 = __importDefault(__webpack_require__(13));
7414var vscode_languageserver_1 = __webpack_require__(2);
7415var vimparser_1 = __webpack_require__(52);
7416var patterns_1 = __webpack_require__(54);
7417function isSomeMatchPattern(patterns, line) {
7418 return patterns.some(function (p) { return p.test(line); });
7419}
7420exports.isSomeMatchPattern = isSomeMatchPattern;
7421function executeFile(input, command, args, option) {
7422 return new Promise(function (resolve, reject) {
7423 var stdout = "";
7424 var stderr = "";
7425 var error;
7426 var isPassAsText = false;
7427 args = (args || []).map(function (arg) {
7428 if (/%text/.test(arg)) {
7429 isPassAsText = true;
7430 return arg.replace(/%text/g, input.toString());
7431 }
7432 return arg;
7433 });
7434 var cp = child_process_1.spawn(command, args, option);
7435 cp.stdout.on("data", function (data) {
7436 stdout += data;
7437 });
7438 cp.stderr.on("data", function (data) {
7439 stderr += data;
7440 });
7441 cp.on("error", function (err) {
7442 error = err;
7443 reject(error);
7444 });
7445 cp.on("close", function (code) {
7446 if (!error) {
7447 resolve({ code: code, stdout: stdout, stderr: stderr });
7448 }
7449 });
7450 // error will occur when cp get error
7451 if (!isPassAsText) {
7452 input.pipe(cp.stdin).on("error", function () { return; });
7453 }
7454 });
7455}
7456exports.executeFile = executeFile;
7457// cover cb type async function to promise
7458function pcb(cb) {
7459 return function () {
7460 var args = [];
7461 for (var _i = 0; _i < arguments.length; _i++) {
7462 args[_i] = arguments[_i];
7463 }
7464 return new Promise(function (resolve) {
7465 cb.apply(void 0, __spreadArrays(args, [function () {
7466 var params = [];
7467 for (var _i = 0; _i < arguments.length; _i++) {
7468 params[_i] = arguments[_i];
7469 }
7470 resolve(params);
7471 }]));
7472 });
7473 };
7474}
7475exports.pcb = pcb;
7476// find work dirname by root patterns
7477function findProjectRoot(filePath, rootPatterns) {
7478 return __awaiter(this, void 0, void 0, function () {
7479 var dirname, patterns, dirCandidate, _i, patterns_2, pattern, _a, err, dir;
7480 return __generator(this, function (_b) {
7481 switch (_b.label) {
7482 case 0:
7483 dirname = path_1.default.dirname(filePath);
7484 patterns = [].concat(rootPatterns);
7485 dirCandidate = "";
7486 _i = 0, patterns_2 = patterns;
7487 _b.label = 1;
7488 case 1:
7489 if (!(_i < patterns_2.length)) return [3 /*break*/, 4];
7490 pattern = patterns_2[_i];
7491 return [4 /*yield*/, pcb(findup_1.default)(dirname, pattern)];
7492 case 2:
7493 _a = _b.sent(), err = _a[0], dir = _a[1];
7494 if (!err && dir && dir !== "/" && dir.length > dirCandidate.length) {
7495 dirCandidate = dir;
7496 }
7497 _b.label = 3;
7498 case 3:
7499 _i++;
7500 return [3 /*break*/, 1];
7501 case 4:
7502 if (dirCandidate.length) {
7503 return [2 /*return*/, dirCandidate];
7504 }
7505 return [2 /*return*/, dirname];
7506 }
7507 });
7508 });
7509}
7510exports.findProjectRoot = findProjectRoot;
7511function markupSnippets(snippets) {
7512 return [
7513 "```vim",
7514 snippets.replace(/\$\{[0-9]+(:([^}]+))?\}/g, "$2"),
7515 "```",
7516 ].join("\n");
7517}
7518exports.markupSnippets = markupSnippets;
7519function getWordFromPosition(doc, position) {
7520 if (!doc) {
7521 return;
7522 }
7523 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)));
7524 // not keyword position
7525 if (!character || !patterns_1.keywordPattern.test(character)) {
7526 return;
7527 }
7528 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)));
7529 // comment line
7530 if (patterns_1.commentPattern.test(currentLine)) {
7531 return;
7532 }
7533 var preSegment = currentLine.slice(0, position.character);
7534 var nextSegment = currentLine.slice(position.character);
7535 var wordLeft = preSegment.match(patterns_1.wordPrePattern);
7536 var wordRight = nextSegment.match(patterns_1.wordNextPattern);
7537 var word = "" + (wordLeft && wordLeft[1] || "") + (wordRight && wordRight[1] || "");
7538 return {
7539 word: word,
7540 left: wordLeft && wordLeft[1] || "",
7541 right: wordRight && wordRight[1] || "",
7542 wordLeft: wordLeft && wordLeft[1]
7543 ? preSegment.replace(new RegExp(wordLeft[1] + "$"), word)
7544 : "" + preSegment + word,
7545 wordRight: wordRight && wordRight[1]
7546 ? nextSegment.replace(new RegExp("^" + wordRight[1]), word)
7547 : "" + word + nextSegment,
7548 };
7549}
7550exports.getWordFromPosition = getWordFromPosition;
7551// parse vim buffer
7552function handleParse(textDoc) {
7553 return __awaiter(this, void 0, void 0, function () {
7554 var text, tokens, node;
7555 return __generator(this, function (_a) {
7556 text = textDoc instanceof Object ? textDoc.getText() : textDoc;
7557 tokens = new vimparser_1.StringReader(text.split(/\r\n|\r|\n/));
7558 try {
7559 node = new vimparser_1.VimLParser(true).parse(tokens);
7560 return [2 /*return*/, [node, ""]];
7561 }
7562 catch (error) {
7563 return [2 /*return*/, [null, error]];
7564 }
7565 return [2 /*return*/];
7566 });
7567 });
7568}
7569exports.handleParse = handleParse;
7570// remove snippets of completionItem
7571function removeSnippets(completionItems) {
7572 if (completionItems === void 0) { completionItems = []; }
7573 return completionItems.map(function (item) {
7574 if (item.insertTextFormat === vscode_languageserver_1.InsertTextFormat.Snippet) {
7575 return __assign(__assign({}, item), { insertText: item.label, insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText });
7576 }
7577 return item;
7578 });
7579}
7580exports.removeSnippets = removeSnippets;
7581exports.isSymbolLink = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7582 return __generator(this, function (_a) {
7583 return [2 /*return*/, new Promise(function (resolve) {
7584 fs_1.default.lstat(filePath, function (err, stats) {
7585 resolve({
7586 err: err,
7587 stats: stats && stats.isSymbolicLink(),
7588 });
7589 });
7590 })];
7591 });
7592}); };
7593exports.getRealPath = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7594 var _a, err, stats;
7595 return __generator(this, function (_b) {
7596 switch (_b.label) {
7597 case 0: return [4 /*yield*/, exports.isSymbolLink(filePath)];
7598 case 1:
7599 _a = _b.sent(), err = _a.err, stats = _a.stats;
7600 if (!err && stats) {
7601 return [2 /*return*/, new Promise(function (resolve) {
7602 fs_1.default.realpath(filePath, function (error, realPath) {
7603 if (error) {
7604 return resolve(filePath);
7605 }
7606 resolve(realPath);
7607 });
7608 })];
7609 }
7610 return [2 /*return*/, filePath];
7611 }
7612 });
7613}); };
7614
7615
7616/***/ }),
7617/* 47 */
7618/***/ (function(module, exports, __webpack_require__) {
7619
7620var fs = __webpack_require__(40),
7621 Path = __webpack_require__(13),
7622 util = __webpack_require__(48),
7623 colors = __webpack_require__(49),
7624 EE = __webpack_require__(51).EventEmitter,
7625 fsExists = fs.exists ? fs.exists : Path.exists,
7626 fsExistsSync = fs.existsSync ? fs.existsSync : Path.existsSync;
7627
7628module.exports = function(dir, iterator, options, callback){
7629 return FindUp(dir, iterator, options, callback);
7630};
7631
7632function FindUp(dir, iterator, options, callback){
7633 if (!(this instanceof FindUp)) {
7634 return new FindUp(dir, iterator, options, callback);
7635 }
7636 if(typeof options === 'function'){
7637 callback = options;
7638 options = {};
7639 }
7640 options = options || {};
7641
7642 EE.call(this);
7643 this.found = false;
7644 this.stopPlease = false;
7645 var self = this;
7646
7647 if(typeof iterator === 'string'){
7648 var file = iterator;
7649 iterator = function(dir, cb){
7650 return fsExists(Path.join(dir, file), cb);
7651 };
7652 }
7653
7654 if(callback) {
7655 this.on('found', function(dir){
7656 if(options.verbose) console.log(('found '+ dir ).green);
7657 callback(null, dir);
7658 self.stop();
7659 });
7660
7661 this.on('end', function(){
7662 if(options.verbose) console.log('end'.grey);
7663 if(!self.found) callback(new Error('not found'));
7664 });
7665
7666 this.on('error', function(err){
7667 if(options.verbose) console.log('error'.red, err);
7668 callback(err);
7669 });
7670 }
7671
7672 this._find(dir, iterator, options, callback);
7673}
7674util.inherits(FindUp, EE);
7675
7676FindUp.prototype._find = function(dir, iterator, options, callback){
7677 var self = this;
7678
7679 iterator(dir, function(exists){
7680 if(options.verbose) console.log(('traverse '+ dir).grey);
7681 if(exists) {
7682 self.found = true;
7683 self.emit('found', dir);
7684 }
7685
7686 var parentDir = Path.join(dir, '..');
7687 if (self.stopPlease) return self.emit('end');
7688 if (dir === parentDir) return self.emit('end');
7689 if(dir.indexOf('../../') !== -1 ) return self.emit('error', new Error(dir + ' is not correct.'));
7690 self._find(parentDir, iterator, options, callback);
7691 });
7692};
7693
7694FindUp.prototype.stop = function(){
7695 this.stopPlease = true;
7696};
7697
7698module.exports.FindUp = FindUp;
7699
7700module.exports.sync = function(dir, iteratorSync){
7701 if(typeof iteratorSync === 'string'){
7702 var file = iteratorSync;
7703 iteratorSync = function(dir){
7704 return fsExistsSync(Path.join(dir, file));
7705 };
7706 }
7707 var initialDir = dir;
7708 while(dir !== Path.join(dir, '..')){
7709 if(dir.indexOf('../../') !== -1 ) throw new Error(initialDir + ' is not correct.');
7710 if(iteratorSync(dir)) return dir;
7711 dir = Path.join(dir, '..');
7712 }
7713 throw new Error('not found');
7714};
7715
7716
7717/***/ }),
7718/* 48 */
7719/***/ (function(module, exports) {
7720
7721module.exports = require("util");
7722
7723/***/ }),
7724/* 49 */
7725/***/ (function(module, exports, __webpack_require__) {
7726
7727/*
7728colors.js
7729
7730Copyright (c) 2010
7731
7732Marak Squires
7733Alexis Sellier (cloudhead)
7734
7735Permission is hereby granted, free of charge, to any person obtaining a copy
7736of this software and associated documentation files (the "Software"), to deal
7737in the Software without restriction, including without limitation the rights
7738to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7739copies of the Software, and to permit persons to whom the Software is
7740furnished to do so, subject to the following conditions:
7741
7742The above copyright notice and this permission notice shall be included in
7743all copies or substantial portions of the Software.
7744
7745THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7746IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7747FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7748AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
7749LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
7750OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
7751THE SOFTWARE.
7752
7753*/
7754
7755var isHeadless = false;
7756
7757if (typeof module !== 'undefined') {
7758 isHeadless = true;
7759}
7760
7761if (!isHeadless) {
7762 var exports = {};
7763 var module = {};
7764 var colors = exports;
7765 exports.mode = "browser";
7766} else {
7767 exports.mode = "console";
7768}
7769
7770//
7771// Prototypes the string object to have additional method calls that add terminal colors
7772//
7773var addProperty = function (color, func) {
7774 exports[color] = function (str) {
7775 return func.apply(str);
7776 };
7777 String.prototype.__defineGetter__(color, func);
7778};
7779
7780function stylize(str, style) {
7781
7782 var styles;
7783
7784 if (exports.mode === 'console') {
7785 styles = {
7786 //styles
7787 'bold' : ['\x1B[1m', '\x1B[22m'],
7788 'italic' : ['\x1B[3m', '\x1B[23m'],
7789 'underline' : ['\x1B[4m', '\x1B[24m'],
7790 'inverse' : ['\x1B[7m', '\x1B[27m'],
7791 'strikethrough' : ['\x1B[9m', '\x1B[29m'],
7792 //text colors
7793 //grayscale
7794 'white' : ['\x1B[37m', '\x1B[39m'],
7795 'grey' : ['\x1B[90m', '\x1B[39m'],
7796 'black' : ['\x1B[30m', '\x1B[39m'],
7797 //colors
7798 'blue' : ['\x1B[34m', '\x1B[39m'],
7799 'cyan' : ['\x1B[36m', '\x1B[39m'],
7800 'green' : ['\x1B[32m', '\x1B[39m'],
7801 'magenta' : ['\x1B[35m', '\x1B[39m'],
7802 'red' : ['\x1B[31m', '\x1B[39m'],
7803 'yellow' : ['\x1B[33m', '\x1B[39m'],
7804 //background colors
7805 //grayscale
7806 'whiteBG' : ['\x1B[47m', '\x1B[49m'],
7807 'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
7808 'blackBG' : ['\x1B[40m', '\x1B[49m'],
7809 //colors
7810 'blueBG' : ['\x1B[44m', '\x1B[49m'],
7811 'cyanBG' : ['\x1B[46m', '\x1B[49m'],
7812 'greenBG' : ['\x1B[42m', '\x1B[49m'],
7813 'magentaBG' : ['\x1B[45m', '\x1B[49m'],
7814 'redBG' : ['\x1B[41m', '\x1B[49m'],
7815 'yellowBG' : ['\x1B[43m', '\x1B[49m']
7816 };
7817 } else if (exports.mode === 'browser') {
7818 styles = {
7819 //styles
7820 'bold' : ['<b>', '</b>'],
7821 'italic' : ['<i>', '</i>'],
7822 'underline' : ['<u>', '</u>'],
7823 'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
7824 'strikethrough' : ['<del>', '</del>'],
7825 //text colors
7826 //grayscale
7827 'white' : ['<span style="color:white;">', '</span>'],
7828 'grey' : ['<span style="color:gray;">', '</span>'],
7829 'black' : ['<span style="color:black;">', '</span>'],
7830 //colors
7831 'blue' : ['<span style="color:blue;">', '</span>'],
7832 'cyan' : ['<span style="color:cyan;">', '</span>'],
7833 'green' : ['<span style="color:green;">', '</span>'],
7834 'magenta' : ['<span style="color:magenta;">', '</span>'],
7835 'red' : ['<span style="color:red;">', '</span>'],
7836 'yellow' : ['<span style="color:yellow;">', '</span>'],
7837 //background colors
7838 //grayscale
7839 'whiteBG' : ['<span style="background-color:white;">', '</span>'],
7840 'greyBG' : ['<span style="background-color:gray;">', '</span>'],
7841 'blackBG' : ['<span style="background-color:black;">', '</span>'],
7842 //colors
7843 'blueBG' : ['<span style="background-color:blue;">', '</span>'],
7844 'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
7845 'greenBG' : ['<span style="background-color:green;">', '</span>'],
7846 'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
7847 'redBG' : ['<span style="background-color:red;">', '</span>'],
7848 'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
7849 };
7850 } else if (exports.mode === 'none') {
7851 return str + '';
7852 } else {
7853 console.log('unsupported mode, try "browser", "console" or "none"');
7854 }
7855 return styles[style][0] + str + styles[style][1];
7856}
7857
7858function applyTheme(theme) {
7859
7860 //
7861 // Remark: This is a list of methods that exist
7862 // on String that you should not overwrite.
7863 //
7864 var stringPrototypeBlacklist = [
7865 '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
7866 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
7867 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
7868 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
7869 ];
7870
7871 Object.keys(theme).forEach(function (prop) {
7872 if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
7873 console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
7874 }
7875 else {
7876 if (typeof(theme[prop]) === 'string') {
7877 addProperty(prop, function () {
7878 return exports[theme[prop]](this);
7879 });
7880 }
7881 else {
7882 addProperty(prop, function () {
7883 var ret = this;
7884 for (var t = 0; t < theme[prop].length; t++) {
7885 ret = exports[theme[prop][t]](ret);
7886 }
7887 return ret;
7888 });
7889 }
7890 }
7891 });
7892}
7893
7894
7895//
7896// Iterate through all default styles and colors
7897//
7898var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
7899x.forEach(function (style) {
7900
7901 // __defineGetter__ at the least works in more browsers
7902 // http://robertnyman.com/javascript/javascript-getters-setters.html
7903 // Object.defineProperty only works in Chrome
7904 addProperty(style, function () {
7905 return stylize(this, style);
7906 });
7907});
7908
7909function sequencer(map) {
7910 return function () {
7911 if (!isHeadless) {
7912 return this.replace(/( )/, '$1');
7913 }
7914 var exploded = this.split(""), i = 0;
7915 exploded = exploded.map(map);
7916 return exploded.join("");
7917 };
7918}
7919
7920var rainbowMap = (function () {
7921 var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
7922 return function (letter, i, exploded) {
7923 if (letter === " ") {
7924 return letter;
7925 } else {
7926 return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
7927 }
7928 };
7929})();
7930
7931exports.themes = {};
7932
7933exports.addSequencer = function (name, map) {
7934 addProperty(name, sequencer(map));
7935};
7936
7937exports.addSequencer('rainbow', rainbowMap);
7938exports.addSequencer('zebra', function (letter, i, exploded) {
7939 return i % 2 === 0 ? letter : letter.inverse;
7940});
7941
7942exports.setTheme = function (theme) {
7943 if (typeof theme === 'string') {
7944 try {
7945 exports.themes[theme] = __webpack_require__(50)(theme);
7946 applyTheme(exports.themes[theme]);
7947 return exports.themes[theme];
7948 } catch (err) {
7949 console.log(err);
7950 return err;
7951 }
7952 } else {
7953 applyTheme(theme);
7954 }
7955};
7956
7957
7958addProperty('stripColors', function () {
7959 return ("" + this).replace(/\x1B\[\d+m/g, '');
7960});
7961
7962// please no
7963function zalgo(text, options) {
7964 var soul = {
7965 "up" : [
7966 '̍', '̎', '̄', '̅',
7967 '̿', '̑', '̆', '̐',
7968 '͒', '͗', '͑', '̇',
7969 '̈', '̊', '͂', '̓',
7970 '̈', '͊', '͋', '͌',
7971 '̃', '̂', '̌', '͐',
7972 '̀', '́', '̋', '̏',
7973 '̒', '̓', '̔', '̽',
7974 '̉', 'ͣ', 'ͤ', 'ͥ',
7975 'ͦ', 'ͧ', 'ͨ', 'ͩ',
7976 'ͪ', 'ͫ', 'ͬ', 'ͭ',
7977 'ͮ', 'ͯ', '̾', '͛',
7978 '͆', '̚'
7979 ],
7980 "down" : [
7981 '̖', '̗', '̘', '̙',
7982 '̜', '̝', '̞', '̟',
7983 '̠', '̤', '̥', '̦',
7984 '̩', '̪', '̫', '̬',
7985 '̭', '̮', '̯', '̰',
7986 '̱', '̲', '̳', '̹',
7987 '̺', '̻', '̼', 'ͅ',
7988 '͇', '͈', '͉', '͍',
7989 '͎', '͓', '͔', '͕',
7990 '͖', '͙', '͚', '̣'
7991 ],
7992 "mid" : [
7993 '̕', '̛', '̀', '́',
7994 '͘', '̡', '̢', '̧',
7995 '̨', '̴', '̵', '̶',
7996 '͜', '͝', '͞',
7997 '͟', '͠', '͢', '̸',
7998 '̷', '͡', ' ҉'
7999 ]
8000 },
8001 all = [].concat(soul.up, soul.down, soul.mid),
8002 zalgo = {};
8003
8004 function randomNumber(range) {
8005 var r = Math.floor(Math.random() * range);
8006 return r;
8007 }
8008
8009 function is_char(character) {
8010 var bool = false;
8011 all.filter(function (i) {
8012 bool = (i === character);
8013 });
8014 return bool;
8015 }
8016
8017 function heComes(text, options) {
8018 var result = '', counts, l;
8019 options = options || {};
8020 options["up"] = options["up"] || true;
8021 options["mid"] = options["mid"] || true;
8022 options["down"] = options["down"] || true;
8023 options["size"] = options["size"] || "maxi";
8024 text = text.split('');
8025 for (l in text) {
8026 if (is_char(l)) {
8027 continue;
8028 }
8029 result = result + text[l];
8030 counts = {"up" : 0, "down" : 0, "mid" : 0};
8031 switch (options.size) {
8032 case 'mini':
8033 counts.up = randomNumber(8);
8034 counts.min = randomNumber(2);
8035 counts.down = randomNumber(8);
8036 break;
8037 case 'maxi':
8038 counts.up = randomNumber(16) + 3;
8039 counts.min = randomNumber(4) + 1;
8040 counts.down = randomNumber(64) + 3;
8041 break;
8042 default:
8043 counts.up = randomNumber(8) + 1;
8044 counts.mid = randomNumber(6) / 2;
8045 counts.down = randomNumber(8) + 1;
8046 break;
8047 }
8048
8049 var arr = ["up", "mid", "down"];
8050 for (var d in arr) {
8051 var index = arr[d];
8052 for (var i = 0 ; i <= counts[index]; i++) {
8053 if (options[index]) {
8054 result = result + soul[index][randomNumber(soul[index].length)];
8055 }
8056 }
8057 }
8058 }
8059 return result;
8060 }
8061 return heComes(text);
8062}
8063
8064
8065// don't summon zalgo
8066addProperty('zalgo', function () {
8067 return zalgo(this);
8068});
8069
8070
8071/***/ }),
8072/* 50 */
8073/***/ (function(module, exports) {
8074
8075function webpackEmptyContext(req) {
8076 var e = new Error("Cannot find module '" + req + "'");
8077 e.code = 'MODULE_NOT_FOUND';
8078 throw e;
8079}
8080webpackEmptyContext.keys = function() { return []; };
8081webpackEmptyContext.resolve = webpackEmptyContext;
8082module.exports = webpackEmptyContext;
8083webpackEmptyContext.id = 50;
8084
8085/***/ }),
8086/* 51 */
8087/***/ (function(module, exports) {
8088
8089module.exports = require("events");
8090
8091/***/ }),
8092/* 52 */
8093/***/ (function(module, exports, __webpack_require__) {
8094
8095/* WEBPACK VAR INJECTION */(function(module) {//!/usr/bin/env nodejs
8096// usage: nodejs vimlparser.js [--neovim] foo.vim
8097
8098var fs = __webpack_require__(40);
8099var util = __webpack_require__(48);
8100
8101function main() {
8102 var neovim = false;
8103 var fpath = ''
8104 var args = process.argv;
8105 if (args.length == 4) {
8106 if (args[2] == '--neovim') {
8107 neovim = true;
8108 }
8109 fpath = args[3];
8110 } else if (args.length == 3) {
8111 neovim = false;
8112 fpath = args[2]
8113 }
8114 var r = new StringReader(viml_readfile(fpath));
8115 var p = new VimLParser(neovim);
8116 var c = new Compiler();
8117 try {
8118 var lines = c.compile(p.parse(r));
8119 for (var i in lines) {
8120 process.stdout.write(lines[i] + "\n");
8121 }
8122 } catch (e) {
8123 process.stdout.write(e + '\n');
8124 }
8125}
8126
8127var pat_vim2js = {
8128 "[0-9a-zA-Z]" : "[0-9a-zA-Z]",
8129 "[@*!=><&~#]" : "[@*!=><&~#]",
8130 "\\<ARGOPT\\>" : "\\bARGOPT\\b",
8131 "\\<BANG\\>" : "\\bBANG\\b",
8132 "\\<EDITCMD\\>" : "\\bEDITCMD\\b",
8133 "\\<NOTRLCOM\\>" : "\\bNOTRLCOM\\b",
8134 "\\<TRLBAR\\>" : "\\bTRLBAR\\b",
8135 "\\<USECTRLV\\>" : "\\bUSECTRLV\\b",
8136 "\\<USERCMD\\>" : "\\bUSERCMD\\b",
8137 "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>" : "\\b(XFILE|FILES|FILE1)\\b",
8138 "\\S" : "\\S",
8139 "\\a" : "[A-Za-z]",
8140 "\\d" : "\\d",
8141 "\\h" : "[A-Za-z_]",
8142 "\\s" : "\\s",
8143 "\\v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$",
8144 "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
8145 "\\w" : "[0-9A-Za-z_]",
8146 "\\w\\|[:#]" : "[0-9A-Za-z_]|[:#]",
8147 "\\x" : "[0-9A-Fa-f]",
8148 "^++" : "^\+\+",
8149 "^++bad=\\(keep\\|drop\\|.\\)\\>" : "^\\+\\+bad=(keep|drop|.)\\b",
8150 "^++bad=drop" : "^\\+\\+bad=drop",
8151 "^++bad=keep" : "^\\+\\+bad=keep",
8152 "^++bin\\>" : "^\\+\\+bin\\b",
8153 "^++edit\\>" : "^\\+\\+edit\\b",
8154 "^++enc=\\S" : "^\\+\\+enc=\\S",
8155 "^++encoding=\\S" : "^\\+\\+encoding=\\S",
8156 "^++ff=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+ff=(dos|unix|mac)\\b",
8157 "^++fileformat=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+fileformat=(dos|unix|mac)\\b",
8158 "^++nobin\\>" : "^\\+\\+nobin\\b",
8159 "^[A-Z]" : "^[A-Z]",
8160 "^\\$\\w\\+" : "^\\$[0-9A-Za-z_]+",
8161 "^\\(!\\|global\\|vglobal\\)$" : "^(!|global|vglobal)$",
8162 "^\\(WHILE\\|FOR\\)$" : "^(WHILE|FOR)$",
8163 "^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
8164 "^\\d" : "^\\d",
8165 "^\\h" : "^[A-Za-z_]",
8166 "^\\s" : "^\\s",
8167 "^\\s*\\\\" : "^\\s*\\\\",
8168 "^[ \\t]$" : "^[ \\t]$",
8169 "^[A-Za-z]$" : "^[A-Za-z]$",
8170 "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$",
8171 "^[0-9]$" : "^[0-9]$",
8172 "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$",
8173 "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$",
8174 "^[A-Za-z_]$" : "^[A-Za-z_]$",
8175 "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$",
8176 "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$",
8177 "^[A-Z]$" : "^[A-Z]$",
8178 "^[a-z]$" : "^[a-z]$",
8179 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
8180 "^[0-7]$" : "^[0-7]$",
8181 "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$",
8182 "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$",
8183 "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
8184}
8185
8186function viml_add(lst, item) {
8187 lst.push(item);
8188}
8189
8190function viml_call(func, args) {
8191 return func.apply(null, args);
8192}
8193
8194function viml_char2nr(c) {
8195 return c.charCodeAt(0);
8196}
8197
8198function viml_empty(obj) {
8199 return obj.length == 0;
8200}
8201
8202function viml_equalci(a, b) {
8203 return a.toLowerCase() == b.toLowerCase();
8204}
8205
8206function viml_eqreg(s, reg) {
8207 var mx = new RegExp(pat_vim2js[reg]);
8208 return mx.exec(s) != null;
8209}
8210
8211function viml_eqregh(s, reg) {
8212 var mx = new RegExp(pat_vim2js[reg]);
8213 return mx.exec(s) != null;
8214}
8215
8216function viml_eqregq(s, reg) {
8217 var mx = new RegExp(pat_vim2js[reg], "i");
8218 return mx.exec(s) != null;
8219}
8220
8221function viml_escape(s, chars) {
8222 var r = '';
8223 for (var i = 0; i < s.length; ++i) {
8224 if (chars.indexOf(s.charAt(i)) != -1) {
8225 r = r + "\\" + s.charAt(i);
8226 } else {
8227 r = r + s.charAt(i);
8228 }
8229 }
8230 return r;
8231}
8232
8233function viml_extend(obj, item) {
8234 obj.push.apply(obj, item);
8235}
8236
8237function viml_insert(lst, item) {
8238 var idx = arguments.length >= 3 ? arguments[2] : 0;
8239 lst.splice(0, 0, item);
8240}
8241
8242function viml_join(lst, sep) {
8243 return lst.join(sep);
8244}
8245
8246function viml_keys(obj) {
8247 return Object.keys(obj);
8248}
8249
8250function viml_len(obj) {
8251 if (typeof obj === 'string') {
8252 var len = 0;
8253 for (var i = 0; i < obj.length; i++) {
8254 var c = obj.charCodeAt(i);
8255 len += c < 128 ? 1 : ((c > 127) && (c < 2048)) ? 2 : 3;
8256 }
8257 return len;
8258 }
8259 return obj.length;
8260}
8261
8262function viml_printf() {
8263 var a000 = Array.prototype.slice.call(arguments, 0);
8264 if (a000.length == 1) {
8265 return a000[0];
8266 } else {
8267 return util.format.apply(null, a000);
8268 }
8269}
8270
8271function viml_range(start) {
8272 var end = arguments.length >= 2 ? arguments[1] : null;
8273 if (end == null) {
8274 var x = [];
8275 for (var i = 0; i < start; ++i) {
8276 x.push(i);
8277 }
8278 return x;
8279 } else {
8280 var x = []
8281 for (var i = start; i <= end; ++i) {
8282 x.push(i);
8283 }
8284 return x;
8285 }
8286}
8287
8288function viml_readfile(path) {
8289 // FIXME: newline?
8290 return fs.readFileSync(path, 'utf-8').split(/\r\n|\r|\n/);
8291}
8292
8293function viml_remove(lst, idx) {
8294 lst.splice(idx, 1);
8295}
8296
8297function viml_split(s, sep) {
8298 if (sep == "\\zs") {
8299 return s.split("");
8300 }
8301 throw "NotImplemented";
8302}
8303
8304function viml_str2nr(s) {
8305 var base = arguments.length >= 2 ? arguments[1] : 10;
8306 return parseInt(s, base);
8307}
8308
8309function viml_string(obj) {
8310 return obj.toString();
8311}
8312
8313function viml_has_key(obj, key) {
8314 return obj[key] !== undefined;
8315}
8316
8317function viml_stridx(a, b) {
8318 return a.indexOf(b);
8319}
8320
8321var NIL = [];
8322var TRUE = 1;
8323var FALSE = 0;
8324var NODE_TOPLEVEL = 1;
8325var NODE_COMMENT = 2;
8326var NODE_EXCMD = 3;
8327var NODE_FUNCTION = 4;
8328var NODE_ENDFUNCTION = 5;
8329var NODE_DELFUNCTION = 6;
8330var NODE_RETURN = 7;
8331var NODE_EXCALL = 8;
8332var NODE_LET = 9;
8333var NODE_UNLET = 10;
8334var NODE_LOCKVAR = 11;
8335var NODE_UNLOCKVAR = 12;
8336var NODE_IF = 13;
8337var NODE_ELSEIF = 14;
8338var NODE_ELSE = 15;
8339var NODE_ENDIF = 16;
8340var NODE_WHILE = 17;
8341var NODE_ENDWHILE = 18;
8342var NODE_FOR = 19;
8343var NODE_ENDFOR = 20;
8344var NODE_CONTINUE = 21;
8345var NODE_BREAK = 22;
8346var NODE_TRY = 23;
8347var NODE_CATCH = 24;
8348var NODE_FINALLY = 25;
8349var NODE_ENDTRY = 26;
8350var NODE_THROW = 27;
8351var NODE_ECHO = 28;
8352var NODE_ECHON = 29;
8353var NODE_ECHOHL = 30;
8354var NODE_ECHOMSG = 31;
8355var NODE_ECHOERR = 32;
8356var NODE_EXECUTE = 33;
8357var NODE_TERNARY = 34;
8358var NODE_OR = 35;
8359var NODE_AND = 36;
8360var NODE_EQUAL = 37;
8361var NODE_EQUALCI = 38;
8362var NODE_EQUALCS = 39;
8363var NODE_NEQUAL = 40;
8364var NODE_NEQUALCI = 41;
8365var NODE_NEQUALCS = 42;
8366var NODE_GREATER = 43;
8367var NODE_GREATERCI = 44;
8368var NODE_GREATERCS = 45;
8369var NODE_GEQUAL = 46;
8370var NODE_GEQUALCI = 47;
8371var NODE_GEQUALCS = 48;
8372var NODE_SMALLER = 49;
8373var NODE_SMALLERCI = 50;
8374var NODE_SMALLERCS = 51;
8375var NODE_SEQUAL = 52;
8376var NODE_SEQUALCI = 53;
8377var NODE_SEQUALCS = 54;
8378var NODE_MATCH = 55;
8379var NODE_MATCHCI = 56;
8380var NODE_MATCHCS = 57;
8381var NODE_NOMATCH = 58;
8382var NODE_NOMATCHCI = 59;
8383var NODE_NOMATCHCS = 60;
8384var NODE_IS = 61;
8385var NODE_ISCI = 62;
8386var NODE_ISCS = 63;
8387var NODE_ISNOT = 64;
8388var NODE_ISNOTCI = 65;
8389var NODE_ISNOTCS = 66;
8390var NODE_ADD = 67;
8391var NODE_SUBTRACT = 68;
8392var NODE_CONCAT = 69;
8393var NODE_MULTIPLY = 70;
8394var NODE_DIVIDE = 71;
8395var NODE_REMAINDER = 72;
8396var NODE_NOT = 73;
8397var NODE_MINUS = 74;
8398var NODE_PLUS = 75;
8399var NODE_SUBSCRIPT = 76;
8400var NODE_SLICE = 77;
8401var NODE_CALL = 78;
8402var NODE_DOT = 79;
8403var NODE_NUMBER = 80;
8404var NODE_STRING = 81;
8405var NODE_LIST = 82;
8406var NODE_DICT = 83;
8407var NODE_OPTION = 85;
8408var NODE_IDENTIFIER = 86;
8409var NODE_CURLYNAME = 87;
8410var NODE_ENV = 88;
8411var NODE_REG = 89;
8412var NODE_CURLYNAMEPART = 90;
8413var NODE_CURLYNAMEEXPR = 91;
8414var NODE_LAMBDA = 92;
8415var NODE_BLOB = 93;
8416var NODE_CONST = 94;
8417var NODE_EVAL = 95;
8418var NODE_HEREDOC = 96;
8419var NODE_METHOD = 97;
8420var TOKEN_EOF = 1;
8421var TOKEN_EOL = 2;
8422var TOKEN_SPACE = 3;
8423var TOKEN_OROR = 4;
8424var TOKEN_ANDAND = 5;
8425var TOKEN_EQEQ = 6;
8426var TOKEN_EQEQCI = 7;
8427var TOKEN_EQEQCS = 8;
8428var TOKEN_NEQ = 9;
8429var TOKEN_NEQCI = 10;
8430var TOKEN_NEQCS = 11;
8431var TOKEN_GT = 12;
8432var TOKEN_GTCI = 13;
8433var TOKEN_GTCS = 14;
8434var TOKEN_GTEQ = 15;
8435var TOKEN_GTEQCI = 16;
8436var TOKEN_GTEQCS = 17;
8437var TOKEN_LT = 18;
8438var TOKEN_LTCI = 19;
8439var TOKEN_LTCS = 20;
8440var TOKEN_LTEQ = 21;
8441var TOKEN_LTEQCI = 22;
8442var TOKEN_LTEQCS = 23;
8443var TOKEN_MATCH = 24;
8444var TOKEN_MATCHCI = 25;
8445var TOKEN_MATCHCS = 26;
8446var TOKEN_NOMATCH = 27;
8447var TOKEN_NOMATCHCI = 28;
8448var TOKEN_NOMATCHCS = 29;
8449var TOKEN_IS = 30;
8450var TOKEN_ISCI = 31;
8451var TOKEN_ISCS = 32;
8452var TOKEN_ISNOT = 33;
8453var TOKEN_ISNOTCI = 34;
8454var TOKEN_ISNOTCS = 35;
8455var TOKEN_PLUS = 36;
8456var TOKEN_MINUS = 37;
8457var TOKEN_DOT = 38;
8458var TOKEN_STAR = 39;
8459var TOKEN_SLASH = 40;
8460var TOKEN_PERCENT = 41;
8461var TOKEN_NOT = 42;
8462var TOKEN_QUESTION = 43;
8463var TOKEN_COLON = 44;
8464var TOKEN_POPEN = 45;
8465var TOKEN_PCLOSE = 46;
8466var TOKEN_SQOPEN = 47;
8467var TOKEN_SQCLOSE = 48;
8468var TOKEN_COPEN = 49;
8469var TOKEN_CCLOSE = 50;
8470var TOKEN_COMMA = 51;
8471var TOKEN_NUMBER = 52;
8472var TOKEN_SQUOTE = 53;
8473var TOKEN_DQUOTE = 54;
8474var TOKEN_OPTION = 55;
8475var TOKEN_IDENTIFIER = 56;
8476var TOKEN_ENV = 57;
8477var TOKEN_REG = 58;
8478var TOKEN_EQ = 59;
8479var TOKEN_OR = 60;
8480var TOKEN_SEMICOLON = 61;
8481var TOKEN_BACKTICK = 62;
8482var TOKEN_DOTDOTDOT = 63;
8483var TOKEN_SHARP = 64;
8484var TOKEN_ARROW = 65;
8485var TOKEN_BLOB = 66;
8486var TOKEN_LITCOPEN = 67;
8487var TOKEN_DOTDOT = 68;
8488var TOKEN_HEREDOC = 69;
8489var MAX_FUNC_ARGS = 20;
8490function isalpha(c) {
8491 return viml_eqregh(c, "^[A-Za-z]$");
8492}
8493
8494function isalnum(c) {
8495 return viml_eqregh(c, "^[0-9A-Za-z]$");
8496}
8497
8498function isdigit(c) {
8499 return viml_eqregh(c, "^[0-9]$");
8500}
8501
8502function isodigit(c) {
8503 return viml_eqregh(c, "^[0-7]$");
8504}
8505
8506function isxdigit(c) {
8507 return viml_eqregh(c, "^[0-9A-Fa-f]$");
8508}
8509
8510function iswordc(c) {
8511 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8512}
8513
8514function iswordc1(c) {
8515 return viml_eqregh(c, "^[A-Za-z_]$");
8516}
8517
8518function iswhite(c) {
8519 return viml_eqregh(c, "^[ \\t]$");
8520}
8521
8522function isnamec(c) {
8523 return viml_eqregh(c, "^[0-9A-Za-z_:#]$");
8524}
8525
8526function isnamec1(c) {
8527 return viml_eqregh(c, "^[A-Za-z_]$");
8528}
8529
8530function isargname(s) {
8531 return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$");
8532}
8533
8534function isvarname(s) {
8535 return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$");
8536}
8537
8538// FIXME:
8539function isidc(c) {
8540 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8541}
8542
8543function isupper(c) {
8544 return viml_eqregh(c, "^[A-Z]$");
8545}
8546
8547function islower(c) {
8548 return viml_eqregh(c, "^[a-z]$");
8549}
8550
8551function ExArg() {
8552 var ea = {};
8553 ea.forceit = FALSE;
8554 ea.addr_count = 0;
8555 ea.line1 = 0;
8556 ea.line2 = 0;
8557 ea.flags = 0;
8558 ea.do_ecmd_cmd = "";
8559 ea.do_ecmd_lnum = 0;
8560 ea.append = 0;
8561 ea.usefilter = FALSE;
8562 ea.amount = 0;
8563 ea.regname = 0;
8564 ea.force_bin = 0;
8565 ea.read_edit = 0;
8566 ea.force_ff = 0;
8567 ea.force_enc = 0;
8568 ea.bad_char = 0;
8569 ea.linepos = {};
8570 ea.cmdpos = [];
8571 ea.argpos = [];
8572 ea.cmd = {};
8573 ea.modifiers = [];
8574 ea.range = [];
8575 ea.argopt = {};
8576 ea.argcmd = {};
8577 return ea;
8578}
8579
8580// struct node {
8581// int type
8582// pos pos
8583// node left
8584// node right
8585// node cond
8586// node rest
8587// node[] list
8588// node[] rlist
8589// node[] default_args
8590// node[] body
8591// string op
8592// string str
8593// int depth
8594// variant value
8595// }
8596// TOPLEVEL .body
8597// COMMENT .str
8598// EXCMD .ea .str
8599// FUNCTION .ea .body .left .rlist .default_args .attr .endfunction
8600// ENDFUNCTION .ea
8601// DELFUNCTION .ea .left
8602// RETURN .ea .left
8603// EXCALL .ea .left
8604// LET .ea .op .left .list .rest .right
8605// CONST .ea .op .left .list .rest .right
8606// UNLET .ea .list
8607// LOCKVAR .ea .depth .list
8608// UNLOCKVAR .ea .depth .list
8609// IF .ea .body .cond .elseif .else .endif
8610// ELSEIF .ea .body .cond
8611// ELSE .ea .body
8612// ENDIF .ea
8613// WHILE .ea .body .cond .endwhile
8614// ENDWHILE .ea
8615// FOR .ea .body .left .list .rest .right .endfor
8616// ENDFOR .ea
8617// CONTINUE .ea
8618// BREAK .ea
8619// TRY .ea .body .catch .finally .endtry
8620// CATCH .ea .body .pattern
8621// FINALLY .ea .body
8622// ENDTRY .ea
8623// THROW .ea .left
8624// EVAL .ea .left
8625// ECHO .ea .list
8626// ECHON .ea .list
8627// ECHOHL .ea .str
8628// ECHOMSG .ea .list
8629// ECHOERR .ea .list
8630// EXECUTE .ea .list
8631// TERNARY .cond .left .right
8632// OR .left .right
8633// AND .left .right
8634// EQUAL .left .right
8635// EQUALCI .left .right
8636// EQUALCS .left .right
8637// NEQUAL .left .right
8638// NEQUALCI .left .right
8639// NEQUALCS .left .right
8640// GREATER .left .right
8641// GREATERCI .left .right
8642// GREATERCS .left .right
8643// GEQUAL .left .right
8644// GEQUALCI .left .right
8645// GEQUALCS .left .right
8646// SMALLER .left .right
8647// SMALLERCI .left .right
8648// SMALLERCS .left .right
8649// SEQUAL .left .right
8650// SEQUALCI .left .right
8651// SEQUALCS .left .right
8652// MATCH .left .right
8653// MATCHCI .left .right
8654// MATCHCS .left .right
8655// NOMATCH .left .right
8656// NOMATCHCI .left .right
8657// NOMATCHCS .left .right
8658// IS .left .right
8659// ISCI .left .right
8660// ISCS .left .right
8661// ISNOT .left .right
8662// ISNOTCI .left .right
8663// ISNOTCS .left .right
8664// ADD .left .right
8665// SUBTRACT .left .right
8666// CONCAT .left .right
8667// MULTIPLY .left .right
8668// DIVIDE .left .right
8669// REMAINDER .left .right
8670// NOT .left
8671// MINUS .left
8672// PLUS .left
8673// SUBSCRIPT .left .right
8674// SLICE .left .rlist
8675// METHOD .left .right
8676// CALL .left .rlist
8677// DOT .left .right
8678// NUMBER .value
8679// STRING .value
8680// LIST .value
8681// DICT .value
8682// BLOB .value
8683// NESTING .left
8684// OPTION .value
8685// IDENTIFIER .value
8686// CURLYNAME .value
8687// ENV .value
8688// REG .value
8689// CURLYNAMEPART .value
8690// CURLYNAMEEXPR .value
8691// LAMBDA .rlist .left
8692// HEREDOC .rlist .op .body
8693function Node(type) {
8694 return {"type":type};
8695}
8696
8697function Err(msg, pos) {
8698 return viml_printf("vimlparser: %s: line %d col %d", msg, pos.lnum, pos.col);
8699}
8700
8701function VimLParser() { this.__init__.apply(this, arguments); }
8702VimLParser.prototype.__init__ = function() {
8703 var a000 = Array.prototype.slice.call(arguments, 0);
8704 if (viml_len(a000) > 0) {
8705 this.neovim = a000[0];
8706 }
8707 else {
8708 this.neovim = 0;
8709 }
8710 this.find_command_cache = {};
8711}
8712
8713VimLParser.prototype.push_context = function(node) {
8714 viml_insert(this.context, node);
8715}
8716
8717VimLParser.prototype.pop_context = function() {
8718 viml_remove(this.context, 0);
8719}
8720
8721VimLParser.prototype.find_context = function(type) {
8722 var i = 0;
8723 var __c3 = this.context;
8724 for (var __i3 = 0; __i3 < __c3.length; ++__i3) {
8725 var node = __c3[__i3];
8726 if (node.type == type) {
8727 return i;
8728 }
8729 i += 1;
8730 }
8731 return -1;
8732}
8733
8734VimLParser.prototype.add_node = function(node) {
8735 viml_add(this.context[0].body, node);
8736}
8737
8738VimLParser.prototype.check_missing_endfunction = function(ends, pos) {
8739 if (this.context[0].type == NODE_FUNCTION) {
8740 throw Err(viml_printf("E126: Missing :endfunction: %s", ends), pos);
8741 }
8742}
8743
8744VimLParser.prototype.check_missing_endif = function(ends, pos) {
8745 if (this.context[0].type == NODE_IF || this.context[0].type == NODE_ELSEIF || this.context[0].type == NODE_ELSE) {
8746 throw Err(viml_printf("E171: Missing :endif: %s", ends), pos);
8747 }
8748}
8749
8750VimLParser.prototype.check_missing_endtry = function(ends, pos) {
8751 if (this.context[0].type == NODE_TRY || this.context[0].type == NODE_CATCH || this.context[0].type == NODE_FINALLY) {
8752 throw Err(viml_printf("E600: Missing :endtry: %s", ends), pos);
8753 }
8754}
8755
8756VimLParser.prototype.check_missing_endwhile = function(ends, pos) {
8757 if (this.context[0].type == NODE_WHILE) {
8758 throw Err(viml_printf("E170: Missing :endwhile: %s", ends), pos);
8759 }
8760}
8761
8762VimLParser.prototype.check_missing_endfor = function(ends, pos) {
8763 if (this.context[0].type == NODE_FOR) {
8764 throw Err(viml_printf("E170: Missing :endfor: %s", ends), pos);
8765 }
8766}
8767
8768VimLParser.prototype.parse = function(reader) {
8769 this.reader = reader;
8770 this.context = [];
8771 var toplevel = Node(NODE_TOPLEVEL);
8772 toplevel.pos = this.reader.getpos();
8773 toplevel.body = [];
8774 this.push_context(toplevel);
8775 while (this.reader.peek() != "<EOF>") {
8776 this.parse_one_cmd();
8777 }
8778 this.check_missing_endfunction("TOPLEVEL", this.reader.getpos());
8779 this.check_missing_endif("TOPLEVEL", this.reader.getpos());
8780 this.check_missing_endtry("TOPLEVEL", this.reader.getpos());
8781 this.check_missing_endwhile("TOPLEVEL", this.reader.getpos());
8782 this.check_missing_endfor("TOPLEVEL", this.reader.getpos());
8783 this.pop_context();
8784 return toplevel;
8785}
8786
8787VimLParser.prototype.parse_one_cmd = function() {
8788 this.ea = ExArg();
8789 if (this.reader.peekn(2) == "#!") {
8790 this.parse_hashbang();
8791 this.reader.get();
8792 return;
8793 }
8794 this.reader.skip_white_and_colon();
8795 if (this.reader.peekn(1) == "") {
8796 this.reader.get();
8797 return;
8798 }
8799 if (this.reader.peekn(1) == "\"") {
8800 this.parse_comment();
8801 this.reader.get();
8802 return;
8803 }
8804 this.ea.linepos = this.reader.getpos();
8805 this.parse_command_modifiers();
8806 this.parse_range();
8807 this.parse_command();
8808 this.parse_trail();
8809}
8810
8811// FIXME:
8812VimLParser.prototype.parse_command_modifiers = function() {
8813 var modifiers = [];
8814 while (TRUE) {
8815 var pos = this.reader.tell();
8816 var d = "";
8817 if (isdigit(this.reader.peekn(1))) {
8818 var d = this.reader.read_digit();
8819 this.reader.skip_white();
8820 }
8821 var k = this.reader.read_alpha();
8822 var c = this.reader.peekn(1);
8823 this.reader.skip_white();
8824 if (viml_stridx("aboveleft", k) == 0 && viml_len(k) >= 3) {
8825 // abo\%[veleft]
8826 viml_add(modifiers, {"name":"aboveleft"});
8827 }
8828 else if (viml_stridx("belowright", k) == 0 && viml_len(k) >= 3) {
8829 // bel\%[owright]
8830 viml_add(modifiers, {"name":"belowright"});
8831 }
8832 else if (viml_stridx("browse", k) == 0 && viml_len(k) >= 3) {
8833 // bro\%[wse]
8834 viml_add(modifiers, {"name":"browse"});
8835 }
8836 else if (viml_stridx("botright", k) == 0 && viml_len(k) >= 2) {
8837 // bo\%[tright]
8838 viml_add(modifiers, {"name":"botright"});
8839 }
8840 else if (viml_stridx("confirm", k) == 0 && viml_len(k) >= 4) {
8841 // conf\%[irm]
8842 viml_add(modifiers, {"name":"confirm"});
8843 }
8844 else if (viml_stridx("keepmarks", k) == 0 && viml_len(k) >= 3) {
8845 // kee\%[pmarks]
8846 viml_add(modifiers, {"name":"keepmarks"});
8847 }
8848 else if (viml_stridx("keepalt", k) == 0 && viml_len(k) >= 5) {
8849 // keepa\%[lt]
8850 viml_add(modifiers, {"name":"keepalt"});
8851 }
8852 else if (viml_stridx("keepjumps", k) == 0 && viml_len(k) >= 5) {
8853 // keepj\%[umps]
8854 viml_add(modifiers, {"name":"keepjumps"});
8855 }
8856 else if (viml_stridx("keeppatterns", k) == 0 && viml_len(k) >= 5) {
8857 // keepp\%[atterns]
8858 viml_add(modifiers, {"name":"keeppatterns"});
8859 }
8860 else if (viml_stridx("hide", k) == 0 && viml_len(k) >= 3) {
8861 // hid\%[e]
8862 if (this.ends_excmds(c)) {
8863 break;
8864 }
8865 viml_add(modifiers, {"name":"hide"});
8866 }
8867 else if (viml_stridx("lockmarks", k) == 0 && viml_len(k) >= 3) {
8868 // loc\%[kmarks]
8869 viml_add(modifiers, {"name":"lockmarks"});
8870 }
8871 else if (viml_stridx("leftabove", k) == 0 && viml_len(k) >= 5) {
8872 // lefta\%[bove]
8873 viml_add(modifiers, {"name":"leftabove"});
8874 }
8875 else if (viml_stridx("noautocmd", k) == 0 && viml_len(k) >= 3) {
8876 // noa\%[utocmd]
8877 viml_add(modifiers, {"name":"noautocmd"});
8878 }
8879 else if (viml_stridx("noswapfile", k) == 0 && viml_len(k) >= 3) {
8880 // :nos\%[wapfile]
8881 viml_add(modifiers, {"name":"noswapfile"});
8882 }
8883 else if (viml_stridx("rightbelow", k) == 0 && viml_len(k) >= 6) {
8884 // rightb\%[elow]
8885 viml_add(modifiers, {"name":"rightbelow"});
8886 }
8887 else if (viml_stridx("sandbox", k) == 0 && viml_len(k) >= 3) {
8888 // san\%[dbox]
8889 viml_add(modifiers, {"name":"sandbox"});
8890 }
8891 else if (viml_stridx("silent", k) == 0 && viml_len(k) >= 3) {
8892 // sil\%[ent]
8893 if (c == "!") {
8894 this.reader.get();
8895 viml_add(modifiers, {"name":"silent", "bang":1});
8896 }
8897 else {
8898 viml_add(modifiers, {"name":"silent", "bang":0});
8899 }
8900 }
8901 else if (k == "tab") {
8902 // tab
8903 if (d != "") {
8904 viml_add(modifiers, {"name":"tab", "count":viml_str2nr(d, 10)});
8905 }
8906 else {
8907 viml_add(modifiers, {"name":"tab"});
8908 }
8909 }
8910 else if (viml_stridx("topleft", k) == 0 && viml_len(k) >= 2) {
8911 // to\%[pleft]
8912 viml_add(modifiers, {"name":"topleft"});
8913 }
8914 else if (viml_stridx("unsilent", k) == 0 && viml_len(k) >= 3) {
8915 // uns\%[ilent]
8916 viml_add(modifiers, {"name":"unsilent"});
8917 }
8918 else if (viml_stridx("vertical", k) == 0 && viml_len(k) >= 4) {
8919 // vert\%[ical]
8920 viml_add(modifiers, {"name":"vertical"});
8921 }
8922 else if (viml_stridx("verbose", k) == 0 && viml_len(k) >= 4) {
8923 // verb\%[ose]
8924 if (d != "") {
8925 viml_add(modifiers, {"name":"verbose", "count":viml_str2nr(d, 10)});
8926 }
8927 else {
8928 viml_add(modifiers, {"name":"verbose", "count":1});
8929 }
8930 }
8931 else {
8932 this.reader.seek_set(pos);
8933 break;
8934 }
8935 }
8936 this.ea.modifiers = modifiers;
8937}
8938
8939// FIXME:
8940VimLParser.prototype.parse_range = function() {
8941 var tokens = [];
8942 while (TRUE) {
8943 while (TRUE) {
8944 this.reader.skip_white();
8945 var c = this.reader.peekn(1);
8946 if (c == "") {
8947 break;
8948 }
8949 if (c == ".") {
8950 viml_add(tokens, this.reader.getn(1));
8951 }
8952 else if (c == "$") {
8953 viml_add(tokens, this.reader.getn(1));
8954 }
8955 else if (c == "'") {
8956 this.reader.getn(1);
8957 var m = this.reader.getn(1);
8958 if (m == "") {
8959 break;
8960 }
8961 viml_add(tokens, "'" + m);
8962 }
8963 else if (c == "/") {
8964 this.reader.getn(1);
8965 var __tmp = this.parse_pattern(c);
8966 var pattern = __tmp[0];
8967 var _ = __tmp[1];
8968 viml_add(tokens, pattern);
8969 }
8970 else if (c == "?") {
8971 this.reader.getn(1);
8972 var __tmp = this.parse_pattern(c);
8973 var pattern = __tmp[0];
8974 var _ = __tmp[1];
8975 viml_add(tokens, pattern);
8976 }
8977 else if (c == "\\") {
8978 var m = this.reader.p(1);
8979 if (m == "&" || m == "?" || m == "/") {
8980 this.reader.seek_cur(2);
8981 viml_add(tokens, "\\" + m);
8982 }
8983 else {
8984 throw Err("E10: \\\\ should be followed by /, ? or &", this.reader.getpos());
8985 }
8986 }
8987 else if (isdigit(c)) {
8988 viml_add(tokens, this.reader.read_digit());
8989 }
8990 while (TRUE) {
8991 this.reader.skip_white();
8992 if (this.reader.peekn(1) == "") {
8993 break;
8994 }
8995 var n = this.reader.read_integer();
8996 if (n == "") {
8997 break;
8998 }
8999 viml_add(tokens, n);
9000 }
9001 if (this.reader.p(0) != "/" && this.reader.p(0) != "?") {
9002 break;
9003 }
9004 }
9005 if (this.reader.peekn(1) == "%") {
9006 viml_add(tokens, this.reader.getn(1));
9007 }
9008 else if (this.reader.peekn(1) == "*") {
9009 // && &cpoptions !~ '\*'
9010 viml_add(tokens, this.reader.getn(1));
9011 }
9012 if (this.reader.peekn(1) == ";") {
9013 viml_add(tokens, this.reader.getn(1));
9014 continue;
9015 }
9016 else if (this.reader.peekn(1) == ",") {
9017 viml_add(tokens, this.reader.getn(1));
9018 continue;
9019 }
9020 break;
9021 }
9022 this.ea.range = tokens;
9023}
9024
9025// FIXME:
9026VimLParser.prototype.parse_pattern = function(delimiter) {
9027 var pattern = "";
9028 var endc = "";
9029 var inbracket = 0;
9030 while (TRUE) {
9031 var c = this.reader.getn(1);
9032 if (c == "") {
9033 break;
9034 }
9035 if (c == delimiter && inbracket == 0) {
9036 var endc = c;
9037 break;
9038 }
9039 pattern += c;
9040 if (c == "\\") {
9041 var c = this.reader.peekn(1);
9042 if (c == "") {
9043 throw Err("E682: Invalid search pattern or delimiter", this.reader.getpos());
9044 }
9045 this.reader.getn(1);
9046 pattern += c;
9047 }
9048 else if (c == "[") {
9049 inbracket += 1;
9050 }
9051 else if (c == "]") {
9052 inbracket -= 1;
9053 }
9054 }
9055 return [pattern, endc];
9056}
9057
9058VimLParser.prototype.parse_command = function() {
9059 this.reader.skip_white_and_colon();
9060 this.ea.cmdpos = this.reader.getpos();
9061 if (this.reader.peekn(1) == "" || this.reader.peekn(1) == "\"") {
9062 if (!viml_empty(this.ea.modifiers) || !viml_empty(this.ea.range)) {
9063 this.parse_cmd_modifier_range();
9064 }
9065 return;
9066 }
9067 this.ea.cmd = this.find_command();
9068 if (this.ea.cmd === NIL) {
9069 this.reader.setpos(this.ea.cmdpos);
9070 throw Err(viml_printf("E492: Not an editor command: %s", this.reader.peekline()), this.ea.cmdpos);
9071 }
9072 if (this.reader.peekn(1) == "!" && this.ea.cmd.name != "substitute" && this.ea.cmd.name != "smagic" && this.ea.cmd.name != "snomagic") {
9073 this.reader.getn(1);
9074 this.ea.forceit = TRUE;
9075 }
9076 else {
9077 this.ea.forceit = FALSE;
9078 }
9079 if (!viml_eqregh(this.ea.cmd.flags, "\\<BANG\\>") && this.ea.forceit && !viml_eqregh(this.ea.cmd.flags, "\\<USERCMD\\>")) {
9080 throw Err("E477: No ! allowed", this.ea.cmdpos);
9081 }
9082 if (this.ea.cmd.name != "!") {
9083 this.reader.skip_white();
9084 }
9085 this.ea.argpos = this.reader.getpos();
9086 if (viml_eqregh(this.ea.cmd.flags, "\\<ARGOPT\\>")) {
9087 this.parse_argopt();
9088 }
9089 if (this.ea.cmd.name == "write" || this.ea.cmd.name == "update") {
9090 if (this.reader.p(0) == ">") {
9091 if (this.reader.p(1) != ">") {
9092 throw Err("E494: Use w or w>>", this.ea.cmdpos);
9093 }
9094 this.reader.seek_cur(2);
9095 this.reader.skip_white();
9096 this.ea.append = 1;
9097 }
9098 else if (this.reader.peekn(1) == "!" && this.ea.cmd.name == "write") {
9099 this.reader.getn(1);
9100 this.ea.usefilter = TRUE;
9101 }
9102 }
9103 if (this.ea.cmd.name == "read") {
9104 if (this.ea.forceit) {
9105 this.ea.usefilter = TRUE;
9106 this.ea.forceit = FALSE;
9107 }
9108 else if (this.reader.peekn(1) == "!") {
9109 this.reader.getn(1);
9110 this.ea.usefilter = TRUE;
9111 }
9112 }
9113 if (this.ea.cmd.name == "<" || this.ea.cmd.name == ">") {
9114 this.ea.amount = 1;
9115 while (this.reader.peekn(1) == this.ea.cmd.name) {
9116 this.reader.getn(1);
9117 this.ea.amount += 1;
9118 }
9119 this.reader.skip_white();
9120 }
9121 if (viml_eqregh(this.ea.cmd.flags, "\\<EDITCMD\\>") && !this.ea.usefilter) {
9122 this.parse_argcmd();
9123 }
9124 this._parse_command(this.ea.cmd.parser);
9125}
9126
9127// TODO: self[a:parser]
9128VimLParser.prototype._parse_command = function(parser) {
9129 if (parser == "parse_cmd_append") {
9130 this.parse_cmd_append();
9131 }
9132 else if (parser == "parse_cmd_break") {
9133 this.parse_cmd_break();
9134 }
9135 else if (parser == "parse_cmd_call") {
9136 this.parse_cmd_call();
9137 }
9138 else if (parser == "parse_cmd_catch") {
9139 this.parse_cmd_catch();
9140 }
9141 else if (parser == "parse_cmd_common") {
9142 this.parse_cmd_common();
9143 }
9144 else if (parser == "parse_cmd_continue") {
9145 this.parse_cmd_continue();
9146 }
9147 else if (parser == "parse_cmd_delfunction") {
9148 this.parse_cmd_delfunction();
9149 }
9150 else if (parser == "parse_cmd_echo") {
9151 this.parse_cmd_echo();
9152 }
9153 else if (parser == "parse_cmd_echoerr") {
9154 this.parse_cmd_echoerr();
9155 }
9156 else if (parser == "parse_cmd_echohl") {
9157 this.parse_cmd_echohl();
9158 }
9159 else if (parser == "parse_cmd_echomsg") {
9160 this.parse_cmd_echomsg();
9161 }
9162 else if (parser == "parse_cmd_echon") {
9163 this.parse_cmd_echon();
9164 }
9165 else if (parser == "parse_cmd_else") {
9166 this.parse_cmd_else();
9167 }
9168 else if (parser == "parse_cmd_elseif") {
9169 this.parse_cmd_elseif();
9170 }
9171 else if (parser == "parse_cmd_endfor") {
9172 this.parse_cmd_endfor();
9173 }
9174 else if (parser == "parse_cmd_endfunction") {
9175 this.parse_cmd_endfunction();
9176 }
9177 else if (parser == "parse_cmd_endif") {
9178 this.parse_cmd_endif();
9179 }
9180 else if (parser == "parse_cmd_endtry") {
9181 this.parse_cmd_endtry();
9182 }
9183 else if (parser == "parse_cmd_endwhile") {
9184 this.parse_cmd_endwhile();
9185 }
9186 else if (parser == "parse_cmd_execute") {
9187 this.parse_cmd_execute();
9188 }
9189 else if (parser == "parse_cmd_finally") {
9190 this.parse_cmd_finally();
9191 }
9192 else if (parser == "parse_cmd_finish") {
9193 this.parse_cmd_finish();
9194 }
9195 else if (parser == "parse_cmd_for") {
9196 this.parse_cmd_for();
9197 }
9198 else if (parser == "parse_cmd_function") {
9199 this.parse_cmd_function();
9200 }
9201 else if (parser == "parse_cmd_if") {
9202 this.parse_cmd_if();
9203 }
9204 else if (parser == "parse_cmd_insert") {
9205 this.parse_cmd_insert();
9206 }
9207 else if (parser == "parse_cmd_let") {
9208 this.parse_cmd_let();
9209 }
9210 else if (parser == "parse_cmd_const") {
9211 this.parse_cmd_const();
9212 }
9213 else if (parser == "parse_cmd_loadkeymap") {
9214 this.parse_cmd_loadkeymap();
9215 }
9216 else if (parser == "parse_cmd_lockvar") {
9217 this.parse_cmd_lockvar();
9218 }
9219 else if (parser == "parse_cmd_lua") {
9220 this.parse_cmd_lua();
9221 }
9222 else if (parser == "parse_cmd_modifier_range") {
9223 this.parse_cmd_modifier_range();
9224 }
9225 else if (parser == "parse_cmd_mzscheme") {
9226 this.parse_cmd_mzscheme();
9227 }
9228 else if (parser == "parse_cmd_perl") {
9229 this.parse_cmd_perl();
9230 }
9231 else if (parser == "parse_cmd_python") {
9232 this.parse_cmd_python();
9233 }
9234 else if (parser == "parse_cmd_python3") {
9235 this.parse_cmd_python3();
9236 }
9237 else if (parser == "parse_cmd_return") {
9238 this.parse_cmd_return();
9239 }
9240 else if (parser == "parse_cmd_ruby") {
9241 this.parse_cmd_ruby();
9242 }
9243 else if (parser == "parse_cmd_tcl") {
9244 this.parse_cmd_tcl();
9245 }
9246 else if (parser == "parse_cmd_throw") {
9247 this.parse_cmd_throw();
9248 }
9249 else if (parser == "parse_cmd_eval") {
9250 this.parse_cmd_eval();
9251 }
9252 else if (parser == "parse_cmd_try") {
9253 this.parse_cmd_try();
9254 }
9255 else if (parser == "parse_cmd_unlet") {
9256 this.parse_cmd_unlet();
9257 }
9258 else if (parser == "parse_cmd_unlockvar") {
9259 this.parse_cmd_unlockvar();
9260 }
9261 else if (parser == "parse_cmd_usercmd") {
9262 this.parse_cmd_usercmd();
9263 }
9264 else if (parser == "parse_cmd_while") {
9265 this.parse_cmd_while();
9266 }
9267 else if (parser == "parse_wincmd") {
9268 this.parse_wincmd();
9269 }
9270 else if (parser == "parse_cmd_syntax") {
9271 this.parse_cmd_syntax();
9272 }
9273 else {
9274 throw viml_printf("unknown parser: %s", viml_string(parser));
9275 }
9276}
9277
9278VimLParser.prototype.find_command = function() {
9279 var c = this.reader.peekn(1);
9280 var name = "";
9281 if (c == "k") {
9282 this.reader.getn(1);
9283 var name = "k";
9284 }
9285 else if (c == "s" && viml_eqregh(this.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])")) {
9286 this.reader.getn(1);
9287 var name = "substitute";
9288 }
9289 else if (viml_eqregh(c, "[@*!=><&~#]")) {
9290 this.reader.getn(1);
9291 var name = c;
9292 }
9293 else if (this.reader.peekn(2) == "py") {
9294 var name = this.reader.read_alnum();
9295 }
9296 else {
9297 var pos = this.reader.tell();
9298 var name = this.reader.read_alpha();
9299 if (name != "del" && viml_eqregh(name, "\\v^d%[elete][lp]$")) {
9300 this.reader.seek_set(pos);
9301 var name = this.reader.getn(viml_len(name) - 1);
9302 }
9303 }
9304 if (name == "") {
9305 return NIL;
9306 }
9307 if (viml_has_key(this.find_command_cache, name)) {
9308 return this.find_command_cache[name];
9309 }
9310 var cmd = NIL;
9311 var __c4 = this.builtin_commands;
9312 for (var __i4 = 0; __i4 < __c4.length; ++__i4) {
9313 var x = __c4[__i4];
9314 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9315 delete cmd;
9316 var cmd = x;
9317 break;
9318 }
9319 }
9320 if (this.neovim) {
9321 var __c5 = this.neovim_additional_commands;
9322 for (var __i5 = 0; __i5 < __c5.length; ++__i5) {
9323 var x = __c5[__i5];
9324 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9325 delete cmd;
9326 var cmd = x;
9327 break;
9328 }
9329 }
9330 var __c6 = this.neovim_removed_commands;
9331 for (var __i6 = 0; __i6 < __c6.length; ++__i6) {
9332 var x = __c6[__i6];
9333 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9334 delete cmd;
9335 var cmd = NIL;
9336 break;
9337 }
9338 }
9339 }
9340 // FIXME: user defined command
9341 if ((cmd === NIL || cmd.name == "Print") && viml_eqregh(name, "^[A-Z]")) {
9342 name += this.reader.read_alnum();
9343 delete cmd;
9344 var cmd = {"name":name, "flags":"USERCMD", "parser":"parse_cmd_usercmd"};
9345 }
9346 this.find_command_cache[name] = cmd;
9347 return cmd;
9348}
9349
9350// TODO:
9351VimLParser.prototype.parse_hashbang = function() {
9352 this.reader.getn(-1);
9353}
9354
9355// TODO:
9356// ++opt=val
9357VimLParser.prototype.parse_argopt = function() {
9358 while (this.reader.p(0) == "+" && this.reader.p(1) == "+") {
9359 var s = this.reader.peekn(20);
9360 if (viml_eqregh(s, "^++bin\\>")) {
9361 this.reader.getn(5);
9362 this.ea.force_bin = 1;
9363 }
9364 else if (viml_eqregh(s, "^++nobin\\>")) {
9365 this.reader.getn(7);
9366 this.ea.force_bin = 2;
9367 }
9368 else if (viml_eqregh(s, "^++edit\\>")) {
9369 this.reader.getn(6);
9370 this.ea.read_edit = 1;
9371 }
9372 else if (viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>")) {
9373 this.reader.getn(5);
9374 this.ea.force_ff = this.reader.read_alpha();
9375 }
9376 else if (viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>")) {
9377 this.reader.getn(13);
9378 this.ea.force_ff = this.reader.read_alpha();
9379 }
9380 else if (viml_eqregh(s, "^++enc=\\S")) {
9381 this.reader.getn(6);
9382 this.ea.force_enc = this.reader.read_nonwhite();
9383 }
9384 else if (viml_eqregh(s, "^++encoding=\\S")) {
9385 this.reader.getn(11);
9386 this.ea.force_enc = this.reader.read_nonwhite();
9387 }
9388 else if (viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>")) {
9389 this.reader.getn(6);
9390 if (viml_eqregh(s, "^++bad=keep")) {
9391 this.ea.bad_char = this.reader.getn(4);
9392 }
9393 else if (viml_eqregh(s, "^++bad=drop")) {
9394 this.ea.bad_char = this.reader.getn(4);
9395 }
9396 else {
9397 this.ea.bad_char = this.reader.getn(1);
9398 }
9399 }
9400 else if (viml_eqregh(s, "^++")) {
9401 throw Err("E474: Invalid Argument", this.reader.getpos());
9402 }
9403 else {
9404 break;
9405 }
9406 this.reader.skip_white();
9407 }
9408}
9409
9410// TODO:
9411// +command
9412VimLParser.prototype.parse_argcmd = function() {
9413 if (this.reader.peekn(1) == "+") {
9414 this.reader.getn(1);
9415 if (this.reader.peekn(1) == " ") {
9416 this.ea.do_ecmd_cmd = "$";
9417 }
9418 else {
9419 this.ea.do_ecmd_cmd = this.read_cmdarg();
9420 }
9421 }
9422}
9423
9424VimLParser.prototype.read_cmdarg = function() {
9425 var r = "";
9426 while (TRUE) {
9427 var c = this.reader.peekn(1);
9428 if (c == "" || iswhite(c)) {
9429 break;
9430 }
9431 this.reader.getn(1);
9432 if (c == "\\") {
9433 var c = this.reader.getn(1);
9434 }
9435 r += c;
9436 }
9437 return r;
9438}
9439
9440VimLParser.prototype.parse_comment = function() {
9441 var npos = this.reader.getpos();
9442 var c = this.reader.get();
9443 if (c != "\"") {
9444 throw Err(viml_printf("unexpected character: %s", c), npos);
9445 }
9446 var node = Node(NODE_COMMENT);
9447 node.pos = npos;
9448 node.str = this.reader.getn(-1);
9449 this.add_node(node);
9450}
9451
9452VimLParser.prototype.parse_trail = function() {
9453 this.reader.skip_white();
9454 var c = this.reader.peek();
9455 if (c == "<EOF>") {
9456 // pass
9457 }
9458 else if (c == "<EOL>") {
9459 this.reader.get();
9460 }
9461 else if (c == "|") {
9462 this.reader.get();
9463 }
9464 else if (c == "\"") {
9465 this.parse_comment();
9466 this.reader.get();
9467 }
9468 else {
9469 throw Err(viml_printf("E488: Trailing characters: %s", c), this.reader.getpos());
9470 }
9471}
9472
9473// modifier or range only command line
9474VimLParser.prototype.parse_cmd_modifier_range = function() {
9475 var node = Node(NODE_EXCMD);
9476 node.pos = this.ea.cmdpos;
9477 node.ea = this.ea;
9478 node.str = this.reader.getstr(this.ea.linepos, this.reader.getpos());
9479 this.add_node(node);
9480}
9481
9482// TODO:
9483VimLParser.prototype.parse_cmd_common = function() {
9484 var end = this.reader.getpos();
9485 if (viml_eqregh(this.ea.cmd.flags, "\\<TRLBAR\\>") && !this.ea.usefilter) {
9486 var end = this.separate_nextcmd();
9487 }
9488 else if (this.ea.cmd.name == "!" || this.ea.cmd.name == "global" || this.ea.cmd.name == "vglobal" || this.ea.usefilter) {
9489 while (TRUE) {
9490 var end = this.reader.getpos();
9491 if (this.reader.getn(1) == "") {
9492 break;
9493 }
9494 }
9495 }
9496 else {
9497 while (TRUE) {
9498 var end = this.reader.getpos();
9499 if (this.reader.getn(1) == "") {
9500 break;
9501 }
9502 }
9503 }
9504 var node = Node(NODE_EXCMD);
9505 node.pos = this.ea.cmdpos;
9506 node.ea = this.ea;
9507 node.str = this.reader.getstr(this.ea.linepos, end);
9508 this.add_node(node);
9509}
9510
9511VimLParser.prototype.separate_nextcmd = function() {
9512 if (this.ea.cmd.name == "vimgrep" || this.ea.cmd.name == "vimgrepadd" || this.ea.cmd.name == "lvimgrep" || this.ea.cmd.name == "lvimgrepadd") {
9513 this.skip_vimgrep_pat();
9514 }
9515 var pc = "";
9516 var end = this.reader.getpos();
9517 var nospend = end;
9518 while (TRUE) {
9519 var end = this.reader.getpos();
9520 if (!iswhite(pc)) {
9521 var nospend = end;
9522 }
9523 var c = this.reader.peek();
9524 if (c == "<EOF>" || c == "<EOL>") {
9525 break;
9526 }
9527 else if (c == "\x16") {
9528 // <C-V>
9529 this.reader.get();
9530 var end = this.reader.getpos();
9531 var nospend = this.reader.getpos();
9532 var c = this.reader.peek();
9533 if (c == "<EOF>" || c == "<EOL>") {
9534 break;
9535 }
9536 this.reader.get();
9537 }
9538 else if (this.reader.peekn(2) == "`=" && viml_eqregh(this.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>")) {
9539 this.reader.getn(2);
9540 this.parse_expr();
9541 var c = this.reader.peekn(1);
9542 if (c != "`") {
9543 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
9544 }
9545 this.reader.getn(1);
9546 }
9547 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 != "@")) {
9548 var has_cpo_bar = FALSE;
9549 // &cpoptions =~ 'b'
9550 if ((!has_cpo_bar || !viml_eqregh(this.ea.cmd.flags, "\\<USECTRLV\\>")) && pc == "\\") {
9551 this.reader.get();
9552 }
9553 else {
9554 break;
9555 }
9556 }
9557 else {
9558 this.reader.get();
9559 }
9560 var pc = c;
9561 }
9562 if (!viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>")) {
9563 var end = nospend;
9564 }
9565 return end;
9566}
9567
9568// FIXME
9569VimLParser.prototype.skip_vimgrep_pat = function() {
9570 if (this.reader.peekn(1) == "") {
9571 // pass
9572 }
9573 else if (isidc(this.reader.peekn(1))) {
9574 // :vimgrep pattern fname
9575 this.reader.read_nonwhite();
9576 }
9577 else {
9578 // :vimgrep /pattern/[g][j] fname
9579 var c = this.reader.getn(1);
9580 var __tmp = this.parse_pattern(c);
9581 var _ = __tmp[0];
9582 var endc = __tmp[1];
9583 if (c != endc) {
9584 return;
9585 }
9586 while (this.reader.p(0) == "g" || this.reader.p(0) == "j") {
9587 this.reader.getn(1);
9588 }
9589 }
9590}
9591
9592VimLParser.prototype.parse_cmd_append = function() {
9593 this.reader.setpos(this.ea.linepos);
9594 var cmdline = this.reader.readline();
9595 var lines = [cmdline];
9596 var m = ".";
9597 while (TRUE) {
9598 if (this.reader.peek() == "<EOF>") {
9599 break;
9600 }
9601 var line = this.reader.getn(-1);
9602 viml_add(lines, line);
9603 if (line == m) {
9604 break;
9605 }
9606 this.reader.get();
9607 }
9608 var node = Node(NODE_EXCMD);
9609 node.pos = this.ea.cmdpos;
9610 node.ea = this.ea;
9611 node.str = viml_join(lines, "\n");
9612 this.add_node(node);
9613}
9614
9615VimLParser.prototype.parse_cmd_insert = function() {
9616 this.parse_cmd_append();
9617}
9618
9619VimLParser.prototype.parse_cmd_loadkeymap = function() {
9620 this.reader.setpos(this.ea.linepos);
9621 var cmdline = this.reader.readline();
9622 var lines = [cmdline];
9623 while (TRUE) {
9624 if (this.reader.peek() == "<EOF>") {
9625 break;
9626 }
9627 var line = this.reader.readline();
9628 viml_add(lines, line);
9629 }
9630 var node = Node(NODE_EXCMD);
9631 node.pos = this.ea.cmdpos;
9632 node.ea = this.ea;
9633 node.str = viml_join(lines, "\n");
9634 this.add_node(node);
9635}
9636
9637VimLParser.prototype.parse_cmd_lua = function() {
9638 var lines = [];
9639 this.reader.skip_white();
9640 if (this.reader.peekn(2) == "<<") {
9641 this.reader.getn(2);
9642 this.reader.skip_white();
9643 var m = this.reader.readline();
9644 if (m == "") {
9645 var m = ".";
9646 }
9647 this.reader.setpos(this.ea.linepos);
9648 var cmdline = this.reader.getn(-1);
9649 var lines = [cmdline];
9650 this.reader.get();
9651 while (TRUE) {
9652 if (this.reader.peek() == "<EOF>") {
9653 break;
9654 }
9655 var line = this.reader.getn(-1);
9656 viml_add(lines, line);
9657 if (line == m) {
9658 break;
9659 }
9660 this.reader.get();
9661 }
9662 }
9663 else {
9664 this.reader.setpos(this.ea.linepos);
9665 var cmdline = this.reader.getn(-1);
9666 var lines = [cmdline];
9667 }
9668 var node = Node(NODE_EXCMD);
9669 node.pos = this.ea.cmdpos;
9670 node.ea = this.ea;
9671 node.str = viml_join(lines, "\n");
9672 this.add_node(node);
9673}
9674
9675VimLParser.prototype.parse_cmd_mzscheme = function() {
9676 this.parse_cmd_lua();
9677}
9678
9679VimLParser.prototype.parse_cmd_perl = function() {
9680 this.parse_cmd_lua();
9681}
9682
9683VimLParser.prototype.parse_cmd_python = function() {
9684 this.parse_cmd_lua();
9685}
9686
9687VimLParser.prototype.parse_cmd_python3 = function() {
9688 this.parse_cmd_lua();
9689}
9690
9691VimLParser.prototype.parse_cmd_ruby = function() {
9692 this.parse_cmd_lua();
9693}
9694
9695VimLParser.prototype.parse_cmd_tcl = function() {
9696 this.parse_cmd_lua();
9697}
9698
9699VimLParser.prototype.parse_cmd_finish = function() {
9700 this.parse_cmd_common();
9701 if (this.context[0].type == NODE_TOPLEVEL) {
9702 this.reader.seek_end(0);
9703 }
9704}
9705
9706// FIXME
9707VimLParser.prototype.parse_cmd_usercmd = function() {
9708 this.parse_cmd_common();
9709}
9710
9711VimLParser.prototype.parse_cmd_function = function() {
9712 var pos = this.reader.tell();
9713 this.reader.skip_white();
9714 // :function
9715 if (this.ends_excmds(this.reader.peek())) {
9716 this.reader.seek_set(pos);
9717 this.parse_cmd_common();
9718 return;
9719 }
9720 // :function /pattern
9721 if (this.reader.peekn(1) == "/") {
9722 this.reader.seek_set(pos);
9723 this.parse_cmd_common();
9724 return;
9725 }
9726 var left = this.parse_lvalue_func();
9727 this.reader.skip_white();
9728 if (left.type == NODE_IDENTIFIER) {
9729 var s = left.value;
9730 var ss = viml_split(s, "\\zs");
9731 if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) {
9732 throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos);
9733 }
9734 }
9735 // :function {name}
9736 if (this.reader.peekn(1) != "(") {
9737 this.reader.seek_set(pos);
9738 this.parse_cmd_common();
9739 return;
9740 }
9741 // :function[!] {name}([arguments]) [range] [abort] [dict] [closure]
9742 var node = Node(NODE_FUNCTION);
9743 node.pos = this.ea.cmdpos;
9744 node.body = [];
9745 node.ea = this.ea;
9746 node.left = left;
9747 node.rlist = [];
9748 node.default_args = [];
9749 node.attr = {"range":0, "abort":0, "dict":0, "closure":0};
9750 node.endfunction = NIL;
9751 this.reader.getn(1);
9752 var tokenizer = new ExprTokenizer(this.reader);
9753 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9754 tokenizer.get();
9755 }
9756 else {
9757 var named = {};
9758 while (TRUE) {
9759 var varnode = Node(NODE_IDENTIFIER);
9760 var token = tokenizer.get();
9761 if (token.type == TOKEN_IDENTIFIER) {
9762 if (!isargname(token.value) || token.value == "firstline" || token.value == "lastline") {
9763 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
9764 }
9765 else if (viml_has_key(named, token.value)) {
9766 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
9767 }
9768 named[token.value] = 1;
9769 varnode.pos = token.pos;
9770 varnode.value = token.value;
9771 viml_add(node.rlist, varnode);
9772 if (tokenizer.peek().type == TOKEN_EQ) {
9773 tokenizer.get();
9774 viml_add(node.default_args, this.parse_expr());
9775 }
9776 else if (viml_len(node.default_args) > 0) {
9777 throw Err("E989: Non-default argument follows default argument", varnode.pos);
9778 }
9779 // XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
9780 if (iswhite(this.reader.p(0)) && tokenizer.peek().type == TOKEN_COMMA) {
9781 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
9782 }
9783 var token = tokenizer.get();
9784 if (token.type == TOKEN_COMMA) {
9785 // XXX: Vim allows last comma. F(a, b, ) => OK
9786 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9787 tokenizer.get();
9788 break;
9789 }
9790 }
9791 else if (token.type == TOKEN_PCLOSE) {
9792 break;
9793 }
9794 else {
9795 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9796 }
9797 }
9798 else if (token.type == TOKEN_DOTDOTDOT) {
9799 varnode.pos = token.pos;
9800 varnode.value = token.value;
9801 viml_add(node.rlist, varnode);
9802 var token = tokenizer.get();
9803 if (token.type == TOKEN_PCLOSE) {
9804 break;
9805 }
9806 else {
9807 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9808 }
9809 }
9810 else {
9811 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9812 }
9813 }
9814 }
9815 while (TRUE) {
9816 this.reader.skip_white();
9817 var epos = this.reader.getpos();
9818 var key = this.reader.read_alpha();
9819 if (key == "") {
9820 break;
9821 }
9822 else if (key == "range") {
9823 node.attr.range = TRUE;
9824 }
9825 else if (key == "abort") {
9826 node.attr.abort = TRUE;
9827 }
9828 else if (key == "dict") {
9829 node.attr.dict = TRUE;
9830 }
9831 else if (key == "closure") {
9832 node.attr.closure = TRUE;
9833 }
9834 else {
9835 throw Err(viml_printf("unexpected token: %s", key), epos);
9836 }
9837 }
9838 this.add_node(node);
9839 this.push_context(node);
9840}
9841
9842VimLParser.prototype.parse_cmd_endfunction = function() {
9843 this.check_missing_endif("ENDFUNCTION", this.ea.cmdpos);
9844 this.check_missing_endtry("ENDFUNCTION", this.ea.cmdpos);
9845 this.check_missing_endwhile("ENDFUNCTION", this.ea.cmdpos);
9846 this.check_missing_endfor("ENDFUNCTION", this.ea.cmdpos);
9847 if (this.context[0].type != NODE_FUNCTION) {
9848 throw Err("E193: :endfunction not inside a function", this.ea.cmdpos);
9849 }
9850 this.reader.getn(-1);
9851 var node = Node(NODE_ENDFUNCTION);
9852 node.pos = this.ea.cmdpos;
9853 node.ea = this.ea;
9854 this.context[0].endfunction = node;
9855 this.pop_context();
9856}
9857
9858VimLParser.prototype.parse_cmd_delfunction = function() {
9859 var node = Node(NODE_DELFUNCTION);
9860 node.pos = this.ea.cmdpos;
9861 node.ea = this.ea;
9862 node.left = this.parse_lvalue_func();
9863 this.add_node(node);
9864}
9865
9866VimLParser.prototype.parse_cmd_return = function() {
9867 if (this.find_context(NODE_FUNCTION) == -1) {
9868 throw Err("E133: :return not inside a function", this.ea.cmdpos);
9869 }
9870 var node = Node(NODE_RETURN);
9871 node.pos = this.ea.cmdpos;
9872 node.ea = this.ea;
9873 node.left = NIL;
9874 this.reader.skip_white();
9875 var c = this.reader.peek();
9876 if (c == "\"" || !this.ends_excmds(c)) {
9877 node.left = this.parse_expr();
9878 }
9879 this.add_node(node);
9880}
9881
9882VimLParser.prototype.parse_cmd_call = function() {
9883 var node = Node(NODE_EXCALL);
9884 node.pos = this.ea.cmdpos;
9885 node.ea = this.ea;
9886 this.reader.skip_white();
9887 var c = this.reader.peek();
9888 if (this.ends_excmds(c)) {
9889 throw Err("E471: Argument required", this.reader.getpos());
9890 }
9891 node.left = this.parse_expr();
9892 if (node.left.type != NODE_CALL) {
9893 throw Err("Not a function call", node.left.pos);
9894 }
9895 this.add_node(node);
9896}
9897
9898VimLParser.prototype.parse_heredoc = function() {
9899 var node = Node(NODE_HEREDOC);
9900 node.pos = this.ea.cmdpos;
9901 node.op = "";
9902 node.rlist = [];
9903 node.body = [];
9904 while (TRUE) {
9905 this.reader.skip_white();
9906 var key = this.reader.read_word();
9907 if (key == "") {
9908 break;
9909 }
9910 if (!islower(key[0])) {
9911 node.op = key;
9912 break;
9913 }
9914 else {
9915 viml_add(node.rlist, key);
9916 }
9917 }
9918 if (node.op == "") {
9919 throw Err("E172: Missing marker", this.reader.getpos());
9920 }
9921 this.parse_trail();
9922 while (TRUE) {
9923 if (this.reader.peek() == "<EOF>") {
9924 break;
9925 }
9926 var line = this.reader.getn(-1);
9927 if (line == node.op) {
9928 return node;
9929 }
9930 viml_add(node.body, line);
9931 this.reader.get();
9932 }
9933 throw Err(viml_printf("E990: Missing end marker '%s'", node.op), this.reader.getpos());
9934}
9935
9936VimLParser.prototype.parse_cmd_let = function() {
9937 var pos = this.reader.tell();
9938 this.reader.skip_white();
9939 // :let
9940 if (this.ends_excmds(this.reader.peek())) {
9941 this.reader.seek_set(pos);
9942 this.parse_cmd_common();
9943 return;
9944 }
9945 var lhs = this.parse_letlhs();
9946 this.reader.skip_white();
9947 var s1 = this.reader.peekn(1);
9948 var s2 = this.reader.peekn(2);
9949 // TODO check scriptversion?
9950 if (s2 == "..") {
9951 var s2 = this.reader.peekn(3);
9952 }
9953 else if (s2 == "=<") {
9954 var s2 = this.reader.peekn(3);
9955 }
9956 // :let {var-name} ..
9957 if (this.ends_excmds(s1) || s2 != "+=" && s2 != "-=" && s2 != ".=" && s2 != "..=" && s2 != "*=" && s2 != "/=" && s2 != "%=" && s2 != "=<<" && s1 != "=") {
9958 this.reader.seek_set(pos);
9959 this.parse_cmd_common();
9960 return;
9961 }
9962 // :let left op right
9963 var node = Node(NODE_LET);
9964 node.pos = this.ea.cmdpos;
9965 node.ea = this.ea;
9966 node.op = "";
9967 node.left = lhs.left;
9968 node.list = lhs.list;
9969 node.rest = lhs.rest;
9970 node.right = NIL;
9971 if (s2 == "+=" || s2 == "-=" || s2 == ".=" || s2 == "..=" || s2 == "*=" || s2 == "/=" || s2 == "%=") {
9972 this.reader.getn(viml_len(s2));
9973 node.op = s2;
9974 }
9975 else if (s2 == "=<<") {
9976 this.reader.getn(viml_len(s2));
9977 this.reader.skip_white();
9978 node.op = s2;
9979 node.right = this.parse_heredoc();
9980 this.add_node(node);
9981 return;
9982 }
9983 else if (s1 == "=") {
9984 this.reader.getn(1);
9985 node.op = s1;
9986 }
9987 else {
9988 throw "NOT REACHED";
9989 }
9990 node.right = this.parse_expr();
9991 this.add_node(node);
9992}
9993
9994VimLParser.prototype.parse_cmd_const = function() {
9995 var pos = this.reader.tell();
9996 this.reader.skip_white();
9997 // :const
9998 if (this.ends_excmds(this.reader.peek())) {
9999 this.reader.seek_set(pos);
10000 this.parse_cmd_common();
10001 return;
10002 }
10003 var lhs = this.parse_constlhs();
10004 this.reader.skip_white();
10005 var s1 = this.reader.peekn(1);
10006 // :const {var-name}
10007 if (this.ends_excmds(s1) || s1 != "=") {
10008 this.reader.seek_set(pos);
10009 this.parse_cmd_common();
10010 return;
10011 }
10012 // :const left op right
10013 var node = Node(NODE_CONST);
10014 node.pos = this.ea.cmdpos;
10015 node.ea = this.ea;
10016 this.reader.getn(1);
10017 node.op = s1;
10018 node.left = lhs.left;
10019 node.list = lhs.list;
10020 node.rest = lhs.rest;
10021 node.right = this.parse_expr();
10022 this.add_node(node);
10023}
10024
10025VimLParser.prototype.parse_cmd_unlet = function() {
10026 var node = Node(NODE_UNLET);
10027 node.pos = this.ea.cmdpos;
10028 node.ea = this.ea;
10029 node.list = this.parse_lvaluelist();
10030 this.add_node(node);
10031}
10032
10033VimLParser.prototype.parse_cmd_lockvar = function() {
10034 var node = Node(NODE_LOCKVAR);
10035 node.pos = this.ea.cmdpos;
10036 node.ea = this.ea;
10037 node.depth = NIL;
10038 node.list = [];
10039 this.reader.skip_white();
10040 if (isdigit(this.reader.peekn(1))) {
10041 node.depth = viml_str2nr(this.reader.read_digit(), 10);
10042 }
10043 node.list = this.parse_lvaluelist();
10044 this.add_node(node);
10045}
10046
10047VimLParser.prototype.parse_cmd_unlockvar = function() {
10048 var node = Node(NODE_UNLOCKVAR);
10049 node.pos = this.ea.cmdpos;
10050 node.ea = this.ea;
10051 node.depth = NIL;
10052 node.list = [];
10053 this.reader.skip_white();
10054 if (isdigit(this.reader.peekn(1))) {
10055 node.depth = viml_str2nr(this.reader.read_digit(), 10);
10056 }
10057 node.list = this.parse_lvaluelist();
10058 this.add_node(node);
10059}
10060
10061VimLParser.prototype.parse_cmd_if = function() {
10062 var node = Node(NODE_IF);
10063 node.pos = this.ea.cmdpos;
10064 node.body = [];
10065 node.ea = this.ea;
10066 node.cond = this.parse_expr();
10067 node.elseif = [];
10068 node._else = NIL;
10069 node.endif = NIL;
10070 this.add_node(node);
10071 this.push_context(node);
10072}
10073
10074VimLParser.prototype.parse_cmd_elseif = function() {
10075 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10076 throw Err("E582: :elseif without :if", this.ea.cmdpos);
10077 }
10078 if (this.context[0].type != NODE_IF) {
10079 this.pop_context();
10080 }
10081 var node = Node(NODE_ELSEIF);
10082 node.pos = this.ea.cmdpos;
10083 node.body = [];
10084 node.ea = this.ea;
10085 node.cond = this.parse_expr();
10086 viml_add(this.context[0].elseif, node);
10087 this.push_context(node);
10088}
10089
10090VimLParser.prototype.parse_cmd_else = function() {
10091 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10092 throw Err("E581: :else without :if", this.ea.cmdpos);
10093 }
10094 if (this.context[0].type != NODE_IF) {
10095 this.pop_context();
10096 }
10097 var node = Node(NODE_ELSE);
10098 node.pos = this.ea.cmdpos;
10099 node.body = [];
10100 node.ea = this.ea;
10101 this.context[0]._else = node;
10102 this.push_context(node);
10103}
10104
10105VimLParser.prototype.parse_cmd_endif = function() {
10106 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF && this.context[0].type != NODE_ELSE) {
10107 throw Err("E580: :endif without :if", this.ea.cmdpos);
10108 }
10109 if (this.context[0].type != NODE_IF) {
10110 this.pop_context();
10111 }
10112 var node = Node(NODE_ENDIF);
10113 node.pos = this.ea.cmdpos;
10114 node.ea = this.ea;
10115 this.context[0].endif = node;
10116 this.pop_context();
10117}
10118
10119VimLParser.prototype.parse_cmd_while = function() {
10120 var node = Node(NODE_WHILE);
10121 node.pos = this.ea.cmdpos;
10122 node.body = [];
10123 node.ea = this.ea;
10124 node.cond = this.parse_expr();
10125 node.endwhile = NIL;
10126 this.add_node(node);
10127 this.push_context(node);
10128}
10129
10130VimLParser.prototype.parse_cmd_endwhile = function() {
10131 if (this.context[0].type != NODE_WHILE) {
10132 throw Err("E588: :endwhile without :while", this.ea.cmdpos);
10133 }
10134 var node = Node(NODE_ENDWHILE);
10135 node.pos = this.ea.cmdpos;
10136 node.ea = this.ea;
10137 this.context[0].endwhile = node;
10138 this.pop_context();
10139}
10140
10141VimLParser.prototype.parse_cmd_for = function() {
10142 var node = Node(NODE_FOR);
10143 node.pos = this.ea.cmdpos;
10144 node.body = [];
10145 node.ea = this.ea;
10146 node.left = NIL;
10147 node.right = NIL;
10148 node.endfor = NIL;
10149 var lhs = this.parse_letlhs();
10150 node.left = lhs.left;
10151 node.list = lhs.list;
10152 node.rest = lhs.rest;
10153 this.reader.skip_white();
10154 var epos = this.reader.getpos();
10155 if (this.reader.read_alpha() != "in") {
10156 throw Err("Missing \"in\" after :for", epos);
10157 }
10158 node.right = this.parse_expr();
10159 this.add_node(node);
10160 this.push_context(node);
10161}
10162
10163VimLParser.prototype.parse_cmd_endfor = function() {
10164 if (this.context[0].type != NODE_FOR) {
10165 throw Err("E588: :endfor without :for", this.ea.cmdpos);
10166 }
10167 var node = Node(NODE_ENDFOR);
10168 node.pos = this.ea.cmdpos;
10169 node.ea = this.ea;
10170 this.context[0].endfor = node;
10171 this.pop_context();
10172}
10173
10174VimLParser.prototype.parse_cmd_continue = function() {
10175 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10176 throw Err("E586: :continue without :while or :for", this.ea.cmdpos);
10177 }
10178 var node = Node(NODE_CONTINUE);
10179 node.pos = this.ea.cmdpos;
10180 node.ea = this.ea;
10181 this.add_node(node);
10182}
10183
10184VimLParser.prototype.parse_cmd_break = function() {
10185 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10186 throw Err("E587: :break without :while or :for", this.ea.cmdpos);
10187 }
10188 var node = Node(NODE_BREAK);
10189 node.pos = this.ea.cmdpos;
10190 node.ea = this.ea;
10191 this.add_node(node);
10192}
10193
10194VimLParser.prototype.parse_cmd_try = function() {
10195 var node = Node(NODE_TRY);
10196 node.pos = this.ea.cmdpos;
10197 node.body = [];
10198 node.ea = this.ea;
10199 node.catch = [];
10200 node._finally = NIL;
10201 node.endtry = NIL;
10202 this.add_node(node);
10203 this.push_context(node);
10204}
10205
10206VimLParser.prototype.parse_cmd_catch = function() {
10207 if (this.context[0].type == NODE_FINALLY) {
10208 throw Err("E604: :catch after :finally", this.ea.cmdpos);
10209 }
10210 else if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10211 throw Err("E603: :catch without :try", this.ea.cmdpos);
10212 }
10213 if (this.context[0].type != NODE_TRY) {
10214 this.pop_context();
10215 }
10216 var node = Node(NODE_CATCH);
10217 node.pos = this.ea.cmdpos;
10218 node.body = [];
10219 node.ea = this.ea;
10220 node.pattern = NIL;
10221 this.reader.skip_white();
10222 if (!this.ends_excmds(this.reader.peek())) {
10223 var __tmp = this.parse_pattern(this.reader.get());
10224 node.pattern = __tmp[0];
10225 var _ = __tmp[1];
10226 }
10227 viml_add(this.context[0].catch, node);
10228 this.push_context(node);
10229}
10230
10231VimLParser.prototype.parse_cmd_finally = function() {
10232 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10233 throw Err("E606: :finally without :try", this.ea.cmdpos);
10234 }
10235 if (this.context[0].type != NODE_TRY) {
10236 this.pop_context();
10237 }
10238 var node = Node(NODE_FINALLY);
10239 node.pos = this.ea.cmdpos;
10240 node.body = [];
10241 node.ea = this.ea;
10242 this.context[0]._finally = node;
10243 this.push_context(node);
10244}
10245
10246VimLParser.prototype.parse_cmd_endtry = function() {
10247 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH && this.context[0].type != NODE_FINALLY) {
10248 throw Err("E602: :endtry without :try", this.ea.cmdpos);
10249 }
10250 if (this.context[0].type != NODE_TRY) {
10251 this.pop_context();
10252 }
10253 var node = Node(NODE_ENDTRY);
10254 node.pos = this.ea.cmdpos;
10255 node.ea = this.ea;
10256 this.context[0].endtry = node;
10257 this.pop_context();
10258}
10259
10260VimLParser.prototype.parse_cmd_throw = function() {
10261 var node = Node(NODE_THROW);
10262 node.pos = this.ea.cmdpos;
10263 node.ea = this.ea;
10264 node.left = this.parse_expr();
10265 this.add_node(node);
10266}
10267
10268VimLParser.prototype.parse_cmd_eval = function() {
10269 var node = Node(NODE_EVAL);
10270 node.pos = this.ea.cmdpos;
10271 node.ea = this.ea;
10272 node.left = this.parse_expr();
10273 this.add_node(node);
10274}
10275
10276VimLParser.prototype.parse_cmd_echo = function() {
10277 var node = Node(NODE_ECHO);
10278 node.pos = this.ea.cmdpos;
10279 node.ea = this.ea;
10280 node.list = this.parse_exprlist();
10281 this.add_node(node);
10282}
10283
10284VimLParser.prototype.parse_cmd_echon = function() {
10285 var node = Node(NODE_ECHON);
10286 node.pos = this.ea.cmdpos;
10287 node.ea = this.ea;
10288 node.list = this.parse_exprlist();
10289 this.add_node(node);
10290}
10291
10292VimLParser.prototype.parse_cmd_echohl = function() {
10293 var node = Node(NODE_ECHOHL);
10294 node.pos = this.ea.cmdpos;
10295 node.ea = this.ea;
10296 node.str = "";
10297 while (!this.ends_excmds(this.reader.peek())) {
10298 node.str += this.reader.get();
10299 }
10300 this.add_node(node);
10301}
10302
10303VimLParser.prototype.parse_cmd_echomsg = function() {
10304 var node = Node(NODE_ECHOMSG);
10305 node.pos = this.ea.cmdpos;
10306 node.ea = this.ea;
10307 node.list = this.parse_exprlist();
10308 this.add_node(node);
10309}
10310
10311VimLParser.prototype.parse_cmd_echoerr = function() {
10312 var node = Node(NODE_ECHOERR);
10313 node.pos = this.ea.cmdpos;
10314 node.ea = this.ea;
10315 node.list = this.parse_exprlist();
10316 this.add_node(node);
10317}
10318
10319VimLParser.prototype.parse_cmd_execute = function() {
10320 var node = Node(NODE_EXECUTE);
10321 node.pos = this.ea.cmdpos;
10322 node.ea = this.ea;
10323 node.list = this.parse_exprlist();
10324 this.add_node(node);
10325}
10326
10327VimLParser.prototype.parse_expr = function() {
10328 return new ExprParser(this.reader).parse();
10329}
10330
10331VimLParser.prototype.parse_exprlist = function() {
10332 var list = [];
10333 while (TRUE) {
10334 this.reader.skip_white();
10335 var c = this.reader.peek();
10336 if (c != "\"" && this.ends_excmds(c)) {
10337 break;
10338 }
10339 var node = this.parse_expr();
10340 viml_add(list, node);
10341 }
10342 return list;
10343}
10344
10345VimLParser.prototype.parse_lvalue_func = function() {
10346 var p = new LvalueParser(this.reader);
10347 var node = p.parse();
10348 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) {
10349 return node;
10350 }
10351 throw Err("Invalid Expression", node.pos);
10352}
10353
10354// FIXME:
10355VimLParser.prototype.parse_lvalue = function() {
10356 var p = new LvalueParser(this.reader);
10357 var node = p.parse();
10358 if (node.type == NODE_IDENTIFIER) {
10359 if (!isvarname(node.value)) {
10360 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10361 }
10362 }
10363 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) {
10364 return node;
10365 }
10366 throw Err("Invalid Expression", node.pos);
10367}
10368
10369// TODO: merge with s:VimLParser.parse_lvalue()
10370VimLParser.prototype.parse_constlvalue = function() {
10371 var p = new LvalueParser(this.reader);
10372 var node = p.parse();
10373 if (node.type == NODE_IDENTIFIER) {
10374 if (!isvarname(node.value)) {
10375 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10376 }
10377 }
10378 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME) {
10379 return node;
10380 }
10381 else if (node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT) {
10382 throw Err("E996: Cannot lock a list or dict", node.pos);
10383 }
10384 else if (node.type == NODE_OPTION) {
10385 throw Err("E996: Cannot lock an option", node.pos);
10386 }
10387 else if (node.type == NODE_ENV) {
10388 throw Err("E996: Cannot lock an environment variable", node.pos);
10389 }
10390 else if (node.type == NODE_REG) {
10391 throw Err("E996: Cannot lock a register", node.pos);
10392 }
10393 throw Err("Invalid Expression", node.pos);
10394}
10395
10396VimLParser.prototype.parse_lvaluelist = function() {
10397 var list = [];
10398 var node = this.parse_expr();
10399 viml_add(list, node);
10400 while (TRUE) {
10401 this.reader.skip_white();
10402 if (this.ends_excmds(this.reader.peek())) {
10403 break;
10404 }
10405 var node = this.parse_lvalue();
10406 viml_add(list, node);
10407 }
10408 return list;
10409}
10410
10411// FIXME:
10412VimLParser.prototype.parse_letlhs = function() {
10413 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10414 var tokenizer = new ExprTokenizer(this.reader);
10415 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10416 tokenizer.get();
10417 lhs.list = [];
10418 while (TRUE) {
10419 var node = this.parse_lvalue();
10420 viml_add(lhs.list, node);
10421 var token = tokenizer.get();
10422 if (token.type == TOKEN_SQCLOSE) {
10423 break;
10424 }
10425 else if (token.type == TOKEN_COMMA) {
10426 continue;
10427 }
10428 else if (token.type == TOKEN_SEMICOLON) {
10429 var node = this.parse_lvalue();
10430 lhs.rest = node;
10431 var token = tokenizer.get();
10432 if (token.type == TOKEN_SQCLOSE) {
10433 break;
10434 }
10435 else {
10436 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10437 }
10438 }
10439 else {
10440 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10441 }
10442 }
10443 }
10444 else {
10445 lhs.left = this.parse_lvalue();
10446 }
10447 return lhs;
10448}
10449
10450// TODO: merge with s:VimLParser.parse_letlhs() ?
10451VimLParser.prototype.parse_constlhs = function() {
10452 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10453 var tokenizer = new ExprTokenizer(this.reader);
10454 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10455 tokenizer.get();
10456 lhs.list = [];
10457 while (TRUE) {
10458 var node = this.parse_lvalue();
10459 viml_add(lhs.list, node);
10460 var token = tokenizer.get();
10461 if (token.type == TOKEN_SQCLOSE) {
10462 break;
10463 }
10464 else if (token.type == TOKEN_COMMA) {
10465 continue;
10466 }
10467 else if (token.type == TOKEN_SEMICOLON) {
10468 var node = this.parse_lvalue();
10469 lhs.rest = node;
10470 var token = tokenizer.get();
10471 if (token.type == TOKEN_SQCLOSE) {
10472 break;
10473 }
10474 else {
10475 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10476 }
10477 }
10478 else {
10479 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10480 }
10481 }
10482 }
10483 else {
10484 lhs.left = this.parse_constlvalue();
10485 }
10486 return lhs;
10487}
10488
10489VimLParser.prototype.ends_excmds = function(c) {
10490 return c == "" || c == "|" || c == "\"" || c == "<EOF>" || c == "<EOL>";
10491}
10492
10493// FIXME: validate argument
10494VimLParser.prototype.parse_wincmd = function() {
10495 var c = this.reader.getn(1);
10496 if (c == "") {
10497 throw Err("E471: Argument required", this.reader.getpos());
10498 }
10499 else if (c == "g" || c == "\x07") {
10500 // <C-G>
10501 var c2 = this.reader.getn(1);
10502 if (c2 == "" || iswhite(c2)) {
10503 throw Err("E474: Invalid Argument", this.reader.getpos());
10504 }
10505 }
10506 var end = this.reader.getpos();
10507 this.reader.skip_white();
10508 if (!this.ends_excmds(this.reader.peek())) {
10509 throw Err("E474: Invalid Argument", this.reader.getpos());
10510 }
10511 var node = Node(NODE_EXCMD);
10512 node.pos = this.ea.cmdpos;
10513 node.ea = this.ea;
10514 node.str = this.reader.getstr(this.ea.linepos, end);
10515 this.add_node(node);
10516}
10517
10518// FIXME: validate argument
10519VimLParser.prototype.parse_cmd_syntax = function() {
10520 var end = this.reader.getpos();
10521 while (TRUE) {
10522 var end = this.reader.getpos();
10523 var c = this.reader.peek();
10524 if (c == "/" || c == "'" || c == "\"") {
10525 this.reader.getn(1);
10526 this.parse_pattern(c);
10527 }
10528 else if (c == "=") {
10529 this.reader.getn(1);
10530 this.parse_pattern(" ");
10531 }
10532 else if (this.ends_excmds(c)) {
10533 break;
10534 }
10535 this.reader.getn(1);
10536 }
10537 var node = Node(NODE_EXCMD);
10538 node.pos = this.ea.cmdpos;
10539 node.ea = this.ea;
10540 node.str = this.reader.getstr(this.ea.linepos, end);
10541 this.add_node(node);
10542}
10543
10544VimLParser.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"}];
10545VimLParser.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"}];
10546// To find new builtin_commands, run the below script.
10547// $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
10548VimLParser.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"}];
10549// To find new builtin_functions, run the below script.
10550// $ scripts/update_builtin_functions.sh /path/to/vim/src/evalfunc.c
10551VimLParser.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"}];
10552function ExprTokenizer() { this.__init__.apply(this, arguments); }
10553ExprTokenizer.prototype.__init__ = function(reader) {
10554 this.reader = reader;
10555 this.cache = {};
10556}
10557
10558ExprTokenizer.prototype.token = function(type, value, pos) {
10559 return {"type":type, "value":value, "pos":pos};
10560}
10561
10562ExprTokenizer.prototype.peek = function() {
10563 var pos = this.reader.tell();
10564 var r = this.get();
10565 this.reader.seek_set(pos);
10566 return r;
10567}
10568
10569ExprTokenizer.prototype.get = function() {
10570 // FIXME: remove dirty hack
10571 if (viml_has_key(this.cache, this.reader.tell())) {
10572 var x = this.cache[this.reader.tell()];
10573 this.reader.seek_set(x[0]);
10574 return x[1];
10575 }
10576 var pos = this.reader.tell();
10577 this.reader.skip_white();
10578 var r = this.get2();
10579 this.cache[pos] = [this.reader.tell(), r];
10580 return r;
10581}
10582
10583ExprTokenizer.prototype.get2 = function() {
10584 var r = this.reader;
10585 var pos = r.getpos();
10586 var c = r.peek();
10587 if (c == "<EOF>") {
10588 return this.token(TOKEN_EOF, c, pos);
10589 }
10590 else if (c == "<EOL>") {
10591 r.seek_cur(1);
10592 return this.token(TOKEN_EOL, c, pos);
10593 }
10594 else if (iswhite(c)) {
10595 var s = r.read_white();
10596 return this.token(TOKEN_SPACE, s, pos);
10597 }
10598 else if (c == "0" && (r.p(1) == "X" || r.p(1) == "x") && isxdigit(r.p(2))) {
10599 var s = r.getn(3);
10600 s += r.read_xdigit();
10601 return this.token(TOKEN_NUMBER, s, pos);
10602 }
10603 else if (c == "0" && (r.p(1) == "B" || r.p(1) == "b") && (r.p(2) == "0" || r.p(2) == "1")) {
10604 var s = r.getn(3);
10605 s += r.read_bdigit();
10606 return this.token(TOKEN_NUMBER, s, pos);
10607 }
10608 else if (c == "0" && (r.p(1) == "Z" || r.p(1) == "z") && r.p(2) != ".") {
10609 var s = r.getn(2);
10610 s += r.read_blob();
10611 return this.token(TOKEN_BLOB, s, pos);
10612 }
10613 else if (isdigit(c)) {
10614 var s = r.read_digit();
10615 if (r.p(0) == "." && isdigit(r.p(1))) {
10616 s += r.getn(1);
10617 s += r.read_digit();
10618 if ((r.p(0) == "E" || r.p(0) == "e") && (isdigit(r.p(1)) || (r.p(1) == "-" || r.p(1) == "+") && isdigit(r.p(2)))) {
10619 s += r.getn(2);
10620 s += r.read_digit();
10621 }
10622 }
10623 return this.token(TOKEN_NUMBER, s, pos);
10624 }
10625 else if (c == "i" && r.p(1) == "s" && !isidc(r.p(2))) {
10626 if (r.p(2) == "?") {
10627 r.seek_cur(3);
10628 return this.token(TOKEN_ISCI, "is?", pos);
10629 }
10630 else if (r.p(2) == "#") {
10631 r.seek_cur(3);
10632 return this.token(TOKEN_ISCS, "is#", pos);
10633 }
10634 else {
10635 r.seek_cur(2);
10636 return this.token(TOKEN_IS, "is", pos);
10637 }
10638 }
10639 else if (c == "i" && r.p(1) == "s" && r.p(2) == "n" && r.p(3) == "o" && r.p(4) == "t" && !isidc(r.p(5))) {
10640 if (r.p(5) == "?") {
10641 r.seek_cur(6);
10642 return this.token(TOKEN_ISNOTCI, "isnot?", pos);
10643 }
10644 else if (r.p(5) == "#") {
10645 r.seek_cur(6);
10646 return this.token(TOKEN_ISNOTCS, "isnot#", pos);
10647 }
10648 else {
10649 r.seek_cur(5);
10650 return this.token(TOKEN_ISNOT, "isnot", pos);
10651 }
10652 }
10653 else if (isnamec1(c)) {
10654 var s = r.read_name();
10655 return this.token(TOKEN_IDENTIFIER, s, pos);
10656 }
10657 else if (c == "|" && r.p(1) == "|") {
10658 r.seek_cur(2);
10659 return this.token(TOKEN_OROR, "||", pos);
10660 }
10661 else if (c == "&" && r.p(1) == "&") {
10662 r.seek_cur(2);
10663 return this.token(TOKEN_ANDAND, "&&", pos);
10664 }
10665 else if (c == "=" && r.p(1) == "=") {
10666 if (r.p(2) == "?") {
10667 r.seek_cur(3);
10668 return this.token(TOKEN_EQEQCI, "==?", pos);
10669 }
10670 else if (r.p(2) == "#") {
10671 r.seek_cur(3);
10672 return this.token(TOKEN_EQEQCS, "==#", pos);
10673 }
10674 else {
10675 r.seek_cur(2);
10676 return this.token(TOKEN_EQEQ, "==", pos);
10677 }
10678 }
10679 else if (c == "!" && r.p(1) == "=") {
10680 if (r.p(2) == "?") {
10681 r.seek_cur(3);
10682 return this.token(TOKEN_NEQCI, "!=?", pos);
10683 }
10684 else if (r.p(2) == "#") {
10685 r.seek_cur(3);
10686 return this.token(TOKEN_NEQCS, "!=#", pos);
10687 }
10688 else {
10689 r.seek_cur(2);
10690 return this.token(TOKEN_NEQ, "!=", pos);
10691 }
10692 }
10693 else if (c == ">" && r.p(1) == "=") {
10694 if (r.p(2) == "?") {
10695 r.seek_cur(3);
10696 return this.token(TOKEN_GTEQCI, ">=?", pos);
10697 }
10698 else if (r.p(2) == "#") {
10699 r.seek_cur(3);
10700 return this.token(TOKEN_GTEQCS, ">=#", pos);
10701 }
10702 else {
10703 r.seek_cur(2);
10704 return this.token(TOKEN_GTEQ, ">=", pos);
10705 }
10706 }
10707 else if (c == "<" && r.p(1) == "=") {
10708 if (r.p(2) == "?") {
10709 r.seek_cur(3);
10710 return this.token(TOKEN_LTEQCI, "<=?", pos);
10711 }
10712 else if (r.p(2) == "#") {
10713 r.seek_cur(3);
10714 return this.token(TOKEN_LTEQCS, "<=#", pos);
10715 }
10716 else {
10717 r.seek_cur(2);
10718 return this.token(TOKEN_LTEQ, "<=", pos);
10719 }
10720 }
10721 else if (c == "=" && r.p(1) == "~") {
10722 if (r.p(2) == "?") {
10723 r.seek_cur(3);
10724 return this.token(TOKEN_MATCHCI, "=~?", pos);
10725 }
10726 else if (r.p(2) == "#") {
10727 r.seek_cur(3);
10728 return this.token(TOKEN_MATCHCS, "=~#", pos);
10729 }
10730 else {
10731 r.seek_cur(2);
10732 return this.token(TOKEN_MATCH, "=~", pos);
10733 }
10734 }
10735 else if (c == "!" && r.p(1) == "~") {
10736 if (r.p(2) == "?") {
10737 r.seek_cur(3);
10738 return this.token(TOKEN_NOMATCHCI, "!~?", pos);
10739 }
10740 else if (r.p(2) == "#") {
10741 r.seek_cur(3);
10742 return this.token(TOKEN_NOMATCHCS, "!~#", pos);
10743 }
10744 else {
10745 r.seek_cur(2);
10746 return this.token(TOKEN_NOMATCH, "!~", pos);
10747 }
10748 }
10749 else if (c == ">") {
10750 if (r.p(1) == "?") {
10751 r.seek_cur(2);
10752 return this.token(TOKEN_GTCI, ">?", pos);
10753 }
10754 else if (r.p(1) == "#") {
10755 r.seek_cur(2);
10756 return this.token(TOKEN_GTCS, ">#", pos);
10757 }
10758 else {
10759 r.seek_cur(1);
10760 return this.token(TOKEN_GT, ">", pos);
10761 }
10762 }
10763 else if (c == "<") {
10764 if (r.p(1) == "?") {
10765 r.seek_cur(2);
10766 return this.token(TOKEN_LTCI, "<?", pos);
10767 }
10768 else if (r.p(1) == "#") {
10769 r.seek_cur(2);
10770 return this.token(TOKEN_LTCS, "<#", pos);
10771 }
10772 else {
10773 r.seek_cur(1);
10774 return this.token(TOKEN_LT, "<", pos);
10775 }
10776 }
10777 else if (c == "+") {
10778 r.seek_cur(1);
10779 return this.token(TOKEN_PLUS, "+", pos);
10780 }
10781 else if (c == "-") {
10782 if (r.p(1) == ">") {
10783 r.seek_cur(2);
10784 return this.token(TOKEN_ARROW, "->", pos);
10785 }
10786 else {
10787 r.seek_cur(1);
10788 return this.token(TOKEN_MINUS, "-", pos);
10789 }
10790 }
10791 else if (c == ".") {
10792 if (r.p(1) == "." && r.p(2) == ".") {
10793 r.seek_cur(3);
10794 return this.token(TOKEN_DOTDOTDOT, "...", pos);
10795 }
10796 else if (r.p(1) == ".") {
10797 r.seek_cur(2);
10798 return this.token(TOKEN_DOTDOT, "..", pos);
10799 // TODO check scriptversion?
10800 }
10801 else {
10802 r.seek_cur(1);
10803 return this.token(TOKEN_DOT, ".", pos);
10804 // TODO check scriptversion?
10805 }
10806 }
10807 else if (c == "*") {
10808 r.seek_cur(1);
10809 return this.token(TOKEN_STAR, "*", pos);
10810 }
10811 else if (c == "/") {
10812 r.seek_cur(1);
10813 return this.token(TOKEN_SLASH, "/", pos);
10814 }
10815 else if (c == "%") {
10816 r.seek_cur(1);
10817 return this.token(TOKEN_PERCENT, "%", pos);
10818 }
10819 else if (c == "!") {
10820 r.seek_cur(1);
10821 return this.token(TOKEN_NOT, "!", pos);
10822 }
10823 else if (c == "?") {
10824 r.seek_cur(1);
10825 return this.token(TOKEN_QUESTION, "?", pos);
10826 }
10827 else if (c == ":") {
10828 r.seek_cur(1);
10829 return this.token(TOKEN_COLON, ":", pos);
10830 }
10831 else if (c == "#") {
10832 if (r.p(1) == "{") {
10833 r.seek_cur(2);
10834 return this.token(TOKEN_LITCOPEN, "#{", pos);
10835 }
10836 else {
10837 r.seek_cur(1);
10838 return this.token(TOKEN_SHARP, "#", pos);
10839 }
10840 }
10841 else if (c == "(") {
10842 r.seek_cur(1);
10843 return this.token(TOKEN_POPEN, "(", pos);
10844 }
10845 else if (c == ")") {
10846 r.seek_cur(1);
10847 return this.token(TOKEN_PCLOSE, ")", pos);
10848 }
10849 else if (c == "[") {
10850 r.seek_cur(1);
10851 return this.token(TOKEN_SQOPEN, "[", pos);
10852 }
10853 else if (c == "]") {
10854 r.seek_cur(1);
10855 return this.token(TOKEN_SQCLOSE, "]", pos);
10856 }
10857 else if (c == "{") {
10858 r.seek_cur(1);
10859 return this.token(TOKEN_COPEN, "{", pos);
10860 }
10861 else if (c == "}") {
10862 r.seek_cur(1);
10863 return this.token(TOKEN_CCLOSE, "}", pos);
10864 }
10865 else if (c == ",") {
10866 r.seek_cur(1);
10867 return this.token(TOKEN_COMMA, ",", pos);
10868 }
10869 else if (c == "'") {
10870 r.seek_cur(1);
10871 return this.token(TOKEN_SQUOTE, "'", pos);
10872 }
10873 else if (c == "\"") {
10874 r.seek_cur(1);
10875 return this.token(TOKEN_DQUOTE, "\"", pos);
10876 }
10877 else if (c == "$") {
10878 var s = r.getn(1);
10879 s += r.read_word();
10880 return this.token(TOKEN_ENV, s, pos);
10881 }
10882 else if (c == "@") {
10883 // @<EOL> is treated as @"
10884 return this.token(TOKEN_REG, r.getn(2), pos);
10885 }
10886 else if (c == "&") {
10887 var s = "";
10888 if ((r.p(1) == "g" || r.p(1) == "l") && r.p(2) == ":") {
10889 var s = r.getn(3) + r.read_word();
10890 }
10891 else {
10892 var s = r.getn(1) + r.read_word();
10893 }
10894 return this.token(TOKEN_OPTION, s, pos);
10895 }
10896 else if (c == "=") {
10897 r.seek_cur(1);
10898 return this.token(TOKEN_EQ, "=", pos);
10899 }
10900 else if (c == "|") {
10901 r.seek_cur(1);
10902 return this.token(TOKEN_OR, "|", pos);
10903 }
10904 else if (c == ";") {
10905 r.seek_cur(1);
10906 return this.token(TOKEN_SEMICOLON, ";", pos);
10907 }
10908 else if (c == "`") {
10909 r.seek_cur(1);
10910 return this.token(TOKEN_BACKTICK, "`", pos);
10911 }
10912 else {
10913 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10914 }
10915}
10916
10917ExprTokenizer.prototype.get_sstring = function() {
10918 this.reader.skip_white();
10919 var c = this.reader.p(0);
10920 if (c != "'") {
10921 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10922 }
10923 this.reader.seek_cur(1);
10924 var s = "";
10925 while (TRUE) {
10926 var c = this.reader.p(0);
10927 if (c == "<EOF>" || c == "<EOL>") {
10928 throw Err("unexpected EOL", this.reader.getpos());
10929 }
10930 else if (c == "'") {
10931 this.reader.seek_cur(1);
10932 if (this.reader.p(0) == "'") {
10933 this.reader.seek_cur(1);
10934 s += "''";
10935 }
10936 else {
10937 break;
10938 }
10939 }
10940 else {
10941 this.reader.seek_cur(1);
10942 s += c;
10943 }
10944 }
10945 return s;
10946}
10947
10948ExprTokenizer.prototype.get_dstring = function() {
10949 this.reader.skip_white();
10950 var c = this.reader.p(0);
10951 if (c != "\"") {
10952 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10953 }
10954 this.reader.seek_cur(1);
10955 var s = "";
10956 while (TRUE) {
10957 var c = this.reader.p(0);
10958 if (c == "<EOF>" || c == "<EOL>") {
10959 throw Err("unexpectd EOL", this.reader.getpos());
10960 }
10961 else if (c == "\"") {
10962 this.reader.seek_cur(1);
10963 break;
10964 }
10965 else if (c == "\\") {
10966 this.reader.seek_cur(1);
10967 s += c;
10968 var c = this.reader.p(0);
10969 if (c == "<EOF>" || c == "<EOL>") {
10970 throw Err("ExprTokenizer: unexpected EOL", this.reader.getpos());
10971 }
10972 this.reader.seek_cur(1);
10973 s += c;
10974 }
10975 else {
10976 this.reader.seek_cur(1);
10977 s += c;
10978 }
10979 }
10980 return s;
10981}
10982
10983ExprTokenizer.prototype.parse_dict_literal_key = function() {
10984 this.reader.skip_white();
10985 var c = this.reader.peek();
10986 if (!isalnum(c) && c != "_" && c != "-") {
10987 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10988 }
10989 var node = Node(NODE_STRING);
10990 var s = c;
10991 this.reader.seek_cur(1);
10992 node.pos = this.reader.getpos();
10993 while (TRUE) {
10994 var c = this.reader.p(0);
10995 if (c == "<EOF>" || c == "<EOL>") {
10996 throw Err("unexpectd EOL", this.reader.getpos());
10997 }
10998 if (!isalnum(c) && c != "_" && c != "-") {
10999 break;
11000 }
11001 this.reader.seek_cur(1);
11002 s += c;
11003 }
11004 node.value = "'" + s + "'";
11005 return node;
11006}
11007
11008function ExprParser() { this.__init__.apply(this, arguments); }
11009ExprParser.prototype.__init__ = function(reader) {
11010 this.reader = reader;
11011 this.tokenizer = new ExprTokenizer(reader);
11012}
11013
11014ExprParser.prototype.parse = function() {
11015 return this.parse_expr1();
11016}
11017
11018// expr1: expr2 ? expr1 : expr1
11019ExprParser.prototype.parse_expr1 = function() {
11020 var left = this.parse_expr2();
11021 var pos = this.reader.tell();
11022 var token = this.tokenizer.get();
11023 if (token.type == TOKEN_QUESTION) {
11024 var node = Node(NODE_TERNARY);
11025 node.pos = token.pos;
11026 node.cond = left;
11027 node.left = this.parse_expr1();
11028 var token = this.tokenizer.get();
11029 if (token.type != TOKEN_COLON) {
11030 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11031 }
11032 node.right = this.parse_expr1();
11033 var left = node;
11034 }
11035 else {
11036 this.reader.seek_set(pos);
11037 }
11038 return left;
11039}
11040
11041// expr2: expr3 || expr3 ..
11042ExprParser.prototype.parse_expr2 = function() {
11043 var left = this.parse_expr3();
11044 while (TRUE) {
11045 var pos = this.reader.tell();
11046 var token = this.tokenizer.get();
11047 if (token.type == TOKEN_OROR) {
11048 var node = Node(NODE_OR);
11049 node.pos = token.pos;
11050 node.left = left;
11051 node.right = this.parse_expr3();
11052 var left = node;
11053 }
11054 else {
11055 this.reader.seek_set(pos);
11056 break;
11057 }
11058 }
11059 return left;
11060}
11061
11062// expr3: expr4 && expr4
11063ExprParser.prototype.parse_expr3 = function() {
11064 var left = this.parse_expr4();
11065 while (TRUE) {
11066 var pos = this.reader.tell();
11067 var token = this.tokenizer.get();
11068 if (token.type == TOKEN_ANDAND) {
11069 var node = Node(NODE_AND);
11070 node.pos = token.pos;
11071 node.left = left;
11072 node.right = this.parse_expr4();
11073 var left = node;
11074 }
11075 else {
11076 this.reader.seek_set(pos);
11077 break;
11078 }
11079 }
11080 return left;
11081}
11082
11083// expr4: expr5 == expr5
11084// expr5 != expr5
11085// expr5 > expr5
11086// expr5 >= expr5
11087// expr5 < expr5
11088// expr5 <= expr5
11089// expr5 =~ expr5
11090// expr5 !~ expr5
11091//
11092// expr5 ==? expr5
11093// expr5 ==# expr5
11094// etc.
11095//
11096// expr5 is expr5
11097// expr5 isnot expr5
11098ExprParser.prototype.parse_expr4 = function() {
11099 var left = this.parse_expr5();
11100 var pos = this.reader.tell();
11101 var token = this.tokenizer.get();
11102 if (token.type == TOKEN_EQEQ) {
11103 var node = Node(NODE_EQUAL);
11104 node.pos = token.pos;
11105 node.left = left;
11106 node.right = this.parse_expr5();
11107 var left = node;
11108 }
11109 else if (token.type == TOKEN_EQEQCI) {
11110 var node = Node(NODE_EQUALCI);
11111 node.pos = token.pos;
11112 node.left = left;
11113 node.right = this.parse_expr5();
11114 var left = node;
11115 }
11116 else if (token.type == TOKEN_EQEQCS) {
11117 var node = Node(NODE_EQUALCS);
11118 node.pos = token.pos;
11119 node.left = left;
11120 node.right = this.parse_expr5();
11121 var left = node;
11122 }
11123 else if (token.type == TOKEN_NEQ) {
11124 var node = Node(NODE_NEQUAL);
11125 node.pos = token.pos;
11126 node.left = left;
11127 node.right = this.parse_expr5();
11128 var left = node;
11129 }
11130 else if (token.type == TOKEN_NEQCI) {
11131 var node = Node(NODE_NEQUALCI);
11132 node.pos = token.pos;
11133 node.left = left;
11134 node.right = this.parse_expr5();
11135 var left = node;
11136 }
11137 else if (token.type == TOKEN_NEQCS) {
11138 var node = Node(NODE_NEQUALCS);
11139 node.pos = token.pos;
11140 node.left = left;
11141 node.right = this.parse_expr5();
11142 var left = node;
11143 }
11144 else if (token.type == TOKEN_GT) {
11145 var node = Node(NODE_GREATER);
11146 node.pos = token.pos;
11147 node.left = left;
11148 node.right = this.parse_expr5();
11149 var left = node;
11150 }
11151 else if (token.type == TOKEN_GTCI) {
11152 var node = Node(NODE_GREATERCI);
11153 node.pos = token.pos;
11154 node.left = left;
11155 node.right = this.parse_expr5();
11156 var left = node;
11157 }
11158 else if (token.type == TOKEN_GTCS) {
11159 var node = Node(NODE_GREATERCS);
11160 node.pos = token.pos;
11161 node.left = left;
11162 node.right = this.parse_expr5();
11163 var left = node;
11164 }
11165 else if (token.type == TOKEN_GTEQ) {
11166 var node = Node(NODE_GEQUAL);
11167 node.pos = token.pos;
11168 node.left = left;
11169 node.right = this.parse_expr5();
11170 var left = node;
11171 }
11172 else if (token.type == TOKEN_GTEQCI) {
11173 var node = Node(NODE_GEQUALCI);
11174 node.pos = token.pos;
11175 node.left = left;
11176 node.right = this.parse_expr5();
11177 var left = node;
11178 }
11179 else if (token.type == TOKEN_GTEQCS) {
11180 var node = Node(NODE_GEQUALCS);
11181 node.pos = token.pos;
11182 node.left = left;
11183 node.right = this.parse_expr5();
11184 var left = node;
11185 }
11186 else if (token.type == TOKEN_LT) {
11187 var node = Node(NODE_SMALLER);
11188 node.pos = token.pos;
11189 node.left = left;
11190 node.right = this.parse_expr5();
11191 var left = node;
11192 }
11193 else if (token.type == TOKEN_LTCI) {
11194 var node = Node(NODE_SMALLERCI);
11195 node.pos = token.pos;
11196 node.left = left;
11197 node.right = this.parse_expr5();
11198 var left = node;
11199 }
11200 else if (token.type == TOKEN_LTCS) {
11201 var node = Node(NODE_SMALLERCS);
11202 node.pos = token.pos;
11203 node.left = left;
11204 node.right = this.parse_expr5();
11205 var left = node;
11206 }
11207 else if (token.type == TOKEN_LTEQ) {
11208 var node = Node(NODE_SEQUAL);
11209 node.pos = token.pos;
11210 node.left = left;
11211 node.right = this.parse_expr5();
11212 var left = node;
11213 }
11214 else if (token.type == TOKEN_LTEQCI) {
11215 var node = Node(NODE_SEQUALCI);
11216 node.pos = token.pos;
11217 node.left = left;
11218 node.right = this.parse_expr5();
11219 var left = node;
11220 }
11221 else if (token.type == TOKEN_LTEQCS) {
11222 var node = Node(NODE_SEQUALCS);
11223 node.pos = token.pos;
11224 node.left = left;
11225 node.right = this.parse_expr5();
11226 var left = node;
11227 }
11228 else if (token.type == TOKEN_MATCH) {
11229 var node = Node(NODE_MATCH);
11230 node.pos = token.pos;
11231 node.left = left;
11232 node.right = this.parse_expr5();
11233 var left = node;
11234 }
11235 else if (token.type == TOKEN_MATCHCI) {
11236 var node = Node(NODE_MATCHCI);
11237 node.pos = token.pos;
11238 node.left = left;
11239 node.right = this.parse_expr5();
11240 var left = node;
11241 }
11242 else if (token.type == TOKEN_MATCHCS) {
11243 var node = Node(NODE_MATCHCS);
11244 node.pos = token.pos;
11245 node.left = left;
11246 node.right = this.parse_expr5();
11247 var left = node;
11248 }
11249 else if (token.type == TOKEN_NOMATCH) {
11250 var node = Node(NODE_NOMATCH);
11251 node.pos = token.pos;
11252 node.left = left;
11253 node.right = this.parse_expr5();
11254 var left = node;
11255 }
11256 else if (token.type == TOKEN_NOMATCHCI) {
11257 var node = Node(NODE_NOMATCHCI);
11258 node.pos = token.pos;
11259 node.left = left;
11260 node.right = this.parse_expr5();
11261 var left = node;
11262 }
11263 else if (token.type == TOKEN_NOMATCHCS) {
11264 var node = Node(NODE_NOMATCHCS);
11265 node.pos = token.pos;
11266 node.left = left;
11267 node.right = this.parse_expr5();
11268 var left = node;
11269 }
11270 else if (token.type == TOKEN_IS) {
11271 var node = Node(NODE_IS);
11272 node.pos = token.pos;
11273 node.left = left;
11274 node.right = this.parse_expr5();
11275 var left = node;
11276 }
11277 else if (token.type == TOKEN_ISCI) {
11278 var node = Node(NODE_ISCI);
11279 node.pos = token.pos;
11280 node.left = left;
11281 node.right = this.parse_expr5();
11282 var left = node;
11283 }
11284 else if (token.type == TOKEN_ISCS) {
11285 var node = Node(NODE_ISCS);
11286 node.pos = token.pos;
11287 node.left = left;
11288 node.right = this.parse_expr5();
11289 var left = node;
11290 }
11291 else if (token.type == TOKEN_ISNOT) {
11292 var node = Node(NODE_ISNOT);
11293 node.pos = token.pos;
11294 node.left = left;
11295 node.right = this.parse_expr5();
11296 var left = node;
11297 }
11298 else if (token.type == TOKEN_ISNOTCI) {
11299 var node = Node(NODE_ISNOTCI);
11300 node.pos = token.pos;
11301 node.left = left;
11302 node.right = this.parse_expr5();
11303 var left = node;
11304 }
11305 else if (token.type == TOKEN_ISNOTCS) {
11306 var node = Node(NODE_ISNOTCS);
11307 node.pos = token.pos;
11308 node.left = left;
11309 node.right = this.parse_expr5();
11310 var left = node;
11311 }
11312 else {
11313 this.reader.seek_set(pos);
11314 }
11315 return left;
11316}
11317
11318// expr5: expr6 + expr6 ..
11319// expr6 - expr6 ..
11320// expr6 . expr6 ..
11321// expr6 .. expr6 ..
11322ExprParser.prototype.parse_expr5 = function() {
11323 var left = this.parse_expr6();
11324 while (TRUE) {
11325 var pos = this.reader.tell();
11326 var token = this.tokenizer.get();
11327 if (token.type == TOKEN_PLUS) {
11328 var node = Node(NODE_ADD);
11329 node.pos = token.pos;
11330 node.left = left;
11331 node.right = this.parse_expr6();
11332 var left = node;
11333 }
11334 else if (token.type == TOKEN_MINUS) {
11335 var node = Node(NODE_SUBTRACT);
11336 node.pos = token.pos;
11337 node.left = left;
11338 node.right = this.parse_expr6();
11339 var left = node;
11340 }
11341 else if (token.type == TOKEN_DOTDOT) {
11342 // TODO check scriptversion?
11343 var node = Node(NODE_CONCAT);
11344 node.pos = token.pos;
11345 node.left = left;
11346 node.right = this.parse_expr6();
11347 var left = node;
11348 }
11349 else if (token.type == TOKEN_DOT) {
11350 // TODO check scriptversion?
11351 var node = Node(NODE_CONCAT);
11352 node.pos = token.pos;
11353 node.left = left;
11354 node.right = this.parse_expr6();
11355 var left = node;
11356 }
11357 else {
11358 this.reader.seek_set(pos);
11359 break;
11360 }
11361 }
11362 return left;
11363}
11364
11365// expr6: expr7 * expr7 ..
11366// expr7 / expr7 ..
11367// expr7 % expr7 ..
11368ExprParser.prototype.parse_expr6 = function() {
11369 var left = this.parse_expr7();
11370 while (TRUE) {
11371 var pos = this.reader.tell();
11372 var token = this.tokenizer.get();
11373 if (token.type == TOKEN_STAR) {
11374 var node = Node(NODE_MULTIPLY);
11375 node.pos = token.pos;
11376 node.left = left;
11377 node.right = this.parse_expr7();
11378 var left = node;
11379 }
11380 else if (token.type == TOKEN_SLASH) {
11381 var node = Node(NODE_DIVIDE);
11382 node.pos = token.pos;
11383 node.left = left;
11384 node.right = this.parse_expr7();
11385 var left = node;
11386 }
11387 else if (token.type == TOKEN_PERCENT) {
11388 var node = Node(NODE_REMAINDER);
11389 node.pos = token.pos;
11390 node.left = left;
11391 node.right = this.parse_expr7();
11392 var left = node;
11393 }
11394 else {
11395 this.reader.seek_set(pos);
11396 break;
11397 }
11398 }
11399 return left;
11400}
11401
11402// expr7: ! expr7
11403// - expr7
11404// + expr7
11405ExprParser.prototype.parse_expr7 = function() {
11406 var pos = this.reader.tell();
11407 var token = this.tokenizer.get();
11408 if (token.type == TOKEN_NOT) {
11409 var node = Node(NODE_NOT);
11410 node.pos = token.pos;
11411 node.left = this.parse_expr7();
11412 return node;
11413 }
11414 else if (token.type == TOKEN_MINUS) {
11415 var node = Node(NODE_MINUS);
11416 node.pos = token.pos;
11417 node.left = this.parse_expr7();
11418 return node;
11419 }
11420 else if (token.type == TOKEN_PLUS) {
11421 var node = Node(NODE_PLUS);
11422 node.pos = token.pos;
11423 node.left = this.parse_expr7();
11424 return node;
11425 }
11426 else {
11427 this.reader.seek_set(pos);
11428 var node = this.parse_expr8();
11429 return node;
11430 }
11431}
11432
11433// expr8: expr8[expr1]
11434// expr8[expr1 : expr1]
11435// expr8.name
11436// expr8->name(expr1, ...)
11437// expr8->s:user_func(expr1, ...)
11438// expr8->{lambda}(expr1, ...)
11439// expr8(expr1, ...)
11440ExprParser.prototype.parse_expr8 = function() {
11441 var left = this.parse_expr9();
11442 while (TRUE) {
11443 var pos = this.reader.tell();
11444 var c = this.reader.peek();
11445 var token = this.tokenizer.get();
11446 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11447 var npos = token.pos;
11448 if (this.tokenizer.peek().type == TOKEN_COLON) {
11449 this.tokenizer.get();
11450 var node = Node(NODE_SLICE);
11451 node.pos = npos;
11452 node.left = left;
11453 node.rlist = [NIL, NIL];
11454 var token = this.tokenizer.peek();
11455 if (token.type != TOKEN_SQCLOSE) {
11456 node.rlist[1] = this.parse_expr1();
11457 }
11458 var token = this.tokenizer.get();
11459 if (token.type != TOKEN_SQCLOSE) {
11460 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11461 }
11462 var left = node;
11463 }
11464 else {
11465 var right = this.parse_expr1();
11466 if (this.tokenizer.peek().type == TOKEN_COLON) {
11467 this.tokenizer.get();
11468 var node = Node(NODE_SLICE);
11469 node.pos = npos;
11470 node.left = left;
11471 node.rlist = [right, NIL];
11472 var token = this.tokenizer.peek();
11473 if (token.type != TOKEN_SQCLOSE) {
11474 node.rlist[1] = this.parse_expr1();
11475 }
11476 var token = this.tokenizer.get();
11477 if (token.type != TOKEN_SQCLOSE) {
11478 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11479 }
11480 var left = node;
11481 }
11482 else {
11483 var node = Node(NODE_SUBSCRIPT);
11484 node.pos = npos;
11485 node.left = left;
11486 node.right = right;
11487 var token = this.tokenizer.get();
11488 if (token.type != TOKEN_SQCLOSE) {
11489 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11490 }
11491 var left = node;
11492 }
11493 }
11494 delete node;
11495 }
11496 else if (token.type == TOKEN_ARROW) {
11497 var funcname_or_lambda = this.parse_expr9();
11498 var token = this.tokenizer.get();
11499 if (token.type != TOKEN_POPEN) {
11500 throw Err("E107: Missing parentheses: lambda", token.pos);
11501 }
11502 var right = Node(NODE_CALL);
11503 right.pos = token.pos;
11504 right.left = funcname_or_lambda;
11505 right.rlist = this.parse_rlist();
11506 var node = Node(NODE_METHOD);
11507 node.pos = token.pos;
11508 node.left = left;
11509 node.right = right;
11510 var left = node;
11511 delete node;
11512 }
11513 else if (token.type == TOKEN_POPEN) {
11514 var node = Node(NODE_CALL);
11515 node.pos = token.pos;
11516 node.left = left;
11517 node.rlist = this.parse_rlist();
11518 var left = node;
11519 delete node;
11520 }
11521 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11522 // TODO check scriptversion?
11523 var node = this.parse_dot(token, left);
11524 if (node === NIL) {
11525 this.reader.seek_set(pos);
11526 break;
11527 }
11528 var left = node;
11529 delete node;
11530 }
11531 else {
11532 this.reader.seek_set(pos);
11533 break;
11534 }
11535 }
11536 return left;
11537}
11538
11539ExprParser.prototype.parse_rlist = function() {
11540 var rlist = [];
11541 var token = this.tokenizer.peek();
11542 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11543 this.tokenizer.get();
11544 }
11545 else {
11546 while (TRUE) {
11547 viml_add(rlist, this.parse_expr1());
11548 var token = this.tokenizer.get();
11549 if (token.type == TOKEN_COMMA) {
11550 // XXX: Vim allows foo(a, b, ). Lint should warn it.
11551 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11552 this.tokenizer.get();
11553 break;
11554 }
11555 }
11556 else if (token.type == TOKEN_PCLOSE) {
11557 break;
11558 }
11559 else {
11560 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11561 }
11562 }
11563 }
11564 if (viml_len(rlist) > MAX_FUNC_ARGS) {
11565 // TODO: funcname E740: Too many arguments for function: %s
11566 throw Err("E740: Too many arguments for function", token.pos);
11567 }
11568 return rlist;
11569}
11570
11571// expr9: number
11572// "string"
11573// 'string'
11574// [expr1, ...]
11575// {expr1: expr1, ...}
11576// #{literal_key1: expr1, ...}
11577// {args -> expr1}
11578// &option
11579// (expr1)
11580// variable
11581// var{ria}ble
11582// $VAR
11583// @r
11584// function(expr1, ...)
11585// func{ti}on(expr1, ...)
11586ExprParser.prototype.parse_expr9 = function() {
11587 var pos = this.reader.tell();
11588 var token = this.tokenizer.get();
11589 var node = Node(-1);
11590 if (token.type == TOKEN_NUMBER) {
11591 var node = Node(NODE_NUMBER);
11592 node.pos = token.pos;
11593 node.value = token.value;
11594 }
11595 else if (token.type == TOKEN_BLOB) {
11596 var node = Node(NODE_BLOB);
11597 node.pos = token.pos;
11598 node.value = token.value;
11599 }
11600 else if (token.type == TOKEN_DQUOTE) {
11601 this.reader.seek_set(pos);
11602 var node = Node(NODE_STRING);
11603 node.pos = token.pos;
11604 node.value = "\"" + this.tokenizer.get_dstring() + "\"";
11605 }
11606 else if (token.type == TOKEN_SQUOTE) {
11607 this.reader.seek_set(pos);
11608 var node = Node(NODE_STRING);
11609 node.pos = token.pos;
11610 node.value = "'" + this.tokenizer.get_sstring() + "'";
11611 }
11612 else if (token.type == TOKEN_SQOPEN) {
11613 var node = Node(NODE_LIST);
11614 node.pos = token.pos;
11615 node.value = [];
11616 var token = this.tokenizer.peek();
11617 if (token.type == TOKEN_SQCLOSE) {
11618 this.tokenizer.get();
11619 }
11620 else {
11621 while (TRUE) {
11622 viml_add(node.value, this.parse_expr1());
11623 var token = this.tokenizer.peek();
11624 if (token.type == TOKEN_COMMA) {
11625 this.tokenizer.get();
11626 if (this.tokenizer.peek().type == TOKEN_SQCLOSE) {
11627 this.tokenizer.get();
11628 break;
11629 }
11630 }
11631 else if (token.type == TOKEN_SQCLOSE) {
11632 this.tokenizer.get();
11633 break;
11634 }
11635 else {
11636 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11637 }
11638 }
11639 }
11640 }
11641 else if (token.type == TOKEN_COPEN || token.type == TOKEN_LITCOPEN) {
11642 var is_litdict = token.type == TOKEN_LITCOPEN;
11643 var savepos = this.reader.tell();
11644 var nodepos = token.pos;
11645 var token = this.tokenizer.get();
11646 var lambda = token.type == TOKEN_ARROW;
11647 if (!lambda && !(token.type == TOKEN_SQUOTE || token.type == TOKEN_DQUOTE)) {
11648 // if the token type is stirng, we cannot peek next token and we can
11649 // assume it's not lambda.
11650 var token2 = this.tokenizer.peek();
11651 var lambda = token2.type == TOKEN_ARROW || token2.type == TOKEN_COMMA;
11652 }
11653 // fallback to dict or {expr} if true
11654 var fallback = FALSE;
11655 if (lambda) {
11656 // lambda {token,...} {->...} {token->...}
11657 var node = Node(NODE_LAMBDA);
11658 node.pos = nodepos;
11659 node.rlist = [];
11660 var named = {};
11661 while (TRUE) {
11662 if (token.type == TOKEN_ARROW) {
11663 break;
11664 }
11665 else if (token.type == TOKEN_IDENTIFIER) {
11666 if (!isargname(token.value)) {
11667 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
11668 }
11669 else if (viml_has_key(named, token.value)) {
11670 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
11671 }
11672 named[token.value] = 1;
11673 var varnode = Node(NODE_IDENTIFIER);
11674 varnode.pos = token.pos;
11675 varnode.value = token.value;
11676 // XXX: Vim doesn't skip white space before comma. {a ,b -> ...} => E475
11677 if (iswhite(this.reader.p(0)) && this.tokenizer.peek().type == TOKEN_COMMA) {
11678 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
11679 }
11680 var token = this.tokenizer.get();
11681 viml_add(node.rlist, varnode);
11682 if (token.type == TOKEN_COMMA) {
11683 // XXX: Vim allows last comma. {a, b, -> ...} => OK
11684 var token = this.tokenizer.peek();
11685 if (token.type == TOKEN_ARROW) {
11686 this.tokenizer.get();
11687 break;
11688 }
11689 }
11690 else if (token.type == TOKEN_ARROW) {
11691 break;
11692 }
11693 else {
11694 throw Err(viml_printf("unexpected token: %s, type: %d", token.value, token.type), token.pos);
11695 }
11696 }
11697 else if (token.type == TOKEN_DOTDOTDOT) {
11698 var varnode = Node(NODE_IDENTIFIER);
11699 varnode.pos = token.pos;
11700 varnode.value = token.value;
11701 viml_add(node.rlist, varnode);
11702 var token = this.tokenizer.peek();
11703 if (token.type == TOKEN_ARROW) {
11704 this.tokenizer.get();
11705 break;
11706 }
11707 else {
11708 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11709 }
11710 }
11711 else {
11712 var fallback = TRUE;
11713 break;
11714 }
11715 var token = this.tokenizer.get();
11716 }
11717 if (!fallback) {
11718 node.left = this.parse_expr1();
11719 var token = this.tokenizer.get();
11720 if (token.type != TOKEN_CCLOSE) {
11721 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11722 }
11723 return node;
11724 }
11725 }
11726 // dict
11727 var node = Node(NODE_DICT);
11728 node.pos = nodepos;
11729 node.value = [];
11730 this.reader.seek_set(savepos);
11731 var token = this.tokenizer.peek();
11732 if (token.type == TOKEN_CCLOSE) {
11733 this.tokenizer.get();
11734 return node;
11735 }
11736 while (1) {
11737 var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
11738 var token = this.tokenizer.get();
11739 if (token.type == TOKEN_CCLOSE) {
11740 if (!viml_empty(node.value)) {
11741 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11742 }
11743 this.reader.seek_set(pos);
11744 var node = this.parse_identifier();
11745 break;
11746 }
11747 if (token.type != TOKEN_COLON) {
11748 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11749 }
11750 var val = this.parse_expr1();
11751 viml_add(node.value, [key, val]);
11752 var token = this.tokenizer.get();
11753 if (token.type == TOKEN_COMMA) {
11754 if (this.tokenizer.peek().type == TOKEN_CCLOSE) {
11755 this.tokenizer.get();
11756 break;
11757 }
11758 }
11759 else if (token.type == TOKEN_CCLOSE) {
11760 break;
11761 }
11762 else {
11763 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11764 }
11765 }
11766 return node;
11767 }
11768 else if (token.type == TOKEN_POPEN) {
11769 var node = this.parse_expr1();
11770 var token = this.tokenizer.get();
11771 if (token.type != TOKEN_PCLOSE) {
11772 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11773 }
11774 }
11775 else if (token.type == TOKEN_OPTION) {
11776 var node = Node(NODE_OPTION);
11777 node.pos = token.pos;
11778 node.value = token.value;
11779 }
11780 else if (token.type == TOKEN_IDENTIFIER) {
11781 this.reader.seek_set(pos);
11782 var node = this.parse_identifier();
11783 }
11784 else if (FALSE && (token.type == TOKEN_COLON || token.type == TOKEN_SHARP)) {
11785 // XXX: no parse error but invalid expression
11786 this.reader.seek_set(pos);
11787 var node = this.parse_identifier();
11788 }
11789 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
11790 this.reader.seek_set(pos);
11791 var node = this.parse_identifier();
11792 }
11793 else if (token.type == TOKEN_IS || token.type == TOKEN_ISCS || token.type == TOKEN_ISNOT || token.type == TOKEN_ISNOTCS) {
11794 this.reader.seek_set(pos);
11795 var node = this.parse_identifier();
11796 }
11797 else if (token.type == TOKEN_ENV) {
11798 var node = Node(NODE_ENV);
11799 node.pos = token.pos;
11800 node.value = token.value;
11801 }
11802 else if (token.type == TOKEN_REG) {
11803 var node = Node(NODE_REG);
11804 node.pos = token.pos;
11805 node.value = token.value;
11806 }
11807 else {
11808 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11809 }
11810 return node;
11811}
11812
11813// SUBSCRIPT or CONCAT
11814// dict "." [0-9A-Za-z_]+ => (subscript dict key)
11815// str "." expr6 => (concat str expr6)
11816ExprParser.prototype.parse_dot = function(token, left) {
11817 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) {
11818 return NIL;
11819 }
11820 if (!iswordc(this.reader.p(0))) {
11821 return NIL;
11822 }
11823 var pos = this.reader.getpos();
11824 var name = this.reader.read_word();
11825 if (isnamec(this.reader.p(0))) {
11826 // XXX: foo is str => ok, foo is obj => invalid expression
11827 // foo.s:bar or foo.bar#baz
11828 return NIL;
11829 }
11830 var node = Node(NODE_DOT);
11831 node.pos = token.pos;
11832 node.left = left;
11833 node.right = Node(NODE_IDENTIFIER);
11834 node.right.pos = pos;
11835 node.right.value = name;
11836 return node;
11837}
11838
11839// CONCAT
11840// str ".." expr6 => (concat str expr6)
11841ExprParser.prototype.parse_concat = function(token, left) {
11842 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) {
11843 return NIL;
11844 }
11845 if (!iswordc(this.reader.p(0))) {
11846 return NIL;
11847 }
11848 var pos = this.reader.getpos();
11849 var name = this.reader.read_word();
11850 if (isnamec(this.reader.p(0))) {
11851 // XXX: foo is str => ok, foo is obj => invalid expression
11852 // foo.s:bar or foo.bar#baz
11853 return NIL;
11854 }
11855 var node = Node(NODE_CONCAT);
11856 node.pos = token.pos;
11857 node.left = left;
11858 node.right = Node(NODE_IDENTIFIER);
11859 node.right.pos = pos;
11860 node.right.value = name;
11861 return node;
11862}
11863
11864ExprParser.prototype.parse_identifier = function() {
11865 this.reader.skip_white();
11866 var npos = this.reader.getpos();
11867 var curly_parts = this.parse_curly_parts();
11868 if (viml_len(curly_parts) == 1 && curly_parts[0].type == NODE_CURLYNAMEPART) {
11869 var node = Node(NODE_IDENTIFIER);
11870 node.pos = npos;
11871 node.value = curly_parts[0].value;
11872 return node;
11873 }
11874 else {
11875 var node = Node(NODE_CURLYNAME);
11876 node.pos = npos;
11877 node.value = curly_parts;
11878 return node;
11879 }
11880}
11881
11882ExprParser.prototype.parse_curly_parts = function() {
11883 var curly_parts = [];
11884 var c = this.reader.peek();
11885 var pos = this.reader.getpos();
11886 if (c == "<" && viml_equalci(this.reader.peekn(5), "<SID>")) {
11887 var name = this.reader.getn(5);
11888 var node = Node(NODE_CURLYNAMEPART);
11889 node.curly = FALSE;
11890 // Keep backword compatibility for the curly attribute
11891 node.pos = pos;
11892 node.value = name;
11893 viml_add(curly_parts, node);
11894 }
11895 while (TRUE) {
11896 var c = this.reader.peek();
11897 if (isnamec(c)) {
11898 var pos = this.reader.getpos();
11899 var name = this.reader.read_name();
11900 var node = Node(NODE_CURLYNAMEPART);
11901 node.curly = FALSE;
11902 // Keep backword compatibility for the curly attribute
11903 node.pos = pos;
11904 node.value = name;
11905 viml_add(curly_parts, node);
11906 }
11907 else if (c == "{") {
11908 this.reader.get();
11909 var pos = this.reader.getpos();
11910 var node = Node(NODE_CURLYNAMEEXPR);
11911 node.curly = TRUE;
11912 // Keep backword compatibility for the curly attribute
11913 node.pos = pos;
11914 node.value = this.parse_expr1();
11915 viml_add(curly_parts, node);
11916 this.reader.skip_white();
11917 var c = this.reader.p(0);
11918 if (c != "}") {
11919 throw Err(viml_printf("unexpected token: %s", c), this.reader.getpos());
11920 }
11921 this.reader.seek_cur(1);
11922 }
11923 else {
11924 break;
11925 }
11926 }
11927 return curly_parts;
11928}
11929
11930function LvalueParser() { ExprParser.apply(this, arguments); this.__init__.apply(this, arguments); }
11931LvalueParser.prototype = Object.create(ExprParser.prototype);
11932LvalueParser.prototype.parse = function() {
11933 return this.parse_lv8();
11934}
11935
11936// expr8: expr8[expr1]
11937// expr8[expr1 : expr1]
11938// expr8.name
11939LvalueParser.prototype.parse_lv8 = function() {
11940 var left = this.parse_lv9();
11941 while (TRUE) {
11942 var pos = this.reader.tell();
11943 var c = this.reader.peek();
11944 var token = this.tokenizer.get();
11945 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11946 var npos = token.pos;
11947 var node = Node(-1);
11948 if (this.tokenizer.peek().type == TOKEN_COLON) {
11949 this.tokenizer.get();
11950 var node = Node(NODE_SLICE);
11951 node.pos = npos;
11952 node.left = left;
11953 node.rlist = [NIL, NIL];
11954 var token = this.tokenizer.peek();
11955 if (token.type != TOKEN_SQCLOSE) {
11956 node.rlist[1] = this.parse_expr1();
11957 }
11958 var token = this.tokenizer.get();
11959 if (token.type != TOKEN_SQCLOSE) {
11960 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11961 }
11962 }
11963 else {
11964 var right = this.parse_expr1();
11965 if (this.tokenizer.peek().type == TOKEN_COLON) {
11966 this.tokenizer.get();
11967 var node = Node(NODE_SLICE);
11968 node.pos = npos;
11969 node.left = left;
11970 node.rlist = [right, NIL];
11971 var token = this.tokenizer.peek();
11972 if (token.type != TOKEN_SQCLOSE) {
11973 node.rlist[1] = this.parse_expr1();
11974 }
11975 var token = this.tokenizer.get();
11976 if (token.type != TOKEN_SQCLOSE) {
11977 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11978 }
11979 }
11980 else {
11981 var node = Node(NODE_SUBSCRIPT);
11982 node.pos = npos;
11983 node.left = left;
11984 node.right = right;
11985 var token = this.tokenizer.get();
11986 if (token.type != TOKEN_SQCLOSE) {
11987 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11988 }
11989 }
11990 }
11991 var left = node;
11992 delete node;
11993 }
11994 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11995 var node = this.parse_dot(token, left);
11996 if (node === NIL) {
11997 this.reader.seek_set(pos);
11998 break;
11999 }
12000 var left = node;
12001 delete node;
12002 }
12003 else {
12004 this.reader.seek_set(pos);
12005 break;
12006 }
12007 }
12008 return left;
12009}
12010
12011// expr9: &option
12012// variable
12013// var{ria}ble
12014// $VAR
12015// @r
12016LvalueParser.prototype.parse_lv9 = function() {
12017 var pos = this.reader.tell();
12018 var token = this.tokenizer.get();
12019 var node = Node(-1);
12020 if (token.type == TOKEN_COPEN) {
12021 this.reader.seek_set(pos);
12022 var node = this.parse_identifier();
12023 }
12024 else if (token.type == TOKEN_OPTION) {
12025 var node = Node(NODE_OPTION);
12026 node.pos = token.pos;
12027 node.value = token.value;
12028 }
12029 else if (token.type == TOKEN_IDENTIFIER) {
12030 this.reader.seek_set(pos);
12031 var node = this.parse_identifier();
12032 }
12033 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
12034 this.reader.seek_set(pos);
12035 var node = this.parse_identifier();
12036 }
12037 else if (token.type == TOKEN_ENV) {
12038 var node = Node(NODE_ENV);
12039 node.pos = token.pos;
12040 node.value = token.value;
12041 }
12042 else if (token.type == TOKEN_REG) {
12043 var node = Node(NODE_REG);
12044 node.pos = token.pos;
12045 node.pos = token.pos;
12046 node.value = token.value;
12047 }
12048 else {
12049 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
12050 }
12051 return node;
12052}
12053
12054function StringReader() { this.__init__.apply(this, arguments); }
12055StringReader.prototype.__init__ = function(lines) {
12056 this.buf = [];
12057 this.pos = [];
12058 var lnum = 0;
12059 var offset = 0;
12060 while (lnum < viml_len(lines)) {
12061 var col = 0;
12062 var __c7 = viml_split(lines[lnum], "\\zs");
12063 for (var __i7 = 0; __i7 < __c7.length; ++__i7) {
12064 var c = __c7[__i7];
12065 viml_add(this.buf, c);
12066 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12067 col += viml_len(c);
12068 offset += viml_len(c);
12069 }
12070 while (lnum + 1 < viml_len(lines) && viml_eqregh(lines[lnum + 1], "^\\s*\\\\")) {
12071 var skip = TRUE;
12072 var col = 0;
12073 var __c8 = viml_split(lines[lnum + 1], "\\zs");
12074 for (var __i8 = 0; __i8 < __c8.length; ++__i8) {
12075 var c = __c8[__i8];
12076 if (skip) {
12077 if (c == "\\") {
12078 var skip = FALSE;
12079 }
12080 }
12081 else {
12082 viml_add(this.buf, c);
12083 viml_add(this.pos, [lnum + 2, col + 1, offset]);
12084 }
12085 col += viml_len(c);
12086 offset += viml_len(c);
12087 }
12088 lnum += 1;
12089 offset += 1;
12090 }
12091 viml_add(this.buf, "<EOL>");
12092 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12093 lnum += 1;
12094 offset += 1;
12095 }
12096 // for <EOF>
12097 viml_add(this.pos, [lnum + 1, 0, offset]);
12098 this.i = 0;
12099}
12100
12101StringReader.prototype.eof = function() {
12102 return this.i >= viml_len(this.buf);
12103}
12104
12105StringReader.prototype.tell = function() {
12106 return this.i;
12107}
12108
12109StringReader.prototype.seek_set = function(i) {
12110 this.i = i;
12111}
12112
12113StringReader.prototype.seek_cur = function(i) {
12114 this.i = this.i + i;
12115}
12116
12117StringReader.prototype.seek_end = function(i) {
12118 this.i = viml_len(this.buf) + i;
12119}
12120
12121StringReader.prototype.p = function(i) {
12122 if (this.i >= viml_len(this.buf)) {
12123 return "<EOF>";
12124 }
12125 return this.buf[this.i + i];
12126}
12127
12128StringReader.prototype.peek = function() {
12129 if (this.i >= viml_len(this.buf)) {
12130 return "<EOF>";
12131 }
12132 return this.buf[this.i];
12133}
12134
12135StringReader.prototype.get = function() {
12136 if (this.i >= viml_len(this.buf)) {
12137 return "<EOF>";
12138 }
12139 this.i += 1;
12140 return this.buf[this.i - 1];
12141}
12142
12143StringReader.prototype.peekn = function(n) {
12144 var pos = this.tell();
12145 var r = this.getn(n);
12146 this.seek_set(pos);
12147 return r;
12148}
12149
12150StringReader.prototype.getn = function(n) {
12151 var r = "";
12152 var j = 0;
12153 while (this.i < viml_len(this.buf) && (n < 0 || j < n)) {
12154 var c = this.buf[this.i];
12155 if (c == "<EOL>") {
12156 break;
12157 }
12158 r += c;
12159 this.i += 1;
12160 j += 1;
12161 }
12162 return r;
12163}
12164
12165StringReader.prototype.peekline = function() {
12166 return this.peekn(-1);
12167}
12168
12169StringReader.prototype.readline = function() {
12170 var r = this.getn(-1);
12171 this.get();
12172 return r;
12173}
12174
12175StringReader.prototype.getstr = function(begin, end) {
12176 var r = "";
12177 var __c9 = viml_range(begin.i, end.i - 1);
12178 for (var __i9 = 0; __i9 < __c9.length; ++__i9) {
12179 var i = __c9[__i9];
12180 if (i >= viml_len(this.buf)) {
12181 break;
12182 }
12183 var c = this.buf[i];
12184 if (c == "<EOL>") {
12185 var c = "\n";
12186 }
12187 r += c;
12188 }
12189 return r;
12190}
12191
12192StringReader.prototype.getpos = function() {
12193 var __tmp = this.pos[this.i];
12194 var lnum = __tmp[0];
12195 var col = __tmp[1];
12196 var offset = __tmp[2];
12197 return {"i":this.i, "lnum":lnum, "col":col, "offset":offset};
12198}
12199
12200StringReader.prototype.setpos = function(pos) {
12201 this.i = pos.i;
12202}
12203
12204StringReader.prototype.read_alpha = function() {
12205 var r = "";
12206 while (isalpha(this.peekn(1))) {
12207 r += this.getn(1);
12208 }
12209 return r;
12210}
12211
12212StringReader.prototype.read_alnum = function() {
12213 var r = "";
12214 while (isalnum(this.peekn(1))) {
12215 r += this.getn(1);
12216 }
12217 return r;
12218}
12219
12220StringReader.prototype.read_digit = function() {
12221 var r = "";
12222 while (isdigit(this.peekn(1))) {
12223 r += this.getn(1);
12224 }
12225 return r;
12226}
12227
12228StringReader.prototype.read_odigit = function() {
12229 var r = "";
12230 while (isodigit(this.peekn(1))) {
12231 r += this.getn(1);
12232 }
12233 return r;
12234}
12235
12236StringReader.prototype.read_blob = function() {
12237 var r = "";
12238 while (1) {
12239 var s = this.peekn(2);
12240 if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
12241 r += this.getn(2);
12242 }
12243 else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
12244 r += this.getn(1);
12245 }
12246 else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
12247 throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
12248 }
12249 else {
12250 break;
12251 }
12252 }
12253 return r;
12254}
12255
12256StringReader.prototype.read_xdigit = function() {
12257 var r = "";
12258 while (isxdigit(this.peekn(1))) {
12259 r += this.getn(1);
12260 }
12261 return r;
12262}
12263
12264StringReader.prototype.read_bdigit = function() {
12265 var r = "";
12266 while (this.peekn(1) == "0" || this.peekn(1) == "1") {
12267 r += this.getn(1);
12268 }
12269 return r;
12270}
12271
12272StringReader.prototype.read_integer = function() {
12273 var r = "";
12274 var c = this.peekn(1);
12275 if (c == "-" || c == "+") {
12276 var r = this.getn(1);
12277 }
12278 return r + this.read_digit();
12279}
12280
12281StringReader.prototype.read_word = function() {
12282 var r = "";
12283 while (iswordc(this.peekn(1))) {
12284 r += this.getn(1);
12285 }
12286 return r;
12287}
12288
12289StringReader.prototype.read_white = function() {
12290 var r = "";
12291 while (iswhite(this.peekn(1))) {
12292 r += this.getn(1);
12293 }
12294 return r;
12295}
12296
12297StringReader.prototype.read_nonwhite = function() {
12298 var r = "";
12299 var ch = this.peekn(1);
12300 while (!iswhite(ch) && ch != "") {
12301 r += this.getn(1);
12302 var ch = this.peekn(1);
12303 }
12304 return r;
12305}
12306
12307StringReader.prototype.read_name = function() {
12308 var r = "";
12309 while (isnamec(this.peekn(1))) {
12310 r += this.getn(1);
12311 }
12312 return r;
12313}
12314
12315StringReader.prototype.skip_white = function() {
12316 while (iswhite(this.peekn(1))) {
12317 this.seek_cur(1);
12318 }
12319}
12320
12321StringReader.prototype.skip_white_and_colon = function() {
12322 while (TRUE) {
12323 var c = this.peekn(1);
12324 if (!iswhite(c) && c != ":") {
12325 break;
12326 }
12327 this.seek_cur(1);
12328 }
12329}
12330
12331function Compiler() { this.__init__.apply(this, arguments); }
12332Compiler.prototype.__init__ = function() {
12333 this.indent = [""];
12334 this.lines = [];
12335}
12336
12337Compiler.prototype.out = function() {
12338 var a000 = Array.prototype.slice.call(arguments, 0);
12339 if (viml_len(a000) == 1) {
12340 if (a000[0][0] == ")") {
12341 this.lines[this.lines.length - 1] += a000[0];
12342 }
12343 else {
12344 viml_add(this.lines, this.indent[0] + a000[0]);
12345 }
12346 }
12347 else {
12348 viml_add(this.lines, this.indent[0] + viml_printf.apply(null, a000));
12349 }
12350}
12351
12352Compiler.prototype.incindent = function(s) {
12353 viml_insert(this.indent, this.indent[0] + s);
12354}
12355
12356Compiler.prototype.decindent = function() {
12357 viml_remove(this.indent, 0);
12358}
12359
12360Compiler.prototype.compile = function(node) {
12361 if (node.type == NODE_TOPLEVEL) {
12362 return this.compile_toplevel(node);
12363 }
12364 else if (node.type == NODE_COMMENT) {
12365 this.compile_comment(node);
12366 return NIL;
12367 }
12368 else if (node.type == NODE_EXCMD) {
12369 this.compile_excmd(node);
12370 return NIL;
12371 }
12372 else if (node.type == NODE_FUNCTION) {
12373 this.compile_function(node);
12374 return NIL;
12375 }
12376 else if (node.type == NODE_DELFUNCTION) {
12377 this.compile_delfunction(node);
12378 return NIL;
12379 }
12380 else if (node.type == NODE_RETURN) {
12381 this.compile_return(node);
12382 return NIL;
12383 }
12384 else if (node.type == NODE_EXCALL) {
12385 this.compile_excall(node);
12386 return NIL;
12387 }
12388 else if (node.type == NODE_EVAL) {
12389 this.compile_eval(node);
12390 return NIL;
12391 }
12392 else if (node.type == NODE_LET) {
12393 this.compile_let(node);
12394 return NIL;
12395 }
12396 else if (node.type == NODE_CONST) {
12397 this.compile_const(node);
12398 return NIL;
12399 }
12400 else if (node.type == NODE_UNLET) {
12401 this.compile_unlet(node);
12402 return NIL;
12403 }
12404 else if (node.type == NODE_LOCKVAR) {
12405 this.compile_lockvar(node);
12406 return NIL;
12407 }
12408 else if (node.type == NODE_UNLOCKVAR) {
12409 this.compile_unlockvar(node);
12410 return NIL;
12411 }
12412 else if (node.type == NODE_IF) {
12413 this.compile_if(node);
12414 return NIL;
12415 }
12416 else if (node.type == NODE_WHILE) {
12417 this.compile_while(node);
12418 return NIL;
12419 }
12420 else if (node.type == NODE_FOR) {
12421 this.compile_for(node);
12422 return NIL;
12423 }
12424 else if (node.type == NODE_CONTINUE) {
12425 this.compile_continue(node);
12426 return NIL;
12427 }
12428 else if (node.type == NODE_BREAK) {
12429 this.compile_break(node);
12430 return NIL;
12431 }
12432 else if (node.type == NODE_TRY) {
12433 this.compile_try(node);
12434 return NIL;
12435 }
12436 else if (node.type == NODE_THROW) {
12437 this.compile_throw(node);
12438 return NIL;
12439 }
12440 else if (node.type == NODE_ECHO) {
12441 this.compile_echo(node);
12442 return NIL;
12443 }
12444 else if (node.type == NODE_ECHON) {
12445 this.compile_echon(node);
12446 return NIL;
12447 }
12448 else if (node.type == NODE_ECHOHL) {
12449 this.compile_echohl(node);
12450 return NIL;
12451 }
12452 else if (node.type == NODE_ECHOMSG) {
12453 this.compile_echomsg(node);
12454 return NIL;
12455 }
12456 else if (node.type == NODE_ECHOERR) {
12457 this.compile_echoerr(node);
12458 return NIL;
12459 }
12460 else if (node.type == NODE_EXECUTE) {
12461 this.compile_execute(node);
12462 return NIL;
12463 }
12464 else if (node.type == NODE_TERNARY) {
12465 return this.compile_ternary(node);
12466 }
12467 else if (node.type == NODE_OR) {
12468 return this.compile_or(node);
12469 }
12470 else if (node.type == NODE_AND) {
12471 return this.compile_and(node);
12472 }
12473 else if (node.type == NODE_EQUAL) {
12474 return this.compile_equal(node);
12475 }
12476 else if (node.type == NODE_EQUALCI) {
12477 return this.compile_equalci(node);
12478 }
12479 else if (node.type == NODE_EQUALCS) {
12480 return this.compile_equalcs(node);
12481 }
12482 else if (node.type == NODE_NEQUAL) {
12483 return this.compile_nequal(node);
12484 }
12485 else if (node.type == NODE_NEQUALCI) {
12486 return this.compile_nequalci(node);
12487 }
12488 else if (node.type == NODE_NEQUALCS) {
12489 return this.compile_nequalcs(node);
12490 }
12491 else if (node.type == NODE_GREATER) {
12492 return this.compile_greater(node);
12493 }
12494 else if (node.type == NODE_GREATERCI) {
12495 return this.compile_greaterci(node);
12496 }
12497 else if (node.type == NODE_GREATERCS) {
12498 return this.compile_greatercs(node);
12499 }
12500 else if (node.type == NODE_GEQUAL) {
12501 return this.compile_gequal(node);
12502 }
12503 else if (node.type == NODE_GEQUALCI) {
12504 return this.compile_gequalci(node);
12505 }
12506 else if (node.type == NODE_GEQUALCS) {
12507 return this.compile_gequalcs(node);
12508 }
12509 else if (node.type == NODE_SMALLER) {
12510 return this.compile_smaller(node);
12511 }
12512 else if (node.type == NODE_SMALLERCI) {
12513 return this.compile_smallerci(node);
12514 }
12515 else if (node.type == NODE_SMALLERCS) {
12516 return this.compile_smallercs(node);
12517 }
12518 else if (node.type == NODE_SEQUAL) {
12519 return this.compile_sequal(node);
12520 }
12521 else if (node.type == NODE_SEQUALCI) {
12522 return this.compile_sequalci(node);
12523 }
12524 else if (node.type == NODE_SEQUALCS) {
12525 return this.compile_sequalcs(node);
12526 }
12527 else if (node.type == NODE_MATCH) {
12528 return this.compile_match(node);
12529 }
12530 else if (node.type == NODE_MATCHCI) {
12531 return this.compile_matchci(node);
12532 }
12533 else if (node.type == NODE_MATCHCS) {
12534 return this.compile_matchcs(node);
12535 }
12536 else if (node.type == NODE_NOMATCH) {
12537 return this.compile_nomatch(node);
12538 }
12539 else if (node.type == NODE_NOMATCHCI) {
12540 return this.compile_nomatchci(node);
12541 }
12542 else if (node.type == NODE_NOMATCHCS) {
12543 return this.compile_nomatchcs(node);
12544 }
12545 else if (node.type == NODE_IS) {
12546 return this.compile_is(node);
12547 }
12548 else if (node.type == NODE_ISCI) {
12549 return this.compile_isci(node);
12550 }
12551 else if (node.type == NODE_ISCS) {
12552 return this.compile_iscs(node);
12553 }
12554 else if (node.type == NODE_ISNOT) {
12555 return this.compile_isnot(node);
12556 }
12557 else if (node.type == NODE_ISNOTCI) {
12558 return this.compile_isnotci(node);
12559 }
12560 else if (node.type == NODE_ISNOTCS) {
12561 return this.compile_isnotcs(node);
12562 }
12563 else if (node.type == NODE_ADD) {
12564 return this.compile_add(node);
12565 }
12566 else if (node.type == NODE_SUBTRACT) {
12567 return this.compile_subtract(node);
12568 }
12569 else if (node.type == NODE_CONCAT) {
12570 return this.compile_concat(node);
12571 }
12572 else if (node.type == NODE_MULTIPLY) {
12573 return this.compile_multiply(node);
12574 }
12575 else if (node.type == NODE_DIVIDE) {
12576 return this.compile_divide(node);
12577 }
12578 else if (node.type == NODE_REMAINDER) {
12579 return this.compile_remainder(node);
12580 }
12581 else if (node.type == NODE_NOT) {
12582 return this.compile_not(node);
12583 }
12584 else if (node.type == NODE_PLUS) {
12585 return this.compile_plus(node);
12586 }
12587 else if (node.type == NODE_MINUS) {
12588 return this.compile_minus(node);
12589 }
12590 else if (node.type == NODE_SUBSCRIPT) {
12591 return this.compile_subscript(node);
12592 }
12593 else if (node.type == NODE_SLICE) {
12594 return this.compile_slice(node);
12595 }
12596 else if (node.type == NODE_DOT) {
12597 return this.compile_dot(node);
12598 }
12599 else if (node.type == NODE_METHOD) {
12600 return this.compile_method(node);
12601 }
12602 else if (node.type == NODE_CALL) {
12603 return this.compile_call(node);
12604 }
12605 else if (node.type == NODE_NUMBER) {
12606 return this.compile_number(node);
12607 }
12608 else if (node.type == NODE_BLOB) {
12609 return this.compile_blob(node);
12610 }
12611 else if (node.type == NODE_STRING) {
12612 return this.compile_string(node);
12613 }
12614 else if (node.type == NODE_LIST) {
12615 return this.compile_list(node);
12616 }
12617 else if (node.type == NODE_DICT) {
12618 return this.compile_dict(node);
12619 }
12620 else if (node.type == NODE_OPTION) {
12621 return this.compile_option(node);
12622 }
12623 else if (node.type == NODE_IDENTIFIER) {
12624 return this.compile_identifier(node);
12625 }
12626 else if (node.type == NODE_CURLYNAME) {
12627 return this.compile_curlyname(node);
12628 }
12629 else if (node.type == NODE_ENV) {
12630 return this.compile_env(node);
12631 }
12632 else if (node.type == NODE_REG) {
12633 return this.compile_reg(node);
12634 }
12635 else if (node.type == NODE_CURLYNAMEPART) {
12636 return this.compile_curlynamepart(node);
12637 }
12638 else if (node.type == NODE_CURLYNAMEEXPR) {
12639 return this.compile_curlynameexpr(node);
12640 }
12641 else if (node.type == NODE_LAMBDA) {
12642 return this.compile_lambda(node);
12643 }
12644 else if (node.type == NODE_HEREDOC) {
12645 return this.compile_heredoc(node);
12646 }
12647 else {
12648 throw viml_printf("Compiler: unknown node: %s", viml_string(node));
12649 }
12650 return NIL;
12651}
12652
12653Compiler.prototype.compile_body = function(body) {
12654 var __c10 = body;
12655 for (var __i10 = 0; __i10 < __c10.length; ++__i10) {
12656 var node = __c10[__i10];
12657 this.compile(node);
12658 }
12659}
12660
12661Compiler.prototype.compile_toplevel = function(node) {
12662 this.compile_body(node.body);
12663 return this.lines;
12664}
12665
12666Compiler.prototype.compile_comment = function(node) {
12667 this.out(";%s", node.str);
12668}
12669
12670Compiler.prototype.compile_excmd = function(node) {
12671 this.out("(excmd \"%s\")", viml_escape(node.str, "\\\""));
12672}
12673
12674Compiler.prototype.compile_function = function(node) {
12675 var left = this.compile(node.left);
12676 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
12677 var default_args = node.default_args.map((function(vval) { return this.compile(vval); }).bind(this));
12678 if (!viml_empty(rlist)) {
12679 var remaining = FALSE;
12680 if (rlist[rlist.length - 1] == "...") {
12681 viml_remove(rlist, -1);
12682 var remaining = TRUE;
12683 }
12684 var __c11 = viml_range(viml_len(rlist));
12685 for (var __i11 = 0; __i11 < __c11.length; ++__i11) {
12686 var i = __c11[__i11];
12687 if (i < viml_len(rlist) - viml_len(default_args)) {
12688 left += viml_printf(" %s", rlist[i]);
12689 }
12690 else {
12691 left += viml_printf(" (%s %s)", rlist[i], default_args[i + viml_len(default_args) - viml_len(rlist)]);
12692 }
12693 }
12694 if (remaining) {
12695 left += " . ...";
12696 }
12697 }
12698 this.out("(function (%s)", left);
12699 this.incindent(" ");
12700 this.compile_body(node.body);
12701 this.out(")");
12702 this.decindent();
12703}
12704
12705Compiler.prototype.compile_delfunction = function(node) {
12706 this.out("(delfunction %s)", this.compile(node.left));
12707}
12708
12709Compiler.prototype.compile_return = function(node) {
12710 if (node.left === NIL) {
12711 this.out("(return)");
12712 }
12713 else {
12714 this.out("(return %s)", this.compile(node.left));
12715 }
12716}
12717
12718Compiler.prototype.compile_excall = function(node) {
12719 this.out("(call %s)", this.compile(node.left));
12720}
12721
12722Compiler.prototype.compile_eval = function(node) {
12723 this.out("(eval %s)", this.compile(node.left));
12724}
12725
12726Compiler.prototype.compile_let = function(node) {
12727 var left = "";
12728 if (node.left !== NIL) {
12729 var left = this.compile(node.left);
12730 }
12731 else {
12732 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12733 if (node.rest !== NIL) {
12734 left += " . " + this.compile(node.rest);
12735 }
12736 var left = "(" + left + ")";
12737 }
12738 var right = this.compile(node.right);
12739 this.out("(let %s %s %s)", node.op, left, right);
12740}
12741
12742// TODO: merge with s:Compiler.compile_let() ?
12743Compiler.prototype.compile_const = function(node) {
12744 var left = "";
12745 if (node.left !== NIL) {
12746 var left = this.compile(node.left);
12747 }
12748 else {
12749 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12750 if (node.rest !== NIL) {
12751 left += " . " + this.compile(node.rest);
12752 }
12753 var left = "(" + left + ")";
12754 }
12755 var right = this.compile(node.right);
12756 this.out("(const %s %s %s)", node.op, left, right);
12757}
12758
12759Compiler.prototype.compile_unlet = function(node) {
12760 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12761 this.out("(unlet %s)", viml_join(list, " "));
12762}
12763
12764Compiler.prototype.compile_lockvar = function(node) {
12765 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12766 if (node.depth === NIL) {
12767 this.out("(lockvar %s)", viml_join(list, " "));
12768 }
12769 else {
12770 this.out("(lockvar %s %s)", node.depth, viml_join(list, " "));
12771 }
12772}
12773
12774Compiler.prototype.compile_unlockvar = function(node) {
12775 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12776 if (node.depth === NIL) {
12777 this.out("(unlockvar %s)", viml_join(list, " "));
12778 }
12779 else {
12780 this.out("(unlockvar %s %s)", node.depth, viml_join(list, " "));
12781 }
12782}
12783
12784Compiler.prototype.compile_if = function(node) {
12785 this.out("(if %s", this.compile(node.cond));
12786 this.incindent(" ");
12787 this.compile_body(node.body);
12788 this.decindent();
12789 var __c12 = node.elseif;
12790 for (var __i12 = 0; __i12 < __c12.length; ++__i12) {
12791 var enode = __c12[__i12];
12792 this.out(" elseif %s", this.compile(enode.cond));
12793 this.incindent(" ");
12794 this.compile_body(enode.body);
12795 this.decindent();
12796 }
12797 if (node._else !== NIL) {
12798 this.out(" else");
12799 this.incindent(" ");
12800 this.compile_body(node._else.body);
12801 this.decindent();
12802 }
12803 this.incindent(" ");
12804 this.out(")");
12805 this.decindent();
12806}
12807
12808Compiler.prototype.compile_while = function(node) {
12809 this.out("(while %s", this.compile(node.cond));
12810 this.incindent(" ");
12811 this.compile_body(node.body);
12812 this.out(")");
12813 this.decindent();
12814}
12815
12816Compiler.prototype.compile_for = function(node) {
12817 var left = "";
12818 if (node.left !== NIL) {
12819 var left = this.compile(node.left);
12820 }
12821 else {
12822 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12823 if (node.rest !== NIL) {
12824 left += " . " + this.compile(node.rest);
12825 }
12826 var left = "(" + left + ")";
12827 }
12828 var right = this.compile(node.right);
12829 this.out("(for %s %s", left, right);
12830 this.incindent(" ");
12831 this.compile_body(node.body);
12832 this.out(")");
12833 this.decindent();
12834}
12835
12836Compiler.prototype.compile_continue = function(node) {
12837 this.out("(continue)");
12838}
12839
12840Compiler.prototype.compile_break = function(node) {
12841 this.out("(break)");
12842}
12843
12844Compiler.prototype.compile_try = function(node) {
12845 this.out("(try");
12846 this.incindent(" ");
12847 this.compile_body(node.body);
12848 var __c13 = node.catch;
12849 for (var __i13 = 0; __i13 < __c13.length; ++__i13) {
12850 var cnode = __c13[__i13];
12851 if (cnode.pattern !== NIL) {
12852 this.decindent();
12853 this.out(" catch /%s/", cnode.pattern);
12854 this.incindent(" ");
12855 this.compile_body(cnode.body);
12856 }
12857 else {
12858 this.decindent();
12859 this.out(" catch");
12860 this.incindent(" ");
12861 this.compile_body(cnode.body);
12862 }
12863 }
12864 if (node._finally !== NIL) {
12865 this.decindent();
12866 this.out(" finally");
12867 this.incindent(" ");
12868 this.compile_body(node._finally.body);
12869 }
12870 this.out(")");
12871 this.decindent();
12872}
12873
12874Compiler.prototype.compile_throw = function(node) {
12875 this.out("(throw %s)", this.compile(node.left));
12876}
12877
12878Compiler.prototype.compile_echo = function(node) {
12879 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12880 this.out("(echo %s)", viml_join(list, " "));
12881}
12882
12883Compiler.prototype.compile_echon = function(node) {
12884 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12885 this.out("(echon %s)", viml_join(list, " "));
12886}
12887
12888Compiler.prototype.compile_echohl = function(node) {
12889 this.out("(echohl \"%s\")", viml_escape(node.str, "\\\""));
12890}
12891
12892Compiler.prototype.compile_echomsg = function(node) {
12893 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12894 this.out("(echomsg %s)", viml_join(list, " "));
12895}
12896
12897Compiler.prototype.compile_echoerr = function(node) {
12898 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12899 this.out("(echoerr %s)", viml_join(list, " "));
12900}
12901
12902Compiler.prototype.compile_execute = function(node) {
12903 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12904 this.out("(execute %s)", viml_join(list, " "));
12905}
12906
12907Compiler.prototype.compile_ternary = function(node) {
12908 return viml_printf("(?: %s %s %s)", this.compile(node.cond), this.compile(node.left), this.compile(node.right));
12909}
12910
12911Compiler.prototype.compile_or = function(node) {
12912 return viml_printf("(|| %s %s)", this.compile(node.left), this.compile(node.right));
12913}
12914
12915Compiler.prototype.compile_and = function(node) {
12916 return viml_printf("(&& %s %s)", this.compile(node.left), this.compile(node.right));
12917}
12918
12919Compiler.prototype.compile_equal = function(node) {
12920 return viml_printf("(== %s %s)", this.compile(node.left), this.compile(node.right));
12921}
12922
12923Compiler.prototype.compile_equalci = function(node) {
12924 return viml_printf("(==? %s %s)", this.compile(node.left), this.compile(node.right));
12925}
12926
12927Compiler.prototype.compile_equalcs = function(node) {
12928 return viml_printf("(==# %s %s)", this.compile(node.left), this.compile(node.right));
12929}
12930
12931Compiler.prototype.compile_nequal = function(node) {
12932 return viml_printf("(!= %s %s)", this.compile(node.left), this.compile(node.right));
12933}
12934
12935Compiler.prototype.compile_nequalci = function(node) {
12936 return viml_printf("(!=? %s %s)", this.compile(node.left), this.compile(node.right));
12937}
12938
12939Compiler.prototype.compile_nequalcs = function(node) {
12940 return viml_printf("(!=# %s %s)", this.compile(node.left), this.compile(node.right));
12941}
12942
12943Compiler.prototype.compile_greater = function(node) {
12944 return viml_printf("(> %s %s)", this.compile(node.left), this.compile(node.right));
12945}
12946
12947Compiler.prototype.compile_greaterci = function(node) {
12948 return viml_printf("(>? %s %s)", this.compile(node.left), this.compile(node.right));
12949}
12950
12951Compiler.prototype.compile_greatercs = function(node) {
12952 return viml_printf("(># %s %s)", this.compile(node.left), this.compile(node.right));
12953}
12954
12955Compiler.prototype.compile_gequal = function(node) {
12956 return viml_printf("(>= %s %s)", this.compile(node.left), this.compile(node.right));
12957}
12958
12959Compiler.prototype.compile_gequalci = function(node) {
12960 return viml_printf("(>=? %s %s)", this.compile(node.left), this.compile(node.right));
12961}
12962
12963Compiler.prototype.compile_gequalcs = function(node) {
12964 return viml_printf("(>=# %s %s)", this.compile(node.left), this.compile(node.right));
12965}
12966
12967Compiler.prototype.compile_smaller = function(node) {
12968 return viml_printf("(< %s %s)", this.compile(node.left), this.compile(node.right));
12969}
12970
12971Compiler.prototype.compile_smallerci = function(node) {
12972 return viml_printf("(<? %s %s)", this.compile(node.left), this.compile(node.right));
12973}
12974
12975Compiler.prototype.compile_smallercs = function(node) {
12976 return viml_printf("(<# %s %s)", this.compile(node.left), this.compile(node.right));
12977}
12978
12979Compiler.prototype.compile_sequal = function(node) {
12980 return viml_printf("(<= %s %s)", this.compile(node.left), this.compile(node.right));
12981}
12982
12983Compiler.prototype.compile_sequalci = function(node) {
12984 return viml_printf("(<=? %s %s)", this.compile(node.left), this.compile(node.right));
12985}
12986
12987Compiler.prototype.compile_sequalcs = function(node) {
12988 return viml_printf("(<=# %s %s)", this.compile(node.left), this.compile(node.right));
12989}
12990
12991Compiler.prototype.compile_match = function(node) {
12992 return viml_printf("(=~ %s %s)", this.compile(node.left), this.compile(node.right));
12993}
12994
12995Compiler.prototype.compile_matchci = function(node) {
12996 return viml_printf("(=~? %s %s)", this.compile(node.left), this.compile(node.right));
12997}
12998
12999Compiler.prototype.compile_matchcs = function(node) {
13000 return viml_printf("(=~# %s %s)", this.compile(node.left), this.compile(node.right));
13001}
13002
13003Compiler.prototype.compile_nomatch = function(node) {
13004 return viml_printf("(!~ %s %s)", this.compile(node.left), this.compile(node.right));
13005}
13006
13007Compiler.prototype.compile_nomatchci = function(node) {
13008 return viml_printf("(!~? %s %s)", this.compile(node.left), this.compile(node.right));
13009}
13010
13011Compiler.prototype.compile_nomatchcs = function(node) {
13012 return viml_printf("(!~# %s %s)", this.compile(node.left), this.compile(node.right));
13013}
13014
13015Compiler.prototype.compile_is = function(node) {
13016 return viml_printf("(is %s %s)", this.compile(node.left), this.compile(node.right));
13017}
13018
13019Compiler.prototype.compile_isci = function(node) {
13020 return viml_printf("(is? %s %s)", this.compile(node.left), this.compile(node.right));
13021}
13022
13023Compiler.prototype.compile_iscs = function(node) {
13024 return viml_printf("(is# %s %s)", this.compile(node.left), this.compile(node.right));
13025}
13026
13027Compiler.prototype.compile_isnot = function(node) {
13028 return viml_printf("(isnot %s %s)", this.compile(node.left), this.compile(node.right));
13029}
13030
13031Compiler.prototype.compile_isnotci = function(node) {
13032 return viml_printf("(isnot? %s %s)", this.compile(node.left), this.compile(node.right));
13033}
13034
13035Compiler.prototype.compile_isnotcs = function(node) {
13036 return viml_printf("(isnot# %s %s)", this.compile(node.left), this.compile(node.right));
13037}
13038
13039Compiler.prototype.compile_add = function(node) {
13040 return viml_printf("(+ %s %s)", this.compile(node.left), this.compile(node.right));
13041}
13042
13043Compiler.prototype.compile_subtract = function(node) {
13044 return viml_printf("(- %s %s)", this.compile(node.left), this.compile(node.right));
13045}
13046
13047Compiler.prototype.compile_concat = function(node) {
13048 return viml_printf("(concat %s %s)", this.compile(node.left), this.compile(node.right));
13049}
13050
13051Compiler.prototype.compile_multiply = function(node) {
13052 return viml_printf("(* %s %s)", this.compile(node.left), this.compile(node.right));
13053}
13054
13055Compiler.prototype.compile_divide = function(node) {
13056 return viml_printf("(/ %s %s)", this.compile(node.left), this.compile(node.right));
13057}
13058
13059Compiler.prototype.compile_remainder = function(node) {
13060 return viml_printf("(%% %s %s)", this.compile(node.left), this.compile(node.right));
13061}
13062
13063Compiler.prototype.compile_not = function(node) {
13064 return viml_printf("(! %s)", this.compile(node.left));
13065}
13066
13067Compiler.prototype.compile_plus = function(node) {
13068 return viml_printf("(+ %s)", this.compile(node.left));
13069}
13070
13071Compiler.prototype.compile_minus = function(node) {
13072 return viml_printf("(- %s)", this.compile(node.left));
13073}
13074
13075Compiler.prototype.compile_subscript = function(node) {
13076 return viml_printf("(subscript %s %s)", this.compile(node.left), this.compile(node.right));
13077}
13078
13079Compiler.prototype.compile_slice = function(node) {
13080 var r0 = node.rlist[0] === NIL ? "nil" : this.compile(node.rlist[0]);
13081 var r1 = node.rlist[1] === NIL ? "nil" : this.compile(node.rlist[1]);
13082 return viml_printf("(slice %s %s %s)", this.compile(node.left), r0, r1);
13083}
13084
13085Compiler.prototype.compile_dot = function(node) {
13086 return viml_printf("(dot %s %s)", this.compile(node.left), this.compile(node.right));
13087}
13088
13089Compiler.prototype.compile_method = function(node) {
13090 return viml_printf("(method %s %s)", this.compile(node.left), this.compile(node.right));
13091}
13092
13093Compiler.prototype.compile_call = function(node) {
13094 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13095 if (viml_empty(rlist)) {
13096 return viml_printf("(%s)", this.compile(node.left));
13097 }
13098 else {
13099 return viml_printf("(%s %s)", this.compile(node.left), viml_join(rlist, " "));
13100 }
13101}
13102
13103Compiler.prototype.compile_number = function(node) {
13104 return node.value;
13105}
13106
13107Compiler.prototype.compile_blob = function(node) {
13108 return node.value;
13109}
13110
13111Compiler.prototype.compile_string = function(node) {
13112 return node.value;
13113}
13114
13115Compiler.prototype.compile_list = function(node) {
13116 var value = node.value.map((function(vval) { return this.compile(vval); }).bind(this));
13117 if (viml_empty(value)) {
13118 return "(list)";
13119 }
13120 else {
13121 return viml_printf("(list %s)", viml_join(value, " "));
13122 }
13123}
13124
13125Compiler.prototype.compile_dict = function(node) {
13126 var value = node.value.map((function(vval) { return "(" + this.compile(vval[0]) + " " + this.compile(vval[1]) + ")"; }).bind(this));
13127 if (viml_empty(value)) {
13128 return "(dict)";
13129 }
13130 else {
13131 return viml_printf("(dict %s)", viml_join(value, " "));
13132 }
13133}
13134
13135Compiler.prototype.compile_option = function(node) {
13136 return node.value;
13137}
13138
13139Compiler.prototype.compile_identifier = function(node) {
13140 return node.value;
13141}
13142
13143Compiler.prototype.compile_curlyname = function(node) {
13144 return viml_join(node.value.map((function(vval) { return this.compile(vval); }).bind(this)), "");
13145}
13146
13147Compiler.prototype.compile_env = function(node) {
13148 return node.value;
13149}
13150
13151Compiler.prototype.compile_reg = function(node) {
13152 return node.value;
13153}
13154
13155Compiler.prototype.compile_curlynamepart = function(node) {
13156 return node.value;
13157}
13158
13159Compiler.prototype.compile_curlynameexpr = function(node) {
13160 return "{" + this.compile(node.value) + "}";
13161}
13162
13163Compiler.prototype.escape_string = function(str) {
13164 var m = {"\n":"\\n", "\t":"\\t", "\r":"\\r"};
13165 var out = "\"";
13166 var __c14 = viml_range(viml_len(str));
13167 for (var __i14 = 0; __i14 < __c14.length; ++__i14) {
13168 var i = __c14[__i14];
13169 var c = str[i];
13170 if (viml_has_key(m, c)) {
13171 out += m[c];
13172 }
13173 else {
13174 out += c;
13175 }
13176 }
13177 out += "\"";
13178 return out;
13179}
13180
13181Compiler.prototype.compile_lambda = function(node) {
13182 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13183 return viml_printf("(lambda (%s) %s)", viml_join(rlist, " "), this.compile(node.left));
13184}
13185
13186Compiler.prototype.compile_heredoc = function(node) {
13187 if (viml_empty(node.rlist)) {
13188 var rlist = "(list)";
13189 }
13190 else {
13191 var rlist = "(list " + viml_join(node.rlist.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13192 }
13193 if (viml_empty(node.body)) {
13194 var body = "(list)";
13195 }
13196 else {
13197 var body = "(list " + viml_join(node.body.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13198 }
13199 var op = this.escape_string(node.op);
13200 return viml_printf("(heredoc %s %s %s)", rlist, op, body);
13201}
13202
13203// TODO: under construction
13204function RegexpParser() { this.__init__.apply(this, arguments); }
13205RegexpParser.prototype.RE_VERY_NOMAGIC = 1;
13206RegexpParser.prototype.RE_NOMAGIC = 2;
13207RegexpParser.prototype.RE_MAGIC = 3;
13208RegexpParser.prototype.RE_VERY_MAGIC = 4;
13209RegexpParser.prototype.__init__ = function(reader, cmd, delim) {
13210 this.reader = reader;
13211 this.cmd = cmd;
13212 this.delim = delim;
13213 this.reg_magic = this.RE_MAGIC;
13214}
13215
13216RegexpParser.prototype.isend = function(c) {
13217 return c == "<EOF>" || c == "<EOL>" || c == this.delim;
13218}
13219
13220RegexpParser.prototype.parse_regexp = function() {
13221 var prevtoken = "";
13222 var ntoken = "";
13223 var ret = [];
13224 if (this.reader.peekn(4) == "\\%#=") {
13225 var epos = this.reader.getpos();
13226 var token = this.reader.getn(5);
13227 if (token != "\\%#=0" && token != "\\%#=1" && token != "\\%#=2") {
13228 throw Err("E864: \\%#= can only be followed by 0, 1, or 2", epos);
13229 }
13230 viml_add(ret, token);
13231 }
13232 while (!this.isend(this.reader.peek())) {
13233 var prevtoken = ntoken;
13234 var __tmp = this.get_token();
13235 var token = __tmp[0];
13236 var ntoken = __tmp[1];
13237 if (ntoken == "\\m") {
13238 this.reg_magic = this.RE_MAGIC;
13239 }
13240 else if (ntoken == "\\M") {
13241 this.reg_magic = this.RE_NOMAGIC;
13242 }
13243 else if (ntoken == "\\v") {
13244 this.reg_magic = this.RE_VERY_MAGIC;
13245 }
13246 else if (ntoken == "\\V") {
13247 this.reg_magic = this.RE_VERY_NOMAGIC;
13248 }
13249 else if (ntoken == "\\*") {
13250 // '*' is not magic as the very first character.
13251 if (prevtoken == "" || prevtoken == "\\^" || prevtoken == "\\&" || prevtoken == "\\|" || prevtoken == "\\(") {
13252 var ntoken = "*";
13253 }
13254 }
13255 else if (ntoken == "\\^") {
13256 // '^' is only magic as the very first character.
13257 if (this.reg_magic != this.RE_VERY_MAGIC && prevtoken != "" && prevtoken != "\\&" && prevtoken != "\\|" && prevtoken != "\\n" && prevtoken != "\\(" && prevtoken != "\\%(") {
13258 var ntoken = "^";
13259 }
13260 }
13261 else if (ntoken == "\\$") {
13262 // '$' is only magic as the very last character
13263 var pos = this.reader.tell();
13264 if (this.reg_magic != this.RE_VERY_MAGIC) {
13265 while (!this.isend(this.reader.peek())) {
13266 var __tmp = this.get_token();
13267 var t = __tmp[0];
13268 var n = __tmp[1];
13269 // XXX: Vim doesn't check \v and \V?
13270 if (n == "\\c" || n == "\\C" || n == "\\m" || n == "\\M" || n == "\\Z") {
13271 continue;
13272 }
13273 if (n != "\\|" && n != "\\&" && n != "\\n" && n != "\\)") {
13274 var ntoken = "$";
13275 }
13276 break;
13277 }
13278 }
13279 this.reader.seek_set(pos);
13280 }
13281 else if (ntoken == "\\?") {
13282 // '?' is literal in '?' command.
13283 if (this.cmd == "?") {
13284 var ntoken = "?";
13285 }
13286 }
13287 viml_add(ret, ntoken);
13288 }
13289 return ret;
13290}
13291
13292// @return [actual_token, normalized_token]
13293RegexpParser.prototype.get_token = function() {
13294 if (this.reg_magic == this.RE_VERY_MAGIC) {
13295 return this.get_token_very_magic();
13296 }
13297 else if (this.reg_magic == this.RE_MAGIC) {
13298 return this.get_token_magic();
13299 }
13300 else if (this.reg_magic == this.RE_NOMAGIC) {
13301 return this.get_token_nomagic();
13302 }
13303 else if (this.reg_magic == this.RE_VERY_NOMAGIC) {
13304 return this.get_token_very_nomagic();
13305 }
13306}
13307
13308RegexpParser.prototype.get_token_very_magic = function() {
13309 if (this.isend(this.reader.peek())) {
13310 return ["<END>", "<END>"];
13311 }
13312 var c = this.reader.get();
13313 if (c == "\\") {
13314 return this.get_token_backslash_common();
13315 }
13316 else if (c == "*") {
13317 return ["*", "\\*"];
13318 }
13319 else if (c == "+") {
13320 return ["+", "\\+"];
13321 }
13322 else if (c == "=") {
13323 return ["=", "\\="];
13324 }
13325 else if (c == "?") {
13326 return ["?", "\\?"];
13327 }
13328 else if (c == "{") {
13329 return this.get_token_brace("{");
13330 }
13331 else if (c == "@") {
13332 return this.get_token_at("@");
13333 }
13334 else if (c == "^") {
13335 return ["^", "\\^"];
13336 }
13337 else if (c == "$") {
13338 return ["$", "\\$"];
13339 }
13340 else if (c == ".") {
13341 return [".", "\\."];
13342 }
13343 else if (c == "<") {
13344 return ["<", "\\<"];
13345 }
13346 else if (c == ">") {
13347 return [">", "\\>"];
13348 }
13349 else if (c == "%") {
13350 return this.get_token_percent("%");
13351 }
13352 else if (c == "[") {
13353 return this.get_token_sq("[");
13354 }
13355 else if (c == "~") {
13356 return ["~", "\\~"];
13357 }
13358 else if (c == "|") {
13359 return ["|", "\\|"];
13360 }
13361 else if (c == "&") {
13362 return ["&", "\\&"];
13363 }
13364 else if (c == "(") {
13365 return ["(", "\\("];
13366 }
13367 else if (c == ")") {
13368 return [")", "\\)"];
13369 }
13370 return [c, c];
13371}
13372
13373RegexpParser.prototype.get_token_magic = function() {
13374 if (this.isend(this.reader.peek())) {
13375 return ["<END>", "<END>"];
13376 }
13377 var c = this.reader.get();
13378 if (c == "\\") {
13379 var pos = this.reader.tell();
13380 var c = this.reader.get();
13381 if (c == "+") {
13382 return ["\\+", "\\+"];
13383 }
13384 else if (c == "=") {
13385 return ["\\=", "\\="];
13386 }
13387 else if (c == "?") {
13388 return ["\\?", "\\?"];
13389 }
13390 else if (c == "{") {
13391 return this.get_token_brace("\\{");
13392 }
13393 else if (c == "@") {
13394 return this.get_token_at("\\@");
13395 }
13396 else if (c == "<") {
13397 return ["\\<", "\\<"];
13398 }
13399 else if (c == ">") {
13400 return ["\\>", "\\>"];
13401 }
13402 else if (c == "%") {
13403 return this.get_token_percent("\\%");
13404 }
13405 else if (c == "|") {
13406 return ["\\|", "\\|"];
13407 }
13408 else if (c == "&") {
13409 return ["\\&", "\\&"];
13410 }
13411 else if (c == "(") {
13412 return ["\\(", "\\("];
13413 }
13414 else if (c == ")") {
13415 return ["\\)", "\\)"];
13416 }
13417 this.reader.seek_set(pos);
13418 return this.get_token_backslash_common();
13419 }
13420 else if (c == "*") {
13421 return ["*", "\\*"];
13422 }
13423 else if (c == "^") {
13424 return ["^", "\\^"];
13425 }
13426 else if (c == "$") {
13427 return ["$", "\\$"];
13428 }
13429 else if (c == ".") {
13430 return [".", "\\."];
13431 }
13432 else if (c == "[") {
13433 return this.get_token_sq("[");
13434 }
13435 else if (c == "~") {
13436 return ["~", "\\~"];
13437 }
13438 return [c, c];
13439}
13440
13441RegexpParser.prototype.get_token_nomagic = function() {
13442 if (this.isend(this.reader.peek())) {
13443 return ["<END>", "<END>"];
13444 }
13445 var c = this.reader.get();
13446 if (c == "\\") {
13447 var pos = this.reader.tell();
13448 var c = this.reader.get();
13449 if (c == "*") {
13450 return ["\\*", "\\*"];
13451 }
13452 else if (c == "+") {
13453 return ["\\+", "\\+"];
13454 }
13455 else if (c == "=") {
13456 return ["\\=", "\\="];
13457 }
13458 else if (c == "?") {
13459 return ["\\?", "\\?"];
13460 }
13461 else if (c == "{") {
13462 return this.get_token_brace("\\{");
13463 }
13464 else if (c == "@") {
13465 return this.get_token_at("\\@");
13466 }
13467 else if (c == ".") {
13468 return ["\\.", "\\."];
13469 }
13470 else if (c == "<") {
13471 return ["\\<", "\\<"];
13472 }
13473 else if (c == ">") {
13474 return ["\\>", "\\>"];
13475 }
13476 else if (c == "%") {
13477 return this.get_token_percent("\\%");
13478 }
13479 else if (c == "~") {
13480 return ["\\~", "\\^"];
13481 }
13482 else if (c == "[") {
13483 return this.get_token_sq("\\[");
13484 }
13485 else if (c == "|") {
13486 return ["\\|", "\\|"];
13487 }
13488 else if (c == "&") {
13489 return ["\\&", "\\&"];
13490 }
13491 else if (c == "(") {
13492 return ["\\(", "\\("];
13493 }
13494 else if (c == ")") {
13495 return ["\\)", "\\)"];
13496 }
13497 this.reader.seek_set(pos);
13498 return this.get_token_backslash_common();
13499 }
13500 else if (c == "^") {
13501 return ["^", "\\^"];
13502 }
13503 else if (c == "$") {
13504 return ["$", "\\$"];
13505 }
13506 return [c, c];
13507}
13508
13509RegexpParser.prototype.get_token_very_nomagic = function() {
13510 if (this.isend(this.reader.peek())) {
13511 return ["<END>", "<END>"];
13512 }
13513 var c = this.reader.get();
13514 if (c == "\\") {
13515 var pos = this.reader.tell();
13516 var c = this.reader.get();
13517 if (c == "*") {
13518 return ["\\*", "\\*"];
13519 }
13520 else if (c == "+") {
13521 return ["\\+", "\\+"];
13522 }
13523 else if (c == "=") {
13524 return ["\\=", "\\="];
13525 }
13526 else if (c == "?") {
13527 return ["\\?", "\\?"];
13528 }
13529 else if (c == "{") {
13530 return this.get_token_brace("\\{");
13531 }
13532 else if (c == "@") {
13533 return this.get_token_at("\\@");
13534 }
13535 else if (c == "^") {
13536 return ["\\^", "\\^"];
13537 }
13538 else if (c == "$") {
13539 return ["\\$", "\\$"];
13540 }
13541 else if (c == "<") {
13542 return ["\\<", "\\<"];
13543 }
13544 else if (c == ">") {
13545 return ["\\>", "\\>"];
13546 }
13547 else if (c == "%") {
13548 return this.get_token_percent("\\%");
13549 }
13550 else if (c == "~") {
13551 return ["\\~", "\\~"];
13552 }
13553 else if (c == "[") {
13554 return this.get_token_sq("\\[");
13555 }
13556 else if (c == "|") {
13557 return ["\\|", "\\|"];
13558 }
13559 else if (c == "&") {
13560 return ["\\&", "\\&"];
13561 }
13562 else if (c == "(") {
13563 return ["\\(", "\\("];
13564 }
13565 else if (c == ")") {
13566 return ["\\)", "\\)"];
13567 }
13568 this.reader.seek_set(pos);
13569 return this.get_token_backslash_common();
13570 }
13571 return [c, c];
13572}
13573
13574RegexpParser.prototype.get_token_backslash_common = function() {
13575 var cclass = "iIkKfFpPsSdDxXoOwWhHaAlLuU";
13576 var c = this.reader.get();
13577 if (c == "\\") {
13578 return ["\\\\", "\\\\"];
13579 }
13580 else if (viml_stridx(cclass, c) != -1) {
13581 return ["\\" + c, "\\" + c];
13582 }
13583 else if (c == "_") {
13584 var epos = this.reader.getpos();
13585 var c = this.reader.get();
13586 if (viml_stridx(cclass, c) != -1) {
13587 return ["\\_" + c, "\\_ . c"];
13588 }
13589 else if (c == "^") {
13590 return ["\\_^", "\\_^"];
13591 }
13592 else if (c == "$") {
13593 return ["\\_$", "\\_$"];
13594 }
13595 else if (c == ".") {
13596 return ["\\_.", "\\_."];
13597 }
13598 else if (c == "[") {
13599 return this.get_token_sq("\\_[");
13600 }
13601 throw Err("E63: Invalid use of \\_", epos);
13602 }
13603 else if (viml_stridx("etrb", c) != -1) {
13604 return ["\\" + c, "\\" + c];
13605 }
13606 else if (viml_stridx("123456789", c) != -1) {
13607 return ["\\" + c, "\\" + c];
13608 }
13609 else if (c == "z") {
13610 var epos = this.reader.getpos();
13611 var c = this.reader.get();
13612 if (viml_stridx("123456789", c) != -1) {
13613 return ["\\z" + c, "\\z" + c];
13614 }
13615 else if (c == "s") {
13616 return ["\\zs", "\\zs"];
13617 }
13618 else if (c == "e") {
13619 return ["\\ze", "\\ze"];
13620 }
13621 else if (c == "(") {
13622 return ["\\z(", "\\z("];
13623 }
13624 throw Err("E68: Invalid character after \\z", epos);
13625 }
13626 else if (viml_stridx("cCmMvVZ", c) != -1) {
13627 return ["\\" + c, "\\" + c];
13628 }
13629 else if (c == "%") {
13630 var epos = this.reader.getpos();
13631 var c = this.reader.get();
13632 if (c == "d") {
13633 var r = this.getdecchrs();
13634 if (r != "") {
13635 return ["\\%d" + r, "\\%d" + r];
13636 }
13637 }
13638 else if (c == "o") {
13639 var r = this.getoctchrs();
13640 if (r != "") {
13641 return ["\\%o" + r, "\\%o" + r];
13642 }
13643 }
13644 else if (c == "x") {
13645 var r = this.gethexchrs(2);
13646 if (r != "") {
13647 return ["\\%x" + r, "\\%x" + r];
13648 }
13649 }
13650 else if (c == "u") {
13651 var r = this.gethexchrs(4);
13652 if (r != "") {
13653 return ["\\%u" + r, "\\%u" + r];
13654 }
13655 }
13656 else if (c == "U") {
13657 var r = this.gethexchrs(8);
13658 if (r != "") {
13659 return ["\\%U" + r, "\\%U" + r];
13660 }
13661 }
13662 throw Err("E678: Invalid character after \\%[dxouU]", epos);
13663 }
13664 return ["\\" + c, c];
13665}
13666
13667// \{}
13668RegexpParser.prototype.get_token_brace = function(pre) {
13669 var r = "";
13670 var minus = "";
13671 var comma = "";
13672 var n = "";
13673 var m = "";
13674 if (this.reader.p(0) == "-") {
13675 var minus = this.reader.get();
13676 r += minus;
13677 }
13678 if (isdigit(this.reader.p(0))) {
13679 var n = this.reader.read_digit();
13680 r += n;
13681 }
13682 if (this.reader.p(0) == ",") {
13683 var comma = this.rader.get();
13684 r += comma;
13685 }
13686 if (isdigit(this.reader.p(0))) {
13687 var m = this.reader.read_digit();
13688 r += m;
13689 }
13690 if (this.reader.p(0) == "\\") {
13691 r += this.reader.get();
13692 }
13693 if (this.reader.p(0) != "}") {
13694 throw Err("E554: Syntax error in \\{...}", this.reader.getpos());
13695 }
13696 this.reader.get();
13697 return [pre + r, "\\{" + minus + n + comma + m + "}"];
13698}
13699
13700// \[]
13701RegexpParser.prototype.get_token_sq = function(pre) {
13702 var start = this.reader.tell();
13703 var r = "";
13704 // Complement of range
13705 if (this.reader.p(0) == "^") {
13706 r += this.reader.get();
13707 }
13708 // At the start ']' and '-' mean the literal character.
13709 if (this.reader.p(0) == "]" || this.reader.p(0) == "-") {
13710 r += this.reader.get();
13711 }
13712 while (TRUE) {
13713 var startc = 0;
13714 var c = this.reader.p(0);
13715 if (this.isend(c)) {
13716 // If there is no matching ']', we assume the '[' is a normal character.
13717 this.reader.seek_set(start);
13718 return [pre, "["];
13719 }
13720 else if (c == "]") {
13721 this.reader.seek_cur(1);
13722 return [pre + r + "]", "\\[" + r + "]"];
13723 }
13724 else if (c == "[") {
13725 var e = this.get_token_sq_char_class();
13726 if (e == "") {
13727 var e = this.get_token_sq_equi_class();
13728 if (e == "") {
13729 var e = this.get_token_sq_coll_element();
13730 if (e == "") {
13731 var __tmp = this.get_token_sq_c();
13732 var e = __tmp[0];
13733 var startc = __tmp[1];
13734 }
13735 }
13736 }
13737 r += e;
13738 }
13739 else {
13740 var __tmp = this.get_token_sq_c();
13741 var e = __tmp[0];
13742 var startc = __tmp[1];
13743 r += e;
13744 }
13745 if (startc != 0 && this.reader.p(0) == "-" && !this.isend(this.reader.p(1)) && !(this.reader.p(1) == "\\" && this.reader.p(2) == "n")) {
13746 this.reader.seek_cur(1);
13747 r += "-";
13748 var c = this.reader.p(0);
13749 if (c == "[") {
13750 var e = this.get_token_sq_coll_element();
13751 if (e != "") {
13752 var endc = viml_char2nr(e[2]);
13753 }
13754 else {
13755 var __tmp = this.get_token_sq_c();
13756 var e = __tmp[0];
13757 var endc = __tmp[1];
13758 }
13759 r += e;
13760 }
13761 else {
13762 var __tmp = this.get_token_sq_c();
13763 var e = __tmp[0];
13764 var endc = __tmp[1];
13765 r += e;
13766 }
13767 if (startc > endc || endc > startc + 256) {
13768 throw Err("E16: Invalid range", this.reader.getpos());
13769 }
13770 }
13771 }
13772}
13773
13774// [c]
13775RegexpParser.prototype.get_token_sq_c = function() {
13776 var c = this.reader.p(0);
13777 if (c == "\\") {
13778 this.reader.seek_cur(1);
13779 var c = this.reader.p(0);
13780 if (c == "n") {
13781 this.reader.seek_cur(1);
13782 return ["\\n", 0];
13783 }
13784 else if (c == "r") {
13785 this.reader.seek_cur(1);
13786 return ["\\r", 13];
13787 }
13788 else if (c == "t") {
13789 this.reader.seek_cur(1);
13790 return ["\\t", 9];
13791 }
13792 else if (c == "e") {
13793 this.reader.seek_cur(1);
13794 return ["\\e", 27];
13795 }
13796 else if (c == "b") {
13797 this.reader.seek_cur(1);
13798 return ["\\b", 8];
13799 }
13800 else if (viml_stridx("]^-\\", c) != -1) {
13801 this.reader.seek_cur(1);
13802 return ["\\" + c, viml_char2nr(c)];
13803 }
13804 else if (viml_stridx("doxuU", c) != -1) {
13805 var __tmp = this.get_token_sq_coll_char();
13806 var c = __tmp[0];
13807 var n = __tmp[1];
13808 return [c, n];
13809 }
13810 else {
13811 return ["\\", viml_char2nr("\\")];
13812 }
13813 }
13814 else if (c == "-") {
13815 this.reader.seek_cur(1);
13816 return ["-", viml_char2nr("-")];
13817 }
13818 else {
13819 this.reader.seek_cur(1);
13820 return [c, viml_char2nr(c)];
13821 }
13822}
13823
13824// [\d123]
13825RegexpParser.prototype.get_token_sq_coll_char = function() {
13826 var pos = this.reader.tell();
13827 var c = this.reader.get();
13828 if (c == "d") {
13829 var r = this.getdecchrs();
13830 var n = viml_str2nr(r, 10);
13831 }
13832 else if (c == "o") {
13833 var r = this.getoctchrs();
13834 var n = viml_str2nr(r, 8);
13835 }
13836 else if (c == "x") {
13837 var r = this.gethexchrs(2);
13838 var n = viml_str2nr(r, 16);
13839 }
13840 else if (c == "u") {
13841 var r = this.gethexchrs(4);
13842 var n = viml_str2nr(r, 16);
13843 }
13844 else if (c == "U") {
13845 var r = this.gethexchrs(8);
13846 var n = viml_str2nr(r, 16);
13847 }
13848 else {
13849 var r = "";
13850 }
13851 if (r == "") {
13852 this.reader.seek_set(pos);
13853 return "\\";
13854 }
13855 return ["\\" + c + r, n];
13856}
13857
13858// [[.a.]]
13859RegexpParser.prototype.get_token_sq_coll_element = function() {
13860 if (this.reader.p(0) == "[" && this.reader.p(1) == "." && !this.isend(this.reader.p(2)) && this.reader.p(3) == "." && this.reader.p(4) == "]") {
13861 return this.reader.getn(5);
13862 }
13863 return "";
13864}
13865
13866// [[=a=]]
13867RegexpParser.prototype.get_token_sq_equi_class = function() {
13868 if (this.reader.p(0) == "[" && this.reader.p(1) == "=" && !this.isend(this.reader.p(2)) && this.reader.p(3) == "=" && this.reader.p(4) == "]") {
13869 return this.reader.getn(5);
13870 }
13871 return "";
13872}
13873
13874// [[:alpha:]]
13875RegexpParser.prototype.get_token_sq_char_class = function() {
13876 var class_names = ["alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "tab", "return", "backspace", "escape"];
13877 var pos = this.reader.tell();
13878 if (this.reader.p(0) == "[" && this.reader.p(1) == ":") {
13879 this.reader.seek_cur(2);
13880 var r = this.reader.read_alpha();
13881 if (this.reader.p(0) == ":" && this.reader.p(1) == "]") {
13882 this.reader.seek_cur(2);
13883 var __c15 = class_names;
13884 for (var __i15 = 0; __i15 < __c15.length; ++__i15) {
13885 var name = __c15[__i15];
13886 if (r == name) {
13887 return "[:" + name + ":]";
13888 }
13889 }
13890 }
13891 }
13892 this.reader.seek_set(pos);
13893 return "";
13894}
13895
13896// \@...
13897RegexpParser.prototype.get_token_at = function(pre) {
13898 var epos = this.reader.getpos();
13899 var c = this.reader.get();
13900 if (c == ">") {
13901 return [pre + ">", "\\@>"];
13902 }
13903 else if (c == "=") {
13904 return [pre + "=", "\\@="];
13905 }
13906 else if (c == "!") {
13907 return [pre + "!", "\\@!"];
13908 }
13909 else if (c == "<") {
13910 var c = this.reader.get();
13911 if (c == "=") {
13912 return [pre + "<=", "\\@<="];
13913 }
13914 else if (c == "!") {
13915 return [pre + "<!", "\\@<!"];
13916 }
13917 }
13918 throw Err("E64: @ follows nothing", epos);
13919}
13920
13921// \%...
13922RegexpParser.prototype.get_token_percent = function(pre) {
13923 var c = this.reader.get();
13924 if (c == "^") {
13925 return [pre + "^", "\\%^"];
13926 }
13927 else if (c == "$") {
13928 return [pre + "$", "\\%$"];
13929 }
13930 else if (c == "V") {
13931 return [pre + "V", "\\%V"];
13932 }
13933 else if (c == "#") {
13934 return [pre + "#", "\\%#"];
13935 }
13936 else if (c == "[") {
13937 return this.get_token_percent_sq(pre + "[");
13938 }
13939 else if (c == "(") {
13940 return [pre + "(", "\\%("];
13941 }
13942 else {
13943 return this.get_token_mlcv(pre);
13944 }
13945}
13946
13947// \%[]
13948RegexpParser.prototype.get_token_percent_sq = function(pre) {
13949 var r = "";
13950 while (TRUE) {
13951 var c = this.reader.peek();
13952 if (this.isend(c)) {
13953 throw Err("E69: Missing ] after \\%[", this.reader.getpos());
13954 }
13955 else if (c == "]") {
13956 if (r == "") {
13957 throw Err("E70: Empty \\%[", this.reader.getpos());
13958 }
13959 this.reader.seek_cur(1);
13960 break;
13961 }
13962 this.reader.seek_cur(1);
13963 r += c;
13964 }
13965 return [pre + r + "]", "\\%[" + r + "]"];
13966}
13967
13968// \%'m \%l \%c \%v
13969RegexpParser.prototype.get_token_mlvc = function(pre) {
13970 var r = "";
13971 var cmp = "";
13972 if (this.reader.p(0) == "<" || this.reader.p(0) == ">") {
13973 var cmp = this.reader.get();
13974 r += cmp;
13975 }
13976 if (this.reader.p(0) == "'") {
13977 r += this.reader.get();
13978 var c = this.reader.p(0);
13979 if (this.isend(c)) {
13980 // FIXME: Should be error? Vim allow this.
13981 var c = "";
13982 }
13983 else {
13984 var c = this.reader.get();
13985 }
13986 return [pre + r + c, "\\%" + cmp + "'" + c];
13987 }
13988 else if (isdigit(this.reader.p(0))) {
13989 var d = this.reader.read_digit();
13990 r += d;
13991 var c = this.reader.p(0);
13992 if (c == "l") {
13993 this.reader.get();
13994 return [pre + r + "l", "\\%" + cmp + d + "l"];
13995 }
13996 else if (c == "c") {
13997 this.reader.get();
13998 return [pre + r + "c", "\\%" + cmp + d + "c"];
13999 }
14000 else if (c == "v") {
14001 this.reader.get();
14002 return [pre + r + "v", "\\%" + cmp + d + "v"];
14003 }
14004 }
14005 throw Err("E71: Invalid character after %", this.reader.getpos());
14006}
14007
14008RegexpParser.prototype.getdecchrs = function() {
14009 return this.reader.read_digit();
14010}
14011
14012RegexpParser.prototype.getoctchrs = function() {
14013 return this.reader.read_odigit();
14014}
14015
14016RegexpParser.prototype.gethexchrs = function(n) {
14017 var r = "";
14018 var __c16 = viml_range(n);
14019 for (var __i16 = 0; __i16 < __c16.length; ++__i16) {
14020 var i = __c16[__i16];
14021 var c = this.reader.peek();
14022 if (!isxdigit(c)) {
14023 break;
14024 }
14025 r += this.reader.get();
14026 }
14027 return r;
14028}
14029
14030if (__webpack_require__.c[__webpack_require__.s] === module) {
14031 main();
14032}
14033else {
14034 module.exports = {
14035 VimLParser: VimLParser,
14036 StringReader: StringReader,
14037 Compiler: Compiler
14038 };
14039}
14040
14041/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(53)(module)))
14042
14043/***/ }),
14044/* 53 */
14045/***/ (function(module, exports) {
14046
14047module.exports = function(module) {
14048 if (!module.webpackPolyfill) {
14049 module.deprecate = function() {};
14050 module.paths = [];
14051 // module.parent = undefined by default
14052 if (!module.children) module.children = [];
14053 Object.defineProperty(module, "loaded", {
14054 enumerable: true,
14055 get: function() {
14056 return module.l;
14057 }
14058 });
14059 Object.defineProperty(module, "id", {
14060 enumerable: true,
14061 get: function() {
14062 return module.i;
14063 }
14064 });
14065 module.webpackPolyfill = 1;
14066 }
14067 return module;
14068};
14069
14070
14071/***/ }),
14072/* 54 */
14073/***/ (function(module, exports, __webpack_require__) {
14074
14075"use strict";
14076
14077Object.defineProperty(exports, "__esModule", { value: true });
14078exports.errorLinePattern = /[^:]+:\s*(.+?):\s*line\s*([0-9]+)\s*col\s*([0-9]+)/;
14079exports.commentPattern = /^[ \t]*("|')/;
14080exports.keywordPattern = /[\w#&$<>.:]/;
14081exports.builtinFunctionPattern = /^((<SID>|\b(v|g|b|s|l|a):)?[\w#&]+)[ \t]*\([^)]*\)/;
14082exports.wordPrePattern = /^.*?(((<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+)|(<SID>|<SID|<SI|<S|<|\b(v|g|b|s|l|a):))$/;
14083exports.wordNextPattern = /^((SID>|ID>|D>|>|<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+|(:[\w#&$.]+)).*?(\r\n|\r|\n)?$/;
14084exports.colorschemePattern = /\bcolorscheme[ \t]+\w*$/;
14085exports.mapCommandPattern = /^([ \t]*(\[ \t]*)?)\w*map[ \t]+/;
14086exports.highlightLinkPattern = /^[ \t]*(hi|highlight)[ \t]+link([ \t]+[^ \t]+)*[ \t]*$/;
14087exports.highlightPattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]*$/;
14088exports.highlightValuePattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]+([^ \t=]+)=[^ \t=]*$/;
14089exports.autocmdPattern = /^[ \t]*(au|autocmd)!?[ \t]+([^ \t,]+,)*[^ \t,]*$/;
14090exports.builtinVariablePattern = [
14091 /\bv:\w*$/,
14092];
14093exports.optionPattern = [
14094 /(^|[ \t]+)&\w*$/,
14095 /(^|[ \t]+)set(l|local|g|global)?[ \t]+\w+$/,
14096];
14097exports.notFunctionPattern = [
14098 /^[ \t]*\\$/,
14099 /^[ \t]*\w+$/,
14100 /^[ \t]*"/,
14101 /(let|set|colorscheme)[ \t][^ \t]*$/,
14102 /[^([,\\ \t\w#>]\w*$/,
14103 /^[ \t]*(hi|highlight)([ \t]+link)?([ \t]+[^ \t]+)*[ \t]*$/,
14104 exports.autocmdPattern,
14105];
14106exports.commandPattern = [
14107 /(^|[ \t]):\w+$/,
14108 /^[ \t]*\w+$/,
14109 /:?silent!?[ \t]\w+/,
14110];
14111exports.featurePattern = [
14112 /\bhas\([ \t]*["']\w*/,
14113];
14114exports.expandPattern = [
14115 /\bexpand\(['"]<\w*$/,
14116 /\bexpand\([ \t]*['"]\w*$/,
14117];
14118exports.notIdentifierPattern = [
14119 exports.commentPattern,
14120 /("|'):\w*$/,
14121 /^[ \t]*\\$/,
14122 /^[ \t]*call[ \t]+[^ \t()]*$/,
14123 /('|"|#|&|\$|<)\w*$/,
14124];
14125
14126
14127/***/ }),
14128/* 55 */
14129/***/ (function(module, exports, __webpack_require__) {
14130
14131"use strict";
14132
14133Object.defineProperty(exports, "__esModule", { value: true });
14134var constant_1 = __webpack_require__(44);
14135var conf;
14136exports.default = {
14137 init: function (config) {
14138 conf = config;
14139 },
14140 changeByKey: function (key, value) {
14141 if (conf) {
14142 conf[key] = value;
14143 }
14144 },
14145 get iskeyword() {
14146 return conf && conf.iskeyword || "";
14147 },
14148 get vimruntime() {
14149 return conf && conf.vimruntime || "";
14150 },
14151 get runtimepath() {
14152 return conf && conf.runtimepath || [];
14153 },
14154 get diagnostic() {
14155 return conf && conf.diagnostic || {
14156 enable: true,
14157 };
14158 },
14159 get snippetSupport() {
14160 return conf && conf.snippetSupport || false;
14161 },
14162 get suggest() {
14163 return conf && conf.suggest || {
14164 fromRuntimepath: false,
14165 fromVimruntime: true,
14166 };
14167 },
14168 get indexes() {
14169 var defaults = {
14170 runtimepath: true,
14171 gap: 100,
14172 count: 1,
14173 projectRootPatterns: constant_1.projectRootPatterns,
14174 };
14175 if (!conf || !conf.indexes) {
14176 return defaults;
14177 }
14178 if (conf.indexes.gap !== undefined) {
14179 defaults.gap = conf.indexes.gap;
14180 }
14181 if (conf.indexes.count !== undefined) {
14182 defaults.count = conf.indexes.count;
14183 }
14184 if (conf.indexes.projectRootPatterns !== undefined
14185 && Array.isArray(conf.indexes.projectRootPatterns)
14186 && conf.indexes.projectRootPatterns.length) {
14187 defaults.projectRootPatterns = conf.indexes.projectRootPatterns;
14188 }
14189 return defaults;
14190 },
14191};
14192
14193
14194/***/ }),
14195/* 56 */
14196/***/ (function(module, exports, __webpack_require__) {
14197
14198"use strict";
14199
14200Object.defineProperty(exports, "__esModule", { value: true });
14201var vscode_languageserver_1 = __webpack_require__(2);
14202var vscode_languageserver_textdocument_1 = __webpack_require__(57);
14203// text document manager
14204exports.documents = new vscode_languageserver_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
14205
14206
14207/***/ }),
14208/* 57 */
14209/***/ (function(module, __webpack_exports__, __webpack_require__) {
14210
14211"use strict";
14212__webpack_require__.r(__webpack_exports__);
14213/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
14214/* --------------------------------------------------------------------------------------------
14215 * Copyright (c) Microsoft Corporation. All rights reserved.
14216 * Licensed under the MIT License. See License.txt in the project root for license information.
14217 * ------------------------------------------------------------------------------------------ */
14218
14219var FullTextDocument = /** @class */ (function () {
14220 function FullTextDocument(uri, languageId, version, content) {
14221 this._uri = uri;
14222 this._languageId = languageId;
14223 this._version = version;
14224 this._content = content;
14225 this._lineOffsets = undefined;
14226 }
14227 Object.defineProperty(FullTextDocument.prototype, "uri", {
14228 get: function () {
14229 return this._uri;
14230 },
14231 enumerable: true,
14232 configurable: true
14233 });
14234 Object.defineProperty(FullTextDocument.prototype, "languageId", {
14235 get: function () {
14236 return this._languageId;
14237 },
14238 enumerable: true,
14239 configurable: true
14240 });
14241 Object.defineProperty(FullTextDocument.prototype, "version", {
14242 get: function () {
14243 return this._version;
14244 },
14245 enumerable: true,
14246 configurable: true
14247 });
14248 FullTextDocument.prototype.getText = function (range) {
14249 if (range) {
14250 var start = this.offsetAt(range.start);
14251 var end = this.offsetAt(range.end);
14252 return this._content.substring(start, end);
14253 }
14254 return this._content;
14255 };
14256 FullTextDocument.prototype.update = function (changes, version) {
14257 for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
14258 var change = changes_1[_i];
14259 if (FullTextDocument.isIncremental(change)) {
14260 // makes sure start is before end
14261 var range = getWellformedRange(change.range);
14262 // update content
14263 var startOffset = this.offsetAt(range.start);
14264 var endOffset = this.offsetAt(range.end);
14265 this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
14266 // update the offsets
14267 var startLine = Math.max(range.start.line, 0);
14268 var endLine = Math.max(range.end.line, 0);
14269 var lineOffsets = this._lineOffsets;
14270 var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
14271 if (endLine - startLine === addedLineOffsets.length) {
14272 for (var i = 0, len = addedLineOffsets.length; i < len; i++) {
14273 lineOffsets[i + startLine + 1] = addedLineOffsets[i];
14274 }
14275 }
14276 else {
14277 if (addedLineOffsets.length < 10000) {
14278 lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));
14279 }
14280 else { // avoid too many arguments for splice
14281 this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
14282 }
14283 }
14284 var diff = change.text.length - (endOffset - startOffset);
14285 if (diff !== 0) {
14286 for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {
14287 lineOffsets[i] = lineOffsets[i] + diff;
14288 }
14289 }
14290 }
14291 else if (FullTextDocument.isFull(change)) {
14292 this._content = change.text;
14293 this._lineOffsets = undefined;
14294 }
14295 else {
14296 throw new Error('Unknown change event received');
14297 }
14298 }
14299 this._version = version;
14300 };
14301 FullTextDocument.prototype.getLineOffsets = function () {
14302 if (this._lineOffsets === undefined) {
14303 this._lineOffsets = computeLineOffsets(this._content, true);
14304 }
14305 return this._lineOffsets;
14306 };
14307 FullTextDocument.prototype.positionAt = function (offset) {
14308 offset = Math.max(Math.min(offset, this._content.length), 0);
14309 var lineOffsets = this.getLineOffsets();
14310 var low = 0, high = lineOffsets.length;
14311 if (high === 0) {
14312 return { line: 0, character: offset };
14313 }
14314 while (low < high) {
14315 var mid = Math.floor((low + high) / 2);
14316 if (lineOffsets[mid] > offset) {
14317 high = mid;
14318 }
14319 else {
14320 low = mid + 1;
14321 }
14322 }
14323 // low is the least x for which the line offset is larger than the current offset
14324 // or array.length if no line offset is larger than the current offset
14325 var line = low - 1;
14326 return { line: line, character: offset - lineOffsets[line] };
14327 };
14328 FullTextDocument.prototype.offsetAt = function (position) {
14329 var lineOffsets = this.getLineOffsets();
14330 if (position.line >= lineOffsets.length) {
14331 return this._content.length;
14332 }
14333 else if (position.line < 0) {
14334 return 0;
14335 }
14336 var lineOffset = lineOffsets[position.line];
14337 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
14338 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
14339 };
14340 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
14341 get: function () {
14342 return this.getLineOffsets().length;
14343 },
14344 enumerable: true,
14345 configurable: true
14346 });
14347 FullTextDocument.isIncremental = function (event) {
14348 var candidate = event;
14349 return candidate !== undefined && candidate !== null &&
14350 typeof candidate.text === 'string' && candidate.range !== undefined &&
14351 (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
14352 };
14353 FullTextDocument.isFull = function (event) {
14354 var candidate = event;
14355 return candidate !== undefined && candidate !== null &&
14356 typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
14357 };
14358 return FullTextDocument;
14359}());
14360var TextDocument;
14361(function (TextDocument) {
14362 /**
14363 * Creates a new text document.
14364 *
14365 * @param uri The document's uri.
14366 * @param languageId The document's language Id.
14367 * @param version The document's initial version number.
14368 * @param content The document's content.
14369 */
14370 function create(uri, languageId, version, content) {
14371 return new FullTextDocument(uri, languageId, version, content);
14372 }
14373 TextDocument.create = create;
14374 /**
14375 * Updates a TextDocument by modifing its content.
14376 *
14377 * @param document the document to update. Only documents created by TextDocument.create are valid inputs.
14378 * @param changes the changes to apply to the document.
14379 * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
14380 *
14381 */
14382 function update(document, changes, version) {
14383 if (document instanceof FullTextDocument) {
14384 document.update(changes, version);
14385 return document;
14386 }
14387 else {
14388 throw new Error('TextDocument.update: document must be created by TextDocument.create');
14389 }
14390 }
14391 TextDocument.update = update;
14392 function applyEdits(document, edits) {
14393 var text = document.getText();
14394 var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {
14395 var diff = a.range.start.line - b.range.start.line;
14396 if (diff === 0) {
14397 return a.range.start.character - b.range.start.character;
14398 }
14399 return diff;
14400 });
14401 var lastModifiedOffset = 0;
14402 var spans = [];
14403 for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {
14404 var e = sortedEdits_1[_i];
14405 var startOffset = document.offsetAt(e.range.start);
14406 if (startOffset < lastModifiedOffset) {
14407 throw new Error('Overlapping edit');
14408 }
14409 else if (startOffset > lastModifiedOffset) {
14410 spans.push(text.substring(lastModifiedOffset, startOffset));
14411 }
14412 if (e.newText.length) {
14413 spans.push(e.newText);
14414 }
14415 lastModifiedOffset = document.offsetAt(e.range.end);
14416 }
14417 spans.push(text.substr(lastModifiedOffset));
14418 return spans.join('');
14419 }
14420 TextDocument.applyEdits = applyEdits;
14421})(TextDocument || (TextDocument = {}));
14422function mergeSort(data, compare) {
14423 if (data.length <= 1) {
14424 // sorted
14425 return data;
14426 }
14427 var p = (data.length / 2) | 0;
14428 var left = data.slice(0, p);
14429 var right = data.slice(p);
14430 mergeSort(left, compare);
14431 mergeSort(right, compare);
14432 var leftIdx = 0;
14433 var rightIdx = 0;
14434 var i = 0;
14435 while (leftIdx < left.length && rightIdx < right.length) {
14436 var ret = compare(left[leftIdx], right[rightIdx]);
14437 if (ret <= 0) {
14438 // smaller_equal -> take left to preserve order
14439 data[i++] = left[leftIdx++];
14440 }
14441 else {
14442 // greater -> take right
14443 data[i++] = right[rightIdx++];
14444 }
14445 }
14446 while (leftIdx < left.length) {
14447 data[i++] = left[leftIdx++];
14448 }
14449 while (rightIdx < right.length) {
14450 data[i++] = right[rightIdx++];
14451 }
14452 return data;
14453}
14454function computeLineOffsets(text, isAtLineStart, textOffset) {
14455 if (textOffset === void 0) { textOffset = 0; }
14456 var result = isAtLineStart ? [textOffset] : [];
14457 for (var i = 0; i < text.length; i++) {
14458 var ch = text.charCodeAt(i);
14459 if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {
14460 if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {
14461 i++;
14462 }
14463 result.push(textOffset + i + 1);
14464 }
14465 }
14466 return result;
14467}
14468function getWellformedRange(range) {
14469 var start = range.start;
14470 var end = range.end;
14471 if (start.line > end.line || (start.line === end.line && start.character > end.character)) {
14472 return { start: end, end: start };
14473 }
14474 return range;
14475}
14476function getWellformedEdit(textEdit) {
14477 var range = getWellformedRange(textEdit.range);
14478 if (range !== textEdit.range) {
14479 return { newText: textEdit.newText, range: range };
14480 }
14481 return textEdit;
14482}
14483
14484
14485/***/ }),
14486/* 58 */
14487/***/ (function(module, exports, __webpack_require__) {
14488
14489"use strict";
14490
14491Object.defineProperty(exports, "__esModule", { value: true });
14492var patterns_1 = __webpack_require__(54);
14493var builtin_1 = __webpack_require__(59);
14494var provider_1 = __webpack_require__(140);
14495function provider(line) {
14496 if (patterns_1.autocmdPattern.test(line)) {
14497 return builtin_1.builtinDocs.getVimAutocmds().filter(function (item) {
14498 return line.indexOf(item.label) === -1;
14499 });
14500 }
14501 return [];
14502}
14503provider_1.useProvider(provider);
14504
14505
14506/***/ }),
14507/* 59 */
14508/***/ (function(module, exports, __webpack_require__) {
14509
14510"use strict";
14511
14512var __assign = (this && this.__assign) || function () {
14513 __assign = Object.assign || function(t) {
14514 for (var s, i = 1, n = arguments.length; i < n; i++) {
14515 s = arguments[i];
14516 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14517 t[p] = s[p];
14518 }
14519 return t;
14520 };
14521 return __assign.apply(this, arguments);
14522};
14523var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14524 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14525 return new (P || (P = Promise))(function (resolve, reject) {
14526 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14527 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14528 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14529 step((generator = generator.apply(thisArg, _arguments || [])).next());
14530 });
14531};
14532var __generator = (this && this.__generator) || function (thisArg, body) {
14533 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14534 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14535 function verb(n) { return function (v) { return step([n, v]); }; }
14536 function step(op) {
14537 if (f) throw new TypeError("Generator is already executing.");
14538 while (_) try {
14539 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;
14540 if (y = 0, t) op = [op[0] & 2, t.value];
14541 switch (op[0]) {
14542 case 0: case 1: t = op; break;
14543 case 4: _.label++; return { value: op[1], done: false };
14544 case 5: _.label++; y = op[1]; op = [0]; continue;
14545 case 7: op = _.ops.pop(); _.trys.pop(); continue;
14546 default:
14547 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
14548 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
14549 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
14550 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
14551 if (t[2]) _.ops.pop();
14552 _.trys.pop(); continue;
14553 }
14554 op = body.call(thisArg, _);
14555 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
14556 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
14557 }
14558};
14559var __spreadArrays = (this && this.__spreadArrays) || function () {
14560 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
14561 for (var r = Array(s), k = 0, i = 0; i < il; i++)
14562 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
14563 r[k] = a[j];
14564 return r;
14565};
14566var __importDefault = (this && this.__importDefault) || function (mod) {
14567 return (mod && mod.__esModule) ? mod : { "default": mod };
14568};
14569Object.defineProperty(exports, "__esModule", { value: true });
14570/*
14571 * vim builtin completion items
14572 *
14573 * 1. functions
14574 * 2. options
14575 * 3. variables
14576 * 4. commands
14577 * 5. has features
14578 * 6. expand Keyword
14579 * 7. map args
14580 */
14581var fast_glob_1 = __importDefault(__webpack_require__(60));
14582var path_1 = __importDefault(__webpack_require__(13));
14583var vscode_languageserver_1 = __webpack_require__(2);
14584var logger_1 = __importDefault(__webpack_require__(137));
14585var patterns_1 = __webpack_require__(54);
14586var util_1 = __webpack_require__(46);
14587var builtin_docs_json_1 = __importDefault(__webpack_require__(139));
14588var config_1 = __importDefault(__webpack_require__(55));
14589var log = logger_1.default("builtin");
14590var Builtin = /** @class */ (function () {
14591 function Builtin() {
14592 // completion items
14593 this.vimPredefinedVariablesItems = [];
14594 this.vimOptionItems = [];
14595 this.vimBuiltinFunctionItems = [];
14596 this.vimBuiltinFunctionMap = {};
14597 this.vimCommandItems = [];
14598 this.vimMapArgsItems = [];
14599 this.vimFeatureItems = [];
14600 this.vimAutocmdItems = [];
14601 this.expandKeywordItems = [];
14602 this.colorschemeItems = [];
14603 this.highlightArgKeys = [];
14604 this.highlightArgValues = {};
14605 // signature help
14606 this.vimBuiltFunctionSignatureHelp = {};
14607 // documents
14608 this.vimBuiltFunctionDocuments = {};
14609 this.vimOptionDocuments = {};
14610 this.vimPredefinedVariableDocuments = {};
14611 this.vimCommandDocuments = {};
14612 this.vimFeatureDocuments = {};
14613 this.expandKeywordDocuments = {};
14614 }
14615 Builtin.prototype.init = function () {
14616 this.start();
14617 };
14618 Builtin.prototype.getPredefinedVimVariables = function () {
14619 return this.vimPredefinedVariablesItems;
14620 };
14621 Builtin.prototype.getVimOptions = function () {
14622 return this.vimOptionItems;
14623 };
14624 Builtin.prototype.getBuiltinVimFunctions = function () {
14625 return this.vimBuiltinFunctionItems;
14626 };
14627 Builtin.prototype.isBuiltinFunction = function (label) {
14628 return this.vimBuiltinFunctionMap[label];
14629 };
14630 Builtin.prototype.getExpandKeywords = function () {
14631 return this.expandKeywordItems;
14632 };
14633 Builtin.prototype.getVimCommands = function () {
14634 return this.vimCommandItems;
14635 };
14636 Builtin.prototype.getVimMapArgs = function () {
14637 return this.vimMapArgsItems;
14638 };
14639 Builtin.prototype.getVimFeatures = function () {
14640 return this.vimFeatureItems;
14641 };
14642 Builtin.prototype.getVimAutocmds = function () {
14643 return this.vimAutocmdItems;
14644 };
14645 Builtin.prototype.getColorschemes = function () {
14646 return this.colorschemeItems;
14647 };
14648 Builtin.prototype.getHighlightArgKeys = function () {
14649 return this.highlightArgKeys;
14650 };
14651 Builtin.prototype.getHighlightArgValues = function () {
14652 return this.highlightArgValues;
14653 };
14654 Builtin.prototype.getSignatureHelpByName = function (name, idx) {
14655 var params = this.vimBuiltFunctionSignatureHelp[name];
14656 if (params) {
14657 return {
14658 signatures: [{
14659 label: name + "(" + params[0] + ")" + (params[1] ? ": " + params[1] : ""),
14660 documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14661 parameters: params[0].split("[")[0].split(",").map(function (param) {
14662 return {
14663 label: param.trim(),
14664 };
14665 }),
14666 }],
14667 activeSignature: 0,
14668 activeParameter: idx,
14669 };
14670 }
14671 return;
14672 };
14673 Builtin.prototype.getDocumentByCompletionItem = function (params) {
14674 var kind = params.kind;
14675 switch (kind) {
14676 case vscode_languageserver_1.CompletionItemKind.Variable:
14677 if (!this.vimPredefinedVariableDocuments[params.label]) {
14678 return params;
14679 }
14680 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimPredefinedVariableDocuments[params.label]) });
14681 case vscode_languageserver_1.CompletionItemKind.Property:
14682 if (!this.vimOptionDocuments[params.label]) {
14683 return params;
14684 }
14685 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimOptionDocuments[params.label]) });
14686 case vscode_languageserver_1.CompletionItemKind.Function:
14687 if (!this.vimBuiltFunctionDocuments[params.label]) {
14688 return params;
14689 }
14690 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[params.label]) });
14691 case vscode_languageserver_1.CompletionItemKind.EnumMember:
14692 if (!this.vimFeatureDocuments[params.label]) {
14693 return params;
14694 }
14695 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimFeatureDocuments[params.label]) });
14696 case vscode_languageserver_1.CompletionItemKind.Operator:
14697 if (!this.vimCommandDocuments[params.label]) {
14698 return params;
14699 }
14700 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimCommandDocuments[params.label]) });
14701 default:
14702 return params;
14703 }
14704 };
14705 Builtin.prototype.getHoverDocument = function (name, pre, next) {
14706 // builtin variables
14707 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, pre) && this.vimPredefinedVariableDocuments[name]) {
14708 return {
14709 contents: this.formatVimDocument(this.vimPredefinedVariableDocuments[name]),
14710 };
14711 // options
14712 }
14713 else if (util_1.isSomeMatchPattern(patterns_1.optionPattern, pre)
14714 && (this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)])) {
14715 return {
14716 contents: this.formatVimDocument(this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)]),
14717 };
14718 // builtin functions
14719 }
14720 else if (patterns_1.builtinFunctionPattern.test(next) && this.vimBuiltFunctionDocuments[name]) {
14721 return {
14722 contents: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14723 };
14724 // has features
14725 }
14726 else if (util_1.isSomeMatchPattern(patterns_1.featurePattern, pre) && this.vimFeatureDocuments[name]) {
14727 return {
14728 contents: this.formatVimDocument(this.vimFeatureDocuments[name]),
14729 };
14730 // expand Keywords
14731 }
14732 else if (util_1.isSomeMatchPattern(patterns_1.expandPattern, pre) && this.expandKeywordDocuments["<" + name + ">"]) {
14733 return {
14734 contents: this.formatVimDocument(this.expandKeywordDocuments["<" + name + ">"]),
14735 };
14736 // command
14737 }
14738 else if (util_1.isSomeMatchPattern(patterns_1.commandPattern, pre) && this.vimCommandDocuments[name]) {
14739 return {
14740 contents: this.formatVimDocument(this.vimCommandDocuments[name]),
14741 };
14742 }
14743 };
14744 Builtin.prototype.start = function () {
14745 return __awaiter(this, void 0, void 0, function () {
14746 var runtimepath, data;
14747 var _this = this;
14748 return __generator(this, function (_a) {
14749 runtimepath = config_1.default.runtimepath;
14750 // get colorschemes
14751 if (runtimepath) {
14752 this.resolveColorschemes(runtimepath);
14753 }
14754 // get map args
14755 this.resolveMapArgs();
14756 // get highlight arg keys
14757 this.resolveHighlightArgKeys();
14758 // get highlight arg values
14759 this.resolveHighlightArgValues();
14760 try {
14761 data = builtin_docs_json_1.default;
14762 this.vimBuiltinFunctionItems = data.completionItems.functions;
14763 this.vimBuiltinFunctionItems.forEach(function (item) {
14764 if (!_this.vimBuiltinFunctionMap[item.label]) {
14765 _this.vimBuiltinFunctionMap[item.label] = true;
14766 }
14767 });
14768 this.vimBuiltFunctionDocuments = data.documents.functions;
14769 this.vimCommandItems = data.completionItems.commands;
14770 this.vimCommandDocuments = data.documents.commands;
14771 this.vimPredefinedVariablesItems = data.completionItems.variables;
14772 this.vimPredefinedVariableDocuments = data.documents.variables;
14773 this.vimOptionItems = data.completionItems.options;
14774 this.vimOptionDocuments = data.documents.options;
14775 this.vimFeatureItems = data.completionItems.features;
14776 this.vimAutocmdItems = data.completionItems.autocmds;
14777 this.vimFeatureDocuments = data.documents.features;
14778 this.expandKeywordItems = data.completionItems.expandKeywords;
14779 this.expandKeywordDocuments = data.documents.expandKeywords;
14780 this.vimBuiltFunctionSignatureHelp = data.signatureHelp;
14781 }
14782 catch (error) {
14783 log.error("[vimls]: parse docs/builtin-doc.json fail => " + (error.message || error));
14784 }
14785 return [2 /*return*/];
14786 });
14787 });
14788 };
14789 // format vim document to markdown
14790 Builtin.prototype.formatVimDocument = function (document) {
14791 var indent = 0;
14792 return {
14793 kind: vscode_languageserver_1.MarkupKind.Markdown,
14794 value: __spreadArrays([
14795 "```help"
14796 ], document.map(function (line) {
14797 if (indent === 0) {
14798 var m = line.match(/^([ \t]+)/);
14799 if (m) {
14800 indent = m[1].length;
14801 }
14802 }
14803 return line.replace(new RegExp("^[ \\t]{" + indent + "}", "g"), "").replace(/\t/g, " ");
14804 }), [
14805 "```",
14806 ]).join("\n"),
14807 };
14808 };
14809 Builtin.prototype.resolveMapArgs = function () {
14810 this.vimMapArgsItems = ["<buffer>", "<nowait>", "<silent>", "<script>", "<expr>", "<unique>"]
14811 .map(function (item) {
14812 return {
14813 label: item,
14814 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14815 documentation: "",
14816 insertText: item,
14817 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14818 };
14819 });
14820 };
14821 Builtin.prototype.resolveColorschemes = function (runtimepath) {
14822 return __awaiter(this, void 0, void 0, function () {
14823 var list, glob, colorschemes, error_1;
14824 return __generator(this, function (_a) {
14825 switch (_a.label) {
14826 case 0:
14827 list = runtimepath;
14828 if (config_1.default.vimruntime) {
14829 list.push(config_1.default.vimruntime);
14830 }
14831 glob = runtimepath.map(function (p) { return path_1.default.join(p.trim(), "colors/*.vim"); });
14832 colorschemes = [];
14833 _a.label = 1;
14834 case 1:
14835 _a.trys.push([1, 3, , 4]);
14836 return [4 /*yield*/, fast_glob_1.default(glob, { onlyFiles: false, deep: 0 })];
14837 case 2:
14838 colorschemes = _a.sent();
14839 return [3 /*break*/, 4];
14840 case 3:
14841 error_1 = _a.sent();
14842 log.error([
14843 "Index Colorschemes Error: " + JSON.stringify(glob),
14844 "Error => " + (error_1.stack || error_1.message || error_1),
14845 ].join("\n"));
14846 return [3 /*break*/, 4];
14847 case 4:
14848 this.colorschemeItems = colorschemes.map(function (p) {
14849 var label = path_1.default.basename(p, ".vim");
14850 var item = {
14851 label: label,
14852 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14853 insertText: label,
14854 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14855 };
14856 return item;
14857 });
14858 return [2 /*return*/];
14859 }
14860 });
14861 });
14862 };
14863 Builtin.prototype.resolveHighlightArgKeys = function () {
14864 this.highlightArgKeys = [
14865 "cterm",
14866 "start",
14867 "stop",
14868 "ctermfg",
14869 "ctermbg",
14870 "gui",
14871 "font",
14872 "guifg",
14873 "guibg",
14874 "guisp",
14875 "blend",
14876 ]
14877 .map(function (item) {
14878 return {
14879 label: item,
14880 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14881 documentation: "",
14882 insertText: item + "=${0}",
14883 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
14884 };
14885 });
14886 };
14887 Builtin.prototype.resolveHighlightArgValues = function () {
14888 var values = {
14889 "cterm": ["bold", "underline", "undercurl", "reverse", "inverse", "italic", "standout", "NONE"],
14890 "ctermfg ctermbg": [
14891 "Black",
14892 "DarkBlue",
14893 "DarkGreen",
14894 "DarkCyan",
14895 "DarkRed",
14896 "DarkMagenta",
14897 "Brown", "DarkYellow",
14898 "LightGray", "LightGrey", "Gray", "Grey",
14899 "DarkGray", "DarkGrey",
14900 "Blue", "LightBlue",
14901 "Green", "LightGreen",
14902 "Cyan", "LightCyan",
14903 "Red", "LightRed",
14904 "Magenta", "LightMagenta",
14905 "Yellow", "LightYellow",
14906 "White",
14907 ],
14908 "guifg guibg guisp": [
14909 "NONE",
14910 "bg",
14911 "background",
14912 "fg",
14913 "foreground",
14914 "Red", "LightRed", "DarkRed",
14915 "Green", "LightGreen", "DarkGreen", "SeaGreen",
14916 "Blue", "LightBlue", "DarkBlue", "SlateBlue",
14917 "Cyan", "LightCyan", "DarkCyan",
14918 "Magenta", "LightMagenta", "DarkMagenta",
14919 "Yellow", "LightYellow", "Brown", "DarkYellow",
14920 "Gray", "LightGray", "DarkGray",
14921 "Black", "White",
14922 "Orange", "Purple", "Violet",
14923 ],
14924 };
14925 var argValues = {};
14926 Object.keys(values).forEach(function (key) {
14927 var items = values[key].map(function (val) { return ({
14928 label: val,
14929 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14930 documentation: "",
14931 insertText: val,
14932 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14933 }); });
14934 key.split(" ").forEach(function (name) {
14935 argValues[name] = items;
14936 });
14937 });
14938 this.highlightArgValues = argValues;
14939 };
14940 return Builtin;
14941}());
14942exports.builtinDocs = new Builtin();
14943
14944
14945/***/ }),
14946/* 60 */
14947/***/ (function(module, exports, __webpack_require__) {
14948
14949"use strict";
14950
14951const taskManager = __webpack_require__(61);
14952const async_1 = __webpack_require__(98);
14953const stream_1 = __webpack_require__(133);
14954const sync_1 = __webpack_require__(134);
14955const settings_1 = __webpack_require__(136);
14956const utils = __webpack_require__(62);
14957async function FastGlob(source, options) {
14958 assertPatternsInput(source);
14959 const works = getWorks(source, async_1.default, options);
14960 const result = await Promise.all(works);
14961 return utils.array.flatten(result);
14962}
14963// https://github.com/typescript-eslint/typescript-eslint/issues/60
14964// eslint-disable-next-line no-redeclare
14965(function (FastGlob) {
14966 function sync(source, options) {
14967 assertPatternsInput(source);
14968 const works = getWorks(source, sync_1.default, options);
14969 return utils.array.flatten(works);
14970 }
14971 FastGlob.sync = sync;
14972 function stream(source, options) {
14973 assertPatternsInput(source);
14974 const works = getWorks(source, stream_1.default, options);
14975 /**
14976 * The stream returned by the provider cannot work with an asynchronous iterator.
14977 * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
14978 * This affects performance (+25%). I don't see best solution right now.
14979 */
14980 return utils.stream.merge(works);
14981 }
14982 FastGlob.stream = stream;
14983 function generateTasks(source, options) {
14984 assertPatternsInput(source);
14985 const patterns = [].concat(source);
14986 const settings = new settings_1.default(options);
14987 return taskManager.generate(patterns, settings);
14988 }
14989 FastGlob.generateTasks = generateTasks;
14990 function isDynamicPattern(source, options) {
14991 assertPatternsInput(source);
14992 const settings = new settings_1.default(options);
14993 return utils.pattern.isDynamicPattern(source, settings);
14994 }
14995 FastGlob.isDynamicPattern = isDynamicPattern;
14996 function escapePath(source) {
14997 assertPatternsInput(source);
14998 return utils.path.escape(source);
14999 }
15000 FastGlob.escapePath = escapePath;
15001})(FastGlob || (FastGlob = {}));
15002function getWorks(source, _Provider, options) {
15003 const patterns = [].concat(source);
15004 const settings = new settings_1.default(options);
15005 const tasks = taskManager.generate(patterns, settings);
15006 const provider = new _Provider(settings);
15007 return tasks.map(provider.read, provider);
15008}
15009function assertPatternsInput(input) {
15010 const source = [].concat(input);
15011 const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
15012 if (!isValidSource) {
15013 throw new TypeError('Patterns must be a string (non empty) or an array of strings');
15014 }
15015}
15016module.exports = FastGlob;
15017
15018
15019/***/ }),
15020/* 61 */
15021/***/ (function(module, exports, __webpack_require__) {
15022
15023"use strict";
15024
15025Object.defineProperty(exports, "__esModule", { value: true });
15026exports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;
15027const utils = __webpack_require__(62);
15028function generate(patterns, settings) {
15029 const positivePatterns = getPositivePatterns(patterns);
15030 const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
15031 const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
15032 const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
15033 const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
15034 const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
15035 return staticTasks.concat(dynamicTasks);
15036}
15037exports.generate = generate;
15038function convertPatternsToTasks(positive, negative, dynamic) {
15039 const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
15040 // When we have a global group – there is no reason to divide the patterns into independent tasks.
15041 // In this case, the global task covers the rest.
15042 if ('.' in positivePatternsGroup) {
15043 const task = convertPatternGroupToTask('.', positive, negative, dynamic);
15044 return [task];
15045 }
15046 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
15047}
15048exports.convertPatternsToTasks = convertPatternsToTasks;
15049function getPositivePatterns(patterns) {
15050 return utils.pattern.getPositivePatterns(patterns);
15051}
15052exports.getPositivePatterns = getPositivePatterns;
15053function getNegativePatternsAsPositive(patterns, ignore) {
15054 const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
15055 const positive = negative.map(utils.pattern.convertToPositivePattern);
15056 return positive;
15057}
15058exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
15059function groupPatternsByBaseDirectory(patterns) {
15060 const group = {};
15061 return patterns.reduce((collection, pattern) => {
15062 const base = utils.pattern.getBaseDirectory(pattern);
15063 if (base in collection) {
15064 collection[base].push(pattern);
15065 }
15066 else {
15067 collection[base] = [pattern];
15068 }
15069 return collection;
15070 }, group);
15071}
15072exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
15073function convertPatternGroupsToTasks(positive, negative, dynamic) {
15074 return Object.keys(positive).map((base) => {
15075 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
15076 });
15077}
15078exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
15079function convertPatternGroupToTask(base, positive, negative, dynamic) {
15080 return {
15081 dynamic,
15082 positive,
15083 negative,
15084 base,
15085 patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
15086 };
15087}
15088exports.convertPatternGroupToTask = convertPatternGroupToTask;
15089
15090
15091/***/ }),
15092/* 62 */
15093/***/ (function(module, exports, __webpack_require__) {
15094
15095"use strict";
15096
15097Object.defineProperty(exports, "__esModule", { value: true });
15098exports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;
15099const array = __webpack_require__(63);
15100exports.array = array;
15101const errno = __webpack_require__(64);
15102exports.errno = errno;
15103const fs = __webpack_require__(65);
15104exports.fs = fs;
15105const path = __webpack_require__(66);
15106exports.path = path;
15107const pattern = __webpack_require__(67);
15108exports.pattern = pattern;
15109const stream = __webpack_require__(94);
15110exports.stream = stream;
15111const string = __webpack_require__(97);
15112exports.string = string;
15113
15114
15115/***/ }),
15116/* 63 */
15117/***/ (function(module, exports, __webpack_require__) {
15118
15119"use strict";
15120
15121Object.defineProperty(exports, "__esModule", { value: true });
15122exports.splitWhen = exports.flatten = void 0;
15123function flatten(items) {
15124 return items.reduce((collection, item) => [].concat(collection, item), []);
15125}
15126exports.flatten = flatten;
15127function splitWhen(items, predicate) {
15128 const result = [[]];
15129 let groupIndex = 0;
15130 for (const item of items) {
15131 if (predicate(item)) {
15132 groupIndex++;
15133 result[groupIndex] = [];
15134 }
15135 else {
15136 result[groupIndex].push(item);
15137 }
15138 }
15139 return result;
15140}
15141exports.splitWhen = splitWhen;
15142
15143
15144/***/ }),
15145/* 64 */
15146/***/ (function(module, exports, __webpack_require__) {
15147
15148"use strict";
15149
15150Object.defineProperty(exports, "__esModule", { value: true });
15151exports.isEnoentCodeError = void 0;
15152function isEnoentCodeError(error) {
15153 return error.code === 'ENOENT';
15154}
15155exports.isEnoentCodeError = isEnoentCodeError;
15156
15157
15158/***/ }),
15159/* 65 */
15160/***/ (function(module, exports, __webpack_require__) {
15161
15162"use strict";
15163
15164Object.defineProperty(exports, "__esModule", { value: true });
15165exports.createDirentFromStats = void 0;
15166class DirentFromStats {
15167 constructor(name, stats) {
15168 this.name = name;
15169 this.isBlockDevice = stats.isBlockDevice.bind(stats);
15170 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
15171 this.isDirectory = stats.isDirectory.bind(stats);
15172 this.isFIFO = stats.isFIFO.bind(stats);
15173 this.isFile = stats.isFile.bind(stats);
15174 this.isSocket = stats.isSocket.bind(stats);
15175 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
15176 }
15177}
15178function createDirentFromStats(name, stats) {
15179 return new DirentFromStats(name, stats);
15180}
15181exports.createDirentFromStats = createDirentFromStats;
15182
15183
15184/***/ }),
15185/* 66 */
15186/***/ (function(module, exports, __webpack_require__) {
15187
15188"use strict";
15189
15190Object.defineProperty(exports, "__esModule", { value: true });
15191exports.removeLeadingDotSegment = exports.escape = exports.makeAbsolute = exports.unixify = void 0;
15192const path = __webpack_require__(13);
15193const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
15194const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
15195/**
15196 * Designed to work only with simple paths: `dir\\file`.
15197 */
15198function unixify(filepath) {
15199 return filepath.replace(/\\/g, '/');
15200}
15201exports.unixify = unixify;
15202function makeAbsolute(cwd, filepath) {
15203 return path.resolve(cwd, filepath);
15204}
15205exports.makeAbsolute = makeAbsolute;
15206function escape(pattern) {
15207 return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
15208}
15209exports.escape = escape;
15210function removeLeadingDotSegment(entry) {
15211 // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
15212 // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
15213 if (entry.charAt(0) === '.') {
15214 const secondCharactery = entry.charAt(1);
15215 if (secondCharactery === '/' || secondCharactery === '\\') {
15216 return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
15217 }
15218 }
15219 return entry;
15220}
15221exports.removeLeadingDotSegment = removeLeadingDotSegment;
15222
15223
15224/***/ }),
15225/* 67 */
15226/***/ (function(module, exports, __webpack_require__) {
15227
15228"use strict";
15229
15230Object.defineProperty(exports, "__esModule", { value: true });
15231exports.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;
15232const path = __webpack_require__(13);
15233const globParent = __webpack_require__(68);
15234const micromatch = __webpack_require__(71);
15235const picomatch = __webpack_require__(88);
15236const GLOBSTAR = '**';
15237const ESCAPE_SYMBOL = '\\';
15238const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
15239const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
15240const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
15241const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
15242const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
15243function isStaticPattern(pattern, options = {}) {
15244 return !isDynamicPattern(pattern, options);
15245}
15246exports.isStaticPattern = isStaticPattern;
15247function isDynamicPattern(pattern, options = {}) {
15248 /**
15249 * A special case with an empty string is necessary for matching patterns that start with a forward slash.
15250 * An empty string cannot be a dynamic pattern.
15251 * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.
15252 */
15253 if (pattern === '') {
15254 return false;
15255 }
15256 /**
15257 * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
15258 * filepath directly (without read directory).
15259 */
15260 if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
15261 return true;
15262 }
15263 if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
15264 return true;
15265 }
15266 if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
15267 return true;
15268 }
15269 if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
15270 return true;
15271 }
15272 return false;
15273}
15274exports.isDynamicPattern = isDynamicPattern;
15275function convertToPositivePattern(pattern) {
15276 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
15277}
15278exports.convertToPositivePattern = convertToPositivePattern;
15279function convertToNegativePattern(pattern) {
15280 return '!' + pattern;
15281}
15282exports.convertToNegativePattern = convertToNegativePattern;
15283function isNegativePattern(pattern) {
15284 return pattern.startsWith('!') && pattern[1] !== '(';
15285}
15286exports.isNegativePattern = isNegativePattern;
15287function isPositivePattern(pattern) {
15288 return !isNegativePattern(pattern);
15289}
15290exports.isPositivePattern = isPositivePattern;
15291function getNegativePatterns(patterns) {
15292 return patterns.filter(isNegativePattern);
15293}
15294exports.getNegativePatterns = getNegativePatterns;
15295function getPositivePatterns(patterns) {
15296 return patterns.filter(isPositivePattern);
15297}
15298exports.getPositivePatterns = getPositivePatterns;
15299function getBaseDirectory(pattern) {
15300 return globParent(pattern, { flipBackslashes: false });
15301}
15302exports.getBaseDirectory = getBaseDirectory;
15303function hasGlobStar(pattern) {
15304 return pattern.includes(GLOBSTAR);
15305}
15306exports.hasGlobStar = hasGlobStar;
15307function endsWithSlashGlobStar(pattern) {
15308 return pattern.endsWith('/' + GLOBSTAR);
15309}
15310exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
15311function isAffectDepthOfReadingPattern(pattern) {
15312 const basename = path.basename(pattern);
15313 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
15314}
15315exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
15316function expandPatternsWithBraceExpansion(patterns) {
15317 return patterns.reduce((collection, pattern) => {
15318 return collection.concat(expandBraceExpansion(pattern));
15319 }, []);
15320}
15321exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
15322function expandBraceExpansion(pattern) {
15323 return micromatch.braces(pattern, {
15324 expand: true,
15325 nodupes: true
15326 });
15327}
15328exports.expandBraceExpansion = expandBraceExpansion;
15329function getPatternParts(pattern, options) {
15330 let { parts } = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
15331 /**
15332 * The scan method returns an empty array in some cases.
15333 * See micromatch/picomatch#58 for more details.
15334 */
15335 if (parts.length === 0) {
15336 parts = [pattern];
15337 }
15338 /**
15339 * The scan method does not return an empty part for the pattern with a forward slash.
15340 * This is another part of micromatch/picomatch#58.
15341 */
15342 if (parts[0].startsWith('/')) {
15343 parts[0] = parts[0].slice(1);
15344 parts.unshift('');
15345 }
15346 return parts;
15347}
15348exports.getPatternParts = getPatternParts;
15349function makeRe(pattern, options) {
15350 return micromatch.makeRe(pattern, options);
15351}
15352exports.makeRe = makeRe;
15353function convertPatternsToRe(patterns, options) {
15354 return patterns.map((pattern) => makeRe(pattern, options));
15355}
15356exports.convertPatternsToRe = convertPatternsToRe;
15357function matchAny(entry, patternsRe) {
15358 return patternsRe.some((patternRe) => patternRe.test(entry));
15359}
15360exports.matchAny = matchAny;
15361
15362
15363/***/ }),
15364/* 68 */
15365/***/ (function(module, exports, __webpack_require__) {
15366
15367"use strict";
15368
15369
15370var isGlob = __webpack_require__(69);
15371var pathPosixDirname = __webpack_require__(13).posix.dirname;
15372var isWin32 = __webpack_require__(14).platform() === 'win32';
15373
15374var slash = '/';
15375var backslash = /\\/g;
15376var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
15377var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
15378var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
15379
15380/**
15381 * @param {string} str
15382 * @param {Object} opts
15383 * @param {boolean} [opts.flipBackslashes=true]
15384 */
15385module.exports = function globParent(str, opts) {
15386 var options = Object.assign({ flipBackslashes: true }, opts);
15387
15388 // flip windows path separators
15389 if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
15390 str = str.replace(backslash, slash);
15391 }
15392
15393 // special case for strings ending in enclosure containing path separator
15394 if (enclosure.test(str)) {
15395 str += slash;
15396 }
15397
15398 // preserves full path in case of trailing path separator
15399 str += 'a';
15400
15401 // remove path parts that are globby
15402 do {
15403 str = pathPosixDirname(str);
15404 } while (isGlob(str) || globby.test(str));
15405
15406 // remove escape chars and return result
15407 return str.replace(escaped, '$1');
15408};
15409
15410
15411/***/ }),
15412/* 69 */
15413/***/ (function(module, exports, __webpack_require__) {
15414
15415/*!
15416 * is-glob <https://github.com/jonschlinkert/is-glob>
15417 *
15418 * Copyright (c) 2014-2017, Jon Schlinkert.
15419 * Released under the MIT License.
15420 */
15421
15422var isExtglob = __webpack_require__(70);
15423var chars = { '{': '}', '(': ')', '[': ']'};
15424var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
15425var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
15426
15427module.exports = function isGlob(str, options) {
15428 if (typeof str !== 'string' || str === '') {
15429 return false;
15430 }
15431
15432 if (isExtglob(str)) {
15433 return true;
15434 }
15435
15436 var regex = strictRegex;
15437 var match;
15438
15439 // optionally relax regex
15440 if (options && options.strict === false) {
15441 regex = relaxedRegex;
15442 }
15443
15444 while ((match = regex.exec(str))) {
15445 if (match[2]) return true;
15446 var idx = match.index + match[0].length;
15447
15448 // if an open bracket/brace/paren is escaped,
15449 // set the index to the next closing character
15450 var open = match[1];
15451 var close = open ? chars[open] : null;
15452 if (open && close) {
15453 var n = str.indexOf(close, idx);
15454 if (n !== -1) {
15455 idx = n + 1;
15456 }
15457 }
15458
15459 str = str.slice(idx);
15460 }
15461 return false;
15462};
15463
15464
15465/***/ }),
15466/* 70 */
15467/***/ (function(module, exports) {
15468
15469/*!
15470 * is-extglob <https://github.com/jonschlinkert/is-extglob>
15471 *
15472 * Copyright (c) 2014-2016, Jon Schlinkert.
15473 * Licensed under the MIT License.
15474 */
15475
15476module.exports = function isExtglob(str) {
15477 if (typeof str !== 'string' || str === '') {
15478 return false;
15479 }
15480
15481 var match;
15482 while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
15483 if (match[2]) return true;
15484 str = str.slice(match.index + match[0].length);
15485 }
15486
15487 return false;
15488};
15489
15490
15491/***/ }),
15492/* 71 */
15493/***/ (function(module, exports, __webpack_require__) {
15494
15495"use strict";
15496
15497
15498const util = __webpack_require__(48);
15499const braces = __webpack_require__(72);
15500const picomatch = __webpack_require__(82);
15501const utils = __webpack_require__(85);
15502const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
15503
15504/**
15505 * Returns an array of strings that match one or more glob patterns.
15506 *
15507 * ```js
15508 * const mm = require('micromatch');
15509 * // mm(list, patterns[, options]);
15510 *
15511 * console.log(mm(['a.js', 'a.txt'], ['*.js']));
15512 * //=> [ 'a.js' ]
15513 * ```
15514 * @param {String|Array<string>} list List of strings to match.
15515 * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
15516 * @param {Object} options See available [options](#options)
15517 * @return {Array} Returns an array of matches
15518 * @summary false
15519 * @api public
15520 */
15521
15522const micromatch = (list, patterns, options) => {
15523 patterns = [].concat(patterns);
15524 list = [].concat(list);
15525
15526 let omit = new Set();
15527 let keep = new Set();
15528 let items = new Set();
15529 let negatives = 0;
15530
15531 let onResult = state => {
15532 items.add(state.output);
15533 if (options && options.onResult) {
15534 options.onResult(state);
15535 }
15536 };
15537
15538 for (let i = 0; i < patterns.length; i++) {
15539 let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
15540 let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
15541 if (negated) negatives++;
15542
15543 for (let item of list) {
15544 let matched = isMatch(item, true);
15545
15546 let match = negated ? !matched.isMatch : matched.isMatch;
15547 if (!match) continue;
15548
15549 if (negated) {
15550 omit.add(matched.output);
15551 } else {
15552 omit.delete(matched.output);
15553 keep.add(matched.output);
15554 }
15555 }
15556 }
15557
15558 let result = negatives === patterns.length ? [...items] : [...keep];
15559 let matches = result.filter(item => !omit.has(item));
15560
15561 if (options && matches.length === 0) {
15562 if (options.failglob === true) {
15563 throw new Error(`No matches found for "${patterns.join(', ')}"`);
15564 }
15565
15566 if (options.nonull === true || options.nullglob === true) {
15567 return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
15568 }
15569 }
15570
15571 return matches;
15572};
15573
15574/**
15575 * Backwards compatibility
15576 */
15577
15578micromatch.match = micromatch;
15579
15580/**
15581 * Returns a matcher function from the given glob `pattern` and `options`.
15582 * The returned function takes a string to match as its only argument and returns
15583 * true if the string is a match.
15584 *
15585 * ```js
15586 * const mm = require('micromatch');
15587 * // mm.matcher(pattern[, options]);
15588 *
15589 * const isMatch = mm.matcher('*.!(*a)');
15590 * console.log(isMatch('a.a')); //=> false
15591 * console.log(isMatch('a.b')); //=> true
15592 * ```
15593 * @param {String} `pattern` Glob pattern
15594 * @param {Object} `options`
15595 * @return {Function} Returns a matcher function.
15596 * @api public
15597 */
15598
15599micromatch.matcher = (pattern, options) => picomatch(pattern, options);
15600
15601/**
15602 * Returns true if **any** of the given glob `patterns` match the specified `string`.
15603 *
15604 * ```js
15605 * const mm = require('micromatch');
15606 * // mm.isMatch(string, patterns[, options]);
15607 *
15608 * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
15609 * console.log(mm.isMatch('a.a', 'b.*')); //=> false
15610 * ```
15611 * @param {String} str The string to test.
15612 * @param {String|Array} patterns One or more glob patterns to use for matching.
15613 * @param {Object} [options] See available [options](#options).
15614 * @return {Boolean} Returns true if any patterns match `str`
15615 * @api public
15616 */
15617
15618micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
15619
15620/**
15621 * Backwards compatibility
15622 */
15623
15624micromatch.any = micromatch.isMatch;
15625
15626/**
15627 * Returns a list of strings that _**do not match any**_ of the given `patterns`.
15628 *
15629 * ```js
15630 * const mm = require('micromatch');
15631 * // mm.not(list, patterns[, options]);
15632 *
15633 * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
15634 * //=> ['b.b', 'c.c']
15635 * ```
15636 * @param {Array} `list` Array of strings to match.
15637 * @param {String|Array} `patterns` One or more glob pattern to use for matching.
15638 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15639 * @return {Array} Returns an array of strings that **do not match** the given patterns.
15640 * @api public
15641 */
15642
15643micromatch.not = (list, patterns, options = {}) => {
15644 patterns = [].concat(patterns).map(String);
15645 let result = new Set();
15646 let items = [];
15647
15648 let onResult = state => {
15649 if (options.onResult) options.onResult(state);
15650 items.push(state.output);
15651 };
15652
15653 let matches = micromatch(list, patterns, { ...options, onResult });
15654
15655 for (let item of items) {
15656 if (!matches.includes(item)) {
15657 result.add(item);
15658 }
15659 }
15660 return [...result];
15661};
15662
15663/**
15664 * Returns true if the given `string` contains the given pattern. Similar
15665 * to [.isMatch](#isMatch) but the pattern can match any part of the string.
15666 *
15667 * ```js
15668 * var mm = require('micromatch');
15669 * // mm.contains(string, pattern[, options]);
15670 *
15671 * console.log(mm.contains('aa/bb/cc', '*b'));
15672 * //=> true
15673 * console.log(mm.contains('aa/bb/cc', '*d'));
15674 * //=> false
15675 * ```
15676 * @param {String} `str` The string to match.
15677 * @param {String|Array} `patterns` Glob pattern to use for matching.
15678 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15679 * @return {Boolean} Returns true if the patter matches any part of `str`.
15680 * @api public
15681 */
15682
15683micromatch.contains = (str, pattern, options) => {
15684 if (typeof str !== 'string') {
15685 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15686 }
15687
15688 if (Array.isArray(pattern)) {
15689 return pattern.some(p => micromatch.contains(str, p, options));
15690 }
15691
15692 if (typeof pattern === 'string') {
15693 if (isEmptyString(str) || isEmptyString(pattern)) {
15694 return false;
15695 }
15696
15697 if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
15698 return true;
15699 }
15700 }
15701
15702 return micromatch.isMatch(str, pattern, { ...options, contains: true });
15703};
15704
15705/**
15706 * Filter the keys of the given object with the given `glob` pattern
15707 * and `options`. Does not attempt to match nested keys. If you need this feature,
15708 * use [glob-object][] instead.
15709 *
15710 * ```js
15711 * const mm = require('micromatch');
15712 * // mm.matchKeys(object, patterns[, options]);
15713 *
15714 * const obj = { aa: 'a', ab: 'b', ac: 'c' };
15715 * console.log(mm.matchKeys(obj, '*b'));
15716 * //=> { ab: 'b' }
15717 * ```
15718 * @param {Object} `object` The object with keys to filter.
15719 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15720 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15721 * @return {Object} Returns an object with only keys that match the given patterns.
15722 * @api public
15723 */
15724
15725micromatch.matchKeys = (obj, patterns, options) => {
15726 if (!utils.isObject(obj)) {
15727 throw new TypeError('Expected the first argument to be an object');
15728 }
15729 let keys = micromatch(Object.keys(obj), patterns, options);
15730 let res = {};
15731 for (let key of keys) res[key] = obj[key];
15732 return res;
15733};
15734
15735/**
15736 * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
15737 *
15738 * ```js
15739 * const mm = require('micromatch');
15740 * // mm.some(list, patterns[, options]);
15741 *
15742 * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15743 * // true
15744 * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
15745 * // false
15746 * ```
15747 * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
15748 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15749 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15750 * @return {Boolean} Returns true if any patterns match `str`
15751 * @api public
15752 */
15753
15754micromatch.some = (list, patterns, options) => {
15755 let items = [].concat(list);
15756
15757 for (let pattern of [].concat(patterns)) {
15758 let isMatch = picomatch(String(pattern), options);
15759 if (items.some(item => isMatch(item))) {
15760 return true;
15761 }
15762 }
15763 return false;
15764};
15765
15766/**
15767 * Returns true if every string in the given `list` matches
15768 * any of the given glob `patterns`.
15769 *
15770 * ```js
15771 * const mm = require('micromatch');
15772 * // mm.every(list, patterns[, options]);
15773 *
15774 * console.log(mm.every('foo.js', ['foo.js']));
15775 * // true
15776 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
15777 * // true
15778 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15779 * // false
15780 * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
15781 * // false
15782 * ```
15783 * @param {String|Array} `list` The string or array of strings to test.
15784 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15785 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15786 * @return {Boolean} Returns true if any patterns match `str`
15787 * @api public
15788 */
15789
15790micromatch.every = (list, patterns, options) => {
15791 let items = [].concat(list);
15792
15793 for (let pattern of [].concat(patterns)) {
15794 let isMatch = picomatch(String(pattern), options);
15795 if (!items.every(item => isMatch(item))) {
15796 return false;
15797 }
15798 }
15799 return true;
15800};
15801
15802/**
15803 * Returns true if **all** of the given `patterns` match
15804 * the specified string.
15805 *
15806 * ```js
15807 * const mm = require('micromatch');
15808 * // mm.all(string, patterns[, options]);
15809 *
15810 * console.log(mm.all('foo.js', ['foo.js']));
15811 * // true
15812 *
15813 * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
15814 * // false
15815 *
15816 * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
15817 * // true
15818 *
15819 * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
15820 * // true
15821 * ```
15822 * @param {String|Array} `str` The string to test.
15823 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15824 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15825 * @return {Boolean} Returns true if any patterns match `str`
15826 * @api public
15827 */
15828
15829micromatch.all = (str, patterns, options) => {
15830 if (typeof str !== 'string') {
15831 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15832 }
15833
15834 return [].concat(patterns).every(p => picomatch(p, options)(str));
15835};
15836
15837/**
15838 * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
15839 *
15840 * ```js
15841 * const mm = require('micromatch');
15842 * // mm.capture(pattern, string[, options]);
15843 *
15844 * console.log(mm.capture('test/*.js', 'test/foo.js'));
15845 * //=> ['foo']
15846 * console.log(mm.capture('test/*.js', 'foo/bar.css'));
15847 * //=> null
15848 * ```
15849 * @param {String} `glob` Glob pattern to use for matching.
15850 * @param {String} `input` String to match
15851 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15852 * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
15853 * @api public
15854 */
15855
15856micromatch.capture = (glob, input, options) => {
15857 let posix = utils.isWindows(options);
15858 let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
15859 let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
15860
15861 if (match) {
15862 return match.slice(1).map(v => v === void 0 ? '' : v);
15863 }
15864};
15865
15866/**
15867 * Create a regular expression from the given glob `pattern`.
15868 *
15869 * ```js
15870 * const mm = require('micromatch');
15871 * // mm.makeRe(pattern[, options]);
15872 *
15873 * console.log(mm.makeRe('*.js'));
15874 * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
15875 * ```
15876 * @param {String} `pattern` A glob pattern to convert to regex.
15877 * @param {Object} `options`
15878 * @return {RegExp} Returns a regex created from the given pattern.
15879 * @api public
15880 */
15881
15882micromatch.makeRe = (...args) => picomatch.makeRe(...args);
15883
15884/**
15885 * Scan a glob pattern to separate the pattern into segments. Used
15886 * by the [split](#split) method.
15887 *
15888 * ```js
15889 * const mm = require('micromatch');
15890 * const state = mm.scan(pattern[, options]);
15891 * ```
15892 * @param {String} `pattern`
15893 * @param {Object} `options`
15894 * @return {Object} Returns an object with
15895 * @api public
15896 */
15897
15898micromatch.scan = (...args) => picomatch.scan(...args);
15899
15900/**
15901 * Parse a glob pattern to create the source string for a regular
15902 * expression.
15903 *
15904 * ```js
15905 * const mm = require('micromatch');
15906 * const state = mm(pattern[, options]);
15907 * ```
15908 * @param {String} `glob`
15909 * @param {Object} `options`
15910 * @return {Object} Returns an object with useful properties and output to be used as regex source string.
15911 * @api public
15912 */
15913
15914micromatch.parse = (patterns, options) => {
15915 let res = [];
15916 for (let pattern of [].concat(patterns || [])) {
15917 for (let str of braces(String(pattern), options)) {
15918 res.push(picomatch.parse(str, options));
15919 }
15920 }
15921 return res;
15922};
15923
15924/**
15925 * Process the given brace `pattern`.
15926 *
15927 * ```js
15928 * const { braces } = require('micromatch');
15929 * console.log(braces('foo/{a,b,c}/bar'));
15930 * //=> [ 'foo/(a|b|c)/bar' ]
15931 *
15932 * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
15933 * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
15934 * ```
15935 * @param {String} `pattern` String with brace pattern to process.
15936 * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
15937 * @return {Array}
15938 * @api public
15939 */
15940
15941micromatch.braces = (pattern, options) => {
15942 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15943 if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
15944 return [pattern];
15945 }
15946 return braces(pattern, options);
15947};
15948
15949/**
15950 * Expand braces
15951 */
15952
15953micromatch.braceExpand = (pattern, options) => {
15954 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15955 return micromatch.braces(pattern, { ...options, expand: true });
15956};
15957
15958/**
15959 * Expose micromatch
15960 */
15961
15962module.exports = micromatch;
15963
15964
15965/***/ }),
15966/* 72 */
15967/***/ (function(module, exports, __webpack_require__) {
15968
15969"use strict";
15970
15971
15972const stringify = __webpack_require__(73);
15973const compile = __webpack_require__(75);
15974const expand = __webpack_require__(79);
15975const parse = __webpack_require__(80);
15976
15977/**
15978 * Expand the given pattern or create a regex-compatible string.
15979 *
15980 * ```js
15981 * const braces = require('braces');
15982 * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
15983 * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
15984 * ```
15985 * @param {String} `str`
15986 * @param {Object} `options`
15987 * @return {String}
15988 * @api public
15989 */
15990
15991const braces = (input, options = {}) => {
15992 let output = [];
15993
15994 if (Array.isArray(input)) {
15995 for (let pattern of input) {
15996 let result = braces.create(pattern, options);
15997 if (Array.isArray(result)) {
15998 output.push(...result);
15999 } else {
16000 output.push(result);
16001 }
16002 }
16003 } else {
16004 output = [].concat(braces.create(input, options));
16005 }
16006
16007 if (options && options.expand === true && options.nodupes === true) {
16008 output = [...new Set(output)];
16009 }
16010 return output;
16011};
16012
16013/**
16014 * Parse the given `str` with the given `options`.
16015 *
16016 * ```js
16017 * // braces.parse(pattern, [, options]);
16018 * const ast = braces.parse('a/{b,c}/d');
16019 * console.log(ast);
16020 * ```
16021 * @param {String} pattern Brace pattern to parse
16022 * @param {Object} options
16023 * @return {Object} Returns an AST
16024 * @api public
16025 */
16026
16027braces.parse = (input, options = {}) => parse(input, options);
16028
16029/**
16030 * Creates a braces string from an AST, or an AST node.
16031 *
16032 * ```js
16033 * const braces = require('braces');
16034 * let ast = braces.parse('foo/{a,b}/bar');
16035 * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
16036 * ```
16037 * @param {String} `input` Brace pattern or AST.
16038 * @param {Object} `options`
16039 * @return {Array} Returns an array of expanded values.
16040 * @api public
16041 */
16042
16043braces.stringify = (input, options = {}) => {
16044 if (typeof input === 'string') {
16045 return stringify(braces.parse(input, options), options);
16046 }
16047 return stringify(input, options);
16048};
16049
16050/**
16051 * Compiles a brace pattern into a regex-compatible, optimized string.
16052 * This method is called by the main [braces](#braces) function by default.
16053 *
16054 * ```js
16055 * const braces = require('braces');
16056 * console.log(braces.compile('a/{b,c}/d'));
16057 * //=> ['a/(b|c)/d']
16058 * ```
16059 * @param {String} `input` Brace pattern or AST.
16060 * @param {Object} `options`
16061 * @return {Array} Returns an array of expanded values.
16062 * @api public
16063 */
16064
16065braces.compile = (input, options = {}) => {
16066 if (typeof input === 'string') {
16067 input = braces.parse(input, options);
16068 }
16069 return compile(input, options);
16070};
16071
16072/**
16073 * Expands a brace pattern into an array. This method is called by the
16074 * main [braces](#braces) function when `options.expand` is true. Before
16075 * using this method it's recommended that you read the [performance notes](#performance))
16076 * and advantages of using [.compile](#compile) instead.
16077 *
16078 * ```js
16079 * const braces = require('braces');
16080 * console.log(braces.expand('a/{b,c}/d'));
16081 * //=> ['a/b/d', 'a/c/d'];
16082 * ```
16083 * @param {String} `pattern` Brace pattern
16084 * @param {Object} `options`
16085 * @return {Array} Returns an array of expanded values.
16086 * @api public
16087 */
16088
16089braces.expand = (input, options = {}) => {
16090 if (typeof input === 'string') {
16091 input = braces.parse(input, options);
16092 }
16093
16094 let result = expand(input, options);
16095
16096 // filter out empty strings if specified
16097 if (options.noempty === true) {
16098 result = result.filter(Boolean);
16099 }
16100
16101 // filter out duplicates if specified
16102 if (options.nodupes === true) {
16103 result = [...new Set(result)];
16104 }
16105
16106 return result;
16107};
16108
16109/**
16110 * Processes a brace pattern and returns either an expanded array
16111 * (if `options.expand` is true), a highly optimized regex-compatible string.
16112 * This method is called by the main [braces](#braces) function.
16113 *
16114 * ```js
16115 * const braces = require('braces');
16116 * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
16117 * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
16118 * ```
16119 * @param {String} `pattern` Brace pattern
16120 * @param {Object} `options`
16121 * @return {Array} Returns an array of expanded values.
16122 * @api public
16123 */
16124
16125braces.create = (input, options = {}) => {
16126 if (input === '' || input.length < 3) {
16127 return [input];
16128 }
16129
16130 return options.expand !== true
16131 ? braces.compile(input, options)
16132 : braces.expand(input, options);
16133};
16134
16135/**
16136 * Expose "braces"
16137 */
16138
16139module.exports = braces;
16140
16141
16142/***/ }),
16143/* 73 */
16144/***/ (function(module, exports, __webpack_require__) {
16145
16146"use strict";
16147
16148
16149const utils = __webpack_require__(74);
16150
16151module.exports = (ast, options = {}) => {
16152 let stringify = (node, parent = {}) => {
16153 let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
16154 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16155 let output = '';
16156
16157 if (node.value) {
16158 if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
16159 return '\\' + node.value;
16160 }
16161 return node.value;
16162 }
16163
16164 if (node.value) {
16165 return node.value;
16166 }
16167
16168 if (node.nodes) {
16169 for (let child of node.nodes) {
16170 output += stringify(child);
16171 }
16172 }
16173 return output;
16174 };
16175
16176 return stringify(ast);
16177};
16178
16179
16180
16181/***/ }),
16182/* 74 */
16183/***/ (function(module, exports, __webpack_require__) {
16184
16185"use strict";
16186
16187
16188exports.isInteger = num => {
16189 if (typeof num === 'number') {
16190 return Number.isInteger(num);
16191 }
16192 if (typeof num === 'string' && num.trim() !== '') {
16193 return Number.isInteger(Number(num));
16194 }
16195 return false;
16196};
16197
16198/**
16199 * Find a node of the given type
16200 */
16201
16202exports.find = (node, type) => node.nodes.find(node => node.type === type);
16203
16204/**
16205 * Find a node of the given type
16206 */
16207
16208exports.exceedsLimit = (min, max, step = 1, limit) => {
16209 if (limit === false) return false;
16210 if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
16211 return ((Number(max) - Number(min)) / Number(step)) >= limit;
16212};
16213
16214/**
16215 * Escape the given node with '\\' before node.value
16216 */
16217
16218exports.escapeNode = (block, n = 0, type) => {
16219 let node = block.nodes[n];
16220 if (!node) return;
16221
16222 if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
16223 if (node.escaped !== true) {
16224 node.value = '\\' + node.value;
16225 node.escaped = true;
16226 }
16227 }
16228};
16229
16230/**
16231 * Returns true if the given brace node should be enclosed in literal braces
16232 */
16233
16234exports.encloseBrace = node => {
16235 if (node.type !== 'brace') return false;
16236 if ((node.commas >> 0 + node.ranges >> 0) === 0) {
16237 node.invalid = true;
16238 return true;
16239 }
16240 return false;
16241};
16242
16243/**
16244 * Returns true if a brace node is invalid.
16245 */
16246
16247exports.isInvalidBrace = block => {
16248 if (block.type !== 'brace') return false;
16249 if (block.invalid === true || block.dollar) return true;
16250 if ((block.commas >> 0 + block.ranges >> 0) === 0) {
16251 block.invalid = true;
16252 return true;
16253 }
16254 if (block.open !== true || block.close !== true) {
16255 block.invalid = true;
16256 return true;
16257 }
16258 return false;
16259};
16260
16261/**
16262 * Returns true if a node is an open or close node
16263 */
16264
16265exports.isOpenOrClose = node => {
16266 if (node.type === 'open' || node.type === 'close') {
16267 return true;
16268 }
16269 return node.open === true || node.close === true;
16270};
16271
16272/**
16273 * Reduce an array of text nodes.
16274 */
16275
16276exports.reduce = nodes => nodes.reduce((acc, node) => {
16277 if (node.type === 'text') acc.push(node.value);
16278 if (node.type === 'range') node.type = 'text';
16279 return acc;
16280}, []);
16281
16282/**
16283 * Flatten an array
16284 */
16285
16286exports.flatten = (...args) => {
16287 const result = [];
16288 const flat = arr => {
16289 for (let i = 0; i < arr.length; i++) {
16290 let ele = arr[i];
16291 Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
16292 }
16293 return result;
16294 };
16295 flat(args);
16296 return result;
16297};
16298
16299
16300/***/ }),
16301/* 75 */
16302/***/ (function(module, exports, __webpack_require__) {
16303
16304"use strict";
16305
16306
16307const fill = __webpack_require__(76);
16308const utils = __webpack_require__(74);
16309
16310const compile = (ast, options = {}) => {
16311 let walk = (node, parent = {}) => {
16312 let invalidBlock = utils.isInvalidBrace(parent);
16313 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16314 let invalid = invalidBlock === true || invalidNode === true;
16315 let prefix = options.escapeInvalid === true ? '\\' : '';
16316 let output = '';
16317
16318 if (node.isOpen === true) {
16319 return prefix + node.value;
16320 }
16321 if (node.isClose === true) {
16322 return prefix + node.value;
16323 }
16324
16325 if (node.type === 'open') {
16326 return invalid ? (prefix + node.value) : '(';
16327 }
16328
16329 if (node.type === 'close') {
16330 return invalid ? (prefix + node.value) : ')';
16331 }
16332
16333 if (node.type === 'comma') {
16334 return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
16335 }
16336
16337 if (node.value) {
16338 return node.value;
16339 }
16340
16341 if (node.nodes && node.ranges > 0) {
16342 let args = utils.reduce(node.nodes);
16343 let range = fill(...args, { ...options, wrap: false, toRegex: true });
16344
16345 if (range.length !== 0) {
16346 return args.length > 1 && range.length > 1 ? `(${range})` : range;
16347 }
16348 }
16349
16350 if (node.nodes) {
16351 for (let child of node.nodes) {
16352 output += walk(child, node);
16353 }
16354 }
16355 return output;
16356 };
16357
16358 return walk(ast);
16359};
16360
16361module.exports = compile;
16362
16363
16364/***/ }),
16365/* 76 */
16366/***/ (function(module, exports, __webpack_require__) {
16367
16368"use strict";
16369/*!
16370 * fill-range <https://github.com/jonschlinkert/fill-range>
16371 *
16372 * Copyright (c) 2014-present, Jon Schlinkert.
16373 * Licensed under the MIT License.
16374 */
16375
16376
16377
16378const util = __webpack_require__(48);
16379const toRegexRange = __webpack_require__(77);
16380
16381const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
16382
16383const transform = toNumber => {
16384 return value => toNumber === true ? Number(value) : String(value);
16385};
16386
16387const isValidValue = value => {
16388 return typeof value === 'number' || (typeof value === 'string' && value !== '');
16389};
16390
16391const isNumber = num => Number.isInteger(+num);
16392
16393const zeros = input => {
16394 let value = `${input}`;
16395 let index = -1;
16396 if (value[0] === '-') value = value.slice(1);
16397 if (value === '0') return false;
16398 while (value[++index] === '0');
16399 return index > 0;
16400};
16401
16402const stringify = (start, end, options) => {
16403 if (typeof start === 'string' || typeof end === 'string') {
16404 return true;
16405 }
16406 return options.stringify === true;
16407};
16408
16409const pad = (input, maxLength, toNumber) => {
16410 if (maxLength > 0) {
16411 let dash = input[0] === '-' ? '-' : '';
16412 if (dash) input = input.slice(1);
16413 input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
16414 }
16415 if (toNumber === false) {
16416 return String(input);
16417 }
16418 return input;
16419};
16420
16421const toMaxLen = (input, maxLength) => {
16422 let negative = input[0] === '-' ? '-' : '';
16423 if (negative) {
16424 input = input.slice(1);
16425 maxLength--;
16426 }
16427 while (input.length < maxLength) input = '0' + input;
16428 return negative ? ('-' + input) : input;
16429};
16430
16431const toSequence = (parts, options) => {
16432 parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16433 parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16434
16435 let prefix = options.capture ? '' : '?:';
16436 let positives = '';
16437 let negatives = '';
16438 let result;
16439
16440 if (parts.positives.length) {
16441 positives = parts.positives.join('|');
16442 }
16443
16444 if (parts.negatives.length) {
16445 negatives = `-(${prefix}${parts.negatives.join('|')})`;
16446 }
16447
16448 if (positives && negatives) {
16449 result = `${positives}|${negatives}`;
16450 } else {
16451 result = positives || negatives;
16452 }
16453
16454 if (options.wrap) {
16455 return `(${prefix}${result})`;
16456 }
16457
16458 return result;
16459};
16460
16461const toRange = (a, b, isNumbers, options) => {
16462 if (isNumbers) {
16463 return toRegexRange(a, b, { wrap: false, ...options });
16464 }
16465
16466 let start = String.fromCharCode(a);
16467 if (a === b) return start;
16468
16469 let stop = String.fromCharCode(b);
16470 return `[${start}-${stop}]`;
16471};
16472
16473const toRegex = (start, end, options) => {
16474 if (Array.isArray(start)) {
16475 let wrap = options.wrap === true;
16476 let prefix = options.capture ? '' : '?:';
16477 return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
16478 }
16479 return toRegexRange(start, end, options);
16480};
16481
16482const rangeError = (...args) => {
16483 return new RangeError('Invalid range arguments: ' + util.inspect(...args));
16484};
16485
16486const invalidRange = (start, end, options) => {
16487 if (options.strictRanges === true) throw rangeError([start, end]);
16488 return [];
16489};
16490
16491const invalidStep = (step, options) => {
16492 if (options.strictRanges === true) {
16493 throw new TypeError(`Expected step "${step}" to be a number`);
16494 }
16495 return [];
16496};
16497
16498const fillNumbers = (start, end, step = 1, options = {}) => {
16499 let a = Number(start);
16500 let b = Number(end);
16501
16502 if (!Number.isInteger(a) || !Number.isInteger(b)) {
16503 if (options.strictRanges === true) throw rangeError([start, end]);
16504 return [];
16505 }
16506
16507 // fix negative zero
16508 if (a === 0) a = 0;
16509 if (b === 0) b = 0;
16510
16511 let descending = a > b;
16512 let startString = String(start);
16513 let endString = String(end);
16514 let stepString = String(step);
16515 step = Math.max(Math.abs(step), 1);
16516
16517 let padded = zeros(startString) || zeros(endString) || zeros(stepString);
16518 let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
16519 let toNumber = padded === false && stringify(start, end, options) === false;
16520 let format = options.transform || transform(toNumber);
16521
16522 if (options.toRegex && step === 1) {
16523 return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
16524 }
16525
16526 let parts = { negatives: [], positives: [] };
16527 let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
16528 let range = [];
16529 let index = 0;
16530
16531 while (descending ? a >= b : a <= b) {
16532 if (options.toRegex === true && step > 1) {
16533 push(a);
16534 } else {
16535 range.push(pad(format(a, index), maxLen, toNumber));
16536 }
16537 a = descending ? a - step : a + step;
16538 index++;
16539 }
16540
16541 if (options.toRegex === true) {
16542 return step > 1
16543 ? toSequence(parts, options)
16544 : toRegex(range, null, { wrap: false, ...options });
16545 }
16546
16547 return range;
16548};
16549
16550const fillLetters = (start, end, step = 1, options = {}) => {
16551 if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
16552 return invalidRange(start, end, options);
16553 }
16554
16555
16556 let format = options.transform || (val => String.fromCharCode(val));
16557 let a = `${start}`.charCodeAt(0);
16558 let b = `${end}`.charCodeAt(0);
16559
16560 let descending = a > b;
16561 let min = Math.min(a, b);
16562 let max = Math.max(a, b);
16563
16564 if (options.toRegex && step === 1) {
16565 return toRange(min, max, false, options);
16566 }
16567
16568 let range = [];
16569 let index = 0;
16570
16571 while (descending ? a >= b : a <= b) {
16572 range.push(format(a, index));
16573 a = descending ? a - step : a + step;
16574 index++;
16575 }
16576
16577 if (options.toRegex === true) {
16578 return toRegex(range, null, { wrap: false, options });
16579 }
16580
16581 return range;
16582};
16583
16584const fill = (start, end, step, options = {}) => {
16585 if (end == null && isValidValue(start)) {
16586 return [start];
16587 }
16588
16589 if (!isValidValue(start) || !isValidValue(end)) {
16590 return invalidRange(start, end, options);
16591 }
16592
16593 if (typeof step === 'function') {
16594 return fill(start, end, 1, { transform: step });
16595 }
16596
16597 if (isObject(step)) {
16598 return fill(start, end, 0, step);
16599 }
16600
16601 let opts = { ...options };
16602 if (opts.capture === true) opts.wrap = true;
16603 step = step || opts.step || 1;
16604
16605 if (!isNumber(step)) {
16606 if (step != null && !isObject(step)) return invalidStep(step, opts);
16607 return fill(start, end, 1, step);
16608 }
16609
16610 if (isNumber(start) && isNumber(end)) {
16611 return fillNumbers(start, end, step, opts);
16612 }
16613
16614 return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
16615};
16616
16617module.exports = fill;
16618
16619
16620/***/ }),
16621/* 77 */
16622/***/ (function(module, exports, __webpack_require__) {
16623
16624"use strict";
16625/*!
16626 * to-regex-range <https://github.com/micromatch/to-regex-range>
16627 *
16628 * Copyright (c) 2015-present, Jon Schlinkert.
16629 * Released under the MIT License.
16630 */
16631
16632
16633
16634const isNumber = __webpack_require__(78);
16635
16636const toRegexRange = (min, max, options) => {
16637 if (isNumber(min) === false) {
16638 throw new TypeError('toRegexRange: expected the first argument to be a number');
16639 }
16640
16641 if (max === void 0 || min === max) {
16642 return String(min);
16643 }
16644
16645 if (isNumber(max) === false) {
16646 throw new TypeError('toRegexRange: expected the second argument to be a number.');
16647 }
16648
16649 let opts = { relaxZeros: true, ...options };
16650 if (typeof opts.strictZeros === 'boolean') {
16651 opts.relaxZeros = opts.strictZeros === false;
16652 }
16653
16654 let relax = String(opts.relaxZeros);
16655 let shorthand = String(opts.shorthand);
16656 let capture = String(opts.capture);
16657 let wrap = String(opts.wrap);
16658 let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
16659
16660 if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
16661 return toRegexRange.cache[cacheKey].result;
16662 }
16663
16664 let a = Math.min(min, max);
16665 let b = Math.max(min, max);
16666
16667 if (Math.abs(a - b) === 1) {
16668 let result = min + '|' + max;
16669 if (opts.capture) {
16670 return `(${result})`;
16671 }
16672 if (opts.wrap === false) {
16673 return result;
16674 }
16675 return `(?:${result})`;
16676 }
16677
16678 let isPadded = hasPadding(min) || hasPadding(max);
16679 let state = { min, max, a, b };
16680 let positives = [];
16681 let negatives = [];
16682
16683 if (isPadded) {
16684 state.isPadded = isPadded;
16685 state.maxLen = String(state.max).length;
16686 }
16687
16688 if (a < 0) {
16689 let newMin = b < 0 ? Math.abs(b) : 1;
16690 negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
16691 a = state.a = 0;
16692 }
16693
16694 if (b >= 0) {
16695 positives = splitToPatterns(a, b, state, opts);
16696 }
16697
16698 state.negatives = negatives;
16699 state.positives = positives;
16700 state.result = collatePatterns(negatives, positives, opts);
16701
16702 if (opts.capture === true) {
16703 state.result = `(${state.result})`;
16704 } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
16705 state.result = `(?:${state.result})`;
16706 }
16707
16708 toRegexRange.cache[cacheKey] = state;
16709 return state.result;
16710};
16711
16712function collatePatterns(neg, pos, options) {
16713 let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
16714 let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
16715 let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
16716 let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
16717 return subpatterns.join('|');
16718}
16719
16720function splitToRanges(min, max) {
16721 let nines = 1;
16722 let zeros = 1;
16723
16724 let stop = countNines(min, nines);
16725 let stops = new Set([max]);
16726
16727 while (min <= stop && stop <= max) {
16728 stops.add(stop);
16729 nines += 1;
16730 stop = countNines(min, nines);
16731 }
16732
16733 stop = countZeros(max + 1, zeros) - 1;
16734
16735 while (min < stop && stop <= max) {
16736 stops.add(stop);
16737 zeros += 1;
16738 stop = countZeros(max + 1, zeros) - 1;
16739 }
16740
16741 stops = [...stops];
16742 stops.sort(compare);
16743 return stops;
16744}
16745
16746/**
16747 * Convert a range to a regex pattern
16748 * @param {Number} `start`
16749 * @param {Number} `stop`
16750 * @return {String}
16751 */
16752
16753function rangeToPattern(start, stop, options) {
16754 if (start === stop) {
16755 return { pattern: start, count: [], digits: 0 };
16756 }
16757
16758 let zipped = zip(start, stop);
16759 let digits = zipped.length;
16760 let pattern = '';
16761 let count = 0;
16762
16763 for (let i = 0; i < digits; i++) {
16764 let [startDigit, stopDigit] = zipped[i];
16765
16766 if (startDigit === stopDigit) {
16767 pattern += startDigit;
16768
16769 } else if (startDigit !== '0' || stopDigit !== '9') {
16770 pattern += toCharacterClass(startDigit, stopDigit, options);
16771
16772 } else {
16773 count++;
16774 }
16775 }
16776
16777 if (count) {
16778 pattern += options.shorthand === true ? '\\d' : '[0-9]';
16779 }
16780
16781 return { pattern, count: [count], digits };
16782}
16783
16784function splitToPatterns(min, max, tok, options) {
16785 let ranges = splitToRanges(min, max);
16786 let tokens = [];
16787 let start = min;
16788 let prev;
16789
16790 for (let i = 0; i < ranges.length; i++) {
16791 let max = ranges[i];
16792 let obj = rangeToPattern(String(start), String(max), options);
16793 let zeros = '';
16794
16795 if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
16796 if (prev.count.length > 1) {
16797 prev.count.pop();
16798 }
16799
16800 prev.count.push(obj.count[0]);
16801 prev.string = prev.pattern + toQuantifier(prev.count);
16802 start = max + 1;
16803 continue;
16804 }
16805
16806 if (tok.isPadded) {
16807 zeros = padZeros(max, tok, options);
16808 }
16809
16810 obj.string = zeros + obj.pattern + toQuantifier(obj.count);
16811 tokens.push(obj);
16812 start = max + 1;
16813 prev = obj;
16814 }
16815
16816 return tokens;
16817}
16818
16819function filterPatterns(arr, comparison, prefix, intersection, options) {
16820 let result = [];
16821
16822 for (let ele of arr) {
16823 let { string } = ele;
16824
16825 // only push if _both_ are negative...
16826 if (!intersection && !contains(comparison, 'string', string)) {
16827 result.push(prefix + string);
16828 }
16829
16830 // or _both_ are positive
16831 if (intersection && contains(comparison, 'string', string)) {
16832 result.push(prefix + string);
16833 }
16834 }
16835 return result;
16836}
16837
16838/**
16839 * Zip strings
16840 */
16841
16842function zip(a, b) {
16843 let arr = [];
16844 for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
16845 return arr;
16846}
16847
16848function compare(a, b) {
16849 return a > b ? 1 : b > a ? -1 : 0;
16850}
16851
16852function contains(arr, key, val) {
16853 return arr.some(ele => ele[key] === val);
16854}
16855
16856function countNines(min, len) {
16857 return Number(String(min).slice(0, -len) + '9'.repeat(len));
16858}
16859
16860function countZeros(integer, zeros) {
16861 return integer - (integer % Math.pow(10, zeros));
16862}
16863
16864function toQuantifier(digits) {
16865 let [start = 0, stop = ''] = digits;
16866 if (stop || start > 1) {
16867 return `{${start + (stop ? ',' + stop : '')}}`;
16868 }
16869 return '';
16870}
16871
16872function toCharacterClass(a, b, options) {
16873 return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
16874}
16875
16876function hasPadding(str) {
16877 return /^-?(0+)\d/.test(str);
16878}
16879
16880function padZeros(value, tok, options) {
16881 if (!tok.isPadded) {
16882 return value;
16883 }
16884
16885 let diff = Math.abs(tok.maxLen - String(value).length);
16886 let relax = options.relaxZeros !== false;
16887
16888 switch (diff) {
16889 case 0:
16890 return '';
16891 case 1:
16892 return relax ? '0?' : '0';
16893 case 2:
16894 return relax ? '0{0,2}' : '00';
16895 default: {
16896 return relax ? `0{0,${diff}}` : `0{${diff}}`;
16897 }
16898 }
16899}
16900
16901/**
16902 * Cache
16903 */
16904
16905toRegexRange.cache = {};
16906toRegexRange.clearCache = () => (toRegexRange.cache = {});
16907
16908/**
16909 * Expose `toRegexRange`
16910 */
16911
16912module.exports = toRegexRange;
16913
16914
16915/***/ }),
16916/* 78 */
16917/***/ (function(module, exports, __webpack_require__) {
16918
16919"use strict";
16920/*!
16921 * is-number <https://github.com/jonschlinkert/is-number>
16922 *
16923 * Copyright (c) 2014-present, Jon Schlinkert.
16924 * Released under the MIT License.
16925 */
16926
16927
16928
16929module.exports = function(num) {
16930 if (typeof num === 'number') {
16931 return num - num === 0;
16932 }
16933 if (typeof num === 'string' && num.trim() !== '') {
16934 return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
16935 }
16936 return false;
16937};
16938
16939
16940/***/ }),
16941/* 79 */
16942/***/ (function(module, exports, __webpack_require__) {
16943
16944"use strict";
16945
16946
16947const fill = __webpack_require__(76);
16948const stringify = __webpack_require__(73);
16949const utils = __webpack_require__(74);
16950
16951const append = (queue = '', stash = '', enclose = false) => {
16952 let result = [];
16953
16954 queue = [].concat(queue);
16955 stash = [].concat(stash);
16956
16957 if (!stash.length) return queue;
16958 if (!queue.length) {
16959 return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
16960 }
16961
16962 for (let item of queue) {
16963 if (Array.isArray(item)) {
16964 for (let value of item) {
16965 result.push(append(value, stash, enclose));
16966 }
16967 } else {
16968 for (let ele of stash) {
16969 if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
16970 result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
16971 }
16972 }
16973 }
16974 return utils.flatten(result);
16975};
16976
16977const expand = (ast, options = {}) => {
16978 let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
16979
16980 let walk = (node, parent = {}) => {
16981 node.queue = [];
16982
16983 let p = parent;
16984 let q = parent.queue;
16985
16986 while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
16987 p = p.parent;
16988 q = p.queue;
16989 }
16990
16991 if (node.invalid || node.dollar) {
16992 q.push(append(q.pop(), stringify(node, options)));
16993 return;
16994 }
16995
16996 if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
16997 q.push(append(q.pop(), ['{}']));
16998 return;
16999 }
17000
17001 if (node.nodes && node.ranges > 0) {
17002 let args = utils.reduce(node.nodes);
17003
17004 if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
17005 throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
17006 }
17007
17008 let range = fill(...args, options);
17009 if (range.length === 0) {
17010 range = stringify(node, options);
17011 }
17012
17013 q.push(append(q.pop(), range));
17014 node.nodes = [];
17015 return;
17016 }
17017
17018 let enclose = utils.encloseBrace(node);
17019 let queue = node.queue;
17020 let block = node;
17021
17022 while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
17023 block = block.parent;
17024 queue = block.queue;
17025 }
17026
17027 for (let i = 0; i < node.nodes.length; i++) {
17028 let child = node.nodes[i];
17029
17030 if (child.type === 'comma' && node.type === 'brace') {
17031 if (i === 1) queue.push('');
17032 queue.push('');
17033 continue;
17034 }
17035
17036 if (child.type === 'close') {
17037 q.push(append(q.pop(), queue, enclose));
17038 continue;
17039 }
17040
17041 if (child.value && child.type !== 'open') {
17042 queue.push(append(queue.pop(), child.value));
17043 continue;
17044 }
17045
17046 if (child.nodes) {
17047 walk(child, node);
17048 }
17049 }
17050
17051 return queue;
17052 };
17053
17054 return utils.flatten(walk(ast));
17055};
17056
17057module.exports = expand;
17058
17059
17060/***/ }),
17061/* 80 */
17062/***/ (function(module, exports, __webpack_require__) {
17063
17064"use strict";
17065
17066
17067const stringify = __webpack_require__(73);
17068
17069/**
17070 * Constants
17071 */
17072
17073const {
17074 MAX_LENGTH,
17075 CHAR_BACKSLASH, /* \ */
17076 CHAR_BACKTICK, /* ` */
17077 CHAR_COMMA, /* , */
17078 CHAR_DOT, /* . */
17079 CHAR_LEFT_PARENTHESES, /* ( */
17080 CHAR_RIGHT_PARENTHESES, /* ) */
17081 CHAR_LEFT_CURLY_BRACE, /* { */
17082 CHAR_RIGHT_CURLY_BRACE, /* } */
17083 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17084 CHAR_RIGHT_SQUARE_BRACKET, /* ] */
17085 CHAR_DOUBLE_QUOTE, /* " */
17086 CHAR_SINGLE_QUOTE, /* ' */
17087 CHAR_NO_BREAK_SPACE,
17088 CHAR_ZERO_WIDTH_NOBREAK_SPACE
17089} = __webpack_require__(81);
17090
17091/**
17092 * parse
17093 */
17094
17095const parse = (input, options = {}) => {
17096 if (typeof input !== 'string') {
17097 throw new TypeError('Expected a string');
17098 }
17099
17100 let opts = options || {};
17101 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
17102 if (input.length > max) {
17103 throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
17104 }
17105
17106 let ast = { type: 'root', input, nodes: [] };
17107 let stack = [ast];
17108 let block = ast;
17109 let prev = ast;
17110 let brackets = 0;
17111 let length = input.length;
17112 let index = 0;
17113 let depth = 0;
17114 let value;
17115 let memo = {};
17116
17117 /**
17118 * Helpers
17119 */
17120
17121 const advance = () => input[index++];
17122 const push = node => {
17123 if (node.type === 'text' && prev.type === 'dot') {
17124 prev.type = 'text';
17125 }
17126
17127 if (prev && prev.type === 'text' && node.type === 'text') {
17128 prev.value += node.value;
17129 return;
17130 }
17131
17132 block.nodes.push(node);
17133 node.parent = block;
17134 node.prev = prev;
17135 prev = node;
17136 return node;
17137 };
17138
17139 push({ type: 'bos' });
17140
17141 while (index < length) {
17142 block = stack[stack.length - 1];
17143 value = advance();
17144
17145 /**
17146 * Invalid chars
17147 */
17148
17149 if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
17150 continue;
17151 }
17152
17153 /**
17154 * Escaped chars
17155 */
17156
17157 if (value === CHAR_BACKSLASH) {
17158 push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
17159 continue;
17160 }
17161
17162 /**
17163 * Right square bracket (literal): ']'
17164 */
17165
17166 if (value === CHAR_RIGHT_SQUARE_BRACKET) {
17167 push({ type: 'text', value: '\\' + value });
17168 continue;
17169 }
17170
17171 /**
17172 * Left square bracket: '['
17173 */
17174
17175 if (value === CHAR_LEFT_SQUARE_BRACKET) {
17176 brackets++;
17177
17178 let closed = true;
17179 let next;
17180
17181 while (index < length && (next = advance())) {
17182 value += next;
17183
17184 if (next === CHAR_LEFT_SQUARE_BRACKET) {
17185 brackets++;
17186 continue;
17187 }
17188
17189 if (next === CHAR_BACKSLASH) {
17190 value += advance();
17191 continue;
17192 }
17193
17194 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17195 brackets--;
17196
17197 if (brackets === 0) {
17198 break;
17199 }
17200 }
17201 }
17202
17203 push({ type: 'text', value });
17204 continue;
17205 }
17206
17207 /**
17208 * Parentheses
17209 */
17210
17211 if (value === CHAR_LEFT_PARENTHESES) {
17212 block = push({ type: 'paren', nodes: [] });
17213 stack.push(block);
17214 push({ type: 'text', value });
17215 continue;
17216 }
17217
17218 if (value === CHAR_RIGHT_PARENTHESES) {
17219 if (block.type !== 'paren') {
17220 push({ type: 'text', value });
17221 continue;
17222 }
17223 block = stack.pop();
17224 push({ type: 'text', value });
17225 block = stack[stack.length - 1];
17226 continue;
17227 }
17228
17229 /**
17230 * Quotes: '|"|`
17231 */
17232
17233 if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
17234 let open = value;
17235 let next;
17236
17237 if (options.keepQuotes !== true) {
17238 value = '';
17239 }
17240
17241 while (index < length && (next = advance())) {
17242 if (next === CHAR_BACKSLASH) {
17243 value += next + advance();
17244 continue;
17245 }
17246
17247 if (next === open) {
17248 if (options.keepQuotes === true) value += next;
17249 break;
17250 }
17251
17252 value += next;
17253 }
17254
17255 push({ type: 'text', value });
17256 continue;
17257 }
17258
17259 /**
17260 * Left curly brace: '{'
17261 */
17262
17263 if (value === CHAR_LEFT_CURLY_BRACE) {
17264 depth++;
17265
17266 let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
17267 let brace = {
17268 type: 'brace',
17269 open: true,
17270 close: false,
17271 dollar,
17272 depth,
17273 commas: 0,
17274 ranges: 0,
17275 nodes: []
17276 };
17277
17278 block = push(brace);
17279 stack.push(block);
17280 push({ type: 'open', value });
17281 continue;
17282 }
17283
17284 /**
17285 * Right curly brace: '}'
17286 */
17287
17288 if (value === CHAR_RIGHT_CURLY_BRACE) {
17289 if (block.type !== 'brace') {
17290 push({ type: 'text', value });
17291 continue;
17292 }
17293
17294 let type = 'close';
17295 block = stack.pop();
17296 block.close = true;
17297
17298 push({ type, value });
17299 depth--;
17300
17301 block = stack[stack.length - 1];
17302 continue;
17303 }
17304
17305 /**
17306 * Comma: ','
17307 */
17308
17309 if (value === CHAR_COMMA && depth > 0) {
17310 if (block.ranges > 0) {
17311 block.ranges = 0;
17312 let open = block.nodes.shift();
17313 block.nodes = [open, { type: 'text', value: stringify(block) }];
17314 }
17315
17316 push({ type: 'comma', value });
17317 block.commas++;
17318 continue;
17319 }
17320
17321 /**
17322 * Dot: '.'
17323 */
17324
17325 if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
17326 let siblings = block.nodes;
17327
17328 if (depth === 0 || siblings.length === 0) {
17329 push({ type: 'text', value });
17330 continue;
17331 }
17332
17333 if (prev.type === 'dot') {
17334 block.range = [];
17335 prev.value += value;
17336 prev.type = 'range';
17337
17338 if (block.nodes.length !== 3 && block.nodes.length !== 5) {
17339 block.invalid = true;
17340 block.ranges = 0;
17341 prev.type = 'text';
17342 continue;
17343 }
17344
17345 block.ranges++;
17346 block.args = [];
17347 continue;
17348 }
17349
17350 if (prev.type === 'range') {
17351 siblings.pop();
17352
17353 let before = siblings[siblings.length - 1];
17354 before.value += prev.value + value;
17355 prev = before;
17356 block.ranges--;
17357 continue;
17358 }
17359
17360 push({ type: 'dot', value });
17361 continue;
17362 }
17363
17364 /**
17365 * Text
17366 */
17367
17368 push({ type: 'text', value });
17369 }
17370
17371 // Mark imbalanced braces and brackets as invalid
17372 do {
17373 block = stack.pop();
17374
17375 if (block.type !== 'root') {
17376 block.nodes.forEach(node => {
17377 if (!node.nodes) {
17378 if (node.type === 'open') node.isOpen = true;
17379 if (node.type === 'close') node.isClose = true;
17380 if (!node.nodes) node.type = 'text';
17381 node.invalid = true;
17382 }
17383 });
17384
17385 // get the location of the block on parent.nodes (block's siblings)
17386 let parent = stack[stack.length - 1];
17387 let index = parent.nodes.indexOf(block);
17388 // replace the (invalid) block with it's nodes
17389 parent.nodes.splice(index, 1, ...block.nodes);
17390 }
17391 } while (stack.length > 0);
17392
17393 push({ type: 'eos' });
17394 return ast;
17395};
17396
17397module.exports = parse;
17398
17399
17400/***/ }),
17401/* 81 */
17402/***/ (function(module, exports, __webpack_require__) {
17403
17404"use strict";
17405
17406
17407module.exports = {
17408 MAX_LENGTH: 1024 * 64,
17409
17410 // Digits
17411 CHAR_0: '0', /* 0 */
17412 CHAR_9: '9', /* 9 */
17413
17414 // Alphabet chars.
17415 CHAR_UPPERCASE_A: 'A', /* A */
17416 CHAR_LOWERCASE_A: 'a', /* a */
17417 CHAR_UPPERCASE_Z: 'Z', /* Z */
17418 CHAR_LOWERCASE_Z: 'z', /* z */
17419
17420 CHAR_LEFT_PARENTHESES: '(', /* ( */
17421 CHAR_RIGHT_PARENTHESES: ')', /* ) */
17422
17423 CHAR_ASTERISK: '*', /* * */
17424
17425 // Non-alphabetic chars.
17426 CHAR_AMPERSAND: '&', /* & */
17427 CHAR_AT: '@', /* @ */
17428 CHAR_BACKSLASH: '\\', /* \ */
17429 CHAR_BACKTICK: '`', /* ` */
17430 CHAR_CARRIAGE_RETURN: '\r', /* \r */
17431 CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
17432 CHAR_COLON: ':', /* : */
17433 CHAR_COMMA: ',', /* , */
17434 CHAR_DOLLAR: '$', /* . */
17435 CHAR_DOT: '.', /* . */
17436 CHAR_DOUBLE_QUOTE: '"', /* " */
17437 CHAR_EQUAL: '=', /* = */
17438 CHAR_EXCLAMATION_MARK: '!', /* ! */
17439 CHAR_FORM_FEED: '\f', /* \f */
17440 CHAR_FORWARD_SLASH: '/', /* / */
17441 CHAR_HASH: '#', /* # */
17442 CHAR_HYPHEN_MINUS: '-', /* - */
17443 CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
17444 CHAR_LEFT_CURLY_BRACE: '{', /* { */
17445 CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
17446 CHAR_LINE_FEED: '\n', /* \n */
17447 CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
17448 CHAR_PERCENT: '%', /* % */
17449 CHAR_PLUS: '+', /* + */
17450 CHAR_QUESTION_MARK: '?', /* ? */
17451 CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
17452 CHAR_RIGHT_CURLY_BRACE: '}', /* } */
17453 CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
17454 CHAR_SEMICOLON: ';', /* ; */
17455 CHAR_SINGLE_QUOTE: '\'', /* ' */
17456 CHAR_SPACE: ' ', /* */
17457 CHAR_TAB: '\t', /* \t */
17458 CHAR_UNDERSCORE: '_', /* _ */
17459 CHAR_VERTICAL_LINE: '|', /* | */
17460 CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
17461};
17462
17463
17464/***/ }),
17465/* 82 */
17466/***/ (function(module, exports, __webpack_require__) {
17467
17468"use strict";
17469
17470
17471module.exports = __webpack_require__(83);
17472
17473
17474/***/ }),
17475/* 83 */
17476/***/ (function(module, exports, __webpack_require__) {
17477
17478"use strict";
17479
17480
17481const path = __webpack_require__(13);
17482const scan = __webpack_require__(84);
17483const parse = __webpack_require__(87);
17484const utils = __webpack_require__(85);
17485
17486/**
17487 * Creates a matcher function from one or more glob patterns. The
17488 * returned function takes a string to match as its first argument,
17489 * and returns true if the string is a match. The returned matcher
17490 * function also takes a boolean as the second argument that, when true,
17491 * returns an object with additional information.
17492 *
17493 * ```js
17494 * const picomatch = require('picomatch');
17495 * // picomatch(glob[, options]);
17496 *
17497 * const isMatch = picomatch('*.!(*a)');
17498 * console.log(isMatch('a.a')); //=> false
17499 * console.log(isMatch('a.b')); //=> true
17500 * ```
17501 * @name picomatch
17502 * @param {String|Array} `globs` One or more glob patterns.
17503 * @param {Object=} `options`
17504 * @return {Function=} Returns a matcher function.
17505 * @api public
17506 */
17507
17508const picomatch = (glob, options, returnState = false) => {
17509 if (Array.isArray(glob)) {
17510 let fns = glob.map(input => picomatch(input, options, returnState));
17511 return str => {
17512 for (let isMatch of fns) {
17513 let state = isMatch(str);
17514 if (state) return state;
17515 }
17516 return false;
17517 };
17518 }
17519
17520 if (typeof glob !== 'string' || glob === '') {
17521 throw new TypeError('Expected pattern to be a non-empty string');
17522 }
17523
17524 let opts = options || {};
17525 let posix = utils.isWindows(options);
17526 let regex = picomatch.makeRe(glob, options, false, true);
17527 let state = regex.state;
17528 delete regex.state;
17529
17530 let isIgnored = () => false;
17531 if (opts.ignore) {
17532 let ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
17533 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
17534 }
17535
17536 const matcher = (input, returnObject = false) => {
17537 let { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
17538 let result = { glob, state, regex, posix, input, output, match, isMatch };
17539
17540 if (typeof opts.onResult === 'function') {
17541 opts.onResult(result);
17542 }
17543
17544 if (isMatch === false) {
17545 result.isMatch = false;
17546 return returnObject ? result : false;
17547 }
17548
17549 if (isIgnored(input)) {
17550 if (typeof opts.onIgnore === 'function') {
17551 opts.onIgnore(result);
17552 }
17553 result.isMatch = false;
17554 return returnObject ? result : false;
17555 }
17556
17557 if (typeof opts.onMatch === 'function') {
17558 opts.onMatch(result);
17559 }
17560 return returnObject ? result : true;
17561 };
17562
17563 if (returnState) {
17564 matcher.state = state;
17565 }
17566
17567 return matcher;
17568};
17569
17570/**
17571 * Test `input` with the given `regex`. This is used by the main
17572 * `picomatch()` function to test the input string.
17573 *
17574 * ```js
17575 * const picomatch = require('picomatch');
17576 * // picomatch.test(input, regex[, options]);
17577 *
17578 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
17579 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
17580 * ```
17581 * @param {String} `input` String to test.
17582 * @param {RegExp} `regex`
17583 * @return {Object} Returns an object with matching info.
17584 * @api public
17585 */
17586
17587picomatch.test = (input, regex, options, { glob, posix } = {}) => {
17588 if (typeof input !== 'string') {
17589 throw new TypeError('Expected input to be a string');
17590 }
17591
17592 if (input === '') {
17593 return { isMatch: false, output: '' };
17594 }
17595
17596 let opts = options || {};
17597 let format = opts.format || (posix ? utils.toPosixSlashes : null);
17598 let match = input === glob;
17599 let output = (match && format) ? format(input) : input;
17600
17601 if (match === false) {
17602 output = format ? format(input) : input;
17603 match = output === glob;
17604 }
17605
17606 if (match === false || opts.capture === true) {
17607 if (opts.matchBase === true || opts.basename === true) {
17608 match = picomatch.matchBase(input, regex, options, posix);
17609 } else {
17610 match = regex.exec(output);
17611 }
17612 }
17613
17614 return { isMatch: !!match, match, output };
17615};
17616
17617/**
17618 * Match the basename of a filepath.
17619 *
17620 * ```js
17621 * const picomatch = require('picomatch');
17622 * // picomatch.matchBase(input, glob[, options]);
17623 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
17624 * ```
17625 * @param {String} `input` String to test.
17626 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
17627 * @return {Boolean}
17628 * @api public
17629 */
17630
17631picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
17632 let regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
17633 return regex.test(path.basename(input));
17634};
17635
17636/**
17637 * Returns true if **any** of the given glob `patterns` match the specified `string`.
17638 *
17639 * ```js
17640 * const picomatch = require('picomatch');
17641 * // picomatch.isMatch(string, patterns[, options]);
17642 *
17643 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
17644 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
17645 * ```
17646 * @param {String|Array} str The string to test.
17647 * @param {String|Array} patterns One or more glob patterns to use for matching.
17648 * @param {Object} [options] See available [options](#options).
17649 * @return {Boolean} Returns true if any patterns match `str`
17650 * @api public
17651 */
17652
17653picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
17654
17655/**
17656 * Parse a glob pattern to create the source string for a regular
17657 * expression.
17658 *
17659 * ```js
17660 * const picomatch = require('picomatch');
17661 * const result = picomatch.parse(glob[, options]);
17662 * ```
17663 * @param {String} `glob`
17664 * @param {Object} `options`
17665 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
17666 * @api public
17667 */
17668
17669picomatch.parse = (glob, options) => parse(glob, options);
17670
17671/**
17672 * Scan a glob pattern to separate the pattern into segments.
17673 *
17674 * ```js
17675 * const picomatch = require('picomatch');
17676 * // picomatch.scan(input[, options]);
17677 *
17678 * const result = picomatch.scan('!./foo/*.js');
17679 * console.log(result);
17680 * // { prefix: '!./',
17681 * // input: '!./foo/*.js',
17682 * // base: 'foo',
17683 * // glob: '*.js',
17684 * // negated: true,
17685 * // isGlob: true }
17686 * ```
17687 * @param {String} `input` Glob pattern to scan.
17688 * @param {Object} `options`
17689 * @return {Object} Returns an object with
17690 * @api public
17691 */
17692
17693picomatch.scan = (input, options) => scan(input, options);
17694
17695/**
17696 * Create a regular expression from a glob pattern.
17697 *
17698 * ```js
17699 * const picomatch = require('picomatch');
17700 * // picomatch.makeRe(input[, options]);
17701 *
17702 * console.log(picomatch.makeRe('*.js'));
17703 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17704 * ```
17705 * @param {String} `input` A glob pattern to convert to regex.
17706 * @param {Object} `options`
17707 * @return {RegExp} Returns a regex created from the given pattern.
17708 * @api public
17709 */
17710
17711picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
17712 if (!input || typeof input !== 'string') {
17713 throw new TypeError('Expected a non-empty string');
17714 }
17715
17716 let opts = options || {};
17717 let prepend = opts.contains ? '' : '^';
17718 let append = opts.contains ? '' : '$';
17719 let state = { negated: false, fastpaths: true };
17720 let prefix = '';
17721 let output;
17722
17723 if (input.startsWith('./')) {
17724 input = input.slice(2);
17725 prefix = state.prefix = './';
17726 }
17727
17728 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
17729 output = parse.fastpaths(input, options);
17730 }
17731
17732 if (output === void 0) {
17733 state = picomatch.parse(input, options);
17734 state.prefix = prefix + (state.prefix || '');
17735 output = state.output;
17736 }
17737
17738 if (returnOutput === true) {
17739 return output;
17740 }
17741
17742 let source = `${prepend}(?:${output})${append}`;
17743 if (state && state.negated === true) {
17744 source = `^(?!${source}).*$`;
17745 }
17746
17747 let regex = picomatch.toRegex(source, options);
17748 if (returnState === true) {
17749 regex.state = state;
17750 }
17751
17752 return regex;
17753};
17754
17755/**
17756 * Create a regular expression from the given regex source string.
17757 *
17758 * ```js
17759 * const picomatch = require('picomatch');
17760 * // picomatch.toRegex(source[, options]);
17761 *
17762 * const { output } = picomatch.parse('*.js');
17763 * console.log(picomatch.toRegex(output));
17764 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17765 * ```
17766 * @param {String} `source` Regular expression source string.
17767 * @param {Object} `options`
17768 * @return {RegExp}
17769 * @api public
17770 */
17771
17772picomatch.toRegex = (source, options) => {
17773 try {
17774 let opts = options || {};
17775 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
17776 } catch (err) {
17777 if (options && options.debug === true) throw err;
17778 return /$^/;
17779 }
17780};
17781
17782/**
17783 * Picomatch constants.
17784 * @return {Object}
17785 */
17786
17787picomatch.constants = __webpack_require__(86);
17788
17789/**
17790 * Expose "picomatch"
17791 */
17792
17793module.exports = picomatch;
17794
17795
17796/***/ }),
17797/* 84 */
17798/***/ (function(module, exports, __webpack_require__) {
17799
17800"use strict";
17801
17802
17803const utils = __webpack_require__(85);
17804
17805const {
17806 CHAR_ASTERISK, /* * */
17807 CHAR_AT, /* @ */
17808 CHAR_BACKWARD_SLASH, /* \ */
17809 CHAR_COMMA, /* , */
17810 CHAR_DOT, /* . */
17811 CHAR_EXCLAMATION_MARK, /* ! */
17812 CHAR_FORWARD_SLASH, /* / */
17813 CHAR_LEFT_CURLY_BRACE, /* { */
17814 CHAR_LEFT_PARENTHESES, /* ( */
17815 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17816 CHAR_PLUS, /* + */
17817 CHAR_QUESTION_MARK, /* ? */
17818 CHAR_RIGHT_CURLY_BRACE, /* } */
17819 CHAR_RIGHT_PARENTHESES, /* ) */
17820 CHAR_RIGHT_SQUARE_BRACKET /* ] */
17821} = __webpack_require__(86);
17822
17823const isPathSeparator = code => {
17824 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
17825};
17826
17827/**
17828 * Quickly scans a glob pattern and returns an object with a handful of
17829 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
17830 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
17831 *
17832 * ```js
17833 * const pm = require('picomatch');
17834 * console.log(pm.scan('foo/bar/*.js'));
17835 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
17836 * ```
17837 * @param {String} `str`
17838 * @param {Object} `options`
17839 * @return {Object} Returns an object with tokens and regex source string.
17840 * @api public
17841 */
17842
17843module.exports = (input, options) => {
17844 let opts = options || {};
17845 let length = input.length - 1;
17846 let index = -1;
17847 let start = 0;
17848 let lastIndex = 0;
17849 let isGlob = false;
17850 let backslashes = false;
17851 let negated = false;
17852 let braces = 0;
17853 let prev;
17854 let code;
17855
17856 let braceEscaped = false;
17857
17858 let eos = () => index >= length;
17859 let advance = () => {
17860 prev = code;
17861 return input.charCodeAt(++index);
17862 };
17863
17864 while (index < length) {
17865 code = advance();
17866 let next;
17867
17868 if (code === CHAR_BACKWARD_SLASH) {
17869 backslashes = true;
17870 next = advance();
17871
17872 if (next === CHAR_LEFT_CURLY_BRACE) {
17873 braceEscaped = true;
17874 }
17875 continue;
17876 }
17877
17878 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
17879 braces++;
17880
17881 while (!eos() && (next = advance())) {
17882 if (next === CHAR_BACKWARD_SLASH) {
17883 backslashes = true;
17884 next = advance();
17885 continue;
17886 }
17887
17888 if (next === CHAR_LEFT_CURLY_BRACE) {
17889 braces++;
17890 continue;
17891 }
17892
17893 if (!braceEscaped && next === CHAR_DOT && (next = advance()) === CHAR_DOT) {
17894 isGlob = true;
17895 break;
17896 }
17897
17898 if (!braceEscaped && next === CHAR_COMMA) {
17899 isGlob = true;
17900 break;
17901 }
17902
17903 if (next === CHAR_RIGHT_CURLY_BRACE) {
17904 braces--;
17905 if (braces === 0) {
17906 braceEscaped = false;
17907 break;
17908 }
17909 }
17910 }
17911 }
17912
17913 if (code === CHAR_FORWARD_SLASH) {
17914 if (prev === CHAR_DOT && index === (start + 1)) {
17915 start += 2;
17916 continue;
17917 }
17918
17919 lastIndex = index + 1;
17920 continue;
17921 }
17922
17923 if (code === CHAR_ASTERISK) {
17924 isGlob = true;
17925 break;
17926 }
17927
17928 if (code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK) {
17929 isGlob = true;
17930 break;
17931 }
17932
17933 if (code === CHAR_LEFT_SQUARE_BRACKET) {
17934 while (!eos() && (next = advance())) {
17935 if (next === CHAR_BACKWARD_SLASH) {
17936 backslashes = true;
17937 next = advance();
17938 continue;
17939 }
17940
17941 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17942 isGlob = true;
17943 break;
17944 }
17945 }
17946 }
17947
17948 let isExtglobChar = code === CHAR_PLUS
17949 || code === CHAR_AT
17950 || code === CHAR_EXCLAMATION_MARK;
17951
17952 if (isExtglobChar && input.charCodeAt(index + 1) === CHAR_LEFT_PARENTHESES) {
17953 isGlob = true;
17954 break;
17955 }
17956
17957 if (code === CHAR_EXCLAMATION_MARK && index === start) {
17958 negated = true;
17959 start++;
17960 continue;
17961 }
17962
17963 if (code === CHAR_LEFT_PARENTHESES) {
17964 while (!eos() && (next = advance())) {
17965 if (next === CHAR_BACKWARD_SLASH) {
17966 backslashes = true;
17967 next = advance();
17968 continue;
17969 }
17970
17971 if (next === CHAR_RIGHT_PARENTHESES) {
17972 isGlob = true;
17973 break;
17974 }
17975 }
17976 }
17977
17978 if (isGlob) {
17979 break;
17980 }
17981 }
17982
17983 let prefix = '';
17984 let orig = input;
17985 let base = input;
17986 let glob = '';
17987
17988 if (start > 0) {
17989 prefix = input.slice(0, start);
17990 input = input.slice(start);
17991 lastIndex -= start;
17992 }
17993
17994 if (base && isGlob === true && lastIndex > 0) {
17995 base = input.slice(0, lastIndex);
17996 glob = input.slice(lastIndex);
17997 } else if (isGlob === true) {
17998 base = '';
17999 glob = input;
18000 } else {
18001 base = input;
18002 }
18003
18004 if (base && base !== '' && base !== '/' && base !== input) {
18005 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
18006 base = base.slice(0, -1);
18007 }
18008 }
18009
18010 if (opts.unescape === true) {
18011 if (glob) glob = utils.removeBackslashes(glob);
18012
18013 if (base && backslashes === true) {
18014 base = utils.removeBackslashes(base);
18015 }
18016 }
18017
18018 return { prefix, input: orig, base, glob, negated, isGlob };
18019};
18020
18021
18022/***/ }),
18023/* 85 */
18024/***/ (function(module, exports, __webpack_require__) {
18025
18026"use strict";
18027
18028
18029const path = __webpack_require__(13);
18030const win32 = process.platform === 'win32';
18031const {
18032 REGEX_SPECIAL_CHARS,
18033 REGEX_SPECIAL_CHARS_GLOBAL,
18034 REGEX_REMOVE_BACKSLASH
18035} = __webpack_require__(86);
18036
18037exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
18038exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
18039exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
18040exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
18041exports.toPosixSlashes = str => str.replace(/\\/g, '/');
18042
18043exports.removeBackslashes = str => {
18044 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
18045 return match === '\\' ? '' : match;
18046 });
18047}
18048
18049exports.supportsLookbehinds = () => {
18050 let segs = process.version.slice(1).split('.');
18051 if (segs.length === 3 && +segs[0] >= 9 || (+segs[0] === 8 && +segs[1] >= 10)) {
18052 return true;
18053 }
18054 return false;
18055};
18056
18057exports.isWindows = options => {
18058 if (options && typeof options.windows === 'boolean') {
18059 return options.windows;
18060 }
18061 return win32 === true || path.sep === '\\';
18062};
18063
18064exports.escapeLast = (input, char, lastIdx) => {
18065 let idx = input.lastIndexOf(char, lastIdx);
18066 if (idx === -1) return input;
18067 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
18068 return input.slice(0, idx) + '\\' + input.slice(idx);
18069};
18070
18071
18072/***/ }),
18073/* 86 */
18074/***/ (function(module, exports, __webpack_require__) {
18075
18076"use strict";
18077
18078
18079const path = __webpack_require__(13);
18080const WIN_SLASH = '\\\\/';
18081const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
18082
18083/**
18084 * Posix glob regex
18085 */
18086
18087const DOT_LITERAL = '\\.';
18088const PLUS_LITERAL = '\\+';
18089const QMARK_LITERAL = '\\?';
18090const SLASH_LITERAL = '\\/';
18091const ONE_CHAR = '(?=.)';
18092const QMARK = '[^/]';
18093const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
18094const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
18095const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
18096const NO_DOT = `(?!${DOT_LITERAL})`;
18097const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
18098const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
18099const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
18100const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
18101const STAR = `${QMARK}*?`;
18102
18103const POSIX_CHARS = {
18104 DOT_LITERAL,
18105 PLUS_LITERAL,
18106 QMARK_LITERAL,
18107 SLASH_LITERAL,
18108 ONE_CHAR,
18109 QMARK,
18110 END_ANCHOR,
18111 DOTS_SLASH,
18112 NO_DOT,
18113 NO_DOTS,
18114 NO_DOT_SLASH,
18115 NO_DOTS_SLASH,
18116 QMARK_NO_DOT,
18117 STAR,
18118 START_ANCHOR
18119};
18120
18121/**
18122 * Windows glob regex
18123 */
18124
18125const WINDOWS_CHARS = {
18126 ...POSIX_CHARS,
18127
18128 SLASH_LITERAL: `[${WIN_SLASH}]`,
18129 QMARK: WIN_NO_SLASH,
18130 STAR: `${WIN_NO_SLASH}*?`,
18131 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
18132 NO_DOT: `(?!${DOT_LITERAL})`,
18133 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18134 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
18135 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18136 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
18137 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
18138 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
18139};
18140
18141/**
18142 * POSIX Bracket Regex
18143 */
18144
18145const POSIX_REGEX_SOURCE = {
18146 alnum: 'a-zA-Z0-9',
18147 alpha: 'a-zA-Z',
18148 ascii: '\\x00-\\x7F',
18149 blank: ' \\t',
18150 cntrl: '\\x00-\\x1F\\x7F',
18151 digit: '0-9',
18152 graph: '\\x21-\\x7E',
18153 lower: 'a-z',
18154 print: '\\x20-\\x7E ',
18155 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
18156 space: ' \\t\\r\\n\\v\\f',
18157 upper: 'A-Z',
18158 word: 'A-Za-z0-9_',
18159 xdigit: 'A-Fa-f0-9'
18160};
18161
18162module.exports = {
18163 MAX_LENGTH: 1024 * 64,
18164 POSIX_REGEX_SOURCE,
18165
18166 // regular expressions
18167 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
18168 REGEX_NON_SPECIAL_CHAR: /^[^@![\].,$*+?^{}()|\\/]+/,
18169 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
18170 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
18171 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
18172 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
18173
18174 // Replace globs with equivalent patterns to reduce parsing time.
18175 REPLACEMENTS: {
18176 '***': '*',
18177 '**/**': '**',
18178 '**/**/**': '**'
18179 },
18180
18181 // Digits
18182 CHAR_0: 48, /* 0 */
18183 CHAR_9: 57, /* 9 */
18184
18185 // Alphabet chars.
18186 CHAR_UPPERCASE_A: 65, /* A */
18187 CHAR_LOWERCASE_A: 97, /* a */
18188 CHAR_UPPERCASE_Z: 90, /* Z */
18189 CHAR_LOWERCASE_Z: 122, /* z */
18190
18191 CHAR_LEFT_PARENTHESES: 40, /* ( */
18192 CHAR_RIGHT_PARENTHESES: 41, /* ) */
18193
18194 CHAR_ASTERISK: 42, /* * */
18195
18196 // Non-alphabetic chars.
18197 CHAR_AMPERSAND: 38, /* & */
18198 CHAR_AT: 64, /* @ */
18199 CHAR_BACKWARD_SLASH: 92, /* \ */
18200 CHAR_CARRIAGE_RETURN: 13, /* \r */
18201 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
18202 CHAR_COLON: 58, /* : */
18203 CHAR_COMMA: 44, /* , */
18204 CHAR_DOT: 46, /* . */
18205 CHAR_DOUBLE_QUOTE: 34, /* " */
18206 CHAR_EQUAL: 61, /* = */
18207 CHAR_EXCLAMATION_MARK: 33, /* ! */
18208 CHAR_FORM_FEED: 12, /* \f */
18209 CHAR_FORWARD_SLASH: 47, /* / */
18210 CHAR_GRAVE_ACCENT: 96, /* ` */
18211 CHAR_HASH: 35, /* # */
18212 CHAR_HYPHEN_MINUS: 45, /* - */
18213 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
18214 CHAR_LEFT_CURLY_BRACE: 123, /* { */
18215 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
18216 CHAR_LINE_FEED: 10, /* \n */
18217 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
18218 CHAR_PERCENT: 37, /* % */
18219 CHAR_PLUS: 43, /* + */
18220 CHAR_QUESTION_MARK: 63, /* ? */
18221 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
18222 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
18223 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
18224 CHAR_SEMICOLON: 59, /* ; */
18225 CHAR_SINGLE_QUOTE: 39, /* ' */
18226 CHAR_SPACE: 32, /* */
18227 CHAR_TAB: 9, /* \t */
18228 CHAR_UNDERSCORE: 95, /* _ */
18229 CHAR_VERTICAL_LINE: 124, /* | */
18230 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
18231
18232 SEP: path.sep,
18233
18234 /**
18235 * Create EXTGLOB_CHARS
18236 */
18237
18238 extglobChars(chars) {
18239 return {
18240 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
18241 '?': { type: 'qmark', open: '(?:', close: ')?' },
18242 '+': { type: 'plus', open: '(?:', close: ')+' },
18243 '*': { type: 'star', open: '(?:', close: ')*' },
18244 '@': { type: 'at', open: '(?:', close: ')' }
18245 };
18246 },
18247
18248 /**
18249 * Create GLOB_CHARS
18250 */
18251
18252 globChars(win32) {
18253 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
18254 }
18255};
18256
18257
18258/***/ }),
18259/* 87 */
18260/***/ (function(module, exports, __webpack_require__) {
18261
18262"use strict";
18263
18264
18265const utils = __webpack_require__(85);
18266const constants = __webpack_require__(86);
18267
18268/**
18269 * Constants
18270 */
18271
18272const {
18273 MAX_LENGTH,
18274 POSIX_REGEX_SOURCE,
18275 REGEX_NON_SPECIAL_CHAR,
18276 REGEX_SPECIAL_CHARS_BACKREF,
18277 REPLACEMENTS
18278} = constants;
18279
18280/**
18281 * Helpers
18282 */
18283
18284const expandRange = (args, options) => {
18285 if (typeof options.expandRange === 'function') {
18286 return options.expandRange(...args, options);
18287 }
18288
18289 args.sort();
18290 let value = `[${args.join('-')}]`;
18291
18292 try {
18293 /* eslint-disable no-new */
18294 new RegExp(value);
18295 } catch (ex) {
18296 return args.map(v => utils.escapeRegex(v)).join('..');
18297 }
18298
18299 return value;
18300};
18301
18302const negate = state => {
18303 let count = 1;
18304
18305 while (state.peek() === '!' && (state.peek(2) !== '(' || state.peek(3) === '?')) {
18306 state.advance();
18307 state.start++;
18308 count++;
18309 }
18310
18311 if (count % 2 === 0) {
18312 return false;
18313 }
18314
18315 state.negated = true;
18316 state.start++;
18317 return true;
18318};
18319
18320/**
18321 * Create the message for a syntax error
18322 */
18323
18324const syntaxError = (type, char) => {
18325 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
18326};
18327
18328/**
18329 * Parse the given input string.
18330 * @param {String} input
18331 * @param {Object} options
18332 * @return {Object}
18333 */
18334
18335const parse = (input, options) => {
18336 if (typeof input !== 'string') {
18337 throw new TypeError('Expected a string');
18338 }
18339
18340 input = REPLACEMENTS[input] || input;
18341
18342 let opts = { ...options };
18343 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
18344 let len = input.length;
18345 if (len > max) {
18346 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
18347 }
18348
18349 let bos = { type: 'bos', value: '', output: opts.prepend || '' };
18350 let tokens = [bos];
18351
18352 let capture = opts.capture ? '' : '?:';
18353 let win32 = utils.isWindows(options);
18354
18355 // create constants based on platform, for windows or posix
18356 const PLATFORM_CHARS = constants.globChars(win32);
18357 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
18358
18359 const {
18360 DOT_LITERAL,
18361 PLUS_LITERAL,
18362 SLASH_LITERAL,
18363 ONE_CHAR,
18364 DOTS_SLASH,
18365 NO_DOT,
18366 NO_DOT_SLASH,
18367 NO_DOTS_SLASH,
18368 QMARK,
18369 QMARK_NO_DOT,
18370 STAR,
18371 START_ANCHOR
18372 } = PLATFORM_CHARS;
18373
18374 const globstar = (opts) => {
18375 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
18376 };
18377
18378 let nodot = opts.dot ? '' : NO_DOT;
18379 let star = opts.bash === true ? globstar(opts) : STAR;
18380 let qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
18381
18382 if (opts.capture) {
18383 star = `(${star})`;
18384 }
18385
18386 // minimatch options support
18387 if (typeof opts.noext === 'boolean') {
18388 opts.noextglob = opts.noext;
18389 }
18390
18391 let state = {
18392 index: -1,
18393 start: 0,
18394 consumed: '',
18395 output: '',
18396 backtrack: false,
18397 brackets: 0,
18398 braces: 0,
18399 parens: 0,
18400 quotes: 0,
18401 tokens
18402 };
18403
18404 let extglobs = [];
18405 let stack = [];
18406 let prev = bos;
18407 let value;
18408
18409 /**
18410 * Tokenizing helpers
18411 */
18412
18413 const eos = () => state.index === len - 1;
18414 const peek = state.peek = (n = 1) => input[state.index + n];
18415 const advance = state.advance = () => input[++state.index];
18416 const append = token => {
18417 state.output += token.output != null ? token.output : token.value;
18418 state.consumed += token.value || '';
18419 };
18420
18421 const increment = type => {
18422 state[type]++;
18423 stack.push(type);
18424 };
18425
18426 const decrement = type => {
18427 state[type]--;
18428 stack.pop();
18429 };
18430
18431 /**
18432 * Push tokens onto the tokens array. This helper speeds up
18433 * tokenizing by 1) helping us avoid backtracking as much as possible,
18434 * and 2) helping us avoid creating extra tokens when consecutive
18435 * characters are plain text. This improves performance and simplifies
18436 * lookbehinds.
18437 */
18438
18439 const push = tok => {
18440 if (prev.type === 'globstar') {
18441 let isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
18442 let isExtglob = extglobs.length && (tok.type === 'pipe' || tok.type === 'paren');
18443 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
18444 state.output = state.output.slice(0, -prev.output.length);
18445 prev.type = 'star';
18446 prev.value = '*';
18447 prev.output = star;
18448 state.output += prev.output;
18449 }
18450 }
18451
18452 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
18453 extglobs[extglobs.length - 1].inner += tok.value;
18454 }
18455
18456 if (tok.value || tok.output) append(tok);
18457 if (prev && prev.type === 'text' && tok.type === 'text') {
18458 prev.value += tok.value;
18459 return;
18460 }
18461
18462 tok.prev = prev;
18463 tokens.push(tok);
18464 prev = tok;
18465 };
18466
18467 const extglobOpen = (type, value) => {
18468 let token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
18469
18470 token.prev = prev;
18471 token.parens = state.parens;
18472 token.output = state.output;
18473 let output = (opts.capture ? '(' : '') + token.open;
18474
18475 push({ type, value, output: state.output ? '' : ONE_CHAR });
18476 push({ type: 'paren', extglob: true, value: advance(), output });
18477 increment('parens');
18478 extglobs.push(token);
18479 };
18480
18481 const extglobClose = token => {
18482 let output = token.close + (opts.capture ? ')' : '');
18483
18484 if (token.type === 'negate') {
18485 let extglobStar = star;
18486
18487 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
18488 extglobStar = globstar(opts);
18489 }
18490
18491 if (extglobStar !== star || eos() || /^\)+$/.test(input.slice(state.index + 1))) {
18492 output = token.close = ')$))' + extglobStar;
18493 }
18494
18495 if (token.prev.type === 'bos' && eos()) {
18496 state.negatedExtglob = true;
18497 }
18498 }
18499
18500 push({ type: 'paren', extglob: true, value, output });
18501 decrement('parens');
18502 };
18503
18504 if (opts.fastpaths !== false && !/(^[*!]|[/{[()\]}"])/.test(input)) {
18505 let backslashes = false;
18506
18507 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
18508 if (first === '\\') {
18509 backslashes = true;
18510 return m;
18511 }
18512
18513 if (first === '?') {
18514 if (esc) {
18515 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
18516 }
18517 if (index === 0) {
18518 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
18519 }
18520 return QMARK.repeat(chars.length);
18521 }
18522
18523 if (first === '.') {
18524 return DOT_LITERAL.repeat(chars.length);
18525 }
18526
18527 if (first === '*') {
18528 if (esc) {
18529 return esc + first + (rest ? star : '');
18530 }
18531 return star;
18532 }
18533 return esc ? m : '\\' + m;
18534 });
18535
18536 if (backslashes === true) {
18537 if (opts.unescape === true) {
18538 output = output.replace(/\\/g, '');
18539 } else {
18540 output = output.replace(/\\+/g, m => {
18541 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
18542 });
18543 }
18544 }
18545
18546 state.output = output;
18547 return state;
18548 }
18549
18550 /**
18551 * Tokenize input until we reach end-of-string
18552 */
18553
18554 while (!eos()) {
18555 value = advance();
18556
18557 if (value === '\u0000') {
18558 continue;
18559 }
18560
18561 /**
18562 * Escaped characters
18563 */
18564
18565 if (value === '\\') {
18566 let next = peek();
18567
18568 if (next === '/' && opts.bash !== true) {
18569 continue;
18570 }
18571
18572 if (next === '.' || next === ';') {
18573 continue;
18574 }
18575
18576 if (!next) {
18577 value += '\\';
18578 push({ type: 'text', value });
18579 continue;
18580 }
18581
18582 // collapse slashes to reduce potential for exploits
18583 let match = /^\\+/.exec(input.slice(state.index + 1));
18584 let slashes = 0;
18585
18586 if (match && match[0].length > 2) {
18587 slashes = match[0].length;
18588 state.index += slashes;
18589 if (slashes % 2 !== 0) {
18590 value += '\\';
18591 }
18592 }
18593
18594 if (opts.unescape === true) {
18595 value = advance() || '';
18596 } else {
18597 value += advance() || '';
18598 }
18599
18600 if (state.brackets === 0) {
18601 push({ type: 'text', value });
18602 continue;
18603 }
18604 }
18605
18606 /**
18607 * If we're inside a regex character class, continue
18608 * until we reach the closing bracket.
18609 */
18610
18611 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
18612 if (opts.posix !== false && value === ':') {
18613 let inner = prev.value.slice(1);
18614 if (inner.includes('[')) {
18615 prev.posix = true;
18616
18617 if (inner.includes(':')) {
18618 let idx = prev.value.lastIndexOf('[');
18619 let pre = prev.value.slice(0, idx);
18620 let rest = prev.value.slice(idx + 2);
18621 let posix = POSIX_REGEX_SOURCE[rest];
18622 if (posix) {
18623 prev.value = pre + posix;
18624 state.backtrack = true;
18625 advance();
18626
18627 if (!bos.output && tokens.indexOf(prev) === 1) {
18628 bos.output = ONE_CHAR;
18629 }
18630 continue;
18631 }
18632 }
18633 }
18634 }
18635
18636 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
18637 value = '\\' + value;
18638 }
18639
18640 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
18641 value = '\\' + value;
18642 }
18643
18644 if (opts.posix === true && value === '!' && prev.value === '[') {
18645 value = '^';
18646 }
18647
18648 prev.value += value;
18649 append({ value });
18650 continue;
18651 }
18652
18653 /**
18654 * If we're inside a quoted string, continue
18655 * until we reach the closing double quote.
18656 */
18657
18658 if (state.quotes === 1 && value !== '"') {
18659 value = utils.escapeRegex(value);
18660 prev.value += value;
18661 append({ value });
18662 continue;
18663 }
18664
18665 /**
18666 * Double quotes
18667 */
18668
18669 if (value === '"') {
18670 state.quotes = state.quotes === 1 ? 0 : 1;
18671 if (opts.keepQuotes === true) {
18672 push({ type: 'text', value });
18673 }
18674 continue;
18675 }
18676
18677 /**
18678 * Parentheses
18679 */
18680
18681 if (value === '(') {
18682 push({ type: 'paren', value });
18683 increment('parens');
18684 continue;
18685 }
18686
18687 if (value === ')') {
18688 if (state.parens === 0 && opts.strictBrackets === true) {
18689 throw new SyntaxError(syntaxError('opening', '('));
18690 }
18691
18692 let extglob = extglobs[extglobs.length - 1];
18693 if (extglob && state.parens === extglob.parens + 1) {
18694 extglobClose(extglobs.pop());
18695 continue;
18696 }
18697
18698 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
18699 decrement('parens');
18700 continue;
18701 }
18702
18703 /**
18704 * Brackets
18705 */
18706
18707 if (value === '[') {
18708 if (opts.nobracket === true || !input.slice(state.index + 1).includes(']')) {
18709 if (opts.nobracket !== true && opts.strictBrackets === true) {
18710 throw new SyntaxError(syntaxError('closing', ']'));
18711 }
18712
18713 value = '\\' + value;
18714 } else {
18715 increment('brackets');
18716 }
18717
18718 push({ type: 'bracket', value });
18719 continue;
18720 }
18721
18722 if (value === ']') {
18723 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
18724 push({ type: 'text', value, output: '\\' + value });
18725 continue;
18726 }
18727
18728 if (state.brackets === 0) {
18729 if (opts.strictBrackets === true) {
18730 throw new SyntaxError(syntaxError('opening', '['));
18731 }
18732
18733 push({ type: 'text', value, output: '\\' + value });
18734 continue;
18735 }
18736
18737 decrement('brackets');
18738
18739 let prevValue = prev.value.slice(1);
18740 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
18741 value = '/' + value;
18742 }
18743
18744 prev.value += value;
18745 append({ value });
18746
18747 // when literal brackets are explicitly disabled
18748 // assume we should match with a regex character class
18749 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
18750 continue;
18751 }
18752
18753 let escaped = utils.escapeRegex(prev.value);
18754 state.output = state.output.slice(0, -prev.value.length);
18755
18756 // when literal brackets are explicitly enabled
18757 // assume we should escape the brackets to match literal characters
18758 if (opts.literalBrackets === true) {
18759 state.output += escaped;
18760 prev.value = escaped;
18761 continue;
18762 }
18763
18764 // when the user specifies nothing, try to match both
18765 prev.value = `(${capture}${escaped}|${prev.value})`;
18766 state.output += prev.value;
18767 continue;
18768 }
18769
18770 /**
18771 * Braces
18772 */
18773
18774 if (value === '{' && opts.nobrace !== true) {
18775 push({ type: 'brace', value, output: '(' });
18776 increment('braces');
18777 continue;
18778 }
18779
18780 if (value === '}') {
18781 if (opts.nobrace === true || state.braces === 0) {
18782 push({ type: 'text', value, output: '\\' + value });
18783 continue;
18784 }
18785
18786 let output = ')';
18787
18788 if (state.dots === true) {
18789 let arr = tokens.slice();
18790 let range = [];
18791
18792 for (let i = arr.length - 1; i >= 0; i--) {
18793 tokens.pop();
18794 if (arr[i].type === 'brace') {
18795 break;
18796 }
18797 if (arr[i].type !== 'dots') {
18798 range.unshift(arr[i].value);
18799 }
18800 }
18801
18802 output = expandRange(range, opts);
18803 state.backtrack = true;
18804 }
18805
18806 push({ type: 'brace', value, output });
18807 decrement('braces');
18808 continue;
18809 }
18810
18811 /**
18812 * Pipes
18813 */
18814
18815 if (value === '|') {
18816 if (extglobs.length > 0) {
18817 extglobs[extglobs.length - 1].conditions++;
18818 }
18819 push({ type: 'text', value });
18820 continue;
18821 }
18822
18823 /**
18824 * Commas
18825 */
18826
18827 if (value === ',') {
18828 let output = value;
18829
18830 if (state.braces > 0 && stack[stack.length - 1] === 'braces') {
18831 output = '|';
18832 }
18833
18834 push({ type: 'comma', value, output });
18835 continue;
18836 }
18837
18838 /**
18839 * Slashes
18840 */
18841
18842 if (value === '/') {
18843 // if the beginning of the glob is "./", advance the start
18844 // to the current index, and don't add the "./" characters
18845 // to the state. This greatly simplifies lookbehinds when
18846 // checking for BOS characters like "!" and "." (not "./")
18847 if (prev.type === 'dot' && state.index === 1) {
18848 state.start = state.index + 1;
18849 state.consumed = '';
18850 state.output = '';
18851 tokens.pop();
18852 prev = bos; // reset "prev" to the first token
18853 continue;
18854 }
18855
18856 push({ type: 'slash', value, output: SLASH_LITERAL });
18857 continue;
18858 }
18859
18860 /**
18861 * Dots
18862 */
18863
18864 if (value === '.') {
18865 if (state.braces > 0 && prev.type === 'dot') {
18866 if (prev.value === '.') prev.output = DOT_LITERAL;
18867 prev.type = 'dots';
18868 prev.output += value;
18869 prev.value += value;
18870 state.dots = true;
18871 continue;
18872 }
18873
18874 push({ type: 'dot', value, output: DOT_LITERAL });
18875 continue;
18876 }
18877
18878 /**
18879 * Question marks
18880 */
18881
18882 if (value === '?') {
18883 if (prev && prev.type === 'paren') {
18884 let next = peek();
18885 let output = value;
18886
18887 if (next === '<' && !utils.supportsLookbehinds()) {
18888 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
18889 }
18890
18891 if (prev.value === '(' && !/[!=<:]/.test(next) || (next === '<' && !/[!=]/.test(peek(2)))) {
18892 output = '\\' + value;
18893 }
18894
18895 push({ type: 'text', value, output });
18896 continue;
18897 }
18898
18899 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18900 extglobOpen('qmark', value);
18901 continue;
18902 }
18903
18904 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
18905 push({ type: 'qmark', value, output: QMARK_NO_DOT });
18906 continue;
18907 }
18908
18909 push({ type: 'qmark', value, output: QMARK });
18910 continue;
18911 }
18912
18913 /**
18914 * Exclamation
18915 */
18916
18917 if (value === '!') {
18918 if (opts.noextglob !== true && peek() === '(') {
18919 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
18920 extglobOpen('negate', value);
18921 continue;
18922 }
18923 }
18924
18925 if (opts.nonegate !== true && state.index === 0) {
18926 negate(state);
18927 continue;
18928 }
18929 }
18930
18931 /**
18932 * Plus
18933 */
18934
18935 if (value === '+') {
18936 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18937 extglobOpen('plus', value);
18938 continue;
18939 }
18940
18941 if (prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) {
18942 let output = prev.extglob === true ? '\\' + value : value;
18943 push({ type: 'plus', value, output });
18944 continue;
18945 }
18946
18947 // use regex behavior inside parens
18948 if (state.parens > 0 && opts.regex !== false) {
18949 push({ type: 'plus', value });
18950 continue;
18951 }
18952
18953 push({ type: 'plus', value: PLUS_LITERAL });
18954 continue;
18955 }
18956
18957 /**
18958 * Plain text
18959 */
18960
18961 if (value === '@') {
18962 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18963 push({ type: 'at', value, output: '' });
18964 continue;
18965 }
18966
18967 push({ type: 'text', value });
18968 continue;
18969 }
18970
18971 /**
18972 * Plain text
18973 */
18974
18975 if (value !== '*') {
18976 if (value === '$' || value === '^') {
18977 value = '\\' + value;
18978 }
18979
18980 let match = REGEX_NON_SPECIAL_CHAR.exec(input.slice(state.index + 1));
18981 if (match) {
18982 value += match[0];
18983 state.index += match[0].length;
18984 }
18985
18986 push({ type: 'text', value });
18987 continue;
18988 }
18989
18990 /**
18991 * Stars
18992 */
18993
18994 if (prev && (prev.type === 'globstar' || prev.star === true)) {
18995 prev.type = 'star';
18996 prev.star = true;
18997 prev.value += value;
18998 prev.output = star;
18999 state.backtrack = true;
19000 state.consumed += value;
19001 continue;
19002 }
19003
19004 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
19005 extglobOpen('star', value);
19006 continue;
19007 }
19008
19009 if (prev.type === 'star') {
19010 if (opts.noglobstar === true) {
19011 state.consumed += value;
19012 continue;
19013 }
19014
19015 let prior = prev.prev;
19016 let before = prior.prev;
19017 let isStart = prior.type === 'slash' || prior.type === 'bos';
19018 let afterStar = before && (before.type === 'star' || before.type === 'globstar');
19019
19020 if (opts.bash === true && (!isStart || (!eos() && peek() !== '/'))) {
19021 push({ type: 'star', value, output: '' });
19022 continue;
19023 }
19024
19025 let isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
19026 let isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
19027 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
19028 push({ type: 'star', value, output: '' });
19029 continue;
19030 }
19031
19032 // strip consecutive `/**/`
19033 while (input.slice(state.index + 1, state.index + 4) === '/**') {
19034 let after = input[state.index + 4];
19035 if (after && after !== '/') {
19036 break;
19037 }
19038 state.consumed += '/**';
19039 state.index += 3;
19040 }
19041
19042 if (prior.type === 'bos' && eos()) {
19043 prev.type = 'globstar';
19044 prev.value += value;
19045 prev.output = globstar(opts);
19046 state.output = prev.output;
19047 state.consumed += value;
19048 continue;
19049 }
19050
19051 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
19052 state.output = state.output.slice(0, -(prior.output + prev.output).length);
19053 prior.output = '(?:' + prior.output;
19054
19055 prev.type = 'globstar';
19056 prev.output = globstar(opts) + '|$)';
19057 prev.value += value;
19058
19059 state.output += prior.output + prev.output;
19060 state.consumed += value;
19061 continue;
19062 }
19063
19064 let next = peek();
19065 if (prior.type === 'slash' && prior.prev.type !== 'bos' && next === '/') {
19066 let end = peek(2) !== void 0 ? '|$' : '';
19067
19068 state.output = state.output.slice(0, -(prior.output + prev.output).length);
19069 prior.output = '(?:' + prior.output;
19070
19071 prev.type = 'globstar';
19072 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
19073 prev.value += value;
19074
19075 state.output += prior.output + prev.output;
19076 state.consumed += value + advance();
19077
19078 push({ type: 'slash', value, output: '' });
19079 continue;
19080 }
19081
19082 if (prior.type === 'bos' && next === '/') {
19083 prev.type = 'globstar';
19084 prev.value += value;
19085 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
19086 state.output = prev.output;
19087 state.consumed += value + advance();
19088 push({ type: 'slash', value, output: '' });
19089 continue;
19090 }
19091
19092 // remove single star from output
19093 state.output = state.output.slice(0, -prev.output.length);
19094
19095 // reset previous token to globstar
19096 prev.type = 'globstar';
19097 prev.output = globstar(opts);
19098 prev.value += value;
19099
19100 // reset output with globstar
19101 state.output += prev.output;
19102 state.consumed += value;
19103 continue;
19104 }
19105
19106 let token = { type: 'star', value, output: star };
19107
19108 if (opts.bash === true) {
19109 token.output = '.*?';
19110 if (prev.type === 'bos' || prev.type === 'slash') {
19111 token.output = nodot + token.output;
19112 }
19113 push(token);
19114 continue;
19115 }
19116
19117 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
19118 token.output = value;
19119 push(token);
19120 continue;
19121 }
19122
19123 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
19124 if (prev.type === 'dot') {
19125 state.output += NO_DOT_SLASH;
19126 prev.output += NO_DOT_SLASH;
19127
19128 } else if (opts.dot === true) {
19129 state.output += NO_DOTS_SLASH;
19130 prev.output += NO_DOTS_SLASH;
19131
19132 } else {
19133 state.output += nodot;
19134 prev.output += nodot;
19135 }
19136
19137 if (peek() !== '*') {
19138 state.output += ONE_CHAR;
19139 prev.output += ONE_CHAR;
19140 }
19141 }
19142
19143 push(token);
19144 }
19145
19146 while (state.brackets > 0) {
19147 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
19148 state.output = utils.escapeLast(state.output, '[');
19149 decrement('brackets');
19150 }
19151
19152 while (state.parens > 0) {
19153 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
19154 state.output = utils.escapeLast(state.output, '(');
19155 decrement('parens');
19156 }
19157
19158 while (state.braces > 0) {
19159 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
19160 state.output = utils.escapeLast(state.output, '{');
19161 decrement('braces');
19162 }
19163
19164 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
19165 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
19166 }
19167
19168 // rebuild the output if we had to backtrack at any point
19169 if (state.backtrack === true) {
19170 state.output = '';
19171
19172 for (let token of state.tokens) {
19173 state.output += token.output != null ? token.output : token.value;
19174
19175 if (token.suffix) {
19176 state.output += token.suffix;
19177 }
19178 }
19179 }
19180
19181 return state;
19182};
19183
19184/**
19185 * Fast paths for creating regular expressions for common glob patterns.
19186 * This can significantly speed up processing and has very little downside
19187 * impact when none of the fast paths match.
19188 */
19189
19190parse.fastpaths = (input, options) => {
19191 let opts = { ...options };
19192 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
19193 let len = input.length;
19194 if (len > max) {
19195 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
19196 }
19197
19198 input = REPLACEMENTS[input] || input;
19199 let win32 = utils.isWindows(options);
19200
19201 // create constants based on platform, for windows or posix
19202 const {
19203 DOT_LITERAL,
19204 SLASH_LITERAL,
19205 ONE_CHAR,
19206 DOTS_SLASH,
19207 NO_DOT,
19208 NO_DOTS,
19209 NO_DOTS_SLASH,
19210 STAR,
19211 START_ANCHOR
19212 } = constants.globChars(win32);
19213
19214 let capture = opts.capture ? '' : '?:';
19215 let star = opts.bash === true ? '.*?' : STAR;
19216 let nodot = opts.dot ? NO_DOTS : NO_DOT;
19217 let slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
19218
19219 if (opts.capture) {
19220 star = `(${star})`;
19221 }
19222
19223 const globstar = (opts) => {
19224 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
19225 };
19226
19227 const create = str => {
19228 switch (str) {
19229 case '*':
19230 return `${nodot}${ONE_CHAR}${star}`;
19231
19232 case '.*':
19233 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
19234
19235 case '*.*':
19236 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19237
19238 case '*/*':
19239 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
19240
19241 case '**':
19242 return nodot + globstar(opts);
19243
19244 case '**/*':
19245 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
19246
19247 case '**/*.*':
19248 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19249
19250 case '**/.*':
19251 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
19252
19253 default: {
19254 let match = /^(.*?)\.(\w+)$/.exec(str);
19255 if (!match) return;
19256
19257 let source = create(match[1], options);
19258 if (!source) return;
19259
19260 return source + DOT_LITERAL + match[2];
19261 }
19262 }
19263 };
19264
19265 let output = create(input);
19266 if (output && opts.strictSlashes !== true) {
19267 output += `${SLASH_LITERAL}?`;
19268 }
19269
19270 return output;
19271};
19272
19273module.exports = parse;
19274
19275
19276/***/ }),
19277/* 88 */
19278/***/ (function(module, exports, __webpack_require__) {
19279
19280"use strict";
19281
19282
19283module.exports = __webpack_require__(89);
19284
19285
19286/***/ }),
19287/* 89 */
19288/***/ (function(module, exports, __webpack_require__) {
19289
19290"use strict";
19291
19292
19293const path = __webpack_require__(13);
19294const scan = __webpack_require__(90);
19295const parse = __webpack_require__(93);
19296const utils = __webpack_require__(91);
19297const constants = __webpack_require__(92);
19298const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
19299
19300/**
19301 * Creates a matcher function from one or more glob patterns. The
19302 * returned function takes a string to match as its first argument,
19303 * and returns true if the string is a match. The returned matcher
19304 * function also takes a boolean as the second argument that, when true,
19305 * returns an object with additional information.
19306 *
19307 * ```js
19308 * const picomatch = require('picomatch');
19309 * // picomatch(glob[, options]);
19310 *
19311 * const isMatch = picomatch('*.!(*a)');
19312 * console.log(isMatch('a.a')); //=> false
19313 * console.log(isMatch('a.b')); //=> true
19314 * ```
19315 * @name picomatch
19316 * @param {String|Array} `globs` One or more glob patterns.
19317 * @param {Object=} `options`
19318 * @return {Function=} Returns a matcher function.
19319 * @api public
19320 */
19321
19322const picomatch = (glob, options, returnState = false) => {
19323 if (Array.isArray(glob)) {
19324 const fns = glob.map(input => picomatch(input, options, returnState));
19325 const arrayMatcher = str => {
19326 for (const isMatch of fns) {
19327 const state = isMatch(str);
19328 if (state) return state;
19329 }
19330 return false;
19331 };
19332 return arrayMatcher;
19333 }
19334
19335 const isState = isObject(glob) && glob.tokens && glob.input;
19336
19337 if (glob === '' || (typeof glob !== 'string' && !isState)) {
19338 throw new TypeError('Expected pattern to be a non-empty string');
19339 }
19340
19341 const opts = options || {};
19342 const posix = utils.isWindows(options);
19343 const regex = isState
19344 ? picomatch.compileRe(glob, options)
19345 : picomatch.makeRe(glob, options, false, true);
19346
19347 const state = regex.state;
19348 delete regex.state;
19349
19350 let isIgnored = () => false;
19351 if (opts.ignore) {
19352 const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
19353 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
19354 }
19355
19356 const matcher = (input, returnObject = false) => {
19357 const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
19358 const result = { glob, state, regex, posix, input, output, match, isMatch };
19359
19360 if (typeof opts.onResult === 'function') {
19361 opts.onResult(result);
19362 }
19363
19364 if (isMatch === false) {
19365 result.isMatch = false;
19366 return returnObject ? result : false;
19367 }
19368
19369 if (isIgnored(input)) {
19370 if (typeof opts.onIgnore === 'function') {
19371 opts.onIgnore(result);
19372 }
19373 result.isMatch = false;
19374 return returnObject ? result : false;
19375 }
19376
19377 if (typeof opts.onMatch === 'function') {
19378 opts.onMatch(result);
19379 }
19380 return returnObject ? result : true;
19381 };
19382
19383 if (returnState) {
19384 matcher.state = state;
19385 }
19386
19387 return matcher;
19388};
19389
19390/**
19391 * Test `input` with the given `regex`. This is used by the main
19392 * `picomatch()` function to test the input string.
19393 *
19394 * ```js
19395 * const picomatch = require('picomatch');
19396 * // picomatch.test(input, regex[, options]);
19397 *
19398 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
19399 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
19400 * ```
19401 * @param {String} `input` String to test.
19402 * @param {RegExp} `regex`
19403 * @return {Object} Returns an object with matching info.
19404 * @api public
19405 */
19406
19407picomatch.test = (input, regex, options, { glob, posix } = {}) => {
19408 if (typeof input !== 'string') {
19409 throw new TypeError('Expected input to be a string');
19410 }
19411
19412 if (input === '') {
19413 return { isMatch: false, output: '' };
19414 }
19415
19416 const opts = options || {};
19417 const format = opts.format || (posix ? utils.toPosixSlashes : null);
19418 let match = input === glob;
19419 let output = (match && format) ? format(input) : input;
19420
19421 if (match === false) {
19422 output = format ? format(input) : input;
19423 match = output === glob;
19424 }
19425
19426 if (match === false || opts.capture === true) {
19427 if (opts.matchBase === true || opts.basename === true) {
19428 match = picomatch.matchBase(input, regex, options, posix);
19429 } else {
19430 match = regex.exec(output);
19431 }
19432 }
19433
19434 return { isMatch: Boolean(match), match, output };
19435};
19436
19437/**
19438 * Match the basename of a filepath.
19439 *
19440 * ```js
19441 * const picomatch = require('picomatch');
19442 * // picomatch.matchBase(input, glob[, options]);
19443 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
19444 * ```
19445 * @param {String} `input` String to test.
19446 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
19447 * @return {Boolean}
19448 * @api public
19449 */
19450
19451picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
19452 const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
19453 return regex.test(path.basename(input));
19454};
19455
19456/**
19457 * Returns true if **any** of the given glob `patterns` match the specified `string`.
19458 *
19459 * ```js
19460 * const picomatch = require('picomatch');
19461 * // picomatch.isMatch(string, patterns[, options]);
19462 *
19463 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
19464 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
19465 * ```
19466 * @param {String|Array} str The string to test.
19467 * @param {String|Array} patterns One or more glob patterns to use for matching.
19468 * @param {Object} [options] See available [options](#options).
19469 * @return {Boolean} Returns true if any patterns match `str`
19470 * @api public
19471 */
19472
19473picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
19474
19475/**
19476 * Parse a glob pattern to create the source string for a regular
19477 * expression.
19478 *
19479 * ```js
19480 * const picomatch = require('picomatch');
19481 * const result = picomatch.parse(pattern[, options]);
19482 * ```
19483 * @param {String} `pattern`
19484 * @param {Object} `options`
19485 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
19486 * @api public
19487 */
19488
19489picomatch.parse = (pattern, options) => {
19490 if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
19491 return parse(pattern, { ...options, fastpaths: false });
19492};
19493
19494/**
19495 * Scan a glob pattern to separate the pattern into segments.
19496 *
19497 * ```js
19498 * const picomatch = require('picomatch');
19499 * // picomatch.scan(input[, options]);
19500 *
19501 * const result = picomatch.scan('!./foo/*.js');
19502 * console.log(result);
19503 * { prefix: '!./',
19504 * input: '!./foo/*.js',
19505 * start: 3,
19506 * base: 'foo',
19507 * glob: '*.js',
19508 * isBrace: false,
19509 * isBracket: false,
19510 * isGlob: true,
19511 * isExtglob: false,
19512 * isGlobstar: false,
19513 * negated: true }
19514 * ```
19515 * @param {String} `input` Glob pattern to scan.
19516 * @param {Object} `options`
19517 * @return {Object} Returns an object with
19518 * @api public
19519 */
19520
19521picomatch.scan = (input, options) => scan(input, options);
19522
19523/**
19524 * Create a regular expression from a parsed glob pattern.
19525 *
19526 * ```js
19527 * const picomatch = require('picomatch');
19528 * const state = picomatch.parse('*.js');
19529 * // picomatch.compileRe(state[, options]);
19530 *
19531 * console.log(picomatch.compileRe(state));
19532 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19533 * ```
19534 * @param {String} `state` The object returned from the `.parse` method.
19535 * @param {Object} `options`
19536 * @return {RegExp} Returns a regex created from the given pattern.
19537 * @api public
19538 */
19539
19540picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
19541 if (returnOutput === true) {
19542 return parsed.output;
19543 }
19544
19545 const opts = options || {};
19546 const prepend = opts.contains ? '' : '^';
19547 const append = opts.contains ? '' : '$';
19548
19549 let source = `${prepend}(?:${parsed.output})${append}`;
19550 if (parsed && parsed.negated === true) {
19551 source = `^(?!${source}).*$`;
19552 }
19553
19554 const regex = picomatch.toRegex(source, options);
19555 if (returnState === true) {
19556 regex.state = parsed;
19557 }
19558
19559 return regex;
19560};
19561
19562picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
19563 if (!input || typeof input !== 'string') {
19564 throw new TypeError('Expected a non-empty string');
19565 }
19566
19567 const opts = options || {};
19568 let parsed = { negated: false, fastpaths: true };
19569 let prefix = '';
19570 let output;
19571
19572 if (input.startsWith('./')) {
19573 input = input.slice(2);
19574 prefix = parsed.prefix = './';
19575 }
19576
19577 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
19578 output = parse.fastpaths(input, options);
19579 }
19580
19581 if (output === undefined) {
19582 parsed = parse(input, options);
19583 parsed.prefix = prefix + (parsed.prefix || '');
19584 } else {
19585 parsed.output = output;
19586 }
19587
19588 return picomatch.compileRe(parsed, options, returnOutput, returnState);
19589};
19590
19591/**
19592 * Create a regular expression from the given regex source string.
19593 *
19594 * ```js
19595 * const picomatch = require('picomatch');
19596 * // picomatch.toRegex(source[, options]);
19597 *
19598 * const { output } = picomatch.parse('*.js');
19599 * console.log(picomatch.toRegex(output));
19600 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19601 * ```
19602 * @param {String} `source` Regular expression source string.
19603 * @param {Object} `options`
19604 * @return {RegExp}
19605 * @api public
19606 */
19607
19608picomatch.toRegex = (source, options) => {
19609 try {
19610 const opts = options || {};
19611 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
19612 } catch (err) {
19613 if (options && options.debug === true) throw err;
19614 return /$^/;
19615 }
19616};
19617
19618/**
19619 * Picomatch constants.
19620 * @return {Object}
19621 */
19622
19623picomatch.constants = constants;
19624
19625/**
19626 * Expose "picomatch"
19627 */
19628
19629module.exports = picomatch;
19630
19631
19632/***/ }),
19633/* 90 */
19634/***/ (function(module, exports, __webpack_require__) {
19635
19636"use strict";
19637
19638
19639const utils = __webpack_require__(91);
19640const {
19641 CHAR_ASTERISK, /* * */
19642 CHAR_AT, /* @ */
19643 CHAR_BACKWARD_SLASH, /* \ */
19644 CHAR_COMMA, /* , */
19645 CHAR_DOT, /* . */
19646 CHAR_EXCLAMATION_MARK, /* ! */
19647 CHAR_FORWARD_SLASH, /* / */
19648 CHAR_LEFT_CURLY_BRACE, /* { */
19649 CHAR_LEFT_PARENTHESES, /* ( */
19650 CHAR_LEFT_SQUARE_BRACKET, /* [ */
19651 CHAR_PLUS, /* + */
19652 CHAR_QUESTION_MARK, /* ? */
19653 CHAR_RIGHT_CURLY_BRACE, /* } */
19654 CHAR_RIGHT_PARENTHESES, /* ) */
19655 CHAR_RIGHT_SQUARE_BRACKET /* ] */
19656} = __webpack_require__(92);
19657
19658const isPathSeparator = code => {
19659 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
19660};
19661
19662const depth = token => {
19663 if (token.isPrefix !== true) {
19664 token.depth = token.isGlobstar ? Infinity : 1;
19665 }
19666};
19667
19668/**
19669 * Quickly scans a glob pattern and returns an object with a handful of
19670 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
19671 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
19672 *
19673 * ```js
19674 * const pm = require('picomatch');
19675 * console.log(pm.scan('foo/bar/*.js'));
19676 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
19677 * ```
19678 * @param {String} `str`
19679 * @param {Object} `options`
19680 * @return {Object} Returns an object with tokens and regex source string.
19681 * @api public
19682 */
19683
19684const scan = (input, options) => {
19685 const opts = options || {};
19686
19687 const length = input.length - 1;
19688 const scanToEnd = opts.parts === true || opts.scanToEnd === true;
19689 const slashes = [];
19690 const tokens = [];
19691 const parts = [];
19692
19693 let str = input;
19694 let index = -1;
19695 let start = 0;
19696 let lastIndex = 0;
19697 let isBrace = false;
19698 let isBracket = false;
19699 let isGlob = false;
19700 let isExtglob = false;
19701 let isGlobstar = false;
19702 let braceEscaped = false;
19703 let backslashes = false;
19704 let negated = false;
19705 let finished = false;
19706 let braces = 0;
19707 let prev;
19708 let code;
19709 let token = { value: '', depth: 0, isGlob: false };
19710
19711 const eos = () => index >= length;
19712 const peek = () => str.charCodeAt(index + 1);
19713 const advance = () => {
19714 prev = code;
19715 return str.charCodeAt(++index);
19716 };
19717
19718 while (index < length) {
19719 code = advance();
19720 let next;
19721
19722 if (code === CHAR_BACKWARD_SLASH) {
19723 backslashes = token.backslashes = true;
19724 code = advance();
19725
19726 if (code === CHAR_LEFT_CURLY_BRACE) {
19727 braceEscaped = true;
19728 }
19729 continue;
19730 }
19731
19732 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
19733 braces++;
19734
19735 while (eos() !== true && (code = advance())) {
19736 if (code === CHAR_BACKWARD_SLASH) {
19737 backslashes = token.backslashes = true;
19738 advance();
19739 continue;
19740 }
19741
19742 if (code === CHAR_LEFT_CURLY_BRACE) {
19743 braces++;
19744 continue;
19745 }
19746
19747 if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
19748 isBrace = token.isBrace = true;
19749 isGlob = token.isGlob = true;
19750 finished = true;
19751
19752 if (scanToEnd === true) {
19753 continue;
19754 }
19755
19756 break;
19757 }
19758
19759 if (braceEscaped !== true && code === CHAR_COMMA) {
19760 isBrace = token.isBrace = true;
19761 isGlob = token.isGlob = true;
19762 finished = true;
19763
19764 if (scanToEnd === true) {
19765 continue;
19766 }
19767
19768 break;
19769 }
19770
19771 if (code === CHAR_RIGHT_CURLY_BRACE) {
19772 braces--;
19773
19774 if (braces === 0) {
19775 braceEscaped = false;
19776 isBrace = token.isBrace = true;
19777 finished = true;
19778 break;
19779 }
19780 }
19781 }
19782
19783 if (scanToEnd === true) {
19784 continue;
19785 }
19786
19787 break;
19788 }
19789
19790 if (code === CHAR_FORWARD_SLASH) {
19791 slashes.push(index);
19792 tokens.push(token);
19793 token = { value: '', depth: 0, isGlob: false };
19794
19795 if (finished === true) continue;
19796 if (prev === CHAR_DOT && index === (start + 1)) {
19797 start += 2;
19798 continue;
19799 }
19800
19801 lastIndex = index + 1;
19802 continue;
19803 }
19804
19805 if (opts.noext !== true) {
19806 const isExtglobChar = code === CHAR_PLUS
19807 || code === CHAR_AT
19808 || code === CHAR_ASTERISK
19809 || code === CHAR_QUESTION_MARK
19810 || code === CHAR_EXCLAMATION_MARK;
19811
19812 if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
19813 isGlob = token.isGlob = true;
19814 isExtglob = token.isExtglob = true;
19815 finished = true;
19816
19817 if (scanToEnd === true) {
19818 while (eos() !== true && (code = advance())) {
19819 if (code === CHAR_BACKWARD_SLASH) {
19820 backslashes = token.backslashes = true;
19821 code = advance();
19822 continue;
19823 }
19824
19825 if (code === CHAR_RIGHT_PARENTHESES) {
19826 isGlob = token.isGlob = true;
19827 finished = true;
19828 break;
19829 }
19830 }
19831 continue;
19832 }
19833 break;
19834 }
19835 }
19836
19837 if (code === CHAR_ASTERISK) {
19838 if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
19839 isGlob = token.isGlob = true;
19840 finished = true;
19841
19842 if (scanToEnd === true) {
19843 continue;
19844 }
19845 break;
19846 }
19847
19848 if (code === CHAR_QUESTION_MARK) {
19849 isGlob = token.isGlob = true;
19850 finished = true;
19851
19852 if (scanToEnd === true) {
19853 continue;
19854 }
19855 break;
19856 }
19857
19858 if (code === CHAR_LEFT_SQUARE_BRACKET) {
19859 while (eos() !== true && (next = advance())) {
19860 if (next === CHAR_BACKWARD_SLASH) {
19861 backslashes = token.backslashes = true;
19862 advance();
19863 continue;
19864 }
19865
19866 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
19867 isBracket = token.isBracket = true;
19868 isGlob = token.isGlob = true;
19869 finished = true;
19870
19871 if (scanToEnd === true) {
19872 continue;
19873 }
19874 break;
19875 }
19876 }
19877 }
19878
19879 if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
19880 negated = token.negated = true;
19881 start++;
19882 continue;
19883 }
19884
19885 if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
19886 isGlob = token.isGlob = true;
19887
19888 if (scanToEnd === true) {
19889 while (eos() !== true && (code = advance())) {
19890 if (code === CHAR_LEFT_PARENTHESES) {
19891 backslashes = token.backslashes = true;
19892 code = advance();
19893 continue;
19894 }
19895
19896 if (code === CHAR_RIGHT_PARENTHESES) {
19897 finished = true;
19898 break;
19899 }
19900 }
19901 continue;
19902 }
19903 break;
19904 }
19905
19906 if (isGlob === true) {
19907 finished = true;
19908
19909 if (scanToEnd === true) {
19910 continue;
19911 }
19912
19913 break;
19914 }
19915 }
19916
19917 if (opts.noext === true) {
19918 isExtglob = false;
19919 isGlob = false;
19920 }
19921
19922 let base = str;
19923 let prefix = '';
19924 let glob = '';
19925
19926 if (start > 0) {
19927 prefix = str.slice(0, start);
19928 str = str.slice(start);
19929 lastIndex -= start;
19930 }
19931
19932 if (base && isGlob === true && lastIndex > 0) {
19933 base = str.slice(0, lastIndex);
19934 glob = str.slice(lastIndex);
19935 } else if (isGlob === true) {
19936 base = '';
19937 glob = str;
19938 } else {
19939 base = str;
19940 }
19941
19942 if (base && base !== '' && base !== '/' && base !== str) {
19943 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
19944 base = base.slice(0, -1);
19945 }
19946 }
19947
19948 if (opts.unescape === true) {
19949 if (glob) glob = utils.removeBackslashes(glob);
19950
19951 if (base && backslashes === true) {
19952 base = utils.removeBackslashes(base);
19953 }
19954 }
19955
19956 const state = {
19957 prefix,
19958 input,
19959 start,
19960 base,
19961 glob,
19962 isBrace,
19963 isBracket,
19964 isGlob,
19965 isExtglob,
19966 isGlobstar,
19967 negated
19968 };
19969
19970 if (opts.tokens === true) {
19971 state.maxDepth = 0;
19972 if (!isPathSeparator(code)) {
19973 tokens.push(token);
19974 }
19975 state.tokens = tokens;
19976 }
19977
19978 if (opts.parts === true || opts.tokens === true) {
19979 let prevIndex;
19980
19981 for (let idx = 0; idx < slashes.length; idx++) {
19982 const n = prevIndex ? prevIndex + 1 : start;
19983 const i = slashes[idx];
19984 const value = input.slice(n, i);
19985 if (opts.tokens) {
19986 if (idx === 0 && start !== 0) {
19987 tokens[idx].isPrefix = true;
19988 tokens[idx].value = prefix;
19989 } else {
19990 tokens[idx].value = value;
19991 }
19992 depth(tokens[idx]);
19993 state.maxDepth += tokens[idx].depth;
19994 }
19995 if (idx !== 0 || value !== '') {
19996 parts.push(value);
19997 }
19998 prevIndex = i;
19999 }
20000
20001 if (prevIndex && prevIndex + 1 < input.length) {
20002 const value = input.slice(prevIndex + 1);
20003 parts.push(value);
20004
20005 if (opts.tokens) {
20006 tokens[tokens.length - 1].value = value;
20007 depth(tokens[tokens.length - 1]);
20008 state.maxDepth += tokens[tokens.length - 1].depth;
20009 }
20010 }
20011
20012 state.slashes = slashes;
20013 state.parts = parts;
20014 }
20015
20016 return state;
20017};
20018
20019module.exports = scan;
20020
20021
20022/***/ }),
20023/* 91 */
20024/***/ (function(module, exports, __webpack_require__) {
20025
20026"use strict";
20027
20028
20029const path = __webpack_require__(13);
20030const win32 = process.platform === 'win32';
20031const {
20032 REGEX_BACKSLASH,
20033 REGEX_REMOVE_BACKSLASH,
20034 REGEX_SPECIAL_CHARS,
20035 REGEX_SPECIAL_CHARS_GLOBAL
20036} = __webpack_require__(92);
20037
20038exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
20039exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
20040exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
20041exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
20042exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
20043
20044exports.removeBackslashes = str => {
20045 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
20046 return match === '\\' ? '' : match;
20047 });
20048};
20049
20050exports.supportsLookbehinds = () => {
20051 const segs = process.version.slice(1).split('.').map(Number);
20052 if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
20053 return true;
20054 }
20055 return false;
20056};
20057
20058exports.isWindows = options => {
20059 if (options && typeof options.windows === 'boolean') {
20060 return options.windows;
20061 }
20062 return win32 === true || path.sep === '\\';
20063};
20064
20065exports.escapeLast = (input, char, lastIdx) => {
20066 const idx = input.lastIndexOf(char, lastIdx);
20067 if (idx === -1) return input;
20068 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
20069 return `${input.slice(0, idx)}\\${input.slice(idx)}`;
20070};
20071
20072exports.removePrefix = (input, state = {}) => {
20073 let output = input;
20074 if (output.startsWith('./')) {
20075 output = output.slice(2);
20076 state.prefix = './';
20077 }
20078 return output;
20079};
20080
20081exports.wrapOutput = (input, state = {}, options = {}) => {
20082 const prepend = options.contains ? '' : '^';
20083 const append = options.contains ? '' : '$';
20084
20085 let output = `${prepend}(?:${input})${append}`;
20086 if (state.negated === true) {
20087 output = `(?:^(?!${output}).*$)`;
20088 }
20089 return output;
20090};
20091
20092
20093/***/ }),
20094/* 92 */
20095/***/ (function(module, exports, __webpack_require__) {
20096
20097"use strict";
20098
20099
20100const path = __webpack_require__(13);
20101const WIN_SLASH = '\\\\/';
20102const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
20103
20104/**
20105 * Posix glob regex
20106 */
20107
20108const DOT_LITERAL = '\\.';
20109const PLUS_LITERAL = '\\+';
20110const QMARK_LITERAL = '\\?';
20111const SLASH_LITERAL = '\\/';
20112const ONE_CHAR = '(?=.)';
20113const QMARK = '[^/]';
20114const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
20115const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
20116const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
20117const NO_DOT = `(?!${DOT_LITERAL})`;
20118const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
20119const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
20120const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
20121const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
20122const STAR = `${QMARK}*?`;
20123
20124const POSIX_CHARS = {
20125 DOT_LITERAL,
20126 PLUS_LITERAL,
20127 QMARK_LITERAL,
20128 SLASH_LITERAL,
20129 ONE_CHAR,
20130 QMARK,
20131 END_ANCHOR,
20132 DOTS_SLASH,
20133 NO_DOT,
20134 NO_DOTS,
20135 NO_DOT_SLASH,
20136 NO_DOTS_SLASH,
20137 QMARK_NO_DOT,
20138 STAR,
20139 START_ANCHOR
20140};
20141
20142/**
20143 * Windows glob regex
20144 */
20145
20146const WINDOWS_CHARS = {
20147 ...POSIX_CHARS,
20148
20149 SLASH_LITERAL: `[${WIN_SLASH}]`,
20150 QMARK: WIN_NO_SLASH,
20151 STAR: `${WIN_NO_SLASH}*?`,
20152 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
20153 NO_DOT: `(?!${DOT_LITERAL})`,
20154 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20155 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
20156 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20157 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
20158 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
20159 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
20160};
20161
20162/**
20163 * POSIX Bracket Regex
20164 */
20165
20166const POSIX_REGEX_SOURCE = {
20167 alnum: 'a-zA-Z0-9',
20168 alpha: 'a-zA-Z',
20169 ascii: '\\x00-\\x7F',
20170 blank: ' \\t',
20171 cntrl: '\\x00-\\x1F\\x7F',
20172 digit: '0-9',
20173 graph: '\\x21-\\x7E',
20174 lower: 'a-z',
20175 print: '\\x20-\\x7E ',
20176 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
20177 space: ' \\t\\r\\n\\v\\f',
20178 upper: 'A-Z',
20179 word: 'A-Za-z0-9_',
20180 xdigit: 'A-Fa-f0-9'
20181};
20182
20183module.exports = {
20184 MAX_LENGTH: 1024 * 64,
20185 POSIX_REGEX_SOURCE,
20186
20187 // regular expressions
20188 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
20189 REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
20190 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
20191 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
20192 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
20193 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
20194
20195 // Replace globs with equivalent patterns to reduce parsing time.
20196 REPLACEMENTS: {
20197 '***': '*',
20198 '**/**': '**',
20199 '**/**/**': '**'
20200 },
20201
20202 // Digits
20203 CHAR_0: 48, /* 0 */
20204 CHAR_9: 57, /* 9 */
20205
20206 // Alphabet chars.
20207 CHAR_UPPERCASE_A: 65, /* A */
20208 CHAR_LOWERCASE_A: 97, /* a */
20209 CHAR_UPPERCASE_Z: 90, /* Z */
20210 CHAR_LOWERCASE_Z: 122, /* z */
20211
20212 CHAR_LEFT_PARENTHESES: 40, /* ( */
20213 CHAR_RIGHT_PARENTHESES: 41, /* ) */
20214
20215 CHAR_ASTERISK: 42, /* * */
20216
20217 // Non-alphabetic chars.
20218 CHAR_AMPERSAND: 38, /* & */
20219 CHAR_AT: 64, /* @ */
20220 CHAR_BACKWARD_SLASH: 92, /* \ */
20221 CHAR_CARRIAGE_RETURN: 13, /* \r */
20222 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
20223 CHAR_COLON: 58, /* : */
20224 CHAR_COMMA: 44, /* , */
20225 CHAR_DOT: 46, /* . */
20226 CHAR_DOUBLE_QUOTE: 34, /* " */
20227 CHAR_EQUAL: 61, /* = */
20228 CHAR_EXCLAMATION_MARK: 33, /* ! */
20229 CHAR_FORM_FEED: 12, /* \f */
20230 CHAR_FORWARD_SLASH: 47, /* / */
20231 CHAR_GRAVE_ACCENT: 96, /* ` */
20232 CHAR_HASH: 35, /* # */
20233 CHAR_HYPHEN_MINUS: 45, /* - */
20234 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
20235 CHAR_LEFT_CURLY_BRACE: 123, /* { */
20236 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
20237 CHAR_LINE_FEED: 10, /* \n */
20238 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
20239 CHAR_PERCENT: 37, /* % */
20240 CHAR_PLUS: 43, /* + */
20241 CHAR_QUESTION_MARK: 63, /* ? */
20242 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
20243 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
20244 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
20245 CHAR_SEMICOLON: 59, /* ; */
20246 CHAR_SINGLE_QUOTE: 39, /* ' */
20247 CHAR_SPACE: 32, /* */
20248 CHAR_TAB: 9, /* \t */
20249 CHAR_UNDERSCORE: 95, /* _ */
20250 CHAR_VERTICAL_LINE: 124, /* | */
20251 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
20252
20253 SEP: path.sep,
20254
20255 /**
20256 * Create EXTGLOB_CHARS
20257 */
20258
20259 extglobChars(chars) {
20260 return {
20261 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
20262 '?': { type: 'qmark', open: '(?:', close: ')?' },
20263 '+': { type: 'plus', open: '(?:', close: ')+' },
20264 '*': { type: 'star', open: '(?:', close: ')*' },
20265 '@': { type: 'at', open: '(?:', close: ')' }
20266 };
20267 },
20268
20269 /**
20270 * Create GLOB_CHARS
20271 */
20272
20273 globChars(win32) {
20274 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
20275 }
20276};
20277
20278
20279/***/ }),
20280/* 93 */
20281/***/ (function(module, exports, __webpack_require__) {
20282
20283"use strict";
20284
20285
20286const constants = __webpack_require__(92);
20287const utils = __webpack_require__(91);
20288
20289/**
20290 * Constants
20291 */
20292
20293const {
20294 MAX_LENGTH,
20295 POSIX_REGEX_SOURCE,
20296 REGEX_NON_SPECIAL_CHARS,
20297 REGEX_SPECIAL_CHARS_BACKREF,
20298 REPLACEMENTS
20299} = constants;
20300
20301/**
20302 * Helpers
20303 */
20304
20305const expandRange = (args, options) => {
20306 if (typeof options.expandRange === 'function') {
20307 return options.expandRange(...args, options);
20308 }
20309
20310 args.sort();
20311 const value = `[${args.join('-')}]`;
20312
20313 try {
20314 /* eslint-disable-next-line no-new */
20315 new RegExp(value);
20316 } catch (ex) {
20317 return args.map(v => utils.escapeRegex(v)).join('..');
20318 }
20319
20320 return value;
20321};
20322
20323/**
20324 * Create the message for a syntax error
20325 */
20326
20327const syntaxError = (type, char) => {
20328 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
20329};
20330
20331/**
20332 * Parse the given input string.
20333 * @param {String} input
20334 * @param {Object} options
20335 * @return {Object}
20336 */
20337
20338const parse = (input, options) => {
20339 if (typeof input !== 'string') {
20340 throw new TypeError('Expected a string');
20341 }
20342
20343 input = REPLACEMENTS[input] || input;
20344
20345 const opts = { ...options };
20346 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
20347
20348 let len = input.length;
20349 if (len > max) {
20350 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
20351 }
20352
20353 const bos = { type: 'bos', value: '', output: opts.prepend || '' };
20354 const tokens = [bos];
20355
20356 const capture = opts.capture ? '' : '?:';
20357 const win32 = utils.isWindows(options);
20358
20359 // create constants based on platform, for windows or posix
20360 const PLATFORM_CHARS = constants.globChars(win32);
20361 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
20362
20363 const {
20364 DOT_LITERAL,
20365 PLUS_LITERAL,
20366 SLASH_LITERAL,
20367 ONE_CHAR,
20368 DOTS_SLASH,
20369 NO_DOT,
20370 NO_DOT_SLASH,
20371 NO_DOTS_SLASH,
20372 QMARK,
20373 QMARK_NO_DOT,
20374 STAR,
20375 START_ANCHOR
20376 } = PLATFORM_CHARS;
20377
20378 const globstar = (opts) => {
20379 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
20380 };
20381
20382 const nodot = opts.dot ? '' : NO_DOT;
20383 const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
20384 let star = opts.bash === true ? globstar(opts) : STAR;
20385
20386 if (opts.capture) {
20387 star = `(${star})`;
20388 }
20389
20390 // minimatch options support
20391 if (typeof opts.noext === 'boolean') {
20392 opts.noextglob = opts.noext;
20393 }
20394
20395 const state = {
20396 input,
20397 index: -1,
20398 start: 0,
20399 dot: opts.dot === true,
20400 consumed: '',
20401 output: '',
20402 prefix: '',
20403 backtrack: false,
20404 negated: false,
20405 brackets: 0,
20406 braces: 0,
20407 parens: 0,
20408 quotes: 0,
20409 globstar: false,
20410 tokens
20411 };
20412
20413 input = utils.removePrefix(input, state);
20414 len = input.length;
20415
20416 const extglobs = [];
20417 const braces = [];
20418 const stack = [];
20419 let prev = bos;
20420 let value;
20421
20422 /**
20423 * Tokenizing helpers
20424 */
20425
20426 const eos = () => state.index === len - 1;
20427 const peek = state.peek = (n = 1) => input[state.index + n];
20428 const advance = state.advance = () => input[++state.index];
20429 const remaining = () => input.slice(state.index + 1);
20430 const consume = (value = '', num = 0) => {
20431 state.consumed += value;
20432 state.index += num;
20433 };
20434 const append = token => {
20435 state.output += token.output != null ? token.output : token.value;
20436 consume(token.value);
20437 };
20438
20439 const negate = () => {
20440 let count = 1;
20441
20442 while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
20443 advance();
20444 state.start++;
20445 count++;
20446 }
20447
20448 if (count % 2 === 0) {
20449 return false;
20450 }
20451
20452 state.negated = true;
20453 state.start++;
20454 return true;
20455 };
20456
20457 const increment = type => {
20458 state[type]++;
20459 stack.push(type);
20460 };
20461
20462 const decrement = type => {
20463 state[type]--;
20464 stack.pop();
20465 };
20466
20467 /**
20468 * Push tokens onto the tokens array. This helper speeds up
20469 * tokenizing by 1) helping us avoid backtracking as much as possible,
20470 * and 2) helping us avoid creating extra tokens when consecutive
20471 * characters are plain text. This improves performance and simplifies
20472 * lookbehinds.
20473 */
20474
20475 const push = tok => {
20476 if (prev.type === 'globstar') {
20477 const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
20478 const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
20479
20480 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
20481 state.output = state.output.slice(0, -prev.output.length);
20482 prev.type = 'star';
20483 prev.value = '*';
20484 prev.output = star;
20485 state.output += prev.output;
20486 }
20487 }
20488
20489 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
20490 extglobs[extglobs.length - 1].inner += tok.value;
20491 }
20492
20493 if (tok.value || tok.output) append(tok);
20494 if (prev && prev.type === 'text' && tok.type === 'text') {
20495 prev.value += tok.value;
20496 prev.output = (prev.output || '') + tok.value;
20497 return;
20498 }
20499
20500 tok.prev = prev;
20501 tokens.push(tok);
20502 prev = tok;
20503 };
20504
20505 const extglobOpen = (type, value) => {
20506 const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
20507
20508 token.prev = prev;
20509 token.parens = state.parens;
20510 token.output = state.output;
20511 const output = (opts.capture ? '(' : '') + token.open;
20512
20513 increment('parens');
20514 push({ type, value, output: state.output ? '' : ONE_CHAR });
20515 push({ type: 'paren', extglob: true, value: advance(), output });
20516 extglobs.push(token);
20517 };
20518
20519 const extglobClose = token => {
20520 let output = token.close + (opts.capture ? ')' : '');
20521
20522 if (token.type === 'negate') {
20523 let extglobStar = star;
20524
20525 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
20526 extglobStar = globstar(opts);
20527 }
20528
20529 if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
20530 output = token.close = `)$))${extglobStar}`;
20531 }
20532
20533 if (token.prev.type === 'bos' && eos()) {
20534 state.negatedExtglob = true;
20535 }
20536 }
20537
20538 push({ type: 'paren', extglob: true, value, output });
20539 decrement('parens');
20540 };
20541
20542 /**
20543 * Fast paths
20544 */
20545
20546 if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
20547 let backslashes = false;
20548
20549 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
20550 if (first === '\\') {
20551 backslashes = true;
20552 return m;
20553 }
20554
20555 if (first === '?') {
20556 if (esc) {
20557 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
20558 }
20559 if (index === 0) {
20560 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
20561 }
20562 return QMARK.repeat(chars.length);
20563 }
20564
20565 if (first === '.') {
20566 return DOT_LITERAL.repeat(chars.length);
20567 }
20568
20569 if (first === '*') {
20570 if (esc) {
20571 return esc + first + (rest ? star : '');
20572 }
20573 return star;
20574 }
20575 return esc ? m : `\\${m}`;
20576 });
20577
20578 if (backslashes === true) {
20579 if (opts.unescape === true) {
20580 output = output.replace(/\\/g, '');
20581 } else {
20582 output = output.replace(/\\+/g, m => {
20583 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
20584 });
20585 }
20586 }
20587
20588 if (output === input && opts.contains === true) {
20589 state.output = input;
20590 return state;
20591 }
20592
20593 state.output = utils.wrapOutput(output, state, options);
20594 return state;
20595 }
20596
20597 /**
20598 * Tokenize input until we reach end-of-string
20599 */
20600
20601 while (!eos()) {
20602 value = advance();
20603
20604 if (value === '\u0000') {
20605 continue;
20606 }
20607
20608 /**
20609 * Escaped characters
20610 */
20611
20612 if (value === '\\') {
20613 const next = peek();
20614
20615 if (next === '/' && opts.bash !== true) {
20616 continue;
20617 }
20618
20619 if (next === '.' || next === ';') {
20620 continue;
20621 }
20622
20623 if (!next) {
20624 value += '\\';
20625 push({ type: 'text', value });
20626 continue;
20627 }
20628
20629 // collapse slashes to reduce potential for exploits
20630 const match = /^\\+/.exec(remaining());
20631 let slashes = 0;
20632
20633 if (match && match[0].length > 2) {
20634 slashes = match[0].length;
20635 state.index += slashes;
20636 if (slashes % 2 !== 0) {
20637 value += '\\';
20638 }
20639 }
20640
20641 if (opts.unescape === true) {
20642 value = advance() || '';
20643 } else {
20644 value += advance() || '';
20645 }
20646
20647 if (state.brackets === 0) {
20648 push({ type: 'text', value });
20649 continue;
20650 }
20651 }
20652
20653 /**
20654 * If we're inside a regex character class, continue
20655 * until we reach the closing bracket.
20656 */
20657
20658 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
20659 if (opts.posix !== false && value === ':') {
20660 const inner = prev.value.slice(1);
20661 if (inner.includes('[')) {
20662 prev.posix = true;
20663
20664 if (inner.includes(':')) {
20665 const idx = prev.value.lastIndexOf('[');
20666 const pre = prev.value.slice(0, idx);
20667 const rest = prev.value.slice(idx + 2);
20668 const posix = POSIX_REGEX_SOURCE[rest];
20669 if (posix) {
20670 prev.value = pre + posix;
20671 state.backtrack = true;
20672 advance();
20673
20674 if (!bos.output && tokens.indexOf(prev) === 1) {
20675 bos.output = ONE_CHAR;
20676 }
20677 continue;
20678 }
20679 }
20680 }
20681 }
20682
20683 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
20684 value = `\\${value}`;
20685 }
20686
20687 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
20688 value = `\\${value}`;
20689 }
20690
20691 if (opts.posix === true && value === '!' && prev.value === '[') {
20692 value = '^';
20693 }
20694
20695 prev.value += value;
20696 append({ value });
20697 continue;
20698 }
20699
20700 /**
20701 * If we're inside a quoted string, continue
20702 * until we reach the closing double quote.
20703 */
20704
20705 if (state.quotes === 1 && value !== '"') {
20706 value = utils.escapeRegex(value);
20707 prev.value += value;
20708 append({ value });
20709 continue;
20710 }
20711
20712 /**
20713 * Double quotes
20714 */
20715
20716 if (value === '"') {
20717 state.quotes = state.quotes === 1 ? 0 : 1;
20718 if (opts.keepQuotes === true) {
20719 push({ type: 'text', value });
20720 }
20721 continue;
20722 }
20723
20724 /**
20725 * Parentheses
20726 */
20727
20728 if (value === '(') {
20729 increment('parens');
20730 push({ type: 'paren', value });
20731 continue;
20732 }
20733
20734 if (value === ')') {
20735 if (state.parens === 0 && opts.strictBrackets === true) {
20736 throw new SyntaxError(syntaxError('opening', '('));
20737 }
20738
20739 const extglob = extglobs[extglobs.length - 1];
20740 if (extglob && state.parens === extglob.parens + 1) {
20741 extglobClose(extglobs.pop());
20742 continue;
20743 }
20744
20745 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
20746 decrement('parens');
20747 continue;
20748 }
20749
20750 /**
20751 * Square brackets
20752 */
20753
20754 if (value === '[') {
20755 if (opts.nobracket === true || !remaining().includes(']')) {
20756 if (opts.nobracket !== true && opts.strictBrackets === true) {
20757 throw new SyntaxError(syntaxError('closing', ']'));
20758 }
20759
20760 value = `\\${value}`;
20761 } else {
20762 increment('brackets');
20763 }
20764
20765 push({ type: 'bracket', value });
20766 continue;
20767 }
20768
20769 if (value === ']') {
20770 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
20771 push({ type: 'text', value, output: `\\${value}` });
20772 continue;
20773 }
20774
20775 if (state.brackets === 0) {
20776 if (opts.strictBrackets === true) {
20777 throw new SyntaxError(syntaxError('opening', '['));
20778 }
20779
20780 push({ type: 'text', value, output: `\\${value}` });
20781 continue;
20782 }
20783
20784 decrement('brackets');
20785
20786 const prevValue = prev.value.slice(1);
20787 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
20788 value = `/${value}`;
20789 }
20790
20791 prev.value += value;
20792 append({ value });
20793
20794 // when literal brackets are explicitly disabled
20795 // assume we should match with a regex character class
20796 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
20797 continue;
20798 }
20799
20800 const escaped = utils.escapeRegex(prev.value);
20801 state.output = state.output.slice(0, -prev.value.length);
20802
20803 // when literal brackets are explicitly enabled
20804 // assume we should escape the brackets to match literal characters
20805 if (opts.literalBrackets === true) {
20806 state.output += escaped;
20807 prev.value = escaped;
20808 continue;
20809 }
20810
20811 // when the user specifies nothing, try to match both
20812 prev.value = `(${capture}${escaped}|${prev.value})`;
20813 state.output += prev.value;
20814 continue;
20815 }
20816
20817 /**
20818 * Braces
20819 */
20820
20821 if (value === '{' && opts.nobrace !== true) {
20822 increment('braces');
20823
20824 const open = {
20825 type: 'brace',
20826 value,
20827 output: '(',
20828 outputIndex: state.output.length,
20829 tokensIndex: state.tokens.length
20830 };
20831
20832 braces.push(open);
20833 push(open);
20834 continue;
20835 }
20836
20837 if (value === '}') {
20838 const brace = braces[braces.length - 1];
20839
20840 if (opts.nobrace === true || !brace) {
20841 push({ type: 'text', value, output: value });
20842 continue;
20843 }
20844
20845 let output = ')';
20846
20847 if (brace.dots === true) {
20848 const arr = tokens.slice();
20849 const range = [];
20850
20851 for (let i = arr.length - 1; i >= 0; i--) {
20852 tokens.pop();
20853 if (arr[i].type === 'brace') {
20854 break;
20855 }
20856 if (arr[i].type !== 'dots') {
20857 range.unshift(arr[i].value);
20858 }
20859 }
20860
20861 output = expandRange(range, opts);
20862 state.backtrack = true;
20863 }
20864
20865 if (brace.comma !== true && brace.dots !== true) {
20866 const out = state.output.slice(0, brace.outputIndex);
20867 const toks = state.tokens.slice(brace.tokensIndex);
20868 brace.value = brace.output = '\\{';
20869 value = output = '\\}';
20870 state.output = out;
20871 for (const t of toks) {
20872 state.output += (t.output || t.value);
20873 }
20874 }
20875
20876 push({ type: 'brace', value, output });
20877 decrement('braces');
20878 braces.pop();
20879 continue;
20880 }
20881
20882 /**
20883 * Pipes
20884 */
20885
20886 if (value === '|') {
20887 if (extglobs.length > 0) {
20888 extglobs[extglobs.length - 1].conditions++;
20889 }
20890 push({ type: 'text', value });
20891 continue;
20892 }
20893
20894 /**
20895 * Commas
20896 */
20897
20898 if (value === ',') {
20899 let output = value;
20900
20901 const brace = braces[braces.length - 1];
20902 if (brace && stack[stack.length - 1] === 'braces') {
20903 brace.comma = true;
20904 output = '|';
20905 }
20906
20907 push({ type: 'comma', value, output });
20908 continue;
20909 }
20910
20911 /**
20912 * Slashes
20913 */
20914
20915 if (value === '/') {
20916 // if the beginning of the glob is "./", advance the start
20917 // to the current index, and don't add the "./" characters
20918 // to the state. This greatly simplifies lookbehinds when
20919 // checking for BOS characters like "!" and "." (not "./")
20920 if (prev.type === 'dot' && state.index === state.start + 1) {
20921 state.start = state.index + 1;
20922 state.consumed = '';
20923 state.output = '';
20924 tokens.pop();
20925 prev = bos; // reset "prev" to the first token
20926 continue;
20927 }
20928
20929 push({ type: 'slash', value, output: SLASH_LITERAL });
20930 continue;
20931 }
20932
20933 /**
20934 * Dots
20935 */
20936
20937 if (value === '.') {
20938 if (state.braces > 0 && prev.type === 'dot') {
20939 if (prev.value === '.') prev.output = DOT_LITERAL;
20940 const brace = braces[braces.length - 1];
20941 prev.type = 'dots';
20942 prev.output += value;
20943 prev.value += value;
20944 brace.dots = true;
20945 continue;
20946 }
20947
20948 if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
20949 push({ type: 'text', value, output: DOT_LITERAL });
20950 continue;
20951 }
20952
20953 push({ type: 'dot', value, output: DOT_LITERAL });
20954 continue;
20955 }
20956
20957 /**
20958 * Question marks
20959 */
20960
20961 if (value === '?') {
20962 const isGroup = prev && prev.value === '(';
20963 if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20964 extglobOpen('qmark', value);
20965 continue;
20966 }
20967
20968 if (prev && prev.type === 'paren') {
20969 const next = peek();
20970 let output = value;
20971
20972 if (next === '<' && !utils.supportsLookbehinds()) {
20973 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
20974 }
20975
20976 if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
20977 output = `\\${value}`;
20978 }
20979
20980 push({ type: 'text', value, output });
20981 continue;
20982 }
20983
20984 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
20985 push({ type: 'qmark', value, output: QMARK_NO_DOT });
20986 continue;
20987 }
20988
20989 push({ type: 'qmark', value, output: QMARK });
20990 continue;
20991 }
20992
20993 /**
20994 * Exclamation
20995 */
20996
20997 if (value === '!') {
20998 if (opts.noextglob !== true && peek() === '(') {
20999 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
21000 extglobOpen('negate', value);
21001 continue;
21002 }
21003 }
21004
21005 if (opts.nonegate !== true && state.index === 0) {
21006 negate();
21007 continue;
21008 }
21009 }
21010
21011 /**
21012 * Plus
21013 */
21014
21015 if (value === '+') {
21016 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
21017 extglobOpen('plus', value);
21018 continue;
21019 }
21020
21021 if ((prev && prev.value === '(') || opts.regex === false) {
21022 push({ type: 'plus', value, output: PLUS_LITERAL });
21023 continue;
21024 }
21025
21026 if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
21027 push({ type: 'plus', value });
21028 continue;
21029 }
21030
21031 push({ type: 'plus', value: PLUS_LITERAL });
21032 continue;
21033 }
21034
21035 /**
21036 * Plain text
21037 */
21038
21039 if (value === '@') {
21040 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
21041 push({ type: 'at', extglob: true, value, output: '' });
21042 continue;
21043 }
21044
21045 push({ type: 'text', value });
21046 continue;
21047 }
21048
21049 /**
21050 * Plain text
21051 */
21052
21053 if (value !== '*') {
21054 if (value === '$' || value === '^') {
21055 value = `\\${value}`;
21056 }
21057
21058 const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
21059 if (match) {
21060 value += match[0];
21061 state.index += match[0].length;
21062 }
21063
21064 push({ type: 'text', value });
21065 continue;
21066 }
21067
21068 /**
21069 * Stars
21070 */
21071
21072 if (prev && (prev.type === 'globstar' || prev.star === true)) {
21073 prev.type = 'star';
21074 prev.star = true;
21075 prev.value += value;
21076 prev.output = star;
21077 state.backtrack = true;
21078 state.globstar = true;
21079 consume(value);
21080 continue;
21081 }
21082
21083 let rest = remaining();
21084 if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
21085 extglobOpen('star', value);
21086 continue;
21087 }
21088
21089 if (prev.type === 'star') {
21090 if (opts.noglobstar === true) {
21091 consume(value);
21092 continue;
21093 }
21094
21095 const prior = prev.prev;
21096 const before = prior.prev;
21097 const isStart = prior.type === 'slash' || prior.type === 'bos';
21098 const afterStar = before && (before.type === 'star' || before.type === 'globstar');
21099
21100 if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
21101 push({ type: 'star', value, output: '' });
21102 continue;
21103 }
21104
21105 const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
21106 const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
21107 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
21108 push({ type: 'star', value, output: '' });
21109 continue;
21110 }
21111
21112 // strip consecutive `/**/`
21113 while (rest.slice(0, 3) === '/**') {
21114 const after = input[state.index + 4];
21115 if (after && after !== '/') {
21116 break;
21117 }
21118 rest = rest.slice(3);
21119 consume('/**', 3);
21120 }
21121
21122 if (prior.type === 'bos' && eos()) {
21123 prev.type = 'globstar';
21124 prev.value += value;
21125 prev.output = globstar(opts);
21126 state.output = prev.output;
21127 state.globstar = true;
21128 consume(value);
21129 continue;
21130 }
21131
21132 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
21133 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21134 prior.output = `(?:${prior.output}`;
21135
21136 prev.type = 'globstar';
21137 prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
21138 prev.value += value;
21139 state.globstar = true;
21140 state.output += prior.output + prev.output;
21141 consume(value);
21142 continue;
21143 }
21144
21145 if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
21146 const end = rest[1] !== void 0 ? '|$' : '';
21147
21148 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21149 prior.output = `(?:${prior.output}`;
21150
21151 prev.type = 'globstar';
21152 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
21153 prev.value += value;
21154
21155 state.output += prior.output + prev.output;
21156 state.globstar = true;
21157
21158 consume(value + advance());
21159
21160 push({ type: 'slash', value: '/', output: '' });
21161 continue;
21162 }
21163
21164 if (prior.type === 'bos' && rest[0] === '/') {
21165 prev.type = 'globstar';
21166 prev.value += value;
21167 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
21168 state.output = prev.output;
21169 state.globstar = true;
21170 consume(value + advance());
21171 push({ type: 'slash', value: '/', output: '' });
21172 continue;
21173 }
21174
21175 // remove single star from output
21176 state.output = state.output.slice(0, -prev.output.length);
21177
21178 // reset previous token to globstar
21179 prev.type = 'globstar';
21180 prev.output = globstar(opts);
21181 prev.value += value;
21182
21183 // reset output with globstar
21184 state.output += prev.output;
21185 state.globstar = true;
21186 consume(value);
21187 continue;
21188 }
21189
21190 const token = { type: 'star', value, output: star };
21191
21192 if (opts.bash === true) {
21193 token.output = '.*?';
21194 if (prev.type === 'bos' || prev.type === 'slash') {
21195 token.output = nodot + token.output;
21196 }
21197 push(token);
21198 continue;
21199 }
21200
21201 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
21202 token.output = value;
21203 push(token);
21204 continue;
21205 }
21206
21207 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
21208 if (prev.type === 'dot') {
21209 state.output += NO_DOT_SLASH;
21210 prev.output += NO_DOT_SLASH;
21211
21212 } else if (opts.dot === true) {
21213 state.output += NO_DOTS_SLASH;
21214 prev.output += NO_DOTS_SLASH;
21215
21216 } else {
21217 state.output += nodot;
21218 prev.output += nodot;
21219 }
21220
21221 if (peek() !== '*') {
21222 state.output += ONE_CHAR;
21223 prev.output += ONE_CHAR;
21224 }
21225 }
21226
21227 push(token);
21228 }
21229
21230 while (state.brackets > 0) {
21231 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
21232 state.output = utils.escapeLast(state.output, '[');
21233 decrement('brackets');
21234 }
21235
21236 while (state.parens > 0) {
21237 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
21238 state.output = utils.escapeLast(state.output, '(');
21239 decrement('parens');
21240 }
21241
21242 while (state.braces > 0) {
21243 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
21244 state.output = utils.escapeLast(state.output, '{');
21245 decrement('braces');
21246 }
21247
21248 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
21249 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
21250 }
21251
21252 // rebuild the output if we had to backtrack at any point
21253 if (state.backtrack === true) {
21254 state.output = '';
21255
21256 for (const token of state.tokens) {
21257 state.output += token.output != null ? token.output : token.value;
21258
21259 if (token.suffix) {
21260 state.output += token.suffix;
21261 }
21262 }
21263 }
21264
21265 return state;
21266};
21267
21268/**
21269 * Fast paths for creating regular expressions for common glob patterns.
21270 * This can significantly speed up processing and has very little downside
21271 * impact when none of the fast paths match.
21272 */
21273
21274parse.fastpaths = (input, options) => {
21275 const opts = { ...options };
21276 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
21277 const len = input.length;
21278 if (len > max) {
21279 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
21280 }
21281
21282 input = REPLACEMENTS[input] || input;
21283 const win32 = utils.isWindows(options);
21284
21285 // create constants based on platform, for windows or posix
21286 const {
21287 DOT_LITERAL,
21288 SLASH_LITERAL,
21289 ONE_CHAR,
21290 DOTS_SLASH,
21291 NO_DOT,
21292 NO_DOTS,
21293 NO_DOTS_SLASH,
21294 STAR,
21295 START_ANCHOR
21296 } = constants.globChars(win32);
21297
21298 const nodot = opts.dot ? NO_DOTS : NO_DOT;
21299 const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
21300 const capture = opts.capture ? '' : '?:';
21301 const state = { negated: false, prefix: '' };
21302 let star = opts.bash === true ? '.*?' : STAR;
21303
21304 if (opts.capture) {
21305 star = `(${star})`;
21306 }
21307
21308 const globstar = (opts) => {
21309 if (opts.noglobstar === true) return star;
21310 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
21311 };
21312
21313 const create = str => {
21314 switch (str) {
21315 case '*':
21316 return `${nodot}${ONE_CHAR}${star}`;
21317
21318 case '.*':
21319 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
21320
21321 case '*.*':
21322 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21323
21324 case '*/*':
21325 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
21326
21327 case '**':
21328 return nodot + globstar(opts);
21329
21330 case '**/*':
21331 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
21332
21333 case '**/*.*':
21334 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21335
21336 case '**/.*':
21337 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
21338
21339 default: {
21340 const match = /^(.*?)\.(\w+)$/.exec(str);
21341 if (!match) return;
21342
21343 const source = create(match[1]);
21344 if (!source) return;
21345
21346 return source + DOT_LITERAL + match[2];
21347 }
21348 }
21349 };
21350
21351 const output = utils.removePrefix(input, state);
21352 let source = create(output);
21353
21354 if (source && opts.strictSlashes !== true) {
21355 source += `${SLASH_LITERAL}?`;
21356 }
21357
21358 return source;
21359};
21360
21361module.exports = parse;
21362
21363
21364/***/ }),
21365/* 94 */
21366/***/ (function(module, exports, __webpack_require__) {
21367
21368"use strict";
21369
21370Object.defineProperty(exports, "__esModule", { value: true });
21371exports.merge = void 0;
21372const merge2 = __webpack_require__(95);
21373function merge(streams) {
21374 const mergedStream = merge2(streams);
21375 streams.forEach((stream) => {
21376 stream.once('error', (error) => mergedStream.emit('error', error));
21377 });
21378 mergedStream.once('close', () => propagateCloseEventToSources(streams));
21379 mergedStream.once('end', () => propagateCloseEventToSources(streams));
21380 return mergedStream;
21381}
21382exports.merge = merge;
21383function propagateCloseEventToSources(streams) {
21384 streams.forEach((stream) => stream.emit('close'));
21385}
21386
21387
21388/***/ }),
21389/* 95 */
21390/***/ (function(module, exports, __webpack_require__) {
21391
21392"use strict";
21393
21394/*
21395 * merge2
21396 * https://github.com/teambition/merge2
21397 *
21398 * Copyright (c) 2014-2016 Teambition
21399 * Licensed under the MIT license.
21400 */
21401const Stream = __webpack_require__(96)
21402const PassThrough = Stream.PassThrough
21403const slice = Array.prototype.slice
21404
21405module.exports = merge2
21406
21407function merge2 () {
21408 const streamsQueue = []
21409 let merging = false
21410 const args = slice.call(arguments)
21411 let options = args[args.length - 1]
21412
21413 if (options && !Array.isArray(options) && options.pipe == null) args.pop()
21414 else options = {}
21415
21416 const doEnd = options.end !== false
21417 if (options.objectMode == null) options.objectMode = true
21418 if (options.highWaterMark == null) options.highWaterMark = 64 * 1024
21419 const mergedStream = PassThrough(options)
21420
21421 function addStream () {
21422 for (let i = 0, len = arguments.length; i < len; i++) {
21423 streamsQueue.push(pauseStreams(arguments[i], options))
21424 }
21425 mergeStream()
21426 return this
21427 }
21428
21429 function mergeStream () {
21430 if (merging) return
21431 merging = true
21432
21433 let streams = streamsQueue.shift()
21434 if (!streams) {
21435 process.nextTick(endStream)
21436 return
21437 }
21438 if (!Array.isArray(streams)) streams = [streams]
21439
21440 let pipesCount = streams.length + 1
21441
21442 function next () {
21443 if (--pipesCount > 0) return
21444 merging = false
21445 mergeStream()
21446 }
21447
21448 function pipe (stream) {
21449 function onend () {
21450 stream.removeListener('merge2UnpipeEnd', onend)
21451 stream.removeListener('end', onend)
21452 next()
21453 }
21454 // skip ended stream
21455 if (stream._readableState.endEmitted) return next()
21456
21457 stream.on('merge2UnpipeEnd', onend)
21458 stream.on('end', onend)
21459 stream.pipe(mergedStream, { end: false })
21460 // compatible for old stream
21461 stream.resume()
21462 }
21463
21464 for (let i = 0; i < streams.length; i++) pipe(streams[i])
21465
21466 next()
21467 }
21468
21469 function endStream () {
21470 merging = false
21471 // emit 'queueDrain' when all streams merged.
21472 mergedStream.emit('queueDrain')
21473 return doEnd && mergedStream.end()
21474 }
21475
21476 mergedStream.setMaxListeners(0)
21477 mergedStream.add = addStream
21478 mergedStream.on('unpipe', function (stream) {
21479 stream.emit('merge2UnpipeEnd')
21480 })
21481
21482 if (args.length) addStream.apply(null, args)
21483 return mergedStream
21484}
21485
21486// check and pause streams for pipe.
21487function pauseStreams (streams, options) {
21488 if (!Array.isArray(streams)) {
21489 // Backwards-compat with old-style streams
21490 if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options))
21491 if (!streams._readableState || !streams.pause || !streams.pipe) {
21492 throw new Error('Only readable stream can be merged.')
21493 }
21494 streams.pause()
21495 } else {
21496 for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options)
21497 }
21498 return streams
21499}
21500
21501
21502/***/ }),
21503/* 96 */
21504/***/ (function(module, exports) {
21505
21506module.exports = require("stream");
21507
21508/***/ }),
21509/* 97 */
21510/***/ (function(module, exports, __webpack_require__) {
21511
21512"use strict";
21513
21514Object.defineProperty(exports, "__esModule", { value: true });
21515exports.isEmpty = exports.isString = void 0;
21516function isString(input) {
21517 return typeof input === 'string';
21518}
21519exports.isString = isString;
21520function isEmpty(input) {
21521 return input === '';
21522}
21523exports.isEmpty = isEmpty;
21524
21525
21526/***/ }),
21527/* 98 */
21528/***/ (function(module, exports, __webpack_require__) {
21529
21530"use strict";
21531
21532Object.defineProperty(exports, "__esModule", { value: true });
21533const stream_1 = __webpack_require__(99);
21534const provider_1 = __webpack_require__(126);
21535class ProviderAsync extends provider_1.default {
21536 constructor() {
21537 super(...arguments);
21538 this._reader = new stream_1.default(this._settings);
21539 }
21540 read(task) {
21541 const root = this._getRootDirectory(task);
21542 const options = this._getReaderOptions(task);
21543 const entries = [];
21544 return new Promise((resolve, reject) => {
21545 const stream = this.api(root, task, options);
21546 stream.once('error', reject);
21547 stream.on('data', (entry) => entries.push(options.transform(entry)));
21548 stream.once('end', () => resolve(entries));
21549 });
21550 }
21551 api(root, task, options) {
21552 if (task.dynamic) {
21553 return this._reader.dynamic(root, options);
21554 }
21555 return this._reader.static(task.patterns, options);
21556 }
21557}
21558exports.default = ProviderAsync;
21559
21560
21561/***/ }),
21562/* 99 */
21563/***/ (function(module, exports, __webpack_require__) {
21564
21565"use strict";
21566
21567Object.defineProperty(exports, "__esModule", { value: true });
21568const stream_1 = __webpack_require__(96);
21569const fsStat = __webpack_require__(100);
21570const fsWalk = __webpack_require__(105);
21571const reader_1 = __webpack_require__(125);
21572class ReaderStream extends reader_1.default {
21573 constructor() {
21574 super(...arguments);
21575 this._walkStream = fsWalk.walkStream;
21576 this._stat = fsStat.stat;
21577 }
21578 dynamic(root, options) {
21579 return this._walkStream(root, options);
21580 }
21581 static(patterns, options) {
21582 const filepaths = patterns.map(this._getFullEntryPath, this);
21583 const stream = new stream_1.PassThrough({ objectMode: true });
21584 stream._write = (index, _enc, done) => {
21585 return this._getEntry(filepaths[index], patterns[index], options)
21586 .then((entry) => {
21587 if (entry !== null && options.entryFilter(entry)) {
21588 stream.push(entry);
21589 }
21590 if (index === filepaths.length - 1) {
21591 stream.end();
21592 }
21593 done();
21594 })
21595 .catch(done);
21596 };
21597 for (let i = 0; i < filepaths.length; i++) {
21598 stream.write(i);
21599 }
21600 return stream;
21601 }
21602 _getEntry(filepath, pattern, options) {
21603 return this._getStat(filepath)
21604 .then((stats) => this._makeEntry(stats, pattern))
21605 .catch((error) => {
21606 if (options.errorFilter(error)) {
21607 return null;
21608 }
21609 throw error;
21610 });
21611 }
21612 _getStat(filepath) {
21613 return new Promise((resolve, reject) => {
21614 this._stat(filepath, this._fsStatSettings, (error, stats) => {
21615 return error === null ? resolve(stats) : reject(error);
21616 });
21617 });
21618 }
21619}
21620exports.default = ReaderStream;
21621
21622
21623/***/ }),
21624/* 100 */
21625/***/ (function(module, exports, __webpack_require__) {
21626
21627"use strict";
21628
21629Object.defineProperty(exports, "__esModule", { value: true });
21630const async = __webpack_require__(101);
21631const sync = __webpack_require__(102);
21632const settings_1 = __webpack_require__(103);
21633exports.Settings = settings_1.default;
21634function stat(path, optionsOrSettingsOrCallback, callback) {
21635 if (typeof optionsOrSettingsOrCallback === 'function') {
21636 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21637 }
21638 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21639}
21640exports.stat = stat;
21641function statSync(path, optionsOrSettings) {
21642 const settings = getSettings(optionsOrSettings);
21643 return sync.read(path, settings);
21644}
21645exports.statSync = statSync;
21646function getSettings(settingsOrOptions = {}) {
21647 if (settingsOrOptions instanceof settings_1.default) {
21648 return settingsOrOptions;
21649 }
21650 return new settings_1.default(settingsOrOptions);
21651}
21652
21653
21654/***/ }),
21655/* 101 */
21656/***/ (function(module, exports, __webpack_require__) {
21657
21658"use strict";
21659
21660Object.defineProperty(exports, "__esModule", { value: true });
21661function read(path, settings, callback) {
21662 settings.fs.lstat(path, (lstatError, lstat) => {
21663 if (lstatError !== null) {
21664 return callFailureCallback(callback, lstatError);
21665 }
21666 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21667 return callSuccessCallback(callback, lstat);
21668 }
21669 settings.fs.stat(path, (statError, stat) => {
21670 if (statError !== null) {
21671 if (settings.throwErrorOnBrokenSymbolicLink) {
21672 return callFailureCallback(callback, statError);
21673 }
21674 return callSuccessCallback(callback, lstat);
21675 }
21676 if (settings.markSymbolicLink) {
21677 stat.isSymbolicLink = () => true;
21678 }
21679 callSuccessCallback(callback, stat);
21680 });
21681 });
21682}
21683exports.read = read;
21684function callFailureCallback(callback, error) {
21685 callback(error);
21686}
21687function callSuccessCallback(callback, result) {
21688 callback(null, result);
21689}
21690
21691
21692/***/ }),
21693/* 102 */
21694/***/ (function(module, exports, __webpack_require__) {
21695
21696"use strict";
21697
21698Object.defineProperty(exports, "__esModule", { value: true });
21699function read(path, settings) {
21700 const lstat = settings.fs.lstatSync(path);
21701 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21702 return lstat;
21703 }
21704 try {
21705 const stat = settings.fs.statSync(path);
21706 if (settings.markSymbolicLink) {
21707 stat.isSymbolicLink = () => true;
21708 }
21709 return stat;
21710 }
21711 catch (error) {
21712 if (!settings.throwErrorOnBrokenSymbolicLink) {
21713 return lstat;
21714 }
21715 throw error;
21716 }
21717}
21718exports.read = read;
21719
21720
21721/***/ }),
21722/* 103 */
21723/***/ (function(module, exports, __webpack_require__) {
21724
21725"use strict";
21726
21727Object.defineProperty(exports, "__esModule", { value: true });
21728const fs = __webpack_require__(104);
21729class Settings {
21730 constructor(_options = {}) {
21731 this._options = _options;
21732 this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
21733 this.fs = fs.createFileSystemAdapter(this._options.fs);
21734 this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
21735 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
21736 }
21737 _getValue(option, value) {
21738 return option === undefined ? value : option;
21739 }
21740}
21741exports.default = Settings;
21742
21743
21744/***/ }),
21745/* 104 */
21746/***/ (function(module, exports, __webpack_require__) {
21747
21748"use strict";
21749
21750Object.defineProperty(exports, "__esModule", { value: true });
21751const fs = __webpack_require__(40);
21752exports.FILE_SYSTEM_ADAPTER = {
21753 lstat: fs.lstat,
21754 stat: fs.stat,
21755 lstatSync: fs.lstatSync,
21756 statSync: fs.statSync
21757};
21758function createFileSystemAdapter(fsMethods) {
21759 if (fsMethods === undefined) {
21760 return exports.FILE_SYSTEM_ADAPTER;
21761 }
21762 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
21763}
21764exports.createFileSystemAdapter = createFileSystemAdapter;
21765
21766
21767/***/ }),
21768/* 105 */
21769/***/ (function(module, exports, __webpack_require__) {
21770
21771"use strict";
21772
21773Object.defineProperty(exports, "__esModule", { value: true });
21774const async_1 = __webpack_require__(106);
21775const stream_1 = __webpack_require__(121);
21776const sync_1 = __webpack_require__(122);
21777const settings_1 = __webpack_require__(124);
21778exports.Settings = settings_1.default;
21779function walk(directory, optionsOrSettingsOrCallback, callback) {
21780 if (typeof optionsOrSettingsOrCallback === 'function') {
21781 return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
21782 }
21783 new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
21784}
21785exports.walk = walk;
21786function walkSync(directory, optionsOrSettings) {
21787 const settings = getSettings(optionsOrSettings);
21788 const provider = new sync_1.default(directory, settings);
21789 return provider.read();
21790}
21791exports.walkSync = walkSync;
21792function walkStream(directory, optionsOrSettings) {
21793 const settings = getSettings(optionsOrSettings);
21794 const provider = new stream_1.default(directory, settings);
21795 return provider.read();
21796}
21797exports.walkStream = walkStream;
21798function getSettings(settingsOrOptions = {}) {
21799 if (settingsOrOptions instanceof settings_1.default) {
21800 return settingsOrOptions;
21801 }
21802 return new settings_1.default(settingsOrOptions);
21803}
21804
21805
21806/***/ }),
21807/* 106 */
21808/***/ (function(module, exports, __webpack_require__) {
21809
21810"use strict";
21811
21812Object.defineProperty(exports, "__esModule", { value: true });
21813const async_1 = __webpack_require__(107);
21814class AsyncProvider {
21815 constructor(_root, _settings) {
21816 this._root = _root;
21817 this._settings = _settings;
21818 this._reader = new async_1.default(this._root, this._settings);
21819 this._storage = new Set();
21820 }
21821 read(callback) {
21822 this._reader.onError((error) => {
21823 callFailureCallback(callback, error);
21824 });
21825 this._reader.onEntry((entry) => {
21826 this._storage.add(entry);
21827 });
21828 this._reader.onEnd(() => {
21829 callSuccessCallback(callback, [...this._storage]);
21830 });
21831 this._reader.read();
21832 }
21833}
21834exports.default = AsyncProvider;
21835function callFailureCallback(callback, error) {
21836 callback(error);
21837}
21838function callSuccessCallback(callback, entries) {
21839 callback(null, entries);
21840}
21841
21842
21843/***/ }),
21844/* 107 */
21845/***/ (function(module, exports, __webpack_require__) {
21846
21847"use strict";
21848
21849Object.defineProperty(exports, "__esModule", { value: true });
21850const events_1 = __webpack_require__(51);
21851const fsScandir = __webpack_require__(108);
21852const fastq = __webpack_require__(117);
21853const common = __webpack_require__(119);
21854const reader_1 = __webpack_require__(120);
21855class AsyncReader extends reader_1.default {
21856 constructor(_root, _settings) {
21857 super(_root, _settings);
21858 this._settings = _settings;
21859 this._scandir = fsScandir.scandir;
21860 this._emitter = new events_1.EventEmitter();
21861 this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
21862 this._isFatalError = false;
21863 this._isDestroyed = false;
21864 this._queue.drain = () => {
21865 if (!this._isFatalError) {
21866 this._emitter.emit('end');
21867 }
21868 };
21869 }
21870 read() {
21871 this._isFatalError = false;
21872 this._isDestroyed = false;
21873 setImmediate(() => {
21874 this._pushToQueue(this._root, this._settings.basePath);
21875 });
21876 return this._emitter;
21877 }
21878 destroy() {
21879 if (this._isDestroyed) {
21880 throw new Error('The reader is already destroyed');
21881 }
21882 this._isDestroyed = true;
21883 this._queue.killAndDrain();
21884 }
21885 onEntry(callback) {
21886 this._emitter.on('entry', callback);
21887 }
21888 onError(callback) {
21889 this._emitter.once('error', callback);
21890 }
21891 onEnd(callback) {
21892 this._emitter.once('end', callback);
21893 }
21894 _pushToQueue(directory, base) {
21895 const queueItem = { directory, base };
21896 this._queue.push(queueItem, (error) => {
21897 if (error !== null) {
21898 this._handleError(error);
21899 }
21900 });
21901 }
21902 _worker(item, done) {
21903 this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
21904 if (error !== null) {
21905 return done(error, undefined);
21906 }
21907 for (const entry of entries) {
21908 this._handleEntry(entry, item.base);
21909 }
21910 done(null, undefined);
21911 });
21912 }
21913 _handleError(error) {
21914 if (!common.isFatalError(this._settings, error)) {
21915 return;
21916 }
21917 this._isFatalError = true;
21918 this._isDestroyed = true;
21919 this._emitter.emit('error', error);
21920 }
21921 _handleEntry(entry, base) {
21922 if (this._isDestroyed || this._isFatalError) {
21923 return;
21924 }
21925 const fullpath = entry.path;
21926 if (base !== undefined) {
21927 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
21928 }
21929 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
21930 this._emitEntry(entry);
21931 }
21932 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
21933 this._pushToQueue(fullpath, entry.path);
21934 }
21935 }
21936 _emitEntry(entry) {
21937 this._emitter.emit('entry', entry);
21938 }
21939}
21940exports.default = AsyncReader;
21941
21942
21943/***/ }),
21944/* 108 */
21945/***/ (function(module, exports, __webpack_require__) {
21946
21947"use strict";
21948
21949Object.defineProperty(exports, "__esModule", { value: true });
21950const async = __webpack_require__(109);
21951const sync = __webpack_require__(114);
21952const settings_1 = __webpack_require__(115);
21953exports.Settings = settings_1.default;
21954function scandir(path, optionsOrSettingsOrCallback, callback) {
21955 if (typeof optionsOrSettingsOrCallback === 'function') {
21956 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21957 }
21958 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21959}
21960exports.scandir = scandir;
21961function scandirSync(path, optionsOrSettings) {
21962 const settings = getSettings(optionsOrSettings);
21963 return sync.read(path, settings);
21964}
21965exports.scandirSync = scandirSync;
21966function getSettings(settingsOrOptions = {}) {
21967 if (settingsOrOptions instanceof settings_1.default) {
21968 return settingsOrOptions;
21969 }
21970 return new settings_1.default(settingsOrOptions);
21971}
21972
21973
21974/***/ }),
21975/* 109 */
21976/***/ (function(module, exports, __webpack_require__) {
21977
21978"use strict";
21979
21980Object.defineProperty(exports, "__esModule", { value: true });
21981const fsStat = __webpack_require__(100);
21982const rpl = __webpack_require__(110);
21983const constants_1 = __webpack_require__(111);
21984const utils = __webpack_require__(112);
21985function read(directory, settings, callback) {
21986 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
21987 return readdirWithFileTypes(directory, settings, callback);
21988 }
21989 return readdir(directory, settings, callback);
21990}
21991exports.read = read;
21992function readdirWithFileTypes(directory, settings, callback) {
21993 settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
21994 if (readdirError !== null) {
21995 return callFailureCallback(callback, readdirError);
21996 }
21997 const entries = dirents.map((dirent) => ({
21998 dirent,
21999 name: dirent.name,
22000 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
22001 }));
22002 if (!settings.followSymbolicLinks) {
22003 return callSuccessCallback(callback, entries);
22004 }
22005 const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
22006 rpl(tasks, (rplError, rplEntries) => {
22007 if (rplError !== null) {
22008 return callFailureCallback(callback, rplError);
22009 }
22010 callSuccessCallback(callback, rplEntries);
22011 });
22012 });
22013}
22014exports.readdirWithFileTypes = readdirWithFileTypes;
22015function makeRplTaskEntry(entry, settings) {
22016 return (done) => {
22017 if (!entry.dirent.isSymbolicLink()) {
22018 return done(null, entry);
22019 }
22020 settings.fs.stat(entry.path, (statError, stats) => {
22021 if (statError !== null) {
22022 if (settings.throwErrorOnBrokenSymbolicLink) {
22023 return done(statError);
22024 }
22025 return done(null, entry);
22026 }
22027 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
22028 return done(null, entry);
22029 });
22030 };
22031}
22032function readdir(directory, settings, callback) {
22033 settings.fs.readdir(directory, (readdirError, names) => {
22034 if (readdirError !== null) {
22035 return callFailureCallback(callback, readdirError);
22036 }
22037 const filepaths = names.map((name) => `${directory}${settings.pathSegmentSeparator}${name}`);
22038 const tasks = filepaths.map((filepath) => {
22039 return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
22040 });
22041 rpl(tasks, (rplError, results) => {
22042 if (rplError !== null) {
22043 return callFailureCallback(callback, rplError);
22044 }
22045 const entries = [];
22046 names.forEach((name, index) => {
22047 const stats = results[index];
22048 const entry = {
22049 name,
22050 path: filepaths[index],
22051 dirent: utils.fs.createDirentFromStats(name, stats)
22052 };
22053 if (settings.stats) {
22054 entry.stats = stats;
22055 }
22056 entries.push(entry);
22057 });
22058 callSuccessCallback(callback, entries);
22059 });
22060 });
22061}
22062exports.readdir = readdir;
22063function callFailureCallback(callback, error) {
22064 callback(error);
22065}
22066function callSuccessCallback(callback, result) {
22067 callback(null, result);
22068}
22069
22070
22071/***/ }),
22072/* 110 */
22073/***/ (function(module, exports) {
22074
22075module.exports = runParallel
22076
22077function runParallel (tasks, cb) {
22078 var results, pending, keys
22079 var isSync = true
22080
22081 if (Array.isArray(tasks)) {
22082 results = []
22083 pending = tasks.length
22084 } else {
22085 keys = Object.keys(tasks)
22086 results = {}
22087 pending = keys.length
22088 }
22089
22090 function done (err) {
22091 function end () {
22092 if (cb) cb(err, results)
22093 cb = null
22094 }
22095 if (isSync) process.nextTick(end)
22096 else end()
22097 }
22098
22099 function each (i, err, result) {
22100 results[i] = result
22101 if (--pending === 0 || err) {
22102 done(err)
22103 }
22104 }
22105
22106 if (!pending) {
22107 // empty
22108 done(null)
22109 } else if (keys) {
22110 // object
22111 keys.forEach(function (key) {
22112 tasks[key](function (err, result) { each(key, err, result) })
22113 })
22114 } else {
22115 // array
22116 tasks.forEach(function (task, i) {
22117 task(function (err, result) { each(i, err, result) })
22118 })
22119 }
22120
22121 isSync = false
22122}
22123
22124
22125/***/ }),
22126/* 111 */
22127/***/ (function(module, exports, __webpack_require__) {
22128
22129"use strict";
22130
22131Object.defineProperty(exports, "__esModule", { value: true });
22132const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
22133const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
22134const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
22135const SUPPORTED_MAJOR_VERSION = 10;
22136const SUPPORTED_MINOR_VERSION = 10;
22137const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
22138const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
22139/**
22140 * IS `true` for Node.js 10.10 and greater.
22141 */
22142exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
22143
22144
22145/***/ }),
22146/* 112 */
22147/***/ (function(module, exports, __webpack_require__) {
22148
22149"use strict";
22150
22151Object.defineProperty(exports, "__esModule", { value: true });
22152const fs = __webpack_require__(113);
22153exports.fs = fs;
22154
22155
22156/***/ }),
22157/* 113 */
22158/***/ (function(module, exports, __webpack_require__) {
22159
22160"use strict";
22161
22162Object.defineProperty(exports, "__esModule", { value: true });
22163class DirentFromStats {
22164 constructor(name, stats) {
22165 this.name = name;
22166 this.isBlockDevice = stats.isBlockDevice.bind(stats);
22167 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
22168 this.isDirectory = stats.isDirectory.bind(stats);
22169 this.isFIFO = stats.isFIFO.bind(stats);
22170 this.isFile = stats.isFile.bind(stats);
22171 this.isSocket = stats.isSocket.bind(stats);
22172 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
22173 }
22174}
22175function createDirentFromStats(name, stats) {
22176 return new DirentFromStats(name, stats);
22177}
22178exports.createDirentFromStats = createDirentFromStats;
22179
22180
22181/***/ }),
22182/* 114 */
22183/***/ (function(module, exports, __webpack_require__) {
22184
22185"use strict";
22186
22187Object.defineProperty(exports, "__esModule", { value: true });
22188const fsStat = __webpack_require__(100);
22189const constants_1 = __webpack_require__(111);
22190const utils = __webpack_require__(112);
22191function read(directory, settings) {
22192 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
22193 return readdirWithFileTypes(directory, settings);
22194 }
22195 return readdir(directory, settings);
22196}
22197exports.read = read;
22198function readdirWithFileTypes(directory, settings) {
22199 const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
22200 return dirents.map((dirent) => {
22201 const entry = {
22202 dirent,
22203 name: dirent.name,
22204 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
22205 };
22206 if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
22207 try {
22208 const stats = settings.fs.statSync(entry.path);
22209 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
22210 }
22211 catch (error) {
22212 if (settings.throwErrorOnBrokenSymbolicLink) {
22213 throw error;
22214 }
22215 }
22216 }
22217 return entry;
22218 });
22219}
22220exports.readdirWithFileTypes = readdirWithFileTypes;
22221function readdir(directory, settings) {
22222 const names = settings.fs.readdirSync(directory);
22223 return names.map((name) => {
22224 const entryPath = `${directory}${settings.pathSegmentSeparator}${name}`;
22225 const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
22226 const entry = {
22227 name,
22228 path: entryPath,
22229 dirent: utils.fs.createDirentFromStats(name, stats)
22230 };
22231 if (settings.stats) {
22232 entry.stats = stats;
22233 }
22234 return entry;
22235 });
22236}
22237exports.readdir = readdir;
22238
22239
22240/***/ }),
22241/* 115 */
22242/***/ (function(module, exports, __webpack_require__) {
22243
22244"use strict";
22245
22246Object.defineProperty(exports, "__esModule", { value: true });
22247const path = __webpack_require__(13);
22248const fsStat = __webpack_require__(100);
22249const fs = __webpack_require__(116);
22250class Settings {
22251 constructor(_options = {}) {
22252 this._options = _options;
22253 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
22254 this.fs = fs.createFileSystemAdapter(this._options.fs);
22255 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22256 this.stats = this._getValue(this._options.stats, false);
22257 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
22258 this.fsStatSettings = new fsStat.Settings({
22259 followSymbolicLink: this.followSymbolicLinks,
22260 fs: this.fs,
22261 throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
22262 });
22263 }
22264 _getValue(option, value) {
22265 return option === undefined ? value : option;
22266 }
22267}
22268exports.default = Settings;
22269
22270
22271/***/ }),
22272/* 116 */
22273/***/ (function(module, exports, __webpack_require__) {
22274
22275"use strict";
22276
22277Object.defineProperty(exports, "__esModule", { value: true });
22278const fs = __webpack_require__(40);
22279exports.FILE_SYSTEM_ADAPTER = {
22280 lstat: fs.lstat,
22281 stat: fs.stat,
22282 lstatSync: fs.lstatSync,
22283 statSync: fs.statSync,
22284 readdir: fs.readdir,
22285 readdirSync: fs.readdirSync
22286};
22287function createFileSystemAdapter(fsMethods) {
22288 if (fsMethods === undefined) {
22289 return exports.FILE_SYSTEM_ADAPTER;
22290 }
22291 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
22292}
22293exports.createFileSystemAdapter = createFileSystemAdapter;
22294
22295
22296/***/ }),
22297/* 117 */
22298/***/ (function(module, exports, __webpack_require__) {
22299
22300"use strict";
22301
22302
22303var reusify = __webpack_require__(118)
22304
22305function fastqueue (context, worker, concurrency) {
22306 if (typeof context === 'function') {
22307 concurrency = worker
22308 worker = context
22309 context = null
22310 }
22311
22312 var cache = reusify(Task)
22313 var queueHead = null
22314 var queueTail = null
22315 var _running = 0
22316
22317 var self = {
22318 push: push,
22319 drain: noop,
22320 saturated: noop,
22321 pause: pause,
22322 paused: false,
22323 concurrency: concurrency,
22324 running: running,
22325 resume: resume,
22326 idle: idle,
22327 length: length,
22328 unshift: unshift,
22329 empty: noop,
22330 kill: kill,
22331 killAndDrain: killAndDrain
22332 }
22333
22334 return self
22335
22336 function running () {
22337 return _running
22338 }
22339
22340 function pause () {
22341 self.paused = true
22342 }
22343
22344 function length () {
22345 var current = queueHead
22346 var counter = 0
22347
22348 while (current) {
22349 current = current.next
22350 counter++
22351 }
22352
22353 return counter
22354 }
22355
22356 function resume () {
22357 if (!self.paused) return
22358 self.paused = false
22359 for (var i = 0; i < self.concurrency; i++) {
22360 _running++
22361 release()
22362 }
22363 }
22364
22365 function idle () {
22366 return _running === 0 && self.length() === 0
22367 }
22368
22369 function push (value, done) {
22370 var current = cache.get()
22371
22372 current.context = context
22373 current.release = release
22374 current.value = value
22375 current.callback = done || noop
22376
22377 if (_running === self.concurrency || self.paused) {
22378 if (queueTail) {
22379 queueTail.next = current
22380 queueTail = current
22381 } else {
22382 queueHead = current
22383 queueTail = current
22384 self.saturated()
22385 }
22386 } else {
22387 _running++
22388 worker.call(context, current.value, current.worked)
22389 }
22390 }
22391
22392 function unshift (value, done) {
22393 var current = cache.get()
22394
22395 current.context = context
22396 current.release = release
22397 current.value = value
22398 current.callback = done || noop
22399
22400 if (_running === self.concurrency || self.paused) {
22401 if (queueHead) {
22402 current.next = queueHead
22403 queueHead = current
22404 } else {
22405 queueHead = current
22406 queueTail = current
22407 self.saturated()
22408 }
22409 } else {
22410 _running++
22411 worker.call(context, current.value, current.worked)
22412 }
22413 }
22414
22415 function release (holder) {
22416 if (holder) {
22417 cache.release(holder)
22418 }
22419 var next = queueHead
22420 if (next) {
22421 if (!self.paused) {
22422 if (queueTail === queueHead) {
22423 queueTail = null
22424 }
22425 queueHead = next.next
22426 next.next = null
22427 worker.call(context, next.value, next.worked)
22428 if (queueTail === null) {
22429 self.empty()
22430 }
22431 } else {
22432 _running--
22433 }
22434 } else if (--_running === 0) {
22435 self.drain()
22436 }
22437 }
22438
22439 function kill () {
22440 queueHead = null
22441 queueTail = null
22442 self.drain = noop
22443 }
22444
22445 function killAndDrain () {
22446 queueHead = null
22447 queueTail = null
22448 self.drain()
22449 self.drain = noop
22450 }
22451}
22452
22453function noop () {}
22454
22455function Task () {
22456 this.value = null
22457 this.callback = noop
22458 this.next = null
22459 this.release = noop
22460 this.context = null
22461
22462 var self = this
22463
22464 this.worked = function worked (err, result) {
22465 var callback = self.callback
22466 self.value = null
22467 self.callback = noop
22468 callback.call(self.context, err, result)
22469 self.release(self)
22470 }
22471}
22472
22473module.exports = fastqueue
22474
22475
22476/***/ }),
22477/* 118 */
22478/***/ (function(module, exports, __webpack_require__) {
22479
22480"use strict";
22481
22482
22483function reusify (Constructor) {
22484 var head = new Constructor()
22485 var tail = head
22486
22487 function get () {
22488 var current = head
22489
22490 if (current.next) {
22491 head = current.next
22492 } else {
22493 head = new Constructor()
22494 tail = head
22495 }
22496
22497 current.next = null
22498
22499 return current
22500 }
22501
22502 function release (obj) {
22503 tail.next = obj
22504 tail = obj
22505 }
22506
22507 return {
22508 get: get,
22509 release: release
22510 }
22511}
22512
22513module.exports = reusify
22514
22515
22516/***/ }),
22517/* 119 */
22518/***/ (function(module, exports, __webpack_require__) {
22519
22520"use strict";
22521
22522Object.defineProperty(exports, "__esModule", { value: true });
22523function isFatalError(settings, error) {
22524 if (settings.errorFilter === null) {
22525 return true;
22526 }
22527 return !settings.errorFilter(error);
22528}
22529exports.isFatalError = isFatalError;
22530function isAppliedFilter(filter, value) {
22531 return filter === null || filter(value);
22532}
22533exports.isAppliedFilter = isAppliedFilter;
22534function replacePathSegmentSeparator(filepath, separator) {
22535 return filepath.split(/[\\/]/).join(separator);
22536}
22537exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
22538function joinPathSegments(a, b, separator) {
22539 if (a === '') {
22540 return b;
22541 }
22542 return a + separator + b;
22543}
22544exports.joinPathSegments = joinPathSegments;
22545
22546
22547/***/ }),
22548/* 120 */
22549/***/ (function(module, exports, __webpack_require__) {
22550
22551"use strict";
22552
22553Object.defineProperty(exports, "__esModule", { value: true });
22554const common = __webpack_require__(119);
22555class Reader {
22556 constructor(_root, _settings) {
22557 this._root = _root;
22558 this._settings = _settings;
22559 this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
22560 }
22561}
22562exports.default = Reader;
22563
22564
22565/***/ }),
22566/* 121 */
22567/***/ (function(module, exports, __webpack_require__) {
22568
22569"use strict";
22570
22571Object.defineProperty(exports, "__esModule", { value: true });
22572const stream_1 = __webpack_require__(96);
22573const async_1 = __webpack_require__(107);
22574class StreamProvider {
22575 constructor(_root, _settings) {
22576 this._root = _root;
22577 this._settings = _settings;
22578 this._reader = new async_1.default(this._root, this._settings);
22579 this._stream = new stream_1.Readable({
22580 objectMode: true,
22581 read: () => { },
22582 destroy: this._reader.destroy.bind(this._reader)
22583 });
22584 }
22585 read() {
22586 this._reader.onError((error) => {
22587 this._stream.emit('error', error);
22588 });
22589 this._reader.onEntry((entry) => {
22590 this._stream.push(entry);
22591 });
22592 this._reader.onEnd(() => {
22593 this._stream.push(null);
22594 });
22595 this._reader.read();
22596 return this._stream;
22597 }
22598}
22599exports.default = StreamProvider;
22600
22601
22602/***/ }),
22603/* 122 */
22604/***/ (function(module, exports, __webpack_require__) {
22605
22606"use strict";
22607
22608Object.defineProperty(exports, "__esModule", { value: true });
22609const sync_1 = __webpack_require__(123);
22610class SyncProvider {
22611 constructor(_root, _settings) {
22612 this._root = _root;
22613 this._settings = _settings;
22614 this._reader = new sync_1.default(this._root, this._settings);
22615 }
22616 read() {
22617 return this._reader.read();
22618 }
22619}
22620exports.default = SyncProvider;
22621
22622
22623/***/ }),
22624/* 123 */
22625/***/ (function(module, exports, __webpack_require__) {
22626
22627"use strict";
22628
22629Object.defineProperty(exports, "__esModule", { value: true });
22630const fsScandir = __webpack_require__(108);
22631const common = __webpack_require__(119);
22632const reader_1 = __webpack_require__(120);
22633class SyncReader extends reader_1.default {
22634 constructor() {
22635 super(...arguments);
22636 this._scandir = fsScandir.scandirSync;
22637 this._storage = new Set();
22638 this._queue = new Set();
22639 }
22640 read() {
22641 this._pushToQueue(this._root, this._settings.basePath);
22642 this._handleQueue();
22643 return [...this._storage];
22644 }
22645 _pushToQueue(directory, base) {
22646 this._queue.add({ directory, base });
22647 }
22648 _handleQueue() {
22649 for (const item of this._queue.values()) {
22650 this._handleDirectory(item.directory, item.base);
22651 }
22652 }
22653 _handleDirectory(directory, base) {
22654 try {
22655 const entries = this._scandir(directory, this._settings.fsScandirSettings);
22656 for (const entry of entries) {
22657 this._handleEntry(entry, base);
22658 }
22659 }
22660 catch (error) {
22661 this._handleError(error);
22662 }
22663 }
22664 _handleError(error) {
22665 if (!common.isFatalError(this._settings, error)) {
22666 return;
22667 }
22668 throw error;
22669 }
22670 _handleEntry(entry, base) {
22671 const fullpath = entry.path;
22672 if (base !== undefined) {
22673 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
22674 }
22675 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
22676 this._pushToStorage(entry);
22677 }
22678 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
22679 this._pushToQueue(fullpath, entry.path);
22680 }
22681 }
22682 _pushToStorage(entry) {
22683 this._storage.add(entry);
22684 }
22685}
22686exports.default = SyncReader;
22687
22688
22689/***/ }),
22690/* 124 */
22691/***/ (function(module, exports, __webpack_require__) {
22692
22693"use strict";
22694
22695Object.defineProperty(exports, "__esModule", { value: true });
22696const path = __webpack_require__(13);
22697const fsScandir = __webpack_require__(108);
22698class Settings {
22699 constructor(_options = {}) {
22700 this._options = _options;
22701 this.basePath = this._getValue(this._options.basePath, undefined);
22702 this.concurrency = this._getValue(this._options.concurrency, Infinity);
22703 this.deepFilter = this._getValue(this._options.deepFilter, null);
22704 this.entryFilter = this._getValue(this._options.entryFilter, null);
22705 this.errorFilter = this._getValue(this._options.errorFilter, null);
22706 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22707 this.fsScandirSettings = new fsScandir.Settings({
22708 followSymbolicLinks: this._options.followSymbolicLinks,
22709 fs: this._options.fs,
22710 pathSegmentSeparator: this._options.pathSegmentSeparator,
22711 stats: this._options.stats,
22712 throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
22713 });
22714 }
22715 _getValue(option, value) {
22716 return option === undefined ? value : option;
22717 }
22718}
22719exports.default = Settings;
22720
22721
22722/***/ }),
22723/* 125 */
22724/***/ (function(module, exports, __webpack_require__) {
22725
22726"use strict";
22727
22728Object.defineProperty(exports, "__esModule", { value: true });
22729const path = __webpack_require__(13);
22730const fsStat = __webpack_require__(100);
22731const utils = __webpack_require__(62);
22732class Reader {
22733 constructor(_settings) {
22734 this._settings = _settings;
22735 this._fsStatSettings = new fsStat.Settings({
22736 followSymbolicLink: this._settings.followSymbolicLinks,
22737 fs: this._settings.fs,
22738 throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
22739 });
22740 }
22741 _getFullEntryPath(filepath) {
22742 return path.resolve(this._settings.cwd, filepath);
22743 }
22744 _makeEntry(stats, pattern) {
22745 const entry = {
22746 name: pattern,
22747 path: pattern,
22748 dirent: utils.fs.createDirentFromStats(pattern, stats)
22749 };
22750 if (this._settings.stats) {
22751 entry.stats = stats;
22752 }
22753 return entry;
22754 }
22755 _isFatalError(error) {
22756 return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
22757 }
22758}
22759exports.default = Reader;
22760
22761
22762/***/ }),
22763/* 126 */
22764/***/ (function(module, exports, __webpack_require__) {
22765
22766"use strict";
22767
22768Object.defineProperty(exports, "__esModule", { value: true });
22769const path = __webpack_require__(13);
22770const deep_1 = __webpack_require__(127);
22771const entry_1 = __webpack_require__(130);
22772const error_1 = __webpack_require__(131);
22773const entry_2 = __webpack_require__(132);
22774class Provider {
22775 constructor(_settings) {
22776 this._settings = _settings;
22777 this.errorFilter = new error_1.default(this._settings);
22778 this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
22779 this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
22780 this.entryTransformer = new entry_2.default(this._settings);
22781 }
22782 _getRootDirectory(task) {
22783 return path.resolve(this._settings.cwd, task.base);
22784 }
22785 _getReaderOptions(task) {
22786 const basePath = task.base === '.' ? '' : task.base;
22787 return {
22788 basePath,
22789 pathSegmentSeparator: '/',
22790 concurrency: this._settings.concurrency,
22791 deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
22792 entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
22793 errorFilter: this.errorFilter.getFilter(),
22794 followSymbolicLinks: this._settings.followSymbolicLinks,
22795 fs: this._settings.fs,
22796 stats: this._settings.stats,
22797 throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
22798 transform: this.entryTransformer.getTransformer()
22799 };
22800 }
22801 _getMicromatchOptions() {
22802 return {
22803 dot: this._settings.dot,
22804 matchBase: this._settings.baseNameMatch,
22805 nobrace: !this._settings.braceExpansion,
22806 nocase: !this._settings.caseSensitiveMatch,
22807 noext: !this._settings.extglob,
22808 noglobstar: !this._settings.globstar,
22809 posix: true,
22810 strictSlashes: false
22811 };
22812 }
22813}
22814exports.default = Provider;
22815
22816
22817/***/ }),
22818/* 127 */
22819/***/ (function(module, exports, __webpack_require__) {
22820
22821"use strict";
22822
22823Object.defineProperty(exports, "__esModule", { value: true });
22824const utils = __webpack_require__(62);
22825const partial_1 = __webpack_require__(128);
22826class DeepFilter {
22827 constructor(_settings, _micromatchOptions) {
22828 this._settings = _settings;
22829 this._micromatchOptions = _micromatchOptions;
22830 }
22831 getFilter(basePath, positive, negative) {
22832 const matcher = this._getMatcher(positive);
22833 const negativeRe = this._getNegativePatternsRe(negative);
22834 return (entry) => this._filter(basePath, entry, matcher, negativeRe);
22835 }
22836 _getMatcher(patterns) {
22837 return new partial_1.default(patterns, this._settings, this._micromatchOptions);
22838 }
22839 _getNegativePatternsRe(patterns) {
22840 const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
22841 return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
22842 }
22843 _filter(basePath, entry, matcher, negativeRe) {
22844 if (this._isSkippedByDeep(basePath, entry.path)) {
22845 return false;
22846 }
22847 if (this._isSkippedSymbolicLink(entry)) {
22848 return false;
22849 }
22850 const filepath = utils.path.removeLeadingDotSegment(entry.path);
22851 if (this._isSkippedByPositivePatterns(filepath, matcher)) {
22852 return false;
22853 }
22854 return this._isSkippedByNegativePatterns(filepath, negativeRe);
22855 }
22856 _isSkippedByDeep(basePath, entryPath) {
22857 /**
22858 * Avoid unnecessary depth calculations when it doesn't matter.
22859 */
22860 if (this._settings.deep === Infinity) {
22861 return false;
22862 }
22863 return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;
22864 }
22865 _getEntryLevel(basePath, entryPath) {
22866 const entryPathDepth = entryPath.split('/').length;
22867 if (basePath === '') {
22868 return entryPathDepth;
22869 }
22870 const basePathDepth = basePath.split('/').length;
22871 return entryPathDepth - basePathDepth;
22872 }
22873 _isSkippedSymbolicLink(entry) {
22874 return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
22875 }
22876 _isSkippedByPositivePatterns(entryPath, matcher) {
22877 return !this._settings.baseNameMatch && !matcher.match(entryPath);
22878 }
22879 _isSkippedByNegativePatterns(entryPath, patternsRe) {
22880 return !utils.pattern.matchAny(entryPath, patternsRe);
22881 }
22882}
22883exports.default = DeepFilter;
22884
22885
22886/***/ }),
22887/* 128 */
22888/***/ (function(module, exports, __webpack_require__) {
22889
22890"use strict";
22891
22892Object.defineProperty(exports, "__esModule", { value: true });
22893const matcher_1 = __webpack_require__(129);
22894class PartialMatcher extends matcher_1.default {
22895 match(filepath) {
22896 const parts = filepath.split('/');
22897 const levels = parts.length;
22898 const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
22899 for (const pattern of patterns) {
22900 const section = pattern.sections[0];
22901 /**
22902 * In this case, the pattern has a globstar and we must read all directories unconditionally,
22903 * but only if the level has reached the end of the first group.
22904 *
22905 * fixtures/{a,b}/**
22906 * ^ true/false ^ always true
22907 */
22908 if (!pattern.complete && levels > section.length) {
22909 return true;
22910 }
22911 const match = parts.every((part, index) => {
22912 const segment = pattern.segments[index];
22913 if (segment.dynamic && segment.patternRe.test(part)) {
22914 return true;
22915 }
22916 if (!segment.dynamic && segment.pattern === part) {
22917 return true;
22918 }
22919 return false;
22920 });
22921 if (match) {
22922 return true;
22923 }
22924 }
22925 return false;
22926 }
22927}
22928exports.default = PartialMatcher;
22929
22930
22931/***/ }),
22932/* 129 */
22933/***/ (function(module, exports, __webpack_require__) {
22934
22935"use strict";
22936
22937Object.defineProperty(exports, "__esModule", { value: true });
22938const utils = __webpack_require__(62);
22939class Matcher {
22940 constructor(_patterns, _settings, _micromatchOptions) {
22941 this._patterns = _patterns;
22942 this._settings = _settings;
22943 this._micromatchOptions = _micromatchOptions;
22944 this._storage = [];
22945 this._fillStorage();
22946 }
22947 _fillStorage() {
22948 /**
22949 * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
22950 * So, before expand patterns with brace expansion into separated patterns.
22951 */
22952 const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
22953 for (const pattern of patterns) {
22954 const segments = this._getPatternSegments(pattern);
22955 const sections = this._splitSegmentsIntoSections(segments);
22956 this._storage.push({
22957 complete: sections.length <= 1,
22958 pattern,
22959 segments,
22960 sections
22961 });
22962 }
22963 }
22964 _getPatternSegments(pattern) {
22965 const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
22966 return parts.map((part) => {
22967 const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
22968 if (!dynamic) {
22969 return {
22970 dynamic: false,
22971 pattern: part
22972 };
22973 }
22974 return {
22975 dynamic: true,
22976 pattern: part,
22977 patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
22978 };
22979 });
22980 }
22981 _splitSegmentsIntoSections(segments) {
22982 return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
22983 }
22984}
22985exports.default = Matcher;
22986
22987
22988/***/ }),
22989/* 130 */
22990/***/ (function(module, exports, __webpack_require__) {
22991
22992"use strict";
22993
22994Object.defineProperty(exports, "__esModule", { value: true });
22995const utils = __webpack_require__(62);
22996class EntryFilter {
22997 constructor(_settings, _micromatchOptions) {
22998 this._settings = _settings;
22999 this._micromatchOptions = _micromatchOptions;
23000 this.index = new Map();
23001 }
23002 getFilter(positive, negative) {
23003 const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
23004 const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
23005 return (entry) => this._filter(entry, positiveRe, negativeRe);
23006 }
23007 _filter(entry, positiveRe, negativeRe) {
23008 if (this._settings.unique && this._isDuplicateEntry(entry)) {
23009 return false;
23010 }
23011 if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
23012 return false;
23013 }
23014 if (this._isSkippedByAbsoluteNegativePatterns(entry.path, negativeRe)) {
23015 return false;
23016 }
23017 const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
23018 const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
23019 if (this._settings.unique && isMatched) {
23020 this._createIndexRecord(entry);
23021 }
23022 return isMatched;
23023 }
23024 _isDuplicateEntry(entry) {
23025 return this.index.has(entry.path);
23026 }
23027 _createIndexRecord(entry) {
23028 this.index.set(entry.path, undefined);
23029 }
23030 _onlyFileFilter(entry) {
23031 return this._settings.onlyFiles && !entry.dirent.isFile();
23032 }
23033 _onlyDirectoryFilter(entry) {
23034 return this._settings.onlyDirectories && !entry.dirent.isDirectory();
23035 }
23036 _isSkippedByAbsoluteNegativePatterns(entryPath, patternsRe) {
23037 if (!this._settings.absolute) {
23038 return false;
23039 }
23040 const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
23041 return utils.pattern.matchAny(fullpath, patternsRe);
23042 }
23043 _isMatchToPatterns(entryPath, patternsRe) {
23044 const filepath = utils.path.removeLeadingDotSegment(entryPath);
23045 return utils.pattern.matchAny(filepath, patternsRe);
23046 }
23047}
23048exports.default = EntryFilter;
23049
23050
23051/***/ }),
23052/* 131 */
23053/***/ (function(module, exports, __webpack_require__) {
23054
23055"use strict";
23056
23057Object.defineProperty(exports, "__esModule", { value: true });
23058const utils = __webpack_require__(62);
23059class ErrorFilter {
23060 constructor(_settings) {
23061 this._settings = _settings;
23062 }
23063 getFilter() {
23064 return (error) => this._isNonFatalError(error);
23065 }
23066 _isNonFatalError(error) {
23067 return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
23068 }
23069}
23070exports.default = ErrorFilter;
23071
23072
23073/***/ }),
23074/* 132 */
23075/***/ (function(module, exports, __webpack_require__) {
23076
23077"use strict";
23078
23079Object.defineProperty(exports, "__esModule", { value: true });
23080const utils = __webpack_require__(62);
23081class EntryTransformer {
23082 constructor(_settings) {
23083 this._settings = _settings;
23084 }
23085 getTransformer() {
23086 return (entry) => this._transform(entry);
23087 }
23088 _transform(entry) {
23089 let filepath = entry.path;
23090 if (this._settings.absolute) {
23091 filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
23092 filepath = utils.path.unixify(filepath);
23093 }
23094 if (this._settings.markDirectories && entry.dirent.isDirectory()) {
23095 filepath += '/';
23096 }
23097 if (!this._settings.objectMode) {
23098 return filepath;
23099 }
23100 return Object.assign(Object.assign({}, entry), { path: filepath });
23101 }
23102}
23103exports.default = EntryTransformer;
23104
23105
23106/***/ }),
23107/* 133 */
23108/***/ (function(module, exports, __webpack_require__) {
23109
23110"use strict";
23111
23112Object.defineProperty(exports, "__esModule", { value: true });
23113const stream_1 = __webpack_require__(96);
23114const stream_2 = __webpack_require__(99);
23115const provider_1 = __webpack_require__(126);
23116class ProviderStream extends provider_1.default {
23117 constructor() {
23118 super(...arguments);
23119 this._reader = new stream_2.default(this._settings);
23120 }
23121 read(task) {
23122 const root = this._getRootDirectory(task);
23123 const options = this._getReaderOptions(task);
23124 const source = this.api(root, task, options);
23125 const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
23126 source
23127 .once('error', (error) => destination.emit('error', error))
23128 .on('data', (entry) => destination.emit('data', options.transform(entry)))
23129 .once('end', () => destination.emit('end'));
23130 destination
23131 .once('close', () => source.destroy());
23132 return destination;
23133 }
23134 api(root, task, options) {
23135 if (task.dynamic) {
23136 return this._reader.dynamic(root, options);
23137 }
23138 return this._reader.static(task.patterns, options);
23139 }
23140}
23141exports.default = ProviderStream;
23142
23143
23144/***/ }),
23145/* 134 */
23146/***/ (function(module, exports, __webpack_require__) {
23147
23148"use strict";
23149
23150Object.defineProperty(exports, "__esModule", { value: true });
23151const sync_1 = __webpack_require__(135);
23152const provider_1 = __webpack_require__(126);
23153class ProviderSync extends provider_1.default {
23154 constructor() {
23155 super(...arguments);
23156 this._reader = new sync_1.default(this._settings);
23157 }
23158 read(task) {
23159 const root = this._getRootDirectory(task);
23160 const options = this._getReaderOptions(task);
23161 const entries = this.api(root, task, options);
23162 return entries.map(options.transform);
23163 }
23164 api(root, task, options) {
23165 if (task.dynamic) {
23166 return this._reader.dynamic(root, options);
23167 }
23168 return this._reader.static(task.patterns, options);
23169 }
23170}
23171exports.default = ProviderSync;
23172
23173
23174/***/ }),
23175/* 135 */
23176/***/ (function(module, exports, __webpack_require__) {
23177
23178"use strict";
23179
23180Object.defineProperty(exports, "__esModule", { value: true });
23181const fsStat = __webpack_require__(100);
23182const fsWalk = __webpack_require__(105);
23183const reader_1 = __webpack_require__(125);
23184class ReaderSync extends reader_1.default {
23185 constructor() {
23186 super(...arguments);
23187 this._walkSync = fsWalk.walkSync;
23188 this._statSync = fsStat.statSync;
23189 }
23190 dynamic(root, options) {
23191 return this._walkSync(root, options);
23192 }
23193 static(patterns, options) {
23194 const entries = [];
23195 for (const pattern of patterns) {
23196 const filepath = this._getFullEntryPath(pattern);
23197 const entry = this._getEntry(filepath, pattern, options);
23198 if (entry === null || !options.entryFilter(entry)) {
23199 continue;
23200 }
23201 entries.push(entry);
23202 }
23203 return entries;
23204 }
23205 _getEntry(filepath, pattern, options) {
23206 try {
23207 const stats = this._getStat(filepath);
23208 return this._makeEntry(stats, pattern);
23209 }
23210 catch (error) {
23211 if (options.errorFilter(error)) {
23212 return null;
23213 }
23214 throw error;
23215 }
23216 }
23217 _getStat(filepath) {
23218 return this._statSync(filepath, this._fsStatSettings);
23219 }
23220}
23221exports.default = ReaderSync;
23222
23223
23224/***/ }),
23225/* 136 */
23226/***/ (function(module, exports, __webpack_require__) {
23227
23228"use strict";
23229
23230Object.defineProperty(exports, "__esModule", { value: true });
23231exports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;
23232const fs = __webpack_require__(40);
23233const os = __webpack_require__(14);
23234const CPU_COUNT = os.cpus().length;
23235exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
23236 lstat: fs.lstat,
23237 lstatSync: fs.lstatSync,
23238 stat: fs.stat,
23239 statSync: fs.statSync,
23240 readdir: fs.readdir,
23241 readdirSync: fs.readdirSync
23242};
23243class Settings {
23244 constructor(_options = {}) {
23245 this._options = _options;
23246 this.absolute = this._getValue(this._options.absolute, false);
23247 this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
23248 this.braceExpansion = this._getValue(this._options.braceExpansion, true);
23249 this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
23250 this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
23251 this.cwd = this._getValue(this._options.cwd, process.cwd());
23252 this.deep = this._getValue(this._options.deep, Infinity);
23253 this.dot = this._getValue(this._options.dot, false);
23254 this.extglob = this._getValue(this._options.extglob, true);
23255 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
23256 this.fs = this._getFileSystemMethods(this._options.fs);
23257 this.globstar = this._getValue(this._options.globstar, true);
23258 this.ignore = this._getValue(this._options.ignore, []);
23259 this.markDirectories = this._getValue(this._options.markDirectories, false);
23260 this.objectMode = this._getValue(this._options.objectMode, false);
23261 this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
23262 this.onlyFiles = this._getValue(this._options.onlyFiles, true);
23263 this.stats = this._getValue(this._options.stats, false);
23264 this.suppressErrors = this._getValue(this._options.suppressErrors, false);
23265 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
23266 this.unique = this._getValue(this._options.unique, true);
23267 if (this.onlyDirectories) {
23268 this.onlyFiles = false;
23269 }
23270 if (this.stats) {
23271 this.objectMode = true;
23272 }
23273 }
23274 _getValue(option, value) {
23275 return option === undefined ? value : option;
23276 }
23277 _getFileSystemMethods(methods = {}) {
23278 return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
23279 }
23280}
23281exports.default = Settings;
23282
23283
23284/***/ }),
23285/* 137 */
23286/***/ (function(module, exports, __webpack_require__) {
23287
23288"use strict";
23289
23290Object.defineProperty(exports, "__esModule", { value: true });
23291var connection_1 = __webpack_require__(138);
23292function default_1(name) {
23293 return {
23294 log: function (message) {
23295 connection_1.connection.console.log(name + ": " + message);
23296 },
23297 info: function (message) {
23298 connection_1.connection.console.info(name + ": " + message);
23299 },
23300 warn: function (message) {
23301 connection_1.connection.console.warn(name + ": " + message);
23302 },
23303 error: function (message) {
23304 connection_1.connection.console.error(name + ": " + message);
23305 },
23306 };
23307}
23308exports.default = default_1;
23309
23310
23311/***/ }),
23312/* 138 */
23313/***/ (function(module, exports, __webpack_require__) {
23314
23315"use strict";
23316
23317Object.defineProperty(exports, "__esModule", { value: true });
23318var vscode_languageserver_1 = __webpack_require__(2);
23319// create connection by command argv
23320exports.connection = vscode_languageserver_1.createConnection();
23321
23322
23323/***/ }),
23324/* 139 */
23325/***/ (function(module) {
23326
23327module.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()`\"]}}}");
23328
23329/***/ }),
23330/* 140 */
23331/***/ (function(module, exports, __webpack_require__) {
23332
23333"use strict";
23334
23335var __importDefault = (this && this.__importDefault) || function (mod) {
23336 return (mod && mod.__esModule) ? mod : { "default": mod };
23337};
23338Object.defineProperty(exports, "__esModule", { value: true });
23339var fuzzy_1 = __importDefault(__webpack_require__(141));
23340var providers = [];
23341function useProvider(p) {
23342 providers.push(p);
23343}
23344exports.useProvider = useProvider;
23345function getProvider() {
23346 return providers.reduce(function (pre, next) {
23347 return function (line, uri, position, word, invalidLength, items) {
23348 // 200 items is enough
23349 if (items.length > 200) {
23350 return items.slice(0, 200);
23351 }
23352 var newItems = next(line, uri, position)
23353 .filter(function (item) { return fuzzy_1.default(item.label, word) >= invalidLength; });
23354 return pre(line, uri, position, word, invalidLength, items.concat(newItems));
23355 };
23356 }, function (_line, _uri, _position, _word, _invalidLength, items) { return items; });
23357}
23358exports.getProvider = getProvider;
23359
23360
23361/***/ }),
23362/* 141 */
23363/***/ (function(module, exports, __webpack_require__) {
23364
23365"use strict";
23366
23367Object.defineProperty(exports, "__esModule", { value: true });
23368function fuzzy(origin, query) {
23369 var score = 0;
23370 for (var qIdx = 0, oIdx = 0; qIdx < query.length && oIdx < origin.length; qIdx++) {
23371 var qc = query.charAt(qIdx).toLowerCase();
23372 for (; oIdx < origin.length; oIdx++) {
23373 var oc = origin.charAt(oIdx).toLowerCase();
23374 if (qc === oc) {
23375 score++;
23376 oIdx++;
23377 break;
23378 }
23379 }
23380 }
23381 return score;
23382}
23383exports.default = fuzzy;
23384
23385
23386/***/ }),
23387/* 142 */
23388/***/ (function(module, exports, __webpack_require__) {
23389
23390"use strict";
23391
23392Object.defineProperty(exports, "__esModule", { value: true });
23393var patterns_1 = __webpack_require__(54);
23394var util_1 = __webpack_require__(46);
23395var builtin_1 = __webpack_require__(59);
23396var provider_1 = __webpack_require__(140);
23397function provider(line) {
23398 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, line)) {
23399 return builtin_1.builtinDocs.getPredefinedVimVariables();
23400 }
23401 return [];
23402}
23403provider_1.useProvider(provider);
23404
23405
23406/***/ }),
23407/* 143 */
23408/***/ (function(module, exports, __webpack_require__) {
23409
23410"use strict";
23411
23412Object.defineProperty(exports, "__esModule", { value: true });
23413var patterns_1 = __webpack_require__(54);
23414var builtin_1 = __webpack_require__(59);
23415var provider_1 = __webpack_require__(140);
23416function provider(line) {
23417 if (patterns_1.colorschemePattern.test(line)) {
23418 return builtin_1.builtinDocs.getColorschemes();
23419 }
23420 return [];
23421}
23422provider_1.useProvider(provider);
23423
23424
23425/***/ }),
23426/* 144 */
23427/***/ (function(module, exports, __webpack_require__) {
23428
23429"use strict";
23430
23431var __importDefault = (this && this.__importDefault) || function (mod) {
23432 return (mod && mod.__esModule) ? mod : { "default": mod };
23433};
23434Object.defineProperty(exports, "__esModule", { value: true });
23435var patterns_1 = __webpack_require__(54);
23436var util_1 = __webpack_require__(46);
23437var builtin_1 = __webpack_require__(59);
23438var config_1 = __importDefault(__webpack_require__(55));
23439var snippets_1 = __webpack_require__(145);
23440var provider_1 = __webpack_require__(140);
23441function provider(line) {
23442 if (util_1.isSomeMatchPattern(patterns_1.commandPattern, line)) {
23443 // only return snippets when snippetSupport is true
23444 if (config_1.default.snippetSupport) {
23445 return builtin_1.builtinDocs.getVimCommands().concat(snippets_1.commandSnippets);
23446 }
23447 return builtin_1.builtinDocs.getVimCommands();
23448 }
23449 return [];
23450}
23451provider_1.useProvider(provider);
23452
23453
23454/***/ }),
23455/* 145 */
23456/***/ (function(module, exports, __webpack_require__) {
23457
23458"use strict";
23459
23460var __assign = (this && this.__assign) || function () {
23461 __assign = Object.assign || function(t) {
23462 for (var s, i = 1, n = arguments.length; i < n; i++) {
23463 s = arguments[i];
23464 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23465 t[p] = s[p];
23466 }
23467 return t;
23468 };
23469 return __assign.apply(this, arguments);
23470};
23471Object.defineProperty(exports, "__esModule", { value: true });
23472var vscode_languageserver_1 = __webpack_require__(2);
23473var util_1 = __webpack_require__(46);
23474exports.commandSnippets = [
23475 {
23476 label: "func",
23477 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23478 insertText: [
23479 "function ${1:Name}(${2}) ${3:abort}",
23480 "\t${0}",
23481 "endfunction",
23482 ].join("\n"),
23483 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23484 },
23485 {
23486 label: "tryc",
23487 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23488 insertText: [
23489 "try",
23490 "\t${1}",
23491 "catch /.*/",
23492 "\t${0}",
23493 "endtry",
23494 ].join("\n"),
23495 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23496 },
23497 {
23498 label: "tryf",
23499 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23500 insertText: [
23501 "try",
23502 "\t${1}",
23503 "finally",
23504 "\t${0}",
23505 "endtry",
23506 ].join("\n"),
23507 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23508 },
23509 {
23510 label: "trycf",
23511 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23512 insertText: [
23513 "try",
23514 "\t${1}",
23515 "catch /.*/",
23516 "\t${2}",
23517 "finally",
23518 "\t${0}",
23519 "endtry",
23520 ].join("\n"),
23521 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23522 },
23523 {
23524 label: "aug",
23525 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23526 insertText: [
23527 "augroup ${1:Start}",
23528 "\tautocmd!",
23529 "\t${0}",
23530 "augroup END",
23531 ].join("\n"),
23532 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23533 },
23534 {
23535 label: "aut",
23536 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23537 insertText: [
23538 "autocmd ${1:group-event} ${2:pat} ${3:once} ${4:nested} ${5:cmd}",
23539 ].join("\n"),
23540 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23541 },
23542 {
23543 label: "if",
23544 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23545 insertText: [
23546 "if ${1:condition}",
23547 "\t${0}",
23548 "endif",
23549 ].join("\n"),
23550 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23551 },
23552 {
23553 label: "cmd",
23554 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23555 insertText: [
23556 "command! ${1:attr} ${2:cmd} ${3:rep} ${0}",
23557 ].join("\n"),
23558 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23559 },
23560 {
23561 label: "hi",
23562 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23563 insertText: [
23564 "highlight ${1:default} ${2:group-name} ${3:args} ${0}",
23565 ].join("\n"),
23566 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23567 },
23568].map(function (item) { return (__assign(__assign({}, item), { documentation: util_1.markupSnippets(item.insertText) })); });
23569
23570
23571/***/ }),
23572/* 146 */
23573/***/ (function(module, exports, __webpack_require__) {
23574
23575"use strict";
23576
23577var __assign = (this && this.__assign) || function () {
23578 __assign = Object.assign || function(t) {
23579 for (var s, i = 1, n = arguments.length; i < n; i++) {
23580 s = arguments[i];
23581 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23582 t[p] = s[p];
23583 }
23584 return t;
23585 };
23586 return __assign.apply(this, arguments);
23587};
23588Object.defineProperty(exports, "__esModule", { value: true });
23589var patterns_1 = __webpack_require__(54);
23590var builtin_1 = __webpack_require__(59);
23591var provider_1 = __webpack_require__(140);
23592function provider(line) {
23593 if (patterns_1.expandPattern[0].test(line)) {
23594 return builtin_1.builtinDocs.getExpandKeywords().map(function (item) {
23595 return __assign(__assign({}, item), { insertText: item.insertText.slice(1) });
23596 });
23597 }
23598 else if (patterns_1.expandPattern[1].test(line)) {
23599 return builtin_1.builtinDocs.getExpandKeywords();
23600 }
23601 return [];
23602}
23603provider_1.useProvider(provider);
23604
23605
23606/***/ }),
23607/* 147 */
23608/***/ (function(module, exports, __webpack_require__) {
23609
23610"use strict";
23611
23612var __assign = (this && this.__assign) || function () {
23613 __assign = Object.assign || function(t) {
23614 for (var s, i = 1, n = arguments.length; i < n; i++) {
23615 s = arguments[i];
23616 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23617 t[p] = s[p];
23618 }
23619 return t;
23620 };
23621 return __assign.apply(this, arguments);
23622};
23623var __importDefault = (this && this.__importDefault) || function (mod) {
23624 return (mod && mod.__esModule) ? mod : { "default": mod };
23625};
23626Object.defineProperty(exports, "__esModule", { value: true });
23627var patterns_1 = __webpack_require__(54);
23628var util_1 = __webpack_require__(46);
23629var builtin_1 = __webpack_require__(59);
23630var config_1 = __importDefault(__webpack_require__(55));
23631var workspaces_1 = __webpack_require__(148);
23632var provider_1 = __webpack_require__(140);
23633function provider(line, uri, position) {
23634 if (/\b(g:|s:|<SID>)\w*$/.test(line)) {
23635 var list = [];
23636 if (/\bg:\w*$/.test(line)) {
23637 list = workspaces_1.workspace.getFunctionItems(uri)
23638 .filter(function (item) { return /^g:/.test(item.label); });
23639 }
23640 else if (/\b(s:|<SID>)\w*$/i.test(line)) {
23641 list = workspaces_1.workspace.getFunctionItems(uri)
23642 .filter(function (item) { return /^s:/.test(item.label); });
23643 }
23644 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
23645 }
23646 else if (/\B:\w*$/.test(line)) {
23647 return workspaces_1.workspace.getFunctionItems(uri)
23648 .filter(function (item) { return /:/.test(item.label); })
23649 .map(function (item) {
23650 var m = line.match(/:[^:]*$/);
23651 return __assign(__assign({}, item), {
23652 // delete the `:` symbol
23653 textEdit: {
23654 range: {
23655 start: {
23656 line: position.line,
23657 character: line.length - m[0].length,
23658 },
23659 end: {
23660 line: position.line,
23661 character: line.length - m[0].length + 1,
23662 },
23663 },
23664 newText: item.insertText,
23665 } });
23666 });
23667 }
23668 else if (util_1.isSomeMatchPattern(patterns_1.notFunctionPattern, line)) {
23669 return [];
23670 }
23671 return workspaces_1.workspace.getFunctionItems(uri)
23672 .filter(function (item) {
23673 return !builtin_1.builtinDocs.isBuiltinFunction(item.label);
23674 })
23675 .concat(builtin_1.builtinDocs.getBuiltinVimFunctions());
23676}
23677provider_1.useProvider(provider);
23678
23679
23680/***/ }),
23681/* 148 */
23682/***/ (function(module, exports, __webpack_require__) {
23683
23684"use strict";
23685
23686var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
23687 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23688 return new (P || (P = Promise))(function (resolve, reject) {
23689 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
23690 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23691 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23692 step((generator = generator.apply(thisArg, _arguments || [])).next());
23693 });
23694};
23695var __generator = (this && this.__generator) || function (thisArg, body) {
23696 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23697 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23698 function verb(n) { return function (v) { return step([n, v]); }; }
23699 function step(op) {
23700 if (f) throw new TypeError("Generator is already executing.");
23701 while (_) try {
23702 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;
23703 if (y = 0, t) op = [op[0] & 2, t.value];
23704 switch (op[0]) {
23705 case 0: case 1: t = op; break;
23706 case 4: _.label++; return { value: op[1], done: false };
23707 case 5: _.label++; y = op[1]; op = [0]; continue;
23708 case 7: op = _.ops.pop(); _.trys.pop(); continue;
23709 default:
23710 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
23711 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
23712 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
23713 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
23714 if (t[2]) _.ops.pop();
23715 _.trys.pop(); continue;
23716 }
23717 op = body.call(thisArg, _);
23718 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
23719 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
23720 }
23721};
23722var __importDefault = (this && this.__importDefault) || function (mod) {
23723 return (mod && mod.__esModule) ? mod : { "default": mod };
23724};
23725Object.defineProperty(exports, "__esModule", { value: true });
23726var vscode_uri_1 = __webpack_require__(149);
23727var vscode_languageserver_1 = __webpack_require__(2);
23728var util_1 = __webpack_require__(46);
23729var buffer_1 = __webpack_require__(150);
23730var config_1 = __importDefault(__webpack_require__(55));
23731// import logger from '../common/logger';
23732// const log = logger('workspace')
23733var Workspace = /** @class */ (function () {
23734 function Workspace() {
23735 this.buffers = {};
23736 }
23737 Workspace.prototype.isExistsBuffer = function (uri) {
23738 if (this.buffers[uri]) {
23739 return true;
23740 }
23741 return false;
23742 };
23743 Workspace.prototype.updateBuffer = function (uri, node) {
23744 return __awaiter(this, void 0, void 0, function () {
23745 var projectRoot;
23746 return __generator(this, function (_a) {
23747 switch (_a.label) {
23748 case 0:
23749 if (!node) {
23750 return [2 /*return*/];
23751 }
23752 if (!this.buffers[uri]) return [3 /*break*/, 1];
23753 this.buffers[uri].updateBufferByNode(node);
23754 return [3 /*break*/, 3];
23755 case 1: return [4 /*yield*/, util_1.findProjectRoot(vscode_uri_1.URI.parse(uri).fsPath, config_1.default.indexes.projectRootPatterns)];
23756 case 2:
23757 projectRoot = _a.sent();
23758 if (config_1.default.vimruntime.trim() !== '' && projectRoot.indexOf(config_1.default.vimruntime) === 0) {
23759 projectRoot = config_1.default.vimruntime;
23760 }
23761 this.buffers[uri] = new buffer_1.Buffer(uri, projectRoot, node);
23762 _a.label = 3;
23763 case 3: return [2 /*return*/];
23764 }
23765 });
23766 });
23767 };
23768 Workspace.prototype.getBufferByUri = function (uri) {
23769 return this.buffers[uri];
23770 };
23771 Workspace.prototype.getFunctionItems = function (uri) {
23772 return this.getScriptFunctionItems(uri).concat(this.getGlobalFunctionItems(uri));
23773 };
23774 Workspace.prototype.getIdentifierItems = function (uri, line) {
23775 return this.getLocalIdentifierItems(uri, line)
23776 .concat(this.getGlobalIdentifierItems(uri));
23777 };
23778 Workspace.prototype.getLocations = function (name, uri, position, locationType) {
23779 var isFunArg = false;
23780 var res = [];
23781 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
23782 res = this.getGlobalLocation(name, uri, position, locationType);
23783 }
23784 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23785 // get function args references first
23786 res = this.getFunArgLocation(name, uri, position, locationType);
23787 if (res.length) {
23788 isFunArg = true;
23789 }
23790 else {
23791 res = this.getLocalLocation(name, uri, position, locationType);
23792 if (!res.length) {
23793 res = this.getGlobalLocation(name, uri, position, locationType);
23794 }
23795 }
23796 }
23797 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23798 var names = [name];
23799 if (/^<SID>/.test(name)) {
23800 names.push(name.replace(/^<SID>/, "s:"));
23801 }
23802 else {
23803 names.push(name.replace(/^s:/, "<SID>"));
23804 }
23805 res = this.getScriptLocation(names, uri, position, locationType);
23806 }
23807 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23808 res = this.getLocalLocation(name, uri, position, locationType);
23809 }
23810 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23811 res = this.getAIdentifierLocation(name, uri, position, locationType);
23812 }
23813 if (res.length) {
23814 res = res.sort(function (a, b) {
23815 if (a.range.start.line === b.range.start.line) {
23816 return a.range.start.character - b.range.start.character;
23817 }
23818 return a.range.start.line - b.range.start.line;
23819 });
23820 }
23821 return {
23822 isFunArg: isFunArg,
23823 locations: res,
23824 };
23825 };
23826 Workspace.prototype.getLocationsByUri = function (name, uri, position, locationType) {
23827 var isFunArg = false;
23828 var res = [];
23829 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
23830 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23831 }
23832 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23833 // get function args references first
23834 res = this.getFunArgLocation(name, uri, position, locationType);
23835 if (res.length) {
23836 isFunArg = true;
23837 }
23838 else {
23839 res = this.getLocalLocation(name, uri, position, locationType);
23840 if (!res.length) {
23841 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23842 }
23843 }
23844 }
23845 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23846 var names = [name];
23847 if (/^<SID>/.test(name)) {
23848 names.push(name.replace(/^<SID>/, "s:"));
23849 }
23850 else {
23851 names.push(name.replace(/^s:/, "<SID>"));
23852 }
23853 res = this.getScriptLocation(names, uri, position, locationType);
23854 }
23855 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23856 res = this.getLocalLocation(name, uri, position, locationType);
23857 }
23858 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23859 res = this.getAIdentifierLocation(name, uri, position, locationType);
23860 }
23861 if (res.length) {
23862 res = res.sort(function (a, b) {
23863 if (a.range.start.line === b.range.start.line) {
23864 return a.range.start.character - b.range.start.character;
23865 }
23866 return a.range.start.line - b.range.start.line;
23867 });
23868 }
23869 return {
23870 isFunArg: isFunArg,
23871 locations: res,
23872 };
23873 };
23874 Workspace.prototype.filterDuplicate = function (items) {
23875 var tmp = {};
23876 return items.reduce(function (res, next) {
23877 if (!tmp[next.label]) {
23878 tmp[next.label] = true;
23879 res.push(next);
23880 }
23881 return res;
23882 }, []);
23883 };
23884 Workspace.prototype.getGlobalFunctionItems = function (uri) {
23885 var buf = this.buffers[uri];
23886 if (!buf) {
23887 return [];
23888 }
23889 var buffers = config_1.default.suggest.fromRuntimepath
23890 ? Object.values(this.buffers)
23891 : Object.values(this.buffers).filter(function (b) {
23892 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23893 return true;
23894 }
23895 return b.isBelongToWorkdir(buf.getProjectRoot());
23896 });
23897 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23898 return res.concat(cur.getGlobalFunctionItems());
23899 }, []));
23900 };
23901 Workspace.prototype.getScriptFunctionItems = function (uri) {
23902 if (!this.buffers[uri]) {
23903 return [];
23904 }
23905 return this.buffers[uri].getScriptFunctionItems();
23906 };
23907 Workspace.prototype.getGlobalIdentifierItems = function (uri) {
23908 var buf = this.buffers[uri];
23909 if (!buf) {
23910 return [];
23911 }
23912 var buffers = config_1.default.suggest.fromRuntimepath
23913 ? Object.values(this.buffers)
23914 : Object.values(this.buffers).filter(function (b) {
23915 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23916 return true;
23917 }
23918 return b.isBelongToWorkdir(buf.getProjectRoot());
23919 });
23920 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23921 return res
23922 .concat(cur.getGlobalIdentifierItems())
23923 .concat(cur.getEnvItems());
23924 }, []));
23925 };
23926 Workspace.prototype.getLocalIdentifierItems = function (uri, line) {
23927 if (!this.buffers[uri]) {
23928 return [];
23929 }
23930 var buf = this.buffers[uri];
23931 return buf.getFunctionLocalIdentifierItems(line)
23932 .concat(buf.getLocalIdentifierItems());
23933 };
23934 Workspace.prototype.getLocation = function (uri, item) {
23935 return {
23936 uri: uri,
23937 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)),
23938 };
23939 };
23940 Workspace.prototype.getGlobalLocation = function (name,
23941 // tslint:disable-next-line: variable-name
23942 _uri,
23943 // tslint:disable-next-line: variable-name
23944 position, locationType) {
23945 var _this = this;
23946 return Object.keys(this.buffers).reduce(function (pre, uri) {
23947 return pre.concat(_this.getGlobalLocationByUri(name, uri, position, locationType));
23948 }, []);
23949 };
23950 Workspace.prototype.getGlobalLocationByUri = function (name,
23951 // tslint:disable-next-line: variable-name
23952 uri,
23953 // tslint:disable-next-line: variable-name
23954 _position, locationType) {
23955 var _this = this;
23956 var res = [];
23957 var tmp = [];
23958 var list = [];
23959 var globalFunctions = locationType === "definition"
23960 ? this.buffers[uri].getGlobalFunctions()
23961 : this.buffers[uri].getGlobalFunctionRefs();
23962 Object.keys(globalFunctions).forEach(function (fname) {
23963 if (fname === name) {
23964 res = res.concat(globalFunctions[fname].map(function (item) { return _this.getLocation(uri, item); }));
23965 }
23966 });
23967 var identifiers = locationType === "definition"
23968 ? this.buffers[uri].getGlobalIdentifiers()
23969 : this.buffers[uri].getGlobalIdentifierRefs();
23970 Object.keys(identifiers).forEach(function (fname) {
23971 if (fname === name) {
23972 tmp = tmp.concat(identifiers[fname].map(function (item) { return _this.getLocation(uri, item); }));
23973 }
23974 });
23975 // filter function local variables
23976 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23977 var glFunctions = this.buffers[uri].getGlobalFunctions();
23978 var scriptFunctions = this.buffers[uri].getScriptFunctions();
23979 var funList_1 = Object.values(glFunctions).concat(Object.values(scriptFunctions)).reduce(function (aur, fs) { return aur.concat(fs); }, []);
23980 tmp.forEach(function (l) {
23981 if (!funList_1.some(function (fun) {
23982 return fun.startLine - 1 < l.range.start.line && l.range.start.line < fun.endLine - 1;
23983 })) {
23984 list.push(l);
23985 }
23986 });
23987 }
23988 else {
23989 list = tmp;
23990 }
23991 res = res.concat(list);
23992 return res;
23993 };
23994 Workspace.prototype.getScriptLocation = function (names, uri,
23995 // tslint:disable-next-line: variable-name
23996 _position, locationType) {
23997 var _this = this;
23998 var res = [];
23999 if (!this.buffers[uri]) {
24000 return res;
24001 }
24002 var functions = locationType === "definition"
24003 ? this.buffers[uri].getScriptFunctions()
24004 : this.buffers[uri].getScriptFunctionRefs();
24005 Object.keys(functions).forEach(function (fname) {
24006 var idx = names.indexOf(fname);
24007 if (idx !== -1) {
24008 res = res.concat(functions[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
24009 }
24010 });
24011 var identifiers = locationType === "definition"
24012 ? this.buffers[uri].getLocalIdentifiers()
24013 : this.buffers[uri].getLocalIdentifierRefs();
24014 Object.keys(identifiers).forEach(function (fname) {
24015 var idx = names.indexOf(fname);
24016 if (idx !== -1) {
24017 res = res.concat(identifiers[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
24018 }
24019 });
24020 return res;
24021 };
24022 Workspace.prototype.getLocalLocation = function (name, uri, position, locationType) {
24023 var _this = this;
24024 var list = [];
24025 if (!this.buffers[uri]) {
24026 return list;
24027 }
24028 var vimLineNum = position.line + 1;
24029 var startLine = -1;
24030 var endLine = -1;
24031 // get function args completion items
24032 []
24033 .concat(Object
24034 .values(this.buffers[uri].getGlobalFunctions())
24035 .reduce(function (res, next) { return res.concat(next); }, []))
24036 .concat(Object
24037 .values(this.buffers[uri].getScriptFunctions())
24038 .reduce(function (res, next) { return res.concat(next); }, []))
24039 .forEach(function (fun) {
24040 if (fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
24041 startLine = fun.startLine;
24042 endLine = fun.endLine;
24043 }
24044 });
24045 if (startLine !== -1 && endLine !== -1) {
24046 var globalVariables_1 = locationType === "definition"
24047 ? this.buffers[uri].getGlobalIdentifiers()
24048 : this.buffers[uri].getGlobalIdentifierRefs();
24049 Object.keys(globalVariables_1).some(function (key) {
24050 if (key === name) {
24051 globalVariables_1[key].forEach(function (item) {
24052 if (startLine < item.startLine && item.startLine < endLine) {
24053 list.push(_this.getLocation(uri, item));
24054 }
24055 });
24056 return true;
24057 }
24058 return false;
24059 });
24060 var localVariables_1 = locationType === "definition"
24061 ? this.buffers[uri].getLocalIdentifiers()
24062 : this.buffers[uri].getLocalIdentifierRefs();
24063 Object.keys(localVariables_1).some(function (key) {
24064 if (key === name) {
24065 localVariables_1[key].forEach(function (item) {
24066 if (startLine < item.startLine && item.startLine < endLine) {
24067 list.push(_this.getLocation(uri, item));
24068 }
24069 });
24070 return true;
24071 }
24072 return false;
24073 });
24074 }
24075 return list;
24076 };
24077 Workspace.prototype.getAIdentifierLocation = function (name, uri, position, locationType) {
24078 var res = [];
24079 if (!this.buffers[uri]) {
24080 return res;
24081 }
24082 if (locationType === "definition") {
24083 var flist_1 = [];
24084 var globalFunctions_1 = this.buffers[uri].getGlobalFunctions();
24085 Object.keys(globalFunctions_1).forEach(function (fname) {
24086 globalFunctions_1[fname].forEach(function (item) {
24087 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24088 flist_1.push(item);
24089 }
24090 });
24091 });
24092 var scriptFunctions_1 = this.buffers[uri].getScriptFunctions();
24093 Object.keys(scriptFunctions_1).forEach(function (fname) {
24094 scriptFunctions_1[fname].forEach(function (item) {
24095 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24096 flist_1.push(item);
24097 }
24098 });
24099 });
24100 if (flist_1.length) {
24101 var n_1 = name.slice(2);
24102 return flist_1.filter(function (item) { return item.args && item.args.some(function (m) { return m.value === n_1; }); })
24103 .map(function (item) {
24104 var startLine = item.startLine - 1;
24105 var startCol = item.startCol - 1;
24106 var endCol = item.startCol - 1;
24107 item.args.some(function (arg) {
24108 if (arg.value === n_1) {
24109 startCol = arg.pos.col - 1;
24110 endCol = startCol + n_1.length;
24111 return true;
24112 }
24113 return false;
24114 });
24115 return {
24116 uri: uri,
24117 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24118 };
24119 });
24120 }
24121 }
24122 else {
24123 var flist_2 = [];
24124 var globalFunctions_2 = this.buffers[uri].getGlobalFunctions();
24125 Object.keys(globalFunctions_2).forEach(function (fname) {
24126 globalFunctions_2[fname].forEach(function (item) {
24127 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24128 flist_2.push(item);
24129 }
24130 });
24131 });
24132 var scriptFunctions_2 = this.buffers[uri].getScriptFunctions();
24133 Object.keys(scriptFunctions_2).forEach(function (fname) {
24134 scriptFunctions_2[fname].forEach(function (item) {
24135 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24136 flist_2.push(item);
24137 }
24138 });
24139 });
24140 if (flist_2.length) {
24141 var identifiers_1 = this.buffers[uri].getLocalIdentifierRefs();
24142 Object.keys(identifiers_1).forEach(function (key) {
24143 if (key === name) {
24144 identifiers_1[name].forEach(function (item) {
24145 flist_2.forEach(function (fitem) {
24146 if (fitem.startLine < item.startLine && item.startLine < fitem.endLine) {
24147 res.push({
24148 uri: uri,
24149 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)),
24150 });
24151 }
24152 });
24153 });
24154 }
24155 });
24156 }
24157 }
24158 return res;
24159 };
24160 Workspace.prototype.getFunArgLocation = function (name, uri, position, locationType) {
24161 var res = [];
24162 if (!this.buffers[uri]) {
24163 return res;
24164 }
24165 if (locationType === "references") {
24166 var globalFunctions = this.buffers[uri].getGlobalFunctions();
24167 var scriptFunctions = this.buffers[uri].getScriptFunctions();
24168 var startLine_1 = -1;
24169 var endLine_1 = -1;
24170 Object.values(globalFunctions).forEach(function (fitems) {
24171 fitems.forEach(function (fitem) {
24172 fitem.args.forEach(function (arg) {
24173 var pos = arg.pos;
24174 if (pos) {
24175 if (pos.lnum === position.line + 1 && arg.value === name) {
24176 startLine_1 = fitem.startLine;
24177 endLine_1 = fitem.endLine;
24178 }
24179 }
24180 });
24181 });
24182 });
24183 if (startLine_1 === -1 && endLine_1 === -1) {
24184 Object.values(scriptFunctions).forEach(function (fitems) {
24185 fitems.forEach(function (fitem) {
24186 fitem.args.forEach(function (arg) {
24187 var pos = arg.pos;
24188 if (pos) {
24189 if (pos.lnum === position.line + 1 && arg.value === name) {
24190 startLine_1 = fitem.startLine;
24191 endLine_1 = fitem.endLine;
24192 }
24193 }
24194 });
24195 });
24196 });
24197 }
24198 if (startLine_1 !== -1 && endLine_1 !== -1) {
24199 var identifiers_2 = this.buffers[uri].getLocalIdentifierRefs();
24200 Object.keys(identifiers_2).forEach(function (key) {
24201 if (key === "a:" + name) {
24202 identifiers_2[key].forEach(function (item) {
24203 if (startLine_1 < item.startLine && item.startLine < endLine_1) {
24204 res.push({
24205 uri: uri,
24206 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)),
24207 });
24208 }
24209 });
24210 }
24211 });
24212 }
24213 }
24214 else {
24215 var flist_3 = [];
24216 var globalFunctions_3 = this.buffers[uri].getGlobalFunctions();
24217 Object.keys(globalFunctions_3).forEach(function (fname) {
24218 globalFunctions_3[fname].forEach(function (item) {
24219 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24220 flist_3.push(item);
24221 }
24222 });
24223 });
24224 var scriptFunctions_3 = this.buffers[uri].getScriptFunctions();
24225 Object.keys(scriptFunctions_3).forEach(function (fname) {
24226 scriptFunctions_3[fname].forEach(function (item) {
24227 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24228 flist_3.push(item);
24229 }
24230 });
24231 });
24232 if (flist_3.length) {
24233 return flist_3.filter(function (item) { return item.args && item.args.some(function (n) { return n.value === name; }); })
24234 .map(function (item) {
24235 var startLine = item.startLine - 1;
24236 var startCol = item.startCol - 1;
24237 var endCol = item.startCol - 1;
24238 item.args.some(function (arg) {
24239 if (arg.value === name) {
24240 startCol = arg.pos.col - 1;
24241 endCol = startCol + name.length;
24242 return true;
24243 }
24244 return false;
24245 });
24246 return {
24247 uri: uri,
24248 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24249 };
24250 });
24251 }
24252 }
24253 return res;
24254 };
24255 return Workspace;
24256}());
24257exports.Workspace = Workspace;
24258exports.workspace = new Workspace();
24259
24260
24261/***/ }),
24262/* 149 */
24263/***/ (function(module, __webpack_exports__, __webpack_require__) {
24264
24265"use strict";
24266__webpack_require__.r(__webpack_exports__);
24267/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "URI", function() { return URI; });
24268/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uriToFsPath", function() { return uriToFsPath; });
24269/*---------------------------------------------------------------------------------------------
24270 * Copyright (c) Microsoft Corporation. All rights reserved.
24271 * Licensed under the MIT License. See License.txt in the project root for license information.
24272 *--------------------------------------------------------------------------------------------*/
24273
24274var __extends = (undefined && undefined.__extends) || (function () {
24275 var extendStatics = function (d, b) {
24276 extendStatics = Object.setPrototypeOf ||
24277 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
24278 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
24279 return extendStatics(d, b);
24280 };
24281 return function (d, b) {
24282 extendStatics(d, b);
24283 function __() { this.constructor = d; }
24284 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24285 };
24286})();
24287var _a;
24288var isWindows;
24289if (typeof process === 'object') {
24290 isWindows = process.platform === 'win32';
24291}
24292else if (typeof navigator === 'object') {
24293 var userAgent = navigator.userAgent;
24294 isWindows = userAgent.indexOf('Windows') >= 0;
24295}
24296function isHighSurrogate(charCode) {
24297 return (0xD800 <= charCode && charCode <= 0xDBFF);
24298}
24299function isLowSurrogate(charCode) {
24300 return (0xDC00 <= charCode && charCode <= 0xDFFF);
24301}
24302function isLowerAsciiHex(code) {
24303 return code >= 97 /* a */ && code <= 102 /* f */;
24304}
24305function isLowerAsciiLetter(code) {
24306 return code >= 97 /* a */ && code <= 122 /* z */;
24307}
24308function isUpperAsciiLetter(code) {
24309 return code >= 65 /* A */ && code <= 90 /* Z */;
24310}
24311function isAsciiLetter(code) {
24312 return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);
24313}
24314//#endregion
24315var _schemePattern = /^\w[\w\d+.-]*$/;
24316var _singleSlashStart = /^\//;
24317var _doubleSlashStart = /^\/\//;
24318function _validateUri(ret, _strict) {
24319 // scheme, must be set
24320 if (!ret.scheme && _strict) {
24321 throw new Error("[UriError]: Scheme is missing: {scheme: \"\", authority: \"" + ret.authority + "\", path: \"" + ret.path + "\", query: \"" + ret.query + "\", fragment: \"" + ret.fragment + "\"}");
24322 }
24323 // scheme, https://tools.ietf.org/html/rfc3986#section-3.1
24324 // ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
24325 if (ret.scheme && !_schemePattern.test(ret.scheme)) {
24326 throw new Error('[UriError]: Scheme contains illegal characters.');
24327 }
24328 // path, http://tools.ietf.org/html/rfc3986#section-3.3
24329 // If a URI contains an authority component, then the path component
24330 // must either be empty or begin with a slash ("/") character. If a URI
24331 // does not contain an authority component, then the path cannot begin
24332 // with two slash characters ("//").
24333 if (ret.path) {
24334 if (ret.authority) {
24335 if (!_singleSlashStart.test(ret.path)) {
24336 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');
24337 }
24338 }
24339 else {
24340 if (_doubleSlashStart.test(ret.path)) {
24341 throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
24342 }
24343 }
24344 }
24345}
24346// for a while we allowed uris *without* schemes and this is the migration
24347// for them, e.g. an uri without scheme and without strict-mode warns and falls
24348// back to the file-scheme. that should cause the least carnage and still be a
24349// clear warning
24350function _schemeFix(scheme, _strict) {
24351 if (!scheme && !_strict) {
24352 return 'file';
24353 }
24354 return scheme;
24355}
24356// implements a bit of https://tools.ietf.org/html/rfc3986#section-5
24357function _referenceResolution(scheme, path) {
24358 // the slash-character is our 'default base' as we don't
24359 // support constructing URIs relative to other URIs. This
24360 // also means that we alter and potentially break paths.
24361 // see https://tools.ietf.org/html/rfc3986#section-5.1.4
24362 switch (scheme) {
24363 case 'https':
24364 case 'http':
24365 case 'file':
24366 if (!path) {
24367 path = _slash;
24368 }
24369 else if (path[0] !== _slash) {
24370 path = _slash + path;
24371 }
24372 break;
24373 }
24374 return path;
24375}
24376var _empty = '';
24377var _slash = '/';
24378var _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
24379/**
24380 * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
24381 * This class is a simple parser which creates the basic component parts
24382 * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
24383 * and encoding.
24384 *
24385 * ```txt
24386 * foo://example.com:8042/over/there?name=ferret#nose
24387 * \_/ \______________/\_________/ \_________/ \__/
24388 * | | | | |
24389 * scheme authority path query fragment
24390 * | _____________________|__
24391 * / \ / \
24392 * urn:example:animal:ferret:nose
24393 * ```
24394 */
24395var URI = /** @class */ (function () {
24396 /**
24397 * @internal
24398 */
24399 function URI(schemeOrData, authority, path, query, fragment, _strict) {
24400 if (_strict === void 0) { _strict = false; }
24401 if (typeof schemeOrData === 'object') {
24402 this.scheme = schemeOrData.scheme || _empty;
24403 this.authority = schemeOrData.authority || _empty;
24404 this.path = schemeOrData.path || _empty;
24405 this.query = schemeOrData.query || _empty;
24406 this.fragment = schemeOrData.fragment || _empty;
24407 // no validation because it's this URI
24408 // that creates uri components.
24409 // _validateUri(this);
24410 }
24411 else {
24412 this.scheme = _schemeFix(schemeOrData, _strict);
24413 this.authority = authority || _empty;
24414 this.path = _referenceResolution(this.scheme, path || _empty);
24415 this.query = query || _empty;
24416 this.fragment = fragment || _empty;
24417 _validateUri(this, _strict);
24418 }
24419 }
24420 URI.isUri = function (thing) {
24421 if (thing instanceof URI) {
24422 return true;
24423 }
24424 if (!thing) {
24425 return false;
24426 }
24427 return typeof thing.authority === 'string'
24428 && typeof thing.fragment === 'string'
24429 && typeof thing.path === 'string'
24430 && typeof thing.query === 'string'
24431 && typeof thing.scheme === 'string'
24432 && typeof thing.fsPath === 'function'
24433 && typeof thing.with === 'function'
24434 && typeof thing.toString === 'function';
24435 };
24436 Object.defineProperty(URI.prototype, "fsPath", {
24437 // ---- filesystem path -----------------------
24438 /**
24439 * Returns a string representing the corresponding file system path of this URI.
24440 * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
24441 * platform specific path separator.
24442 *
24443 * * Will *not* validate the path for invalid characters and semantics.
24444 * * Will *not* look at the scheme of this URI.
24445 * * The result shall *not* be used for display purposes but for accessing a file on disk.
24446 *
24447 *
24448 * The *difference* to `URI#path` is the use of the platform specific separator and the handling
24449 * of UNC paths. See the below sample of a file-uri with an authority (UNC path).
24450 *
24451 * ```ts
24452 const u = URI.parse('file://server/c$/folder/file.txt')
24453 u.authority === 'server'
24454 u.path === '/shares/c$/file.txt'
24455 u.fsPath === '\\server\c$\folder\file.txt'
24456 ```
24457 *
24458 * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
24459 * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
24460 * with URIs that represent files on disk (`file` scheme).
24461 */
24462 get: function () {
24463 // if (this.scheme !== 'file') {
24464 // console.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);
24465 // }
24466 return uriToFsPath(this, false);
24467 },
24468 enumerable: true,
24469 configurable: true
24470 });
24471 // ---- modify to new -------------------------
24472 URI.prototype.with = function (change) {
24473 if (!change) {
24474 return this;
24475 }
24476 var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;
24477 if (scheme === undefined) {
24478 scheme = this.scheme;
24479 }
24480 else if (scheme === null) {
24481 scheme = _empty;
24482 }
24483 if (authority === undefined) {
24484 authority = this.authority;
24485 }
24486 else if (authority === null) {
24487 authority = _empty;
24488 }
24489 if (path === undefined) {
24490 path = this.path;
24491 }
24492 else if (path === null) {
24493 path = _empty;
24494 }
24495 if (query === undefined) {
24496 query = this.query;
24497 }
24498 else if (query === null) {
24499 query = _empty;
24500 }
24501 if (fragment === undefined) {
24502 fragment = this.fragment;
24503 }
24504 else if (fragment === null) {
24505 fragment = _empty;
24506 }
24507 if (scheme === this.scheme
24508 && authority === this.authority
24509 && path === this.path
24510 && query === this.query
24511 && fragment === this.fragment) {
24512 return this;
24513 }
24514 return new _URI(scheme, authority, path, query, fragment);
24515 };
24516 // ---- parse & validate ------------------------
24517 /**
24518 * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
24519 * `file:///usr/home`, or `scheme:with/path`.
24520 *
24521 * @param value A string which represents an URI (see `URI#toString`).
24522 */
24523 URI.parse = function (value, _strict) {
24524 if (_strict === void 0) { _strict = false; }
24525 var match = _regexp.exec(value);
24526 if (!match) {
24527 return new _URI(_empty, _empty, _empty, _empty, _empty);
24528 }
24529 return new _URI(match[2] || _empty, percentDecode(match[4] || _empty), percentDecode(match[5] || _empty), percentDecode(match[7] || _empty), percentDecode(match[9] || _empty), _strict);
24530 };
24531 /**
24532 * Creates a new URI from a file system path, e.g. `c:\my\files`,
24533 * `/usr/home`, or `\\server\share\some\path`.
24534 *
24535 * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
24536 * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
24537 * `URI.parse('file://' + path)` because the path might contain characters that are
24538 * interpreted (# and ?). See the following sample:
24539 * ```ts
24540 const good = URI.file('/coding/c#/project1');
24541 good.scheme === 'file';
24542 good.path === '/coding/c#/project1';
24543 good.fragment === '';
24544 const bad = URI.parse('file://' + '/coding/c#/project1');
24545 bad.scheme === 'file';
24546 bad.path === '/coding/c'; // path is now broken
24547 bad.fragment === '/project1';
24548 ```
24549 *
24550 * @param path A file system path (see `URI#fsPath`)
24551 */
24552 URI.file = function (path) {
24553 var authority = _empty;
24554 // normalize to fwd-slashes on windows,
24555 // on other systems bwd-slashes are valid
24556 // filename character, eg /f\oo/ba\r.txt
24557 if (isWindows) {
24558 path = path.replace(/\\/g, _slash);
24559 }
24560 // check for authority as used in UNC shares
24561 // or use the path as given
24562 if (path[0] === _slash && path[1] === _slash) {
24563 var idx = path.indexOf(_slash, 2);
24564 if (idx === -1) {
24565 authority = path.substring(2);
24566 path = _slash;
24567 }
24568 else {
24569 authority = path.substring(2, idx);
24570 path = path.substring(idx) || _slash;
24571 }
24572 }
24573 return new _URI('file', authority, path, _empty, _empty);
24574 };
24575 URI.from = function (components) {
24576 return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);
24577 };
24578 // /**
24579 // * Join a URI path with path fragments and normalizes the resulting path.
24580 // *
24581 // * @param uri The input URI.
24582 // * @param pathFragment The path fragment to add to the URI path.
24583 // * @returns The resulting URI.
24584 // */
24585 // static joinPath(uri: URI, ...pathFragment: string[]): URI {
24586 // if (!uri.path) {
24587 // throw new Error(`[UriError]: cannot call joinPaths on URI without path`);
24588 // }
24589 // let newPath: string;
24590 // if (isWindows && uri.scheme === 'file') {
24591 // newPath = URI.file(paths.win32.join(uriToFsPath(uri, true), ...pathFragment)).path;
24592 // } else {
24593 // newPath = paths.posix.join(uri.path, ...pathFragment);
24594 // }
24595 // return uri.with({ path: newPath });
24596 // }
24597 // ---- printing/externalize ---------------------------
24598 /**
24599 * Creates a string representation for this URI. It's guaranteed that calling
24600 * `URI.parse` with the result of this function creates an URI which is equal
24601 * to this URI.
24602 *
24603 * * The result shall *not* be used for display purposes but for externalization or transport.
24604 * * The result will be encoded using the percentage encoding and encoding happens mostly
24605 * ignore the scheme-specific encoding rules.
24606 *
24607 * @param skipEncoding Do not encode the result, default is `false`
24608 */
24609 URI.prototype.toString = function (skipEncoding) {
24610 if (skipEncoding === void 0) { skipEncoding = false; }
24611 return _asFormatted(this, skipEncoding);
24612 };
24613 URI.prototype.toJSON = function () {
24614 return this;
24615 };
24616 URI.revive = function (data) {
24617 if (!data) {
24618 return data;
24619 }
24620 else if (data instanceof URI) {
24621 return data;
24622 }
24623 else {
24624 var result = new _URI(data);
24625 result._formatted = data.external;
24626 result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;
24627 return result;
24628 }
24629 };
24630 return URI;
24631}());
24632
24633var _pathSepMarker = isWindows ? 1 : undefined;
24634// eslint-disable-next-line @typescript-eslint/class-name-casing
24635var _URI = /** @class */ (function (_super) {
24636 __extends(_URI, _super);
24637 function _URI() {
24638 var _this = _super !== null && _super.apply(this, arguments) || this;
24639 _this._formatted = null;
24640 _this._fsPath = null;
24641 return _this;
24642 }
24643 Object.defineProperty(_URI.prototype, "fsPath", {
24644 get: function () {
24645 if (!this._fsPath) {
24646 this._fsPath = uriToFsPath(this, false);
24647 }
24648 return this._fsPath;
24649 },
24650 enumerable: true,
24651 configurable: true
24652 });
24653 _URI.prototype.toString = function (skipEncoding) {
24654 if (skipEncoding === void 0) { skipEncoding = false; }
24655 if (!skipEncoding) {
24656 if (!this._formatted) {
24657 this._formatted = _asFormatted(this, false);
24658 }
24659 return this._formatted;
24660 }
24661 else {
24662 // we don't cache that
24663 return _asFormatted(this, true);
24664 }
24665 };
24666 _URI.prototype.toJSON = function () {
24667 var res = {
24668 $mid: 1
24669 };
24670 // cached state
24671 if (this._fsPath) {
24672 res.fsPath = this._fsPath;
24673 res._sep = _pathSepMarker;
24674 }
24675 if (this._formatted) {
24676 res.external = this._formatted;
24677 }
24678 // uri components
24679 if (this.path) {
24680 res.path = this.path;
24681 }
24682 if (this.scheme) {
24683 res.scheme = this.scheme;
24684 }
24685 if (this.authority) {
24686 res.authority = this.authority;
24687 }
24688 if (this.query) {
24689 res.query = this.query;
24690 }
24691 if (this.fragment) {
24692 res.fragment = this.fragment;
24693 }
24694 return res;
24695 };
24696 return _URI;
24697}(URI));
24698// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2
24699var encodeTable = (_a = {},
24700 _a[58 /* Colon */] = '%3A',
24701 _a[47 /* Slash */] = '%2F',
24702 _a[63 /* QuestionMark */] = '%3F',
24703 _a[35 /* Hash */] = '%23',
24704 _a[91 /* OpenSquareBracket */] = '%5B',
24705 _a[93 /* CloseSquareBracket */] = '%5D',
24706 _a[64 /* AtSign */] = '%40',
24707 _a[33 /* ExclamationMark */] = '%21',
24708 _a[36 /* DollarSign */] = '%24',
24709 _a[38 /* Ampersand */] = '%26',
24710 _a[39 /* SingleQuote */] = '%27',
24711 _a[40 /* OpenParen */] = '%28',
24712 _a[41 /* CloseParen */] = '%29',
24713 _a[42 /* Asterisk */] = '%2A',
24714 _a[43 /* Plus */] = '%2B',
24715 _a[44 /* Comma */] = '%2C',
24716 _a[59 /* Semicolon */] = '%3B',
24717 _a[61 /* Equals */] = '%3D',
24718 _a[32 /* Space */] = '%20',
24719 _a);
24720function encodeURIComponentFast(uriComponent, allowSlash) {
24721 var res = undefined;
24722 var nativeEncodePos = -1;
24723 for (var pos = 0; pos < uriComponent.length; pos++) {
24724 var code = uriComponent.charCodeAt(pos);
24725 // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3
24726 if ((code >= 97 /* a */ && code <= 122 /* z */)
24727 || (code >= 65 /* A */ && code <= 90 /* Z */)
24728 || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)
24729 || code === 45 /* Dash */
24730 || code === 46 /* Period */
24731 || code === 95 /* Underline */
24732 || code === 126 /* Tilde */
24733 || (allowSlash && code === 47 /* Slash */)) {
24734 // check if we are delaying native encode
24735 if (nativeEncodePos !== -1) {
24736 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
24737 nativeEncodePos = -1;
24738 }
24739 // check if we write into a new string (by default we try to return the param)
24740 if (res !== undefined) {
24741 res += uriComponent.charAt(pos);
24742 }
24743 }
24744 else {
24745 // encoding needed, we need to allocate a new string
24746 if (res === undefined) {
24747 res = uriComponent.substr(0, pos);
24748 }
24749 // check with default table first
24750 var escaped = encodeTable[code];
24751 if (escaped !== undefined) {
24752 // check if we are delaying native encode
24753 if (nativeEncodePos !== -1) {
24754 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
24755 nativeEncodePos = -1;
24756 }
24757 // append escaped variant to result
24758 res += escaped;
24759 }
24760 else if (nativeEncodePos === -1) {
24761 // use native encode only when needed
24762 nativeEncodePos = pos;
24763 }
24764 }
24765 }
24766 if (nativeEncodePos !== -1) {
24767 res += encodeURIComponent(uriComponent.substring(nativeEncodePos));
24768 }
24769 return res !== undefined ? res : uriComponent;
24770}
24771function encodeURIComponentMinimal(path) {
24772 var res = undefined;
24773 for (var pos = 0; pos < path.length; pos++) {
24774 var code = path.charCodeAt(pos);
24775 if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {
24776 if (res === undefined) {
24777 res = path.substr(0, pos);
24778 }
24779 res += encodeTable[code];
24780 }
24781 else {
24782 if (res !== undefined) {
24783 res += path[pos];
24784 }
24785 }
24786 }
24787 return res !== undefined ? res : path;
24788}
24789/**
24790 * Compute `fsPath` for the given uri
24791 */
24792function uriToFsPath(uri, keepDriveLetterCasing) {
24793 var value;
24794 if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {
24795 // unc path: file://shares/c$/far/boo
24796 value = "//" + uri.authority + uri.path;
24797 }
24798 else if (uri.path.charCodeAt(0) === 47 /* Slash */
24799 && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)
24800 && uri.path.charCodeAt(2) === 58 /* Colon */) {
24801 if (!keepDriveLetterCasing) {
24802 // windows drive letter: file:///c:/far/boo
24803 value = uri.path[1].toLowerCase() + uri.path.substr(2);
24804 }
24805 else {
24806 value = uri.path.substr(1);
24807 }
24808 }
24809 else {
24810 // other path
24811 value = uri.path;
24812 }
24813 if (isWindows) {
24814 value = value.replace(/\//g, '\\');
24815 }
24816 return value;
24817}
24818/**
24819 * Create the external version of a uri
24820 */
24821function _asFormatted(uri, skipEncoding) {
24822 var encoder = !skipEncoding
24823 ? encodeURIComponentFast
24824 : encodeURIComponentMinimal;
24825 var res = '';
24826 var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;
24827 if (scheme) {
24828 res += scheme;
24829 res += ':';
24830 }
24831 if (authority || scheme === 'file') {
24832 res += _slash;
24833 res += _slash;
24834 }
24835 if (authority) {
24836 var idx = authority.indexOf('@');
24837 if (idx !== -1) {
24838 // <user>@<auth>
24839 var userinfo = authority.substr(0, idx);
24840 authority = authority.substr(idx + 1);
24841 idx = userinfo.indexOf(':');
24842 if (idx === -1) {
24843 res += encoder(userinfo, false);
24844 }
24845 else {
24846 // <user>:<pass>@<auth>
24847 res += encoder(userinfo.substr(0, idx), false);
24848 res += ':';
24849 res += encoder(userinfo.substr(idx + 1), false);
24850 }
24851 res += '@';
24852 }
24853 authority = authority.toLowerCase();
24854 idx = authority.indexOf(':');
24855 if (idx === -1) {
24856 res += encoder(authority, false);
24857 }
24858 else {
24859 // <auth>:<port>
24860 res += encoder(authority.substr(0, idx), false);
24861 res += authority.substr(idx);
24862 }
24863 }
24864 if (path) {
24865 // lower-case windows drive letters in /C:/fff or C:/fff
24866 if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {
24867 var code = path.charCodeAt(1);
24868 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24869 path = "/" + String.fromCharCode(code + 32) + ":" + path.substr(3); // "/c:".length === 3
24870 }
24871 }
24872 else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {
24873 var code = path.charCodeAt(0);
24874 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24875 path = String.fromCharCode(code + 32) + ":" + path.substr(2); // "/c:".length === 3
24876 }
24877 }
24878 // encode the rest of the path
24879 res += encoder(path, true);
24880 }
24881 if (query) {
24882 res += '?';
24883 res += encoder(query, false);
24884 }
24885 if (fragment) {
24886 res += '#';
24887 res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;
24888 }
24889 return res;
24890}
24891// --- decode
24892function decodeURIComponentGraceful(str) {
24893 try {
24894 return decodeURIComponent(str);
24895 }
24896 catch (_a) {
24897 if (str.length > 3) {
24898 return str.substr(0, 3) + decodeURIComponentGraceful(str.substr(3));
24899 }
24900 else {
24901 return str;
24902 }
24903 }
24904}
24905var _rEncodedAsHex = /(%[0-9A-Za-z][0-9A-Za-z])+/g;
24906function percentDecode(str) {
24907 if (!str.match(_rEncodedAsHex)) {
24908 return str;
24909 }
24910 return str.replace(_rEncodedAsHex, function (match) { return decodeURIComponentGraceful(match); });
24911}
24912
24913
24914/***/ }),
24915/* 150 */
24916/***/ (function(module, exports, __webpack_require__) {
24917
24918"use strict";
24919
24920var __importDefault = (this && this.__importDefault) || function (mod) {
24921 return (mod && mod.__esModule) ? mod : { "default": mod };
24922};
24923Object.defineProperty(exports, "__esModule", { value: true });
24924var vscode_languageserver_1 = __webpack_require__(2);
24925var constant_1 = __webpack_require__(44);
24926var logger_1 = __importDefault(__webpack_require__(137));
24927var log = logger_1.default("buffer");
24928var NODE_TOPLEVEL = 1;
24929var NODE_EXCMD = 3;
24930var NODE_FUNCTION = 4;
24931var NODE_DELFUNCTION = 6;
24932var NODE_RETURN = 7;
24933var NODE_EXCALL = 8;
24934var NODE_LET = 9;
24935var NODE_UNLET = 10;
24936var NODE_LOCKVAR = 11;
24937var NODE_UNLOCKVAR = 12;
24938var NODE_IF = 13;
24939var NODE_ELSEIF = 14;
24940var NODE_ELSE = 15;
24941var NODE_WHILE = 17;
24942var NODE_FOR = 19;
24943var NODE_TRY = 23;
24944var NODE_CATCH = 24;
24945var NODE_FINALLY = 25;
24946var NODE_THROW = 27;
24947var NODE_ECHO = 28;
24948var NODE_ECHON = 29;
24949var NODE_ECHOMSG = 31;
24950var NODE_ECHOERR = 32;
24951var NODE_EXECUTE = 33;
24952var NODE_TERNARY = 34;
24953var NODE_OR = 35;
24954var NODE_AND = 36;
24955var NODE_EQUAL = 37;
24956var NODE_EQUALCI = 38;
24957var NODE_EQUALCS = 39;
24958var NODE_NEQUAL = 40;
24959var NODE_NEQUALCI = 41;
24960var NODE_NEQUALCS = 42;
24961var NODE_GREATER = 43;
24962var NODE_GREATERCI = 44;
24963var NODE_GREATERCS = 45;
24964var NODE_GEQUAL = 46;
24965var NODE_GEQUALCI = 47;
24966var NODE_GEQUALCS = 48;
24967var NODE_SMALLER = 49;
24968var NODE_SMALLERCI = 50;
24969var NODE_SMALLERCS = 51;
24970var NODE_SEQUAL = 52;
24971var NODE_SEQUALCI = 53;
24972var NODE_SEQUALCS = 54;
24973var NODE_MATCH = 55;
24974var NODE_MATCHCI = 56;
24975var NODE_MATCHCS = 57;
24976var NODE_NOMATCH = 58;
24977var NODE_NOMATCHCI = 59;
24978var NODE_NOMATCHCS = 60;
24979var NODE_IS = 61;
24980var NODE_ISCI = 62;
24981var NODE_ISCS = 63;
24982var NODE_ISNOT = 64;
24983var NODE_ISNOTCI = 65;
24984var NODE_ISNOTCS = 66;
24985var NODE_ADD = 67;
24986var NODE_SUBTRACT = 68;
24987var NODE_CONCAT = 69;
24988var NODE_MULTIPLY = 70;
24989var NODE_DIVIDE = 71;
24990var NODE_REMAINDER = 72;
24991var NODE_NOT = 73;
24992var NODE_MINUS = 74;
24993var NODE_PLUS = 75;
24994var NODE_SUBSCRIPT = 76;
24995var NODE_SLICE = 77;
24996var NODE_CALL = 78;
24997var NODE_DOT = 79;
24998var NODE_NUMBER = 80;
24999var NODE_STRING = 81;
25000var NODE_LIST = 82;
25001var NODE_DICT = 83;
25002var NODE_IDENTIFIER = 86;
25003var NODE_CURLYNAME = 87;
25004var NODE_ENV = 88;
25005var NODE_REG = 89; // TODO
25006var NODE_CURLYNAMEPART = 90; // TODO
25007var NODE_CURLYNAMEEXPR = 91; // TODO
25008var NODE_LAMBDA = 92;
25009var NODE_CONST = 94;
25010var NODE_EVAL = 95;
25011var NODE_HEREDOC = 96;
25012var NODE_METHOD = 97;
25013var globalFuncPattern = /^(g:\w+(\.\w+)*|[a-zA-Z_]\w*(\.\w+)*|\w+(#\w+)+)$/;
25014var scriptFuncPattern = /^(s:\w+(\.\w+)*|<SID>\w+(\.\w+)*)$/i;
25015var globalVariablePattern = /^(g:\w+(\.\w+)*|b:\w+(\.\w+)*|\w{1,}(\.\w+)*|\w+(#\w+)+)$/;
25016var localVariablePattern = /^(s:\w+(\.\w+)*|l:\w+(\.\w+)*|a:\w+(\.\w+)*)$/;
25017var envPattern = /^\$\w+$/;
25018var Buffer = /** @class */ (function () {
25019 function Buffer(uri, projectRoot, node) {
25020 this.uri = uri;
25021 this.projectRoot = projectRoot;
25022 this.node = node;
25023 this.globalFunctions = {};
25024 this.scriptFunctions = {};
25025 this.globalFunctionRefs = {};
25026 this.scriptFunctionRefs = {};
25027 this.globalVariables = {};
25028 this.localVariables = {};
25029 this.globalVariableRefs = {};
25030 this.localVariableRefs = {};
25031 this.envs = {};
25032 this.envRefs = {};
25033 this.ranges = [];
25034 this.updateBufferByNode(this.node);
25035 }
25036 Buffer.prototype.getGlobalFunctions = function () {
25037 return this.globalFunctions;
25038 };
25039 Buffer.prototype.getGlobalFunctionRefs = function () {
25040 return this.globalFunctionRefs;
25041 };
25042 Buffer.prototype.getScriptFunctions = function () {
25043 return this.scriptFunctions;
25044 };
25045 Buffer.prototype.getScriptFunctionRefs = function () {
25046 return this.scriptFunctionRefs;
25047 };
25048 Buffer.prototype.getGlobalIdentifiers = function () {
25049 return this.globalVariables;
25050 };
25051 Buffer.prototype.getGlobalIdentifierRefs = function () {
25052 return this.globalVariableRefs;
25053 };
25054 Buffer.prototype.getLocalIdentifiers = function () {
25055 return this.localVariables;
25056 };
25057 Buffer.prototype.getLocalIdentifierRefs = function () {
25058 return this.localVariableRefs;
25059 };
25060 Buffer.prototype.getRanges = function () {
25061 return this.ranges;
25062 };
25063 Buffer.prototype.getProjectRoot = function () {
25064 return this.projectRoot;
25065 };
25066 Buffer.prototype.isBelongToWorkdir = function (workUri) {
25067 return this.projectRoot === workUri;
25068 };
25069 Buffer.prototype.updateBufferByNode = function (node) {
25070 this.node = node;
25071 this.resetProperties();
25072 try {
25073 this.resolveCompletionItems([node]);
25074 }
25075 catch (error) {
25076 log.error(error.stack);
25077 }
25078 };
25079 /*
25080 * global function
25081 *
25082 * - g:xxx
25083 * - xx#xxx
25084 */
25085 Buffer.prototype.getGlobalFunctionItems = function () {
25086 var _this = this;
25087 var refs = {};
25088 Object.keys(this.globalFunctionRefs).forEach(function (name) {
25089 if (!_this.globalFunctions[name]) {
25090 refs[name] = _this.globalFunctionRefs[name];
25091 }
25092 });
25093 return this.getFunctionItems(this.globalFunctions, constant_1.sortTexts.three)
25094 .concat(this.getFunctionItems(refs, constant_1.sortTexts.three));
25095 };
25096 /*
25097 * script function
25098 *
25099 * - s:xxx
25100 */
25101 Buffer.prototype.getScriptFunctionItems = function () {
25102 var _this = this;
25103 var refs = {};
25104 Object.keys(this.scriptFunctionRefs).forEach(function (name) {
25105 if (!_this.scriptFunctions[name]) {
25106 refs[name] = _this.scriptFunctionRefs[name];
25107 }
25108 });
25109 return this.getFunctionItems(this.scriptFunctions, constant_1.sortTexts.two)
25110 .concat(this.getFunctionItems(refs, constant_1.sortTexts.two));
25111 };
25112 /*
25113 * global identifier
25114 *
25115 * - g:xxx
25116 * - b:xxx
25117 * - [a-zA-Z]+
25118 * - xx#xxx
25119 */
25120 Buffer.prototype.getGlobalIdentifierItems = function () {
25121 var _this = this;
25122 var refs = {};
25123 Object.keys(this.globalVariableRefs).forEach(function (name) {
25124 if (!_this.globalVariables[name]) {
25125 refs[name] = _this.globalVariableRefs[name];
25126 }
25127 });
25128 var globalVariables = [];
25129 var localVariables = [];
25130 this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.three)
25131 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.three))
25132 .forEach(function (item) {
25133 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label)) {
25134 localVariables.push(item);
25135 }
25136 else {
25137 globalVariables.push(item);
25138 }
25139 });
25140 if (localVariables.length) {
25141 var gloalFunctions = this.getGlobalFunctions();
25142 var scriptFunctions = this.getScriptFunctions();
25143 var funList_1 = Object.values(gloalFunctions).concat(Object.values(scriptFunctions)).reduce(function (res, fs) { return res.concat(fs); }, []);
25144 localVariables.forEach(function (l) {
25145 if (l.data.some(function (identifier) {
25146 return funList_1.every(function (fun) {
25147 return !(fun.startLine < identifier.startLine && identifier.startLine < fun.endLine);
25148 });
25149 })) {
25150 globalVariables.push(l);
25151 }
25152 });
25153 }
25154 return globalVariables;
25155 };
25156 /*
25157 * local identifier
25158 *
25159 * - s:xxx
25160 */
25161 Buffer.prototype.getLocalIdentifierItems = function () {
25162 var _this = this;
25163 var refs = {};
25164 Object.keys(this.localVariableRefs).forEach(function (name) {
25165 if (!_this.localVariables[name]) {
25166 refs[name] = _this.localVariableRefs[name];
25167 }
25168 });
25169 return this.getIdentifierItems(this.localVariables, constant_1.sortTexts.two)
25170 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.two))
25171 .filter(function (item) { return !/^(a|l):/.test(item.label); });
25172 };
25173 /*
25174 * function local identifier
25175 *
25176 * - l:xxx
25177 * - a:xxx
25178 * - identifiers in function range
25179 */
25180 Buffer.prototype.getFunctionLocalIdentifierItems = function (line) {
25181 var vimLineNum = line + 1;
25182 var startLine = -1;
25183 var endLine = -1;
25184 // get function args completion items
25185 var funArgs = []
25186 .concat(Object.values(this.globalFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25187 .concat(Object.values(this.scriptFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25188 .filter(function (fun) {
25189 if (startLine === -1 && endLine === -1 && fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
25190 startLine = fun.startLine;
25191 endLine = fun.endLine;
25192 }
25193 else if (fun.startLine > startLine && endLine > fun.endLine) {
25194 startLine = fun.startLine;
25195 endLine = fun.endLine;
25196 }
25197 return fun.startLine < vimLineNum && vimLineNum < fun.endLine;
25198 })
25199 .reduce(function (res, next) {
25200 (next.args || []).forEach(function (name) {
25201 if (res.indexOf(name.value) === -1) {
25202 res.push(name.value);
25203 }
25204 });
25205 return res;
25206 }, [])
25207 .map(function (name) { return ({
25208 label: "a:" + name,
25209 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25210 sortText: constant_1.sortTexts.one,
25211 insertText: "a:" + name,
25212 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25213 }); });
25214 if (startLine !== -1 && endLine !== -1) {
25215 var funcLocalIdentifiers = this.getIdentifierItems(this.localVariables, constant_1.sortTexts.one)
25216 .concat(this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.one))
25217 .filter(function (item) {
25218 if (!(/^l:/.test(item.label) || /^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label))) {
25219 return false;
25220 }
25221 var data = item.data;
25222 if (!data) {
25223 return false;
25224 }
25225 return data.some(function (i) { return startLine < i.startLine && i.startLine < endLine; });
25226 });
25227 return funArgs.concat(funcLocalIdentifiers);
25228 }
25229 return [];
25230 };
25231 /*
25232 * environment identifier
25233 *
25234 * - $xxx
25235 */
25236 Buffer.prototype.getEnvItems = function () {
25237 return Object.keys(this.envs).map(function (name) {
25238 return {
25239 label: name,
25240 insertText: name,
25241 sortText: constant_1.sortTexts.three,
25242 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25243 };
25244 });
25245 };
25246 Buffer.prototype.resetProperties = function () {
25247 this.globalFunctions = {};
25248 this.scriptFunctions = {};
25249 this.globalFunctionRefs = {};
25250 this.scriptFunctionRefs = {};
25251 this.globalVariables = {};
25252 this.localVariables = {};
25253 this.globalVariableRefs = {};
25254 this.localVariableRefs = {};
25255 this.envs = {};
25256 this.envRefs = {};
25257 this.ranges = [];
25258 };
25259 Buffer.prototype.resolveCompletionItems = function (nodes) {
25260 var nodeList = [].concat(nodes);
25261 while (nodeList.length > 0) {
25262 var node = nodeList.pop();
25263 switch (node.type) {
25264 case NODE_TOPLEVEL:
25265 nodeList = nodeList.concat(node.body);
25266 break;
25267 // autocmd/command/map
25268 case NODE_EXCMD:
25269 this.takeFuncRefByExcmd(node);
25270 break;
25271 case NODE_EXCALL:
25272 case NODE_RETURN:
25273 case NODE_DELFUNCTION:
25274 case NODE_THROW:
25275 case NODE_EVAL:
25276 nodeList = nodeList.concat(node.left);
25277 break;
25278 case NODE_DOT:
25279 nodeList = nodeList.concat(node.left);
25280 this.takeIdentifier(node);
25281 break;
25282 case NODE_ECHO:
25283 case NODE_ECHON:
25284 case NODE_ECHOMSG:
25285 case NODE_ECHOERR:
25286 case NODE_UNLET:
25287 case NODE_LOCKVAR:
25288 case NODE_UNLOCKVAR:
25289 case NODE_EXECUTE:
25290 nodeList = nodeList.concat(node.list || []);
25291 break;
25292 case NODE_TERNARY:
25293 nodeList = nodeList.concat(node.cond || []);
25294 nodeList = nodeList.concat(node.left || []);
25295 nodeList = nodeList.concat(node.right || []);
25296 break;
25297 case NODE_IF:
25298 case NODE_ELSEIF:
25299 case NODE_ELSE:
25300 case NODE_WHILE:
25301 this.takeRange(node, ['endif', 'endwhile']);
25302 nodeList = nodeList.concat(node.body || []);
25303 nodeList = nodeList.concat(node.cond || []);
25304 nodeList = nodeList.concat(node.elseif || []);
25305 nodeList = nodeList.concat(node._else || []);
25306 break;
25307 case NODE_OR:
25308 case NODE_AND:
25309 case NODE_EQUAL:
25310 case NODE_EQUALCI:
25311 case NODE_EQUALCS:
25312 case NODE_NEQUAL:
25313 case NODE_NEQUALCI:
25314 case NODE_NEQUALCS:
25315 case NODE_GREATER:
25316 case NODE_GREATERCI:
25317 case NODE_GREATERCS:
25318 case NODE_GEQUAL:
25319 case NODE_GEQUALCI:
25320 case NODE_GEQUALCS:
25321 case NODE_SMALLER:
25322 case NODE_SMALLERCI:
25323 case NODE_SMALLERCS:
25324 case NODE_SEQUAL:
25325 case NODE_SEQUALCI:
25326 case NODE_SEQUALCS:
25327 case NODE_MATCH:
25328 case NODE_MATCHCI:
25329 case NODE_MATCHCS:
25330 case NODE_NOMATCH:
25331 case NODE_NOMATCHCI:
25332 case NODE_NOMATCHCS:
25333 case NODE_IS:
25334 case NODE_ISCI:
25335 case NODE_ISCS:
25336 case NODE_ISNOT:
25337 case NODE_ISNOTCI:
25338 case NODE_ISNOTCS:
25339 case NODE_CONCAT:
25340 case NODE_MULTIPLY:
25341 case NODE_DIVIDE:
25342 case NODE_REMAINDER:
25343 case NODE_NOT:
25344 case NODE_MINUS:
25345 case NODE_PLUS:
25346 case NODE_ADD:
25347 case NODE_SUBTRACT:
25348 case NODE_SUBSCRIPT:
25349 case NODE_METHOD:
25350 nodeList = nodeList.concat(node.left || []);
25351 nodeList = nodeList.concat(node.right || []);
25352 break;
25353 case NODE_FOR:
25354 nodeList = nodeList.concat(node.body || []);
25355 nodeList = nodeList.concat(node.right || []);
25356 this.takeFor([].concat(node.left || []).concat(node.list || []));
25357 this.takeRange(node, 'endfor');
25358 break;
25359 case NODE_TRY:
25360 case NODE_CATCH:
25361 case NODE_FINALLY:
25362 this.takeRange(node, 'endtry');
25363 nodeList = nodeList.concat(node.body || []);
25364 nodeList = nodeList.concat(node.catch || []);
25365 nodeList = nodeList.concat(node._finally || []);
25366 break;
25367 case NODE_FUNCTION:
25368 nodeList = nodeList.concat(node.body || []);
25369 if (node.left && node.left.type === NODE_DOT) {
25370 nodeList = nodeList.concat(node.left.left);
25371 }
25372 this.takeFunction(node);
25373 this.takeRange(node, 'endfunction');
25374 break;
25375 case NODE_LIST:
25376 nodeList = nodeList.concat(node.value || []);
25377 break;
25378 case NODE_DICT:
25379 nodeList = nodeList.concat((node.value || []).map(function (item) { return item[1]; }));
25380 break;
25381 case NODE_SLICE:
25382 case NODE_LAMBDA:
25383 nodeList = nodeList.concat(node.left || []);
25384 nodeList = nodeList.concat(node.rlist || []);
25385 break;
25386 case NODE_CALL:
25387 nodeList = nodeList.concat(node.rlist || []);
25388 if (node.left && node.left.type === NODE_DOT) {
25389 nodeList = nodeList.concat(node.left.left);
25390 }
25391 this.takeFuncRefByRef(node);
25392 this.takeFuncRef(node);
25393 break;
25394 case NODE_LET:
25395 case NODE_CONST:
25396 nodeList = nodeList.concat(node.right || []);
25397 if (node.left && node.left.type === NODE_DOT) {
25398 nodeList = nodeList.concat(node.left.left);
25399 }
25400 // not a function by function()/funcref()
25401 if (!this.takeFunctionByRef(node)) {
25402 this.takeLet(node);
25403 }
25404 break;
25405 case NODE_ENV:
25406 case NODE_IDENTIFIER:
25407 this.takeIdentifier(node);
25408 break;
25409 default:
25410 break;
25411 }
25412 }
25413 // log.info(`parse_buffer: ${JSON.stringify(this)}`)
25414 };
25415 Buffer.prototype.takeFunction = function (node) {
25416 var left = node.left, rlist = node.rlist, endfunction = node.endfunction;
25417 var name = this.getDotName(left);
25418 if (!name) {
25419 return;
25420 }
25421 var pos = this.getDotPos(left);
25422 if (!pos) {
25423 return;
25424 }
25425 var func = {
25426 name: name,
25427 args: rlist || [],
25428 startLine: pos.lnum,
25429 startCol: pos.col,
25430 endLine: endfunction.pos.lnum,
25431 endCol: endfunction.pos.col,
25432 range: {
25433 startLine: node.pos.lnum,
25434 startCol: node.pos.col,
25435 endLine: endfunction.pos.lnum,
25436 endCol: endfunction.pos.col,
25437 }
25438 };
25439 if (globalFuncPattern.test(name)) {
25440 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25441 this.globalFunctions[name] = [];
25442 }
25443 this.globalFunctions[name].push(func);
25444 }
25445 else if (scriptFuncPattern.test(name)) {
25446 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25447 this.scriptFunctions[name] = [];
25448 }
25449 this.scriptFunctions[name].push(func);
25450 }
25451 };
25452 /*
25453 * vim function
25454 *
25455 * - let funcName = function()
25456 * - let funcName = funcref()
25457 */
25458 Buffer.prototype.takeFunctionByRef = function (node) {
25459 var left = node.left, right = node.right;
25460 if (!right || right.type !== NODE_CALL) {
25461 return;
25462 }
25463 // is not function()/funcref()
25464 if (!right.left ||
25465 !right.left.value ||
25466 ["function", "funcref"].indexOf(right.left.value) === -1) {
25467 return;
25468 }
25469 var name = this.getDotName(left);
25470 if (!name) {
25471 return;
25472 }
25473 var pos = this.getDotPos(left);
25474 if (!pos) {
25475 return false;
25476 }
25477 var func = {
25478 name: name,
25479 args: [],
25480 startLine: pos.lnum,
25481 startCol: pos.col,
25482 endLine: pos.lnum,
25483 endCol: pos.col,
25484 range: {
25485 startLine: pos.lnum,
25486 startCol: pos.col,
25487 endLine: pos.lnum,
25488 endCol: pos.col,
25489 }
25490 };
25491 if (globalFuncPattern.test(name)) {
25492 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25493 this.globalFunctions[name] = [];
25494 }
25495 this.globalFunctions[name].push(func);
25496 return true;
25497 }
25498 else if (scriptFuncPattern.test(name)) {
25499 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25500 this.scriptFunctions[name] = [];
25501 }
25502 this.scriptFunctions[name].push(func);
25503 return true;
25504 }
25505 return false;
25506 };
25507 Buffer.prototype.takeFuncRef = function (node) {
25508 var left = node.left, rlist = node.rlist;
25509 var name = "";
25510 if (left.type === NODE_IDENTIFIER) {
25511 name = left.value;
25512 // <SID>funName
25513 }
25514 else if (left.type === NODE_CURLYNAME) {
25515 name = (left.value || []).map(function (item) { return item.value; }).join("");
25516 }
25517 else if (left.type === NODE_DOT) {
25518 name = this.getDotName(left);
25519 }
25520 if (!name) {
25521 return;
25522 }
25523 var pos = this.getDotPos(left);
25524 if (!pos) {
25525 return;
25526 }
25527 var funcRef = {
25528 name: name,
25529 args: rlist || [],
25530 startLine: pos.lnum,
25531 startCol: pos.col,
25532 };
25533 if (globalFuncPattern.test(name)) {
25534 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25535 this.globalFunctionRefs[name] = [];
25536 }
25537 this.globalFunctionRefs[name].push(funcRef);
25538 }
25539 else if (scriptFuncPattern.test(name)) {
25540 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25541 this.scriptFunctionRefs[name] = [];
25542 }
25543 this.scriptFunctionRefs[name].push(funcRef);
25544 }
25545 };
25546 /*
25547 * vim function ref
25548 * first value is function name
25549 *
25550 * - function('funcName')
25551 * - funcref('funcName')
25552 */
25553 Buffer.prototype.takeFuncRefByRef = function (node) {
25554 var left = node.left, rlist = node.rlist;
25555 var funcNode = rlist && rlist[0];
25556 if (!left ||
25557 ["function", "funcref"].indexOf(left.value) === -1 ||
25558 !funcNode ||
25559 !funcNode.pos ||
25560 typeof funcNode.value !== "string") {
25561 return;
25562 }
25563 // delete '/" of function name
25564 var name = funcNode.value.replace(/^['"]|['"]$/g, "");
25565 var funcRef = {
25566 name: name,
25567 args: [],
25568 startLine: funcNode.pos.lnum,
25569 startCol: funcNode.pos.col + 1,
25570 };
25571 if (globalFuncPattern.test(name)) {
25572 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25573 this.globalFunctionRefs[name] = [];
25574 }
25575 this.globalFunctionRefs[name].push(funcRef);
25576 }
25577 else if (scriptFuncPattern.test(name)) {
25578 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25579 this.scriptFunctionRefs[name] = [];
25580 }
25581 this.scriptFunctionRefs[name].push(funcRef);
25582 }
25583 };
25584 /*
25585 * FIXME: take function ref by
25586 *
25587 * - autocmd
25588 * - command
25589 * - map
25590 */
25591 Buffer.prototype.takeFuncRefByExcmd = function (node) {
25592 var pos = node.pos, str = node.str;
25593 if (!str) {
25594 return;
25595 }
25596 // tslint:disable-next-line: max-line-length
25597 if (!/^[ \t]*((au|aut|auto|autoc|autocm|autocmd|com|comm|comma|comman|command)!?[ \t]+|([a-zA-Z]*map!?[ \t]+.*?:))/.test(str)) {
25598 return;
25599 }
25600 var regFunc = /(<sid>[\w_#]+|[a-zA-Z_]:[\w_#]+|[\w_#]+)[ \t]*\(/gi;
25601 var m = regFunc.exec(str);
25602 while (m) {
25603 var name = m[1];
25604 if (name) {
25605 var funcRef = {
25606 name: name,
25607 args: [],
25608 startLine: pos.lnum,
25609 startCol: pos.col + m.index,
25610 };
25611 if (globalFuncPattern.test(name)) {
25612 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25613 this.globalFunctionRefs[name] = [];
25614 }
25615 this.globalFunctionRefs[name].push(funcRef);
25616 }
25617 else if (scriptFuncPattern.test(name)) {
25618 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25619 this.scriptFunctionRefs[name] = [];
25620 }
25621 this.scriptFunctionRefs[name].push(funcRef);
25622 }
25623 }
25624 m = regFunc.exec(str);
25625 }
25626 };
25627 Buffer.prototype.takeLet = function (node) {
25628 var pos = this.getDotPos(node.left);
25629 var name = this.getDotName(node.left);
25630 if (!pos || !name) {
25631 return;
25632 }
25633 var identifier = {
25634 name: name,
25635 startLine: pos.lnum,
25636 startCol: pos.col,
25637 };
25638 if (localVariablePattern.test(name)) {
25639 if (!this.localVariables[name] || !Array.isArray(this.localVariables[name])) {
25640 this.localVariables[name] = [];
25641 }
25642 this.localVariables[name].push(identifier);
25643 }
25644 else if (globalVariablePattern.test(name)) {
25645 if (!this.globalVariables[name] || !Array.isArray(this.globalVariables[name])) {
25646 this.globalVariables[name] = [];
25647 }
25648 this.globalVariables[name].push(identifier);
25649 }
25650 else if (envPattern.test(name)) {
25651 if (!this.envs[name] || !Array.isArray(this.envs[name])) {
25652 this.envs[name] = [];
25653 }
25654 this.envs[name].push(identifier);
25655 }
25656 };
25657 Buffer.prototype.takeRange = function (node, keys) {
25658 var _this = this;
25659 [].concat(keys).forEach(function (key) {
25660 if (node.pos && node[key] && node[key].pos) {
25661 _this.ranges.push({
25662 startLine: node.pos.lnum,
25663 startCol: node.pos.col,
25664 endLine: node[key].pos.lnum,
25665 endCol: node[key].pos.col
25666 });
25667 }
25668 });
25669 };
25670 Buffer.prototype.takeFor = function (nodes) {
25671 var _this = this;
25672 nodes.forEach(function (node) {
25673 if (node.type !== NODE_IDENTIFIER || !node.pos) {
25674 return;
25675 }
25676 var name = node.value;
25677 var identifier = {
25678 name: name,
25679 startLine: node.pos.lnum,
25680 startCol: node.pos.col,
25681 };
25682 if (localVariablePattern.test(name)) {
25683 if (!_this.localVariables[name] || !Array.isArray(_this.localVariables[name])) {
25684 _this.localVariables[name] = [];
25685 }
25686 _this.localVariables[name].push(identifier);
25687 }
25688 else if (globalVariablePattern.test(name)) {
25689 if (!_this.globalVariables[name] || !Array.isArray(_this.globalVariables[name])) {
25690 _this.globalVariables[name] = [];
25691 }
25692 _this.globalVariables[name].push(identifier);
25693 }
25694 else if (envPattern.test(name)) {
25695 if (!_this.envs[name] || !Array.isArray(_this.envs[name])) {
25696 _this.envs[name] = [];
25697 }
25698 _this.envs[name].push(identifier);
25699 }
25700 });
25701 };
25702 Buffer.prototype.takeIdentifier = function (node) {
25703 var name = this.getDotName(node);
25704 if (!name) {
25705 return;
25706 }
25707 var pos = this.getDotPos(node);
25708 if (!pos) {
25709 return;
25710 }
25711 var identifier = {
25712 name: name,
25713 startLine: pos.lnum,
25714 startCol: pos.col,
25715 };
25716 if (globalVariablePattern.test(name)) {
25717 if (!this.globalVariableRefs[name] || !Array.isArray(this.globalVariableRefs[name])) {
25718 this.globalVariableRefs[name] = [];
25719 }
25720 this.globalVariableRefs[name].push(identifier);
25721 }
25722 else if (localVariablePattern.test(name)) {
25723 if (!this.localVariableRefs[name] || !Array.isArray(this.localVariableRefs[name])) {
25724 this.localVariableRefs[name] = [];
25725 }
25726 this.localVariableRefs[name].push(identifier);
25727 }
25728 else if (envPattern.test(name)) {
25729 if (!this.envRefs[name] || !Array.isArray(this.envRefs[name])) {
25730 this.envRefs[name] = [];
25731 }
25732 this.envRefs[name].push(identifier);
25733 }
25734 };
25735 Buffer.prototype.getDotPos = function (node) {
25736 if (!node) {
25737 return null;
25738 }
25739 if (node.type === NODE_IDENTIFIER ||
25740 node.type === NODE_ENV ||
25741 node.type === NODE_CURLYNAME) {
25742 return node.pos;
25743 }
25744 var left = node.left;
25745 return this.getDotPos(left);
25746 };
25747 Buffer.prototype.getDotName = function (node) {
25748 if (node.type === NODE_IDENTIFIER ||
25749 node.type === NODE_STRING ||
25750 node.type === NODE_NUMBER ||
25751 node.type === NODE_ENV) {
25752 return node.value;
25753 }
25754 else if (node.type === NODE_CURLYNAME) {
25755 return (node.value || []).map(function (item) { return item.value; }).join("");
25756 }
25757 else if (node.type === NODE_SUBSCRIPT) {
25758 return this.getDotName(node.left);
25759 }
25760 var left = node.left, right = node.right;
25761 var list = [];
25762 if (left) {
25763 list.push(this.getDotName(left));
25764 }
25765 if (right) {
25766 list.push(this.getDotName(right));
25767 }
25768 return list.join(".");
25769 };
25770 Buffer.prototype.getFunctionItems = function (items, sortText) {
25771 return Object.keys(items).map(function (name) {
25772 var list = items[name];
25773 var args = "${1}";
25774 if (list[0] && list[0].args && list[0].args.length > 0) {
25775 args = (list[0].args || []).reduce(function (res, next, idx) {
25776 // FIXME: resove next.value is not string
25777 var value = typeof next.value !== "string" ? "param" : next.value;
25778 if (idx === 0) {
25779 return "${" + (idx + 1) + ":" + value + "}";
25780 }
25781 return res + ", ${" + (idx + 1) + ":" + value + "}";
25782 }, "");
25783 }
25784 var label = name;
25785 if (/^<SID>/.test(name)) {
25786 label = name.replace(/^<SID>/, "s:");
25787 }
25788 return {
25789 label: label,
25790 detail: "any",
25791 sortText: sortText,
25792 documentation: "User defined function",
25793 kind: vscode_languageserver_1.CompletionItemKind.Function,
25794 insertText: label + "(" + args + ")${0}",
25795 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25796 };
25797 });
25798 };
25799 Buffer.prototype.getIdentifierItems = function (items, sortText) {
25800 var _this = this;
25801 return Object.keys(items)
25802 .filter(function (name) { return !_this.globalFunctions[name] && !_this.scriptFunctions[name]; })
25803 .map(function (name) {
25804 var list = items[name];
25805 return {
25806 label: name,
25807 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25808 sortText: sortText,
25809 documentation: "User defined variable",
25810 insertText: name,
25811 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25812 data: list || [],
25813 };
25814 });
25815 };
25816 return Buffer;
25817}());
25818exports.Buffer = Buffer;
25819
25820
25821/***/ }),
25822/* 151 */
25823/***/ (function(module, exports, __webpack_require__) {
25824
25825"use strict";
25826
25827Object.defineProperty(exports, "__esModule", { value: true });
25828var patterns_1 = __webpack_require__(54);
25829var util_1 = __webpack_require__(46);
25830var builtin_1 = __webpack_require__(59);
25831var provider_1 = __webpack_require__(140);
25832function provider(line) {
25833 if (util_1.isSomeMatchPattern(patterns_1.featurePattern, line)) {
25834 return builtin_1.builtinDocs.getVimFeatures();
25835 }
25836 return [];
25837}
25838provider_1.useProvider(provider);
25839
25840
25841/***/ }),
25842/* 152 */
25843/***/ (function(module, exports, __webpack_require__) {
25844
25845"use strict";
25846
25847Object.defineProperty(exports, "__esModule", { value: true });
25848var patterns_1 = __webpack_require__(54);
25849var builtin_1 = __webpack_require__(59);
25850var provider_1 = __webpack_require__(140);
25851function provider(line) {
25852 if (!patterns_1.highlightLinkPattern.test(line) &&
25853 !patterns_1.highlightValuePattern.test(line) &&
25854 patterns_1.highlightPattern.test(line)) {
25855 return builtin_1.builtinDocs.getHighlightArgKeys().filter(function (item) {
25856 return line.indexOf(item.label) === -1;
25857 });
25858 }
25859 return [];
25860}
25861provider_1.useProvider(provider);
25862
25863
25864/***/ }),
25865/* 153 */
25866/***/ (function(module, exports, __webpack_require__) {
25867
25868"use strict";
25869
25870Object.defineProperty(exports, "__esModule", { value: true });
25871var patterns_1 = __webpack_require__(54);
25872var builtin_1 = __webpack_require__(59);
25873var provider_1 = __webpack_require__(140);
25874function provider(line) {
25875 var m = line.match(patterns_1.highlightValuePattern);
25876 if (!patterns_1.highlightLinkPattern.test(line) && m) {
25877 var values = builtin_1.builtinDocs.getHighlightArgValues();
25878 var keyName = m[3];
25879 if (values[keyName]) {
25880 return values[keyName];
25881 }
25882 }
25883 return [];
25884}
25885provider_1.useProvider(provider);
25886
25887
25888/***/ }),
25889/* 154 */
25890/***/ (function(module, exports, __webpack_require__) {
25891
25892"use strict";
25893
25894var __assign = (this && this.__assign) || function () {
25895 __assign = Object.assign || function(t) {
25896 for (var s, i = 1, n = arguments.length; i < n; i++) {
25897 s = arguments[i];
25898 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25899 t[p] = s[p];
25900 }
25901 return t;
25902 };
25903 return __assign.apply(this, arguments);
25904};
25905var __importDefault = (this && this.__importDefault) || function (mod) {
25906 return (mod && mod.__esModule) ? mod : { "default": mod };
25907};
25908Object.defineProperty(exports, "__esModule", { value: true });
25909var patterns_1 = __webpack_require__(54);
25910var util_1 = __webpack_require__(46);
25911var config_1 = __importDefault(__webpack_require__(55));
25912var workspaces_1 = __webpack_require__(148);
25913var provider_1 = __webpack_require__(140);
25914function provider(line, uri, position) {
25915 if (util_1.isSomeMatchPattern(patterns_1.notIdentifierPattern, line)) {
25916 return [];
25917 }
25918 else if (/\b[gbsla]:\w*$/.test(line)) {
25919 var list = [];
25920 if (/\bg:\w*$/.test(line)) {
25921 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25922 .filter(function (item) { return /^g:/.test(item.label); });
25923 }
25924 else if (/\bb:\w*$/.test(line)) {
25925 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25926 .filter(function (item) { return /^b:/.test(item.label); });
25927 }
25928 else if (/\bs:\w*$/.test(line)) {
25929 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25930 .filter(function (item) { return /^s:/.test(item.label); });
25931 }
25932 else if (/\bl:\w*$/.test(line)) {
25933 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25934 .filter(function (item) { return /^l:/.test(item.label); });
25935 }
25936 else if (/\ba:\w*$/.test(line)) {
25937 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25938 .filter(function (item) { return /^a:/.test(item.label); });
25939 }
25940 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
25941 }
25942 else if (/\B:\w*$/.test(line)) {
25943 return workspaces_1.workspace.getIdentifierItems(uri, position.line)
25944 .filter(function (item) { return /:/.test(item.label); })
25945 .map(function (item) {
25946 var m = line.match(/:[^:]*$/);
25947 return __assign(__assign({}, item), {
25948 // delete the `:` symbol
25949 textEdit: {
25950 range: {
25951 start: {
25952 line: position.line,
25953 character: line.length - m[0].length,
25954 },
25955 end: {
25956 line: position.line,
25957 character: line.length - m[0].length + 1,
25958 },
25959 },
25960 newText: item.insertText,
25961 } });
25962 });
25963 }
25964 return workspaces_1.workspace.getIdentifierItems(uri, position.line);
25965}
25966provider_1.useProvider(provider);
25967
25968
25969/***/ }),
25970/* 155 */
25971/***/ (function(module, exports, __webpack_require__) {
25972
25973"use strict";
25974
25975var __assign = (this && this.__assign) || function () {
25976 __assign = Object.assign || function(t) {
25977 for (var s, i = 1, n = arguments.length; i < n; i++) {
25978 s = arguments[i];
25979 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25980 t[p] = s[p];
25981 }
25982 return t;
25983 };
25984 return __assign.apply(this, arguments);
25985};
25986Object.defineProperty(exports, "__esModule", { value: true });
25987var patterns_1 = __webpack_require__(54);
25988var builtin_1 = __webpack_require__(59);
25989var provider_1 = __webpack_require__(140);
25990function provider(line) {
25991 if (patterns_1.mapCommandPattern.test(line)) {
25992 if (/<$/.test(line)) {
25993 return builtin_1.builtinDocs.getVimMapArgs().map(function (item) { return (__assign(__assign({}, item), { insertText: item.insertText.slice(1) })); });
25994 }
25995 return builtin_1.builtinDocs.getVimMapArgs();
25996 }
25997 return [];
25998}
25999provider_1.useProvider(provider);
26000
26001
26002/***/ }),
26003/* 156 */
26004/***/ (function(module, exports, __webpack_require__) {
26005
26006"use strict";
26007
26008Object.defineProperty(exports, "__esModule", { value: true });
26009var patterns_1 = __webpack_require__(54);
26010var util_1 = __webpack_require__(46);
26011var builtin_1 = __webpack_require__(59);
26012var provider_1 = __webpack_require__(140);
26013function provider(line) {
26014 if (util_1.isSomeMatchPattern(patterns_1.optionPattern, line)) {
26015 return builtin_1.builtinDocs.getVimOptions();
26016 }
26017 return [];
26018}
26019provider_1.useProvider(provider);
26020
26021
26022/***/ }),
26023/* 157 */
26024/***/ (function(module, exports, __webpack_require__) {
26025
26026"use strict";
26027
26028Object.defineProperty(exports, "__esModule", { value: true });
26029var builtin_1 = __webpack_require__(59);
26030exports.completionResolveProvider = function (params) {
26031 return builtin_1.builtinDocs.getDocumentByCompletionItem(params);
26032};
26033
26034
26035/***/ }),
26036/* 158 */
26037/***/ (function(module, exports, __webpack_require__) {
26038
26039"use strict";
26040
26041Object.defineProperty(exports, "__esModule", { value: true });
26042var util_1 = __webpack_require__(46);
26043var documents_1 = __webpack_require__(56);
26044var workspaces_1 = __webpack_require__(148);
26045exports.definitionProvider = function (params) {
26046 var textDocument = params.textDocument, position = params.position;
26047 var doc = documents_1.documents.get(textDocument.uri);
26048 if (!doc) {
26049 return null;
26050 }
26051 var words = util_1.getWordFromPosition(doc, position);
26052 if (!words) {
26053 return null;
26054 }
26055 var currentName = words.word;
26056 if (/\./.test(words.right)) {
26057 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26058 currentName = words.word.replace(tail, "");
26059 }
26060 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations;
26061};
26062
26063
26064/***/ }),
26065/* 159 */
26066/***/ (function(module, exports, __webpack_require__) {
26067
26068"use strict";
26069
26070Object.defineProperty(exports, "__esModule", { value: true });
26071var util_1 = __webpack_require__(46);
26072var documents_1 = __webpack_require__(56);
26073var workspaces_1 = __webpack_require__(148);
26074exports.documentHighlightProvider = (function (params) {
26075 var textDocument = params.textDocument, position = params.position;
26076 var doc = documents_1.documents.get(textDocument.uri);
26077 if (!doc) {
26078 return [];
26079 }
26080 var words = util_1.getWordFromPosition(doc, position);
26081 if (!words) {
26082 return [];
26083 }
26084 var currentName = words.word;
26085 if (/\./.test(words.right)) {
26086 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26087 currentName = words.word.replace(tail, "");
26088 }
26089 var defs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "definition");
26090 var refs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "references");
26091 return defs.locations.concat(refs.locations)
26092 .map(function (location) {
26093 return {
26094 range: location.range,
26095 };
26096 });
26097});
26098
26099
26100/***/ }),
26101/* 160 */
26102/***/ (function(module, exports, __webpack_require__) {
26103
26104"use strict";
26105
26106Object.defineProperty(exports, "__esModule", { value: true });
26107var workspaces_1 = __webpack_require__(148);
26108exports.foldingRangeProvider = function (params) {
26109 var res = [];
26110 var textDocument = params.textDocument;
26111 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
26112 if (!buffer) {
26113 return res;
26114 }
26115 var globalFunctions = buffer.getGlobalFunctions();
26116 var scriptFunctions = buffer.getScriptFunctions();
26117 return Object.values(globalFunctions).concat(Object.values(scriptFunctions))
26118 .reduce(function (pre, cur) {
26119 return pre.concat(cur);
26120 }, [])
26121 .map(function (func) {
26122 return {
26123 startLine: func.startLine - 1,
26124 startCharacter: func.startCol - 1,
26125 endLine: func.endLine - 1,
26126 endCharacter: func.endCol - 1,
26127 kind: "region",
26128 };
26129 });
26130};
26131
26132
26133/***/ }),
26134/* 161 */
26135/***/ (function(module, exports, __webpack_require__) {
26136
26137"use strict";
26138
26139Object.defineProperty(exports, "__esModule", { value: true });
26140var util_1 = __webpack_require__(46);
26141var builtin_1 = __webpack_require__(59);
26142var documents_1 = __webpack_require__(56);
26143exports.hoverProvider = function (params) {
26144 var textDocument = params.textDocument, position = params.position;
26145 var doc = documents_1.documents.get(textDocument.uri);
26146 if (!doc) {
26147 return;
26148 }
26149 var words = util_1.getWordFromPosition(doc, position);
26150 if (!words) {
26151 return;
26152 }
26153 return builtin_1.builtinDocs.getHoverDocument(words.word, words.wordLeft, words.wordRight);
26154};
26155
26156
26157/***/ }),
26158/* 162 */
26159/***/ (function(module, exports, __webpack_require__) {
26160
26161"use strict";
26162
26163Object.defineProperty(exports, "__esModule", { value: true });
26164var util_1 = __webpack_require__(46);
26165var documents_1 = __webpack_require__(56);
26166var workspaces_1 = __webpack_require__(148);
26167exports.referencesProvider = function (params) {
26168 var textDocument = params.textDocument, position = params.position;
26169 var doc = documents_1.documents.get(textDocument.uri);
26170 if (!doc) {
26171 return null;
26172 }
26173 var words = util_1.getWordFromPosition(doc, position);
26174 if (!words) {
26175 return null;
26176 }
26177 var currentName = words.word;
26178 if (/\./.test(words.right)) {
26179 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26180 currentName = words.word.replace(tail, "");
26181 }
26182 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references").locations;
26183};
26184
26185
26186/***/ }),
26187/* 163 */
26188/***/ (function(module, exports, __webpack_require__) {
26189
26190"use strict";
26191
26192Object.defineProperty(exports, "__esModule", { value: true });
26193var vscode_languageserver_1 = __webpack_require__(2);
26194var util_1 = __webpack_require__(46);
26195var documents_1 = __webpack_require__(56);
26196var workspaces_1 = __webpack_require__(148);
26197exports.prepareProvider = function (params) {
26198 var textDocument = params.textDocument, position = params.position;
26199 var doc = documents_1.documents.get(textDocument.uri);
26200 if (!doc) {
26201 return null;
26202 }
26203 var words = util_1.getWordFromPosition(doc, position);
26204 if (!words) {
26205 return null;
26206 }
26207 var currentName = words.word;
26208 if (/\./.test(words.right)) {
26209 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26210 currentName = words.word.replace(tail, "");
26211 }
26212 return {
26213 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)),
26214 placeholder: currentName,
26215 };
26216};
26217exports.renameProvider = function (params) {
26218 var textDocument = params.textDocument, position = params.position, newName = params.newName;
26219 var doc = documents_1.documents.get(textDocument.uri);
26220 if (!doc) {
26221 return null;
26222 }
26223 var words = util_1.getWordFromPosition(doc, position);
26224 if (!words) {
26225 return null;
26226 }
26227 var currentName = words.word;
26228 if (/\./.test(words.right)) {
26229 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26230 currentName = words.word.replace(tail, "");
26231 }
26232 var changes = {};
26233 var isChange = false;
26234 workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations
26235 .forEach(function (l) {
26236 isChange = true;
26237 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26238 changes[l.uri] = [];
26239 }
26240 changes[l.uri].push({
26241 newText: /^a:/.test(newName) ? newName.slice(2) : newName,
26242 range: l.range,
26243 });
26244 });
26245 var refs = workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references");
26246 refs.locations.forEach(function (l) {
26247 isChange = true;
26248 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26249 changes[l.uri] = [];
26250 }
26251 changes[l.uri].push({
26252 newText: refs.isFunArg ? "a:" + newName : newName,
26253 range: l.range,
26254 });
26255 });
26256 if (isChange) {
26257 return {
26258 changes: changes,
26259 };
26260 }
26261 return null;
26262};
26263
26264
26265/***/ }),
26266/* 164 */
26267/***/ (function(module, exports, __webpack_require__) {
26268
26269"use strict";
26270
26271Object.defineProperty(exports, "__esModule", { value: true });
26272var vscode_languageserver_1 = __webpack_require__(2);
26273var patterns_1 = __webpack_require__(54);
26274var builtin_1 = __webpack_require__(59);
26275var documents_1 = __webpack_require__(56);
26276exports.signatureHelpProvider = function (params) {
26277 var textDocument = params.textDocument, position = params.position;
26278 var doc = documents_1.documents.get(textDocument.uri);
26279 if (!doc) {
26280 return;
26281 }
26282 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)));
26283 // comment line
26284 if (patterns_1.commentPattern.test(currentLine)) {
26285 return;
26286 }
26287 var preSegment = currentLine.slice(0, position.character);
26288 var m = preSegment.match(/([\w#&:]+)[ \t]*\(([^()]*|\([^)]*\))*$/);
26289 if (!m) {
26290 return;
26291 }
26292 var functionName = m["1"];
26293 var placeIdx = m[0].split(",").length - 1;
26294 return builtin_1.builtinDocs.getSignatureHelpByName(functionName, placeIdx);
26295};
26296
26297
26298/***/ }),
26299/* 165 */
26300/***/ (function(module, exports, __webpack_require__) {
26301
26302"use strict";
26303
26304var __importDefault = (this && this.__importDefault) || function (mod) {
26305 return (mod && mod.__esModule) ? mod : { "default": mod };
26306};
26307Object.defineProperty(exports, "__esModule", { value: true });
26308var child_process_1 = __importDefault(__webpack_require__(41));
26309var path_1 = __webpack_require__(13);
26310var rxjs_1 = __webpack_require__(166);
26311var waitMap_1 = __webpack_require__(268);
26312var operators_1 = __webpack_require__(269);
26313var vscode_uri_1 = __webpack_require__(149);
26314var logger_1 = __importDefault(__webpack_require__(137));
26315var util_1 = __webpack_require__(46);
26316var diagnostic_1 = __webpack_require__(367);
26317var config_1 = __importDefault(__webpack_require__(55));
26318var workspaces_1 = __webpack_require__(148);
26319var log = logger_1.default("parser");
26320var parserHandles = {};
26321var indexes = {};
26322var origin$ = new rxjs_1.Subject();
26323var scanProcess;
26324var isScanRuntimepath = false;
26325function startIndex() {
26326 if (scanProcess) {
26327 return;
26328 }
26329 scanProcess = child_process_1.default.fork(path_1.join(__dirname, "scan.js"), ["--node-ipc"]);
26330 scanProcess.on("message", function (mess) {
26331 var data = mess.data, msglog = mess.msglog;
26332 if (data) {
26333 if (!workspaces_1.workspace.isExistsBuffer(data.uri)) {
26334 workspaces_1.workspace.updateBuffer(data.uri, data.node);
26335 }
26336 }
26337 if (msglog) {
26338 log.info("child_log: " + msglog);
26339 }
26340 });
26341 scanProcess.on("error", function (err) {
26342 log.error("" + (err.stack || err.message || err));
26343 });
26344 scanProcess.send({
26345 config: {
26346 gap: config_1.default.indexes.gap,
26347 count: config_1.default.indexes.count,
26348 projectRootPatterns: config_1.default.indexes.projectRootPatterns,
26349 },
26350 });
26351}
26352function next(textDoc) {
26353 if (!parserHandles[textDoc.uri]) {
26354 var uri_1 = textDoc.uri;
26355 parserHandles[uri_1] = origin$.pipe(operators_1.filter(function (td) { return uri_1 === td.uri; }), operators_1.switchMap(function (td) {
26356 return rxjs_1.timer(100).pipe(operators_1.map(function () { return td; }));
26357 }), waitMap_1.waitMap(function (td) {
26358 return rxjs_1.from(util_1.handleParse(td));
26359 }, true)).subscribe(function (res) {
26360 if (config_1.default.diagnostic.enable) {
26361 // handle diagnostic
26362 diagnostic_1.handleDiagnostic(textDoc, res[1]);
26363 }
26364 // handle node
26365 workspaces_1.workspace.updateBuffer(uri_1, res[0]);
26366 // scan project
26367 if (!indexes[uri_1]) {
26368 indexes[uri_1] = true;
26369 scanProcess.send({
26370 uri: uri_1,
26371 });
26372 if (!isScanRuntimepath) {
26373 isScanRuntimepath = true;
26374 scan([config_1.default.vimruntime].concat(config_1.default.runtimepath));
26375 }
26376 }
26377 }, function (err) {
26378 log.error("" + (err.stack || err.message || err));
26379 });
26380 }
26381 if (!scanProcess) {
26382 startIndex();
26383 }
26384 origin$.next(textDoc);
26385}
26386exports.next = next;
26387function unsubscribe(textDoc) {
26388 if (parserHandles[textDoc.uri] !== undefined) {
26389 parserHandles[textDoc.uri].unsubscribe();
26390 }
26391 parserHandles[textDoc.uri] = undefined;
26392}
26393exports.unsubscribe = unsubscribe;
26394// scan directory
26395function scan(paths) {
26396 if (!scanProcess) {
26397 startIndex();
26398 }
26399 if (config_1.default.indexes.runtimepath) {
26400 var list = [].concat(paths);
26401 for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
26402 var p = list_1[_i];
26403 if (!p) {
26404 continue;
26405 }
26406 p = p.trim();
26407 if (!p || p === "/") {
26408 continue;
26409 }
26410 scanProcess.send({
26411 uri: vscode_uri_1.URI.file(path_1.join(p, "f")).toString(),
26412 });
26413 }
26414 }
26415}
26416exports.scan = scan;
26417
26418
26419/***/ }),
26420/* 166 */
26421/***/ (function(module, __webpack_exports__, __webpack_require__) {
26422
26423"use strict";
26424__webpack_require__.r(__webpack_exports__);
26425/* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
26426/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return _internal_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]; });
26427
26428/* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(184);
26429/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__["ConnectableObservable"]; });
26430
26431/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(189);
26432/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__["GroupedObservable"]; });
26433
26434/* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(181);
26435/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__["observable"]; });
26436
26437/* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
26438/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _internal_Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]; });
26439
26440/* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(190);
26441/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]; });
26442
26443/* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(191);
26444/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__["ReplaySubject"]; });
26445
26446/* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(208);
26447/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__["AsyncSubject"]; });
26448
26449/* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(209);
26450/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asapScheduler", function() { return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asap"]; });
26451
26452/* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(213);
26453/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asyncScheduler", function() { return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["async"]; });
26454
26455/* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(192);
26456/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "queueScheduler", function() { return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queue"]; });
26457
26458/* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(214);
26459/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function() { return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrame"]; });
26460
26461/* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(217);
26462/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualTimeScheduler"]; });
26463
26464/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualAction"]; });
26465
26466/* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(198);
26467/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__["Scheduler"]; });
26468
26469/* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(175);
26470/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__["Subscription"]; });
26471
26472/* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(169);
26473/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__["Subscriber"]; });
26474
26475/* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(200);
26476/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["Notification"]; });
26477
26478/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["NotificationKind"]; });
26479
26480/* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(182);
26481/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__["pipe"]; });
26482
26483/* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(218);
26484/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__["noop"]; });
26485
26486/* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(183);
26487/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__["identity"]; });
26488
26489/* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(219);
26490/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__["isObservable"]; });
26491
26492/* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(220);
26493/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__["ArgumentOutOfRangeError"]; });
26494
26495/* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(221);
26496/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__["EmptyError"]; });
26497
26498/* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(186);
26499/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__["ObjectUnsubscribedError"]; });
26500
26501/* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(178);
26502/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__["UnsubscriptionError"]; });
26503
26504/* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(222);
26505/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__["TimeoutError"]; });
26506
26507/* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(223);
26508/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__["bindCallback"]; });
26509
26510/* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(225);
26511/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__["bindNodeCallback"]; });
26512
26513/* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(226);
26514/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__["combineLatest"]; });
26515
26516/* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(237);
26517/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__["concat"]; });
26518
26519/* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(248);
26520/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__["defer"]; });
26521
26522/* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(201);
26523/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["empty"]; });
26524
26525/* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(249);
26526/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__["forkJoin"]; });
26527
26528/* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(241);
26529/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "from", function() { return _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__["from"]; });
26530
26531/* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(250);
26532/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__["fromEvent"]; });
26533
26534/* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(251);
26535/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__["fromEventPattern"]; });
26536
26537/* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(252);
26538/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__["generate"]; });
26539
26540/* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(253);
26541/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__["iif"]; });
26542
26543/* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(254);
26544/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__["interval"]; });
26545
26546/* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(256);
26547/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__["merge"]; });
26548
26549/* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(257);
26550/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "never", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["never"]; });
26551
26552/* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(202);
26553/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "of", function() { return _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__["of"]; });
26554
26555/* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(258);
26556/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__["onErrorResumeNext"]; });
26557
26558/* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(259);
26559/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__["pairs"]; });
26560
26561/* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(260);
26562/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__["partition"]; });
26563
26564/* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(263);
26565/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__["race"]; });
26566
26567/* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(264);
26568/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__["range"]; });
26569
26570/* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(207);
26571/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__["throwError"]; });
26572
26573/* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(265);
26574/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__["timer"]; });
26575
26576/* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(266);
26577/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "using", function() { return _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__["using"]; });
26578
26579/* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(267);
26580/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__["zip"]; });
26581
26582/* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(242);
26583/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__["scheduled"]; });
26584
26585/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["EMPTY"]; });
26586
26587/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["NEVER"]; });
26588
26589/* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(173);
26590/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "config", function() { return _internal_config__WEBPACK_IMPORTED_MODULE_52__["config"]; });
26591
26592/** PURE_IMPORTS_START PURE_IMPORTS_END */
26593
26594
26595
26596
26597
26598
26599
26600
26601
26602
26603
26604
26605
26606
26607
26608
26609
26610
26611
26612
26613
26614
26615
26616
26617
26618
26619
26620
26621
26622
26623
26624
26625
26626
26627
26628
26629
26630
26631
26632
26633
26634
26635
26636
26637
26638
26639
26640
26641
26642
26643
26644
26645
26646
26647
26648//# sourceMappingURL=index.js.map
26649
26650
26651/***/ }),
26652/* 167 */
26653/***/ (function(module, __webpack_exports__, __webpack_require__) {
26654
26655"use strict";
26656__webpack_require__.r(__webpack_exports__);
26657/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return Observable; });
26658/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(168);
26659/* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(180);
26660/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(181);
26661/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(182);
26662/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(173);
26663/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */
26664
26665
26666
26667
26668
26669var Observable = /*@__PURE__*/ (function () {
26670 function Observable(subscribe) {
26671 this._isScalar = false;
26672 if (subscribe) {
26673 this._subscribe = subscribe;
26674 }
26675 }
26676 Observable.prototype.lift = function (operator) {
26677 var observable = new Observable();
26678 observable.source = this;
26679 observable.operator = operator;
26680 return observable;
26681 };
26682 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
26683 var operator = this.operator;
26684 var sink = Object(_util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__["toSubscriber"])(observerOrNext, error, complete);
26685 if (operator) {
26686 sink.add(operator.call(sink, this.source));
26687 }
26688 else {
26689 sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
26690 this._subscribe(sink) :
26691 this._trySubscribe(sink));
26692 }
26693 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
26694 if (sink.syncErrorThrowable) {
26695 sink.syncErrorThrowable = false;
26696 if (sink.syncErrorThrown) {
26697 throw sink.syncErrorValue;
26698 }
26699 }
26700 }
26701 return sink;
26702 };
26703 Observable.prototype._trySubscribe = function (sink) {
26704 try {
26705 return this._subscribe(sink);
26706 }
26707 catch (err) {
26708 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
26709 sink.syncErrorThrown = true;
26710 sink.syncErrorValue = err;
26711 }
26712 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_0__["canReportError"])(sink)) {
26713 sink.error(err);
26714 }
26715 else {
26716 console.warn(err);
26717 }
26718 }
26719 };
26720 Observable.prototype.forEach = function (next, promiseCtor) {
26721 var _this = this;
26722 promiseCtor = getPromiseCtor(promiseCtor);
26723 return new promiseCtor(function (resolve, reject) {
26724 var subscription;
26725 subscription = _this.subscribe(function (value) {
26726 try {
26727 next(value);
26728 }
26729 catch (err) {
26730 reject(err);
26731 if (subscription) {
26732 subscription.unsubscribe();
26733 }
26734 }
26735 }, reject, resolve);
26736 });
26737 };
26738 Observable.prototype._subscribe = function (subscriber) {
26739 var source = this.source;
26740 return source && source.subscribe(subscriber);
26741 };
26742 Observable.prototype[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]] = function () {
26743 return this;
26744 };
26745 Observable.prototype.pipe = function () {
26746 var operations = [];
26747 for (var _i = 0; _i < arguments.length; _i++) {
26748 operations[_i] = arguments[_i];
26749 }
26750 if (operations.length === 0) {
26751 return this;
26752 }
26753 return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipeFromArray"])(operations)(this);
26754 };
26755 Observable.prototype.toPromise = function (promiseCtor) {
26756 var _this = this;
26757 promiseCtor = getPromiseCtor(promiseCtor);
26758 return new promiseCtor(function (resolve, reject) {
26759 var value;
26760 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
26761 });
26762 };
26763 Observable.create = function (subscribe) {
26764 return new Observable(subscribe);
26765 };
26766 return Observable;
26767}());
26768
26769function getPromiseCtor(promiseCtor) {
26770 if (!promiseCtor) {
26771 promiseCtor = _config__WEBPACK_IMPORTED_MODULE_4__["config"].Promise || Promise;
26772 }
26773 if (!promiseCtor) {
26774 throw new Error('no Promise impl found');
26775 }
26776 return promiseCtor;
26777}
26778//# sourceMappingURL=Observable.js.map
26779
26780
26781/***/ }),
26782/* 168 */
26783/***/ (function(module, __webpack_exports__, __webpack_require__) {
26784
26785"use strict";
26786__webpack_require__.r(__webpack_exports__);
26787/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canReportError", function() { return canReportError; });
26788/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
26789/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */
26790
26791function canReportError(observer) {
26792 while (observer) {
26793 var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
26794 if (closed_1 || isStopped) {
26795 return false;
26796 }
26797 else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
26798 observer = destination;
26799 }
26800 else {
26801 observer = null;
26802 }
26803 }
26804 return true;
26805}
26806//# sourceMappingURL=canReportError.js.map
26807
26808
26809/***/ }),
26810/* 169 */
26811/***/ (function(module, __webpack_exports__, __webpack_require__) {
26812
26813"use strict";
26814__webpack_require__.r(__webpack_exports__);
26815/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return Subscriber; });
26816/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SafeSubscriber", function() { return SafeSubscriber; });
26817/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
26818/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(171);
26819/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
26820/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
26821/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(179);
26822/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(173);
26823/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(174);
26824/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */
26825
26826
26827
26828
26829
26830
26831
26832var Subscriber = /*@__PURE__*/ (function (_super) {
26833 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subscriber, _super);
26834 function Subscriber(destinationOrNext, error, complete) {
26835 var _this = _super.call(this) || this;
26836 _this.syncErrorValue = null;
26837 _this.syncErrorThrown = false;
26838 _this.syncErrorThrowable = false;
26839 _this.isStopped = false;
26840 switch (arguments.length) {
26841 case 0:
26842 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
26843 break;
26844 case 1:
26845 if (!destinationOrNext) {
26846 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
26847 break;
26848 }
26849 if (typeof destinationOrNext === 'object') {
26850 if (destinationOrNext instanceof Subscriber) {
26851 _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
26852 _this.destination = destinationOrNext;
26853 destinationOrNext.add(_this);
26854 }
26855 else {
26856 _this.syncErrorThrowable = true;
26857 _this.destination = new SafeSubscriber(_this, destinationOrNext);
26858 }
26859 break;
26860 }
26861 default:
26862 _this.syncErrorThrowable = true;
26863 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
26864 break;
26865 }
26866 return _this;
26867 }
26868 Subscriber.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__["rxSubscriber"]] = function () { return this; };
26869 Subscriber.create = function (next, error, complete) {
26870 var subscriber = new Subscriber(next, error, complete);
26871 subscriber.syncErrorThrowable = false;
26872 return subscriber;
26873 };
26874 Subscriber.prototype.next = function (value) {
26875 if (!this.isStopped) {
26876 this._next(value);
26877 }
26878 };
26879 Subscriber.prototype.error = function (err) {
26880 if (!this.isStopped) {
26881 this.isStopped = true;
26882 this._error(err);
26883 }
26884 };
26885 Subscriber.prototype.complete = function () {
26886 if (!this.isStopped) {
26887 this.isStopped = true;
26888 this._complete();
26889 }
26890 };
26891 Subscriber.prototype.unsubscribe = function () {
26892 if (this.closed) {
26893 return;
26894 }
26895 this.isStopped = true;
26896 _super.prototype.unsubscribe.call(this);
26897 };
26898 Subscriber.prototype._next = function (value) {
26899 this.destination.next(value);
26900 };
26901 Subscriber.prototype._error = function (err) {
26902 this.destination.error(err);
26903 this.unsubscribe();
26904 };
26905 Subscriber.prototype._complete = function () {
26906 this.destination.complete();
26907 this.unsubscribe();
26908 };
26909 Subscriber.prototype._unsubscribeAndRecycle = function () {
26910 var _parentOrParents = this._parentOrParents;
26911 this._parentOrParents = null;
26912 this.unsubscribe();
26913 this.closed = false;
26914 this.isStopped = false;
26915 this._parentOrParents = _parentOrParents;
26916 return this;
26917 };
26918 return Subscriber;
26919}(_Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"]));
26920
26921var SafeSubscriber = /*@__PURE__*/ (function (_super) {
26922 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SafeSubscriber, _super);
26923 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
26924 var _this = _super.call(this) || this;
26925 _this._parentSubscriber = _parentSubscriber;
26926 var next;
26927 var context = _this;
26928 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(observerOrNext)) {
26929 next = observerOrNext;
26930 }
26931 else if (observerOrNext) {
26932 next = observerOrNext.next;
26933 error = observerOrNext.error;
26934 complete = observerOrNext.complete;
26935 if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]) {
26936 context = Object.create(observerOrNext);
26937 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(context.unsubscribe)) {
26938 _this.add(context.unsubscribe.bind(context));
26939 }
26940 context.unsubscribe = _this.unsubscribe.bind(_this);
26941 }
26942 }
26943 _this._context = context;
26944 _this._next = next;
26945 _this._error = error;
26946 _this._complete = complete;
26947 return _this;
26948 }
26949 SafeSubscriber.prototype.next = function (value) {
26950 if (!this.isStopped && this._next) {
26951 var _parentSubscriber = this._parentSubscriber;
26952 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26953 this.__tryOrUnsub(this._next, value);
26954 }
26955 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
26956 this.unsubscribe();
26957 }
26958 }
26959 };
26960 SafeSubscriber.prototype.error = function (err) {
26961 if (!this.isStopped) {
26962 var _parentSubscriber = this._parentSubscriber;
26963 var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling;
26964 if (this._error) {
26965 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26966 this.__tryOrUnsub(this._error, err);
26967 this.unsubscribe();
26968 }
26969 else {
26970 this.__tryOrSetError(_parentSubscriber, this._error, err);
26971 this.unsubscribe();
26972 }
26973 }
26974 else if (!_parentSubscriber.syncErrorThrowable) {
26975 this.unsubscribe();
26976 if (useDeprecatedSynchronousErrorHandling) {
26977 throw err;
26978 }
26979 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26980 }
26981 else {
26982 if (useDeprecatedSynchronousErrorHandling) {
26983 _parentSubscriber.syncErrorValue = err;
26984 _parentSubscriber.syncErrorThrown = true;
26985 }
26986 else {
26987 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26988 }
26989 this.unsubscribe();
26990 }
26991 }
26992 };
26993 SafeSubscriber.prototype.complete = function () {
26994 var _this = this;
26995 if (!this.isStopped) {
26996 var _parentSubscriber = this._parentSubscriber;
26997 if (this._complete) {
26998 var wrappedComplete = function () { return _this._complete.call(_this._context); };
26999 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
27000 this.__tryOrUnsub(wrappedComplete);
27001 this.unsubscribe();
27002 }
27003 else {
27004 this.__tryOrSetError(_parentSubscriber, wrappedComplete);
27005 this.unsubscribe();
27006 }
27007 }
27008 else {
27009 this.unsubscribe();
27010 }
27011 }
27012 };
27013 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
27014 try {
27015 fn.call(this._context, value);
27016 }
27017 catch (err) {
27018 this.unsubscribe();
27019 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
27020 throw err;
27021 }
27022 else {
27023 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
27024 }
27025 }
27026 };
27027 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
27028 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
27029 throw new Error('bad call');
27030 }
27031 try {
27032 fn.call(this._context, value);
27033 }
27034 catch (err) {
27035 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
27036 parent.syncErrorValue = err;
27037 parent.syncErrorThrown = true;
27038 return true;
27039 }
27040 else {
27041 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
27042 return true;
27043 }
27044 }
27045 return false;
27046 };
27047 SafeSubscriber.prototype._unsubscribe = function () {
27048 var _parentSubscriber = this._parentSubscriber;
27049 this._context = null;
27050 this._parentSubscriber = null;
27051 _parentSubscriber.unsubscribe();
27052 };
27053 return SafeSubscriber;
27054}(Subscriber));
27055
27056//# sourceMappingURL=Subscriber.js.map
27057
27058
27059/***/ }),
27060/* 170 */
27061/***/ (function(module, __webpack_exports__, __webpack_require__) {
27062
27063"use strict";
27064__webpack_require__.r(__webpack_exports__);
27065/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
27066/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
27067/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
27068/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
27069/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
27070/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
27071/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
27072/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
27073/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
27074/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
27075/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
27076/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
27077/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
27078/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
27079/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
27080/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
27081/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
27082/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
27083/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
27084/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
27085/*! *****************************************************************************
27086Copyright (c) Microsoft Corporation. All rights reserved.
27087Licensed under the Apache License, Version 2.0 (the "License"); you may not use
27088this file except in compliance with the License. You may obtain a copy of the
27089License at http://www.apache.org/licenses/LICENSE-2.0
27090
27091THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
27092KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
27093WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
27094MERCHANTABLITY OR NON-INFRINGEMENT.
27095
27096See the Apache Version 2.0 License for specific language governing permissions
27097and limitations under the License.
27098***************************************************************************** */
27099/* global Reflect, Promise */
27100
27101var extendStatics = function(d, b) {
27102 extendStatics = Object.setPrototypeOf ||
27103 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27104 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27105 return extendStatics(d, b);
27106};
27107
27108function __extends(d, b) {
27109 extendStatics(d, b);
27110 function __() { this.constructor = d; }
27111 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27112}
27113
27114var __assign = function() {
27115 __assign = Object.assign || function __assign(t) {
27116 for (var s, i = 1, n = arguments.length; i < n; i++) {
27117 s = arguments[i];
27118 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27119 }
27120 return t;
27121 }
27122 return __assign.apply(this, arguments);
27123}
27124
27125function __rest(s, e) {
27126 var t = {};
27127 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
27128 t[p] = s[p];
27129 if (s != null && typeof Object.getOwnPropertySymbols === "function")
27130 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27131 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
27132 t[p[i]] = s[p[i]];
27133 }
27134 return t;
27135}
27136
27137function __decorate(decorators, target, key, desc) {
27138 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27139 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27140 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;
27141 return c > 3 && r && Object.defineProperty(target, key, r), r;
27142}
27143
27144function __param(paramIndex, decorator) {
27145 return function (target, key) { decorator(target, key, paramIndex); }
27146}
27147
27148function __metadata(metadataKey, metadataValue) {
27149 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
27150}
27151
27152function __awaiter(thisArg, _arguments, P, generator) {
27153 return new (P || (P = Promise))(function (resolve, reject) {
27154 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27155 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27156 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
27157 step((generator = generator.apply(thisArg, _arguments || [])).next());
27158 });
27159}
27160
27161function __generator(thisArg, body) {
27162 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27163 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
27164 function verb(n) { return function (v) { return step([n, v]); }; }
27165 function step(op) {
27166 if (f) throw new TypeError("Generator is already executing.");
27167 while (_) try {
27168 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;
27169 if (y = 0, t) op = [op[0] & 2, t.value];
27170 switch (op[0]) {
27171 case 0: case 1: t = op; break;
27172 case 4: _.label++; return { value: op[1], done: false };
27173 case 5: _.label++; y = op[1]; op = [0]; continue;
27174 case 7: op = _.ops.pop(); _.trys.pop(); continue;
27175 default:
27176 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27177 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27178 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
27179 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
27180 if (t[2]) _.ops.pop();
27181 _.trys.pop(); continue;
27182 }
27183 op = body.call(thisArg, _);
27184 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
27185 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27186 }
27187}
27188
27189function __exportStar(m, exports) {
27190 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
27191}
27192
27193function __values(o) {
27194 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
27195 if (m) return m.call(o);
27196 return {
27197 next: function () {
27198 if (o && i >= o.length) o = void 0;
27199 return { value: o && o[i++], done: !o };
27200 }
27201 };
27202}
27203
27204function __read(o, n) {
27205 var m = typeof Symbol === "function" && o[Symbol.iterator];
27206 if (!m) return o;
27207 var i = m.call(o), r, ar = [], e;
27208 try {
27209 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
27210 }
27211 catch (error) { e = { error: error }; }
27212 finally {
27213 try {
27214 if (r && !r.done && (m = i["return"])) m.call(i);
27215 }
27216 finally { if (e) throw e.error; }
27217 }
27218 return ar;
27219}
27220
27221function __spread() {
27222 for (var ar = [], i = 0; i < arguments.length; i++)
27223 ar = ar.concat(__read(arguments[i]));
27224 return ar;
27225}
27226
27227function __spreadArrays() {
27228 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
27229 for (var r = Array(s), k = 0, i = 0; i < il; i++)
27230 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
27231 r[k] = a[j];
27232 return r;
27233};
27234
27235function __await(v) {
27236 return this instanceof __await ? (this.v = v, this) : new __await(v);
27237}
27238
27239function __asyncGenerator(thisArg, _arguments, generator) {
27240 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27241 var g = generator.apply(thisArg, _arguments || []), i, q = [];
27242 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
27243 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); }); }; }
27244 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
27245 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
27246 function fulfill(value) { resume("next", value); }
27247 function reject(value) { resume("throw", value); }
27248 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
27249}
27250
27251function __asyncDelegator(o) {
27252 var i, p;
27253 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
27254 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; }
27255}
27256
27257function __asyncValues(o) {
27258 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27259 var m = o[Symbol.asyncIterator], i;
27260 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);
27261 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); }); }; }
27262 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
27263}
27264
27265function __makeTemplateObject(cooked, raw) {
27266 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
27267 return cooked;
27268};
27269
27270function __importStar(mod) {
27271 if (mod && mod.__esModule) return mod;
27272 var result = {};
27273 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
27274 result.default = mod;
27275 return result;
27276}
27277
27278function __importDefault(mod) {
27279 return (mod && mod.__esModule) ? mod : { default: mod };
27280}
27281
27282
27283/***/ }),
27284/* 171 */
27285/***/ (function(module, __webpack_exports__, __webpack_require__) {
27286
27287"use strict";
27288__webpack_require__.r(__webpack_exports__);
27289/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunction", function() { return isFunction; });
27290/** PURE_IMPORTS_START PURE_IMPORTS_END */
27291function isFunction(x) {
27292 return typeof x === 'function';
27293}
27294//# sourceMappingURL=isFunction.js.map
27295
27296
27297/***/ }),
27298/* 172 */
27299/***/ (function(module, __webpack_exports__, __webpack_require__) {
27300
27301"use strict";
27302__webpack_require__.r(__webpack_exports__);
27303/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
27304/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(173);
27305/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
27306/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */
27307
27308
27309var empty = {
27310 closed: true,
27311 next: function (value) { },
27312 error: function (err) {
27313 if (_config__WEBPACK_IMPORTED_MODULE_0__["config"].useDeprecatedSynchronousErrorHandling) {
27314 throw err;
27315 }
27316 else {
27317 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__["hostReportError"])(err);
27318 }
27319 },
27320 complete: function () { }
27321};
27322//# sourceMappingURL=Observer.js.map
27323
27324
27325/***/ }),
27326/* 173 */
27327/***/ (function(module, __webpack_exports__, __webpack_require__) {
27328
27329"use strict";
27330__webpack_require__.r(__webpack_exports__);
27331/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
27332/** PURE_IMPORTS_START PURE_IMPORTS_END */
27333var _enable_super_gross_mode_that_will_cause_bad_things = false;
27334var config = {
27335 Promise: undefined,
27336 set useDeprecatedSynchronousErrorHandling(value) {
27337 if (value) {
27338 var error = /*@__PURE__*/ new Error();
27339 /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
27340 }
27341 else if (_enable_super_gross_mode_that_will_cause_bad_things) {
27342 /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');
27343 }
27344 _enable_super_gross_mode_that_will_cause_bad_things = value;
27345 },
27346 get useDeprecatedSynchronousErrorHandling() {
27347 return _enable_super_gross_mode_that_will_cause_bad_things;
27348 },
27349};
27350//# sourceMappingURL=config.js.map
27351
27352
27353/***/ }),
27354/* 174 */
27355/***/ (function(module, __webpack_exports__, __webpack_require__) {
27356
27357"use strict";
27358__webpack_require__.r(__webpack_exports__);
27359/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hostReportError", function() { return hostReportError; });
27360/** PURE_IMPORTS_START PURE_IMPORTS_END */
27361function hostReportError(err) {
27362 setTimeout(function () { throw err; }, 0);
27363}
27364//# sourceMappingURL=hostReportError.js.map
27365
27366
27367/***/ }),
27368/* 175 */
27369/***/ (function(module, __webpack_exports__, __webpack_require__) {
27370
27371"use strict";
27372__webpack_require__.r(__webpack_exports__);
27373/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return Subscription; });
27374/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
27375/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
27376/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
27377/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(178);
27378/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
27379
27380
27381
27382
27383var Subscription = /*@__PURE__*/ (function () {
27384 function Subscription(unsubscribe) {
27385 this.closed = false;
27386 this._parentOrParents = null;
27387 this._subscriptions = null;
27388 if (unsubscribe) {
27389 this._unsubscribe = unsubscribe;
27390 }
27391 }
27392 Subscription.prototype.unsubscribe = function () {
27393 var errors;
27394 if (this.closed) {
27395 return;
27396 }
27397 var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
27398 this.closed = true;
27399 this._parentOrParents = null;
27400 this._subscriptions = null;
27401 if (_parentOrParents instanceof Subscription) {
27402 _parentOrParents.remove(this);
27403 }
27404 else if (_parentOrParents !== null) {
27405 for (var index = 0; index < _parentOrParents.length; ++index) {
27406 var parent_1 = _parentOrParents[index];
27407 parent_1.remove(this);
27408 }
27409 }
27410 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(_unsubscribe)) {
27411 try {
27412 _unsubscribe.call(this);
27413 }
27414 catch (e) {
27415 errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? flattenUnsubscriptionErrors(e.errors) : [e];
27416 }
27417 }
27418 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(_subscriptions)) {
27419 var index = -1;
27420 var len = _subscriptions.length;
27421 while (++index < len) {
27422 var sub = _subscriptions[index];
27423 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_1__["isObject"])(sub)) {
27424 try {
27425 sub.unsubscribe();
27426 }
27427 catch (e) {
27428 errors = errors || [];
27429 if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) {
27430 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
27431 }
27432 else {
27433 errors.push(e);
27434 }
27435 }
27436 }
27437 }
27438 }
27439 if (errors) {
27440 throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"](errors);
27441 }
27442 };
27443 Subscription.prototype.add = function (teardown) {
27444 var subscription = teardown;
27445 if (!teardown) {
27446 return Subscription.EMPTY;
27447 }
27448 switch (typeof teardown) {
27449 case 'function':
27450 subscription = new Subscription(teardown);
27451 case 'object':
27452 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
27453 return subscription;
27454 }
27455 else if (this.closed) {
27456 subscription.unsubscribe();
27457 return subscription;
27458 }
27459 else if (!(subscription instanceof Subscription)) {
27460 var tmp = subscription;
27461 subscription = new Subscription();
27462 subscription._subscriptions = [tmp];
27463 }
27464 break;
27465 default: {
27466 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
27467 }
27468 }
27469 var _parentOrParents = subscription._parentOrParents;
27470 if (_parentOrParents === null) {
27471 subscription._parentOrParents = this;
27472 }
27473 else if (_parentOrParents instanceof Subscription) {
27474 if (_parentOrParents === this) {
27475 return subscription;
27476 }
27477 subscription._parentOrParents = [_parentOrParents, this];
27478 }
27479 else if (_parentOrParents.indexOf(this) === -1) {
27480 _parentOrParents.push(this);
27481 }
27482 else {
27483 return subscription;
27484 }
27485 var subscriptions = this._subscriptions;
27486 if (subscriptions === null) {
27487 this._subscriptions = [subscription];
27488 }
27489 else {
27490 subscriptions.push(subscription);
27491 }
27492 return subscription;
27493 };
27494 Subscription.prototype.remove = function (subscription) {
27495 var subscriptions = this._subscriptions;
27496 if (subscriptions) {
27497 var subscriptionIndex = subscriptions.indexOf(subscription);
27498 if (subscriptionIndex !== -1) {
27499 subscriptions.splice(subscriptionIndex, 1);
27500 }
27501 }
27502 };
27503 Subscription.EMPTY = (function (empty) {
27504 empty.closed = true;
27505 return empty;
27506 }(new Subscription()));
27507 return Subscription;
27508}());
27509
27510function flattenUnsubscriptionErrors(errors) {
27511 return errors.reduce(function (errs, err) { return errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) ? err.errors : err); }, []);
27512}
27513//# sourceMappingURL=Subscription.js.map
27514
27515
27516/***/ }),
27517/* 176 */
27518/***/ (function(module, __webpack_exports__, __webpack_require__) {
27519
27520"use strict";
27521__webpack_require__.r(__webpack_exports__);
27522/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; });
27523/** PURE_IMPORTS_START PURE_IMPORTS_END */
27524var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();
27525//# sourceMappingURL=isArray.js.map
27526
27527
27528/***/ }),
27529/* 177 */
27530/***/ (function(module, __webpack_exports__, __webpack_require__) {
27531
27532"use strict";
27533__webpack_require__.r(__webpack_exports__);
27534/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
27535/** PURE_IMPORTS_START PURE_IMPORTS_END */
27536function isObject(x) {
27537 return x !== null && typeof x === 'object';
27538}
27539//# sourceMappingURL=isObject.js.map
27540
27541
27542/***/ }),
27543/* 178 */
27544/***/ (function(module, __webpack_exports__, __webpack_require__) {
27545
27546"use strict";
27547__webpack_require__.r(__webpack_exports__);
27548/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return UnsubscriptionError; });
27549/** PURE_IMPORTS_START PURE_IMPORTS_END */
27550var UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {
27551 function UnsubscriptionErrorImpl(errors) {
27552 Error.call(this);
27553 this.message = errors ?
27554 errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : '';
27555 this.name = 'UnsubscriptionError';
27556 this.errors = errors;
27557 return this;
27558 }
27559 UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
27560 return UnsubscriptionErrorImpl;
27561})();
27562var UnsubscriptionError = UnsubscriptionErrorImpl;
27563//# sourceMappingURL=UnsubscriptionError.js.map
27564
27565
27566/***/ }),
27567/* 179 */
27568/***/ (function(module, __webpack_exports__, __webpack_require__) {
27569
27570"use strict";
27571__webpack_require__.r(__webpack_exports__);
27572/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rxSubscriber", function() { return rxSubscriber; });
27573/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$rxSubscriber", function() { return $$rxSubscriber; });
27574/** PURE_IMPORTS_START PURE_IMPORTS_END */
27575var rxSubscriber = /*@__PURE__*/ (function () {
27576 return typeof Symbol === 'function'
27577 ? /*@__PURE__*/ Symbol('rxSubscriber')
27578 : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();
27579})();
27580var $$rxSubscriber = rxSubscriber;
27581//# sourceMappingURL=rxSubscriber.js.map
27582
27583
27584/***/ }),
27585/* 180 */
27586/***/ (function(module, __webpack_exports__, __webpack_require__) {
27587
27588"use strict";
27589__webpack_require__.r(__webpack_exports__);
27590/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toSubscriber", function() { return toSubscriber; });
27591/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
27592/* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
27593/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
27594/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */
27595
27596
27597
27598function toSubscriber(nextOrObserver, error, complete) {
27599 if (nextOrObserver) {
27600 if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
27601 return nextOrObserver;
27602 }
27603 if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]) {
27604 return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]();
27605 }
27606 }
27607 if (!nextOrObserver && !error && !complete) {
27608 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](_Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]);
27609 }
27610 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](nextOrObserver, error, complete);
27611}
27612//# sourceMappingURL=toSubscriber.js.map
27613
27614
27615/***/ }),
27616/* 181 */
27617/***/ (function(module, __webpack_exports__, __webpack_require__) {
27618
27619"use strict";
27620__webpack_require__.r(__webpack_exports__);
27621/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return observable; });
27622/** PURE_IMPORTS_START PURE_IMPORTS_END */
27623var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();
27624//# sourceMappingURL=observable.js.map
27625
27626
27627/***/ }),
27628/* 182 */
27629/***/ (function(module, __webpack_exports__, __webpack_require__) {
27630
27631"use strict";
27632__webpack_require__.r(__webpack_exports__);
27633/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return pipe; });
27634/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipeFromArray", function() { return pipeFromArray; });
27635/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(183);
27636/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */
27637
27638function pipe() {
27639 var fns = [];
27640 for (var _i = 0; _i < arguments.length; _i++) {
27641 fns[_i] = arguments[_i];
27642 }
27643 return pipeFromArray(fns);
27644}
27645function pipeFromArray(fns) {
27646 if (fns.length === 0) {
27647 return _identity__WEBPACK_IMPORTED_MODULE_0__["identity"];
27648 }
27649 if (fns.length === 1) {
27650 return fns[0];
27651 }
27652 return function piped(input) {
27653 return fns.reduce(function (prev, fn) { return fn(prev); }, input);
27654 };
27655}
27656//# sourceMappingURL=pipe.js.map
27657
27658
27659/***/ }),
27660/* 183 */
27661/***/ (function(module, __webpack_exports__, __webpack_require__) {
27662
27663"use strict";
27664__webpack_require__.r(__webpack_exports__);
27665/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });
27666/** PURE_IMPORTS_START PURE_IMPORTS_END */
27667function identity(x) {
27668 return x;
27669}
27670//# sourceMappingURL=identity.js.map
27671
27672
27673/***/ }),
27674/* 184 */
27675/***/ (function(module, __webpack_exports__, __webpack_require__) {
27676
27677"use strict";
27678__webpack_require__.r(__webpack_exports__);
27679/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return ConnectableObservable; });
27680/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectableObservableDescriptor", function() { return connectableObservableDescriptor; });
27681/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27682/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
27683/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
27684/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
27685/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(175);
27686/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(188);
27687/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */
27688
27689
27690
27691
27692
27693
27694var ConnectableObservable = /*@__PURE__*/ (function (_super) {
27695 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableObservable, _super);
27696 function ConnectableObservable(source, subjectFactory) {
27697 var _this = _super.call(this) || this;
27698 _this.source = source;
27699 _this.subjectFactory = subjectFactory;
27700 _this._refCount = 0;
27701 _this._isComplete = false;
27702 return _this;
27703 }
27704 ConnectableObservable.prototype._subscribe = function (subscriber) {
27705 return this.getSubject().subscribe(subscriber);
27706 };
27707 ConnectableObservable.prototype.getSubject = function () {
27708 var subject = this._subject;
27709 if (!subject || subject.isStopped) {
27710 this._subject = this.subjectFactory();
27711 }
27712 return this._subject;
27713 };
27714 ConnectableObservable.prototype.connect = function () {
27715 var connection = this._connection;
27716 if (!connection) {
27717 this._isComplete = false;
27718 connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"]();
27719 connection.add(this.source
27720 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
27721 if (connection.closed) {
27722 this._connection = null;
27723 connection = _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY;
27724 }
27725 }
27726 return connection;
27727 };
27728 ConnectableObservable.prototype.refCount = function () {
27729 return Object(_operators_refCount__WEBPACK_IMPORTED_MODULE_5__["refCount"])()(this);
27730 };
27731 return ConnectableObservable;
27732}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
27733
27734var connectableObservableDescriptor = /*@__PURE__*/ (function () {
27735 var connectableProto = ConnectableObservable.prototype;
27736 return {
27737 operator: { value: null },
27738 _refCount: { value: 0, writable: true },
27739 _subject: { value: null, writable: true },
27740 _connection: { value: null, writable: true },
27741 _subscribe: { value: connectableProto._subscribe },
27742 _isComplete: { value: connectableProto._isComplete, writable: true },
27743 getSubject: { value: connectableProto.getSubject },
27744 connect: { value: connectableProto.connect },
27745 refCount: { value: connectableProto.refCount }
27746 };
27747})();
27748var ConnectableSubscriber = /*@__PURE__*/ (function (_super) {
27749 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableSubscriber, _super);
27750 function ConnectableSubscriber(destination, connectable) {
27751 var _this = _super.call(this, destination) || this;
27752 _this.connectable = connectable;
27753 return _this;
27754 }
27755 ConnectableSubscriber.prototype._error = function (err) {
27756 this._unsubscribe();
27757 _super.prototype._error.call(this, err);
27758 };
27759 ConnectableSubscriber.prototype._complete = function () {
27760 this.connectable._isComplete = true;
27761 this._unsubscribe();
27762 _super.prototype._complete.call(this);
27763 };
27764 ConnectableSubscriber.prototype._unsubscribe = function () {
27765 var connectable = this.connectable;
27766 if (connectable) {
27767 this.connectable = null;
27768 var connection = connectable._connection;
27769 connectable._refCount = 0;
27770 connectable._subject = null;
27771 connectable._connection = null;
27772 if (connection) {
27773 connection.unsubscribe();
27774 }
27775 }
27776 };
27777 return ConnectableSubscriber;
27778}(_Subject__WEBPACK_IMPORTED_MODULE_1__["SubjectSubscriber"]));
27779var RefCountOperator = /*@__PURE__*/ (function () {
27780 function RefCountOperator(connectable) {
27781 this.connectable = connectable;
27782 }
27783 RefCountOperator.prototype.call = function (subscriber, source) {
27784 var connectable = this.connectable;
27785 connectable._refCount++;
27786 var refCounter = new RefCountSubscriber(subscriber, connectable);
27787 var subscription = source.subscribe(refCounter);
27788 if (!refCounter.closed) {
27789 refCounter.connection = connectable.connect();
27790 }
27791 return subscription;
27792 };
27793 return RefCountOperator;
27794}());
27795var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
27796 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
27797 function RefCountSubscriber(destination, connectable) {
27798 var _this = _super.call(this, destination) || this;
27799 _this.connectable = connectable;
27800 return _this;
27801 }
27802 RefCountSubscriber.prototype._unsubscribe = function () {
27803 var connectable = this.connectable;
27804 if (!connectable) {
27805 this.connection = null;
27806 return;
27807 }
27808 this.connectable = null;
27809 var refCount = connectable._refCount;
27810 if (refCount <= 0) {
27811 this.connection = null;
27812 return;
27813 }
27814 connectable._refCount = refCount - 1;
27815 if (refCount > 1) {
27816 this.connection = null;
27817 return;
27818 }
27819 var connection = this.connection;
27820 var sharedConnection = connectable._connection;
27821 this.connection = null;
27822 if (sharedConnection && (!connection || sharedConnection === connection)) {
27823 sharedConnection.unsubscribe();
27824 }
27825 };
27826 return RefCountSubscriber;
27827}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
27828//# sourceMappingURL=ConnectableObservable.js.map
27829
27830
27831/***/ }),
27832/* 185 */
27833/***/ (function(module, __webpack_exports__, __webpack_require__) {
27834
27835"use strict";
27836__webpack_require__.r(__webpack_exports__);
27837/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscriber", function() { return SubjectSubscriber; });
27838/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return Subject; });
27839/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnonymousSubject", function() { return AnonymousSubject; });
27840/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27841/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
27842/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
27843/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
27844/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(186);
27845/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(187);
27846/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(179);
27847/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */
27848
27849
27850
27851
27852
27853
27854
27855var SubjectSubscriber = /*@__PURE__*/ (function (_super) {
27856 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscriber, _super);
27857 function SubjectSubscriber(destination) {
27858 var _this = _super.call(this, destination) || this;
27859 _this.destination = destination;
27860 return _this;
27861 }
27862 return SubjectSubscriber;
27863}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
27864
27865var Subject = /*@__PURE__*/ (function (_super) {
27866 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subject, _super);
27867 function Subject() {
27868 var _this = _super.call(this) || this;
27869 _this.observers = [];
27870 _this.closed = false;
27871 _this.isStopped = false;
27872 _this.hasError = false;
27873 _this.thrownError = null;
27874 return _this;
27875 }
27876 Subject.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__["rxSubscriber"]] = function () {
27877 return new SubjectSubscriber(this);
27878 };
27879 Subject.prototype.lift = function (operator) {
27880 var subject = new AnonymousSubject(this, this);
27881 subject.operator = operator;
27882 return subject;
27883 };
27884 Subject.prototype.next = function (value) {
27885 if (this.closed) {
27886 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27887 }
27888 if (!this.isStopped) {
27889 var observers = this.observers;
27890 var len = observers.length;
27891 var copy = observers.slice();
27892 for (var i = 0; i < len; i++) {
27893 copy[i].next(value);
27894 }
27895 }
27896 };
27897 Subject.prototype.error = function (err) {
27898 if (this.closed) {
27899 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27900 }
27901 this.hasError = true;
27902 this.thrownError = err;
27903 this.isStopped = true;
27904 var observers = this.observers;
27905 var len = observers.length;
27906 var copy = observers.slice();
27907 for (var i = 0; i < len; i++) {
27908 copy[i].error(err);
27909 }
27910 this.observers.length = 0;
27911 };
27912 Subject.prototype.complete = function () {
27913 if (this.closed) {
27914 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27915 }
27916 this.isStopped = true;
27917 var observers = this.observers;
27918 var len = observers.length;
27919 var copy = observers.slice();
27920 for (var i = 0; i < len; i++) {
27921 copy[i].complete();
27922 }
27923 this.observers.length = 0;
27924 };
27925 Subject.prototype.unsubscribe = function () {
27926 this.isStopped = true;
27927 this.closed = true;
27928 this.observers = null;
27929 };
27930 Subject.prototype._trySubscribe = function (subscriber) {
27931 if (this.closed) {
27932 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27933 }
27934 else {
27935 return _super.prototype._trySubscribe.call(this, subscriber);
27936 }
27937 };
27938 Subject.prototype._subscribe = function (subscriber) {
27939 if (this.closed) {
27940 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27941 }
27942 else if (this.hasError) {
27943 subscriber.error(this.thrownError);
27944 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27945 }
27946 else if (this.isStopped) {
27947 subscriber.complete();
27948 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27949 }
27950 else {
27951 this.observers.push(subscriber);
27952 return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__["SubjectSubscription"](this, subscriber);
27953 }
27954 };
27955 Subject.prototype.asObservable = function () {
27956 var observable = new _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]();
27957 observable.source = this;
27958 return observable;
27959 };
27960 Subject.create = function (destination, source) {
27961 return new AnonymousSubject(destination, source);
27962 };
27963 return Subject;
27964}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
27965
27966var AnonymousSubject = /*@__PURE__*/ (function (_super) {
27967 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnonymousSubject, _super);
27968 function AnonymousSubject(destination, source) {
27969 var _this = _super.call(this) || this;
27970 _this.destination = destination;
27971 _this.source = source;
27972 return _this;
27973 }
27974 AnonymousSubject.prototype.next = function (value) {
27975 var destination = this.destination;
27976 if (destination && destination.next) {
27977 destination.next(value);
27978 }
27979 };
27980 AnonymousSubject.prototype.error = function (err) {
27981 var destination = this.destination;
27982 if (destination && destination.error) {
27983 this.destination.error(err);
27984 }
27985 };
27986 AnonymousSubject.prototype.complete = function () {
27987 var destination = this.destination;
27988 if (destination && destination.complete) {
27989 this.destination.complete();
27990 }
27991 };
27992 AnonymousSubject.prototype._subscribe = function (subscriber) {
27993 var source = this.source;
27994 if (source) {
27995 return this.source.subscribe(subscriber);
27996 }
27997 else {
27998 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27999 }
28000 };
28001 return AnonymousSubject;
28002}(Subject));
28003
28004//# sourceMappingURL=Subject.js.map
28005
28006
28007/***/ }),
28008/* 186 */
28009/***/ (function(module, __webpack_exports__, __webpack_require__) {
28010
28011"use strict";
28012__webpack_require__.r(__webpack_exports__);
28013/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return ObjectUnsubscribedError; });
28014/** PURE_IMPORTS_START PURE_IMPORTS_END */
28015var ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {
28016 function ObjectUnsubscribedErrorImpl() {
28017 Error.call(this);
28018 this.message = 'object unsubscribed';
28019 this.name = 'ObjectUnsubscribedError';
28020 return this;
28021 }
28022 ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
28023 return ObjectUnsubscribedErrorImpl;
28024})();
28025var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
28026//# sourceMappingURL=ObjectUnsubscribedError.js.map
28027
28028
28029/***/ }),
28030/* 187 */
28031/***/ (function(module, __webpack_exports__, __webpack_require__) {
28032
28033"use strict";
28034__webpack_require__.r(__webpack_exports__);
28035/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscription", function() { return SubjectSubscription; });
28036/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28037/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
28038/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
28039
28040
28041var SubjectSubscription = /*@__PURE__*/ (function (_super) {
28042 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscription, _super);
28043 function SubjectSubscription(subject, subscriber) {
28044 var _this = _super.call(this) || this;
28045 _this.subject = subject;
28046 _this.subscriber = subscriber;
28047 _this.closed = false;
28048 return _this;
28049 }
28050 SubjectSubscription.prototype.unsubscribe = function () {
28051 if (this.closed) {
28052 return;
28053 }
28054 this.closed = true;
28055 var subject = this.subject;
28056 var observers = subject.observers;
28057 this.subject = null;
28058 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
28059 return;
28060 }
28061 var subscriberIndex = observers.indexOf(this.subscriber);
28062 if (subscriberIndex !== -1) {
28063 observers.splice(subscriberIndex, 1);
28064 }
28065 };
28066 return SubjectSubscription;
28067}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
28068
28069//# sourceMappingURL=SubjectSubscription.js.map
28070
28071
28072/***/ }),
28073/* 188 */
28074/***/ (function(module, __webpack_exports__, __webpack_require__) {
28075
28076"use strict";
28077__webpack_require__.r(__webpack_exports__);
28078/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return refCount; });
28079/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28080/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
28081/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
28082
28083
28084function refCount() {
28085 return function refCountOperatorFunction(source) {
28086 return source.lift(new RefCountOperator(source));
28087 };
28088}
28089var RefCountOperator = /*@__PURE__*/ (function () {
28090 function RefCountOperator(connectable) {
28091 this.connectable = connectable;
28092 }
28093 RefCountOperator.prototype.call = function (subscriber, source) {
28094 var connectable = this.connectable;
28095 connectable._refCount++;
28096 var refCounter = new RefCountSubscriber(subscriber, connectable);
28097 var subscription = source.subscribe(refCounter);
28098 if (!refCounter.closed) {
28099 refCounter.connection = connectable.connect();
28100 }
28101 return subscription;
28102 };
28103 return RefCountOperator;
28104}());
28105var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
28106 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
28107 function RefCountSubscriber(destination, connectable) {
28108 var _this = _super.call(this, destination) || this;
28109 _this.connectable = connectable;
28110 return _this;
28111 }
28112 RefCountSubscriber.prototype._unsubscribe = function () {
28113 var connectable = this.connectable;
28114 if (!connectable) {
28115 this.connection = null;
28116 return;
28117 }
28118 this.connectable = null;
28119 var refCount = connectable._refCount;
28120 if (refCount <= 0) {
28121 this.connection = null;
28122 return;
28123 }
28124 connectable._refCount = refCount - 1;
28125 if (refCount > 1) {
28126 this.connection = null;
28127 return;
28128 }
28129 var connection = this.connection;
28130 var sharedConnection = connectable._connection;
28131 this.connection = null;
28132 if (sharedConnection && (!connection || sharedConnection === connection)) {
28133 sharedConnection.unsubscribe();
28134 }
28135 };
28136 return RefCountSubscriber;
28137}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28138//# sourceMappingURL=refCount.js.map
28139
28140
28141/***/ }),
28142/* 189 */
28143/***/ (function(module, __webpack_exports__, __webpack_require__) {
28144
28145"use strict";
28146__webpack_require__.r(__webpack_exports__);
28147/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return groupBy; });
28148/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return GroupedObservable; });
28149/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28150/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
28151/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
28152/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(167);
28153/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
28154/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription,_Observable,_Subject PURE_IMPORTS_END */
28155
28156
28157
28158
28159
28160function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
28161 return function (source) {
28162 return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
28163 };
28164}
28165var GroupByOperator = /*@__PURE__*/ (function () {
28166 function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
28167 this.keySelector = keySelector;
28168 this.elementSelector = elementSelector;
28169 this.durationSelector = durationSelector;
28170 this.subjectSelector = subjectSelector;
28171 }
28172 GroupByOperator.prototype.call = function (subscriber, source) {
28173 return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
28174 };
28175 return GroupByOperator;
28176}());
28177var GroupBySubscriber = /*@__PURE__*/ (function (_super) {
28178 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupBySubscriber, _super);
28179 function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
28180 var _this = _super.call(this, destination) || this;
28181 _this.keySelector = keySelector;
28182 _this.elementSelector = elementSelector;
28183 _this.durationSelector = durationSelector;
28184 _this.subjectSelector = subjectSelector;
28185 _this.groups = null;
28186 _this.attemptedToUnsubscribe = false;
28187 _this.count = 0;
28188 return _this;
28189 }
28190 GroupBySubscriber.prototype._next = function (value) {
28191 var key;
28192 try {
28193 key = this.keySelector(value);
28194 }
28195 catch (err) {
28196 this.error(err);
28197 return;
28198 }
28199 this._group(value, key);
28200 };
28201 GroupBySubscriber.prototype._group = function (value, key) {
28202 var groups = this.groups;
28203 if (!groups) {
28204 groups = this.groups = new Map();
28205 }
28206 var group = groups.get(key);
28207 var element;
28208 if (this.elementSelector) {
28209 try {
28210 element = this.elementSelector(value);
28211 }
28212 catch (err) {
28213 this.error(err);
28214 }
28215 }
28216 else {
28217 element = value;
28218 }
28219 if (!group) {
28220 group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]());
28221 groups.set(key, group);
28222 var groupedObservable = new GroupedObservable(key, group, this);
28223 this.destination.next(groupedObservable);
28224 if (this.durationSelector) {
28225 var duration = void 0;
28226 try {
28227 duration = this.durationSelector(new GroupedObservable(key, group));
28228 }
28229 catch (err) {
28230 this.error(err);
28231 return;
28232 }
28233 this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
28234 }
28235 }
28236 if (!group.closed) {
28237 group.next(element);
28238 }
28239 };
28240 GroupBySubscriber.prototype._error = function (err) {
28241 var groups = this.groups;
28242 if (groups) {
28243 groups.forEach(function (group, key) {
28244 group.error(err);
28245 });
28246 groups.clear();
28247 }
28248 this.destination.error(err);
28249 };
28250 GroupBySubscriber.prototype._complete = function () {
28251 var groups = this.groups;
28252 if (groups) {
28253 groups.forEach(function (group, key) {
28254 group.complete();
28255 });
28256 groups.clear();
28257 }
28258 this.destination.complete();
28259 };
28260 GroupBySubscriber.prototype.removeGroup = function (key) {
28261 this.groups.delete(key);
28262 };
28263 GroupBySubscriber.prototype.unsubscribe = function () {
28264 if (!this.closed) {
28265 this.attemptedToUnsubscribe = true;
28266 if (this.count === 0) {
28267 _super.prototype.unsubscribe.call(this);
28268 }
28269 }
28270 };
28271 return GroupBySubscriber;
28272}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28273var GroupDurationSubscriber = /*@__PURE__*/ (function (_super) {
28274 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupDurationSubscriber, _super);
28275 function GroupDurationSubscriber(key, group, parent) {
28276 var _this = _super.call(this, group) || this;
28277 _this.key = key;
28278 _this.group = group;
28279 _this.parent = parent;
28280 return _this;
28281 }
28282 GroupDurationSubscriber.prototype._next = function (value) {
28283 this.complete();
28284 };
28285 GroupDurationSubscriber.prototype._unsubscribe = function () {
28286 var _a = this, parent = _a.parent, key = _a.key;
28287 this.key = this.parent = null;
28288 if (parent) {
28289 parent.removeGroup(key);
28290 }
28291 };
28292 return GroupDurationSubscriber;
28293}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28294var GroupedObservable = /*@__PURE__*/ (function (_super) {
28295 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupedObservable, _super);
28296 function GroupedObservable(key, groupSubject, refCountSubscription) {
28297 var _this = _super.call(this) || this;
28298 _this.key = key;
28299 _this.groupSubject = groupSubject;
28300 _this.refCountSubscription = refCountSubscription;
28301 return _this;
28302 }
28303 GroupedObservable.prototype._subscribe = function (subscriber) {
28304 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
28305 var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
28306 if (refCountSubscription && !refCountSubscription.closed) {
28307 subscription.add(new InnerRefCountSubscription(refCountSubscription));
28308 }
28309 subscription.add(groupSubject.subscribe(subscriber));
28310 return subscription;
28311 };
28312 return GroupedObservable;
28313}(_Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"]));
28314
28315var InnerRefCountSubscription = /*@__PURE__*/ (function (_super) {
28316 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerRefCountSubscription, _super);
28317 function InnerRefCountSubscription(parent) {
28318 var _this = _super.call(this) || this;
28319 _this.parent = parent;
28320 parent.count++;
28321 return _this;
28322 }
28323 InnerRefCountSubscription.prototype.unsubscribe = function () {
28324 var parent = this.parent;
28325 if (!parent.closed && !this.closed) {
28326 _super.prototype.unsubscribe.call(this);
28327 parent.count -= 1;
28328 if (parent.count === 0 && parent.attemptedToUnsubscribe) {
28329 parent.unsubscribe();
28330 }
28331 }
28332 };
28333 return InnerRefCountSubscription;
28334}(_Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]));
28335//# sourceMappingURL=groupBy.js.map
28336
28337
28338/***/ }),
28339/* 190 */
28340/***/ (function(module, __webpack_exports__, __webpack_require__) {
28341
28342"use strict";
28343__webpack_require__.r(__webpack_exports__);
28344/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return BehaviorSubject; });
28345/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28346/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
28347/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
28348/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */
28349
28350
28351
28352var BehaviorSubject = /*@__PURE__*/ (function (_super) {
28353 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BehaviorSubject, _super);
28354 function BehaviorSubject(_value) {
28355 var _this = _super.call(this) || this;
28356 _this._value = _value;
28357 return _this;
28358 }
28359 Object.defineProperty(BehaviorSubject.prototype, "value", {
28360 get: function () {
28361 return this.getValue();
28362 },
28363 enumerable: true,
28364 configurable: true
28365 });
28366 BehaviorSubject.prototype._subscribe = function (subscriber) {
28367 var subscription = _super.prototype._subscribe.call(this, subscriber);
28368 if (subscription && !subscription.closed) {
28369 subscriber.next(this._value);
28370 }
28371 return subscription;
28372 };
28373 BehaviorSubject.prototype.getValue = function () {
28374 if (this.hasError) {
28375 throw this.thrownError;
28376 }
28377 else if (this.closed) {
28378 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__["ObjectUnsubscribedError"]();
28379 }
28380 else {
28381 return this._value;
28382 }
28383 };
28384 BehaviorSubject.prototype.next = function (value) {
28385 _super.prototype.next.call(this, this._value = value);
28386 };
28387 return BehaviorSubject;
28388}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
28389
28390//# sourceMappingURL=BehaviorSubject.js.map
28391
28392
28393/***/ }),
28394/* 191 */
28395/***/ (function(module, __webpack_exports__, __webpack_require__) {
28396
28397"use strict";
28398__webpack_require__.r(__webpack_exports__);
28399/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return ReplaySubject; });
28400/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28401/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
28402/* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(192);
28403/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
28404/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(199);
28405/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(186);
28406/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(187);
28407/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */
28408
28409
28410
28411
28412
28413
28414
28415var ReplaySubject = /*@__PURE__*/ (function (_super) {
28416 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ReplaySubject, _super);
28417 function ReplaySubject(bufferSize, windowTime, scheduler) {
28418 if (bufferSize === void 0) {
28419 bufferSize = Number.POSITIVE_INFINITY;
28420 }
28421 if (windowTime === void 0) {
28422 windowTime = Number.POSITIVE_INFINITY;
28423 }
28424 var _this = _super.call(this) || this;
28425 _this.scheduler = scheduler;
28426 _this._events = [];
28427 _this._infiniteTimeWindow = false;
28428 _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
28429 _this._windowTime = windowTime < 1 ? 1 : windowTime;
28430 if (windowTime === Number.POSITIVE_INFINITY) {
28431 _this._infiniteTimeWindow = true;
28432 _this.next = _this.nextInfiniteTimeWindow;
28433 }
28434 else {
28435 _this.next = _this.nextTimeWindow;
28436 }
28437 return _this;
28438 }
28439 ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
28440 var _events = this._events;
28441 _events.push(value);
28442 if (_events.length > this._bufferSize) {
28443 _events.shift();
28444 }
28445 _super.prototype.next.call(this, value);
28446 };
28447 ReplaySubject.prototype.nextTimeWindow = function (value) {
28448 this._events.push(new ReplayEvent(this._getNow(), value));
28449 this._trimBufferThenGetEvents();
28450 _super.prototype.next.call(this, value);
28451 };
28452 ReplaySubject.prototype._subscribe = function (subscriber) {
28453 var _infiniteTimeWindow = this._infiniteTimeWindow;
28454 var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
28455 var scheduler = this.scheduler;
28456 var len = _events.length;
28457 var subscription;
28458 if (this.closed) {
28459 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__["ObjectUnsubscribedError"]();
28460 }
28461 else if (this.isStopped || this.hasError) {
28462 subscription = _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
28463 }
28464 else {
28465 this.observers.push(subscriber);
28466 subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__["SubjectSubscription"](this, subscriber);
28467 }
28468 if (scheduler) {
28469 subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__["ObserveOnSubscriber"](subscriber, scheduler));
28470 }
28471 if (_infiniteTimeWindow) {
28472 for (var i = 0; i < len && !subscriber.closed; i++) {
28473 subscriber.next(_events[i]);
28474 }
28475 }
28476 else {
28477 for (var i = 0; i < len && !subscriber.closed; i++) {
28478 subscriber.next(_events[i].value);
28479 }
28480 }
28481 if (this.hasError) {
28482 subscriber.error(this.thrownError);
28483 }
28484 else if (this.isStopped) {
28485 subscriber.complete();
28486 }
28487 return subscription;
28488 };
28489 ReplaySubject.prototype._getNow = function () {
28490 return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__["queue"]).now();
28491 };
28492 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
28493 var now = this._getNow();
28494 var _bufferSize = this._bufferSize;
28495 var _windowTime = this._windowTime;
28496 var _events = this._events;
28497 var eventsCount = _events.length;
28498 var spliceCount = 0;
28499 while (spliceCount < eventsCount) {
28500 if ((now - _events[spliceCount].time) < _windowTime) {
28501 break;
28502 }
28503 spliceCount++;
28504 }
28505 if (eventsCount > _bufferSize) {
28506 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
28507 }
28508 if (spliceCount > 0) {
28509 _events.splice(0, spliceCount);
28510 }
28511 return _events;
28512 };
28513 return ReplaySubject;
28514}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
28515
28516var ReplayEvent = /*@__PURE__*/ (function () {
28517 function ReplayEvent(time, value) {
28518 this.time = time;
28519 this.value = value;
28520 }
28521 return ReplayEvent;
28522}());
28523//# sourceMappingURL=ReplaySubject.js.map
28524
28525
28526/***/ }),
28527/* 192 */
28528/***/ (function(module, __webpack_exports__, __webpack_require__) {
28529
28530"use strict";
28531__webpack_require__.r(__webpack_exports__);
28532/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queue", function() { return queue; });
28533/* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(193);
28534/* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(196);
28535/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */
28536
28537
28538var queue = /*@__PURE__*/ new _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__["QueueScheduler"](_QueueAction__WEBPACK_IMPORTED_MODULE_0__["QueueAction"]);
28539//# sourceMappingURL=queue.js.map
28540
28541
28542/***/ }),
28543/* 193 */
28544/***/ (function(module, __webpack_exports__, __webpack_require__) {
28545
28546"use strict";
28547__webpack_require__.r(__webpack_exports__);
28548/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueAction", function() { return QueueAction; });
28549/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28550/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
28551/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
28552
28553
28554var QueueAction = /*@__PURE__*/ (function (_super) {
28555 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueAction, _super);
28556 function QueueAction(scheduler, work) {
28557 var _this = _super.call(this, scheduler, work) || this;
28558 _this.scheduler = scheduler;
28559 _this.work = work;
28560 return _this;
28561 }
28562 QueueAction.prototype.schedule = function (state, delay) {
28563 if (delay === void 0) {
28564 delay = 0;
28565 }
28566 if (delay > 0) {
28567 return _super.prototype.schedule.call(this, state, delay);
28568 }
28569 this.delay = delay;
28570 this.state = state;
28571 this.scheduler.flush(this);
28572 return this;
28573 };
28574 QueueAction.prototype.execute = function (state, delay) {
28575 return (delay > 0 || this.closed) ?
28576 _super.prototype.execute.call(this, state, delay) :
28577 this._execute(state, delay);
28578 };
28579 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
28580 if (delay === void 0) {
28581 delay = 0;
28582 }
28583 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
28584 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
28585 }
28586 return scheduler.flush(this);
28587 };
28588 return QueueAction;
28589}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
28590
28591//# sourceMappingURL=QueueAction.js.map
28592
28593
28594/***/ }),
28595/* 194 */
28596/***/ (function(module, __webpack_exports__, __webpack_require__) {
28597
28598"use strict";
28599__webpack_require__.r(__webpack_exports__);
28600/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncAction", function() { return AsyncAction; });
28601/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28602/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
28603/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */
28604
28605
28606var AsyncAction = /*@__PURE__*/ (function (_super) {
28607 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncAction, _super);
28608 function AsyncAction(scheduler, work) {
28609 var _this = _super.call(this, scheduler, work) || this;
28610 _this.scheduler = scheduler;
28611 _this.work = work;
28612 _this.pending = false;
28613 return _this;
28614 }
28615 AsyncAction.prototype.schedule = function (state, delay) {
28616 if (delay === void 0) {
28617 delay = 0;
28618 }
28619 if (this.closed) {
28620 return this;
28621 }
28622 this.state = state;
28623 var id = this.id;
28624 var scheduler = this.scheduler;
28625 if (id != null) {
28626 this.id = this.recycleAsyncId(scheduler, id, delay);
28627 }
28628 this.pending = true;
28629 this.delay = delay;
28630 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
28631 return this;
28632 };
28633 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
28634 if (delay === void 0) {
28635 delay = 0;
28636 }
28637 return setInterval(scheduler.flush.bind(scheduler, this), delay);
28638 };
28639 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
28640 if (delay === void 0) {
28641 delay = 0;
28642 }
28643 if (delay !== null && this.delay === delay && this.pending === false) {
28644 return id;
28645 }
28646 clearInterval(id);
28647 return undefined;
28648 };
28649 AsyncAction.prototype.execute = function (state, delay) {
28650 if (this.closed) {
28651 return new Error('executing a cancelled action');
28652 }
28653 this.pending = false;
28654 var error = this._execute(state, delay);
28655 if (error) {
28656 return error;
28657 }
28658 else if (this.pending === false && this.id != null) {
28659 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
28660 }
28661 };
28662 AsyncAction.prototype._execute = function (state, delay) {
28663 var errored = false;
28664 var errorValue = undefined;
28665 try {
28666 this.work(state);
28667 }
28668 catch (e) {
28669 errored = true;
28670 errorValue = !!e && e || new Error(e);
28671 }
28672 if (errored) {
28673 this.unsubscribe();
28674 return errorValue;
28675 }
28676 };
28677 AsyncAction.prototype._unsubscribe = function () {
28678 var id = this.id;
28679 var scheduler = this.scheduler;
28680 var actions = scheduler.actions;
28681 var index = actions.indexOf(this);
28682 this.work = null;
28683 this.state = null;
28684 this.pending = false;
28685 this.scheduler = null;
28686 if (index !== -1) {
28687 actions.splice(index, 1);
28688 }
28689 if (id != null) {
28690 this.id = this.recycleAsyncId(scheduler, id, null);
28691 }
28692 this.delay = null;
28693 };
28694 return AsyncAction;
28695}(_Action__WEBPACK_IMPORTED_MODULE_1__["Action"]));
28696
28697//# sourceMappingURL=AsyncAction.js.map
28698
28699
28700/***/ }),
28701/* 195 */
28702/***/ (function(module, __webpack_exports__, __webpack_require__) {
28703
28704"use strict";
28705__webpack_require__.r(__webpack_exports__);
28706/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Action", function() { return Action; });
28707/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28708/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
28709/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
28710
28711
28712var Action = /*@__PURE__*/ (function (_super) {
28713 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Action, _super);
28714 function Action(scheduler, work) {
28715 return _super.call(this) || this;
28716 }
28717 Action.prototype.schedule = function (state, delay) {
28718 if (delay === void 0) {
28719 delay = 0;
28720 }
28721 return this;
28722 };
28723 return Action;
28724}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
28725
28726//# sourceMappingURL=Action.js.map
28727
28728
28729/***/ }),
28730/* 196 */
28731/***/ (function(module, __webpack_exports__, __webpack_require__) {
28732
28733"use strict";
28734__webpack_require__.r(__webpack_exports__);
28735/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueScheduler", function() { return QueueScheduler; });
28736/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28737/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
28738/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
28739
28740
28741var QueueScheduler = /*@__PURE__*/ (function (_super) {
28742 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueScheduler, _super);
28743 function QueueScheduler() {
28744 return _super !== null && _super.apply(this, arguments) || this;
28745 }
28746 return QueueScheduler;
28747}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
28748
28749//# sourceMappingURL=QueueScheduler.js.map
28750
28751
28752/***/ }),
28753/* 197 */
28754/***/ (function(module, __webpack_exports__, __webpack_require__) {
28755
28756"use strict";
28757__webpack_require__.r(__webpack_exports__);
28758/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncScheduler", function() { return AsyncScheduler; });
28759/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28760/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(198);
28761/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */
28762
28763
28764var AsyncScheduler = /*@__PURE__*/ (function (_super) {
28765 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncScheduler, _super);
28766 function AsyncScheduler(SchedulerAction, now) {
28767 if (now === void 0) {
28768 now = _Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"].now;
28769 }
28770 var _this = _super.call(this, SchedulerAction, function () {
28771 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
28772 return AsyncScheduler.delegate.now();
28773 }
28774 else {
28775 return now();
28776 }
28777 }) || this;
28778 _this.actions = [];
28779 _this.active = false;
28780 _this.scheduled = undefined;
28781 return _this;
28782 }
28783 AsyncScheduler.prototype.schedule = function (work, delay, state) {
28784 if (delay === void 0) {
28785 delay = 0;
28786 }
28787 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
28788 return AsyncScheduler.delegate.schedule(work, delay, state);
28789 }
28790 else {
28791 return _super.prototype.schedule.call(this, work, delay, state);
28792 }
28793 };
28794 AsyncScheduler.prototype.flush = function (action) {
28795 var actions = this.actions;
28796 if (this.active) {
28797 actions.push(action);
28798 return;
28799 }
28800 var error;
28801 this.active = true;
28802 do {
28803 if (error = action.execute(action.state, action.delay)) {
28804 break;
28805 }
28806 } while (action = actions.shift());
28807 this.active = false;
28808 if (error) {
28809 while (action = actions.shift()) {
28810 action.unsubscribe();
28811 }
28812 throw error;
28813 }
28814 };
28815 return AsyncScheduler;
28816}(_Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"]));
28817
28818//# sourceMappingURL=AsyncScheduler.js.map
28819
28820
28821/***/ }),
28822/* 198 */
28823/***/ (function(module, __webpack_exports__, __webpack_require__) {
28824
28825"use strict";
28826__webpack_require__.r(__webpack_exports__);
28827/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return Scheduler; });
28828var Scheduler = /*@__PURE__*/ (function () {
28829 function Scheduler(SchedulerAction, now) {
28830 if (now === void 0) {
28831 now = Scheduler.now;
28832 }
28833 this.SchedulerAction = SchedulerAction;
28834 this.now = now;
28835 }
28836 Scheduler.prototype.schedule = function (work, delay, state) {
28837 if (delay === void 0) {
28838 delay = 0;
28839 }
28840 return new this.SchedulerAction(this, work).schedule(state, delay);
28841 };
28842 Scheduler.now = function () { return Date.now(); };
28843 return Scheduler;
28844}());
28845
28846//# sourceMappingURL=Scheduler.js.map
28847
28848
28849/***/ }),
28850/* 199 */
28851/***/ (function(module, __webpack_exports__, __webpack_require__) {
28852
28853"use strict";
28854__webpack_require__.r(__webpack_exports__);
28855/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return observeOn; });
28856/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnOperator", function() { return ObserveOnOperator; });
28857/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnSubscriber", function() { return ObserveOnSubscriber; });
28858/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnMessage", function() { return ObserveOnMessage; });
28859/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28860/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
28861/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(200);
28862/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
28863
28864
28865
28866function observeOn(scheduler, delay) {
28867 if (delay === void 0) {
28868 delay = 0;
28869 }
28870 return function observeOnOperatorFunction(source) {
28871 return source.lift(new ObserveOnOperator(scheduler, delay));
28872 };
28873}
28874var ObserveOnOperator = /*@__PURE__*/ (function () {
28875 function ObserveOnOperator(scheduler, delay) {
28876 if (delay === void 0) {
28877 delay = 0;
28878 }
28879 this.scheduler = scheduler;
28880 this.delay = delay;
28881 }
28882 ObserveOnOperator.prototype.call = function (subscriber, source) {
28883 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
28884 };
28885 return ObserveOnOperator;
28886}());
28887
28888var ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {
28889 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ObserveOnSubscriber, _super);
28890 function ObserveOnSubscriber(destination, scheduler, delay) {
28891 if (delay === void 0) {
28892 delay = 0;
28893 }
28894 var _this = _super.call(this, destination) || this;
28895 _this.scheduler = scheduler;
28896 _this.delay = delay;
28897 return _this;
28898 }
28899 ObserveOnSubscriber.dispatch = function (arg) {
28900 var notification = arg.notification, destination = arg.destination;
28901 notification.observe(destination);
28902 this.unsubscribe();
28903 };
28904 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
28905 var destination = this.destination;
28906 destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
28907 };
28908 ObserveOnSubscriber.prototype._next = function (value) {
28909 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
28910 };
28911 ObserveOnSubscriber.prototype._error = function (err) {
28912 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
28913 this.unsubscribe();
28914 };
28915 ObserveOnSubscriber.prototype._complete = function () {
28916 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
28917 this.unsubscribe();
28918 };
28919 return ObserveOnSubscriber;
28920}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28921
28922var ObserveOnMessage = /*@__PURE__*/ (function () {
28923 function ObserveOnMessage(notification, destination) {
28924 this.notification = notification;
28925 this.destination = destination;
28926 }
28927 return ObserveOnMessage;
28928}());
28929
28930//# sourceMappingURL=observeOn.js.map
28931
28932
28933/***/ }),
28934/* 200 */
28935/***/ (function(module, __webpack_exports__, __webpack_require__) {
28936
28937"use strict";
28938__webpack_require__.r(__webpack_exports__);
28939/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return NotificationKind; });
28940/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; });
28941/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(201);
28942/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
28943/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(207);
28944/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */
28945
28946
28947
28948var NotificationKind;
28949/*@__PURE__*/ (function (NotificationKind) {
28950 NotificationKind["NEXT"] = "N";
28951 NotificationKind["ERROR"] = "E";
28952 NotificationKind["COMPLETE"] = "C";
28953})(NotificationKind || (NotificationKind = {}));
28954var Notification = /*@__PURE__*/ (function () {
28955 function Notification(kind, value, error) {
28956 this.kind = kind;
28957 this.value = value;
28958 this.error = error;
28959 this.hasValue = kind === 'N';
28960 }
28961 Notification.prototype.observe = function (observer) {
28962 switch (this.kind) {
28963 case 'N':
28964 return observer.next && observer.next(this.value);
28965 case 'E':
28966 return observer.error && observer.error(this.error);
28967 case 'C':
28968 return observer.complete && observer.complete();
28969 }
28970 };
28971 Notification.prototype.do = function (next, error, complete) {
28972 var kind = this.kind;
28973 switch (kind) {
28974 case 'N':
28975 return next && next(this.value);
28976 case 'E':
28977 return error && error(this.error);
28978 case 'C':
28979 return complete && complete();
28980 }
28981 };
28982 Notification.prototype.accept = function (nextOrObserver, error, complete) {
28983 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
28984 return this.observe(nextOrObserver);
28985 }
28986 else {
28987 return this.do(nextOrObserver, error, complete);
28988 }
28989 };
28990 Notification.prototype.toObservable = function () {
28991 var kind = this.kind;
28992 switch (kind) {
28993 case 'N':
28994 return Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(this.value);
28995 case 'E':
28996 return Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_2__["throwError"])(this.error);
28997 case 'C':
28998 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_0__["empty"])();
28999 }
29000 throw new Error('unexpected notification kind value');
29001 };
29002 Notification.createNext = function (value) {
29003 if (typeof value !== 'undefined') {
29004 return new Notification('N', value);
29005 }
29006 return Notification.undefinedValueNotification;
29007 };
29008 Notification.createError = function (err) {
29009 return new Notification('E', undefined, err);
29010 };
29011 Notification.createComplete = function () {
29012 return Notification.completeNotification;
29013 };
29014 Notification.completeNotification = new Notification('C');
29015 Notification.undefinedValueNotification = new Notification('N', undefined);
29016 return Notification;
29017}());
29018
29019//# sourceMappingURL=Notification.js.map
29020
29021
29022/***/ }),
29023/* 201 */
29024/***/ (function(module, __webpack_exports__, __webpack_require__) {
29025
29026"use strict";
29027__webpack_require__.r(__webpack_exports__);
29028/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return EMPTY; });
29029/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
29030/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29031/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29032
29033var EMPTY = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.complete(); });
29034function empty(scheduler) {
29035 return scheduler ? emptyScheduled(scheduler) : EMPTY;
29036}
29037function emptyScheduled(scheduler) {
29038 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
29039}
29040//# sourceMappingURL=empty.js.map
29041
29042
29043/***/ }),
29044/* 202 */
29045/***/ (function(module, __webpack_exports__, __webpack_require__) {
29046
29047"use strict";
29048__webpack_require__.r(__webpack_exports__);
29049/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "of", function() { return of; });
29050/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(203);
29051/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
29052/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
29053/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */
29054
29055
29056
29057function of() {
29058 var args = [];
29059 for (var _i = 0; _i < arguments.length; _i++) {
29060 args[_i] = arguments[_i];
29061 }
29062 var scheduler = args[args.length - 1];
29063 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(scheduler)) {
29064 args.pop();
29065 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(args, scheduler);
29066 }
29067 else {
29068 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(args);
29069 }
29070}
29071//# sourceMappingURL=of.js.map
29072
29073
29074/***/ }),
29075/* 203 */
29076/***/ (function(module, __webpack_exports__, __webpack_require__) {
29077
29078"use strict";
29079__webpack_require__.r(__webpack_exports__);
29080/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScheduler", function() { return isScheduler; });
29081/** PURE_IMPORTS_START PURE_IMPORTS_END */
29082function isScheduler(value) {
29083 return value && typeof value.schedule === 'function';
29084}
29085//# sourceMappingURL=isScheduler.js.map
29086
29087
29088/***/ }),
29089/* 204 */
29090/***/ (function(module, __webpack_exports__, __webpack_require__) {
29091
29092"use strict";
29093__webpack_require__.r(__webpack_exports__);
29094/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromArray", function() { return fromArray; });
29095/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29096/* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29097/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
29098/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */
29099
29100
29101
29102function fromArray(input, scheduler) {
29103 if (!scheduler) {
29104 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__["subscribeToArray"])(input));
29105 }
29106 else {
29107 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
29108 }
29109}
29110//# sourceMappingURL=fromArray.js.map
29111
29112
29113/***/ }),
29114/* 205 */
29115/***/ (function(module, __webpack_exports__, __webpack_require__) {
29116
29117"use strict";
29118__webpack_require__.r(__webpack_exports__);
29119/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToArray", function() { return subscribeToArray; });
29120/** PURE_IMPORTS_START PURE_IMPORTS_END */
29121var subscribeToArray = function (array) {
29122 return function (subscriber) {
29123 for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
29124 subscriber.next(array[i]);
29125 }
29126 subscriber.complete();
29127 };
29128};
29129//# sourceMappingURL=subscribeToArray.js.map
29130
29131
29132/***/ }),
29133/* 206 */
29134/***/ (function(module, __webpack_exports__, __webpack_require__) {
29135
29136"use strict";
29137__webpack_require__.r(__webpack_exports__);
29138/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleArray", function() { return scheduleArray; });
29139/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29140/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
29141/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
29142
29143
29144function scheduleArray(input, scheduler) {
29145 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29146 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
29147 var i = 0;
29148 sub.add(scheduler.schedule(function () {
29149 if (i === input.length) {
29150 subscriber.complete();
29151 return;
29152 }
29153 subscriber.next(input[i++]);
29154 if (!subscriber.closed) {
29155 sub.add(this.schedule());
29156 }
29157 }));
29158 return sub;
29159 });
29160}
29161//# sourceMappingURL=scheduleArray.js.map
29162
29163
29164/***/ }),
29165/* 207 */
29166/***/ (function(module, __webpack_exports__, __webpack_require__) {
29167
29168"use strict";
29169__webpack_require__.r(__webpack_exports__);
29170/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return throwError; });
29171/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29172/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29173
29174function throwError(error, scheduler) {
29175 if (!scheduler) {
29176 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.error(error); });
29177 }
29178 else {
29179 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
29180 }
29181}
29182function dispatch(_a) {
29183 var error = _a.error, subscriber = _a.subscriber;
29184 subscriber.error(error);
29185}
29186//# sourceMappingURL=throwError.js.map
29187
29188
29189/***/ }),
29190/* 208 */
29191/***/ (function(module, __webpack_exports__, __webpack_require__) {
29192
29193"use strict";
29194__webpack_require__.r(__webpack_exports__);
29195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return AsyncSubject; });
29196/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29197/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
29198/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
29199/** PURE_IMPORTS_START tslib,_Subject,_Subscription PURE_IMPORTS_END */
29200
29201
29202
29203var AsyncSubject = /*@__PURE__*/ (function (_super) {
29204 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncSubject, _super);
29205 function AsyncSubject() {
29206 var _this = _super !== null && _super.apply(this, arguments) || this;
29207 _this.value = null;
29208 _this.hasNext = false;
29209 _this.hasCompleted = false;
29210 return _this;
29211 }
29212 AsyncSubject.prototype._subscribe = function (subscriber) {
29213 if (this.hasError) {
29214 subscriber.error(this.thrownError);
29215 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
29216 }
29217 else if (this.hasCompleted && this.hasNext) {
29218 subscriber.next(this.value);
29219 subscriber.complete();
29220 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
29221 }
29222 return _super.prototype._subscribe.call(this, subscriber);
29223 };
29224 AsyncSubject.prototype.next = function (value) {
29225 if (!this.hasCompleted) {
29226 this.value = value;
29227 this.hasNext = true;
29228 }
29229 };
29230 AsyncSubject.prototype.error = function (error) {
29231 if (!this.hasCompleted) {
29232 _super.prototype.error.call(this, error);
29233 }
29234 };
29235 AsyncSubject.prototype.complete = function () {
29236 this.hasCompleted = true;
29237 if (this.hasNext) {
29238 _super.prototype.next.call(this, this.value);
29239 }
29240 _super.prototype.complete.call(this);
29241 };
29242 return AsyncSubject;
29243}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
29244
29245//# sourceMappingURL=AsyncSubject.js.map
29246
29247
29248/***/ }),
29249/* 209 */
29250/***/ (function(module, __webpack_exports__, __webpack_require__) {
29251
29252"use strict";
29253__webpack_require__.r(__webpack_exports__);
29254/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asap", function() { return asap; });
29255/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(210);
29256/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
29257/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */
29258
29259
29260var asap = /*@__PURE__*/ new _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__["AsapScheduler"](_AsapAction__WEBPACK_IMPORTED_MODULE_0__["AsapAction"]);
29261//# sourceMappingURL=asap.js.map
29262
29263
29264/***/ }),
29265/* 210 */
29266/***/ (function(module, __webpack_exports__, __webpack_require__) {
29267
29268"use strict";
29269__webpack_require__.r(__webpack_exports__);
29270/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapAction", function() { return AsapAction; });
29271/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29272/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(211);
29273/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
29274/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */
29275
29276
29277
29278var AsapAction = /*@__PURE__*/ (function (_super) {
29279 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapAction, _super);
29280 function AsapAction(scheduler, work) {
29281 var _this = _super.call(this, scheduler, work) || this;
29282 _this.scheduler = scheduler;
29283 _this.work = work;
29284 return _this;
29285 }
29286 AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29287 if (delay === void 0) {
29288 delay = 0;
29289 }
29290 if (delay !== null && delay > 0) {
29291 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29292 }
29293 scheduler.actions.push(this);
29294 return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].setImmediate(scheduler.flush.bind(scheduler, null)));
29295 };
29296 AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29297 if (delay === void 0) {
29298 delay = 0;
29299 }
29300 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29301 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29302 }
29303 if (scheduler.actions.length === 0) {
29304 _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].clearImmediate(id);
29305 scheduler.scheduled = undefined;
29306 }
29307 return undefined;
29308 };
29309 return AsapAction;
29310}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__["AsyncAction"]));
29311
29312//# sourceMappingURL=AsapAction.js.map
29313
29314
29315/***/ }),
29316/* 211 */
29317/***/ (function(module, __webpack_exports__, __webpack_require__) {
29318
29319"use strict";
29320__webpack_require__.r(__webpack_exports__);
29321/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Immediate", function() { return Immediate; });
29322/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TestTools", function() { return TestTools; });
29323/** PURE_IMPORTS_START PURE_IMPORTS_END */
29324var nextHandle = 1;
29325var RESOLVED = /*@__PURE__*/ (function () { return /*@__PURE__*/ Promise.resolve(); })();
29326var activeHandles = {};
29327function findAndClearHandle(handle) {
29328 if (handle in activeHandles) {
29329 delete activeHandles[handle];
29330 return true;
29331 }
29332 return false;
29333}
29334var Immediate = {
29335 setImmediate: function (cb) {
29336 var handle = nextHandle++;
29337 activeHandles[handle] = true;
29338 RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); });
29339 return handle;
29340 },
29341 clearImmediate: function (handle) {
29342 findAndClearHandle(handle);
29343 },
29344};
29345var TestTools = {
29346 pending: function () {
29347 return Object.keys(activeHandles).length;
29348 }
29349};
29350//# sourceMappingURL=Immediate.js.map
29351
29352
29353/***/ }),
29354/* 212 */
29355/***/ (function(module, __webpack_exports__, __webpack_require__) {
29356
29357"use strict";
29358__webpack_require__.r(__webpack_exports__);
29359/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapScheduler", function() { return AsapScheduler; });
29360/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29361/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29362/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29363
29364
29365var AsapScheduler = /*@__PURE__*/ (function (_super) {
29366 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapScheduler, _super);
29367 function AsapScheduler() {
29368 return _super !== null && _super.apply(this, arguments) || this;
29369 }
29370 AsapScheduler.prototype.flush = function (action) {
29371 this.active = true;
29372 this.scheduled = undefined;
29373 var actions = this.actions;
29374 var error;
29375 var index = -1;
29376 var count = actions.length;
29377 action = action || actions.shift();
29378 do {
29379 if (error = action.execute(action.state, action.delay)) {
29380 break;
29381 }
29382 } while (++index < count && (action = actions.shift()));
29383 this.active = false;
29384 if (error) {
29385 while (++index < count && (action = actions.shift())) {
29386 action.unsubscribe();
29387 }
29388 throw error;
29389 }
29390 };
29391 return AsapScheduler;
29392}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
29393
29394//# sourceMappingURL=AsapScheduler.js.map
29395
29396
29397/***/ }),
29398/* 213 */
29399/***/ (function(module, __webpack_exports__, __webpack_require__) {
29400
29401"use strict";
29402__webpack_require__.r(__webpack_exports__);
29403/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "async", function() { return async; });
29404/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
29405/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29406/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29407
29408
29409var async = /*@__PURE__*/ new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"](_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]);
29410//# sourceMappingURL=async.js.map
29411
29412
29413/***/ }),
29414/* 214 */
29415/***/ (function(module, __webpack_exports__, __webpack_require__) {
29416
29417"use strict";
29418__webpack_require__.r(__webpack_exports__);
29419/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animationFrame", function() { return animationFrame; });
29420/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(215);
29421/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(216);
29422/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */
29423
29424
29425var animationFrame = /*@__PURE__*/ new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__["AnimationFrameScheduler"](_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__["AnimationFrameAction"]);
29426//# sourceMappingURL=animationFrame.js.map
29427
29428
29429/***/ }),
29430/* 215 */
29431/***/ (function(module, __webpack_exports__, __webpack_require__) {
29432
29433"use strict";
29434__webpack_require__.r(__webpack_exports__);
29435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameAction", function() { return AnimationFrameAction; });
29436/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29437/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29438/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
29439
29440
29441var AnimationFrameAction = /*@__PURE__*/ (function (_super) {
29442 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameAction, _super);
29443 function AnimationFrameAction(scheduler, work) {
29444 var _this = _super.call(this, scheduler, work) || this;
29445 _this.scheduler = scheduler;
29446 _this.work = work;
29447 return _this;
29448 }
29449 AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29450 if (delay === void 0) {
29451 delay = 0;
29452 }
29453 if (delay !== null && delay > 0) {
29454 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29455 }
29456 scheduler.actions.push(this);
29457 return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
29458 };
29459 AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29460 if (delay === void 0) {
29461 delay = 0;
29462 }
29463 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29464 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29465 }
29466 if (scheduler.actions.length === 0) {
29467 cancelAnimationFrame(id);
29468 scheduler.scheduled = undefined;
29469 }
29470 return undefined;
29471 };
29472 return AnimationFrameAction;
29473}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
29474
29475//# sourceMappingURL=AnimationFrameAction.js.map
29476
29477
29478/***/ }),
29479/* 216 */
29480/***/ (function(module, __webpack_exports__, __webpack_require__) {
29481
29482"use strict";
29483__webpack_require__.r(__webpack_exports__);
29484/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameScheduler", function() { return AnimationFrameScheduler; });
29485/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29486/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29487/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29488
29489
29490var AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {
29491 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameScheduler, _super);
29492 function AnimationFrameScheduler() {
29493 return _super !== null && _super.apply(this, arguments) || this;
29494 }
29495 AnimationFrameScheduler.prototype.flush = function (action) {
29496 this.active = true;
29497 this.scheduled = undefined;
29498 var actions = this.actions;
29499 var error;
29500 var index = -1;
29501 var count = actions.length;
29502 action = action || actions.shift();
29503 do {
29504 if (error = action.execute(action.state, action.delay)) {
29505 break;
29506 }
29507 } while (++index < count && (action = actions.shift()));
29508 this.active = false;
29509 if (error) {
29510 while (++index < count && (action = actions.shift())) {
29511 action.unsubscribe();
29512 }
29513 throw error;
29514 }
29515 };
29516 return AnimationFrameScheduler;
29517}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
29518
29519//# sourceMappingURL=AnimationFrameScheduler.js.map
29520
29521
29522/***/ }),
29523/* 217 */
29524/***/ (function(module, __webpack_exports__, __webpack_require__) {
29525
29526"use strict";
29527__webpack_require__.r(__webpack_exports__);
29528/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return VirtualTimeScheduler; });
29529/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return VirtualAction; });
29530/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29531/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29532/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
29533/** PURE_IMPORTS_START tslib,_AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29534
29535
29536
29537var VirtualTimeScheduler = /*@__PURE__*/ (function (_super) {
29538 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualTimeScheduler, _super);
29539 function VirtualTimeScheduler(SchedulerAction, maxFrames) {
29540 if (SchedulerAction === void 0) {
29541 SchedulerAction = VirtualAction;
29542 }
29543 if (maxFrames === void 0) {
29544 maxFrames = Number.POSITIVE_INFINITY;
29545 }
29546 var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
29547 _this.maxFrames = maxFrames;
29548 _this.frame = 0;
29549 _this.index = -1;
29550 return _this;
29551 }
29552 VirtualTimeScheduler.prototype.flush = function () {
29553 var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
29554 var error, action;
29555 while ((action = actions[0]) && action.delay <= maxFrames) {
29556 actions.shift();
29557 this.frame = action.delay;
29558 if (error = action.execute(action.state, action.delay)) {
29559 break;
29560 }
29561 }
29562 if (error) {
29563 while (action = actions.shift()) {
29564 action.unsubscribe();
29565 }
29566 throw error;
29567 }
29568 };
29569 VirtualTimeScheduler.frameTimeFactor = 10;
29570 return VirtualTimeScheduler;
29571}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__["AsyncScheduler"]));
29572
29573var VirtualAction = /*@__PURE__*/ (function (_super) {
29574 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualAction, _super);
29575 function VirtualAction(scheduler, work, index) {
29576 if (index === void 0) {
29577 index = scheduler.index += 1;
29578 }
29579 var _this = _super.call(this, scheduler, work) || this;
29580 _this.scheduler = scheduler;
29581 _this.work = work;
29582 _this.index = index;
29583 _this.active = true;
29584 _this.index = scheduler.index = index;
29585 return _this;
29586 }
29587 VirtualAction.prototype.schedule = function (state, delay) {
29588 if (delay === void 0) {
29589 delay = 0;
29590 }
29591 if (!this.id) {
29592 return _super.prototype.schedule.call(this, state, delay);
29593 }
29594 this.active = false;
29595 var action = new VirtualAction(this.scheduler, this.work);
29596 this.add(action);
29597 return action.schedule(state, delay);
29598 };
29599 VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29600 if (delay === void 0) {
29601 delay = 0;
29602 }
29603 this.delay = scheduler.frame + delay;
29604 var actions = scheduler.actions;
29605 actions.push(this);
29606 actions.sort(VirtualAction.sortActions);
29607 return true;
29608 };
29609 VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29610 if (delay === void 0) {
29611 delay = 0;
29612 }
29613 return undefined;
29614 };
29615 VirtualAction.prototype._execute = function (state, delay) {
29616 if (this.active === true) {
29617 return _super.prototype._execute.call(this, state, delay);
29618 }
29619 };
29620 VirtualAction.sortActions = function (a, b) {
29621 if (a.delay === b.delay) {
29622 if (a.index === b.index) {
29623 return 0;
29624 }
29625 else if (a.index > b.index) {
29626 return 1;
29627 }
29628 else {
29629 return -1;
29630 }
29631 }
29632 else if (a.delay > b.delay) {
29633 return 1;
29634 }
29635 else {
29636 return -1;
29637 }
29638 };
29639 return VirtualAction;
29640}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
29641
29642//# sourceMappingURL=VirtualTimeScheduler.js.map
29643
29644
29645/***/ }),
29646/* 218 */
29647/***/ (function(module, __webpack_exports__, __webpack_require__) {
29648
29649"use strict";
29650__webpack_require__.r(__webpack_exports__);
29651/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; });
29652/** PURE_IMPORTS_START PURE_IMPORTS_END */
29653function noop() { }
29654//# sourceMappingURL=noop.js.map
29655
29656
29657/***/ }),
29658/* 219 */
29659/***/ (function(module, __webpack_exports__, __webpack_require__) {
29660
29661"use strict";
29662__webpack_require__.r(__webpack_exports__);
29663/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return isObservable; });
29664/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29665/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29666
29667function isObservable(obj) {
29668 return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
29669}
29670//# sourceMappingURL=isObservable.js.map
29671
29672
29673/***/ }),
29674/* 220 */
29675/***/ (function(module, __webpack_exports__, __webpack_require__) {
29676
29677"use strict";
29678__webpack_require__.r(__webpack_exports__);
29679/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return ArgumentOutOfRangeError; });
29680/** PURE_IMPORTS_START PURE_IMPORTS_END */
29681var ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {
29682 function ArgumentOutOfRangeErrorImpl() {
29683 Error.call(this);
29684 this.message = 'argument out of range';
29685 this.name = 'ArgumentOutOfRangeError';
29686 return this;
29687 }
29688 ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29689 return ArgumentOutOfRangeErrorImpl;
29690})();
29691var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
29692//# sourceMappingURL=ArgumentOutOfRangeError.js.map
29693
29694
29695/***/ }),
29696/* 221 */
29697/***/ (function(module, __webpack_exports__, __webpack_require__) {
29698
29699"use strict";
29700__webpack_require__.r(__webpack_exports__);
29701/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return EmptyError; });
29702/** PURE_IMPORTS_START PURE_IMPORTS_END */
29703var EmptyErrorImpl = /*@__PURE__*/ (function () {
29704 function EmptyErrorImpl() {
29705 Error.call(this);
29706 this.message = 'no elements in sequence';
29707 this.name = 'EmptyError';
29708 return this;
29709 }
29710 EmptyErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29711 return EmptyErrorImpl;
29712})();
29713var EmptyError = EmptyErrorImpl;
29714//# sourceMappingURL=EmptyError.js.map
29715
29716
29717/***/ }),
29718/* 222 */
29719/***/ (function(module, __webpack_exports__, __webpack_require__) {
29720
29721"use strict";
29722__webpack_require__.r(__webpack_exports__);
29723/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return TimeoutError; });
29724/** PURE_IMPORTS_START PURE_IMPORTS_END */
29725var TimeoutErrorImpl = /*@__PURE__*/ (function () {
29726 function TimeoutErrorImpl() {
29727 Error.call(this);
29728 this.message = 'Timeout has occurred';
29729 this.name = 'TimeoutError';
29730 return this;
29731 }
29732 TimeoutErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29733 return TimeoutErrorImpl;
29734})();
29735var TimeoutError = TimeoutErrorImpl;
29736//# sourceMappingURL=TimeoutError.js.map
29737
29738
29739/***/ }),
29740/* 223 */
29741/***/ (function(module, __webpack_exports__, __webpack_require__) {
29742
29743"use strict";
29744__webpack_require__.r(__webpack_exports__);
29745/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return bindCallback; });
29746/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29747/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
29748/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
29749/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
29750/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(176);
29751/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(203);
29752/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */
29753
29754
29755
29756
29757
29758
29759function bindCallback(callbackFunc, resultSelector, scheduler) {
29760 if (resultSelector) {
29761 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(resultSelector)) {
29762 scheduler = resultSelector;
29763 }
29764 else {
29765 return function () {
29766 var args = [];
29767 for (var _i = 0; _i < arguments.length; _i++) {
29768 args[_i] = arguments[_i];
29769 }
29770 return bindCallback(callbackFunc, scheduler).apply(void 0, args).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) { return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_4__["isArray"])(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
29771 };
29772 }
29773 }
29774 return function () {
29775 var args = [];
29776 for (var _i = 0; _i < arguments.length; _i++) {
29777 args[_i] = arguments[_i];
29778 }
29779 var context = this;
29780 var subject;
29781 var params = {
29782 context: context,
29783 subject: subject,
29784 callbackFunc: callbackFunc,
29785 scheduler: scheduler,
29786 };
29787 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29788 if (!scheduler) {
29789 if (!subject) {
29790 subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29791 var handler = function () {
29792 var innerArgs = [];
29793 for (var _i = 0; _i < arguments.length; _i++) {
29794 innerArgs[_i] = arguments[_i];
29795 }
29796 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
29797 subject.complete();
29798 };
29799 try {
29800 callbackFunc.apply(context, args.concat([handler]));
29801 }
29802 catch (err) {
29803 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
29804 subject.error(err);
29805 }
29806 else {
29807 console.warn(err);
29808 }
29809 }
29810 }
29811 return subject.subscribe(subscriber);
29812 }
29813 else {
29814 var state = {
29815 args: args, subscriber: subscriber, params: params,
29816 };
29817 return scheduler.schedule(dispatch, 0, state);
29818 }
29819 });
29820 };
29821}
29822function dispatch(state) {
29823 var _this = this;
29824 var self = this;
29825 var args = state.args, subscriber = state.subscriber, params = state.params;
29826 var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
29827 var subject = params.subject;
29828 if (!subject) {
29829 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29830 var handler = function () {
29831 var innerArgs = [];
29832 for (var _i = 0; _i < arguments.length; _i++) {
29833 innerArgs[_i] = arguments[_i];
29834 }
29835 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
29836 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
29837 };
29838 try {
29839 callbackFunc.apply(context, args.concat([handler]));
29840 }
29841 catch (err) {
29842 subject.error(err);
29843 }
29844 }
29845 this.add(subject.subscribe(subscriber));
29846}
29847function dispatchNext(state) {
29848 var value = state.value, subject = state.subject;
29849 subject.next(value);
29850 subject.complete();
29851}
29852function dispatchError(state) {
29853 var err = state.err, subject = state.subject;
29854 subject.error(err);
29855}
29856//# sourceMappingURL=bindCallback.js.map
29857
29858
29859/***/ }),
29860/* 224 */
29861/***/ (function(module, __webpack_exports__, __webpack_require__) {
29862
29863"use strict";
29864__webpack_require__.r(__webpack_exports__);
29865/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; });
29866/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MapOperator", function() { return MapOperator; });
29867/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29868/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
29869/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29870
29871
29872function map(project, thisArg) {
29873 return function mapOperation(source) {
29874 if (typeof project !== 'function') {
29875 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
29876 }
29877 return source.lift(new MapOperator(project, thisArg));
29878 };
29879}
29880var MapOperator = /*@__PURE__*/ (function () {
29881 function MapOperator(project, thisArg) {
29882 this.project = project;
29883 this.thisArg = thisArg;
29884 }
29885 MapOperator.prototype.call = function (subscriber, source) {
29886 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
29887 };
29888 return MapOperator;
29889}());
29890
29891var MapSubscriber = /*@__PURE__*/ (function (_super) {
29892 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapSubscriber, _super);
29893 function MapSubscriber(destination, project, thisArg) {
29894 var _this = _super.call(this, destination) || this;
29895 _this.project = project;
29896 _this.count = 0;
29897 _this.thisArg = thisArg || _this;
29898 return _this;
29899 }
29900 MapSubscriber.prototype._next = function (value) {
29901 var result;
29902 try {
29903 result = this.project.call(this.thisArg, value, this.count++);
29904 }
29905 catch (err) {
29906 this.destination.error(err);
29907 return;
29908 }
29909 this.destination.next(result);
29910 };
29911 return MapSubscriber;
29912}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29913//# sourceMappingURL=map.js.map
29914
29915
29916/***/ }),
29917/* 225 */
29918/***/ (function(module, __webpack_exports__, __webpack_require__) {
29919
29920"use strict";
29921__webpack_require__.r(__webpack_exports__);
29922/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return bindNodeCallback; });
29923/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29924/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
29925/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
29926/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
29927/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(203);
29928/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(176);
29929/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isScheduler,_util_isArray PURE_IMPORTS_END */
29930
29931
29932
29933
29934
29935
29936function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
29937 if (resultSelector) {
29938 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(resultSelector)) {
29939 scheduler = resultSelector;
29940 }
29941 else {
29942 return function () {
29943 var args = [];
29944 for (var _i = 0; _i < arguments.length; _i++) {
29945 args[_i] = arguments[_i];
29946 }
29947 return bindNodeCallback(callbackFunc, scheduler).apply(void 0, args).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) { return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_5__["isArray"])(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
29948 };
29949 }
29950 }
29951 return function () {
29952 var args = [];
29953 for (var _i = 0; _i < arguments.length; _i++) {
29954 args[_i] = arguments[_i];
29955 }
29956 var params = {
29957 subject: undefined,
29958 args: args,
29959 callbackFunc: callbackFunc,
29960 scheduler: scheduler,
29961 context: this,
29962 };
29963 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29964 var context = params.context;
29965 var subject = params.subject;
29966 if (!scheduler) {
29967 if (!subject) {
29968 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29969 var handler = function () {
29970 var innerArgs = [];
29971 for (var _i = 0; _i < arguments.length; _i++) {
29972 innerArgs[_i] = arguments[_i];
29973 }
29974 var err = innerArgs.shift();
29975 if (err) {
29976 subject.error(err);
29977 return;
29978 }
29979 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
29980 subject.complete();
29981 };
29982 try {
29983 callbackFunc.apply(context, args.concat([handler]));
29984 }
29985 catch (err) {
29986 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
29987 subject.error(err);
29988 }
29989 else {
29990 console.warn(err);
29991 }
29992 }
29993 }
29994 return subject.subscribe(subscriber);
29995 }
29996 else {
29997 return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context });
29998 }
29999 });
30000 };
30001}
30002function dispatch(state) {
30003 var _this = this;
30004 var params = state.params, subscriber = state.subscriber, context = state.context;
30005 var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
30006 var subject = params.subject;
30007 if (!subject) {
30008 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
30009 var handler = function () {
30010 var innerArgs = [];
30011 for (var _i = 0; _i < arguments.length; _i++) {
30012 innerArgs[_i] = arguments[_i];
30013 }
30014 var err = innerArgs.shift();
30015 if (err) {
30016 _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
30017 }
30018 else {
30019 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
30020 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
30021 }
30022 };
30023 try {
30024 callbackFunc.apply(context, args.concat([handler]));
30025 }
30026 catch (err) {
30027 this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
30028 }
30029 }
30030 this.add(subject.subscribe(subscriber));
30031}
30032function dispatchNext(arg) {
30033 var value = arg.value, subject = arg.subject;
30034 subject.next(value);
30035 subject.complete();
30036}
30037function dispatchError(arg) {
30038 var err = arg.err, subject = arg.subject;
30039 subject.error(err);
30040}
30041//# sourceMappingURL=bindNodeCallback.js.map
30042
30043
30044/***/ }),
30045/* 226 */
30046/***/ (function(module, __webpack_exports__, __webpack_require__) {
30047
30048"use strict";
30049__webpack_require__.r(__webpack_exports__);
30050/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
30051/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestOperator", function() { return CombineLatestOperator; });
30052/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestSubscriber", function() { return CombineLatestSubscriber; });
30053/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30054/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
30055/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
30056/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
30057/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
30058/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(204);
30059/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */
30060
30061
30062
30063
30064
30065
30066var NONE = {};
30067function combineLatest() {
30068 var observables = [];
30069 for (var _i = 0; _i < arguments.length; _i++) {
30070 observables[_i] = arguments[_i];
30071 }
30072 var resultSelector = null;
30073 var scheduler = null;
30074 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(observables[observables.length - 1])) {
30075 scheduler = observables.pop();
30076 }
30077 if (typeof observables[observables.length - 1] === 'function') {
30078 resultSelector = observables.pop();
30079 }
30080 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(observables[0])) {
30081 observables = observables[0];
30082 }
30083 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_5__["fromArray"])(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
30084}
30085var CombineLatestOperator = /*@__PURE__*/ (function () {
30086 function CombineLatestOperator(resultSelector) {
30087 this.resultSelector = resultSelector;
30088 }
30089 CombineLatestOperator.prototype.call = function (subscriber, source) {
30090 return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
30091 };
30092 return CombineLatestOperator;
30093}());
30094
30095var CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {
30096 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CombineLatestSubscriber, _super);
30097 function CombineLatestSubscriber(destination, resultSelector) {
30098 var _this = _super.call(this, destination) || this;
30099 _this.resultSelector = resultSelector;
30100 _this.active = 0;
30101 _this.values = [];
30102 _this.observables = [];
30103 return _this;
30104 }
30105 CombineLatestSubscriber.prototype._next = function (observable) {
30106 this.values.push(NONE);
30107 this.observables.push(observable);
30108 };
30109 CombineLatestSubscriber.prototype._complete = function () {
30110 var observables = this.observables;
30111 var len = observables.length;
30112 if (len === 0) {
30113 this.destination.complete();
30114 }
30115 else {
30116 this.active = len;
30117 this.toRespond = len;
30118 for (var i = 0; i < len; i++) {
30119 var observable = observables[i];
30120 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i));
30121 }
30122 }
30123 };
30124 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
30125 if ((this.active -= 1) === 0) {
30126 this.destination.complete();
30127 }
30128 };
30129 CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30130 var values = this.values;
30131 var oldVal = values[outerIndex];
30132 var toRespond = !this.toRespond
30133 ? 0
30134 : oldVal === NONE ? --this.toRespond : this.toRespond;
30135 values[outerIndex] = innerValue;
30136 if (toRespond === 0) {
30137 if (this.resultSelector) {
30138 this._tryResultSelector(values);
30139 }
30140 else {
30141 this.destination.next(values.slice());
30142 }
30143 }
30144 };
30145 CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
30146 var result;
30147 try {
30148 result = this.resultSelector.apply(this, values);
30149 }
30150 catch (err) {
30151 this.destination.error(err);
30152 return;
30153 }
30154 this.destination.next(result);
30155 };
30156 return CombineLatestSubscriber;
30157}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
30158
30159//# sourceMappingURL=combineLatest.js.map
30160
30161
30162/***/ }),
30163/* 227 */
30164/***/ (function(module, __webpack_exports__, __webpack_require__) {
30165
30166"use strict";
30167__webpack_require__.r(__webpack_exports__);
30168/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OuterSubscriber", function() { return OuterSubscriber; });
30169/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30170/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
30171/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30172
30173
30174var OuterSubscriber = /*@__PURE__*/ (function (_super) {
30175 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OuterSubscriber, _super);
30176 function OuterSubscriber() {
30177 return _super !== null && _super.apply(this, arguments) || this;
30178 }
30179 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30180 this.destination.next(innerValue);
30181 };
30182 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
30183 this.destination.error(error);
30184 };
30185 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
30186 this.destination.complete();
30187 };
30188 return OuterSubscriber;
30189}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30190
30191//# sourceMappingURL=OuterSubscriber.js.map
30192
30193
30194/***/ }),
30195/* 228 */
30196/***/ (function(module, __webpack_exports__, __webpack_require__) {
30197
30198"use strict";
30199__webpack_require__.r(__webpack_exports__);
30200/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToResult", function() { return subscribeToResult; });
30201/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(229);
30202/* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
30203/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
30204/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */
30205
30206
30207
30208function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) {
30209 if (innerSubscriber === void 0) {
30210 innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__["InnerSubscriber"](outerSubscriber, outerValue, outerIndex);
30211 }
30212 if (innerSubscriber.closed) {
30213 return undefined;
30214 }
30215 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]) {
30216 return result.subscribe(innerSubscriber);
30217 }
30218 return Object(_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(result)(innerSubscriber);
30219}
30220//# sourceMappingURL=subscribeToResult.js.map
30221
30222
30223/***/ }),
30224/* 229 */
30225/***/ (function(module, __webpack_exports__, __webpack_require__) {
30226
30227"use strict";
30228__webpack_require__.r(__webpack_exports__);
30229/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InnerSubscriber", function() { return InnerSubscriber; });
30230/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30231/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
30232/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30233
30234
30235var InnerSubscriber = /*@__PURE__*/ (function (_super) {
30236 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerSubscriber, _super);
30237 function InnerSubscriber(parent, outerValue, outerIndex) {
30238 var _this = _super.call(this) || this;
30239 _this.parent = parent;
30240 _this.outerValue = outerValue;
30241 _this.outerIndex = outerIndex;
30242 _this.index = 0;
30243 return _this;
30244 }
30245 InnerSubscriber.prototype._next = function (value) {
30246 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
30247 };
30248 InnerSubscriber.prototype._error = function (error) {
30249 this.parent.notifyError(error, this);
30250 this.unsubscribe();
30251 };
30252 InnerSubscriber.prototype._complete = function () {
30253 this.parent.notifyComplete(this);
30254 this.unsubscribe();
30255 };
30256 return InnerSubscriber;
30257}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30258
30259//# sourceMappingURL=InnerSubscriber.js.map
30260
30261
30262/***/ }),
30263/* 230 */
30264/***/ (function(module, __webpack_exports__, __webpack_require__) {
30265
30266"use strict";
30267__webpack_require__.r(__webpack_exports__);
30268/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeTo", function() { return subscribeTo; });
30269/* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(205);
30270/* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(231);
30271/* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(232);
30272/* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(234);
30273/* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(235);
30274/* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(236);
30275/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(177);
30276/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(233);
30277/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(181);
30278/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */
30279
30280
30281
30282
30283
30284
30285
30286
30287
30288var subscribeTo = function (result) {
30289 if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__["observable"]] === 'function') {
30290 return Object(_subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__["subscribeToObservable"])(result);
30291 }
30292 else if (Object(_isArrayLike__WEBPACK_IMPORTED_MODULE_4__["isArrayLike"])(result)) {
30293 return Object(_subscribeToArray__WEBPACK_IMPORTED_MODULE_0__["subscribeToArray"])(result);
30294 }
30295 else if (Object(_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(result)) {
30296 return Object(_subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__["subscribeToPromise"])(result);
30297 }
30298 else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_7__["iterator"]] === 'function') {
30299 return Object(_subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__["subscribeToIterable"])(result);
30300 }
30301 else {
30302 var value = Object(_isObject__WEBPACK_IMPORTED_MODULE_6__["isObject"])(result) ? 'an invalid object' : "'" + result + "'";
30303 var msg = "You provided " + value + " where a stream was expected."
30304 + ' You can provide an Observable, Promise, Array, or Iterable.';
30305 throw new TypeError(msg);
30306 }
30307};
30308//# sourceMappingURL=subscribeTo.js.map
30309
30310
30311/***/ }),
30312/* 231 */
30313/***/ (function(module, __webpack_exports__, __webpack_require__) {
30314
30315"use strict";
30316__webpack_require__.r(__webpack_exports__);
30317/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToPromise", function() { return subscribeToPromise; });
30318/* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(174);
30319/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */
30320
30321var subscribeToPromise = function (promise) {
30322 return function (subscriber) {
30323 promise.then(function (value) {
30324 if (!subscriber.closed) {
30325 subscriber.next(value);
30326 subscriber.complete();
30327 }
30328 }, function (err) { return subscriber.error(err); })
30329 .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__["hostReportError"]);
30330 return subscriber;
30331 };
30332};
30333//# sourceMappingURL=subscribeToPromise.js.map
30334
30335
30336/***/ }),
30337/* 232 */
30338/***/ (function(module, __webpack_exports__, __webpack_require__) {
30339
30340"use strict";
30341__webpack_require__.r(__webpack_exports__);
30342/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToIterable", function() { return subscribeToIterable; });
30343/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30344/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30345
30346var subscribeToIterable = function (iterable) {
30347 return function (subscriber) {
30348 var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]]();
30349 do {
30350 var item = iterator.next();
30351 if (item.done) {
30352 subscriber.complete();
30353 break;
30354 }
30355 subscriber.next(item.value);
30356 if (subscriber.closed) {
30357 break;
30358 }
30359 } while (true);
30360 if (typeof iterator.return === 'function') {
30361 subscriber.add(function () {
30362 if (iterator.return) {
30363 iterator.return();
30364 }
30365 });
30366 }
30367 return subscriber;
30368 };
30369};
30370//# sourceMappingURL=subscribeToIterable.js.map
30371
30372
30373/***/ }),
30374/* 233 */
30375/***/ (function(module, __webpack_exports__, __webpack_require__) {
30376
30377"use strict";
30378__webpack_require__.r(__webpack_exports__);
30379/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSymbolIterator", function() { return getSymbolIterator; });
30380/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iterator", function() { return iterator; });
30381/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$iterator", function() { return $$iterator; });
30382/** PURE_IMPORTS_START PURE_IMPORTS_END */
30383function getSymbolIterator() {
30384 if (typeof Symbol !== 'function' || !Symbol.iterator) {
30385 return '@@iterator';
30386 }
30387 return Symbol.iterator;
30388}
30389var iterator = /*@__PURE__*/ getSymbolIterator();
30390var $$iterator = iterator;
30391//# sourceMappingURL=iterator.js.map
30392
30393
30394/***/ }),
30395/* 234 */
30396/***/ (function(module, __webpack_exports__, __webpack_require__) {
30397
30398"use strict";
30399__webpack_require__.r(__webpack_exports__);
30400/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToObservable", function() { return subscribeToObservable; });
30401/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(181);
30402/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30403
30404var subscribeToObservable = function (obj) {
30405 return function (subscriber) {
30406 var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]]();
30407 if (typeof obs.subscribe !== 'function') {
30408 throw new TypeError('Provided object does not correctly implement Symbol.observable');
30409 }
30410 else {
30411 return obs.subscribe(subscriber);
30412 }
30413 };
30414};
30415//# sourceMappingURL=subscribeToObservable.js.map
30416
30417
30418/***/ }),
30419/* 235 */
30420/***/ (function(module, __webpack_exports__, __webpack_require__) {
30421
30422"use strict";
30423__webpack_require__.r(__webpack_exports__);
30424/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { return isArrayLike; });
30425/** PURE_IMPORTS_START PURE_IMPORTS_END */
30426var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
30427//# sourceMappingURL=isArrayLike.js.map
30428
30429
30430/***/ }),
30431/* 236 */
30432/***/ (function(module, __webpack_exports__, __webpack_require__) {
30433
30434"use strict";
30435__webpack_require__.r(__webpack_exports__);
30436/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPromise", function() { return isPromise; });
30437/** PURE_IMPORTS_START PURE_IMPORTS_END */
30438function isPromise(value) {
30439 return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
30440}
30441//# sourceMappingURL=isPromise.js.map
30442
30443
30444/***/ }),
30445/* 237 */
30446/***/ (function(module, __webpack_exports__, __webpack_require__) {
30447
30448"use strict";
30449__webpack_require__.r(__webpack_exports__);
30450/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
30451/* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
30452/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(238);
30453/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */
30454
30455
30456function concat() {
30457 var observables = [];
30458 for (var _i = 0; _i < arguments.length; _i++) {
30459 observables[_i] = arguments[_i];
30460 }
30461 return Object(_operators_concatAll__WEBPACK_IMPORTED_MODULE_1__["concatAll"])()(_of__WEBPACK_IMPORTED_MODULE_0__["of"].apply(void 0, observables));
30462}
30463//# sourceMappingURL=concat.js.map
30464
30465
30466/***/ }),
30467/* 238 */
30468/***/ (function(module, __webpack_exports__, __webpack_require__) {
30469
30470"use strict";
30471__webpack_require__.r(__webpack_exports__);
30472/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return concatAll; });
30473/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
30474/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */
30475
30476function concatAll() {
30477 return Object(_mergeAll__WEBPACK_IMPORTED_MODULE_0__["mergeAll"])(1);
30478}
30479//# sourceMappingURL=concatAll.js.map
30480
30481
30482/***/ }),
30483/* 239 */
30484/***/ (function(module, __webpack_exports__, __webpack_require__) {
30485
30486"use strict";
30487__webpack_require__.r(__webpack_exports__);
30488/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return mergeAll; });
30489/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
30490/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
30491/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */
30492
30493
30494function mergeAll(concurrent) {
30495 if (concurrent === void 0) {
30496 concurrent = Number.POSITIVE_INFINITY;
30497 }
30498 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"], concurrent);
30499}
30500//# sourceMappingURL=mergeAll.js.map
30501
30502
30503/***/ }),
30504/* 240 */
30505/***/ (function(module, __webpack_exports__, __webpack_require__) {
30506
30507"use strict";
30508__webpack_require__.r(__webpack_exports__);
30509/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return mergeMap; });
30510/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapOperator", function() { return MergeMapOperator; });
30511/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapSubscriber", function() { return MergeMapSubscriber; });
30512/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30513/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
30514/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
30515/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(229);
30516/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
30517/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
30518/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */
30519
30520
30521
30522
30523
30524
30525function mergeMap(project, resultSelector, concurrent) {
30526 if (concurrent === void 0) {
30527 concurrent = Number.POSITIVE_INFINITY;
30528 }
30529 if (typeof resultSelector === 'function') {
30530 return function (source) { return source.pipe(mergeMap(function (a, i) { return Object(_observable_from__WEBPACK_IMPORTED_MODULE_5__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_4__["map"])(function (b, ii) { return resultSelector(a, b, i, ii); })); }, concurrent)); };
30531 }
30532 else if (typeof resultSelector === 'number') {
30533 concurrent = resultSelector;
30534 }
30535 return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
30536}
30537var MergeMapOperator = /*@__PURE__*/ (function () {
30538 function MergeMapOperator(project, concurrent) {
30539 if (concurrent === void 0) {
30540 concurrent = Number.POSITIVE_INFINITY;
30541 }
30542 this.project = project;
30543 this.concurrent = concurrent;
30544 }
30545 MergeMapOperator.prototype.call = function (observer, source) {
30546 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
30547 };
30548 return MergeMapOperator;
30549}());
30550
30551var MergeMapSubscriber = /*@__PURE__*/ (function (_super) {
30552 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeMapSubscriber, _super);
30553 function MergeMapSubscriber(destination, project, concurrent) {
30554 if (concurrent === void 0) {
30555 concurrent = Number.POSITIVE_INFINITY;
30556 }
30557 var _this = _super.call(this, destination) || this;
30558 _this.project = project;
30559 _this.concurrent = concurrent;
30560 _this.hasCompleted = false;
30561 _this.buffer = [];
30562 _this.active = 0;
30563 _this.index = 0;
30564 return _this;
30565 }
30566 MergeMapSubscriber.prototype._next = function (value) {
30567 if (this.active < this.concurrent) {
30568 this._tryNext(value);
30569 }
30570 else {
30571 this.buffer.push(value);
30572 }
30573 };
30574 MergeMapSubscriber.prototype._tryNext = function (value) {
30575 var result;
30576 var index = this.index++;
30577 try {
30578 result = this.project(value, index);
30579 }
30580 catch (err) {
30581 this.destination.error(err);
30582 return;
30583 }
30584 this.active++;
30585 this._innerSub(result, value, index);
30586 };
30587 MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
30588 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, value, index);
30589 var destination = this.destination;
30590 destination.add(innerSubscriber);
30591 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
30592 if (innerSubscription !== innerSubscriber) {
30593 destination.add(innerSubscription);
30594 }
30595 };
30596 MergeMapSubscriber.prototype._complete = function () {
30597 this.hasCompleted = true;
30598 if (this.active === 0 && this.buffer.length === 0) {
30599 this.destination.complete();
30600 }
30601 this.unsubscribe();
30602 };
30603 MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30604 this.destination.next(innerValue);
30605 };
30606 MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
30607 var buffer = this.buffer;
30608 this.remove(innerSub);
30609 this.active--;
30610 if (buffer.length > 0) {
30611 this._next(buffer.shift());
30612 }
30613 else if (this.active === 0 && this.hasCompleted) {
30614 this.destination.complete();
30615 }
30616 };
30617 return MergeMapSubscriber;
30618}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
30619
30620//# sourceMappingURL=mergeMap.js.map
30621
30622
30623/***/ }),
30624/* 241 */
30625/***/ (function(module, __webpack_exports__, __webpack_require__) {
30626
30627"use strict";
30628__webpack_require__.r(__webpack_exports__);
30629/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "from", function() { return from; });
30630/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30631/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
30632/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(242);
30633/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */
30634
30635
30636
30637function from(input, scheduler) {
30638 if (!scheduler) {
30639 if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
30640 return input;
30641 }
30642 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(input));
30643 }
30644 else {
30645 return Object(_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__["scheduled"])(input, scheduler);
30646 }
30647}
30648//# sourceMappingURL=from.js.map
30649
30650
30651/***/ }),
30652/* 242 */
30653/***/ (function(module, __webpack_exports__, __webpack_require__) {
30654
30655"use strict";
30656__webpack_require__.r(__webpack_exports__);
30657/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return scheduled; });
30658/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
30659/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
30660/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
30661/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(245);
30662/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246);
30663/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(236);
30664/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(235);
30665/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(247);
30666/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */
30667
30668
30669
30670
30671
30672
30673
30674
30675function scheduled(input, scheduler) {
30676 if (input != null) {
30677 if (Object(_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__["isInteropObservable"])(input)) {
30678 return Object(_scheduleObservable__WEBPACK_IMPORTED_MODULE_0__["scheduleObservable"])(input, scheduler);
30679 }
30680 else if (Object(_util_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(input)) {
30681 return Object(_schedulePromise__WEBPACK_IMPORTED_MODULE_1__["schedulePromise"])(input, scheduler);
30682 }
30683 else if (Object(_util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__["isArrayLike"])(input)) {
30684 return Object(_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
30685 }
30686 else if (Object(_util_isIterable__WEBPACK_IMPORTED_MODULE_7__["isIterable"])(input) || typeof input === 'string') {
30687 return Object(_scheduleIterable__WEBPACK_IMPORTED_MODULE_3__["scheduleIterable"])(input, scheduler);
30688 }
30689 }
30690 throw new TypeError((input !== null && typeof input || input) + ' is not observable');
30691}
30692//# sourceMappingURL=scheduled.js.map
30693
30694
30695/***/ }),
30696/* 243 */
30697/***/ (function(module, __webpack_exports__, __webpack_require__) {
30698
30699"use strict";
30700__webpack_require__.r(__webpack_exports__);
30701/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleObservable", function() { return scheduleObservable; });
30702/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30703/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30704/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(181);
30705/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */
30706
30707
30708
30709function scheduleObservable(input, scheduler) {
30710 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30711 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30712 sub.add(scheduler.schedule(function () {
30713 var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]();
30714 sub.add(observable.subscribe({
30715 next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
30716 error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
30717 complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
30718 }));
30719 }));
30720 return sub;
30721 });
30722}
30723//# sourceMappingURL=scheduleObservable.js.map
30724
30725
30726/***/ }),
30727/* 244 */
30728/***/ (function(module, __webpack_exports__, __webpack_require__) {
30729
30730"use strict";
30731__webpack_require__.r(__webpack_exports__);
30732/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "schedulePromise", function() { return schedulePromise; });
30733/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30734/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30735/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
30736
30737
30738function schedulePromise(input, scheduler) {
30739 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30740 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30741 sub.add(scheduler.schedule(function () {
30742 return input.then(function (value) {
30743 sub.add(scheduler.schedule(function () {
30744 subscriber.next(value);
30745 sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
30746 }));
30747 }, function (err) {
30748 sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
30749 });
30750 }));
30751 return sub;
30752 });
30753}
30754//# sourceMappingURL=schedulePromise.js.map
30755
30756
30757/***/ }),
30758/* 245 */
30759/***/ (function(module, __webpack_exports__, __webpack_require__) {
30760
30761"use strict";
30762__webpack_require__.r(__webpack_exports__);
30763/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleIterable", function() { return scheduleIterable; });
30764/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30765/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30766/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(233);
30767/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */
30768
30769
30770
30771function scheduleIterable(input, scheduler) {
30772 if (!input) {
30773 throw new Error('Iterable cannot be null');
30774 }
30775 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30776 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30777 var iterator;
30778 sub.add(function () {
30779 if (iterator && typeof iterator.return === 'function') {
30780 iterator.return();
30781 }
30782 });
30783 sub.add(scheduler.schedule(function () {
30784 iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__["iterator"]]();
30785 sub.add(scheduler.schedule(function () {
30786 if (subscriber.closed) {
30787 return;
30788 }
30789 var value;
30790 var done;
30791 try {
30792 var result = iterator.next();
30793 value = result.value;
30794 done = result.done;
30795 }
30796 catch (err) {
30797 subscriber.error(err);
30798 return;
30799 }
30800 if (done) {
30801 subscriber.complete();
30802 }
30803 else {
30804 subscriber.next(value);
30805 this.schedule();
30806 }
30807 }));
30808 }));
30809 return sub;
30810 });
30811}
30812//# sourceMappingURL=scheduleIterable.js.map
30813
30814
30815/***/ }),
30816/* 246 */
30817/***/ (function(module, __webpack_exports__, __webpack_require__) {
30818
30819"use strict";
30820__webpack_require__.r(__webpack_exports__);
30821/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteropObservable", function() { return isInteropObservable; });
30822/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(181);
30823/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30824
30825function isInteropObservable(input) {
30826 return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]] === 'function';
30827}
30828//# sourceMappingURL=isInteropObservable.js.map
30829
30830
30831/***/ }),
30832/* 247 */
30833/***/ (function(module, __webpack_exports__, __webpack_require__) {
30834
30835"use strict";
30836__webpack_require__.r(__webpack_exports__);
30837/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIterable", function() { return isIterable; });
30838/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30839/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30840
30841function isIterable(input) {
30842 return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]] === 'function';
30843}
30844//# sourceMappingURL=isIterable.js.map
30845
30846
30847/***/ }),
30848/* 248 */
30849/***/ (function(module, __webpack_exports__, __webpack_require__) {
30850
30851"use strict";
30852__webpack_require__.r(__webpack_exports__);
30853/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return defer; });
30854/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30855/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
30856/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
30857/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
30858
30859
30860
30861function defer(observableFactory) {
30862 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30863 var input;
30864 try {
30865 input = observableFactory();
30866 }
30867 catch (err) {
30868 subscriber.error(err);
30869 return undefined;
30870 }
30871 var source = input ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(input) : Object(_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
30872 return source.subscribe(subscriber);
30873 });
30874}
30875//# sourceMappingURL=defer.js.map
30876
30877
30878/***/ }),
30879/* 249 */
30880/***/ (function(module, __webpack_exports__, __webpack_require__) {
30881
30882"use strict";
30883__webpack_require__.r(__webpack_exports__);
30884/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return forkJoin; });
30885/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30886/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
30887/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
30888/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(177);
30889/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(241);
30890/** PURE_IMPORTS_START _Observable,_util_isArray,_operators_map,_util_isObject,_from PURE_IMPORTS_END */
30891
30892
30893
30894
30895
30896function forkJoin() {
30897 var sources = [];
30898 for (var _i = 0; _i < arguments.length; _i++) {
30899 sources[_i] = arguments[_i];
30900 }
30901 if (sources.length === 1) {
30902 var first_1 = sources[0];
30903 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(first_1)) {
30904 return forkJoinInternal(first_1, null);
30905 }
30906 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_3__["isObject"])(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
30907 var keys = Object.keys(first_1);
30908 return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
30909 }
30910 }
30911 if (typeof sources[sources.length - 1] === 'function') {
30912 var resultSelector_1 = sources.pop();
30913 sources = (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(sources[0])) ? sources[0] : sources;
30914 return forkJoinInternal(sources, null).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) { return resultSelector_1.apply(void 0, args); }));
30915 }
30916 return forkJoinInternal(sources, null);
30917}
30918function forkJoinInternal(sources, keys) {
30919 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30920 var len = sources.length;
30921 if (len === 0) {
30922 subscriber.complete();
30923 return;
30924 }
30925 var values = new Array(len);
30926 var completed = 0;
30927 var emitted = 0;
30928 var _loop_1 = function (i) {
30929 var source = Object(_from__WEBPACK_IMPORTED_MODULE_4__["from"])(sources[i]);
30930 var hasValue = false;
30931 subscriber.add(source.subscribe({
30932 next: function (value) {
30933 if (!hasValue) {
30934 hasValue = true;
30935 emitted++;
30936 }
30937 values[i] = value;
30938 },
30939 error: function (err) { return subscriber.error(err); },
30940 complete: function () {
30941 completed++;
30942 if (completed === len || !hasValue) {
30943 if (emitted === len) {
30944 subscriber.next(keys ?
30945 keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
30946 values);
30947 }
30948 subscriber.complete();
30949 }
30950 }
30951 }));
30952 };
30953 for (var i = 0; i < len; i++) {
30954 _loop_1(i);
30955 }
30956 });
30957}
30958//# sourceMappingURL=forkJoin.js.map
30959
30960
30961/***/ }),
30962/* 250 */
30963/***/ (function(module, __webpack_exports__, __webpack_require__) {
30964
30965"use strict";
30966__webpack_require__.r(__webpack_exports__);
30967/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return fromEvent; });
30968/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30969/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
30970/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
30971/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
30972/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
30973
30974
30975
30976
30977var toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();
30978function fromEvent(target, eventName, options, resultSelector) {
30979 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(options)) {
30980 resultSelector = options;
30981 options = undefined;
30982 }
30983 if (resultSelector) {
30984 return fromEvent(target, eventName, options).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (args) { return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
30985 }
30986 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30987 function handler(e) {
30988 if (arguments.length > 1) {
30989 subscriber.next(Array.prototype.slice.call(arguments));
30990 }
30991 else {
30992 subscriber.next(e);
30993 }
30994 }
30995 setupSubscription(target, eventName, handler, subscriber, options);
30996 });
30997}
30998function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
30999 var unsubscribe;
31000 if (isEventTarget(sourceObj)) {
31001 var source_1 = sourceObj;
31002 sourceObj.addEventListener(eventName, handler, options);
31003 unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
31004 }
31005 else if (isJQueryStyleEventEmitter(sourceObj)) {
31006 var source_2 = sourceObj;
31007 sourceObj.on(eventName, handler);
31008 unsubscribe = function () { return source_2.off(eventName, handler); };
31009 }
31010 else if (isNodeStyleEventEmitter(sourceObj)) {
31011 var source_3 = sourceObj;
31012 sourceObj.addListener(eventName, handler);
31013 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
31014 }
31015 else if (sourceObj && sourceObj.length) {
31016 for (var i = 0, len = sourceObj.length; i < len; i++) {
31017 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
31018 }
31019 }
31020 else {
31021 throw new TypeError('Invalid event target');
31022 }
31023 subscriber.add(unsubscribe);
31024}
31025function isNodeStyleEventEmitter(sourceObj) {
31026 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
31027}
31028function isJQueryStyleEventEmitter(sourceObj) {
31029 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
31030}
31031function isEventTarget(sourceObj) {
31032 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
31033}
31034//# sourceMappingURL=fromEvent.js.map
31035
31036
31037/***/ }),
31038/* 251 */
31039/***/ (function(module, __webpack_exports__, __webpack_require__) {
31040
31041"use strict";
31042__webpack_require__.r(__webpack_exports__);
31043/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return fromEventPattern; });
31044/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31045/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
31046/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
31047/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
31048/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
31049
31050
31051
31052
31053function fromEventPattern(addHandler, removeHandler, resultSelector) {
31054 if (resultSelector) {
31055 return fromEventPattern(addHandler, removeHandler).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (args) { return Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(args) ? resultSelector.apply(void 0, args) : resultSelector(args); }));
31056 }
31057 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31058 var handler = function () {
31059 var e = [];
31060 for (var _i = 0; _i < arguments.length; _i++) {
31061 e[_i] = arguments[_i];
31062 }
31063 return subscriber.next(e.length === 1 ? e[0] : e);
31064 };
31065 var retValue;
31066 try {
31067 retValue = addHandler(handler);
31068 }
31069 catch (err) {
31070 subscriber.error(err);
31071 return undefined;
31072 }
31073 if (!Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(removeHandler)) {
31074 return undefined;
31075 }
31076 return function () { return removeHandler(handler, retValue); };
31077 });
31078}
31079//# sourceMappingURL=fromEventPattern.js.map
31080
31081
31082/***/ }),
31083/* 252 */
31084/***/ (function(module, __webpack_exports__, __webpack_require__) {
31085
31086"use strict";
31087__webpack_require__.r(__webpack_exports__);
31088/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });
31089/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31090/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
31091/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(203);
31092/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
31093
31094
31095
31096function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
31097 var resultSelector;
31098 var initialState;
31099 if (arguments.length == 1) {
31100 var options = initialStateOrOptions;
31101 initialState = options.initialState;
31102 condition = options.condition;
31103 iterate = options.iterate;
31104 resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
31105 scheduler = options.scheduler;
31106 }
31107 else if (resultSelectorOrObservable === undefined || Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(resultSelectorOrObservable)) {
31108 initialState = initialStateOrOptions;
31109 resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
31110 scheduler = resultSelectorOrObservable;
31111 }
31112 else {
31113 initialState = initialStateOrOptions;
31114 resultSelector = resultSelectorOrObservable;
31115 }
31116 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31117 var state = initialState;
31118 if (scheduler) {
31119 return scheduler.schedule(dispatch, 0, {
31120 subscriber: subscriber,
31121 iterate: iterate,
31122 condition: condition,
31123 resultSelector: resultSelector,
31124 state: state
31125 });
31126 }
31127 do {
31128 if (condition) {
31129 var conditionResult = void 0;
31130 try {
31131 conditionResult = condition(state);
31132 }
31133 catch (err) {
31134 subscriber.error(err);
31135 return undefined;
31136 }
31137 if (!conditionResult) {
31138 subscriber.complete();
31139 break;
31140 }
31141 }
31142 var value = void 0;
31143 try {
31144 value = resultSelector(state);
31145 }
31146 catch (err) {
31147 subscriber.error(err);
31148 return undefined;
31149 }
31150 subscriber.next(value);
31151 if (subscriber.closed) {
31152 break;
31153 }
31154 try {
31155 state = iterate(state);
31156 }
31157 catch (err) {
31158 subscriber.error(err);
31159 return undefined;
31160 }
31161 } while (true);
31162 return undefined;
31163 });
31164}
31165function dispatch(state) {
31166 var subscriber = state.subscriber, condition = state.condition;
31167 if (subscriber.closed) {
31168 return undefined;
31169 }
31170 if (state.needIterate) {
31171 try {
31172 state.state = state.iterate(state.state);
31173 }
31174 catch (err) {
31175 subscriber.error(err);
31176 return undefined;
31177 }
31178 }
31179 else {
31180 state.needIterate = true;
31181 }
31182 if (condition) {
31183 var conditionResult = void 0;
31184 try {
31185 conditionResult = condition(state.state);
31186 }
31187 catch (err) {
31188 subscriber.error(err);
31189 return undefined;
31190 }
31191 if (!conditionResult) {
31192 subscriber.complete();
31193 return undefined;
31194 }
31195 if (subscriber.closed) {
31196 return undefined;
31197 }
31198 }
31199 var value;
31200 try {
31201 value = state.resultSelector(state.state);
31202 }
31203 catch (err) {
31204 subscriber.error(err);
31205 return undefined;
31206 }
31207 if (subscriber.closed) {
31208 return undefined;
31209 }
31210 subscriber.next(value);
31211 if (subscriber.closed) {
31212 return undefined;
31213 }
31214 return this.schedule(state);
31215}
31216//# sourceMappingURL=generate.js.map
31217
31218
31219/***/ }),
31220/* 253 */
31221/***/ (function(module, __webpack_exports__, __webpack_require__) {
31222
31223"use strict";
31224__webpack_require__.r(__webpack_exports__);
31225/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return iif; });
31226/* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(248);
31227/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(201);
31228/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */
31229
31230
31231function iif(condition, trueResult, falseResult) {
31232 if (trueResult === void 0) {
31233 trueResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
31234 }
31235 if (falseResult === void 0) {
31236 falseResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
31237 }
31238 return Object(_defer__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { return condition() ? trueResult : falseResult; });
31239}
31240//# sourceMappingURL=iif.js.map
31241
31242
31243/***/ }),
31244/* 254 */
31245/***/ (function(module, __webpack_exports__, __webpack_require__) {
31246
31247"use strict";
31248__webpack_require__.r(__webpack_exports__);
31249/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return interval; });
31250/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31251/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
31252/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
31253/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */
31254
31255
31256
31257function interval(period, scheduler) {
31258 if (period === void 0) {
31259 period = 0;
31260 }
31261 if (scheduler === void 0) {
31262 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31263 }
31264 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(period) || period < 0) {
31265 period = 0;
31266 }
31267 if (!scheduler || typeof scheduler.schedule !== 'function') {
31268 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31269 }
31270 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31271 subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));
31272 return subscriber;
31273 });
31274}
31275function dispatch(state) {
31276 var subscriber = state.subscriber, counter = state.counter, period = state.period;
31277 subscriber.next(counter);
31278 this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
31279}
31280//# sourceMappingURL=interval.js.map
31281
31282
31283/***/ }),
31284/* 255 */
31285/***/ (function(module, __webpack_exports__, __webpack_require__) {
31286
31287"use strict";
31288__webpack_require__.r(__webpack_exports__);
31289/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNumeric", function() { return isNumeric; });
31290/* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
31291/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */
31292
31293function isNumeric(val) {
31294 return !Object(_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) && (val - parseFloat(val) + 1) >= 0;
31295}
31296//# sourceMappingURL=isNumeric.js.map
31297
31298
31299/***/ }),
31300/* 256 */
31301/***/ (function(module, __webpack_exports__, __webpack_require__) {
31302
31303"use strict";
31304__webpack_require__.r(__webpack_exports__);
31305/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
31306/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31307/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
31308/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(239);
31309/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(204);
31310/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */
31311
31312
31313
31314
31315function merge() {
31316 var observables = [];
31317 for (var _i = 0; _i < arguments.length; _i++) {
31318 observables[_i] = arguments[_i];
31319 }
31320 var concurrent = Number.POSITIVE_INFINITY;
31321 var scheduler = null;
31322 var last = observables[observables.length - 1];
31323 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(last)) {
31324 scheduler = observables.pop();
31325 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
31326 concurrent = observables.pop();
31327 }
31328 }
31329 else if (typeof last === 'number') {
31330 concurrent = observables.pop();
31331 }
31332 if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
31333 return observables[0];
31334 }
31335 return Object(_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__["mergeAll"])(concurrent)(Object(_fromArray__WEBPACK_IMPORTED_MODULE_3__["fromArray"])(observables, scheduler));
31336}
31337//# sourceMappingURL=merge.js.map
31338
31339
31340/***/ }),
31341/* 257 */
31342/***/ (function(module, __webpack_exports__, __webpack_require__) {
31343
31344"use strict";
31345__webpack_require__.r(__webpack_exports__);
31346/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return NEVER; });
31347/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "never", function() { return never; });
31348/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31349/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(218);
31350/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */
31351
31352
31353var NEVER = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](_util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"]);
31354function never() {
31355 return NEVER;
31356}
31357//# sourceMappingURL=never.js.map
31358
31359
31360/***/ }),
31361/* 258 */
31362/***/ (function(module, __webpack_exports__, __webpack_require__) {
31363
31364"use strict";
31365__webpack_require__.r(__webpack_exports__);
31366/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
31367/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31368/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
31369/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
31370/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
31371/** PURE_IMPORTS_START _Observable,_from,_util_isArray,_empty PURE_IMPORTS_END */
31372
31373
31374
31375
31376function onErrorResumeNext() {
31377 var sources = [];
31378 for (var _i = 0; _i < arguments.length; _i++) {
31379 sources[_i] = arguments[_i];
31380 }
31381 if (sources.length === 0) {
31382 return _empty__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
31383 }
31384 var first = sources[0], remainder = sources.slice(1);
31385 if (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(first)) {
31386 return onErrorResumeNext.apply(void 0, first);
31387 }
31388 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31389 var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
31390 return Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(first).subscribe({
31391 next: function (value) { subscriber.next(value); },
31392 error: subNext,
31393 complete: subNext,
31394 });
31395 });
31396}
31397//# sourceMappingURL=onErrorResumeNext.js.map
31398
31399
31400/***/ }),
31401/* 259 */
31402/***/ (function(module, __webpack_exports__, __webpack_require__) {
31403
31404"use strict";
31405__webpack_require__.r(__webpack_exports__);
31406/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return pairs; });
31407/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
31408/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31409/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
31410/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
31411
31412
31413function pairs(obj, scheduler) {
31414 if (!scheduler) {
31415 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31416 var keys = Object.keys(obj);
31417 for (var i = 0; i < keys.length && !subscriber.closed; i++) {
31418 var key = keys[i];
31419 if (obj.hasOwnProperty(key)) {
31420 subscriber.next([key, obj[key]]);
31421 }
31422 }
31423 subscriber.complete();
31424 });
31425 }
31426 else {
31427 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31428 var keys = Object.keys(obj);
31429 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
31430 subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
31431 return subscription;
31432 });
31433 }
31434}
31435function dispatch(state) {
31436 var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
31437 if (!subscriber.closed) {
31438 if (index < keys.length) {
31439 var key = keys[index];
31440 subscriber.next([key, obj[key]]);
31441 subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
31442 }
31443 else {
31444 subscriber.complete();
31445 }
31446 }
31447}
31448//# sourceMappingURL=pairs.js.map
31449
31450
31451/***/ }),
31452/* 260 */
31453/***/ (function(module, __webpack_exports__, __webpack_require__) {
31454
31455"use strict";
31456__webpack_require__.r(__webpack_exports__);
31457/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
31458/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(261);
31459/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
31460/* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(262);
31461/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(167);
31462/** PURE_IMPORTS_START _util_not,_util_subscribeTo,_operators_filter,_Observable PURE_IMPORTS_END */
31463
31464
31465
31466
31467function partition(source, predicate, thisArg) {
31468 return [
31469 Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(predicate, thisArg)(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source))),
31470 Object(_operators_filter__WEBPACK_IMPORTED_MODULE_2__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(new _Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(source)))
31471 ];
31472}
31473//# sourceMappingURL=partition.js.map
31474
31475
31476/***/ }),
31477/* 261 */
31478/***/ (function(module, __webpack_exports__, __webpack_require__) {
31479
31480"use strict";
31481__webpack_require__.r(__webpack_exports__);
31482/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "not", function() { return not; });
31483/** PURE_IMPORTS_START PURE_IMPORTS_END */
31484function not(pred, thisArg) {
31485 function notPred() {
31486 return !(notPred.pred.apply(notPred.thisArg, arguments));
31487 }
31488 notPred.pred = pred;
31489 notPred.thisArg = thisArg;
31490 return notPred;
31491}
31492//# sourceMappingURL=not.js.map
31493
31494
31495/***/ }),
31496/* 262 */
31497/***/ (function(module, __webpack_exports__, __webpack_require__) {
31498
31499"use strict";
31500__webpack_require__.r(__webpack_exports__);
31501/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return filter; });
31502/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31503/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
31504/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31505
31506
31507function filter(predicate, thisArg) {
31508 return function filterOperatorFunction(source) {
31509 return source.lift(new FilterOperator(predicate, thisArg));
31510 };
31511}
31512var FilterOperator = /*@__PURE__*/ (function () {
31513 function FilterOperator(predicate, thisArg) {
31514 this.predicate = predicate;
31515 this.thisArg = thisArg;
31516 }
31517 FilterOperator.prototype.call = function (subscriber, source) {
31518 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
31519 };
31520 return FilterOperator;
31521}());
31522var FilterSubscriber = /*@__PURE__*/ (function (_super) {
31523 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FilterSubscriber, _super);
31524 function FilterSubscriber(destination, predicate, thisArg) {
31525 var _this = _super.call(this, destination) || this;
31526 _this.predicate = predicate;
31527 _this.thisArg = thisArg;
31528 _this.count = 0;
31529 return _this;
31530 }
31531 FilterSubscriber.prototype._next = function (value) {
31532 var result;
31533 try {
31534 result = this.predicate.call(this.thisArg, value, this.count++);
31535 }
31536 catch (err) {
31537 this.destination.error(err);
31538 return;
31539 }
31540 if (result) {
31541 this.destination.next(value);
31542 }
31543 };
31544 return FilterSubscriber;
31545}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31546//# sourceMappingURL=filter.js.map
31547
31548
31549/***/ }),
31550/* 263 */
31551/***/ (function(module, __webpack_exports__, __webpack_require__) {
31552
31553"use strict";
31554__webpack_require__.r(__webpack_exports__);
31555/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
31556/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceOperator", function() { return RaceOperator; });
31557/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceSubscriber", function() { return RaceSubscriber; });
31558/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31559/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
31560/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(204);
31561/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
31562/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
31563/** PURE_IMPORTS_START tslib,_util_isArray,_fromArray,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
31564
31565
31566
31567
31568
31569function race() {
31570 var observables = [];
31571 for (var _i = 0; _i < arguments.length; _i++) {
31572 observables[_i] = arguments[_i];
31573 }
31574 if (observables.length === 1) {
31575 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(observables[0])) {
31576 observables = observables[0];
31577 }
31578 else {
31579 return observables[0];
31580 }
31581 }
31582 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_2__["fromArray"])(observables, undefined).lift(new RaceOperator());
31583}
31584var RaceOperator = /*@__PURE__*/ (function () {
31585 function RaceOperator() {
31586 }
31587 RaceOperator.prototype.call = function (subscriber, source) {
31588 return source.subscribe(new RaceSubscriber(subscriber));
31589 };
31590 return RaceOperator;
31591}());
31592
31593var RaceSubscriber = /*@__PURE__*/ (function (_super) {
31594 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RaceSubscriber, _super);
31595 function RaceSubscriber(destination) {
31596 var _this = _super.call(this, destination) || this;
31597 _this.hasFirst = false;
31598 _this.observables = [];
31599 _this.subscriptions = [];
31600 return _this;
31601 }
31602 RaceSubscriber.prototype._next = function (observable) {
31603 this.observables.push(observable);
31604 };
31605 RaceSubscriber.prototype._complete = function () {
31606 var observables = this.observables;
31607 var len = observables.length;
31608 if (len === 0) {
31609 this.destination.complete();
31610 }
31611 else {
31612 for (var i = 0; i < len && !this.hasFirst; i++) {
31613 var observable = observables[i];
31614 var subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i);
31615 if (this.subscriptions) {
31616 this.subscriptions.push(subscription);
31617 }
31618 this.add(subscription);
31619 }
31620 this.observables = null;
31621 }
31622 };
31623 RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31624 if (!this.hasFirst) {
31625 this.hasFirst = true;
31626 for (var i = 0; i < this.subscriptions.length; i++) {
31627 if (i !== outerIndex) {
31628 var subscription = this.subscriptions[i];
31629 subscription.unsubscribe();
31630 this.remove(subscription);
31631 }
31632 }
31633 this.subscriptions = null;
31634 }
31635 this.destination.next(innerValue);
31636 };
31637 return RaceSubscriber;
31638}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
31639
31640//# sourceMappingURL=race.js.map
31641
31642
31643/***/ }),
31644/* 264 */
31645/***/ (function(module, __webpack_exports__, __webpack_require__) {
31646
31647"use strict";
31648__webpack_require__.r(__webpack_exports__);
31649/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "range", function() { return range; });
31650/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
31651/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31652/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
31653
31654function range(start, count, scheduler) {
31655 if (start === void 0) {
31656 start = 0;
31657 }
31658 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31659 if (count === undefined) {
31660 count = start;
31661 start = 0;
31662 }
31663 var index = 0;
31664 var current = start;
31665 if (scheduler) {
31666 return scheduler.schedule(dispatch, 0, {
31667 index: index, count: count, start: start, subscriber: subscriber
31668 });
31669 }
31670 else {
31671 do {
31672 if (index++ >= count) {
31673 subscriber.complete();
31674 break;
31675 }
31676 subscriber.next(current++);
31677 if (subscriber.closed) {
31678 break;
31679 }
31680 } while (true);
31681 }
31682 return undefined;
31683 });
31684}
31685function dispatch(state) {
31686 var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
31687 if (index >= count) {
31688 subscriber.complete();
31689 return;
31690 }
31691 subscriber.next(start);
31692 if (subscriber.closed) {
31693 return;
31694 }
31695 state.index = index + 1;
31696 state.start = start + 1;
31697 this.schedule(state);
31698}
31699//# sourceMappingURL=range.js.map
31700
31701
31702/***/ }),
31703/* 265 */
31704/***/ (function(module, __webpack_exports__, __webpack_require__) {
31705
31706"use strict";
31707__webpack_require__.r(__webpack_exports__);
31708/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; });
31709/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31710/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
31711/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
31712/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(203);
31713/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
31714
31715
31716
31717
31718function timer(dueTime, periodOrScheduler, scheduler) {
31719 if (dueTime === void 0) {
31720 dueTime = 0;
31721 }
31722 var period = -1;
31723 if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(periodOrScheduler)) {
31724 period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
31725 }
31726 else if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(periodOrScheduler)) {
31727 scheduler = periodOrScheduler;
31728 }
31729 if (!Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(scheduler)) {
31730 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31731 }
31732 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31733 var due = Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(dueTime)
31734 ? dueTime
31735 : (+dueTime - scheduler.now());
31736 return scheduler.schedule(dispatch, due, {
31737 index: 0, period: period, subscriber: subscriber
31738 });
31739 });
31740}
31741function dispatch(state) {
31742 var index = state.index, period = state.period, subscriber = state.subscriber;
31743 subscriber.next(index);
31744 if (subscriber.closed) {
31745 return;
31746 }
31747 else if (period === -1) {
31748 return subscriber.complete();
31749 }
31750 state.index = index + 1;
31751 this.schedule(state, period);
31752}
31753//# sourceMappingURL=timer.js.map
31754
31755
31756/***/ }),
31757/* 266 */
31758/***/ (function(module, __webpack_exports__, __webpack_require__) {
31759
31760"use strict";
31761__webpack_require__.r(__webpack_exports__);
31762/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "using", function() { return using; });
31763/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31764/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
31765/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
31766/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
31767
31768
31769
31770function using(resourceFactory, observableFactory) {
31771 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31772 var resource;
31773 try {
31774 resource = resourceFactory();
31775 }
31776 catch (err) {
31777 subscriber.error(err);
31778 return undefined;
31779 }
31780 var result;
31781 try {
31782 result = observableFactory(resource);
31783 }
31784 catch (err) {
31785 subscriber.error(err);
31786 return undefined;
31787 }
31788 var source = result ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(result) : _empty__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
31789 var subscription = source.subscribe(subscriber);
31790 return function () {
31791 subscription.unsubscribe();
31792 if (resource) {
31793 resource.unsubscribe();
31794 }
31795 };
31796 });
31797}
31798//# sourceMappingURL=using.js.map
31799
31800
31801/***/ }),
31802/* 267 */
31803/***/ (function(module, __webpack_exports__, __webpack_require__) {
31804
31805"use strict";
31806__webpack_require__.r(__webpack_exports__);
31807/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
31808/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipOperator", function() { return ZipOperator; });
31809/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipSubscriber", function() { return ZipSubscriber; });
31810/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31811/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
31812/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
31813/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
31814/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(227);
31815/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(228);
31816/* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(233);
31817/** PURE_IMPORTS_START tslib,_fromArray,_util_isArray,_Subscriber,_OuterSubscriber,_util_subscribeToResult,_.._internal_symbol_iterator PURE_IMPORTS_END */
31818
31819
31820
31821
31822
31823
31824
31825function zip() {
31826 var observables = [];
31827 for (var _i = 0; _i < arguments.length; _i++) {
31828 observables[_i] = arguments[_i];
31829 }
31830 var resultSelector = observables[observables.length - 1];
31831 if (typeof resultSelector === 'function') {
31832 observables.pop();
31833 }
31834 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(observables, undefined).lift(new ZipOperator(resultSelector));
31835}
31836var ZipOperator = /*@__PURE__*/ (function () {
31837 function ZipOperator(resultSelector) {
31838 this.resultSelector = resultSelector;
31839 }
31840 ZipOperator.prototype.call = function (subscriber, source) {
31841 return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
31842 };
31843 return ZipOperator;
31844}());
31845
31846var ZipSubscriber = /*@__PURE__*/ (function (_super) {
31847 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipSubscriber, _super);
31848 function ZipSubscriber(destination, resultSelector, values) {
31849 if (values === void 0) {
31850 values = Object.create(null);
31851 }
31852 var _this = _super.call(this, destination) || this;
31853 _this.iterators = [];
31854 _this.active = 0;
31855 _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
31856 _this.values = values;
31857 return _this;
31858 }
31859 ZipSubscriber.prototype._next = function (value) {
31860 var iterators = this.iterators;
31861 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(value)) {
31862 iterators.push(new StaticArrayIterator(value));
31863 }
31864 else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] === 'function') {
31865 iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]]()));
31866 }
31867 else {
31868 iterators.push(new ZipBufferIterator(this.destination, this, value));
31869 }
31870 };
31871 ZipSubscriber.prototype._complete = function () {
31872 var iterators = this.iterators;
31873 var len = iterators.length;
31874 this.unsubscribe();
31875 if (len === 0) {
31876 this.destination.complete();
31877 return;
31878 }
31879 this.active = len;
31880 for (var i = 0; i < len; i++) {
31881 var iterator = iterators[i];
31882 if (iterator.stillUnsubscribed) {
31883 var destination = this.destination;
31884 destination.add(iterator.subscribe(iterator, i));
31885 }
31886 else {
31887 this.active--;
31888 }
31889 }
31890 };
31891 ZipSubscriber.prototype.notifyInactive = function () {
31892 this.active--;
31893 if (this.active === 0) {
31894 this.destination.complete();
31895 }
31896 };
31897 ZipSubscriber.prototype.checkIterators = function () {
31898 var iterators = this.iterators;
31899 var len = iterators.length;
31900 var destination = this.destination;
31901 for (var i = 0; i < len; i++) {
31902 var iterator = iterators[i];
31903 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
31904 return;
31905 }
31906 }
31907 var shouldComplete = false;
31908 var args = [];
31909 for (var i = 0; i < len; i++) {
31910 var iterator = iterators[i];
31911 var result = iterator.next();
31912 if (iterator.hasCompleted()) {
31913 shouldComplete = true;
31914 }
31915 if (result.done) {
31916 destination.complete();
31917 return;
31918 }
31919 args.push(result.value);
31920 }
31921 if (this.resultSelector) {
31922 this._tryresultSelector(args);
31923 }
31924 else {
31925 destination.next(args);
31926 }
31927 if (shouldComplete) {
31928 destination.complete();
31929 }
31930 };
31931 ZipSubscriber.prototype._tryresultSelector = function (args) {
31932 var result;
31933 try {
31934 result = this.resultSelector.apply(this, args);
31935 }
31936 catch (err) {
31937 this.destination.error(err);
31938 return;
31939 }
31940 this.destination.next(result);
31941 };
31942 return ZipSubscriber;
31943}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
31944
31945var StaticIterator = /*@__PURE__*/ (function () {
31946 function StaticIterator(iterator) {
31947 this.iterator = iterator;
31948 this.nextResult = iterator.next();
31949 }
31950 StaticIterator.prototype.hasValue = function () {
31951 return true;
31952 };
31953 StaticIterator.prototype.next = function () {
31954 var result = this.nextResult;
31955 this.nextResult = this.iterator.next();
31956 return result;
31957 };
31958 StaticIterator.prototype.hasCompleted = function () {
31959 var nextResult = this.nextResult;
31960 return nextResult && nextResult.done;
31961 };
31962 return StaticIterator;
31963}());
31964var StaticArrayIterator = /*@__PURE__*/ (function () {
31965 function StaticArrayIterator(array) {
31966 this.array = array;
31967 this.index = 0;
31968 this.length = 0;
31969 this.length = array.length;
31970 }
31971 StaticArrayIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
31972 return this;
31973 };
31974 StaticArrayIterator.prototype.next = function (value) {
31975 var i = this.index++;
31976 var array = this.array;
31977 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
31978 };
31979 StaticArrayIterator.prototype.hasValue = function () {
31980 return this.array.length > this.index;
31981 };
31982 StaticArrayIterator.prototype.hasCompleted = function () {
31983 return this.array.length === this.index;
31984 };
31985 return StaticArrayIterator;
31986}());
31987var ZipBufferIterator = /*@__PURE__*/ (function (_super) {
31988 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipBufferIterator, _super);
31989 function ZipBufferIterator(destination, parent, observable) {
31990 var _this = _super.call(this, destination) || this;
31991 _this.parent = parent;
31992 _this.observable = observable;
31993 _this.stillUnsubscribed = true;
31994 _this.buffer = [];
31995 _this.isComplete = false;
31996 return _this;
31997 }
31998 ZipBufferIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
31999 return this;
32000 };
32001 ZipBufferIterator.prototype.next = function () {
32002 var buffer = this.buffer;
32003 if (buffer.length === 0 && this.isComplete) {
32004 return { value: null, done: true };
32005 }
32006 else {
32007 return { value: buffer.shift(), done: false };
32008 }
32009 };
32010 ZipBufferIterator.prototype.hasValue = function () {
32011 return this.buffer.length > 0;
32012 };
32013 ZipBufferIterator.prototype.hasCompleted = function () {
32014 return this.buffer.length === 0 && this.isComplete;
32015 };
32016 ZipBufferIterator.prototype.notifyComplete = function () {
32017 if (this.buffer.length > 0) {
32018 this.isComplete = true;
32019 this.parent.notifyInactive();
32020 }
32021 else {
32022 this.destination.complete();
32023 }
32024 };
32025 ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32026 this.buffer.push(innerValue);
32027 this.parent.checkIterators();
32028 };
32029 ZipBufferIterator.prototype.subscribe = function (value, index) {
32030 return Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, this.observable, this, index);
32031 };
32032 return ZipBufferIterator;
32033}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__["OuterSubscriber"]));
32034//# sourceMappingURL=zip.js.map
32035
32036
32037/***/ }),
32038/* 268 */
32039/***/ (function(module, exports, __webpack_require__) {
32040
32041"use strict";
32042
32043Object.defineProperty(exports, "__esModule", { value: true });
32044var rxjs_1 = __webpack_require__(166);
32045/**
32046 *
32047 * only keep the lastest source observable value until the inner observable complete,
32048 * then trigger the lastest source observable value
32049 *
32050 * @param isAbandon - is abandon inner observable value when there is newer source observable value
32051 *
32052 */
32053function waitMap(fn, isAbandon) {
32054 if (isAbandon === void 0) { isAbandon = true; }
32055 return function (preObs) {
32056 return rxjs_1.Observable.create(function (observer) {
32057 var closed = false;
32058 var latestRes;
32059 var resultSubp;
32060 var subp;
32061 var run = function (res) {
32062 var obs = fn(res);
32063 return obs.subscribe({
32064 next: function (res) {
32065 if (latestRes !== undefined && isAbandon) {
32066 return;
32067 }
32068 observer.next(res);
32069 },
32070 error: function (err) {
32071 closed = true;
32072 observer.error(err);
32073 resultSubp.unsubscribe();
32074 },
32075 complete: function () {
32076 if (latestRes && !closed) {
32077 var res_1 = latestRes;
32078 latestRes = undefined;
32079 run(res_1);
32080 }
32081 }
32082 });
32083 };
32084 resultSubp = preObs.subscribe({
32085 next: function (res) {
32086 latestRes = res;
32087 if (!subp || subp.closed) {
32088 latestRes = undefined;
32089 subp = run(res);
32090 }
32091 },
32092 error: function (err) {
32093 closed = true;
32094 observer.error(err);
32095 },
32096 complete: function () {
32097 closed = true;
32098 observer.complete();
32099 }
32100 });
32101 return resultSubp;
32102 });
32103 };
32104}
32105exports.waitMap = waitMap;
32106
32107
32108/***/ }),
32109/* 269 */
32110/***/ (function(module, __webpack_exports__, __webpack_require__) {
32111
32112"use strict";
32113__webpack_require__.r(__webpack_exports__);
32114/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(270);
32115/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; });
32116
32117/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(271);
32118/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; });
32119
32120/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(272);
32121/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; });
32122
32123/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(273);
32124/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; });
32125
32126/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(274);
32127/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; });
32128
32129/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(275);
32130/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; });
32131
32132/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(276);
32133/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; });
32134
32135/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(277);
32136/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; });
32137
32138/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(278);
32139/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; });
32140
32141/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(279);
32142/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; });
32143
32144/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(280);
32145/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; });
32146
32147/* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(238);
32148/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; });
32149
32150/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(281);
32151/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; });
32152
32153/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(282);
32154/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; });
32155
32156/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(283);
32157/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; });
32158
32159/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(284);
32160/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; });
32161
32162/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(285);
32163/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; });
32164
32165/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(286);
32166/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; });
32167
32168/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(287);
32169/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; });
32170
32171/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(289);
32172/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; });
32173
32174/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(290);
32175/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; });
32176
32177/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(291);
32178/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; });
32179
32180/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(292);
32181/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; });
32182
32183/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(293);
32184/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; });
32185
32186/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(294);
32187/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; });
32188
32189/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(297);
32190/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; });
32191
32192/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(298);
32193/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; });
32194
32195/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(299);
32196/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; });
32197
32198/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(300);
32199/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; });
32200
32201/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(301);
32202/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; });
32203
32204/* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(262);
32205/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; });
32206
32207/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(302);
32208/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; });
32209
32210/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(303);
32211/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; });
32212
32213/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(304);
32214/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; });
32215
32216/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(305);
32217/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; });
32218
32219/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(189);
32220/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; });
32221
32222/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(306);
32223/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; });
32224
32225/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(307);
32226/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; });
32227
32228/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(308);
32229/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; });
32230
32231/* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(224);
32232/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; });
32233
32234/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(310);
32235/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; });
32236
32237/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(311);
32238/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; });
32239
32240/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(312);
32241/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; });
32242
32243/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(315);
32244/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; });
32245
32246/* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(239);
32247/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__["mergeAll"]; });
32248
32249/* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(240);
32250/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
32251
32252/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
32253
32254/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(316);
32255/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; });
32256
32257/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(317);
32258/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; });
32259
32260/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(318);
32261/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; });
32262
32263/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(319);
32264/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; });
32265
32266/* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(199);
32267/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; });
32268
32269/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(320);
32270/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; });
32271
32272/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(321);
32273/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; });
32274
32275/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(322);
32276/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; });
32277
32278/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(323);
32279/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; });
32280
32281/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(324);
32282/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; });
32283
32284/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(325);
32285/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; });
32286
32287/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(326);
32288/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; });
32289
32290/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(327);
32291/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; });
32292
32293/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(328);
32294/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; });
32295
32296/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(313);
32297/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; });
32298
32299/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(329);
32300/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; });
32301
32302/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(330);
32303/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; });
32304
32305/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(331);
32306/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; });
32307
32308/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(332);
32309/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; });
32310
32311/* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(188);
32312/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; });
32313
32314/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(333);
32315/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; });
32316
32317/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(334);
32318/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; });
32319
32320/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(314);
32321/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; });
32322
32323/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(335);
32324/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; });
32325
32326/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(336);
32327/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; });
32328
32329/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(337);
32330/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; });
32331
32332/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(338);
32333/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; });
32334
32335/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(339);
32336/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; });
32337
32338/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(340);
32339/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; });
32340
32341/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(341);
32342/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; });
32343
32344/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(342);
32345/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; });
32346
32347/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(343);
32348/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; });
32349
32350/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(344);
32351/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; });
32352
32353/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(346);
32354/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; });
32355
32356/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(347);
32357/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; });
32358
32359/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(348);
32360/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; });
32361
32362/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(296);
32363/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; });
32364
32365/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(309);
32366/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; });
32367
32368/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(349);
32369/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; });
32370
32371/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(350);
32372/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; });
32373
32374/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(351);
32375/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; });
32376
32377/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(352);
32378/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; });
32379
32380/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(353);
32381/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; });
32382
32383/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(295);
32384/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; });
32385
32386/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(354);
32387/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; });
32388
32389/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(355);
32390/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; });
32391
32392/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(356);
32393/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; });
32394
32395/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(357);
32396/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; });
32397
32398/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(358);
32399/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; });
32400
32401/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(359);
32402/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; });
32403
32404/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(360);
32405/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; });
32406
32407/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(361);
32408/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; });
32409
32410/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(362);
32411/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; });
32412
32413/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(363);
32414/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; });
32415
32416/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(364);
32417/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; });
32418
32419/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(365);
32420/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; });
32421
32422/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(366);
32423/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; });
32424
32425/** PURE_IMPORTS_START PURE_IMPORTS_END */
32426
32427
32428
32429
32430
32431
32432
32433
32434
32435
32436
32437
32438
32439
32440
32441
32442
32443
32444
32445
32446
32447
32448
32449
32450
32451
32452
32453
32454
32455
32456
32457
32458
32459
32460
32461
32462
32463
32464
32465
32466
32467
32468
32469
32470
32471
32472
32473
32474
32475
32476
32477
32478
32479
32480
32481
32482
32483
32484
32485
32486
32487
32488
32489
32490
32491
32492
32493
32494
32495
32496
32497
32498
32499
32500
32501
32502
32503
32504
32505
32506
32507
32508
32509
32510
32511
32512
32513
32514
32515
32516
32517
32518
32519
32520
32521
32522
32523
32524
32525
32526
32527
32528
32529
32530//# sourceMappingURL=index.js.map
32531
32532
32533/***/ }),
32534/* 270 */
32535/***/ (function(module, __webpack_exports__, __webpack_require__) {
32536
32537"use strict";
32538__webpack_require__.r(__webpack_exports__);
32539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return audit; });
32540/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32541/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
32542/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32543/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32544
32545
32546
32547function audit(durationSelector) {
32548 return function auditOperatorFunction(source) {
32549 return source.lift(new AuditOperator(durationSelector));
32550 };
32551}
32552var AuditOperator = /*@__PURE__*/ (function () {
32553 function AuditOperator(durationSelector) {
32554 this.durationSelector = durationSelector;
32555 }
32556 AuditOperator.prototype.call = function (subscriber, source) {
32557 return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
32558 };
32559 return AuditOperator;
32560}());
32561var AuditSubscriber = /*@__PURE__*/ (function (_super) {
32562 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AuditSubscriber, _super);
32563 function AuditSubscriber(destination, durationSelector) {
32564 var _this = _super.call(this, destination) || this;
32565 _this.durationSelector = durationSelector;
32566 _this.hasValue = false;
32567 return _this;
32568 }
32569 AuditSubscriber.prototype._next = function (value) {
32570 this.value = value;
32571 this.hasValue = true;
32572 if (!this.throttled) {
32573 var duration = void 0;
32574 try {
32575 var durationSelector = this.durationSelector;
32576 duration = durationSelector(value);
32577 }
32578 catch (err) {
32579 return this.destination.error(err);
32580 }
32581 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
32582 if (!innerSubscription || innerSubscription.closed) {
32583 this.clearThrottle();
32584 }
32585 else {
32586 this.add(this.throttled = innerSubscription);
32587 }
32588 }
32589 };
32590 AuditSubscriber.prototype.clearThrottle = function () {
32591 var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
32592 if (throttled) {
32593 this.remove(throttled);
32594 this.throttled = null;
32595 throttled.unsubscribe();
32596 }
32597 if (hasValue) {
32598 this.value = null;
32599 this.hasValue = false;
32600 this.destination.next(value);
32601 }
32602 };
32603 AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
32604 this.clearThrottle();
32605 };
32606 AuditSubscriber.prototype.notifyComplete = function () {
32607 this.clearThrottle();
32608 };
32609 return AuditSubscriber;
32610}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32611//# sourceMappingURL=audit.js.map
32612
32613
32614/***/ }),
32615/* 271 */
32616/***/ (function(module, __webpack_exports__, __webpack_require__) {
32617
32618"use strict";
32619__webpack_require__.r(__webpack_exports__);
32620/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; });
32621/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
32622/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(270);
32623/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(265);
32624/** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */
32625
32626
32627
32628function auditTime(duration, scheduler) {
32629 if (scheduler === void 0) {
32630 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
32631 }
32632 return Object(_audit__WEBPACK_IMPORTED_MODULE_1__["audit"])(function () { return Object(_observable_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(duration, scheduler); });
32633}
32634//# sourceMappingURL=auditTime.js.map
32635
32636
32637/***/ }),
32638/* 272 */
32639/***/ (function(module, __webpack_exports__, __webpack_require__) {
32640
32641"use strict";
32642__webpack_require__.r(__webpack_exports__);
32643/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return buffer; });
32644/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32645/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
32646/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32647/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32648
32649
32650
32651function buffer(closingNotifier) {
32652 return function bufferOperatorFunction(source) {
32653 return source.lift(new BufferOperator(closingNotifier));
32654 };
32655}
32656var BufferOperator = /*@__PURE__*/ (function () {
32657 function BufferOperator(closingNotifier) {
32658 this.closingNotifier = closingNotifier;
32659 }
32660 BufferOperator.prototype.call = function (subscriber, source) {
32661 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
32662 };
32663 return BufferOperator;
32664}());
32665var BufferSubscriber = /*@__PURE__*/ (function (_super) {
32666 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSubscriber, _super);
32667 function BufferSubscriber(destination, closingNotifier) {
32668 var _this = _super.call(this, destination) || this;
32669 _this.buffer = [];
32670 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, closingNotifier));
32671 return _this;
32672 }
32673 BufferSubscriber.prototype._next = function (value) {
32674 this.buffer.push(value);
32675 };
32676 BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32677 var buffer = this.buffer;
32678 this.buffer = [];
32679 this.destination.next(buffer);
32680 };
32681 return BufferSubscriber;
32682}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32683//# sourceMappingURL=buffer.js.map
32684
32685
32686/***/ }),
32687/* 273 */
32688/***/ (function(module, __webpack_exports__, __webpack_require__) {
32689
32690"use strict";
32691__webpack_require__.r(__webpack_exports__);
32692/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return bufferCount; });
32693/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32694/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
32695/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32696
32697
32698function bufferCount(bufferSize, startBufferEvery) {
32699 if (startBufferEvery === void 0) {
32700 startBufferEvery = null;
32701 }
32702 return function bufferCountOperatorFunction(source) {
32703 return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
32704 };
32705}
32706var BufferCountOperator = /*@__PURE__*/ (function () {
32707 function BufferCountOperator(bufferSize, startBufferEvery) {
32708 this.bufferSize = bufferSize;
32709 this.startBufferEvery = startBufferEvery;
32710 if (!startBufferEvery || bufferSize === startBufferEvery) {
32711 this.subscriberClass = BufferCountSubscriber;
32712 }
32713 else {
32714 this.subscriberClass = BufferSkipCountSubscriber;
32715 }
32716 }
32717 BufferCountOperator.prototype.call = function (subscriber, source) {
32718 return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
32719 };
32720 return BufferCountOperator;
32721}());
32722var BufferCountSubscriber = /*@__PURE__*/ (function (_super) {
32723 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferCountSubscriber, _super);
32724 function BufferCountSubscriber(destination, bufferSize) {
32725 var _this = _super.call(this, destination) || this;
32726 _this.bufferSize = bufferSize;
32727 _this.buffer = [];
32728 return _this;
32729 }
32730 BufferCountSubscriber.prototype._next = function (value) {
32731 var buffer = this.buffer;
32732 buffer.push(value);
32733 if (buffer.length == this.bufferSize) {
32734 this.destination.next(buffer);
32735 this.buffer = [];
32736 }
32737 };
32738 BufferCountSubscriber.prototype._complete = function () {
32739 var buffer = this.buffer;
32740 if (buffer.length > 0) {
32741 this.destination.next(buffer);
32742 }
32743 _super.prototype._complete.call(this);
32744 };
32745 return BufferCountSubscriber;
32746}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32747var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {
32748 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSkipCountSubscriber, _super);
32749 function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
32750 var _this = _super.call(this, destination) || this;
32751 _this.bufferSize = bufferSize;
32752 _this.startBufferEvery = startBufferEvery;
32753 _this.buffers = [];
32754 _this.count = 0;
32755 return _this;
32756 }
32757 BufferSkipCountSubscriber.prototype._next = function (value) {
32758 var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
32759 this.count++;
32760 if (count % startBufferEvery === 0) {
32761 buffers.push([]);
32762 }
32763 for (var i = buffers.length; i--;) {
32764 var buffer = buffers[i];
32765 buffer.push(value);
32766 if (buffer.length === bufferSize) {
32767 buffers.splice(i, 1);
32768 this.destination.next(buffer);
32769 }
32770 }
32771 };
32772 BufferSkipCountSubscriber.prototype._complete = function () {
32773 var _a = this, buffers = _a.buffers, destination = _a.destination;
32774 while (buffers.length > 0) {
32775 var buffer = buffers.shift();
32776 if (buffer.length > 0) {
32777 destination.next(buffer);
32778 }
32779 }
32780 _super.prototype._complete.call(this);
32781 };
32782 return BufferSkipCountSubscriber;
32783}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32784//# sourceMappingURL=bufferCount.js.map
32785
32786
32787/***/ }),
32788/* 274 */
32789/***/ (function(module, __webpack_exports__, __webpack_require__) {
32790
32791"use strict";
32792__webpack_require__.r(__webpack_exports__);
32793/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return bufferTime; });
32794/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32795/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
32796/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
32797/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(203);
32798/** PURE_IMPORTS_START tslib,_scheduler_async,_Subscriber,_util_isScheduler PURE_IMPORTS_END */
32799
32800
32801
32802
32803function bufferTime(bufferTimeSpan) {
32804 var length = arguments.length;
32805 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
32806 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(arguments[arguments.length - 1])) {
32807 scheduler = arguments[arguments.length - 1];
32808 length--;
32809 }
32810 var bufferCreationInterval = null;
32811 if (length >= 2) {
32812 bufferCreationInterval = arguments[1];
32813 }
32814 var maxBufferSize = Number.POSITIVE_INFINITY;
32815 if (length >= 3) {
32816 maxBufferSize = arguments[2];
32817 }
32818 return function bufferTimeOperatorFunction(source) {
32819 return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
32820 };
32821}
32822var BufferTimeOperator = /*@__PURE__*/ (function () {
32823 function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32824 this.bufferTimeSpan = bufferTimeSpan;
32825 this.bufferCreationInterval = bufferCreationInterval;
32826 this.maxBufferSize = maxBufferSize;
32827 this.scheduler = scheduler;
32828 }
32829 BufferTimeOperator.prototype.call = function (subscriber, source) {
32830 return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
32831 };
32832 return BufferTimeOperator;
32833}());
32834var Context = /*@__PURE__*/ (function () {
32835 function Context() {
32836 this.buffer = [];
32837 }
32838 return Context;
32839}());
32840var BufferTimeSubscriber = /*@__PURE__*/ (function (_super) {
32841 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferTimeSubscriber, _super);
32842 function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32843 var _this = _super.call(this, destination) || this;
32844 _this.bufferTimeSpan = bufferTimeSpan;
32845 _this.bufferCreationInterval = bufferCreationInterval;
32846 _this.maxBufferSize = maxBufferSize;
32847 _this.scheduler = scheduler;
32848 _this.contexts = [];
32849 var context = _this.openContext();
32850 _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
32851 if (_this.timespanOnly) {
32852 var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
32853 _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32854 }
32855 else {
32856 var closeState = { subscriber: _this, context: context };
32857 var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
32858 _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
32859 _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
32860 }
32861 return _this;
32862 }
32863 BufferTimeSubscriber.prototype._next = function (value) {
32864 var contexts = this.contexts;
32865 var len = contexts.length;
32866 var filledBufferContext;
32867 for (var i = 0; i < len; i++) {
32868 var context_1 = contexts[i];
32869 var buffer = context_1.buffer;
32870 buffer.push(value);
32871 if (buffer.length == this.maxBufferSize) {
32872 filledBufferContext = context_1;
32873 }
32874 }
32875 if (filledBufferContext) {
32876 this.onBufferFull(filledBufferContext);
32877 }
32878 };
32879 BufferTimeSubscriber.prototype._error = function (err) {
32880 this.contexts.length = 0;
32881 _super.prototype._error.call(this, err);
32882 };
32883 BufferTimeSubscriber.prototype._complete = function () {
32884 var _a = this, contexts = _a.contexts, destination = _a.destination;
32885 while (contexts.length > 0) {
32886 var context_2 = contexts.shift();
32887 destination.next(context_2.buffer);
32888 }
32889 _super.prototype._complete.call(this);
32890 };
32891 BufferTimeSubscriber.prototype._unsubscribe = function () {
32892 this.contexts = null;
32893 };
32894 BufferTimeSubscriber.prototype.onBufferFull = function (context) {
32895 this.closeContext(context);
32896 var closeAction = context.closeAction;
32897 closeAction.unsubscribe();
32898 this.remove(closeAction);
32899 if (!this.closed && this.timespanOnly) {
32900 context = this.openContext();
32901 var bufferTimeSpan = this.bufferTimeSpan;
32902 var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
32903 this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32904 }
32905 };
32906 BufferTimeSubscriber.prototype.openContext = function () {
32907 var context = new Context();
32908 this.contexts.push(context);
32909 return context;
32910 };
32911 BufferTimeSubscriber.prototype.closeContext = function (context) {
32912 this.destination.next(context.buffer);
32913 var contexts = this.contexts;
32914 var spliceIndex = contexts ? contexts.indexOf(context) : -1;
32915 if (spliceIndex >= 0) {
32916 contexts.splice(contexts.indexOf(context), 1);
32917 }
32918 };
32919 return BufferTimeSubscriber;
32920}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
32921function dispatchBufferTimeSpanOnly(state) {
32922 var subscriber = state.subscriber;
32923 var prevContext = state.context;
32924 if (prevContext) {
32925 subscriber.closeContext(prevContext);
32926 }
32927 if (!subscriber.closed) {
32928 state.context = subscriber.openContext();
32929 state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
32930 }
32931}
32932function dispatchBufferCreation(state) {
32933 var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
32934 var context = subscriber.openContext();
32935 var action = this;
32936 if (!subscriber.closed) {
32937 subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
32938 action.schedule(state, bufferCreationInterval);
32939 }
32940}
32941function dispatchBufferClose(arg) {
32942 var subscriber = arg.subscriber, context = arg.context;
32943 subscriber.closeContext(context);
32944}
32945//# sourceMappingURL=bufferTime.js.map
32946
32947
32948/***/ }),
32949/* 275 */
32950/***/ (function(module, __webpack_exports__, __webpack_require__) {
32951
32952"use strict";
32953__webpack_require__.r(__webpack_exports__);
32954/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return bufferToggle; });
32955/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32956/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
32957/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32958/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
32959/** PURE_IMPORTS_START tslib,_Subscription,_util_subscribeToResult,_OuterSubscriber PURE_IMPORTS_END */
32960
32961
32962
32963
32964function bufferToggle(openings, closingSelector) {
32965 return function bufferToggleOperatorFunction(source) {
32966 return source.lift(new BufferToggleOperator(openings, closingSelector));
32967 };
32968}
32969var BufferToggleOperator = /*@__PURE__*/ (function () {
32970 function BufferToggleOperator(openings, closingSelector) {
32971 this.openings = openings;
32972 this.closingSelector = closingSelector;
32973 }
32974 BufferToggleOperator.prototype.call = function (subscriber, source) {
32975 return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
32976 };
32977 return BufferToggleOperator;
32978}());
32979var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) {
32980 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferToggleSubscriber, _super);
32981 function BufferToggleSubscriber(destination, openings, closingSelector) {
32982 var _this = _super.call(this, destination) || this;
32983 _this.openings = openings;
32984 _this.closingSelector = closingSelector;
32985 _this.contexts = [];
32986 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, openings));
32987 return _this;
32988 }
32989 BufferToggleSubscriber.prototype._next = function (value) {
32990 var contexts = this.contexts;
32991 var len = contexts.length;
32992 for (var i = 0; i < len; i++) {
32993 contexts[i].buffer.push(value);
32994 }
32995 };
32996 BufferToggleSubscriber.prototype._error = function (err) {
32997 var contexts = this.contexts;
32998 while (contexts.length > 0) {
32999 var context_1 = contexts.shift();
33000 context_1.subscription.unsubscribe();
33001 context_1.buffer = null;
33002 context_1.subscription = null;
33003 }
33004 this.contexts = null;
33005 _super.prototype._error.call(this, err);
33006 };
33007 BufferToggleSubscriber.prototype._complete = function () {
33008 var contexts = this.contexts;
33009 while (contexts.length > 0) {
33010 var context_2 = contexts.shift();
33011 this.destination.next(context_2.buffer);
33012 context_2.subscription.unsubscribe();
33013 context_2.buffer = null;
33014 context_2.subscription = null;
33015 }
33016 this.contexts = null;
33017 _super.prototype._complete.call(this);
33018 };
33019 BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33020 outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
33021 };
33022 BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
33023 this.closeBuffer(innerSub.context);
33024 };
33025 BufferToggleSubscriber.prototype.openBuffer = function (value) {
33026 try {
33027 var closingSelector = this.closingSelector;
33028 var closingNotifier = closingSelector.call(this, value);
33029 if (closingNotifier) {
33030 this.trySubscribe(closingNotifier);
33031 }
33032 }
33033 catch (err) {
33034 this._error(err);
33035 }
33036 };
33037 BufferToggleSubscriber.prototype.closeBuffer = function (context) {
33038 var contexts = this.contexts;
33039 if (contexts && context) {
33040 var buffer = context.buffer, subscription = context.subscription;
33041 this.destination.next(buffer);
33042 contexts.splice(contexts.indexOf(context), 1);
33043 this.remove(subscription);
33044 subscription.unsubscribe();
33045 }
33046 };
33047 BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
33048 var contexts = this.contexts;
33049 var buffer = [];
33050 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
33051 var context = { buffer: buffer, subscription: subscription };
33052 contexts.push(context);
33053 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier, context);
33054 if (!innerSubscription || innerSubscription.closed) {
33055 this.closeBuffer(context);
33056 }
33057 else {
33058 innerSubscription.context = context;
33059 this.add(innerSubscription);
33060 subscription.add(innerSubscription);
33061 }
33062 };
33063 return BufferToggleSubscriber;
33064}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
33065//# sourceMappingURL=bufferToggle.js.map
33066
33067
33068/***/ }),
33069/* 276 */
33070/***/ (function(module, __webpack_exports__, __webpack_require__) {
33071
33072"use strict";
33073__webpack_require__.r(__webpack_exports__);
33074/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return bufferWhen; });
33075/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33076/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
33077/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
33078/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
33079/** PURE_IMPORTS_START tslib,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33080
33081
33082
33083
33084function bufferWhen(closingSelector) {
33085 return function (source) {
33086 return source.lift(new BufferWhenOperator(closingSelector));
33087 };
33088}
33089var BufferWhenOperator = /*@__PURE__*/ (function () {
33090 function BufferWhenOperator(closingSelector) {
33091 this.closingSelector = closingSelector;
33092 }
33093 BufferWhenOperator.prototype.call = function (subscriber, source) {
33094 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
33095 };
33096 return BufferWhenOperator;
33097}());
33098var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) {
33099 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferWhenSubscriber, _super);
33100 function BufferWhenSubscriber(destination, closingSelector) {
33101 var _this = _super.call(this, destination) || this;
33102 _this.closingSelector = closingSelector;
33103 _this.subscribing = false;
33104 _this.openBuffer();
33105 return _this;
33106 }
33107 BufferWhenSubscriber.prototype._next = function (value) {
33108 this.buffer.push(value);
33109 };
33110 BufferWhenSubscriber.prototype._complete = function () {
33111 var buffer = this.buffer;
33112 if (buffer) {
33113 this.destination.next(buffer);
33114 }
33115 _super.prototype._complete.call(this);
33116 };
33117 BufferWhenSubscriber.prototype._unsubscribe = function () {
33118 this.buffer = null;
33119 this.subscribing = false;
33120 };
33121 BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33122 this.openBuffer();
33123 };
33124 BufferWhenSubscriber.prototype.notifyComplete = function () {
33125 if (this.subscribing) {
33126 this.complete();
33127 }
33128 else {
33129 this.openBuffer();
33130 }
33131 };
33132 BufferWhenSubscriber.prototype.openBuffer = function () {
33133 var closingSubscription = this.closingSubscription;
33134 if (closingSubscription) {
33135 this.remove(closingSubscription);
33136 closingSubscription.unsubscribe();
33137 }
33138 var buffer = this.buffer;
33139 if (this.buffer) {
33140 this.destination.next(buffer);
33141 }
33142 this.buffer = [];
33143 var closingNotifier;
33144 try {
33145 var closingSelector = this.closingSelector;
33146 closingNotifier = closingSelector();
33147 }
33148 catch (err) {
33149 return this.error(err);
33150 }
33151 closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
33152 this.closingSubscription = closingSubscription;
33153 this.add(closingSubscription);
33154 this.subscribing = true;
33155 closingSubscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
33156 this.subscribing = false;
33157 };
33158 return BufferWhenSubscriber;
33159}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
33160//# sourceMappingURL=bufferWhen.js.map
33161
33162
33163/***/ }),
33164/* 277 */
33165/***/ (function(module, __webpack_exports__, __webpack_require__) {
33166
33167"use strict";
33168__webpack_require__.r(__webpack_exports__);
33169/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return catchError; });
33170/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33171/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33172/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
33173/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
33174/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33175
33176
33177
33178
33179function catchError(selector) {
33180 return function catchErrorOperatorFunction(source) {
33181 var operator = new CatchOperator(selector);
33182 var caught = source.lift(operator);
33183 return (operator.caught = caught);
33184 };
33185}
33186var CatchOperator = /*@__PURE__*/ (function () {
33187 function CatchOperator(selector) {
33188 this.selector = selector;
33189 }
33190 CatchOperator.prototype.call = function (subscriber, source) {
33191 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
33192 };
33193 return CatchOperator;
33194}());
33195var CatchSubscriber = /*@__PURE__*/ (function (_super) {
33196 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CatchSubscriber, _super);
33197 function CatchSubscriber(destination, selector, caught) {
33198 var _this = _super.call(this, destination) || this;
33199 _this.selector = selector;
33200 _this.caught = caught;
33201 return _this;
33202 }
33203 CatchSubscriber.prototype.error = function (err) {
33204 if (!this.isStopped) {
33205 var result = void 0;
33206 try {
33207 result = this.selector(err, this.caught);
33208 }
33209 catch (err2) {
33210 _super.prototype.error.call(this, err2);
33211 return;
33212 }
33213 this._unsubscribeAndRecycle();
33214 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, undefined, undefined);
33215 this.add(innerSubscriber);
33216 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
33217 if (innerSubscription !== innerSubscriber) {
33218 this.add(innerSubscription);
33219 }
33220 }
33221 };
33222 return CatchSubscriber;
33223}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33224//# sourceMappingURL=catchError.js.map
33225
33226
33227/***/ }),
33228/* 278 */
33229/***/ (function(module, __webpack_exports__, __webpack_require__) {
33230
33231"use strict";
33232__webpack_require__.r(__webpack_exports__);
33233/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return combineAll; });
33234/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(226);
33235/** PURE_IMPORTS_START _observable_combineLatest PURE_IMPORTS_END */
33236
33237function combineAll(project) {
33238 return function (source) { return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__["CombineLatestOperator"](project)); };
33239}
33240//# sourceMappingURL=combineAll.js.map
33241
33242
33243/***/ }),
33244/* 279 */
33245/***/ (function(module, __webpack_exports__, __webpack_require__) {
33246
33247"use strict";
33248__webpack_require__.r(__webpack_exports__);
33249/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
33250/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
33251/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
33252/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(241);
33253/** PURE_IMPORTS_START _util_isArray,_observable_combineLatest,_observable_from PURE_IMPORTS_END */
33254
33255
33256
33257var none = {};
33258function combineLatest() {
33259 var observables = [];
33260 for (var _i = 0; _i < arguments.length; _i++) {
33261 observables[_i] = arguments[_i];
33262 }
33263 var project = null;
33264 if (typeof observables[observables.length - 1] === 'function') {
33265 project = observables.pop();
33266 }
33267 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
33268 observables = observables[0].slice();
33269 }
33270 return function (source) { return source.lift.call(Object(_observable_from__WEBPACK_IMPORTED_MODULE_2__["from"])([source].concat(observables)), new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__["CombineLatestOperator"](project)); };
33271}
33272//# sourceMappingURL=combineLatest.js.map
33273
33274
33275/***/ }),
33276/* 280 */
33277/***/ (function(module, __webpack_exports__, __webpack_require__) {
33278
33279"use strict";
33280__webpack_require__.r(__webpack_exports__);
33281/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
33282/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
33283/** PURE_IMPORTS_START _observable_concat PURE_IMPORTS_END */
33284
33285function concat() {
33286 var observables = [];
33287 for (var _i = 0; _i < arguments.length; _i++) {
33288 observables[_i] = arguments[_i];
33289 }
33290 return function (source) { return source.lift.call(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"].apply(void 0, [source].concat(observables))); };
33291}
33292//# sourceMappingURL=concat.js.map
33293
33294
33295/***/ }),
33296/* 281 */
33297/***/ (function(module, __webpack_exports__, __webpack_require__) {
33298
33299"use strict";
33300__webpack_require__.r(__webpack_exports__);
33301/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return concatMap; });
33302/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
33303/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
33304
33305function concatMap(project, resultSelector) {
33306 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(project, resultSelector, 1);
33307}
33308//# sourceMappingURL=concatMap.js.map
33309
33310
33311/***/ }),
33312/* 282 */
33313/***/ (function(module, __webpack_exports__, __webpack_require__) {
33314
33315"use strict";
33316__webpack_require__.r(__webpack_exports__);
33317/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; });
33318/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
33319/** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */
33320
33321function concatMapTo(innerObservable, resultSelector) {
33322 return Object(_concatMap__WEBPACK_IMPORTED_MODULE_0__["concatMap"])(function () { return innerObservable; }, resultSelector);
33323}
33324//# sourceMappingURL=concatMapTo.js.map
33325
33326
33327/***/ }),
33328/* 283 */
33329/***/ (function(module, __webpack_exports__, __webpack_require__) {
33330
33331"use strict";
33332__webpack_require__.r(__webpack_exports__);
33333/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "count", function() { return count; });
33334/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33335/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33336/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33337
33338
33339function count(predicate) {
33340 return function (source) { return source.lift(new CountOperator(predicate, source)); };
33341}
33342var CountOperator = /*@__PURE__*/ (function () {
33343 function CountOperator(predicate, source) {
33344 this.predicate = predicate;
33345 this.source = source;
33346 }
33347 CountOperator.prototype.call = function (subscriber, source) {
33348 return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
33349 };
33350 return CountOperator;
33351}());
33352var CountSubscriber = /*@__PURE__*/ (function (_super) {
33353 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountSubscriber, _super);
33354 function CountSubscriber(destination, predicate, source) {
33355 var _this = _super.call(this, destination) || this;
33356 _this.predicate = predicate;
33357 _this.source = source;
33358 _this.count = 0;
33359 _this.index = 0;
33360 return _this;
33361 }
33362 CountSubscriber.prototype._next = function (value) {
33363 if (this.predicate) {
33364 this._tryPredicate(value);
33365 }
33366 else {
33367 this.count++;
33368 }
33369 };
33370 CountSubscriber.prototype._tryPredicate = function (value) {
33371 var result;
33372 try {
33373 result = this.predicate(value, this.index++, this.source);
33374 }
33375 catch (err) {
33376 this.destination.error(err);
33377 return;
33378 }
33379 if (result) {
33380 this.count++;
33381 }
33382 };
33383 CountSubscriber.prototype._complete = function () {
33384 this.destination.next(this.count);
33385 this.destination.complete();
33386 };
33387 return CountSubscriber;
33388}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33389//# sourceMappingURL=count.js.map
33390
33391
33392/***/ }),
33393/* 284 */
33394/***/ (function(module, __webpack_exports__, __webpack_require__) {
33395
33396"use strict";
33397__webpack_require__.r(__webpack_exports__);
33398/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
33399/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33400/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33401/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
33402/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33403
33404
33405
33406function debounce(durationSelector) {
33407 return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
33408}
33409var DebounceOperator = /*@__PURE__*/ (function () {
33410 function DebounceOperator(durationSelector) {
33411 this.durationSelector = durationSelector;
33412 }
33413 DebounceOperator.prototype.call = function (subscriber, source) {
33414 return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
33415 };
33416 return DebounceOperator;
33417}());
33418var DebounceSubscriber = /*@__PURE__*/ (function (_super) {
33419 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceSubscriber, _super);
33420 function DebounceSubscriber(destination, durationSelector) {
33421 var _this = _super.call(this, destination) || this;
33422 _this.durationSelector = durationSelector;
33423 _this.hasValue = false;
33424 _this.durationSubscription = null;
33425 return _this;
33426 }
33427 DebounceSubscriber.prototype._next = function (value) {
33428 try {
33429 var result = this.durationSelector.call(this, value);
33430 if (result) {
33431 this._tryNext(value, result);
33432 }
33433 }
33434 catch (err) {
33435 this.destination.error(err);
33436 }
33437 };
33438 DebounceSubscriber.prototype._complete = function () {
33439 this.emitValue();
33440 this.destination.complete();
33441 };
33442 DebounceSubscriber.prototype._tryNext = function (value, duration) {
33443 var subscription = this.durationSubscription;
33444 this.value = value;
33445 this.hasValue = true;
33446 if (subscription) {
33447 subscription.unsubscribe();
33448 this.remove(subscription);
33449 }
33450 subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
33451 if (subscription && !subscription.closed) {
33452 this.add(this.durationSubscription = subscription);
33453 }
33454 };
33455 DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33456 this.emitValue();
33457 };
33458 DebounceSubscriber.prototype.notifyComplete = function () {
33459 this.emitValue();
33460 };
33461 DebounceSubscriber.prototype.emitValue = function () {
33462 if (this.hasValue) {
33463 var value = this.value;
33464 var subscription = this.durationSubscription;
33465 if (subscription) {
33466 this.durationSubscription = null;
33467 subscription.unsubscribe();
33468 this.remove(subscription);
33469 }
33470 this.value = null;
33471 this.hasValue = false;
33472 _super.prototype._next.call(this, value);
33473 }
33474 };
33475 return DebounceSubscriber;
33476}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33477//# sourceMappingURL=debounce.js.map
33478
33479
33480/***/ }),
33481/* 285 */
33482/***/ (function(module, __webpack_exports__, __webpack_require__) {
33483
33484"use strict";
33485__webpack_require__.r(__webpack_exports__);
33486/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return debounceTime; });
33487/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33488/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33489/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
33490/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
33491
33492
33493
33494function debounceTime(dueTime, scheduler) {
33495 if (scheduler === void 0) {
33496 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
33497 }
33498 return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
33499}
33500var DebounceTimeOperator = /*@__PURE__*/ (function () {
33501 function DebounceTimeOperator(dueTime, scheduler) {
33502 this.dueTime = dueTime;
33503 this.scheduler = scheduler;
33504 }
33505 DebounceTimeOperator.prototype.call = function (subscriber, source) {
33506 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
33507 };
33508 return DebounceTimeOperator;
33509}());
33510var DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {
33511 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceTimeSubscriber, _super);
33512 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
33513 var _this = _super.call(this, destination) || this;
33514 _this.dueTime = dueTime;
33515 _this.scheduler = scheduler;
33516 _this.debouncedSubscription = null;
33517 _this.lastValue = null;
33518 _this.hasValue = false;
33519 return _this;
33520 }
33521 DebounceTimeSubscriber.prototype._next = function (value) {
33522 this.clearDebounce();
33523 this.lastValue = value;
33524 this.hasValue = true;
33525 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
33526 };
33527 DebounceTimeSubscriber.prototype._complete = function () {
33528 this.debouncedNext();
33529 this.destination.complete();
33530 };
33531 DebounceTimeSubscriber.prototype.debouncedNext = function () {
33532 this.clearDebounce();
33533 if (this.hasValue) {
33534 var lastValue = this.lastValue;
33535 this.lastValue = null;
33536 this.hasValue = false;
33537 this.destination.next(lastValue);
33538 }
33539 };
33540 DebounceTimeSubscriber.prototype.clearDebounce = function () {
33541 var debouncedSubscription = this.debouncedSubscription;
33542 if (debouncedSubscription !== null) {
33543 this.remove(debouncedSubscription);
33544 debouncedSubscription.unsubscribe();
33545 this.debouncedSubscription = null;
33546 }
33547 };
33548 return DebounceTimeSubscriber;
33549}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33550function dispatchNext(subscriber) {
33551 subscriber.debouncedNext();
33552}
33553//# sourceMappingURL=debounceTime.js.map
33554
33555
33556/***/ }),
33557/* 286 */
33558/***/ (function(module, __webpack_exports__, __webpack_require__) {
33559
33560"use strict";
33561__webpack_require__.r(__webpack_exports__);
33562/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return defaultIfEmpty; });
33563/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33564/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33565/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33566
33567
33568function defaultIfEmpty(defaultValue) {
33569 if (defaultValue === void 0) {
33570 defaultValue = null;
33571 }
33572 return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
33573}
33574var DefaultIfEmptyOperator = /*@__PURE__*/ (function () {
33575 function DefaultIfEmptyOperator(defaultValue) {
33576 this.defaultValue = defaultValue;
33577 }
33578 DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
33579 return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
33580 };
33581 return DefaultIfEmptyOperator;
33582}());
33583var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
33584 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DefaultIfEmptySubscriber, _super);
33585 function DefaultIfEmptySubscriber(destination, defaultValue) {
33586 var _this = _super.call(this, destination) || this;
33587 _this.defaultValue = defaultValue;
33588 _this.isEmpty = true;
33589 return _this;
33590 }
33591 DefaultIfEmptySubscriber.prototype._next = function (value) {
33592 this.isEmpty = false;
33593 this.destination.next(value);
33594 };
33595 DefaultIfEmptySubscriber.prototype._complete = function () {
33596 if (this.isEmpty) {
33597 this.destination.next(this.defaultValue);
33598 }
33599 this.destination.complete();
33600 };
33601 return DefaultIfEmptySubscriber;
33602}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33603//# sourceMappingURL=defaultIfEmpty.js.map
33604
33605
33606/***/ }),
33607/* 287 */
33608/***/ (function(module, __webpack_exports__, __webpack_require__) {
33609
33610"use strict";
33611__webpack_require__.r(__webpack_exports__);
33612/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; });
33613/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33614/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
33615/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(288);
33616/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
33617/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(200);
33618/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */
33619
33620
33621
33622
33623
33624function delay(delay, scheduler) {
33625 if (scheduler === void 0) {
33626 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
33627 }
33628 var absoluteDelay = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(delay);
33629 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
33630 return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
33631}
33632var DelayOperator = /*@__PURE__*/ (function () {
33633 function DelayOperator(delay, scheduler) {
33634 this.delay = delay;
33635 this.scheduler = scheduler;
33636 }
33637 DelayOperator.prototype.call = function (subscriber, source) {
33638 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
33639 };
33640 return DelayOperator;
33641}());
33642var DelaySubscriber = /*@__PURE__*/ (function (_super) {
33643 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelaySubscriber, _super);
33644 function DelaySubscriber(destination, delay, scheduler) {
33645 var _this = _super.call(this, destination) || this;
33646 _this.delay = delay;
33647 _this.scheduler = scheduler;
33648 _this.queue = [];
33649 _this.active = false;
33650 _this.errored = false;
33651 return _this;
33652 }
33653 DelaySubscriber.dispatch = function (state) {
33654 var source = state.source;
33655 var queue = source.queue;
33656 var scheduler = state.scheduler;
33657 var destination = state.destination;
33658 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
33659 queue.shift().notification.observe(destination);
33660 }
33661 if (queue.length > 0) {
33662 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
33663 this.schedule(state, delay_1);
33664 }
33665 else {
33666 this.unsubscribe();
33667 source.active = false;
33668 }
33669 };
33670 DelaySubscriber.prototype._schedule = function (scheduler) {
33671 this.active = true;
33672 var destination = this.destination;
33673 destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
33674 source: this, destination: this.destination, scheduler: scheduler
33675 }));
33676 };
33677 DelaySubscriber.prototype.scheduleNotification = function (notification) {
33678 if (this.errored === true) {
33679 return;
33680 }
33681 var scheduler = this.scheduler;
33682 var message = new DelayMessage(scheduler.now() + this.delay, notification);
33683 this.queue.push(message);
33684 if (this.active === false) {
33685 this._schedule(scheduler);
33686 }
33687 };
33688 DelaySubscriber.prototype._next = function (value) {
33689 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createNext(value));
33690 };
33691 DelaySubscriber.prototype._error = function (err) {
33692 this.errored = true;
33693 this.queue = [];
33694 this.destination.error(err);
33695 this.unsubscribe();
33696 };
33697 DelaySubscriber.prototype._complete = function () {
33698 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createComplete());
33699 this.unsubscribe();
33700 };
33701 return DelaySubscriber;
33702}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
33703var DelayMessage = /*@__PURE__*/ (function () {
33704 function DelayMessage(time, notification) {
33705 this.time = time;
33706 this.notification = notification;
33707 }
33708 return DelayMessage;
33709}());
33710//# sourceMappingURL=delay.js.map
33711
33712
33713/***/ }),
33714/* 288 */
33715/***/ (function(module, __webpack_exports__, __webpack_require__) {
33716
33717"use strict";
33718__webpack_require__.r(__webpack_exports__);
33719/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDate", function() { return isDate; });
33720/** PURE_IMPORTS_START PURE_IMPORTS_END */
33721function isDate(value) {
33722 return value instanceof Date && !isNaN(+value);
33723}
33724//# sourceMappingURL=isDate.js.map
33725
33726
33727/***/ }),
33728/* 289 */
33729/***/ (function(module, __webpack_exports__, __webpack_require__) {
33730
33731"use strict";
33732__webpack_require__.r(__webpack_exports__);
33733/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return delayWhen; });
33734/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33735/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33736/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
33737/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
33738/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
33739/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33740
33741
33742
33743
33744
33745function delayWhen(delayDurationSelector, subscriptionDelay) {
33746 if (subscriptionDelay) {
33747 return function (source) {
33748 return new SubscriptionDelayObservable(source, subscriptionDelay)
33749 .lift(new DelayWhenOperator(delayDurationSelector));
33750 };
33751 }
33752 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
33753}
33754var DelayWhenOperator = /*@__PURE__*/ (function () {
33755 function DelayWhenOperator(delayDurationSelector) {
33756 this.delayDurationSelector = delayDurationSelector;
33757 }
33758 DelayWhenOperator.prototype.call = function (subscriber, source) {
33759 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
33760 };
33761 return DelayWhenOperator;
33762}());
33763var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
33764 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelayWhenSubscriber, _super);
33765 function DelayWhenSubscriber(destination, delayDurationSelector) {
33766 var _this = _super.call(this, destination) || this;
33767 _this.delayDurationSelector = delayDurationSelector;
33768 _this.completed = false;
33769 _this.delayNotifierSubscriptions = [];
33770 _this.index = 0;
33771 return _this;
33772 }
33773 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33774 this.destination.next(outerValue);
33775 this.removeSubscription(innerSub);
33776 this.tryComplete();
33777 };
33778 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
33779 this._error(error);
33780 };
33781 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
33782 var value = this.removeSubscription(innerSub);
33783 if (value) {
33784 this.destination.next(value);
33785 }
33786 this.tryComplete();
33787 };
33788 DelayWhenSubscriber.prototype._next = function (value) {
33789 var index = this.index++;
33790 try {
33791 var delayNotifier = this.delayDurationSelector(value, index);
33792 if (delayNotifier) {
33793 this.tryDelay(delayNotifier, value);
33794 }
33795 }
33796 catch (err) {
33797 this.destination.error(err);
33798 }
33799 };
33800 DelayWhenSubscriber.prototype._complete = function () {
33801 this.completed = true;
33802 this.tryComplete();
33803 this.unsubscribe();
33804 };
33805 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
33806 subscription.unsubscribe();
33807 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
33808 if (subscriptionIdx !== -1) {
33809 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
33810 }
33811 return subscription.outerValue;
33812 };
33813 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
33814 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, delayNotifier, value);
33815 if (notifierSubscription && !notifierSubscription.closed) {
33816 var destination = this.destination;
33817 destination.add(notifierSubscription);
33818 this.delayNotifierSubscriptions.push(notifierSubscription);
33819 }
33820 };
33821 DelayWhenSubscriber.prototype.tryComplete = function () {
33822 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
33823 this.destination.complete();
33824 }
33825 };
33826 return DelayWhenSubscriber;
33827}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
33828var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
33829 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelayObservable, _super);
33830 function SubscriptionDelayObservable(source, subscriptionDelay) {
33831 var _this = _super.call(this) || this;
33832 _this.source = source;
33833 _this.subscriptionDelay = subscriptionDelay;
33834 return _this;
33835 }
33836 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
33837 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
33838 };
33839 return SubscriptionDelayObservable;
33840}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
33841var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
33842 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelaySubscriber, _super);
33843 function SubscriptionDelaySubscriber(parent, source) {
33844 var _this = _super.call(this) || this;
33845 _this.parent = parent;
33846 _this.source = source;
33847 _this.sourceSubscribed = false;
33848 return _this;
33849 }
33850 SubscriptionDelaySubscriber.prototype._next = function (unused) {
33851 this.subscribeToSource();
33852 };
33853 SubscriptionDelaySubscriber.prototype._error = function (err) {
33854 this.unsubscribe();
33855 this.parent.error(err);
33856 };
33857 SubscriptionDelaySubscriber.prototype._complete = function () {
33858 this.unsubscribe();
33859 this.subscribeToSource();
33860 };
33861 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
33862 if (!this.sourceSubscribed) {
33863 this.sourceSubscribed = true;
33864 this.unsubscribe();
33865 this.source.subscribe(this.parent);
33866 }
33867 };
33868 return SubscriptionDelaySubscriber;
33869}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33870//# sourceMappingURL=delayWhen.js.map
33871
33872
33873/***/ }),
33874/* 290 */
33875/***/ (function(module, __webpack_exports__, __webpack_require__) {
33876
33877"use strict";
33878__webpack_require__.r(__webpack_exports__);
33879/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return dematerialize; });
33880/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33881/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33882/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33883
33884
33885function dematerialize() {
33886 return function dematerializeOperatorFunction(source) {
33887 return source.lift(new DeMaterializeOperator());
33888 };
33889}
33890var DeMaterializeOperator = /*@__PURE__*/ (function () {
33891 function DeMaterializeOperator() {
33892 }
33893 DeMaterializeOperator.prototype.call = function (subscriber, source) {
33894 return source.subscribe(new DeMaterializeSubscriber(subscriber));
33895 };
33896 return DeMaterializeOperator;
33897}());
33898var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) {
33899 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DeMaterializeSubscriber, _super);
33900 function DeMaterializeSubscriber(destination) {
33901 return _super.call(this, destination) || this;
33902 }
33903 DeMaterializeSubscriber.prototype._next = function (value) {
33904 value.observe(this.destination);
33905 };
33906 return DeMaterializeSubscriber;
33907}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33908//# sourceMappingURL=dematerialize.js.map
33909
33910
33911/***/ }),
33912/* 291 */
33913/***/ (function(module, __webpack_exports__, __webpack_require__) {
33914
33915"use strict";
33916__webpack_require__.r(__webpack_exports__);
33917/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return distinct; });
33918/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DistinctSubscriber", function() { return DistinctSubscriber; });
33919/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33920/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33921/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
33922/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33923
33924
33925
33926function distinct(keySelector, flushes) {
33927 return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
33928}
33929var DistinctOperator = /*@__PURE__*/ (function () {
33930 function DistinctOperator(keySelector, flushes) {
33931 this.keySelector = keySelector;
33932 this.flushes = flushes;
33933 }
33934 DistinctOperator.prototype.call = function (subscriber, source) {
33935 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
33936 };
33937 return DistinctOperator;
33938}());
33939var DistinctSubscriber = /*@__PURE__*/ (function (_super) {
33940 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctSubscriber, _super);
33941 function DistinctSubscriber(destination, keySelector, flushes) {
33942 var _this = _super.call(this, destination) || this;
33943 _this.keySelector = keySelector;
33944 _this.values = new Set();
33945 if (flushes) {
33946 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, flushes));
33947 }
33948 return _this;
33949 }
33950 DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33951 this.values.clear();
33952 };
33953 DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
33954 this._error(error);
33955 };
33956 DistinctSubscriber.prototype._next = function (value) {
33957 if (this.keySelector) {
33958 this._useKeySelector(value);
33959 }
33960 else {
33961 this._finalizeNext(value, value);
33962 }
33963 };
33964 DistinctSubscriber.prototype._useKeySelector = function (value) {
33965 var key;
33966 var destination = this.destination;
33967 try {
33968 key = this.keySelector(value);
33969 }
33970 catch (err) {
33971 destination.error(err);
33972 return;
33973 }
33974 this._finalizeNext(key, value);
33975 };
33976 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
33977 var values = this.values;
33978 if (!values.has(key)) {
33979 values.add(key);
33980 this.destination.next(value);
33981 }
33982 };
33983 return DistinctSubscriber;
33984}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33985
33986//# sourceMappingURL=distinct.js.map
33987
33988
33989/***/ }),
33990/* 292 */
33991/***/ (function(module, __webpack_exports__, __webpack_require__) {
33992
33993"use strict";
33994__webpack_require__.r(__webpack_exports__);
33995/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return distinctUntilChanged; });
33996/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33997/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33998/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33999
34000
34001function distinctUntilChanged(compare, keySelector) {
34002 return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
34003}
34004var DistinctUntilChangedOperator = /*@__PURE__*/ (function () {
34005 function DistinctUntilChangedOperator(compare, keySelector) {
34006 this.compare = compare;
34007 this.keySelector = keySelector;
34008 }
34009 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
34010 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
34011 };
34012 return DistinctUntilChangedOperator;
34013}());
34014var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {
34015 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctUntilChangedSubscriber, _super);
34016 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
34017 var _this = _super.call(this, destination) || this;
34018 _this.keySelector = keySelector;
34019 _this.hasKey = false;
34020 if (typeof compare === 'function') {
34021 _this.compare = compare;
34022 }
34023 return _this;
34024 }
34025 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
34026 return x === y;
34027 };
34028 DistinctUntilChangedSubscriber.prototype._next = function (value) {
34029 var key;
34030 try {
34031 var keySelector = this.keySelector;
34032 key = keySelector ? keySelector(value) : value;
34033 }
34034 catch (err) {
34035 return this.destination.error(err);
34036 }
34037 var result = false;
34038 if (this.hasKey) {
34039 try {
34040 var compare = this.compare;
34041 result = compare(this.key, key);
34042 }
34043 catch (err) {
34044 return this.destination.error(err);
34045 }
34046 }
34047 else {
34048 this.hasKey = true;
34049 }
34050 if (!result) {
34051 this.key = key;
34052 this.destination.next(value);
34053 }
34054 };
34055 return DistinctUntilChangedSubscriber;
34056}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34057//# sourceMappingURL=distinctUntilChanged.js.map
34058
34059
34060/***/ }),
34061/* 293 */
34062/***/ (function(module, __webpack_exports__, __webpack_require__) {
34063
34064"use strict";
34065__webpack_require__.r(__webpack_exports__);
34066/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; });
34067/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(292);
34068/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */
34069
34070function distinctUntilKeyChanged(key, compare) {
34071 return Object(_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
34072}
34073//# sourceMappingURL=distinctUntilKeyChanged.js.map
34074
34075
34076/***/ }),
34077/* 294 */
34078/***/ (function(module, __webpack_exports__, __webpack_require__) {
34079
34080"use strict";
34081__webpack_require__.r(__webpack_exports__);
34082/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; });
34083/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(220);
34084/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
34085/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(295);
34086/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(286);
34087/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(296);
34088/** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */
34089
34090
34091
34092
34093
34094function elementAt(index, defaultValue) {
34095 if (index < 0) {
34096 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
34097 }
34098 var hasDefaultValue = arguments.length >= 2;
34099 return function (source) {
34100 return source.pipe(Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) { return i === index; }), Object(_take__WEBPACK_IMPORTED_MODULE_4__["take"])(1), hasDefaultValue
34101 ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue)
34102 : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__["throwIfEmpty"])(function () { return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"](); }));
34103 };
34104}
34105//# sourceMappingURL=elementAt.js.map
34106
34107
34108/***/ }),
34109/* 295 */
34110/***/ (function(module, __webpack_exports__, __webpack_require__) {
34111
34112"use strict";
34113__webpack_require__.r(__webpack_exports__);
34114/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return throwIfEmpty; });
34115/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34116/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(221);
34117/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
34118/** PURE_IMPORTS_START tslib,_util_EmptyError,_Subscriber PURE_IMPORTS_END */
34119
34120
34121
34122function throwIfEmpty(errorFactory) {
34123 if (errorFactory === void 0) {
34124 errorFactory = defaultErrorFactory;
34125 }
34126 return function (source) {
34127 return source.lift(new ThrowIfEmptyOperator(errorFactory));
34128 };
34129}
34130var ThrowIfEmptyOperator = /*@__PURE__*/ (function () {
34131 function ThrowIfEmptyOperator(errorFactory) {
34132 this.errorFactory = errorFactory;
34133 }
34134 ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
34135 return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
34136 };
34137 return ThrowIfEmptyOperator;
34138}());
34139var ThrowIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
34140 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrowIfEmptySubscriber, _super);
34141 function ThrowIfEmptySubscriber(destination, errorFactory) {
34142 var _this = _super.call(this, destination) || this;
34143 _this.errorFactory = errorFactory;
34144 _this.hasValue = false;
34145 return _this;
34146 }
34147 ThrowIfEmptySubscriber.prototype._next = function (value) {
34148 this.hasValue = true;
34149 this.destination.next(value);
34150 };
34151 ThrowIfEmptySubscriber.prototype._complete = function () {
34152 if (!this.hasValue) {
34153 var err = void 0;
34154 try {
34155 err = this.errorFactory();
34156 }
34157 catch (e) {
34158 err = e;
34159 }
34160 this.destination.error(err);
34161 }
34162 else {
34163 return this.destination.complete();
34164 }
34165 };
34166 return ThrowIfEmptySubscriber;
34167}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
34168function defaultErrorFactory() {
34169 return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__["EmptyError"]();
34170}
34171//# sourceMappingURL=throwIfEmpty.js.map
34172
34173
34174/***/ }),
34175/* 296 */
34176/***/ (function(module, __webpack_exports__, __webpack_require__) {
34177
34178"use strict";
34179__webpack_require__.r(__webpack_exports__);
34180/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "take", function() { return take; });
34181/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34182/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34183/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
34184/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
34185/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34186
34187
34188
34189
34190function take(count) {
34191 return function (source) {
34192 if (count === 0) {
34193 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
34194 }
34195 else {
34196 return source.lift(new TakeOperator(count));
34197 }
34198 };
34199}
34200var TakeOperator = /*@__PURE__*/ (function () {
34201 function TakeOperator(total) {
34202 this.total = total;
34203 if (this.total < 0) {
34204 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
34205 }
34206 }
34207 TakeOperator.prototype.call = function (subscriber, source) {
34208 return source.subscribe(new TakeSubscriber(subscriber, this.total));
34209 };
34210 return TakeOperator;
34211}());
34212var TakeSubscriber = /*@__PURE__*/ (function (_super) {
34213 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeSubscriber, _super);
34214 function TakeSubscriber(destination, total) {
34215 var _this = _super.call(this, destination) || this;
34216 _this.total = total;
34217 _this.count = 0;
34218 return _this;
34219 }
34220 TakeSubscriber.prototype._next = function (value) {
34221 var total = this.total;
34222 var count = ++this.count;
34223 if (count <= total) {
34224 this.destination.next(value);
34225 if (count === total) {
34226 this.destination.complete();
34227 this.unsubscribe();
34228 }
34229 }
34230 };
34231 return TakeSubscriber;
34232}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34233//# sourceMappingURL=take.js.map
34234
34235
34236/***/ }),
34237/* 297 */
34238/***/ (function(module, __webpack_exports__, __webpack_require__) {
34239
34240"use strict";
34241__webpack_require__.r(__webpack_exports__);
34242/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return endWith; });
34243/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
34244/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
34245/** PURE_IMPORTS_START _observable_concat,_observable_of PURE_IMPORTS_END */
34246
34247
34248function endWith() {
34249 var array = [];
34250 for (var _i = 0; _i < arguments.length; _i++) {
34251 array[_i] = arguments[_i];
34252 }
34253 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, _observable_of__WEBPACK_IMPORTED_MODULE_1__["of"].apply(void 0, array)); };
34254}
34255//# sourceMappingURL=endWith.js.map
34256
34257
34258/***/ }),
34259/* 298 */
34260/***/ (function(module, __webpack_exports__, __webpack_require__) {
34261
34262"use strict";
34263__webpack_require__.r(__webpack_exports__);
34264/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "every", function() { return every; });
34265/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34266/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34267/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34268
34269
34270function every(predicate, thisArg) {
34271 return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
34272}
34273var EveryOperator = /*@__PURE__*/ (function () {
34274 function EveryOperator(predicate, thisArg, source) {
34275 this.predicate = predicate;
34276 this.thisArg = thisArg;
34277 this.source = source;
34278 }
34279 EveryOperator.prototype.call = function (observer, source) {
34280 return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
34281 };
34282 return EveryOperator;
34283}());
34284var EverySubscriber = /*@__PURE__*/ (function (_super) {
34285 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](EverySubscriber, _super);
34286 function EverySubscriber(destination, predicate, thisArg, source) {
34287 var _this = _super.call(this, destination) || this;
34288 _this.predicate = predicate;
34289 _this.thisArg = thisArg;
34290 _this.source = source;
34291 _this.index = 0;
34292 _this.thisArg = thisArg || _this;
34293 return _this;
34294 }
34295 EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
34296 this.destination.next(everyValueMatch);
34297 this.destination.complete();
34298 };
34299 EverySubscriber.prototype._next = function (value) {
34300 var result = false;
34301 try {
34302 result = this.predicate.call(this.thisArg, value, this.index++, this.source);
34303 }
34304 catch (err) {
34305 this.destination.error(err);
34306 return;
34307 }
34308 if (!result) {
34309 this.notifyComplete(false);
34310 }
34311 };
34312 EverySubscriber.prototype._complete = function () {
34313 this.notifyComplete(true);
34314 };
34315 return EverySubscriber;
34316}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34317//# sourceMappingURL=every.js.map
34318
34319
34320/***/ }),
34321/* 299 */
34322/***/ (function(module, __webpack_exports__, __webpack_require__) {
34323
34324"use strict";
34325__webpack_require__.r(__webpack_exports__);
34326/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return exhaust; });
34327/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34328/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34329/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
34330/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34331
34332
34333
34334function exhaust() {
34335 return function (source) { return source.lift(new SwitchFirstOperator()); };
34336}
34337var SwitchFirstOperator = /*@__PURE__*/ (function () {
34338 function SwitchFirstOperator() {
34339 }
34340 SwitchFirstOperator.prototype.call = function (subscriber, source) {
34341 return source.subscribe(new SwitchFirstSubscriber(subscriber));
34342 };
34343 return SwitchFirstOperator;
34344}());
34345var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) {
34346 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchFirstSubscriber, _super);
34347 function SwitchFirstSubscriber(destination) {
34348 var _this = _super.call(this, destination) || this;
34349 _this.hasCompleted = false;
34350 _this.hasSubscription = false;
34351 return _this;
34352 }
34353 SwitchFirstSubscriber.prototype._next = function (value) {
34354 if (!this.hasSubscription) {
34355 this.hasSubscription = true;
34356 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, value));
34357 }
34358 };
34359 SwitchFirstSubscriber.prototype._complete = function () {
34360 this.hasCompleted = true;
34361 if (!this.hasSubscription) {
34362 this.destination.complete();
34363 }
34364 };
34365 SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
34366 this.remove(innerSub);
34367 this.hasSubscription = false;
34368 if (this.hasCompleted) {
34369 this.destination.complete();
34370 }
34371 };
34372 return SwitchFirstSubscriber;
34373}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34374//# sourceMappingURL=exhaust.js.map
34375
34376
34377/***/ }),
34378/* 300 */
34379/***/ (function(module, __webpack_exports__, __webpack_require__) {
34380
34381"use strict";
34382__webpack_require__.r(__webpack_exports__);
34383/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return exhaustMap; });
34384/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34385/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34386/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
34387/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
34388/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
34389/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
34390/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
34391
34392
34393
34394
34395
34396
34397function exhaustMap(project, resultSelector) {
34398 if (resultSelector) {
34399 return function (source) { return source.pipe(exhaustMap(function (a, i) { return Object(_observable_from__WEBPACK_IMPORTED_MODULE_5__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_4__["map"])(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
34400 }
34401 return function (source) {
34402 return source.lift(new ExhaustMapOperator(project));
34403 };
34404}
34405var ExhaustMapOperator = /*@__PURE__*/ (function () {
34406 function ExhaustMapOperator(project) {
34407 this.project = project;
34408 }
34409 ExhaustMapOperator.prototype.call = function (subscriber, source) {
34410 return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
34411 };
34412 return ExhaustMapOperator;
34413}());
34414var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) {
34415 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExhaustMapSubscriber, _super);
34416 function ExhaustMapSubscriber(destination, project) {
34417 var _this = _super.call(this, destination) || this;
34418 _this.project = project;
34419 _this.hasSubscription = false;
34420 _this.hasCompleted = false;
34421 _this.index = 0;
34422 return _this;
34423 }
34424 ExhaustMapSubscriber.prototype._next = function (value) {
34425 if (!this.hasSubscription) {
34426 this.tryNext(value);
34427 }
34428 };
34429 ExhaustMapSubscriber.prototype.tryNext = function (value) {
34430 var result;
34431 var index = this.index++;
34432 try {
34433 result = this.project(value, index);
34434 }
34435 catch (err) {
34436 this.destination.error(err);
34437 return;
34438 }
34439 this.hasSubscription = true;
34440 this._innerSub(result, value, index);
34441 };
34442 ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) {
34443 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
34444 var destination = this.destination;
34445 destination.add(innerSubscriber);
34446 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
34447 if (innerSubscription !== innerSubscriber) {
34448 destination.add(innerSubscription);
34449 }
34450 };
34451 ExhaustMapSubscriber.prototype._complete = function () {
34452 this.hasCompleted = true;
34453 if (!this.hasSubscription) {
34454 this.destination.complete();
34455 }
34456 this.unsubscribe();
34457 };
34458 ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34459 this.destination.next(innerValue);
34460 };
34461 ExhaustMapSubscriber.prototype.notifyError = function (err) {
34462 this.destination.error(err);
34463 };
34464 ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) {
34465 var destination = this.destination;
34466 destination.remove(innerSub);
34467 this.hasSubscription = false;
34468 if (this.hasCompleted) {
34469 this.destination.complete();
34470 }
34471 };
34472 return ExhaustMapSubscriber;
34473}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34474//# sourceMappingURL=exhaustMap.js.map
34475
34476
34477/***/ }),
34478/* 301 */
34479/***/ (function(module, __webpack_exports__, __webpack_require__) {
34480
34481"use strict";
34482__webpack_require__.r(__webpack_exports__);
34483/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return expand; });
34484/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandOperator", function() { return ExpandOperator; });
34485/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandSubscriber", function() { return ExpandSubscriber; });
34486/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34487/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34488/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
34489/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34490
34491
34492
34493function expand(project, concurrent, scheduler) {
34494 if (concurrent === void 0) {
34495 concurrent = Number.POSITIVE_INFINITY;
34496 }
34497 if (scheduler === void 0) {
34498 scheduler = undefined;
34499 }
34500 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
34501 return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
34502}
34503var ExpandOperator = /*@__PURE__*/ (function () {
34504 function ExpandOperator(project, concurrent, scheduler) {
34505 this.project = project;
34506 this.concurrent = concurrent;
34507 this.scheduler = scheduler;
34508 }
34509 ExpandOperator.prototype.call = function (subscriber, source) {
34510 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
34511 };
34512 return ExpandOperator;
34513}());
34514
34515var ExpandSubscriber = /*@__PURE__*/ (function (_super) {
34516 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExpandSubscriber, _super);
34517 function ExpandSubscriber(destination, project, concurrent, scheduler) {
34518 var _this = _super.call(this, destination) || this;
34519 _this.project = project;
34520 _this.concurrent = concurrent;
34521 _this.scheduler = scheduler;
34522 _this.index = 0;
34523 _this.active = 0;
34524 _this.hasCompleted = false;
34525 if (concurrent < Number.POSITIVE_INFINITY) {
34526 _this.buffer = [];
34527 }
34528 return _this;
34529 }
34530 ExpandSubscriber.dispatch = function (arg) {
34531 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
34532 subscriber.subscribeToProjection(result, value, index);
34533 };
34534 ExpandSubscriber.prototype._next = function (value) {
34535 var destination = this.destination;
34536 if (destination.closed) {
34537 this._complete();
34538 return;
34539 }
34540 var index = this.index++;
34541 if (this.active < this.concurrent) {
34542 destination.next(value);
34543 try {
34544 var project = this.project;
34545 var result = project(value, index);
34546 if (!this.scheduler) {
34547 this.subscribeToProjection(result, value, index);
34548 }
34549 else {
34550 var state = { subscriber: this, result: result, value: value, index: index };
34551 var destination_1 = this.destination;
34552 destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
34553 }
34554 }
34555 catch (e) {
34556 destination.error(e);
34557 }
34558 }
34559 else {
34560 this.buffer.push(value);
34561 }
34562 };
34563 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
34564 this.active++;
34565 var destination = this.destination;
34566 destination.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, value, index));
34567 };
34568 ExpandSubscriber.prototype._complete = function () {
34569 this.hasCompleted = true;
34570 if (this.hasCompleted && this.active === 0) {
34571 this.destination.complete();
34572 }
34573 this.unsubscribe();
34574 };
34575 ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34576 this._next(innerValue);
34577 };
34578 ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
34579 var buffer = this.buffer;
34580 var destination = this.destination;
34581 destination.remove(innerSub);
34582 this.active--;
34583 if (buffer && buffer.length > 0) {
34584 this._next(buffer.shift());
34585 }
34586 if (this.hasCompleted && this.active === 0) {
34587 this.destination.complete();
34588 }
34589 };
34590 return ExpandSubscriber;
34591}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34592
34593//# sourceMappingURL=expand.js.map
34594
34595
34596/***/ }),
34597/* 302 */
34598/***/ (function(module, __webpack_exports__, __webpack_require__) {
34599
34600"use strict";
34601__webpack_require__.r(__webpack_exports__);
34602/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return finalize; });
34603/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34604/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34605/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
34606/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */
34607
34608
34609
34610function finalize(callback) {
34611 return function (source) { return source.lift(new FinallyOperator(callback)); };
34612}
34613var FinallyOperator = /*@__PURE__*/ (function () {
34614 function FinallyOperator(callback) {
34615 this.callback = callback;
34616 }
34617 FinallyOperator.prototype.call = function (subscriber, source) {
34618 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
34619 };
34620 return FinallyOperator;
34621}());
34622var FinallySubscriber = /*@__PURE__*/ (function (_super) {
34623 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FinallySubscriber, _super);
34624 function FinallySubscriber(destination, callback) {
34625 var _this = _super.call(this, destination) || this;
34626 _this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"](callback));
34627 return _this;
34628 }
34629 return FinallySubscriber;
34630}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34631//# sourceMappingURL=finalize.js.map
34632
34633
34634/***/ }),
34635/* 303 */
34636/***/ (function(module, __webpack_exports__, __webpack_require__) {
34637
34638"use strict";
34639__webpack_require__.r(__webpack_exports__);
34640/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return find; });
34641/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueOperator", function() { return FindValueOperator; });
34642/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueSubscriber", function() { return FindValueSubscriber; });
34643/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34644/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34645/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34646
34647
34648function find(predicate, thisArg) {
34649 if (typeof predicate !== 'function') {
34650 throw new TypeError('predicate is not a function');
34651 }
34652 return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
34653}
34654var FindValueOperator = /*@__PURE__*/ (function () {
34655 function FindValueOperator(predicate, source, yieldIndex, thisArg) {
34656 this.predicate = predicate;
34657 this.source = source;
34658 this.yieldIndex = yieldIndex;
34659 this.thisArg = thisArg;
34660 }
34661 FindValueOperator.prototype.call = function (observer, source) {
34662 return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
34663 };
34664 return FindValueOperator;
34665}());
34666
34667var FindValueSubscriber = /*@__PURE__*/ (function (_super) {
34668 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FindValueSubscriber, _super);
34669 function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
34670 var _this = _super.call(this, destination) || this;
34671 _this.predicate = predicate;
34672 _this.source = source;
34673 _this.yieldIndex = yieldIndex;
34674 _this.thisArg = thisArg;
34675 _this.index = 0;
34676 return _this;
34677 }
34678 FindValueSubscriber.prototype.notifyComplete = function (value) {
34679 var destination = this.destination;
34680 destination.next(value);
34681 destination.complete();
34682 this.unsubscribe();
34683 };
34684 FindValueSubscriber.prototype._next = function (value) {
34685 var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
34686 var index = this.index++;
34687 try {
34688 var result = predicate.call(thisArg || this, value, index, this.source);
34689 if (result) {
34690 this.notifyComplete(this.yieldIndex ? index : value);
34691 }
34692 }
34693 catch (err) {
34694 this.destination.error(err);
34695 }
34696 };
34697 FindValueSubscriber.prototype._complete = function () {
34698 this.notifyComplete(this.yieldIndex ? -1 : undefined);
34699 };
34700 return FindValueSubscriber;
34701}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34702
34703//# sourceMappingURL=find.js.map
34704
34705
34706/***/ }),
34707/* 304 */
34708/***/ (function(module, __webpack_exports__, __webpack_require__) {
34709
34710"use strict";
34711__webpack_require__.r(__webpack_exports__);
34712/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; });
34713/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(303);
34714/** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */
34715
34716function findIndex(predicate, thisArg) {
34717 return function (source) { return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__["FindValueOperator"](predicate, source, true, thisArg)); };
34718}
34719//# sourceMappingURL=findIndex.js.map
34720
34721
34722/***/ }),
34723/* 305 */
34724/***/ (function(module, __webpack_exports__, __webpack_require__) {
34725
34726"use strict";
34727__webpack_require__.r(__webpack_exports__);
34728/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; });
34729/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
34730/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
34731/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(296);
34732/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(286);
34733/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(295);
34734/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(183);
34735/** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */
34736
34737
34738
34739
34740
34741
34742function first(predicate, defaultValue) {
34743 var hasDefaultValue = arguments.length >= 2;
34744 return function (source) { return source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_take__WEBPACK_IMPORTED_MODULE_2__["take"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__["throwIfEmpty"])(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"](); })); };
34745}
34746//# sourceMappingURL=first.js.map
34747
34748
34749/***/ }),
34750/* 306 */
34751/***/ (function(module, __webpack_exports__, __webpack_require__) {
34752
34753"use strict";
34754__webpack_require__.r(__webpack_exports__);
34755/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return ignoreElements; });
34756/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34757/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34758/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34759
34760
34761function ignoreElements() {
34762 return function ignoreElementsOperatorFunction(source) {
34763 return source.lift(new IgnoreElementsOperator());
34764 };
34765}
34766var IgnoreElementsOperator = /*@__PURE__*/ (function () {
34767 function IgnoreElementsOperator() {
34768 }
34769 IgnoreElementsOperator.prototype.call = function (subscriber, source) {
34770 return source.subscribe(new IgnoreElementsSubscriber(subscriber));
34771 };
34772 return IgnoreElementsOperator;
34773}());
34774var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) {
34775 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IgnoreElementsSubscriber, _super);
34776 function IgnoreElementsSubscriber() {
34777 return _super !== null && _super.apply(this, arguments) || this;
34778 }
34779 IgnoreElementsSubscriber.prototype._next = function (unused) {
34780 };
34781 return IgnoreElementsSubscriber;
34782}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34783//# sourceMappingURL=ignoreElements.js.map
34784
34785
34786/***/ }),
34787/* 307 */
34788/***/ (function(module, __webpack_exports__, __webpack_require__) {
34789
34790"use strict";
34791__webpack_require__.r(__webpack_exports__);
34792/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
34793/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34794/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34795/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34796
34797
34798function isEmpty() {
34799 return function (source) { return source.lift(new IsEmptyOperator()); };
34800}
34801var IsEmptyOperator = /*@__PURE__*/ (function () {
34802 function IsEmptyOperator() {
34803 }
34804 IsEmptyOperator.prototype.call = function (observer, source) {
34805 return source.subscribe(new IsEmptySubscriber(observer));
34806 };
34807 return IsEmptyOperator;
34808}());
34809var IsEmptySubscriber = /*@__PURE__*/ (function (_super) {
34810 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IsEmptySubscriber, _super);
34811 function IsEmptySubscriber(destination) {
34812 return _super.call(this, destination) || this;
34813 }
34814 IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
34815 var destination = this.destination;
34816 destination.next(isEmpty);
34817 destination.complete();
34818 };
34819 IsEmptySubscriber.prototype._next = function (value) {
34820 this.notifyComplete(false);
34821 };
34822 IsEmptySubscriber.prototype._complete = function () {
34823 this.notifyComplete(true);
34824 };
34825 return IsEmptySubscriber;
34826}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34827//# sourceMappingURL=isEmpty.js.map
34828
34829
34830/***/ }),
34831/* 308 */
34832/***/ (function(module, __webpack_exports__, __webpack_require__) {
34833
34834"use strict";
34835__webpack_require__.r(__webpack_exports__);
34836/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; });
34837/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
34838/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
34839/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(309);
34840/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(295);
34841/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(286);
34842/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(183);
34843/** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */
34844
34845
34846
34847
34848
34849
34850function last(predicate, defaultValue) {
34851 var hasDefaultValue = arguments.length >= 2;
34852 return function (source) { return source.pipe(predicate ? Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(function (v, i) { return predicate(v, i, source); }) : _util_identity__WEBPACK_IMPORTED_MODULE_5__["identity"], Object(_takeLast__WEBPACK_IMPORTED_MODULE_2__["takeLast"])(1), hasDefaultValue ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__["defaultIfEmpty"])(defaultValue) : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__["throwIfEmpty"])(function () { return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__["EmptyError"](); })); };
34853}
34854//# sourceMappingURL=last.js.map
34855
34856
34857/***/ }),
34858/* 309 */
34859/***/ (function(module, __webpack_exports__, __webpack_require__) {
34860
34861"use strict";
34862__webpack_require__.r(__webpack_exports__);
34863/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return takeLast; });
34864/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34865/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34866/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
34867/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
34868/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34869
34870
34871
34872
34873function takeLast(count) {
34874 return function takeLastOperatorFunction(source) {
34875 if (count === 0) {
34876 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
34877 }
34878 else {
34879 return source.lift(new TakeLastOperator(count));
34880 }
34881 };
34882}
34883var TakeLastOperator = /*@__PURE__*/ (function () {
34884 function TakeLastOperator(total) {
34885 this.total = total;
34886 if (this.total < 0) {
34887 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
34888 }
34889 }
34890 TakeLastOperator.prototype.call = function (subscriber, source) {
34891 return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
34892 };
34893 return TakeLastOperator;
34894}());
34895var TakeLastSubscriber = /*@__PURE__*/ (function (_super) {
34896 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeLastSubscriber, _super);
34897 function TakeLastSubscriber(destination, total) {
34898 var _this = _super.call(this, destination) || this;
34899 _this.total = total;
34900 _this.ring = new Array();
34901 _this.count = 0;
34902 return _this;
34903 }
34904 TakeLastSubscriber.prototype._next = function (value) {
34905 var ring = this.ring;
34906 var total = this.total;
34907 var count = this.count++;
34908 if (ring.length < total) {
34909 ring.push(value);
34910 }
34911 else {
34912 var index = count % total;
34913 ring[index] = value;
34914 }
34915 };
34916 TakeLastSubscriber.prototype._complete = function () {
34917 var destination = this.destination;
34918 var count = this.count;
34919 if (count > 0) {
34920 var total = this.count >= this.total ? this.total : this.count;
34921 var ring = this.ring;
34922 for (var i = 0; i < total; i++) {
34923 var idx = (count++) % total;
34924 destination.next(ring[idx]);
34925 }
34926 }
34927 destination.complete();
34928 };
34929 return TakeLastSubscriber;
34930}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34931//# sourceMappingURL=takeLast.js.map
34932
34933
34934/***/ }),
34935/* 310 */
34936/***/ (function(module, __webpack_exports__, __webpack_require__) {
34937
34938"use strict";
34939__webpack_require__.r(__webpack_exports__);
34940/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return mapTo; });
34941/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34942/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34943/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34944
34945
34946function mapTo(value) {
34947 return function (source) { return source.lift(new MapToOperator(value)); };
34948}
34949var MapToOperator = /*@__PURE__*/ (function () {
34950 function MapToOperator(value) {
34951 this.value = value;
34952 }
34953 MapToOperator.prototype.call = function (subscriber, source) {
34954 return source.subscribe(new MapToSubscriber(subscriber, this.value));
34955 };
34956 return MapToOperator;
34957}());
34958var MapToSubscriber = /*@__PURE__*/ (function (_super) {
34959 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapToSubscriber, _super);
34960 function MapToSubscriber(destination, value) {
34961 var _this = _super.call(this, destination) || this;
34962 _this.value = value;
34963 return _this;
34964 }
34965 MapToSubscriber.prototype._next = function (x) {
34966 this.destination.next(this.value);
34967 };
34968 return MapToSubscriber;
34969}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34970//# sourceMappingURL=mapTo.js.map
34971
34972
34973/***/ }),
34974/* 311 */
34975/***/ (function(module, __webpack_exports__, __webpack_require__) {
34976
34977"use strict";
34978__webpack_require__.r(__webpack_exports__);
34979/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return materialize; });
34980/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34981/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34982/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(200);
34983/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
34984
34985
34986
34987function materialize() {
34988 return function materializeOperatorFunction(source) {
34989 return source.lift(new MaterializeOperator());
34990 };
34991}
34992var MaterializeOperator = /*@__PURE__*/ (function () {
34993 function MaterializeOperator() {
34994 }
34995 MaterializeOperator.prototype.call = function (subscriber, source) {
34996 return source.subscribe(new MaterializeSubscriber(subscriber));
34997 };
34998 return MaterializeOperator;
34999}());
35000var MaterializeSubscriber = /*@__PURE__*/ (function (_super) {
35001 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MaterializeSubscriber, _super);
35002 function MaterializeSubscriber(destination) {
35003 return _super.call(this, destination) || this;
35004 }
35005 MaterializeSubscriber.prototype._next = function (value) {
35006 this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
35007 };
35008 MaterializeSubscriber.prototype._error = function (err) {
35009 var destination = this.destination;
35010 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
35011 destination.complete();
35012 };
35013 MaterializeSubscriber.prototype._complete = function () {
35014 var destination = this.destination;
35015 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
35016 destination.complete();
35017 };
35018 return MaterializeSubscriber;
35019}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35020//# sourceMappingURL=materialize.js.map
35021
35022
35023/***/ }),
35024/* 312 */
35025/***/ (function(module, __webpack_exports__, __webpack_require__) {
35026
35027"use strict";
35028__webpack_require__.r(__webpack_exports__);
35029/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; });
35030/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
35031/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
35032
35033function max(comparer) {
35034 var max = (typeof comparer === 'function')
35035 ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
35036 : function (x, y) { return x > y ? x : y; };
35037 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(max);
35038}
35039//# sourceMappingURL=max.js.map
35040
35041
35042/***/ }),
35043/* 313 */
35044/***/ (function(module, __webpack_exports__, __webpack_require__) {
35045
35046"use strict";
35047__webpack_require__.r(__webpack_exports__);
35048/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; });
35049/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(314);
35050/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(309);
35051/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(286);
35052/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(182);
35053/** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */
35054
35055
35056
35057
35058function reduce(accumulator, seed) {
35059 if (arguments.length >= 2) {
35060 return function reduceOperatorFunctionWithSeed(source) {
35061 return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])(accumulator, seed), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1), Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__["defaultIfEmpty"])(seed))(source);
35062 };
35063 }
35064 return function reduceOperatorFunction(source) {
35065 return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipe"])(Object(_scan__WEBPACK_IMPORTED_MODULE_0__["scan"])(function (acc, value, index) { return accumulator(acc, value, index + 1); }), Object(_takeLast__WEBPACK_IMPORTED_MODULE_1__["takeLast"])(1))(source);
35066 };
35067}
35068//# sourceMappingURL=reduce.js.map
35069
35070
35071/***/ }),
35072/* 314 */
35073/***/ (function(module, __webpack_exports__, __webpack_require__) {
35074
35075"use strict";
35076__webpack_require__.r(__webpack_exports__);
35077/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return scan; });
35078/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35079/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35080/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35081
35082
35083function scan(accumulator, seed) {
35084 var hasSeed = false;
35085 if (arguments.length >= 2) {
35086 hasSeed = true;
35087 }
35088 return function scanOperatorFunction(source) {
35089 return source.lift(new ScanOperator(accumulator, seed, hasSeed));
35090 };
35091}
35092var ScanOperator = /*@__PURE__*/ (function () {
35093 function ScanOperator(accumulator, seed, hasSeed) {
35094 if (hasSeed === void 0) {
35095 hasSeed = false;
35096 }
35097 this.accumulator = accumulator;
35098 this.seed = seed;
35099 this.hasSeed = hasSeed;
35100 }
35101 ScanOperator.prototype.call = function (subscriber, source) {
35102 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
35103 };
35104 return ScanOperator;
35105}());
35106var ScanSubscriber = /*@__PURE__*/ (function (_super) {
35107 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ScanSubscriber, _super);
35108 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
35109 var _this = _super.call(this, destination) || this;
35110 _this.accumulator = accumulator;
35111 _this._seed = _seed;
35112 _this.hasSeed = hasSeed;
35113 _this.index = 0;
35114 return _this;
35115 }
35116 Object.defineProperty(ScanSubscriber.prototype, "seed", {
35117 get: function () {
35118 return this._seed;
35119 },
35120 set: function (value) {
35121 this.hasSeed = true;
35122 this._seed = value;
35123 },
35124 enumerable: true,
35125 configurable: true
35126 });
35127 ScanSubscriber.prototype._next = function (value) {
35128 if (!this.hasSeed) {
35129 this.seed = value;
35130 this.destination.next(value);
35131 }
35132 else {
35133 return this._tryNext(value);
35134 }
35135 };
35136 ScanSubscriber.prototype._tryNext = function (value) {
35137 var index = this.index++;
35138 var result;
35139 try {
35140 result = this.accumulator(this.seed, value, index);
35141 }
35142 catch (err) {
35143 this.destination.error(err);
35144 }
35145 this.seed = result;
35146 this.destination.next(result);
35147 };
35148 return ScanSubscriber;
35149}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35150//# sourceMappingURL=scan.js.map
35151
35152
35153/***/ }),
35154/* 315 */
35155/***/ (function(module, __webpack_exports__, __webpack_require__) {
35156
35157"use strict";
35158__webpack_require__.r(__webpack_exports__);
35159/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
35160/* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(256);
35161/** PURE_IMPORTS_START _observable_merge PURE_IMPORTS_END */
35162
35163function merge() {
35164 var observables = [];
35165 for (var _i = 0; _i < arguments.length; _i++) {
35166 observables[_i] = arguments[_i];
35167 }
35168 return function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"].apply(void 0, [source].concat(observables))); };
35169}
35170//# sourceMappingURL=merge.js.map
35171
35172
35173/***/ }),
35174/* 316 */
35175/***/ (function(module, __webpack_exports__, __webpack_require__) {
35176
35177"use strict";
35178__webpack_require__.r(__webpack_exports__);
35179/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return mergeMapTo; });
35180/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
35181/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
35182
35183function mergeMapTo(innerObservable, resultSelector, concurrent) {
35184 if (concurrent === void 0) {
35185 concurrent = Number.POSITIVE_INFINITY;
35186 }
35187 if (typeof resultSelector === 'function') {
35188 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, resultSelector, concurrent);
35189 }
35190 if (typeof resultSelector === 'number') {
35191 concurrent = resultSelector;
35192 }
35193 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, concurrent);
35194}
35195//# sourceMappingURL=mergeMapTo.js.map
35196
35197
35198/***/ }),
35199/* 317 */
35200/***/ (function(module, __webpack_exports__, __webpack_require__) {
35201
35202"use strict";
35203__webpack_require__.r(__webpack_exports__);
35204/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return mergeScan; });
35205/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanOperator", function() { return MergeScanOperator; });
35206/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanSubscriber", function() { return MergeScanSubscriber; });
35207/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35208/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
35209/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35210/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(229);
35211/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber PURE_IMPORTS_END */
35212
35213
35214
35215
35216function mergeScan(accumulator, seed, concurrent) {
35217 if (concurrent === void 0) {
35218 concurrent = Number.POSITIVE_INFINITY;
35219 }
35220 return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
35221}
35222var MergeScanOperator = /*@__PURE__*/ (function () {
35223 function MergeScanOperator(accumulator, seed, concurrent) {
35224 this.accumulator = accumulator;
35225 this.seed = seed;
35226 this.concurrent = concurrent;
35227 }
35228 MergeScanOperator.prototype.call = function (subscriber, source) {
35229 return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
35230 };
35231 return MergeScanOperator;
35232}());
35233
35234var MergeScanSubscriber = /*@__PURE__*/ (function (_super) {
35235 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeScanSubscriber, _super);
35236 function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
35237 var _this = _super.call(this, destination) || this;
35238 _this.accumulator = accumulator;
35239 _this.acc = acc;
35240 _this.concurrent = concurrent;
35241 _this.hasValue = false;
35242 _this.hasCompleted = false;
35243 _this.buffer = [];
35244 _this.active = 0;
35245 _this.index = 0;
35246 return _this;
35247 }
35248 MergeScanSubscriber.prototype._next = function (value) {
35249 if (this.active < this.concurrent) {
35250 var index = this.index++;
35251 var destination = this.destination;
35252 var ish = void 0;
35253 try {
35254 var accumulator = this.accumulator;
35255 ish = accumulator(this.acc, value, index);
35256 }
35257 catch (e) {
35258 return destination.error(e);
35259 }
35260 this.active++;
35261 this._innerSub(ish, value, index);
35262 }
35263 else {
35264 this.buffer.push(value);
35265 }
35266 };
35267 MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
35268 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, value, index);
35269 var destination = this.destination;
35270 destination.add(innerSubscriber);
35271 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
35272 if (innerSubscription !== innerSubscriber) {
35273 destination.add(innerSubscription);
35274 }
35275 };
35276 MergeScanSubscriber.prototype._complete = function () {
35277 this.hasCompleted = true;
35278 if (this.active === 0 && this.buffer.length === 0) {
35279 if (this.hasValue === false) {
35280 this.destination.next(this.acc);
35281 }
35282 this.destination.complete();
35283 }
35284 this.unsubscribe();
35285 };
35286 MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35287 var destination = this.destination;
35288 this.acc = innerValue;
35289 this.hasValue = true;
35290 destination.next(innerValue);
35291 };
35292 MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
35293 var buffer = this.buffer;
35294 var destination = this.destination;
35295 destination.remove(innerSub);
35296 this.active--;
35297 if (buffer.length > 0) {
35298 this._next(buffer.shift());
35299 }
35300 else if (this.active === 0 && this.hasCompleted) {
35301 if (this.hasValue === false) {
35302 this.destination.next(this.acc);
35303 }
35304 this.destination.complete();
35305 }
35306 };
35307 return MergeScanSubscriber;
35308}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35309
35310//# sourceMappingURL=mergeScan.js.map
35311
35312
35313/***/ }),
35314/* 318 */
35315/***/ (function(module, __webpack_exports__, __webpack_require__) {
35316
35317"use strict";
35318__webpack_require__.r(__webpack_exports__);
35319/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; });
35320/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
35321/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
35322
35323function min(comparer) {
35324 var min = (typeof comparer === 'function')
35325 ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
35326 : function (x, y) { return x < y ? x : y; };
35327 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(min);
35328}
35329//# sourceMappingURL=min.js.map
35330
35331
35332/***/ }),
35333/* 319 */
35334/***/ (function(module, __webpack_exports__, __webpack_require__) {
35335
35336"use strict";
35337__webpack_require__.r(__webpack_exports__);
35338/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return multicast; });
35339/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MulticastOperator", function() { return MulticastOperator; });
35340/* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(184);
35341/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */
35342
35343function multicast(subjectOrSubjectFactory, selector) {
35344 return function multicastOperatorFunction(source) {
35345 var subjectFactory;
35346 if (typeof subjectOrSubjectFactory === 'function') {
35347 subjectFactory = subjectOrSubjectFactory;
35348 }
35349 else {
35350 subjectFactory = function subjectFactory() {
35351 return subjectOrSubjectFactory;
35352 };
35353 }
35354 if (typeof selector === 'function') {
35355 return source.lift(new MulticastOperator(subjectFactory, selector));
35356 }
35357 var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__["connectableObservableDescriptor"]);
35358 connectable.source = source;
35359 connectable.subjectFactory = subjectFactory;
35360 return connectable;
35361 };
35362}
35363var MulticastOperator = /*@__PURE__*/ (function () {
35364 function MulticastOperator(subjectFactory, selector) {
35365 this.subjectFactory = subjectFactory;
35366 this.selector = selector;
35367 }
35368 MulticastOperator.prototype.call = function (subscriber, source) {
35369 var selector = this.selector;
35370 var subject = this.subjectFactory();
35371 var subscription = selector(subject).subscribe(subscriber);
35372 subscription.add(source.subscribe(subject));
35373 return subscription;
35374 };
35375 return MulticastOperator;
35376}());
35377
35378//# sourceMappingURL=multicast.js.map
35379
35380
35381/***/ }),
35382/* 320 */
35383/***/ (function(module, __webpack_exports__, __webpack_require__) {
35384
35385"use strict";
35386__webpack_require__.r(__webpack_exports__);
35387/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
35388/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNextStatic", function() { return onErrorResumeNextStatic; });
35389/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35390/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
35391/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
35392/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
35393/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(229);
35394/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(228);
35395/** PURE_IMPORTS_START tslib,_observable_from,_util_isArray,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35396
35397
35398
35399
35400
35401
35402function onErrorResumeNext() {
35403 var nextSources = [];
35404 for (var _i = 0; _i < arguments.length; _i++) {
35405 nextSources[_i] = arguments[_i];
35406 }
35407 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
35408 nextSources = nextSources[0];
35409 }
35410 return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
35411}
35412function onErrorResumeNextStatic() {
35413 var nextSources = [];
35414 for (var _i = 0; _i < arguments.length; _i++) {
35415 nextSources[_i] = arguments[_i];
35416 }
35417 var source = null;
35418 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
35419 nextSources = nextSources[0];
35420 }
35421 source = nextSources.shift();
35422 return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(source, null).lift(new OnErrorResumeNextOperator(nextSources));
35423}
35424var OnErrorResumeNextOperator = /*@__PURE__*/ (function () {
35425 function OnErrorResumeNextOperator(nextSources) {
35426 this.nextSources = nextSources;
35427 }
35428 OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
35429 return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
35430 };
35431 return OnErrorResumeNextOperator;
35432}());
35433var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) {
35434 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OnErrorResumeNextSubscriber, _super);
35435 function OnErrorResumeNextSubscriber(destination, nextSources) {
35436 var _this = _super.call(this, destination) || this;
35437 _this.destination = destination;
35438 _this.nextSources = nextSources;
35439 return _this;
35440 }
35441 OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
35442 this.subscribeToNextSource();
35443 };
35444 OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
35445 this.subscribeToNextSource();
35446 };
35447 OnErrorResumeNextSubscriber.prototype._error = function (err) {
35448 this.subscribeToNextSource();
35449 this.unsubscribe();
35450 };
35451 OnErrorResumeNextSubscriber.prototype._complete = function () {
35452 this.subscribeToNextSource();
35453 this.unsubscribe();
35454 };
35455 OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
35456 var next = this.nextSources.shift();
35457 if (!!next) {
35458 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__["InnerSubscriber"](this, undefined, undefined);
35459 var destination = this.destination;
35460 destination.add(innerSubscriber);
35461 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, next, undefined, undefined, innerSubscriber);
35462 if (innerSubscription !== innerSubscriber) {
35463 destination.add(innerSubscription);
35464 }
35465 }
35466 else {
35467 this.destination.complete();
35468 }
35469 };
35470 return OnErrorResumeNextSubscriber;
35471}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
35472//# sourceMappingURL=onErrorResumeNext.js.map
35473
35474
35475/***/ }),
35476/* 321 */
35477/***/ (function(module, __webpack_exports__, __webpack_require__) {
35478
35479"use strict";
35480__webpack_require__.r(__webpack_exports__);
35481/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return pairwise; });
35482/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35483/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35484/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35485
35486
35487function pairwise() {
35488 return function (source) { return source.lift(new PairwiseOperator()); };
35489}
35490var PairwiseOperator = /*@__PURE__*/ (function () {
35491 function PairwiseOperator() {
35492 }
35493 PairwiseOperator.prototype.call = function (subscriber, source) {
35494 return source.subscribe(new PairwiseSubscriber(subscriber));
35495 };
35496 return PairwiseOperator;
35497}());
35498var PairwiseSubscriber = /*@__PURE__*/ (function (_super) {
35499 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](PairwiseSubscriber, _super);
35500 function PairwiseSubscriber(destination) {
35501 var _this = _super.call(this, destination) || this;
35502 _this.hasPrev = false;
35503 return _this;
35504 }
35505 PairwiseSubscriber.prototype._next = function (value) {
35506 var pair;
35507 if (this.hasPrev) {
35508 pair = [this.prev, value];
35509 }
35510 else {
35511 this.hasPrev = true;
35512 }
35513 this.prev = value;
35514 if (pair) {
35515 this.destination.next(pair);
35516 }
35517 };
35518 return PairwiseSubscriber;
35519}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35520//# sourceMappingURL=pairwise.js.map
35521
35522
35523/***/ }),
35524/* 322 */
35525/***/ (function(module, __webpack_exports__, __webpack_require__) {
35526
35527"use strict";
35528__webpack_require__.r(__webpack_exports__);
35529/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
35530/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(261);
35531/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
35532/** PURE_IMPORTS_START _util_not,_filter PURE_IMPORTS_END */
35533
35534
35535function partition(predicate, thisArg) {
35536 return function (source) {
35537 return [
35538 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(predicate, thisArg)(source),
35539 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(source)
35540 ];
35541 };
35542}
35543//# sourceMappingURL=partition.js.map
35544
35545
35546/***/ }),
35547/* 323 */
35548/***/ (function(module, __webpack_exports__, __webpack_require__) {
35549
35550"use strict";
35551__webpack_require__.r(__webpack_exports__);
35552/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return pluck; });
35553/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(224);
35554/** PURE_IMPORTS_START _map PURE_IMPORTS_END */
35555
35556function pluck() {
35557 var properties = [];
35558 for (var _i = 0; _i < arguments.length; _i++) {
35559 properties[_i] = arguments[_i];
35560 }
35561 var length = properties.length;
35562 if (length === 0) {
35563 throw new Error('list of properties cannot be empty.');
35564 }
35565 return function (source) { return Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(plucker(properties, length))(source); };
35566}
35567function plucker(props, length) {
35568 var mapper = function (x) {
35569 var currentProp = x;
35570 for (var i = 0; i < length; i++) {
35571 var p = currentProp[props[i]];
35572 if (typeof p !== 'undefined') {
35573 currentProp = p;
35574 }
35575 else {
35576 return undefined;
35577 }
35578 }
35579 return currentProp;
35580 };
35581 return mapper;
35582}
35583//# sourceMappingURL=pluck.js.map
35584
35585
35586/***/ }),
35587/* 324 */
35588/***/ (function(module, __webpack_exports__, __webpack_require__) {
35589
35590"use strict";
35591__webpack_require__.r(__webpack_exports__);
35592/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; });
35593/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(185);
35594/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35595/** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */
35596
35597
35598function publish(selector) {
35599 return selector ?
35600 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"](); }, selector) :
35601 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]());
35602}
35603//# sourceMappingURL=publish.js.map
35604
35605
35606/***/ }),
35607/* 325 */
35608/***/ (function(module, __webpack_exports__, __webpack_require__) {
35609
35610"use strict";
35611__webpack_require__.r(__webpack_exports__);
35612/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; });
35613/* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(190);
35614/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35615/** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */
35616
35617
35618function publishBehavior(value) {
35619 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](value))(source); };
35620}
35621//# sourceMappingURL=publishBehavior.js.map
35622
35623
35624/***/ }),
35625/* 326 */
35626/***/ (function(module, __webpack_exports__, __webpack_require__) {
35627
35628"use strict";
35629__webpack_require__.r(__webpack_exports__);
35630/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; });
35631/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(208);
35632/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35633/** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */
35634
35635
35636function publishLast() {
35637 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__["AsyncSubject"]())(source); };
35638}
35639//# sourceMappingURL=publishLast.js.map
35640
35641
35642/***/ }),
35643/* 327 */
35644/***/ (function(module, __webpack_exports__, __webpack_require__) {
35645
35646"use strict";
35647__webpack_require__.r(__webpack_exports__);
35648/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; });
35649/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(191);
35650/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35651/** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */
35652
35653
35654function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
35655 if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
35656 scheduler = selectorOrScheduler;
35657 }
35658 var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
35659 var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
35660 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return subject; }, selector)(source); };
35661}
35662//# sourceMappingURL=publishReplay.js.map
35663
35664
35665/***/ }),
35666/* 328 */
35667/***/ (function(module, __webpack_exports__, __webpack_require__) {
35668
35669"use strict";
35670__webpack_require__.r(__webpack_exports__);
35671/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
35672/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
35673/* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(263);
35674/** PURE_IMPORTS_START _util_isArray,_observable_race PURE_IMPORTS_END */
35675
35676
35677function race() {
35678 var observables = [];
35679 for (var _i = 0; _i < arguments.length; _i++) {
35680 observables[_i] = arguments[_i];
35681 }
35682 return function raceOperatorFunction(source) {
35683 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
35684 observables = observables[0];
35685 }
35686 return source.lift.call(_observable_race__WEBPACK_IMPORTED_MODULE_1__["race"].apply(void 0, [source].concat(observables)));
35687 };
35688}
35689//# sourceMappingURL=race.js.map
35690
35691
35692/***/ }),
35693/* 329 */
35694/***/ (function(module, __webpack_exports__, __webpack_require__) {
35695
35696"use strict";
35697__webpack_require__.r(__webpack_exports__);
35698/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return repeat; });
35699/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35700/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35701/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
35702/** PURE_IMPORTS_START tslib,_Subscriber,_observable_empty PURE_IMPORTS_END */
35703
35704
35705
35706function repeat(count) {
35707 if (count === void 0) {
35708 count = -1;
35709 }
35710 return function (source) {
35711 if (count === 0) {
35712 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
35713 }
35714 else if (count < 0) {
35715 return source.lift(new RepeatOperator(-1, source));
35716 }
35717 else {
35718 return source.lift(new RepeatOperator(count - 1, source));
35719 }
35720 };
35721}
35722var RepeatOperator = /*@__PURE__*/ (function () {
35723 function RepeatOperator(count, source) {
35724 this.count = count;
35725 this.source = source;
35726 }
35727 RepeatOperator.prototype.call = function (subscriber, source) {
35728 return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
35729 };
35730 return RepeatOperator;
35731}());
35732var RepeatSubscriber = /*@__PURE__*/ (function (_super) {
35733 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatSubscriber, _super);
35734 function RepeatSubscriber(destination, count, source) {
35735 var _this = _super.call(this, destination) || this;
35736 _this.count = count;
35737 _this.source = source;
35738 return _this;
35739 }
35740 RepeatSubscriber.prototype.complete = function () {
35741 if (!this.isStopped) {
35742 var _a = this, source = _a.source, count = _a.count;
35743 if (count === 0) {
35744 return _super.prototype.complete.call(this);
35745 }
35746 else if (count > -1) {
35747 this.count = count - 1;
35748 }
35749 source.subscribe(this._unsubscribeAndRecycle());
35750 }
35751 };
35752 return RepeatSubscriber;
35753}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35754//# sourceMappingURL=repeat.js.map
35755
35756
35757/***/ }),
35758/* 330 */
35759/***/ (function(module, __webpack_exports__, __webpack_require__) {
35760
35761"use strict";
35762__webpack_require__.r(__webpack_exports__);
35763/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return repeatWhen; });
35764/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35765/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35766/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35767/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
35768/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35769
35770
35771
35772
35773function repeatWhen(notifier) {
35774 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
35775}
35776var RepeatWhenOperator = /*@__PURE__*/ (function () {
35777 function RepeatWhenOperator(notifier) {
35778 this.notifier = notifier;
35779 }
35780 RepeatWhenOperator.prototype.call = function (subscriber, source) {
35781 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
35782 };
35783 return RepeatWhenOperator;
35784}());
35785var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
35786 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatWhenSubscriber, _super);
35787 function RepeatWhenSubscriber(destination, notifier, source) {
35788 var _this = _super.call(this, destination) || this;
35789 _this.notifier = notifier;
35790 _this.source = source;
35791 _this.sourceIsBeingSubscribedTo = true;
35792 return _this;
35793 }
35794 RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35795 this.sourceIsBeingSubscribedTo = true;
35796 this.source.subscribe(this);
35797 };
35798 RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
35799 if (this.sourceIsBeingSubscribedTo === false) {
35800 return _super.prototype.complete.call(this);
35801 }
35802 };
35803 RepeatWhenSubscriber.prototype.complete = function () {
35804 this.sourceIsBeingSubscribedTo = false;
35805 if (!this.isStopped) {
35806 if (!this.retries) {
35807 this.subscribeToRetries();
35808 }
35809 if (!this.retriesSubscription || this.retriesSubscription.closed) {
35810 return _super.prototype.complete.call(this);
35811 }
35812 this._unsubscribeAndRecycle();
35813 this.notifications.next();
35814 }
35815 };
35816 RepeatWhenSubscriber.prototype._unsubscribe = function () {
35817 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
35818 if (notifications) {
35819 notifications.unsubscribe();
35820 this.notifications = null;
35821 }
35822 if (retriesSubscription) {
35823 retriesSubscription.unsubscribe();
35824 this.retriesSubscription = null;
35825 }
35826 this.retries = null;
35827 };
35828 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
35829 var _unsubscribe = this._unsubscribe;
35830 this._unsubscribe = null;
35831 _super.prototype._unsubscribeAndRecycle.call(this);
35832 this._unsubscribe = _unsubscribe;
35833 return this;
35834 };
35835 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
35836 this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
35837 var retries;
35838 try {
35839 var notifier = this.notifier;
35840 retries = notifier(this.notifications);
35841 }
35842 catch (e) {
35843 return _super.prototype.complete.call(this);
35844 }
35845 this.retries = retries;
35846 this.retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
35847 };
35848 return RepeatWhenSubscriber;
35849}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35850//# sourceMappingURL=repeatWhen.js.map
35851
35852
35853/***/ }),
35854/* 331 */
35855/***/ (function(module, __webpack_exports__, __webpack_require__) {
35856
35857"use strict";
35858__webpack_require__.r(__webpack_exports__);
35859/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return retry; });
35860/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35861/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35862/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35863
35864
35865function retry(count) {
35866 if (count === void 0) {
35867 count = -1;
35868 }
35869 return function (source) { return source.lift(new RetryOperator(count, source)); };
35870}
35871var RetryOperator = /*@__PURE__*/ (function () {
35872 function RetryOperator(count, source) {
35873 this.count = count;
35874 this.source = source;
35875 }
35876 RetryOperator.prototype.call = function (subscriber, source) {
35877 return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
35878 };
35879 return RetryOperator;
35880}());
35881var RetrySubscriber = /*@__PURE__*/ (function (_super) {
35882 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetrySubscriber, _super);
35883 function RetrySubscriber(destination, count, source) {
35884 var _this = _super.call(this, destination) || this;
35885 _this.count = count;
35886 _this.source = source;
35887 return _this;
35888 }
35889 RetrySubscriber.prototype.error = function (err) {
35890 if (!this.isStopped) {
35891 var _a = this, source = _a.source, count = _a.count;
35892 if (count === 0) {
35893 return _super.prototype.error.call(this, err);
35894 }
35895 else if (count > -1) {
35896 this.count = count - 1;
35897 }
35898 source.subscribe(this._unsubscribeAndRecycle());
35899 }
35900 };
35901 return RetrySubscriber;
35902}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35903//# sourceMappingURL=retry.js.map
35904
35905
35906/***/ }),
35907/* 332 */
35908/***/ (function(module, __webpack_exports__, __webpack_require__) {
35909
35910"use strict";
35911__webpack_require__.r(__webpack_exports__);
35912/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return retryWhen; });
35913/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35914/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35915/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35916/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
35917/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35918
35919
35920
35921
35922function retryWhen(notifier) {
35923 return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
35924}
35925var RetryWhenOperator = /*@__PURE__*/ (function () {
35926 function RetryWhenOperator(notifier, source) {
35927 this.notifier = notifier;
35928 this.source = source;
35929 }
35930 RetryWhenOperator.prototype.call = function (subscriber, source) {
35931 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
35932 };
35933 return RetryWhenOperator;
35934}());
35935var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) {
35936 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetryWhenSubscriber, _super);
35937 function RetryWhenSubscriber(destination, notifier, source) {
35938 var _this = _super.call(this, destination) || this;
35939 _this.notifier = notifier;
35940 _this.source = source;
35941 return _this;
35942 }
35943 RetryWhenSubscriber.prototype.error = function (err) {
35944 if (!this.isStopped) {
35945 var errors = this.errors;
35946 var retries = this.retries;
35947 var retriesSubscription = this.retriesSubscription;
35948 if (!retries) {
35949 errors = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
35950 try {
35951 var notifier = this.notifier;
35952 retries = notifier(errors);
35953 }
35954 catch (e) {
35955 return _super.prototype.error.call(this, e);
35956 }
35957 retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
35958 }
35959 else {
35960 this.errors = null;
35961 this.retriesSubscription = null;
35962 }
35963 this._unsubscribeAndRecycle();
35964 this.errors = errors;
35965 this.retries = retries;
35966 this.retriesSubscription = retriesSubscription;
35967 errors.next(err);
35968 }
35969 };
35970 RetryWhenSubscriber.prototype._unsubscribe = function () {
35971 var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
35972 if (errors) {
35973 errors.unsubscribe();
35974 this.errors = null;
35975 }
35976 if (retriesSubscription) {
35977 retriesSubscription.unsubscribe();
35978 this.retriesSubscription = null;
35979 }
35980 this.retries = null;
35981 };
35982 RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35983 var _unsubscribe = this._unsubscribe;
35984 this._unsubscribe = null;
35985 this._unsubscribeAndRecycle();
35986 this._unsubscribe = _unsubscribe;
35987 this.source.subscribe(this);
35988 };
35989 return RetryWhenSubscriber;
35990}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35991//# sourceMappingURL=retryWhen.js.map
35992
35993
35994/***/ }),
35995/* 333 */
35996/***/ (function(module, __webpack_exports__, __webpack_require__) {
35997
35998"use strict";
35999__webpack_require__.r(__webpack_exports__);
36000/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return sample; });
36001/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36002/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36003/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
36004/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36005
36006
36007
36008function sample(notifier) {
36009 return function (source) { return source.lift(new SampleOperator(notifier)); };
36010}
36011var SampleOperator = /*@__PURE__*/ (function () {
36012 function SampleOperator(notifier) {
36013 this.notifier = notifier;
36014 }
36015 SampleOperator.prototype.call = function (subscriber, source) {
36016 var sampleSubscriber = new SampleSubscriber(subscriber);
36017 var subscription = source.subscribe(sampleSubscriber);
36018 subscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(sampleSubscriber, this.notifier));
36019 return subscription;
36020 };
36021 return SampleOperator;
36022}());
36023var SampleSubscriber = /*@__PURE__*/ (function (_super) {
36024 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleSubscriber, _super);
36025 function SampleSubscriber() {
36026 var _this = _super !== null && _super.apply(this, arguments) || this;
36027 _this.hasValue = false;
36028 return _this;
36029 }
36030 SampleSubscriber.prototype._next = function (value) {
36031 this.value = value;
36032 this.hasValue = true;
36033 };
36034 SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36035 this.emitValue();
36036 };
36037 SampleSubscriber.prototype.notifyComplete = function () {
36038 this.emitValue();
36039 };
36040 SampleSubscriber.prototype.emitValue = function () {
36041 if (this.hasValue) {
36042 this.hasValue = false;
36043 this.destination.next(this.value);
36044 }
36045 };
36046 return SampleSubscriber;
36047}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36048//# sourceMappingURL=sample.js.map
36049
36050
36051/***/ }),
36052/* 334 */
36053/***/ (function(module, __webpack_exports__, __webpack_require__) {
36054
36055"use strict";
36056__webpack_require__.r(__webpack_exports__);
36057/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return sampleTime; });
36058/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36059/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36060/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
36061/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
36062
36063
36064
36065function sampleTime(period, scheduler) {
36066 if (scheduler === void 0) {
36067 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
36068 }
36069 return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
36070}
36071var SampleTimeOperator = /*@__PURE__*/ (function () {
36072 function SampleTimeOperator(period, scheduler) {
36073 this.period = period;
36074 this.scheduler = scheduler;
36075 }
36076 SampleTimeOperator.prototype.call = function (subscriber, source) {
36077 return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
36078 };
36079 return SampleTimeOperator;
36080}());
36081var SampleTimeSubscriber = /*@__PURE__*/ (function (_super) {
36082 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleTimeSubscriber, _super);
36083 function SampleTimeSubscriber(destination, period, scheduler) {
36084 var _this = _super.call(this, destination) || this;
36085 _this.period = period;
36086 _this.scheduler = scheduler;
36087 _this.hasValue = false;
36088 _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
36089 return _this;
36090 }
36091 SampleTimeSubscriber.prototype._next = function (value) {
36092 this.lastValue = value;
36093 this.hasValue = true;
36094 };
36095 SampleTimeSubscriber.prototype.notifyNext = function () {
36096 if (this.hasValue) {
36097 this.hasValue = false;
36098 this.destination.next(this.lastValue);
36099 }
36100 };
36101 return SampleTimeSubscriber;
36102}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36103function dispatchNotification(state) {
36104 var subscriber = state.subscriber, period = state.period;
36105 subscriber.notifyNext();
36106 this.schedule(state, period);
36107}
36108//# sourceMappingURL=sampleTime.js.map
36109
36110
36111/***/ }),
36112/* 335 */
36113/***/ (function(module, __webpack_exports__, __webpack_require__) {
36114
36115"use strict";
36116__webpack_require__.r(__webpack_exports__);
36117/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return sequenceEqual; });
36118/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualOperator", function() { return SequenceEqualOperator; });
36119/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualSubscriber", function() { return SequenceEqualSubscriber; });
36120/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36121/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36122/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36123
36124
36125function sequenceEqual(compareTo, comparator) {
36126 return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
36127}
36128var SequenceEqualOperator = /*@__PURE__*/ (function () {
36129 function SequenceEqualOperator(compareTo, comparator) {
36130 this.compareTo = compareTo;
36131 this.comparator = comparator;
36132 }
36133 SequenceEqualOperator.prototype.call = function (subscriber, source) {
36134 return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
36135 };
36136 return SequenceEqualOperator;
36137}());
36138
36139var SequenceEqualSubscriber = /*@__PURE__*/ (function (_super) {
36140 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualSubscriber, _super);
36141 function SequenceEqualSubscriber(destination, compareTo, comparator) {
36142 var _this = _super.call(this, destination) || this;
36143 _this.compareTo = compareTo;
36144 _this.comparator = comparator;
36145 _this._a = [];
36146 _this._b = [];
36147 _this._oneComplete = false;
36148 _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
36149 return _this;
36150 }
36151 SequenceEqualSubscriber.prototype._next = function (value) {
36152 if (this._oneComplete && this._b.length === 0) {
36153 this.emit(false);
36154 }
36155 else {
36156 this._a.push(value);
36157 this.checkValues();
36158 }
36159 };
36160 SequenceEqualSubscriber.prototype._complete = function () {
36161 if (this._oneComplete) {
36162 this.emit(this._a.length === 0 && this._b.length === 0);
36163 }
36164 else {
36165 this._oneComplete = true;
36166 }
36167 this.unsubscribe();
36168 };
36169 SequenceEqualSubscriber.prototype.checkValues = function () {
36170 var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
36171 while (_a.length > 0 && _b.length > 0) {
36172 var a = _a.shift();
36173 var b = _b.shift();
36174 var areEqual = false;
36175 try {
36176 areEqual = comparator ? comparator(a, b) : a === b;
36177 }
36178 catch (e) {
36179 this.destination.error(e);
36180 }
36181 if (!areEqual) {
36182 this.emit(false);
36183 }
36184 }
36185 };
36186 SequenceEqualSubscriber.prototype.emit = function (value) {
36187 var destination = this.destination;
36188 destination.next(value);
36189 destination.complete();
36190 };
36191 SequenceEqualSubscriber.prototype.nextB = function (value) {
36192 if (this._oneComplete && this._a.length === 0) {
36193 this.emit(false);
36194 }
36195 else {
36196 this._b.push(value);
36197 this.checkValues();
36198 }
36199 };
36200 SequenceEqualSubscriber.prototype.completeB = function () {
36201 if (this._oneComplete) {
36202 this.emit(this._a.length === 0 && this._b.length === 0);
36203 }
36204 else {
36205 this._oneComplete = true;
36206 }
36207 };
36208 return SequenceEqualSubscriber;
36209}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36210
36211var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) {
36212 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualCompareToSubscriber, _super);
36213 function SequenceEqualCompareToSubscriber(destination, parent) {
36214 var _this = _super.call(this, destination) || this;
36215 _this.parent = parent;
36216 return _this;
36217 }
36218 SequenceEqualCompareToSubscriber.prototype._next = function (value) {
36219 this.parent.nextB(value);
36220 };
36221 SequenceEqualCompareToSubscriber.prototype._error = function (err) {
36222 this.parent.error(err);
36223 this.unsubscribe();
36224 };
36225 SequenceEqualCompareToSubscriber.prototype._complete = function () {
36226 this.parent.completeB();
36227 this.unsubscribe();
36228 };
36229 return SequenceEqualCompareToSubscriber;
36230}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36231//# sourceMappingURL=sequenceEqual.js.map
36232
36233
36234/***/ }),
36235/* 336 */
36236/***/ (function(module, __webpack_exports__, __webpack_require__) {
36237
36238"use strict";
36239__webpack_require__.r(__webpack_exports__);
36240/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; });
36241/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(319);
36242/* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36243/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
36244/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */
36245
36246
36247
36248function shareSubjectFactory() {
36249 return new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
36250}
36251function share() {
36252 return function (source) { return Object(_refCount__WEBPACK_IMPORTED_MODULE_1__["refCount"])()(Object(_multicast__WEBPACK_IMPORTED_MODULE_0__["multicast"])(shareSubjectFactory)(source)); };
36253}
36254//# sourceMappingURL=share.js.map
36255
36256
36257/***/ }),
36258/* 337 */
36259/***/ (function(module, __webpack_exports__, __webpack_require__) {
36260
36261"use strict";
36262__webpack_require__.r(__webpack_exports__);
36263/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return shareReplay; });
36264/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(191);
36265/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */
36266
36267function shareReplay(configOrBufferSize, windowTime, scheduler) {
36268 var config;
36269 if (configOrBufferSize && typeof configOrBufferSize === 'object') {
36270 config = configOrBufferSize;
36271 }
36272 else {
36273 config = {
36274 bufferSize: configOrBufferSize,
36275 windowTime: windowTime,
36276 refCount: false,
36277 scheduler: scheduler
36278 };
36279 }
36280 return function (source) { return source.lift(shareReplayOperator(config)); };
36281}
36282function shareReplayOperator(_a) {
36283 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;
36284 var subject;
36285 var refCount = 0;
36286 var subscription;
36287 var hasError = false;
36288 var isComplete = false;
36289 return function shareReplayOperation(source) {
36290 refCount++;
36291 if (!subject || hasError) {
36292 hasError = false;
36293 subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
36294 subscription = source.subscribe({
36295 next: function (value) { subject.next(value); },
36296 error: function (err) {
36297 hasError = true;
36298 subject.error(err);
36299 },
36300 complete: function () {
36301 isComplete = true;
36302 subscription = undefined;
36303 subject.complete();
36304 },
36305 });
36306 }
36307 var innerSub = subject.subscribe(this);
36308 this.add(function () {
36309 refCount--;
36310 innerSub.unsubscribe();
36311 if (subscription && !isComplete && useRefCount && refCount === 0) {
36312 subscription.unsubscribe();
36313 subscription = undefined;
36314 subject = undefined;
36315 }
36316 });
36317 };
36318}
36319//# sourceMappingURL=shareReplay.js.map
36320
36321
36322/***/ }),
36323/* 338 */
36324/***/ (function(module, __webpack_exports__, __webpack_require__) {
36325
36326"use strict";
36327__webpack_require__.r(__webpack_exports__);
36328/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "single", function() { return single; });
36329/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36330/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36331/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(221);
36332/** PURE_IMPORTS_START tslib,_Subscriber,_util_EmptyError PURE_IMPORTS_END */
36333
36334
36335
36336function single(predicate) {
36337 return function (source) { return source.lift(new SingleOperator(predicate, source)); };
36338}
36339var SingleOperator = /*@__PURE__*/ (function () {
36340 function SingleOperator(predicate, source) {
36341 this.predicate = predicate;
36342 this.source = source;
36343 }
36344 SingleOperator.prototype.call = function (subscriber, source) {
36345 return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
36346 };
36347 return SingleOperator;
36348}());
36349var SingleSubscriber = /*@__PURE__*/ (function (_super) {
36350 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SingleSubscriber, _super);
36351 function SingleSubscriber(destination, predicate, source) {
36352 var _this = _super.call(this, destination) || this;
36353 _this.predicate = predicate;
36354 _this.source = source;
36355 _this.seenValue = false;
36356 _this.index = 0;
36357 return _this;
36358 }
36359 SingleSubscriber.prototype.applySingleValue = function (value) {
36360 if (this.seenValue) {
36361 this.destination.error('Sequence contains more than one element');
36362 }
36363 else {
36364 this.seenValue = true;
36365 this.singleValue = value;
36366 }
36367 };
36368 SingleSubscriber.prototype._next = function (value) {
36369 var index = this.index++;
36370 if (this.predicate) {
36371 this.tryNext(value, index);
36372 }
36373 else {
36374 this.applySingleValue(value);
36375 }
36376 };
36377 SingleSubscriber.prototype.tryNext = function (value, index) {
36378 try {
36379 if (this.predicate(value, index, this.source)) {
36380 this.applySingleValue(value);
36381 }
36382 }
36383 catch (err) {
36384 this.destination.error(err);
36385 }
36386 };
36387 SingleSubscriber.prototype._complete = function () {
36388 var destination = this.destination;
36389 if (this.index > 0) {
36390 destination.next(this.seenValue ? this.singleValue : undefined);
36391 destination.complete();
36392 }
36393 else {
36394 destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__["EmptyError"]);
36395 }
36396 };
36397 return SingleSubscriber;
36398}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36399//# sourceMappingURL=single.js.map
36400
36401
36402/***/ }),
36403/* 339 */
36404/***/ (function(module, __webpack_exports__, __webpack_require__) {
36405
36406"use strict";
36407__webpack_require__.r(__webpack_exports__);
36408/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return skip; });
36409/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36410/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36411/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36412
36413
36414function skip(count) {
36415 return function (source) { return source.lift(new SkipOperator(count)); };
36416}
36417var SkipOperator = /*@__PURE__*/ (function () {
36418 function SkipOperator(total) {
36419 this.total = total;
36420 }
36421 SkipOperator.prototype.call = function (subscriber, source) {
36422 return source.subscribe(new SkipSubscriber(subscriber, this.total));
36423 };
36424 return SkipOperator;
36425}());
36426var SkipSubscriber = /*@__PURE__*/ (function (_super) {
36427 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipSubscriber, _super);
36428 function SkipSubscriber(destination, total) {
36429 var _this = _super.call(this, destination) || this;
36430 _this.total = total;
36431 _this.count = 0;
36432 return _this;
36433 }
36434 SkipSubscriber.prototype._next = function (x) {
36435 if (++this.count > this.total) {
36436 this.destination.next(x);
36437 }
36438 };
36439 return SkipSubscriber;
36440}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36441//# sourceMappingURL=skip.js.map
36442
36443
36444/***/ }),
36445/* 340 */
36446/***/ (function(module, __webpack_exports__, __webpack_require__) {
36447
36448"use strict";
36449__webpack_require__.r(__webpack_exports__);
36450/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return skipLast; });
36451/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36452/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36453/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
36454/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError PURE_IMPORTS_END */
36455
36456
36457
36458function skipLast(count) {
36459 return function (source) { return source.lift(new SkipLastOperator(count)); };
36460}
36461var SkipLastOperator = /*@__PURE__*/ (function () {
36462 function SkipLastOperator(_skipCount) {
36463 this._skipCount = _skipCount;
36464 if (this._skipCount < 0) {
36465 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
36466 }
36467 }
36468 SkipLastOperator.prototype.call = function (subscriber, source) {
36469 if (this._skipCount === 0) {
36470 return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"](subscriber));
36471 }
36472 else {
36473 return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
36474 }
36475 };
36476 return SkipLastOperator;
36477}());
36478var SkipLastSubscriber = /*@__PURE__*/ (function (_super) {
36479 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipLastSubscriber, _super);
36480 function SkipLastSubscriber(destination, _skipCount) {
36481 var _this = _super.call(this, destination) || this;
36482 _this._skipCount = _skipCount;
36483 _this._count = 0;
36484 _this._ring = new Array(_skipCount);
36485 return _this;
36486 }
36487 SkipLastSubscriber.prototype._next = function (value) {
36488 var skipCount = this._skipCount;
36489 var count = this._count++;
36490 if (count < skipCount) {
36491 this._ring[count] = value;
36492 }
36493 else {
36494 var currentIndex = count % skipCount;
36495 var ring = this._ring;
36496 var oldValue = ring[currentIndex];
36497 ring[currentIndex] = value;
36498 this.destination.next(oldValue);
36499 }
36500 };
36501 return SkipLastSubscriber;
36502}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36503//# sourceMappingURL=skipLast.js.map
36504
36505
36506/***/ }),
36507/* 341 */
36508/***/ (function(module, __webpack_exports__, __webpack_require__) {
36509
36510"use strict";
36511__webpack_require__.r(__webpack_exports__);
36512/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return skipUntil; });
36513/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36514/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36515/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
36516/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
36517/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36518
36519
36520
36521
36522function skipUntil(notifier) {
36523 return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
36524}
36525var SkipUntilOperator = /*@__PURE__*/ (function () {
36526 function SkipUntilOperator(notifier) {
36527 this.notifier = notifier;
36528 }
36529 SkipUntilOperator.prototype.call = function (destination, source) {
36530 return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
36531 };
36532 return SkipUntilOperator;
36533}());
36534var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) {
36535 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipUntilSubscriber, _super);
36536 function SkipUntilSubscriber(destination, notifier) {
36537 var _this = _super.call(this, destination) || this;
36538 _this.hasValue = false;
36539 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](_this, undefined, undefined);
36540 _this.add(innerSubscriber);
36541 _this.innerSubscription = innerSubscriber;
36542 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(_this, notifier, undefined, undefined, innerSubscriber);
36543 if (innerSubscription !== innerSubscriber) {
36544 _this.add(innerSubscription);
36545 _this.innerSubscription = innerSubscription;
36546 }
36547 return _this;
36548 }
36549 SkipUntilSubscriber.prototype._next = function (value) {
36550 if (this.hasValue) {
36551 _super.prototype._next.call(this, value);
36552 }
36553 };
36554 SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36555 this.hasValue = true;
36556 if (this.innerSubscription) {
36557 this.innerSubscription.unsubscribe();
36558 }
36559 };
36560 SkipUntilSubscriber.prototype.notifyComplete = function () {
36561 };
36562 return SkipUntilSubscriber;
36563}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36564//# sourceMappingURL=skipUntil.js.map
36565
36566
36567/***/ }),
36568/* 342 */
36569/***/ (function(module, __webpack_exports__, __webpack_require__) {
36570
36571"use strict";
36572__webpack_require__.r(__webpack_exports__);
36573/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return skipWhile; });
36574/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36575/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36576/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36577
36578
36579function skipWhile(predicate) {
36580 return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
36581}
36582var SkipWhileOperator = /*@__PURE__*/ (function () {
36583 function SkipWhileOperator(predicate) {
36584 this.predicate = predicate;
36585 }
36586 SkipWhileOperator.prototype.call = function (subscriber, source) {
36587 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
36588 };
36589 return SkipWhileOperator;
36590}());
36591var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) {
36592 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipWhileSubscriber, _super);
36593 function SkipWhileSubscriber(destination, predicate) {
36594 var _this = _super.call(this, destination) || this;
36595 _this.predicate = predicate;
36596 _this.skipping = true;
36597 _this.index = 0;
36598 return _this;
36599 }
36600 SkipWhileSubscriber.prototype._next = function (value) {
36601 var destination = this.destination;
36602 if (this.skipping) {
36603 this.tryCallPredicate(value);
36604 }
36605 if (!this.skipping) {
36606 destination.next(value);
36607 }
36608 };
36609 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
36610 try {
36611 var result = this.predicate(value, this.index++);
36612 this.skipping = Boolean(result);
36613 }
36614 catch (err) {
36615 this.destination.error(err);
36616 }
36617 };
36618 return SkipWhileSubscriber;
36619}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36620//# sourceMappingURL=skipWhile.js.map
36621
36622
36623/***/ }),
36624/* 343 */
36625/***/ (function(module, __webpack_exports__, __webpack_require__) {
36626
36627"use strict";
36628__webpack_require__.r(__webpack_exports__);
36629/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return startWith; });
36630/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
36631/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
36632/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */
36633
36634
36635function startWith() {
36636 var array = [];
36637 for (var _i = 0; _i < arguments.length; _i++) {
36638 array[_i] = arguments[_i];
36639 }
36640 var scheduler = array[array.length - 1];
36641 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(scheduler)) {
36642 array.pop();
36643 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source, scheduler); };
36644 }
36645 else {
36646 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source); };
36647 }
36648}
36649//# sourceMappingURL=startWith.js.map
36650
36651
36652/***/ }),
36653/* 344 */
36654/***/ (function(module, __webpack_exports__, __webpack_require__) {
36655
36656"use strict";
36657__webpack_require__.r(__webpack_exports__);
36658/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; });
36659/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(345);
36660/** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */
36661
36662function subscribeOn(scheduler, delay) {
36663 if (delay === void 0) {
36664 delay = 0;
36665 }
36666 return function subscribeOnOperatorFunction(source) {
36667 return source.lift(new SubscribeOnOperator(scheduler, delay));
36668 };
36669}
36670var SubscribeOnOperator = /*@__PURE__*/ (function () {
36671 function SubscribeOnOperator(scheduler, delay) {
36672 this.scheduler = scheduler;
36673 this.delay = delay;
36674 }
36675 SubscribeOnOperator.prototype.call = function (subscriber, source) {
36676 return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__["SubscribeOnObservable"](source, this.delay, this.scheduler).subscribe(subscriber);
36677 };
36678 return SubscribeOnOperator;
36679}());
36680//# sourceMappingURL=subscribeOn.js.map
36681
36682
36683/***/ }),
36684/* 345 */
36685/***/ (function(module, __webpack_exports__, __webpack_require__) {
36686
36687"use strict";
36688__webpack_require__.r(__webpack_exports__);
36689/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubscribeOnObservable", function() { return SubscribeOnObservable; });
36690/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36691/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
36692/* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
36693/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(255);
36694/** PURE_IMPORTS_START tslib,_Observable,_scheduler_asap,_util_isNumeric PURE_IMPORTS_END */
36695
36696
36697
36698
36699var SubscribeOnObservable = /*@__PURE__*/ (function (_super) {
36700 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscribeOnObservable, _super);
36701 function SubscribeOnObservable(source, delayTime, scheduler) {
36702 if (delayTime === void 0) {
36703 delayTime = 0;
36704 }
36705 if (scheduler === void 0) {
36706 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36707 }
36708 var _this = _super.call(this) || this;
36709 _this.source = source;
36710 _this.delayTime = delayTime;
36711 _this.scheduler = scheduler;
36712 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(delayTime) || delayTime < 0) {
36713 _this.delayTime = 0;
36714 }
36715 if (!scheduler || typeof scheduler.schedule !== 'function') {
36716 _this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36717 }
36718 return _this;
36719 }
36720 SubscribeOnObservable.create = function (source, delay, scheduler) {
36721 if (delay === void 0) {
36722 delay = 0;
36723 }
36724 if (scheduler === void 0) {
36725 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36726 }
36727 return new SubscribeOnObservable(source, delay, scheduler);
36728 };
36729 SubscribeOnObservable.dispatch = function (arg) {
36730 var source = arg.source, subscriber = arg.subscriber;
36731 return this.add(source.subscribe(subscriber));
36732 };
36733 SubscribeOnObservable.prototype._subscribe = function (subscriber) {
36734 var delay = this.delayTime;
36735 var source = this.source;
36736 var scheduler = this.scheduler;
36737 return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
36738 source: source, subscriber: subscriber
36739 });
36740 };
36741 return SubscribeOnObservable;
36742}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
36743
36744//# sourceMappingURL=SubscribeOnObservable.js.map
36745
36746
36747/***/ }),
36748/* 346 */
36749/***/ (function(module, __webpack_exports__, __webpack_require__) {
36750
36751"use strict";
36752__webpack_require__.r(__webpack_exports__);
36753/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; });
36754/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(347);
36755/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
36756/** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */
36757
36758
36759function switchAll() {
36760 return Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"]);
36761}
36762//# sourceMappingURL=switchAll.js.map
36763
36764
36765/***/ }),
36766/* 347 */
36767/***/ (function(module, __webpack_exports__, __webpack_require__) {
36768
36769"use strict";
36770__webpack_require__.r(__webpack_exports__);
36771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return switchMap; });
36772/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36773/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36774/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
36775/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
36776/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
36777/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
36778/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
36779
36780
36781
36782
36783
36784
36785function switchMap(project, resultSelector) {
36786 if (typeof resultSelector === 'function') {
36787 return function (source) { return source.pipe(switchMap(function (a, i) { return Object(_observable_from__WEBPACK_IMPORTED_MODULE_5__["from"])(project(a, i)).pipe(Object(_map__WEBPACK_IMPORTED_MODULE_4__["map"])(function (b, ii) { return resultSelector(a, b, i, ii); })); })); };
36788 }
36789 return function (source) { return source.lift(new SwitchMapOperator(project)); };
36790}
36791var SwitchMapOperator = /*@__PURE__*/ (function () {
36792 function SwitchMapOperator(project) {
36793 this.project = project;
36794 }
36795 SwitchMapOperator.prototype.call = function (subscriber, source) {
36796 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
36797 };
36798 return SwitchMapOperator;
36799}());
36800var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {
36801 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchMapSubscriber, _super);
36802 function SwitchMapSubscriber(destination, project) {
36803 var _this = _super.call(this, destination) || this;
36804 _this.project = project;
36805 _this.index = 0;
36806 return _this;
36807 }
36808 SwitchMapSubscriber.prototype._next = function (value) {
36809 var result;
36810 var index = this.index++;
36811 try {
36812 result = this.project(value, index);
36813 }
36814 catch (error) {
36815 this.destination.error(error);
36816 return;
36817 }
36818 this._innerSub(result, value, index);
36819 };
36820 SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
36821 var innerSubscription = this.innerSubscription;
36822 if (innerSubscription) {
36823 innerSubscription.unsubscribe();
36824 }
36825 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
36826 var destination = this.destination;
36827 destination.add(innerSubscriber);
36828 this.innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
36829 if (this.innerSubscription !== innerSubscriber) {
36830 destination.add(this.innerSubscription);
36831 }
36832 };
36833 SwitchMapSubscriber.prototype._complete = function () {
36834 var innerSubscription = this.innerSubscription;
36835 if (!innerSubscription || innerSubscription.closed) {
36836 _super.prototype._complete.call(this);
36837 }
36838 this.unsubscribe();
36839 };
36840 SwitchMapSubscriber.prototype._unsubscribe = function () {
36841 this.innerSubscription = null;
36842 };
36843 SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
36844 var destination = this.destination;
36845 destination.remove(innerSub);
36846 this.innerSubscription = null;
36847 if (this.isStopped) {
36848 _super.prototype._complete.call(this);
36849 }
36850 };
36851 SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36852 this.destination.next(innerValue);
36853 };
36854 return SwitchMapSubscriber;
36855}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36856//# sourceMappingURL=switchMap.js.map
36857
36858
36859/***/ }),
36860/* 348 */
36861/***/ (function(module, __webpack_exports__, __webpack_require__) {
36862
36863"use strict";
36864__webpack_require__.r(__webpack_exports__);
36865/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; });
36866/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(347);
36867/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */
36868
36869function switchMapTo(innerObservable, resultSelector) {
36870 return resultSelector ? Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; }, resultSelector) : Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; });
36871}
36872//# sourceMappingURL=switchMapTo.js.map
36873
36874
36875/***/ }),
36876/* 349 */
36877/***/ (function(module, __webpack_exports__, __webpack_require__) {
36878
36879"use strict";
36880__webpack_require__.r(__webpack_exports__);
36881/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return takeUntil; });
36882/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36883/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36884/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
36885/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36886
36887
36888
36889function takeUntil(notifier) {
36890 return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
36891}
36892var TakeUntilOperator = /*@__PURE__*/ (function () {
36893 function TakeUntilOperator(notifier) {
36894 this.notifier = notifier;
36895 }
36896 TakeUntilOperator.prototype.call = function (subscriber, source) {
36897 var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
36898 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(takeUntilSubscriber, this.notifier);
36899 if (notifierSubscription && !takeUntilSubscriber.seenValue) {
36900 takeUntilSubscriber.add(notifierSubscription);
36901 return source.subscribe(takeUntilSubscriber);
36902 }
36903 return takeUntilSubscriber;
36904 };
36905 return TakeUntilOperator;
36906}());
36907var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {
36908 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeUntilSubscriber, _super);
36909 function TakeUntilSubscriber(destination) {
36910 var _this = _super.call(this, destination) || this;
36911 _this.seenValue = false;
36912 return _this;
36913 }
36914 TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36915 this.seenValue = true;
36916 this.complete();
36917 };
36918 TakeUntilSubscriber.prototype.notifyComplete = function () {
36919 };
36920 return TakeUntilSubscriber;
36921}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36922//# sourceMappingURL=takeUntil.js.map
36923
36924
36925/***/ }),
36926/* 350 */
36927/***/ (function(module, __webpack_exports__, __webpack_require__) {
36928
36929"use strict";
36930__webpack_require__.r(__webpack_exports__);
36931/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return takeWhile; });
36932/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36933/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36934/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36935
36936
36937function takeWhile(predicate, inclusive) {
36938 if (inclusive === void 0) {
36939 inclusive = false;
36940 }
36941 return function (source) {
36942 return source.lift(new TakeWhileOperator(predicate, inclusive));
36943 };
36944}
36945var TakeWhileOperator = /*@__PURE__*/ (function () {
36946 function TakeWhileOperator(predicate, inclusive) {
36947 this.predicate = predicate;
36948 this.inclusive = inclusive;
36949 }
36950 TakeWhileOperator.prototype.call = function (subscriber, source) {
36951 return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
36952 };
36953 return TakeWhileOperator;
36954}());
36955var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) {
36956 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeWhileSubscriber, _super);
36957 function TakeWhileSubscriber(destination, predicate, inclusive) {
36958 var _this = _super.call(this, destination) || this;
36959 _this.predicate = predicate;
36960 _this.inclusive = inclusive;
36961 _this.index = 0;
36962 return _this;
36963 }
36964 TakeWhileSubscriber.prototype._next = function (value) {
36965 var destination = this.destination;
36966 var result;
36967 try {
36968 result = this.predicate(value, this.index++);
36969 }
36970 catch (err) {
36971 destination.error(err);
36972 return;
36973 }
36974 this.nextOrComplete(value, result);
36975 };
36976 TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
36977 var destination = this.destination;
36978 if (Boolean(predicateResult)) {
36979 destination.next(value);
36980 }
36981 else {
36982 if (this.inclusive) {
36983 destination.next(value);
36984 }
36985 destination.complete();
36986 }
36987 };
36988 return TakeWhileSubscriber;
36989}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36990//# sourceMappingURL=takeWhile.js.map
36991
36992
36993/***/ }),
36994/* 351 */
36995/***/ (function(module, __webpack_exports__, __webpack_require__) {
36996
36997"use strict";
36998__webpack_require__.r(__webpack_exports__);
36999/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return tap; });
37000/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37001/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
37002/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(218);
37003/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(171);
37004/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */
37005
37006
37007
37008
37009function tap(nextOrObserver, error, complete) {
37010 return function tapOperatorFunction(source) {
37011 return source.lift(new DoOperator(nextOrObserver, error, complete));
37012 };
37013}
37014var DoOperator = /*@__PURE__*/ (function () {
37015 function DoOperator(nextOrObserver, error, complete) {
37016 this.nextOrObserver = nextOrObserver;
37017 this.error = error;
37018 this.complete = complete;
37019 }
37020 DoOperator.prototype.call = function (subscriber, source) {
37021 return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
37022 };
37023 return DoOperator;
37024}());
37025var TapSubscriber = /*@__PURE__*/ (function (_super) {
37026 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TapSubscriber, _super);
37027 function TapSubscriber(destination, observerOrNext, error, complete) {
37028 var _this = _super.call(this, destination) || this;
37029 _this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37030 _this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37031 _this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37032 _this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37033 _this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37034 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_3__["isFunction"])(observerOrNext)) {
37035 _this._context = _this;
37036 _this._tapNext = observerOrNext;
37037 }
37038 else if (observerOrNext) {
37039 _this._context = observerOrNext;
37040 _this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37041 _this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37042 _this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
37043 }
37044 return _this;
37045 }
37046 TapSubscriber.prototype._next = function (value) {
37047 try {
37048 this._tapNext.call(this._context, value);
37049 }
37050 catch (err) {
37051 this.destination.error(err);
37052 return;
37053 }
37054 this.destination.next(value);
37055 };
37056 TapSubscriber.prototype._error = function (err) {
37057 try {
37058 this._tapError.call(this._context, err);
37059 }
37060 catch (err) {
37061 this.destination.error(err);
37062 return;
37063 }
37064 this.destination.error(err);
37065 };
37066 TapSubscriber.prototype._complete = function () {
37067 try {
37068 this._tapComplete.call(this._context);
37069 }
37070 catch (err) {
37071 this.destination.error(err);
37072 return;
37073 }
37074 return this.destination.complete();
37075 };
37076 return TapSubscriber;
37077}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
37078//# sourceMappingURL=tap.js.map
37079
37080
37081/***/ }),
37082/* 352 */
37083/***/ (function(module, __webpack_exports__, __webpack_require__) {
37084
37085"use strict";
37086__webpack_require__.r(__webpack_exports__);
37087/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultThrottleConfig", function() { return defaultThrottleConfig; });
37088/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return throttle; });
37089/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37090/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
37091/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
37092/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37093
37094
37095
37096var defaultThrottleConfig = {
37097 leading: true,
37098 trailing: false
37099};
37100function throttle(durationSelector, config) {
37101 if (config === void 0) {
37102 config = defaultThrottleConfig;
37103 }
37104 return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
37105}
37106var ThrottleOperator = /*@__PURE__*/ (function () {
37107 function ThrottleOperator(durationSelector, leading, trailing) {
37108 this.durationSelector = durationSelector;
37109 this.leading = leading;
37110 this.trailing = trailing;
37111 }
37112 ThrottleOperator.prototype.call = function (subscriber, source) {
37113 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
37114 };
37115 return ThrottleOperator;
37116}());
37117var ThrottleSubscriber = /*@__PURE__*/ (function (_super) {
37118 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleSubscriber, _super);
37119 function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
37120 var _this = _super.call(this, destination) || this;
37121 _this.destination = destination;
37122 _this.durationSelector = durationSelector;
37123 _this._leading = _leading;
37124 _this._trailing = _trailing;
37125 _this._hasValue = false;
37126 return _this;
37127 }
37128 ThrottleSubscriber.prototype._next = function (value) {
37129 this._hasValue = true;
37130 this._sendValue = value;
37131 if (!this._throttled) {
37132 if (this._leading) {
37133 this.send();
37134 }
37135 else {
37136 this.throttle(value);
37137 }
37138 }
37139 };
37140 ThrottleSubscriber.prototype.send = function () {
37141 var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
37142 if (_hasValue) {
37143 this.destination.next(_sendValue);
37144 this.throttle(_sendValue);
37145 }
37146 this._hasValue = false;
37147 this._sendValue = null;
37148 };
37149 ThrottleSubscriber.prototype.throttle = function (value) {
37150 var duration = this.tryDurationSelector(value);
37151 if (!!duration) {
37152 this.add(this._throttled = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration));
37153 }
37154 };
37155 ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
37156 try {
37157 return this.durationSelector(value);
37158 }
37159 catch (err) {
37160 this.destination.error(err);
37161 return null;
37162 }
37163 };
37164 ThrottleSubscriber.prototype.throttlingDone = function () {
37165 var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
37166 if (_throttled) {
37167 _throttled.unsubscribe();
37168 }
37169 this._throttled = null;
37170 if (_trailing) {
37171 this.send();
37172 }
37173 };
37174 ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37175 this.throttlingDone();
37176 };
37177 ThrottleSubscriber.prototype.notifyComplete = function () {
37178 this.throttlingDone();
37179 };
37180 return ThrottleSubscriber;
37181}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
37182//# sourceMappingURL=throttle.js.map
37183
37184
37185/***/ }),
37186/* 353 */
37187/***/ (function(module, __webpack_exports__, __webpack_require__) {
37188
37189"use strict";
37190__webpack_require__.r(__webpack_exports__);
37191/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return throttleTime; });
37192/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37193/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
37194/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
37195/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(352);
37196/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
37197
37198
37199
37200
37201function throttleTime(duration, scheduler, config) {
37202 if (scheduler === void 0) {
37203 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
37204 }
37205 if (config === void 0) {
37206 config = _throttle__WEBPACK_IMPORTED_MODULE_3__["defaultThrottleConfig"];
37207 }
37208 return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
37209}
37210var ThrottleTimeOperator = /*@__PURE__*/ (function () {
37211 function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
37212 this.duration = duration;
37213 this.scheduler = scheduler;
37214 this.leading = leading;
37215 this.trailing = trailing;
37216 }
37217 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
37218 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
37219 };
37220 return ThrottleTimeOperator;
37221}());
37222var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
37223 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleTimeSubscriber, _super);
37224 function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
37225 var _this = _super.call(this, destination) || this;
37226 _this.duration = duration;
37227 _this.scheduler = scheduler;
37228 _this.leading = leading;
37229 _this.trailing = trailing;
37230 _this._hasTrailingValue = false;
37231 _this._trailingValue = null;
37232 return _this;
37233 }
37234 ThrottleTimeSubscriber.prototype._next = function (value) {
37235 if (this.throttled) {
37236 if (this.trailing) {
37237 this._trailingValue = value;
37238 this._hasTrailingValue = true;
37239 }
37240 }
37241 else {
37242 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
37243 if (this.leading) {
37244 this.destination.next(value);
37245 }
37246 else if (this.trailing) {
37247 this._trailingValue = value;
37248 this._hasTrailingValue = true;
37249 }
37250 }
37251 };
37252 ThrottleTimeSubscriber.prototype._complete = function () {
37253 if (this._hasTrailingValue) {
37254 this.destination.next(this._trailingValue);
37255 this.destination.complete();
37256 }
37257 else {
37258 this.destination.complete();
37259 }
37260 };
37261 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
37262 var throttled = this.throttled;
37263 if (throttled) {
37264 if (this.trailing && this._hasTrailingValue) {
37265 this.destination.next(this._trailingValue);
37266 this._trailingValue = null;
37267 this._hasTrailingValue = false;
37268 }
37269 throttled.unsubscribe();
37270 this.remove(throttled);
37271 this.throttled = null;
37272 }
37273 };
37274 return ThrottleTimeSubscriber;
37275}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
37276function dispatchNext(arg) {
37277 var subscriber = arg.subscriber;
37278 subscriber.clearThrottle();
37279}
37280//# sourceMappingURL=throttleTime.js.map
37281
37282
37283/***/ }),
37284/* 354 */
37285/***/ (function(module, __webpack_exports__, __webpack_require__) {
37286
37287"use strict";
37288__webpack_require__.r(__webpack_exports__);
37289/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; });
37290/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; });
37291/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37292/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
37293/* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248);
37294/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
37295/** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */
37296
37297
37298
37299
37300function timeInterval(scheduler) {
37301 if (scheduler === void 0) {
37302 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37303 }
37304 return function (source) {
37305 return Object(_observable_defer__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
37306 return source.pipe(Object(_scan__WEBPACK_IMPORTED_MODULE_1__["scan"])(function (_a, value) {
37307 var current = _a.current;
37308 return ({ value: value, current: scheduler.now(), last: current });
37309 }, { current: scheduler.now(), value: undefined, last: undefined }), Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) {
37310 var current = _a.current, last = _a.last, value = _a.value;
37311 return new TimeInterval(value, current - last);
37312 }));
37313 });
37314 };
37315}
37316var TimeInterval = /*@__PURE__*/ (function () {
37317 function TimeInterval(value, interval) {
37318 this.value = value;
37319 this.interval = interval;
37320 }
37321 return TimeInterval;
37322}());
37323
37324//# sourceMappingURL=timeInterval.js.map
37325
37326
37327/***/ }),
37328/* 355 */
37329/***/ (function(module, __webpack_exports__, __webpack_require__) {
37330
37331"use strict";
37332__webpack_require__.r(__webpack_exports__);
37333/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; });
37334/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37335/* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
37336/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(356);
37337/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(207);
37338/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */
37339
37340
37341
37342
37343function timeout(due, scheduler) {
37344 if (scheduler === void 0) {
37345 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37346 }
37347 return Object(_timeoutWith__WEBPACK_IMPORTED_MODULE_2__["timeoutWith"])(due, Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_3__["throwError"])(new _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__["TimeoutError"]()), scheduler);
37348}
37349//# sourceMappingURL=timeout.js.map
37350
37351
37352/***/ }),
37353/* 356 */
37354/***/ (function(module, __webpack_exports__, __webpack_require__) {
37355
37356"use strict";
37357__webpack_require__.r(__webpack_exports__);
37358/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; });
37359/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37360/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
37361/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(288);
37362/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
37363/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
37364/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37365
37366
37367
37368
37369
37370function timeoutWith(due, withObservable, scheduler) {
37371 if (scheduler === void 0) {
37372 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
37373 }
37374 return function (source) {
37375 var absoluteTimeout = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(due);
37376 var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
37377 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
37378 };
37379}
37380var TimeoutWithOperator = /*@__PURE__*/ (function () {
37381 function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
37382 this.waitFor = waitFor;
37383 this.absoluteTimeout = absoluteTimeout;
37384 this.withObservable = withObservable;
37385 this.scheduler = scheduler;
37386 }
37387 TimeoutWithOperator.prototype.call = function (subscriber, source) {
37388 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
37389 };
37390 return TimeoutWithOperator;
37391}());
37392var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) {
37393 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TimeoutWithSubscriber, _super);
37394 function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
37395 var _this = _super.call(this, destination) || this;
37396 _this.absoluteTimeout = absoluteTimeout;
37397 _this.waitFor = waitFor;
37398 _this.withObservable = withObservable;
37399 _this.scheduler = scheduler;
37400 _this.action = null;
37401 _this.scheduleTimeout();
37402 return _this;
37403 }
37404 TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
37405 var withObservable = subscriber.withObservable;
37406 subscriber._unsubscribeAndRecycle();
37407 subscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(subscriber, withObservable));
37408 };
37409 TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
37410 var action = this.action;
37411 if (action) {
37412 this.action = action.schedule(this, this.waitFor);
37413 }
37414 else {
37415 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
37416 }
37417 };
37418 TimeoutWithSubscriber.prototype._next = function (value) {
37419 if (!this.absoluteTimeout) {
37420 this.scheduleTimeout();
37421 }
37422 _super.prototype._next.call(this, value);
37423 };
37424 TimeoutWithSubscriber.prototype._unsubscribe = function () {
37425 this.action = null;
37426 this.scheduler = null;
37427 this.withObservable = null;
37428 };
37429 return TimeoutWithSubscriber;
37430}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
37431//# sourceMappingURL=timeoutWith.js.map
37432
37433
37434/***/ }),
37435/* 357 */
37436/***/ (function(module, __webpack_exports__, __webpack_require__) {
37437
37438"use strict";
37439__webpack_require__.r(__webpack_exports__);
37440/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; });
37441/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timestamp", function() { return Timestamp; });
37442/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37443/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(224);
37444/** PURE_IMPORTS_START _scheduler_async,_map PURE_IMPORTS_END */
37445
37446
37447function timestamp(scheduler) {
37448 if (scheduler === void 0) {
37449 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37450 }
37451 return Object(_map__WEBPACK_IMPORTED_MODULE_1__["map"])(function (value) { return new Timestamp(value, scheduler.now()); });
37452}
37453var Timestamp = /*@__PURE__*/ (function () {
37454 function Timestamp(value, timestamp) {
37455 this.value = value;
37456 this.timestamp = timestamp;
37457 }
37458 return Timestamp;
37459}());
37460
37461//# sourceMappingURL=timestamp.js.map
37462
37463
37464/***/ }),
37465/* 358 */
37466/***/ (function(module, __webpack_exports__, __webpack_require__) {
37467
37468"use strict";
37469__webpack_require__.r(__webpack_exports__);
37470/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; });
37471/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
37472/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
37473
37474function toArrayReducer(arr, item, index) {
37475 if (index === 0) {
37476 return [item];
37477 }
37478 arr.push(item);
37479 return arr;
37480}
37481function toArray() {
37482 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(toArrayReducer, []);
37483}
37484//# sourceMappingURL=toArray.js.map
37485
37486
37487/***/ }),
37488/* 359 */
37489/***/ (function(module, __webpack_exports__, __webpack_require__) {
37490
37491"use strict";
37492__webpack_require__.r(__webpack_exports__);
37493/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return window; });
37494/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37495/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37496/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
37497/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
37498/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37499
37500
37501
37502
37503function window(windowBoundaries) {
37504 return function windowOperatorFunction(source) {
37505 return source.lift(new WindowOperator(windowBoundaries));
37506 };
37507}
37508var WindowOperator = /*@__PURE__*/ (function () {
37509 function WindowOperator(windowBoundaries) {
37510 this.windowBoundaries = windowBoundaries;
37511 }
37512 WindowOperator.prototype.call = function (subscriber, source) {
37513 var windowSubscriber = new WindowSubscriber(subscriber);
37514 var sourceSubscription = source.subscribe(windowSubscriber);
37515 if (!sourceSubscription.closed) {
37516 windowSubscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(windowSubscriber, this.windowBoundaries));
37517 }
37518 return sourceSubscription;
37519 };
37520 return WindowOperator;
37521}());
37522var WindowSubscriber = /*@__PURE__*/ (function (_super) {
37523 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
37524 function WindowSubscriber(destination) {
37525 var _this = _super.call(this, destination) || this;
37526 _this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37527 destination.next(_this.window);
37528 return _this;
37529 }
37530 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37531 this.openWindow();
37532 };
37533 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
37534 this._error(error);
37535 };
37536 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
37537 this._complete();
37538 };
37539 WindowSubscriber.prototype._next = function (value) {
37540 this.window.next(value);
37541 };
37542 WindowSubscriber.prototype._error = function (err) {
37543 this.window.error(err);
37544 this.destination.error(err);
37545 };
37546 WindowSubscriber.prototype._complete = function () {
37547 this.window.complete();
37548 this.destination.complete();
37549 };
37550 WindowSubscriber.prototype._unsubscribe = function () {
37551 this.window = null;
37552 };
37553 WindowSubscriber.prototype.openWindow = function () {
37554 var prevWindow = this.window;
37555 if (prevWindow) {
37556 prevWindow.complete();
37557 }
37558 var destination = this.destination;
37559 var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37560 destination.next(newWindow);
37561 };
37562 return WindowSubscriber;
37563}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
37564//# sourceMappingURL=window.js.map
37565
37566
37567/***/ }),
37568/* 360 */
37569/***/ (function(module, __webpack_exports__, __webpack_require__) {
37570
37571"use strict";
37572__webpack_require__.r(__webpack_exports__);
37573/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return windowCount; });
37574/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37575/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
37576/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
37577/** PURE_IMPORTS_START tslib,_Subscriber,_Subject PURE_IMPORTS_END */
37578
37579
37580
37581function windowCount(windowSize, startWindowEvery) {
37582 if (startWindowEvery === void 0) {
37583 startWindowEvery = 0;
37584 }
37585 return function windowCountOperatorFunction(source) {
37586 return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
37587 };
37588}
37589var WindowCountOperator = /*@__PURE__*/ (function () {
37590 function WindowCountOperator(windowSize, startWindowEvery) {
37591 this.windowSize = windowSize;
37592 this.startWindowEvery = startWindowEvery;
37593 }
37594 WindowCountOperator.prototype.call = function (subscriber, source) {
37595 return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
37596 };
37597 return WindowCountOperator;
37598}());
37599var WindowCountSubscriber = /*@__PURE__*/ (function (_super) {
37600 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowCountSubscriber, _super);
37601 function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
37602 var _this = _super.call(this, destination) || this;
37603 _this.destination = destination;
37604 _this.windowSize = windowSize;
37605 _this.startWindowEvery = startWindowEvery;
37606 _this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]()];
37607 _this.count = 0;
37608 destination.next(_this.windows[0]);
37609 return _this;
37610 }
37611 WindowCountSubscriber.prototype._next = function (value) {
37612 var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
37613 var destination = this.destination;
37614 var windowSize = this.windowSize;
37615 var windows = this.windows;
37616 var len = windows.length;
37617 for (var i = 0; i < len && !this.closed; i++) {
37618 windows[i].next(value);
37619 }
37620 var c = this.count - windowSize + 1;
37621 if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
37622 windows.shift().complete();
37623 }
37624 if (++this.count % startWindowEvery === 0 && !this.closed) {
37625 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
37626 windows.push(window_1);
37627 destination.next(window_1);
37628 }
37629 };
37630 WindowCountSubscriber.prototype._error = function (err) {
37631 var windows = this.windows;
37632 if (windows) {
37633 while (windows.length > 0 && !this.closed) {
37634 windows.shift().error(err);
37635 }
37636 }
37637 this.destination.error(err);
37638 };
37639 WindowCountSubscriber.prototype._complete = function () {
37640 var windows = this.windows;
37641 if (windows) {
37642 while (windows.length > 0 && !this.closed) {
37643 windows.shift().complete();
37644 }
37645 }
37646 this.destination.complete();
37647 };
37648 WindowCountSubscriber.prototype._unsubscribe = function () {
37649 this.count = 0;
37650 this.windows = null;
37651 };
37652 return WindowCountSubscriber;
37653}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
37654//# sourceMappingURL=windowCount.js.map
37655
37656
37657/***/ }),
37658/* 361 */
37659/***/ (function(module, __webpack_exports__, __webpack_require__) {
37660
37661"use strict";
37662__webpack_require__.r(__webpack_exports__);
37663/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return windowTime; });
37664/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37665/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37666/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
37667/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
37668/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(255);
37669/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(203);
37670/** PURE_IMPORTS_START tslib,_Subject,_scheduler_async,_Subscriber,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
37671
37672
37673
37674
37675
37676
37677function windowTime(windowTimeSpan) {
37678 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
37679 var windowCreationInterval = null;
37680 var maxWindowSize = Number.POSITIVE_INFINITY;
37681 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[3])) {
37682 scheduler = arguments[3];
37683 }
37684 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[2])) {
37685 scheduler = arguments[2];
37686 }
37687 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[2])) {
37688 maxWindowSize = arguments[2];
37689 }
37690 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[1])) {
37691 scheduler = arguments[1];
37692 }
37693 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[1])) {
37694 windowCreationInterval = arguments[1];
37695 }
37696 return function windowTimeOperatorFunction(source) {
37697 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
37698 };
37699}
37700var WindowTimeOperator = /*@__PURE__*/ (function () {
37701 function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37702 this.windowTimeSpan = windowTimeSpan;
37703 this.windowCreationInterval = windowCreationInterval;
37704 this.maxWindowSize = maxWindowSize;
37705 this.scheduler = scheduler;
37706 }
37707 WindowTimeOperator.prototype.call = function (subscriber, source) {
37708 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
37709 };
37710 return WindowTimeOperator;
37711}());
37712var CountedSubject = /*@__PURE__*/ (function (_super) {
37713 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountedSubject, _super);
37714 function CountedSubject() {
37715 var _this = _super !== null && _super.apply(this, arguments) || this;
37716 _this._numberOfNextedValues = 0;
37717 return _this;
37718 }
37719 CountedSubject.prototype.next = function (value) {
37720 this._numberOfNextedValues++;
37721 _super.prototype.next.call(this, value);
37722 };
37723 Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
37724 get: function () {
37725 return this._numberOfNextedValues;
37726 },
37727 enumerable: true,
37728 configurable: true
37729 });
37730 return CountedSubject;
37731}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
37732var WindowTimeSubscriber = /*@__PURE__*/ (function (_super) {
37733 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowTimeSubscriber, _super);
37734 function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37735 var _this = _super.call(this, destination) || this;
37736 _this.destination = destination;
37737 _this.windowTimeSpan = windowTimeSpan;
37738 _this.windowCreationInterval = windowCreationInterval;
37739 _this.maxWindowSize = maxWindowSize;
37740 _this.scheduler = scheduler;
37741 _this.windows = [];
37742 var window = _this.openWindow();
37743 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
37744 var closeState = { subscriber: _this, window: window, context: null };
37745 var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
37746 _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
37747 _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
37748 }
37749 else {
37750 var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
37751 _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
37752 }
37753 return _this;
37754 }
37755 WindowTimeSubscriber.prototype._next = function (value) {
37756 var windows = this.windows;
37757 var len = windows.length;
37758 for (var i = 0; i < len; i++) {
37759 var window_1 = windows[i];
37760 if (!window_1.closed) {
37761 window_1.next(value);
37762 if (window_1.numberOfNextedValues >= this.maxWindowSize) {
37763 this.closeWindow(window_1);
37764 }
37765 }
37766 }
37767 };
37768 WindowTimeSubscriber.prototype._error = function (err) {
37769 var windows = this.windows;
37770 while (windows.length > 0) {
37771 windows.shift().error(err);
37772 }
37773 this.destination.error(err);
37774 };
37775 WindowTimeSubscriber.prototype._complete = function () {
37776 var windows = this.windows;
37777 while (windows.length > 0) {
37778 var window_2 = windows.shift();
37779 if (!window_2.closed) {
37780 window_2.complete();
37781 }
37782 }
37783 this.destination.complete();
37784 };
37785 WindowTimeSubscriber.prototype.openWindow = function () {
37786 var window = new CountedSubject();
37787 this.windows.push(window);
37788 var destination = this.destination;
37789 destination.next(window);
37790 return window;
37791 };
37792 WindowTimeSubscriber.prototype.closeWindow = function (window) {
37793 window.complete();
37794 var windows = this.windows;
37795 windows.splice(windows.indexOf(window), 1);
37796 };
37797 return WindowTimeSubscriber;
37798}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
37799function dispatchWindowTimeSpanOnly(state) {
37800 var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
37801 if (window) {
37802 subscriber.closeWindow(window);
37803 }
37804 state.window = subscriber.openWindow();
37805 this.schedule(state, windowTimeSpan);
37806}
37807function dispatchWindowCreation(state) {
37808 var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
37809 var window = subscriber.openWindow();
37810 var action = this;
37811 var context = { action: action, subscription: null };
37812 var timeSpanState = { subscriber: subscriber, window: window, context: context };
37813 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
37814 action.add(context.subscription);
37815 action.schedule(state, windowCreationInterval);
37816}
37817function dispatchWindowClose(state) {
37818 var subscriber = state.subscriber, window = state.window, context = state.context;
37819 if (context && context.action && context.subscription) {
37820 context.action.remove(context.subscription);
37821 }
37822 subscriber.closeWindow(window);
37823}
37824//# sourceMappingURL=windowTime.js.map
37825
37826
37827/***/ }),
37828/* 362 */
37829/***/ (function(module, __webpack_exports__, __webpack_require__) {
37830
37831"use strict";
37832__webpack_require__.r(__webpack_exports__);
37833/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return windowToggle; });
37834/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37835/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37836/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
37837/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
37838/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
37839/** PURE_IMPORTS_START tslib,_Subject,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37840
37841
37842
37843
37844
37845function windowToggle(openings, closingSelector) {
37846 return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
37847}
37848var WindowToggleOperator = /*@__PURE__*/ (function () {
37849 function WindowToggleOperator(openings, closingSelector) {
37850 this.openings = openings;
37851 this.closingSelector = closingSelector;
37852 }
37853 WindowToggleOperator.prototype.call = function (subscriber, source) {
37854 return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
37855 };
37856 return WindowToggleOperator;
37857}());
37858var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) {
37859 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowToggleSubscriber, _super);
37860 function WindowToggleSubscriber(destination, openings, closingSelector) {
37861 var _this = _super.call(this, destination) || this;
37862 _this.openings = openings;
37863 _this.closingSelector = closingSelector;
37864 _this.contexts = [];
37865 _this.add(_this.openSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(_this, openings, openings));
37866 return _this;
37867 }
37868 WindowToggleSubscriber.prototype._next = function (value) {
37869 var contexts = this.contexts;
37870 if (contexts) {
37871 var len = contexts.length;
37872 for (var i = 0; i < len; i++) {
37873 contexts[i].window.next(value);
37874 }
37875 }
37876 };
37877 WindowToggleSubscriber.prototype._error = function (err) {
37878 var contexts = this.contexts;
37879 this.contexts = null;
37880 if (contexts) {
37881 var len = contexts.length;
37882 var index = -1;
37883 while (++index < len) {
37884 var context_1 = contexts[index];
37885 context_1.window.error(err);
37886 context_1.subscription.unsubscribe();
37887 }
37888 }
37889 _super.prototype._error.call(this, err);
37890 };
37891 WindowToggleSubscriber.prototype._complete = function () {
37892 var contexts = this.contexts;
37893 this.contexts = null;
37894 if (contexts) {
37895 var len = contexts.length;
37896 var index = -1;
37897 while (++index < len) {
37898 var context_2 = contexts[index];
37899 context_2.window.complete();
37900 context_2.subscription.unsubscribe();
37901 }
37902 }
37903 _super.prototype._complete.call(this);
37904 };
37905 WindowToggleSubscriber.prototype._unsubscribe = function () {
37906 var contexts = this.contexts;
37907 this.contexts = null;
37908 if (contexts) {
37909 var len = contexts.length;
37910 var index = -1;
37911 while (++index < len) {
37912 var context_3 = contexts[index];
37913 context_3.window.unsubscribe();
37914 context_3.subscription.unsubscribe();
37915 }
37916 }
37917 };
37918 WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37919 if (outerValue === this.openings) {
37920 var closingNotifier = void 0;
37921 try {
37922 var closingSelector = this.closingSelector;
37923 closingNotifier = closingSelector(innerValue);
37924 }
37925 catch (e) {
37926 return this.error(e);
37927 }
37928 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37929 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
37930 var context_4 = { window: window_1, subscription: subscription };
37931 this.contexts.push(context_4);
37932 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, closingNotifier, context_4);
37933 if (innerSubscription.closed) {
37934 this.closeWindow(this.contexts.length - 1);
37935 }
37936 else {
37937 innerSubscription.context = context_4;
37938 subscription.add(innerSubscription);
37939 }
37940 this.destination.next(window_1);
37941 }
37942 else {
37943 this.closeWindow(this.contexts.indexOf(outerValue));
37944 }
37945 };
37946 WindowToggleSubscriber.prototype.notifyError = function (err) {
37947 this.error(err);
37948 };
37949 WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
37950 if (inner !== this.openSubscription) {
37951 this.closeWindow(this.contexts.indexOf(inner.context));
37952 }
37953 };
37954 WindowToggleSubscriber.prototype.closeWindow = function (index) {
37955 if (index === -1) {
37956 return;
37957 }
37958 var contexts = this.contexts;
37959 var context = contexts[index];
37960 var window = context.window, subscription = context.subscription;
37961 contexts.splice(index, 1);
37962 window.complete();
37963 subscription.unsubscribe();
37964 };
37965 return WindowToggleSubscriber;
37966}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
37967//# sourceMappingURL=windowToggle.js.map
37968
37969
37970/***/ }),
37971/* 363 */
37972/***/ (function(module, __webpack_exports__, __webpack_require__) {
37973
37974"use strict";
37975__webpack_require__.r(__webpack_exports__);
37976/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return windowWhen; });
37977/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37978/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37979/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
37980/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
37981/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37982
37983
37984
37985
37986function windowWhen(closingSelector) {
37987 return function windowWhenOperatorFunction(source) {
37988 return source.lift(new WindowOperator(closingSelector));
37989 };
37990}
37991var WindowOperator = /*@__PURE__*/ (function () {
37992 function WindowOperator(closingSelector) {
37993 this.closingSelector = closingSelector;
37994 }
37995 WindowOperator.prototype.call = function (subscriber, source) {
37996 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
37997 };
37998 return WindowOperator;
37999}());
38000var WindowSubscriber = /*@__PURE__*/ (function (_super) {
38001 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
38002 function WindowSubscriber(destination, closingSelector) {
38003 var _this = _super.call(this, destination) || this;
38004 _this.destination = destination;
38005 _this.closingSelector = closingSelector;
38006 _this.openWindow();
38007 return _this;
38008 }
38009 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38010 this.openWindow(innerSub);
38011 };
38012 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
38013 this._error(error);
38014 };
38015 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
38016 this.openWindow(innerSub);
38017 };
38018 WindowSubscriber.prototype._next = function (value) {
38019 this.window.next(value);
38020 };
38021 WindowSubscriber.prototype._error = function (err) {
38022 this.window.error(err);
38023 this.destination.error(err);
38024 this.unsubscribeClosingNotification();
38025 };
38026 WindowSubscriber.prototype._complete = function () {
38027 this.window.complete();
38028 this.destination.complete();
38029 this.unsubscribeClosingNotification();
38030 };
38031 WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
38032 if (this.closingNotification) {
38033 this.closingNotification.unsubscribe();
38034 }
38035 };
38036 WindowSubscriber.prototype.openWindow = function (innerSub) {
38037 if (innerSub === void 0) {
38038 innerSub = null;
38039 }
38040 if (innerSub) {
38041 this.remove(innerSub);
38042 innerSub.unsubscribe();
38043 }
38044 var prevWindow = this.window;
38045 if (prevWindow) {
38046 prevWindow.complete();
38047 }
38048 var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
38049 this.destination.next(window);
38050 var closingNotifier;
38051 try {
38052 var closingSelector = this.closingSelector;
38053 closingNotifier = closingSelector();
38054 }
38055 catch (e) {
38056 this.destination.error(e);
38057 this.window.error(e);
38058 return;
38059 }
38060 this.add(this.closingNotification = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
38061 };
38062 return WindowSubscriber;
38063}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
38064//# sourceMappingURL=windowWhen.js.map
38065
38066
38067/***/ }),
38068/* 364 */
38069/***/ (function(module, __webpack_exports__, __webpack_require__) {
38070
38071"use strict";
38072__webpack_require__.r(__webpack_exports__);
38073/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return withLatestFrom; });
38074/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
38075/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
38076/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
38077/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
38078
38079
38080
38081function withLatestFrom() {
38082 var args = [];
38083 for (var _i = 0; _i < arguments.length; _i++) {
38084 args[_i] = arguments[_i];
38085 }
38086 return function (source) {
38087 var project;
38088 if (typeof args[args.length - 1] === 'function') {
38089 project = args.pop();
38090 }
38091 var observables = args;
38092 return source.lift(new WithLatestFromOperator(observables, project));
38093 };
38094}
38095var WithLatestFromOperator = /*@__PURE__*/ (function () {
38096 function WithLatestFromOperator(observables, project) {
38097 this.observables = observables;
38098 this.project = project;
38099 }
38100 WithLatestFromOperator.prototype.call = function (subscriber, source) {
38101 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
38102 };
38103 return WithLatestFromOperator;
38104}());
38105var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {
38106 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WithLatestFromSubscriber, _super);
38107 function WithLatestFromSubscriber(destination, observables, project) {
38108 var _this = _super.call(this, destination) || this;
38109 _this.observables = observables;
38110 _this.project = project;
38111 _this.toRespond = [];
38112 var len = observables.length;
38113 _this.values = new Array(len);
38114 for (var i = 0; i < len; i++) {
38115 _this.toRespond.push(i);
38116 }
38117 for (var i = 0; i < len; i++) {
38118 var observable = observables[i];
38119 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, observable, observable, i));
38120 }
38121 return _this;
38122 }
38123 WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38124 this.values[outerIndex] = innerValue;
38125 var toRespond = this.toRespond;
38126 if (toRespond.length > 0) {
38127 var found = toRespond.indexOf(outerIndex);
38128 if (found !== -1) {
38129 toRespond.splice(found, 1);
38130 }
38131 }
38132 };
38133 WithLatestFromSubscriber.prototype.notifyComplete = function () {
38134 };
38135 WithLatestFromSubscriber.prototype._next = function (value) {
38136 if (this.toRespond.length === 0) {
38137 var args = [value].concat(this.values);
38138 if (this.project) {
38139 this._tryProject(args);
38140 }
38141 else {
38142 this.destination.next(args);
38143 }
38144 }
38145 };
38146 WithLatestFromSubscriber.prototype._tryProject = function (args) {
38147 var result;
38148 try {
38149 result = this.project.apply(this, args);
38150 }
38151 catch (err) {
38152 this.destination.error(err);
38153 return;
38154 }
38155 this.destination.next(result);
38156 };
38157 return WithLatestFromSubscriber;
38158}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
38159//# sourceMappingURL=withLatestFrom.js.map
38160
38161
38162/***/ }),
38163/* 365 */
38164/***/ (function(module, __webpack_exports__, __webpack_require__) {
38165
38166"use strict";
38167__webpack_require__.r(__webpack_exports__);
38168/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
38169/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(267);
38170/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38171
38172function zip() {
38173 var observables = [];
38174 for (var _i = 0; _i < arguments.length; _i++) {
38175 observables[_i] = arguments[_i];
38176 }
38177 return function zipOperatorFunction(source) {
38178 return source.lift.call(_observable_zip__WEBPACK_IMPORTED_MODULE_0__["zip"].apply(void 0, [source].concat(observables)));
38179 };
38180}
38181//# sourceMappingURL=zip.js.map
38182
38183
38184/***/ }),
38185/* 366 */
38186/***/ (function(module, __webpack_exports__, __webpack_require__) {
38187
38188"use strict";
38189__webpack_require__.r(__webpack_exports__);
38190/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return zipAll; });
38191/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(267);
38192/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38193
38194function zipAll(project) {
38195 return function (source) { return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__["ZipOperator"](project)); };
38196}
38197//# sourceMappingURL=zipAll.js.map
38198
38199
38200/***/ }),
38201/* 367 */
38202/***/ (function(module, exports, __webpack_require__) {
38203
38204"use strict";
38205
38206var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
38207 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38208 return new (P || (P = Promise))(function (resolve, reject) {
38209 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
38210 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
38211 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38212 step((generator = generator.apply(thisArg, _arguments || [])).next());
38213 });
38214};
38215var __generator = (this && this.__generator) || function (thisArg, body) {
38216 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
38217 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
38218 function verb(n) { return function (v) { return step([n, v]); }; }
38219 function step(op) {
38220 if (f) throw new TypeError("Generator is already executing.");
38221 while (_) try {
38222 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;
38223 if (y = 0, t) op = [op[0] & 2, t.value];
38224 switch (op[0]) {
38225 case 0: case 1: t = op; break;
38226 case 4: _.label++; return { value: op[1], done: false };
38227 case 5: _.label++; y = op[1]; op = [0]; continue;
38228 case 7: op = _.ops.pop(); _.trys.pop(); continue;
38229 default:
38230 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38231 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38232 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
38233 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
38234 if (t[2]) _.ops.pop();
38235 _.trys.pop(); continue;
38236 }
38237 op = body.call(thisArg, _);
38238 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38239 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
38240 }
38241};
38242Object.defineProperty(exports, "__esModule", { value: true });
38243var vscode_languageserver_1 = __webpack_require__(2);
38244var patterns_1 = __webpack_require__(54);
38245var connection_1 = __webpack_require__(138);
38246var fixNegativeNum = function (num) {
38247 if (num < 0) {
38248 return 0;
38249 }
38250 return num;
38251};
38252function handleDiagnostic(textDoc, error) {
38253 return __awaiter(this, void 0, void 0, function () {
38254 var m, lines, line, col;
38255 return __generator(this, function (_a) {
38256 m = (error || "").match(patterns_1.errorLinePattern);
38257 if (m) {
38258 lines = textDoc.lineCount;
38259 line = fixNegativeNum(parseFloat(m[2]) - 1);
38260 col = fixNegativeNum(parseFloat(m[3]) - 1);
38261 return [2 /*return*/, connection_1.connection.sendDiagnostics({
38262 uri: textDoc.uri,
38263 diagnostics: [{
38264 source: "vimlsp",
38265 message: m[1],
38266 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)),
38267 severity: vscode_languageserver_1.DiagnosticSeverity.Error,
38268 }],
38269 })];
38270 }
38271 // clear diagnostics
38272 connection_1.connection.sendDiagnostics({
38273 uri: textDoc.uri,
38274 diagnostics: [],
38275 });
38276 return [2 /*return*/];
38277 });
38278 });
38279}
38280exports.handleDiagnostic = handleDiagnostic;
38281
38282
38283/***/ }),
38284/* 368 */
38285/***/ (function(module, exports, __webpack_require__) {
38286
38287"use strict";
38288
38289Object.defineProperty(exports, "__esModule", { value: true });
38290var vscode_languageserver_1 = __webpack_require__(2);
38291var workspaces_1 = __webpack_require__(148);
38292var documents_1 = __webpack_require__(56);
38293exports.selectionRangeProvider = function (params) {
38294 var selectRanges = [];
38295 var textDocument = params.textDocument, positions = params.positions;
38296 if (!positions || positions.length === 0) {
38297 return selectRanges;
38298 }
38299 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38300 var document = documents_1.documents.get(textDocument.uri);
38301 if (!buffer || !document) {
38302 return selectRanges;
38303 }
38304 var vimRanges = buffer.getRanges();
38305 if (vimRanges.length === 0) {
38306 return selectRanges;
38307 }
38308 var range = vscode_languageserver_1.Range.create(positions[0], positions[0]);
38309 if (positions.length > 1) {
38310 range = vscode_languageserver_1.Range.create(positions[0], positions[positions.length - 1]);
38311 }
38312 var ranges = [];
38313 vimRanges.forEach(function (vimRange) {
38314 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)));
38315 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));
38316 if (range.start.line >= newRange.start.line && range.end.line <= newRange.end.line) {
38317 if (ranges.length === 0) {
38318 ranges.push(newRange);
38319 }
38320 else {
38321 var i = 0;
38322 for (var len = ranges.length; i < len; i++) {
38323 if (ranges[i].start.line <= newRange.start.line && ranges[i].end.line >= newRange.end.line) {
38324 ranges.splice(i, 0, newRange);
38325 break;
38326 }
38327 }
38328 if (i === ranges.length) {
38329 ranges.push(newRange);
38330 }
38331 }
38332 }
38333 });
38334 if (ranges.length) {
38335 if (ranges.length > 1) {
38336 ranges = ranges.filter(function (newRange) {
38337 return range.start.line !== newRange.start.line || range.end.line !== newRange.end.line;
38338 });
38339 }
38340 selectRanges.push(ranges.reverse().reduce(function (pre, cur, idx) {
38341 if (idx === 0) {
38342 return pre;
38343 }
38344 return {
38345 range: cur,
38346 parent: pre
38347 };
38348 }, { range: ranges[0] }));
38349 }
38350 return selectRanges;
38351};
38352
38353
38354/***/ }),
38355/* 369 */
38356/***/ (function(module, exports, __webpack_require__) {
38357
38358"use strict";
38359
38360Object.defineProperty(exports, "__esModule", { value: true });
38361var vscode_languageserver_1 = __webpack_require__(2);
38362var workspaces_1 = __webpack_require__(148);
38363var documents_1 = __webpack_require__(56);
38364exports.documentSymbolProvider = function (params) {
38365 var documentSymbols = [];
38366 var textDocument = params.textDocument;
38367 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38368 var document = documents_1.documents.get(textDocument.uri);
38369 if (!buffer || !document) {
38370 return documentSymbols;
38371 }
38372 var globalFunctions = buffer.getGlobalFunctions();
38373 var scriptFunctions = buffer.getScriptFunctions();
38374 var globalVariables = buffer.getGlobalIdentifiers();
38375 var localVariables = buffer.getLocalIdentifiers();
38376 var functions = Object.values(globalFunctions).concat(Object.values(scriptFunctions)).reduce(function (pre, cur) {
38377 return pre.concat(cur);
38378 }, []);
38379 var variables = Object.values(globalVariables).concat(Object.values(localVariables)).reduce(function (pre, cur) {
38380 return pre.concat(cur);
38381 }, []);
38382 var sortFunctions = [];
38383 functions.forEach(function (func) {
38384 if (sortFunctions.length === 0) {
38385 return sortFunctions.push(func);
38386 }
38387 var i = 0;
38388 for (var len = sortFunctions.length; i < len; i += 1) {
38389 var sf = sortFunctions[i];
38390 if (func.range.endLine < sf.range.endLine) {
38391 sortFunctions.splice(i, 0, func);
38392 break;
38393 }
38394 }
38395 if (i === sortFunctions.length) {
38396 sortFunctions.push(func);
38397 }
38398 });
38399 return sortFunctions
38400 .map(function (func) {
38401 var vimRange = func.range;
38402 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)));
38403 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));
38404 var ds = {
38405 name: func.name,
38406 kind: vscode_languageserver_1.SymbolKind.Function,
38407 range: range,
38408 selectionRange: range,
38409 children: []
38410 };
38411 variables = variables.filter(function (v) {
38412 if (v.startLine >= vimRange.startLine && v.startLine <= vimRange.endLine) {
38413 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));
38414 ds.children.push({
38415 name: v.name,
38416 kind: vscode_languageserver_1.SymbolKind.Variable,
38417 range: vRange,
38418 selectionRange: vRange
38419 });
38420 return false;
38421 }
38422 return true;
38423 });
38424 return ds;
38425 })
38426 .reduce(function (res, cur) {
38427 if (res.length === 0) {
38428 res.push(cur);
38429 }
38430 else {
38431 res = res.filter(function (item) {
38432 if (item.range.start.line >= cur.range.start.line && item.range.end.line <= cur.range.end.line) {
38433 cur.children.push(item);
38434 return false;
38435 }
38436 return true;
38437 });
38438 res.push(cur);
38439 }
38440 return res;
38441 }, [])
38442 .concat(variables.map(function (v) {
38443 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));
38444 return {
38445 name: v.name,
38446 kind: vscode_languageserver_1.SymbolKind.Variable,
38447 range: vRange,
38448 selectionRange: vRange
38449 };
38450 }));
38451};
38452
38453
38454/***/ })
38455/******/ ])));
\No newline at end of file