UNPKG

2.5 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 constant_1 = __webpack_require__(2);
117var completion_1 = __webpack_require__(3);
118var completionResolve_1 = __webpack_require__(140);
119var definition_1 = __webpack_require__(141);
120var hover_1 = __webpack_require__(142);
121var references_1 = __webpack_require__(143);
122var rename_1 = __webpack_require__(144);
123var signatureHelp_1 = __webpack_require__(145);
124var symbols_1 = __webpack_require__(146);
125var builtin_1 = __webpack_require__(52);
126var config_1 = __importDefault(__webpack_require__(49));
127var connection_1 = __webpack_require__(122);
128var documents_1 = __webpack_require__(50);
129var parser_1 = __webpack_require__(147);
130// lsp initialize
131connection_1.connection.onInitialize(function (param) {
132 var _a = param.initializationOptions, initializationOptions = _a === void 0 ? {} : _a;
133 var iskeyword = initializationOptions.iskeyword, runtimepath = initializationOptions.runtimepath, vimruntime = initializationOptions.vimruntime, diagnostic = initializationOptions.diagnostic, suggest = initializationOptions.suggest, indexes = initializationOptions.indexes;
134 var runtimepaths = runtimepath ? runtimepath.split(",") : [];
135 // config by user's initializationOptions
136 var conf = {
137 iskeyword: iskeyword || "",
138 runtimepath: runtimepaths,
139 vimruntime: (vimruntime || "").trim(),
140 diagnostic: __assign({ enable: true }, (diagnostic || {})),
141 snippetSupport: shvl.get(param, "capabilities.textDocument.completion.completionItem.snippetSupport"),
142 suggest: __assign({ fromRuntimepath: false, fromVimruntime: true }, (suggest || {})),
143 indexes: __assign({ runtimepath: true, gap: 100, count: 1, projectRootPatterns: constant_1.projectRootPatterns }, (indexes || {})),
144 };
145 // init config
146 config_1.default.init(conf);
147 // init builtin docs
148 builtin_1.builtinDocs.init();
149 return {
150 capabilities: {
151 textDocumentSync: documents_1.documents.syncKind,
152 documentHighlightProvider: true,
153 hoverProvider: true,
154 completionProvider: {
155 triggerCharacters: [".", ":", "#", "[", "&", "$", "<", '"', "'"],
156 resolveProvider: true,
157 },
158 signatureHelpProvider: {
159 triggerCharacters: ["(", ","],
160 },
161 definitionProvider: true,
162 referencesProvider: true,
163 renameProvider: {
164 prepareProvider: true,
165 },
166 },
167 };
168});
169// document change or open
170documents_1.documents.onDidChangeContent(function (change) {
171 parser_1.next(change.document);
172});
173documents_1.documents.onDidClose(function (evt) {
174 parser_1.unsubscribe(evt.document);
175});
176// listen for document's open/close/change
177documents_1.documents.listen(connection_1.connection);
178// handle completion
179connection_1.connection.onCompletion(completion_1.completionProvider);
180// handle completion resolve
181connection_1.connection.onCompletionResolve(completionResolve_1.completionResolveProvider);
182// handle signature help
183connection_1.connection.onSignatureHelp(signatureHelp_1.signatureHelpProvider);
184// handle hover
185connection_1.connection.onHover(hover_1.hoverProvider);
186// handle definition request
187connection_1.connection.onDefinition(definition_1.definitionProvider);
188// handle references
189connection_1.connection.onReferences(references_1.referencesProvider);
190// handle rename
191connection_1.connection.onPrepareRename(rename_1.prepareProvider);
192connection_1.connection.onRenameRequest(rename_1.renameProvider);
193// document highlight
194connection_1.connection.onDocumentHighlight(symbols_1.documentHighlightProvider);
195// lsp start
196connection_1.connection.listen();
197
198
199/***/ }),
200/* 1 */
201/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
202
203"use strict";
204__webpack_require__.r(__webpack_exports__);
205/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return t; });
206/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return n; });
207function 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}
208//# sourceMappingURL=shvl.mjs.map
209
210
211/***/ }),
212/* 2 */
213/***/ (function(module, exports, __webpack_require__) {
214
215"use strict";
216
217Object.defineProperty(exports, "__esModule", { value: true });
218exports.sortTexts = {
219 one: "00001",
220 two: "00002",
221 three: "00003",
222 four: "00004",
223};
224exports.projectRootPatterns = [".git", "autoload", "plugin"];
225
226
227/***/ }),
228/* 3 */
229/***/ (function(module, exports, __webpack_require__) {
230
231"use strict";
232
233var __importDefault = (this && this.__importDefault) || function (mod) {
234 return (mod && mod.__esModule) ? mod : { "default": mod };
235};
236Object.defineProperty(exports, "__esModule", { value: true });
237var vscode_languageserver_1 = __webpack_require__(4);
238var fuzzy_1 = __importDefault(__webpack_require__(39));
239var util_1 = __webpack_require__(40);
240var config_1 = __importDefault(__webpack_require__(49));
241var documents_1 = __webpack_require__(50);
242__webpack_require__(51);
243__webpack_require__(125);
244__webpack_require__(126);
245__webpack_require__(127);
246__webpack_require__(129);
247__webpack_require__(130);
248__webpack_require__(134);
249__webpack_require__(135);
250__webpack_require__(136);
251__webpack_require__(137);
252__webpack_require__(138);
253__webpack_require__(139);
254var provider_1 = __webpack_require__(124);
255var provider = provider_1.getProvider();
256exports.completionProvider = function (params) {
257 var textDocument = params.textDocument, position = params.position;
258 var textDoc = documents_1.documents.get(textDocument.uri);
259 if (textDoc) {
260 var line = textDoc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), position));
261 var completionItems = provider(line, textDoc.uri, position, []);
262 if (!config_1.default.snippetSupport) {
263 return util_1.removeSnippets(completionItems);
264 }
265 var words = util_1.getWordFromPosition(textDoc, { line: position.line, character: position.character - 1 });
266 var word_1 = words && words.word || "";
267 if (word_1 === "" && words && words.wordRight.trim() === ":") {
268 word_1 = ":";
269 }
270 // options items start with &
271 var invalidLength_1 = word_1.replace(/^&/, "").length;
272 return completionItems.filter(function (item) { return fuzzy_1.default(item.label, word_1) >= invalidLength_1; });
273 }
274 return [];
275};
276
277
278/***/ }),
279/* 4 */
280/***/ (function(module, exports, __webpack_require__) {
281
282"use strict";
283/* --------------------------------------------------------------------------------------------
284 * Copyright (c) Microsoft Corporation. All rights reserved.
285 * Licensed under the MIT License. See License.txt in the project root for license information.
286 * ------------------------------------------------------------------------------------------ */
287/// <reference path="./thenable.ts" />
288
289function __export(m) {
290 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
291}
292Object.defineProperty(exports, "__esModule", { value: true });
293const vscode_languageserver_protocol_1 = __webpack_require__(5);
294exports.Event = vscode_languageserver_protocol_1.Event;
295const configuration_1 = __webpack_require__(30);
296const workspaceFolders_1 = __webpack_require__(32);
297const Is = __webpack_require__(31);
298const UUID = __webpack_require__(33);
299// ------------- Reexport the API surface of the language worker API ----------------------
300__export(__webpack_require__(5));
301const fm = __webpack_require__(34);
302var Files;
303(function (Files) {
304 Files.uriToFilePath = fm.uriToFilePath;
305 Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
306 Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
307 Files.resolve = fm.resolve;
308 Files.resolveModule = fm.resolveModule;
309 Files.resolveModule2 = fm.resolveModule2;
310 Files.resolveModulePath = fm.resolveModulePath;
311})(Files = exports.Files || (exports.Files = {}));
312let shutdownReceived = false;
313let exitTimer = undefined;
314function setupExitTimer() {
315 const argName = '--clientProcessId';
316 function runTimer(value) {
317 try {
318 let processId = parseInt(value);
319 if (!isNaN(processId)) {
320 exitTimer = setInterval(() => {
321 try {
322 process.kill(processId, 0);
323 }
324 catch (ex) {
325 // Parent process doesn't exist anymore. Exit the server.
326 process.exit(shutdownReceived ? 0 : 1);
327 }
328 }, 3000);
329 }
330 }
331 catch (e) {
332 // Ignore errors;
333 }
334 }
335 for (let i = 2; i < process.argv.length; i++) {
336 let arg = process.argv[i];
337 if (arg === argName && i + 1 < process.argv.length) {
338 runTimer(process.argv[i + 1]);
339 return;
340 }
341 else {
342 let args = arg.split('=');
343 if (args[0] === argName) {
344 runTimer(args[1]);
345 }
346 }
347 }
348}
349setupExitTimer();
350function null2Undefined(value) {
351 if (value === null) {
352 return void 0;
353 }
354 return value;
355}
356/**
357 * A manager for simple text documents
358 */
359class TextDocuments {
360 /**
361 * Create a new text document manager.
362 */
363 constructor() {
364 this._documents = Object.create(null);
365 this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
366 this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
367 this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
368 this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
369 this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
370 }
371 /**
372 * Returns the [TextDocumentSyncKind](#TextDocumentSyncKind) used by
373 * this text document manager.
374 */
375 get syncKind() {
376 return vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
377 }
378 /**
379 * An event that fires when a text document managed by this manager
380 * has been opened or the content changes.
381 */
382 get onDidChangeContent() {
383 return this._onDidChangeContent.event;
384 }
385 /**
386 * An event that fires when a text document managed by this manager
387 * has been opened.
388 */
389 get onDidOpen() {
390 return this._onDidOpen.event;
391 }
392 /**
393 * An event that fires when a text document managed by this manager
394 * will be saved.
395 */
396 get onWillSave() {
397 return this._onWillSave.event;
398 }
399 /**
400 * Sets a handler that will be called if a participant wants to provide
401 * edits during a text document save.
402 */
403 onWillSaveWaitUntil(handler) {
404 this._willSaveWaitUntil = handler;
405 }
406 /**
407 * An event that fires when a text document managed by this manager
408 * has been saved.
409 */
410 get onDidSave() {
411 return this._onDidSave.event;
412 }
413 /**
414 * An event that fires when a text document managed by this manager
415 * has been closed.
416 */
417 get onDidClose() {
418 return this._onDidClose.event;
419 }
420 /**
421 * Returns the document for the given URI. Returns undefined if
422 * the document is not mananged by this instance.
423 *
424 * @param uri The text document's URI to retrieve.
425 * @return the text document or `undefined`.
426 */
427 get(uri) {
428 return this._documents[uri];
429 }
430 /**
431 * Returns all text documents managed by this instance.
432 *
433 * @return all text documents.
434 */
435 all() {
436 return Object.keys(this._documents).map(key => this._documents[key]);
437 }
438 /**
439 * Returns the URIs of all text documents managed by this instance.
440 *
441 * @return the URI's of all text documents.
442 */
443 keys() {
444 return Object.keys(this._documents);
445 }
446 /**
447 * Listens for `low level` notification on the given connection to
448 * update the text documents managed by this instance.
449 *
450 * @param connection The connection to listen on.
451 */
452 listen(connection) {
453 function isUpdateableDocument(value) {
454 return Is.func(value.update);
455 }
456 connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
457 connection.onDidOpenTextDocument((event) => {
458 let td = event.textDocument;
459 let document = vscode_languageserver_protocol_1.TextDocument.create(td.uri, td.languageId, td.version, td.text);
460 this._documents[td.uri] = document;
461 let toFire = Object.freeze({ document });
462 this._onDidOpen.fire(toFire);
463 this._onDidChangeContent.fire(toFire);
464 });
465 connection.onDidChangeTextDocument((event) => {
466 let td = event.textDocument;
467 let changes = event.contentChanges;
468 let last = changes.length > 0 ? changes[changes.length - 1] : undefined;
469 if (last) {
470 let document = this._documents[td.uri];
471 if (document && isUpdateableDocument(document)) {
472 if (td.version === null || td.version === void 0) {
473 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
474 }
475 document.update(last, td.version);
476 this._onDidChangeContent.fire(Object.freeze({ document }));
477 }
478 }
479 });
480 connection.onDidCloseTextDocument((event) => {
481 let document = this._documents[event.textDocument.uri];
482 if (document) {
483 delete this._documents[event.textDocument.uri];
484 this._onDidClose.fire(Object.freeze({ document }));
485 }
486 });
487 connection.onWillSaveTextDocument((event) => {
488 let document = this._documents[event.textDocument.uri];
489 if (document) {
490 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
491 }
492 });
493 connection.onWillSaveTextDocumentWaitUntil((event, token) => {
494 let document = this._documents[event.textDocument.uri];
495 if (document && this._willSaveWaitUntil) {
496 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
497 }
498 else {
499 return [];
500 }
501 });
502 connection.onDidSaveTextDocument((event) => {
503 let document = this._documents[event.textDocument.uri];
504 if (document) {
505 this._onDidSave.fire(Object.freeze({ document }));
506 }
507 });
508 }
509}
510exports.TextDocuments = TextDocuments;
511/**
512 * Helps tracking error message. Equal occurences of the same
513 * message are only stored once. This class is for example
514 * useful if text documents are validated in a loop and equal
515 * error message should be folded into one.
516 */
517class ErrorMessageTracker {
518 constructor() {
519 this._messages = Object.create(null);
520 }
521 /**
522 * Add a message to the tracker.
523 *
524 * @param message The message to add.
525 */
526 add(message) {
527 let count = this._messages[message];
528 if (!count) {
529 count = 0;
530 }
531 count++;
532 this._messages[message] = count;
533 }
534 /**
535 * Send all tracked messages to the connection's window.
536 *
537 * @param connection The connection established between client and server.
538 */
539 sendErrors(connection) {
540 Object.keys(this._messages).forEach(message => {
541 connection.window.showErrorMessage(message);
542 });
543 }
544}
545exports.ErrorMessageTracker = ErrorMessageTracker;
546var BulkRegistration;
547(function (BulkRegistration) {
548 /**
549 * Creates a new bulk registration.
550 * @return an empty bulk registration.
551 */
552 function create() {
553 return new BulkRegistrationImpl();
554 }
555 BulkRegistration.create = create;
556})(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
557class BulkRegistrationImpl {
558 constructor() {
559 this._registrations = [];
560 this._registered = new Set();
561 }
562 add(type, registerOptions) {
563 const method = Is.string(type) ? type : type.method;
564 if (this._registered.has(method)) {
565 throw new Error(`${method} is already added to this registration`);
566 }
567 const id = UUID.generateUuid();
568 this._registrations.push({
569 id: id,
570 method: method,
571 registerOptions: registerOptions || {}
572 });
573 this._registered.add(method);
574 }
575 asRegistrationParams() {
576 return {
577 registrations: this._registrations
578 };
579 }
580}
581var BulkUnregistration;
582(function (BulkUnregistration) {
583 function create() {
584 return new BulkUnregistrationImpl(undefined, []);
585 }
586 BulkUnregistration.create = create;
587})(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
588class BulkUnregistrationImpl {
589 constructor(_connection, unregistrations) {
590 this._connection = _connection;
591 this._unregistrations = new Map();
592 unregistrations.forEach(unregistration => {
593 this._unregistrations.set(unregistration.method, unregistration);
594 });
595 }
596 get isAttached() {
597 return !!this._connection;
598 }
599 attach(connection) {
600 this._connection = connection;
601 }
602 add(unregistration) {
603 this._unregistrations.set(unregistration.method, unregistration);
604 }
605 dispose() {
606 let unregistrations = [];
607 for (let unregistration of this._unregistrations.values()) {
608 unregistrations.push(unregistration);
609 }
610 let params = {
611 unregisterations: unregistrations
612 };
613 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
614 this._connection.console.info(`Bulk unregistration failed.`);
615 });
616 }
617 disposeSingle(arg) {
618 const method = Is.string(arg) ? arg : arg.method;
619 const unregistration = this._unregistrations.get(method);
620 if (!unregistration) {
621 return false;
622 }
623 let params = {
624 unregisterations: [unregistration]
625 };
626 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
627 this._unregistrations.delete(method);
628 }, (_error) => {
629 this._connection.console.info(`Unregistering request handler for ${unregistration.id} failed.`);
630 });
631 return true;
632 }
633}
634class ConnectionLogger {
635 constructor() {
636 }
637 rawAttach(connection) {
638 this._rawConnection = connection;
639 }
640 attach(connection) {
641 this._connection = connection;
642 }
643 get connection() {
644 if (!this._connection) {
645 throw new Error('Remote is not attached to a connection yet.');
646 }
647 return this._connection;
648 }
649 fillServerCapabilities(_capabilities) {
650 }
651 initialize(_capabilities) {
652 }
653 error(message) {
654 this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
655 }
656 warn(message) {
657 this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
658 }
659 info(message) {
660 this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
661 }
662 log(message) {
663 this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
664 }
665 send(type, message) {
666 if (this._rawConnection) {
667 this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
668 }
669 }
670}
671class RemoteWindowImpl {
672 constructor() {
673 }
674 attach(connection) {
675 this._connection = connection;
676 }
677 get connection() {
678 if (!this._connection) {
679 throw new Error('Remote is not attached to a connection yet.');
680 }
681 return this._connection;
682 }
683 initialize(_capabilities) {
684 }
685 fillServerCapabilities(_capabilities) {
686 }
687 showErrorMessage(message, ...actions) {
688 let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
689 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
690 }
691 showWarningMessage(message, ...actions) {
692 let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
693 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
694 }
695 showInformationMessage(message, ...actions) {
696 let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
697 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
698 }
699}
700class RemoteClientImpl {
701 attach(connection) {
702 this._connection = connection;
703 }
704 get connection() {
705 if (!this._connection) {
706 throw new Error('Remote is not attached to a connection yet.');
707 }
708 return this._connection;
709 }
710 initialize(_capabilities) {
711 }
712 fillServerCapabilities(_capabilities) {
713 }
714 register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
715 if (typeOrRegistrations instanceof BulkRegistrationImpl) {
716 return this.registerMany(typeOrRegistrations);
717 }
718 else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
719 return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
720 }
721 else {
722 return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
723 }
724 }
725 registerSingle1(unregistration, type, registerOptions) {
726 const method = Is.string(type) ? type : type.method;
727 const id = UUID.generateUuid();
728 let params = {
729 registrations: [{ id, method, registerOptions: registerOptions || {} }]
730 };
731 if (!unregistration.isAttached) {
732 unregistration.attach(this._connection);
733 }
734 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
735 unregistration.add({ id: id, method: method });
736 return unregistration;
737 }, (_error) => {
738 this.connection.console.info(`Registering request handler for ${method} failed.`);
739 return Promise.reject(_error);
740 });
741 }
742 registerSingle2(type, registerOptions) {
743 const method = Is.string(type) ? type : type.method;
744 const id = UUID.generateUuid();
745 let params = {
746 registrations: [{ id, method, registerOptions: registerOptions || {} }]
747 };
748 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
749 return vscode_languageserver_protocol_1.Disposable.create(() => {
750 this.unregisterSingle(id, method);
751 });
752 }, (_error) => {
753 this.connection.console.info(`Registering request handler for ${method} failed.`);
754 return Promise.reject(_error);
755 });
756 }
757 unregisterSingle(id, method) {
758 let params = {
759 unregisterations: [{ id, method }]
760 };
761 return this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
762 this.connection.console.info(`Unregistering request handler for ${id} failed.`);
763 });
764 }
765 registerMany(registrations) {
766 let params = registrations.asRegistrationParams();
767 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
768 return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
769 }, (_error) => {
770 this.connection.console.info(`Bulk registration failed.`);
771 return Promise.reject(_error);
772 });
773 }
774}
775class _RemoteWorkspaceImpl {
776 constructor() {
777 }
778 attach(connection) {
779 this._connection = connection;
780 }
781 get connection() {
782 if (!this._connection) {
783 throw new Error('Remote is not attached to a connection yet.');
784 }
785 return this._connection;
786 }
787 initialize(_capabilities) {
788 }
789 fillServerCapabilities(_capabilities) {
790 }
791 applyEdit(paramOrEdit) {
792 function isApplyWorkspaceEditParams(value) {
793 return value && !!value.edit;
794 }
795 let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
796 return this._connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
797 }
798}
799const RemoteWorkspaceImpl = workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl));
800class TracerImpl {
801 constructor() {
802 this._trace = vscode_languageserver_protocol_1.Trace.Off;
803 }
804 attach(connection) {
805 this._connection = connection;
806 }
807 get connection() {
808 if (!this._connection) {
809 throw new Error('Remote is not attached to a connection yet.');
810 }
811 return this._connection;
812 }
813 initialize(_capabilities) {
814 }
815 fillServerCapabilities(_capabilities) {
816 }
817 set trace(value) {
818 this._trace = value;
819 }
820 log(message, verbose) {
821 if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
822 return;
823 }
824 this._connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
825 message: message,
826 verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
827 });
828 }
829}
830class TelemetryImpl {
831 constructor() {
832 }
833 attach(connection) {
834 this._connection = connection;
835 }
836 get connection() {
837 if (!this._connection) {
838 throw new Error('Remote is not attached to a connection yet.');
839 }
840 return this._connection;
841 }
842 initialize(_capabilities) {
843 }
844 fillServerCapabilities(_capabilities) {
845 }
846 logEvent(data) {
847 this._connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
848 }
849}
850function combineConsoleFeatures(one, two) {
851 return function (Base) {
852 return two(one(Base));
853 };
854}
855exports.combineConsoleFeatures = combineConsoleFeatures;
856function combineTelemetryFeatures(one, two) {
857 return function (Base) {
858 return two(one(Base));
859 };
860}
861exports.combineTelemetryFeatures = combineTelemetryFeatures;
862function combineTracerFeatures(one, two) {
863 return function (Base) {
864 return two(one(Base));
865 };
866}
867exports.combineTracerFeatures = combineTracerFeatures;
868function combineClientFeatures(one, two) {
869 return function (Base) {
870 return two(one(Base));
871 };
872}
873exports.combineClientFeatures = combineClientFeatures;
874function combineWindowFeatures(one, two) {
875 return function (Base) {
876 return two(one(Base));
877 };
878}
879exports.combineWindowFeatures = combineWindowFeatures;
880function combineWorkspaceFeatures(one, two) {
881 return function (Base) {
882 return two(one(Base));
883 };
884}
885exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
886function combineFeatures(one, two) {
887 function combine(one, two, func) {
888 if (one && two) {
889 return func(one, two);
890 }
891 else if (one) {
892 return one;
893 }
894 else {
895 return two;
896 }
897 }
898 let result = {
899 __brand: 'features',
900 console: combine(one.console, two.console, combineConsoleFeatures),
901 tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
902 telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
903 client: combine(one.client, two.client, combineClientFeatures),
904 window: combine(one.window, two.window, combineWindowFeatures),
905 workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
906 };
907 return result;
908}
909exports.combineFeatures = combineFeatures;
910function createConnection(arg1, arg2, arg3, arg4) {
911 let factories;
912 let input;
913 let output;
914 let strategy;
915 if (arg1 !== void 0 && arg1.__brand === 'features') {
916 factories = arg1;
917 arg1 = arg2;
918 arg2 = arg3;
919 arg3 = arg4;
920 }
921 if (vscode_languageserver_protocol_1.ConnectionStrategy.is(arg1)) {
922 strategy = arg1;
923 }
924 else {
925 input = arg1;
926 output = arg2;
927 strategy = arg3;
928 }
929 return _createConnection(input, output, strategy, factories);
930}
931exports.createConnection = createConnection;
932function _createConnection(input, output, strategy, factories) {
933 if (!input && !output && process.argv.length > 2) {
934 let port = void 0;
935 let pipeName = void 0;
936 let argv = process.argv.slice(2);
937 for (let i = 0; i < argv.length; i++) {
938 let arg = argv[i];
939 if (arg === '--node-ipc') {
940 input = new vscode_languageserver_protocol_1.IPCMessageReader(process);
941 output = new vscode_languageserver_protocol_1.IPCMessageWriter(process);
942 break;
943 }
944 else if (arg === '--stdio') {
945 input = process.stdin;
946 output = process.stdout;
947 break;
948 }
949 else if (arg === '--socket') {
950 port = parseInt(argv[i + 1]);
951 break;
952 }
953 else if (arg === '--pipe') {
954 pipeName = argv[i + 1];
955 break;
956 }
957 else {
958 var args = arg.split('=');
959 if (args[0] === '--socket') {
960 port = parseInt(args[1]);
961 break;
962 }
963 else if (args[0] === '--pipe') {
964 pipeName = args[1];
965 break;
966 }
967 }
968 }
969 if (port) {
970 let transport = vscode_languageserver_protocol_1.createServerSocketTransport(port);
971 input = transport[0];
972 output = transport[1];
973 }
974 else if (pipeName) {
975 let transport = vscode_languageserver_protocol_1.createServerPipeTransport(pipeName);
976 input = transport[0];
977 output = transport[1];
978 }
979 }
980 var commandLineMessage = "Use arguments of createConnection or set command line parameters: '--node-ipc', '--stdio' or '--socket={number}'";
981 if (!input) {
982 throw new Error("Connection input stream is not set. " + commandLineMessage);
983 }
984 if (!output) {
985 throw new Error("Connection output stream is not set. " + commandLineMessage);
986 }
987 // Backwards compatibility
988 if (Is.func(input.read) && Is.func(input.on)) {
989 let inputStream = input;
990 inputStream.on('end', () => {
991 process.exit(shutdownReceived ? 0 : 1);
992 });
993 inputStream.on('close', () => {
994 process.exit(shutdownReceived ? 0 : 1);
995 });
996 }
997 const logger = (factories && factories.console ? new (factories.console(ConnectionLogger))() : new ConnectionLogger());
998 const connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger, strategy);
999 logger.rawAttach(connection);
1000 const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
1001 const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
1002 const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
1003 const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
1004 const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
1005 const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace];
1006 function asThenable(value) {
1007 if (Is.thenable(value)) {
1008 return value;
1009 }
1010 else {
1011 return Promise.resolve(value);
1012 }
1013 }
1014 let shutdownHandler = undefined;
1015 let initializeHandler = undefined;
1016 let exitHandler = undefined;
1017 let protocolConnection = {
1018 listen: () => connection.listen(),
1019 sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
1020 onRequest: (type, handler) => connection.onRequest(type, handler),
1021 sendNotification: (type, param) => {
1022 const method = Is.string(type) ? type : type.method;
1023 if (arguments.length === 1) {
1024 connection.sendNotification(method);
1025 }
1026 else {
1027 connection.sendNotification(method, param);
1028 }
1029 },
1030 onNotification: (type, handler) => connection.onNotification(type, handler),
1031 onInitialize: (handler) => initializeHandler = handler,
1032 onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
1033 onShutdown: (handler) => shutdownHandler = handler,
1034 onExit: (handler) => exitHandler = handler,
1035 get console() { return logger; },
1036 get telemetry() { return telemetry; },
1037 get tracer() { return tracer; },
1038 get client() { return client; },
1039 get window() { return remoteWindow; },
1040 get workspace() { return workspace; },
1041 onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
1042 onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
1043 __textDocumentSync: undefined,
1044 onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
1045 onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
1046 onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
1047 onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
1048 onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
1049 onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
1050 sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
1051 onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, handler),
1052 onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, handler),
1053 onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
1054 onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, handler),
1055 onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, handler),
1056 onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, handler),
1057 onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, handler),
1058 onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, handler),
1059 onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, handler),
1060 onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, handler),
1061 onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, handler),
1062 onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, handler),
1063 onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, handler),
1064 onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, handler),
1065 onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, handler),
1066 onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, handler),
1067 onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, handler),
1068 onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, handler),
1069 onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, handler),
1070 onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, handler),
1071 onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, handler),
1072 onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, handler),
1073 onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, handler),
1074 onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, handler),
1075 onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, handler),
1076 onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, handler),
1077 dispose: () => connection.dispose()
1078 };
1079 for (let remote of allRemotes) {
1080 remote.attach(protocolConnection);
1081 }
1082 connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
1083 const processId = params.processId;
1084 if (Is.number(processId) && exitTimer === void 0) {
1085 // We received a parent process id. Set up a timer to periodically check
1086 // if the parent is still alive.
1087 setInterval(() => {
1088 try {
1089 process.kill(processId, 0);
1090 }
1091 catch (ex) {
1092 // Parent process doesn't exist anymore. Exit the server.
1093 process.exit(shutdownReceived ? 0 : 1);
1094 }
1095 }, 3000);
1096 }
1097 if (Is.string(params.trace)) {
1098 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
1099 }
1100 for (let remote of allRemotes) {
1101 remote.initialize(params.capabilities);
1102 }
1103 if (initializeHandler) {
1104 let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1105 return asThenable(result).then((value) => {
1106 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
1107 return value;
1108 }
1109 let result = value;
1110 if (!result) {
1111 result = { capabilities: {} };
1112 }
1113 let capabilities = result.capabilities;
1114 if (!capabilities) {
1115 capabilities = {};
1116 result.capabilities = capabilities;
1117 }
1118 if (capabilities.textDocumentSync === void 0 || capabilities.textDocumentSync === null) {
1119 capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1120 }
1121 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
1122 capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1123 }
1124 for (let remote of allRemotes) {
1125 remote.fillServerCapabilities(capabilities);
1126 }
1127 return result;
1128 });
1129 }
1130 else {
1131 let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
1132 for (let remote of allRemotes) {
1133 remote.fillServerCapabilities(result.capabilities);
1134 }
1135 return result;
1136 }
1137 });
1138 connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
1139 shutdownReceived = true;
1140 if (shutdownHandler) {
1141 return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1142 }
1143 else {
1144 return undefined;
1145 }
1146 });
1147 connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
1148 try {
1149 if (exitHandler) {
1150 exitHandler();
1151 }
1152 }
1153 finally {
1154 if (shutdownReceived) {
1155 process.exit(0);
1156 }
1157 else {
1158 process.exit(1);
1159 }
1160 }
1161 });
1162 connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
1163 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
1164 });
1165 return protocolConnection;
1166}
1167// Export the protocol currently in proposed state.
1168var ProposedFeatures;
1169(function (ProposedFeatures) {
1170 ProposedFeatures.all = {
1171 __brand: 'features',
1172 };
1173})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
1174
1175
1176/***/ }),
1177/* 5 */
1178/***/ (function(module, exports, __webpack_require__) {
1179
1180"use strict";
1181/* --------------------------------------------------------------------------------------------
1182 * Copyright (c) Microsoft Corporation. All rights reserved.
1183 * Licensed under the MIT License. See License.txt in the project root for license information.
1184 * ------------------------------------------------------------------------------------------ */
1185
1186function __export(m) {
1187 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1188}
1189Object.defineProperty(exports, "__esModule", { value: true });
1190const vscode_jsonrpc_1 = __webpack_require__(6);
1191exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
1192exports.ResponseError = vscode_jsonrpc_1.ResponseError;
1193exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;
1194exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
1195exports.Disposable = vscode_jsonrpc_1.Disposable;
1196exports.Event = vscode_jsonrpc_1.Event;
1197exports.Emitter = vscode_jsonrpc_1.Emitter;
1198exports.Trace = vscode_jsonrpc_1.Trace;
1199exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;
1200exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
1201exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
1202exports.RequestType = vscode_jsonrpc_1.RequestType;
1203exports.RequestType0 = vscode_jsonrpc_1.RequestType0;
1204exports.NotificationType = vscode_jsonrpc_1.NotificationType;
1205exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
1206exports.MessageReader = vscode_jsonrpc_1.MessageReader;
1207exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;
1208exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
1209exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
1210exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
1211exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
1212exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
1213exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
1214exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
1215exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
1216exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
1217exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
1218__export(__webpack_require__(20));
1219__export(__webpack_require__(21));
1220function createProtocolConnection(reader, writer, logger, strategy) {
1221 return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
1222}
1223exports.createProtocolConnection = createProtocolConnection;
1224
1225
1226/***/ }),
1227/* 6 */
1228/***/ (function(module, exports, __webpack_require__) {
1229
1230"use strict";
1231/* --------------------------------------------------------------------------------------------
1232 * Copyright (c) Microsoft Corporation. All rights reserved.
1233 * Licensed under the MIT License. See License.txt in the project root for license information.
1234 * ------------------------------------------------------------------------------------------ */
1235/// <reference path="./thenable.ts" />
1236
1237function __export(m) {
1238 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1239}
1240Object.defineProperty(exports, "__esModule", { value: true });
1241const Is = __webpack_require__(7);
1242const messages_1 = __webpack_require__(8);
1243exports.RequestType = messages_1.RequestType;
1244exports.RequestType0 = messages_1.RequestType0;
1245exports.RequestType1 = messages_1.RequestType1;
1246exports.RequestType2 = messages_1.RequestType2;
1247exports.RequestType3 = messages_1.RequestType3;
1248exports.RequestType4 = messages_1.RequestType4;
1249exports.RequestType5 = messages_1.RequestType5;
1250exports.RequestType6 = messages_1.RequestType6;
1251exports.RequestType7 = messages_1.RequestType7;
1252exports.RequestType8 = messages_1.RequestType8;
1253exports.RequestType9 = messages_1.RequestType9;
1254exports.ResponseError = messages_1.ResponseError;
1255exports.ErrorCodes = messages_1.ErrorCodes;
1256exports.NotificationType = messages_1.NotificationType;
1257exports.NotificationType0 = messages_1.NotificationType0;
1258exports.NotificationType1 = messages_1.NotificationType1;
1259exports.NotificationType2 = messages_1.NotificationType2;
1260exports.NotificationType3 = messages_1.NotificationType3;
1261exports.NotificationType4 = messages_1.NotificationType4;
1262exports.NotificationType5 = messages_1.NotificationType5;
1263exports.NotificationType6 = messages_1.NotificationType6;
1264exports.NotificationType7 = messages_1.NotificationType7;
1265exports.NotificationType8 = messages_1.NotificationType8;
1266exports.NotificationType9 = messages_1.NotificationType9;
1267const messageReader_1 = __webpack_require__(9);
1268exports.MessageReader = messageReader_1.MessageReader;
1269exports.StreamMessageReader = messageReader_1.StreamMessageReader;
1270exports.IPCMessageReader = messageReader_1.IPCMessageReader;
1271exports.SocketMessageReader = messageReader_1.SocketMessageReader;
1272const messageWriter_1 = __webpack_require__(11);
1273exports.MessageWriter = messageWriter_1.MessageWriter;
1274exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
1275exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
1276exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
1277const events_1 = __webpack_require__(10);
1278exports.Disposable = events_1.Disposable;
1279exports.Event = events_1.Event;
1280exports.Emitter = events_1.Emitter;
1281const cancellation_1 = __webpack_require__(12);
1282exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;
1283exports.CancellationToken = cancellation_1.CancellationToken;
1284const linkedMap_1 = __webpack_require__(13);
1285__export(__webpack_require__(14));
1286__export(__webpack_require__(19));
1287var CancelNotification;
1288(function (CancelNotification) {
1289 CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
1290})(CancelNotification || (CancelNotification = {}));
1291exports.NullLogger = Object.freeze({
1292 error: () => { },
1293 warn: () => { },
1294 info: () => { },
1295 log: () => { }
1296});
1297var Trace;
1298(function (Trace) {
1299 Trace[Trace["Off"] = 0] = "Off";
1300 Trace[Trace["Messages"] = 1] = "Messages";
1301 Trace[Trace["Verbose"] = 2] = "Verbose";
1302})(Trace = exports.Trace || (exports.Trace = {}));
1303(function (Trace) {
1304 function fromString(value) {
1305 value = value.toLowerCase();
1306 switch (value) {
1307 case 'off':
1308 return Trace.Off;
1309 case 'messages':
1310 return Trace.Messages;
1311 case 'verbose':
1312 return Trace.Verbose;
1313 default:
1314 return Trace.Off;
1315 }
1316 }
1317 Trace.fromString = fromString;
1318 function toString(value) {
1319 switch (value) {
1320 case Trace.Off:
1321 return 'off';
1322 case Trace.Messages:
1323 return 'messages';
1324 case Trace.Verbose:
1325 return 'verbose';
1326 default:
1327 return 'off';
1328 }
1329 }
1330 Trace.toString = toString;
1331})(Trace = exports.Trace || (exports.Trace = {}));
1332var TraceFormat;
1333(function (TraceFormat) {
1334 TraceFormat["Text"] = "text";
1335 TraceFormat["JSON"] = "json";
1336})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1337(function (TraceFormat) {
1338 function fromString(value) {
1339 value = value.toLowerCase();
1340 if (value === 'json') {
1341 return TraceFormat.JSON;
1342 }
1343 else {
1344 return TraceFormat.Text;
1345 }
1346 }
1347 TraceFormat.fromString = fromString;
1348})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1349var SetTraceNotification;
1350(function (SetTraceNotification) {
1351 SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');
1352})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
1353var LogTraceNotification;
1354(function (LogTraceNotification) {
1355 LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');
1356})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
1357var ConnectionErrors;
1358(function (ConnectionErrors) {
1359 /**
1360 * The connection is closed.
1361 */
1362 ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
1363 /**
1364 * The connection got disposed.
1365 */
1366 ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
1367 /**
1368 * The connection is already in listening mode.
1369 */
1370 ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
1371})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
1372class ConnectionError extends Error {
1373 constructor(code, message) {
1374 super(message);
1375 this.code = code;
1376 Object.setPrototypeOf(this, ConnectionError.prototype);
1377 }
1378}
1379exports.ConnectionError = ConnectionError;
1380var ConnectionStrategy;
1381(function (ConnectionStrategy) {
1382 function is(value) {
1383 let candidate = value;
1384 return candidate && Is.func(candidate.cancelUndispatched);
1385 }
1386 ConnectionStrategy.is = is;
1387})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
1388var ConnectionState;
1389(function (ConnectionState) {
1390 ConnectionState[ConnectionState["New"] = 1] = "New";
1391 ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
1392 ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
1393 ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
1394})(ConnectionState || (ConnectionState = {}));
1395function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
1396 let sequenceNumber = 0;
1397 let notificationSquenceNumber = 0;
1398 let unknownResponseSquenceNumber = 0;
1399 const version = '2.0';
1400 let starRequestHandler = undefined;
1401 let requestHandlers = Object.create(null);
1402 let starNotificationHandler = undefined;
1403 let notificationHandlers = Object.create(null);
1404 let timer;
1405 let messageQueue = new linkedMap_1.LinkedMap();
1406 let responsePromises = Object.create(null);
1407 let requestTokens = Object.create(null);
1408 let trace = Trace.Off;
1409 let traceFormat = TraceFormat.Text;
1410 let tracer;
1411 let state = ConnectionState.New;
1412 let errorEmitter = new events_1.Emitter();
1413 let closeEmitter = new events_1.Emitter();
1414 let unhandledNotificationEmitter = new events_1.Emitter();
1415 let disposeEmitter = new events_1.Emitter();
1416 function createRequestQueueKey(id) {
1417 return 'req-' + id.toString();
1418 }
1419 function createResponseQueueKey(id) {
1420 if (id === null) {
1421 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
1422 }
1423 else {
1424 return 'res-' + id.toString();
1425 }
1426 }
1427 function createNotificationQueueKey() {
1428 return 'not-' + (++notificationSquenceNumber).toString();
1429 }
1430 function addMessageToQueue(queue, message) {
1431 if (messages_1.isRequestMessage(message)) {
1432 queue.set(createRequestQueueKey(message.id), message);
1433 }
1434 else if (messages_1.isResponseMessage(message)) {
1435 queue.set(createResponseQueueKey(message.id), message);
1436 }
1437 else {
1438 queue.set(createNotificationQueueKey(), message);
1439 }
1440 }
1441 function cancelUndispatched(_message) {
1442 return undefined;
1443 }
1444 function isListening() {
1445 return state === ConnectionState.Listening;
1446 }
1447 function isClosed() {
1448 return state === ConnectionState.Closed;
1449 }
1450 function isDisposed() {
1451 return state === ConnectionState.Disposed;
1452 }
1453 function closeHandler() {
1454 if (state === ConnectionState.New || state === ConnectionState.Listening) {
1455 state = ConnectionState.Closed;
1456 closeEmitter.fire(undefined);
1457 }
1458 // If the connection is disposed don't sent close events.
1459 }
1460 ;
1461 function readErrorHandler(error) {
1462 errorEmitter.fire([error, undefined, undefined]);
1463 }
1464 function writeErrorHandler(data) {
1465 errorEmitter.fire(data);
1466 }
1467 messageReader.onClose(closeHandler);
1468 messageReader.onError(readErrorHandler);
1469 messageWriter.onClose(closeHandler);
1470 messageWriter.onError(writeErrorHandler);
1471 function triggerMessageQueue() {
1472 if (timer || messageQueue.size === 0) {
1473 return;
1474 }
1475 timer = setImmediate(() => {
1476 timer = undefined;
1477 processMessageQueue();
1478 });
1479 }
1480 function processMessageQueue() {
1481 if (messageQueue.size === 0) {
1482 return;
1483 }
1484 let message = messageQueue.shift();
1485 try {
1486 if (messages_1.isRequestMessage(message)) {
1487 handleRequest(message);
1488 }
1489 else if (messages_1.isNotificationMessage(message)) {
1490 handleNotification(message);
1491 }
1492 else if (messages_1.isResponseMessage(message)) {
1493 handleResponse(message);
1494 }
1495 else {
1496 handleInvalidMessage(message);
1497 }
1498 }
1499 finally {
1500 triggerMessageQueue();
1501 }
1502 }
1503 let callback = (message) => {
1504 try {
1505 // We have received a cancellation message. Check if the message is still in the queue
1506 // and cancel it if allowed to do so.
1507 if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1508 let key = createRequestQueueKey(message.params.id);
1509 let toCancel = messageQueue.get(key);
1510 if (messages_1.isRequestMessage(toCancel)) {
1511 let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
1512 if (response && (response.error !== void 0 || response.result !== void 0)) {
1513 messageQueue.delete(key);
1514 response.id = toCancel.id;
1515 traceSendingResponse(response, message.method, Date.now());
1516 messageWriter.write(response);
1517 return;
1518 }
1519 }
1520 }
1521 addMessageToQueue(messageQueue, message);
1522 }
1523 finally {
1524 triggerMessageQueue();
1525 }
1526 };
1527 function handleRequest(requestMessage) {
1528 if (isDisposed()) {
1529 // we return here silently since we fired an event when the
1530 // connection got disposed.
1531 return;
1532 }
1533 function reply(resultOrError, method, startTime) {
1534 let message = {
1535 jsonrpc: version,
1536 id: requestMessage.id
1537 };
1538 if (resultOrError instanceof messages_1.ResponseError) {
1539 message.error = resultOrError.toJson();
1540 }
1541 else {
1542 message.result = resultOrError === void 0 ? null : resultOrError;
1543 }
1544 traceSendingResponse(message, method, startTime);
1545 messageWriter.write(message);
1546 }
1547 function replyError(error, method, startTime) {
1548 let message = {
1549 jsonrpc: version,
1550 id: requestMessage.id,
1551 error: error.toJson()
1552 };
1553 traceSendingResponse(message, method, startTime);
1554 messageWriter.write(message);
1555 }
1556 function replySuccess(result, method, startTime) {
1557 // The JSON RPC defines that a response must either have a result or an error
1558 // So we can't treat undefined as a valid response result.
1559 if (result === void 0) {
1560 result = null;
1561 }
1562 let message = {
1563 jsonrpc: version,
1564 id: requestMessage.id,
1565 result: result
1566 };
1567 traceSendingResponse(message, method, startTime);
1568 messageWriter.write(message);
1569 }
1570 traceReceivedRequest(requestMessage);
1571 let element = requestHandlers[requestMessage.method];
1572 let type;
1573 let requestHandler;
1574 if (element) {
1575 type = element.type;
1576 requestHandler = element.handler;
1577 }
1578 let startTime = Date.now();
1579 if (requestHandler || starRequestHandler) {
1580 let cancellationSource = new cancellation_1.CancellationTokenSource();
1581 let tokenKey = String(requestMessage.id);
1582 requestTokens[tokenKey] = cancellationSource;
1583 try {
1584 let handlerResult;
1585 if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1586 handlerResult = requestHandler
1587 ? requestHandler(cancellationSource.token)
1588 : starRequestHandler(requestMessage.method, cancellationSource.token);
1589 }
1590 else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
1591 handlerResult = requestHandler
1592 ? requestHandler(...requestMessage.params, cancellationSource.token)
1593 : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
1594 }
1595 else {
1596 handlerResult = requestHandler
1597 ? requestHandler(requestMessage.params, cancellationSource.token)
1598 : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
1599 }
1600 let promise = handlerResult;
1601 if (!handlerResult) {
1602 delete requestTokens[tokenKey];
1603 replySuccess(handlerResult, requestMessage.method, startTime);
1604 }
1605 else if (promise.then) {
1606 promise.then((resultOrError) => {
1607 delete requestTokens[tokenKey];
1608 reply(resultOrError, requestMessage.method, startTime);
1609 }, error => {
1610 delete requestTokens[tokenKey];
1611 if (error instanceof messages_1.ResponseError) {
1612 replyError(error, requestMessage.method, startTime);
1613 }
1614 else if (error && Is.string(error.message)) {
1615 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1616 }
1617 else {
1618 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1619 }
1620 });
1621 }
1622 else {
1623 delete requestTokens[tokenKey];
1624 reply(handlerResult, requestMessage.method, startTime);
1625 }
1626 }
1627 catch (error) {
1628 delete requestTokens[tokenKey];
1629 if (error instanceof messages_1.ResponseError) {
1630 reply(error, requestMessage.method, startTime);
1631 }
1632 else if (error && Is.string(error.message)) {
1633 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1634 }
1635 else {
1636 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1637 }
1638 }
1639 }
1640 else {
1641 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
1642 }
1643 }
1644 function handleResponse(responseMessage) {
1645 if (isDisposed()) {
1646 // See handle request.
1647 return;
1648 }
1649 if (responseMessage.id === null) {
1650 if (responseMessage.error) {
1651 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
1652 }
1653 else {
1654 logger.error(`Received response message without id. No further error information provided.`);
1655 }
1656 }
1657 else {
1658 let key = String(responseMessage.id);
1659 let responsePromise = responsePromises[key];
1660 traceReceivedResponse(responseMessage, responsePromise);
1661 if (responsePromise) {
1662 delete responsePromises[key];
1663 try {
1664 if (responseMessage.error) {
1665 let error = responseMessage.error;
1666 responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
1667 }
1668 else if (responseMessage.result !== void 0) {
1669 responsePromise.resolve(responseMessage.result);
1670 }
1671 else {
1672 throw new Error('Should never happen.');
1673 }
1674 }
1675 catch (error) {
1676 if (error.message) {
1677 logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
1678 }
1679 else {
1680 logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
1681 }
1682 }
1683 }
1684 }
1685 }
1686 function handleNotification(message) {
1687 if (isDisposed()) {
1688 // See handle request.
1689 return;
1690 }
1691 let type = undefined;
1692 let notificationHandler;
1693 if (message.method === CancelNotification.type.method) {
1694 notificationHandler = (params) => {
1695 let id = params.id;
1696 let source = requestTokens[String(id)];
1697 if (source) {
1698 source.cancel();
1699 }
1700 };
1701 }
1702 else {
1703 let element = notificationHandlers[message.method];
1704 if (element) {
1705 notificationHandler = element.handler;
1706 type = element.type;
1707 }
1708 }
1709 if (notificationHandler || starNotificationHandler) {
1710 try {
1711 traceReceivedNotification(message);
1712 if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1713 notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
1714 }
1715 else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
1716 notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
1717 }
1718 else {
1719 notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
1720 }
1721 }
1722 catch (error) {
1723 if (error.message) {
1724 logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
1725 }
1726 else {
1727 logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
1728 }
1729 }
1730 }
1731 else {
1732 unhandledNotificationEmitter.fire(message);
1733 }
1734 }
1735 function handleInvalidMessage(message) {
1736 if (!message) {
1737 logger.error('Received empty message.');
1738 return;
1739 }
1740 logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
1741 // Test whether we find an id to reject the promise
1742 let responseMessage = message;
1743 if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
1744 let key = String(responseMessage.id);
1745 let responseHandler = responsePromises[key];
1746 if (responseHandler) {
1747 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
1748 }
1749 }
1750 }
1751 function traceSendingRequest(message) {
1752 if (trace === Trace.Off || !tracer) {
1753 return;
1754 }
1755 if (traceFormat === TraceFormat.Text) {
1756 let data = undefined;
1757 if (trace === Trace.Verbose && message.params) {
1758 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1759 }
1760 tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
1761 }
1762 else {
1763 logLSPMessage('send-request', message);
1764 }
1765 }
1766 function traceSendingNotification(message) {
1767 if (trace === Trace.Off || !tracer) {
1768 return;
1769 }
1770 if (traceFormat === TraceFormat.Text) {
1771 let data = undefined;
1772 if (trace === Trace.Verbose) {
1773 if (message.params) {
1774 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1775 }
1776 else {
1777 data = 'No parameters provided.\n\n';
1778 }
1779 }
1780 tracer.log(`Sending notification '${message.method}'.`, data);
1781 }
1782 else {
1783 logLSPMessage('send-notification', message);
1784 }
1785 }
1786 function traceSendingResponse(message, method, startTime) {
1787 if (trace === Trace.Off || !tracer) {
1788 return;
1789 }
1790 if (traceFormat === TraceFormat.Text) {
1791 let data = undefined;
1792 if (trace === Trace.Verbose) {
1793 if (message.error && message.error.data) {
1794 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1795 }
1796 else {
1797 if (message.result) {
1798 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1799 }
1800 else if (message.error === void 0) {
1801 data = 'No result returned.\n\n';
1802 }
1803 }
1804 }
1805 tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
1806 }
1807 else {
1808 logLSPMessage('send-response', message);
1809 }
1810 }
1811 function traceReceivedRequest(message) {
1812 if (trace === Trace.Off || !tracer) {
1813 return;
1814 }
1815 if (traceFormat === TraceFormat.Text) {
1816 let data = undefined;
1817 if (trace === Trace.Verbose && message.params) {
1818 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1819 }
1820 tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
1821 }
1822 else {
1823 logLSPMessage('receive-request', message);
1824 }
1825 }
1826 function traceReceivedNotification(message) {
1827 if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
1828 return;
1829 }
1830 if (traceFormat === TraceFormat.Text) {
1831 let data = undefined;
1832 if (trace === Trace.Verbose) {
1833 if (message.params) {
1834 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1835 }
1836 else {
1837 data = 'No parameters provided.\n\n';
1838 }
1839 }
1840 tracer.log(`Received notification '${message.method}'.`, data);
1841 }
1842 else {
1843 logLSPMessage('receive-notification', message);
1844 }
1845 }
1846 function traceReceivedResponse(message, responsePromise) {
1847 if (trace === Trace.Off || !tracer) {
1848 return;
1849 }
1850 if (traceFormat === TraceFormat.Text) {
1851 let data = undefined;
1852 if (trace === Trace.Verbose) {
1853 if (message.error && message.error.data) {
1854 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1855 }
1856 else {
1857 if (message.result) {
1858 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1859 }
1860 else if (message.error === void 0) {
1861 data = 'No result returned.\n\n';
1862 }
1863 }
1864 }
1865 if (responsePromise) {
1866 let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
1867 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
1868 }
1869 else {
1870 tracer.log(`Received response ${message.id} without active response promise.`, data);
1871 }
1872 }
1873 else {
1874 logLSPMessage('receive-response', message);
1875 }
1876 }
1877 function logLSPMessage(type, message) {
1878 if (!tracer || trace === Trace.Off) {
1879 return;
1880 }
1881 const lspMessage = {
1882 isLSPMessage: true,
1883 type,
1884 message,
1885 timestamp: Date.now()
1886 };
1887 tracer.log(lspMessage);
1888 }
1889 function throwIfClosedOrDisposed() {
1890 if (isClosed()) {
1891 throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
1892 }
1893 if (isDisposed()) {
1894 throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
1895 }
1896 }
1897 function throwIfListening() {
1898 if (isListening()) {
1899 throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
1900 }
1901 }
1902 function throwIfNotListening() {
1903 if (!isListening()) {
1904 throw new Error('Call listen() first.');
1905 }
1906 }
1907 function undefinedToNull(param) {
1908 if (param === void 0) {
1909 return null;
1910 }
1911 else {
1912 return param;
1913 }
1914 }
1915 function computeMessageParams(type, params) {
1916 let result;
1917 let numberOfParams = type.numberOfParams;
1918 switch (numberOfParams) {
1919 case 0:
1920 result = null;
1921 break;
1922 case 1:
1923 result = undefinedToNull(params[0]);
1924 break;
1925 default:
1926 result = [];
1927 for (let i = 0; i < params.length && i < numberOfParams; i++) {
1928 result.push(undefinedToNull(params[i]));
1929 }
1930 if (params.length < numberOfParams) {
1931 for (let i = params.length; i < numberOfParams; i++) {
1932 result.push(null);
1933 }
1934 }
1935 break;
1936 }
1937 return result;
1938 }
1939 let connection = {
1940 sendNotification: (type, ...params) => {
1941 throwIfClosedOrDisposed();
1942 let method;
1943 let messageParams;
1944 if (Is.string(type)) {
1945 method = type;
1946 switch (params.length) {
1947 case 0:
1948 messageParams = null;
1949 break;
1950 case 1:
1951 messageParams = params[0];
1952 break;
1953 default:
1954 messageParams = params;
1955 break;
1956 }
1957 }
1958 else {
1959 method = type.method;
1960 messageParams = computeMessageParams(type, params);
1961 }
1962 let notificationMessage = {
1963 jsonrpc: version,
1964 method: method,
1965 params: messageParams
1966 };
1967 traceSendingNotification(notificationMessage);
1968 messageWriter.write(notificationMessage);
1969 },
1970 onNotification: (type, handler) => {
1971 throwIfClosedOrDisposed();
1972 if (Is.func(type)) {
1973 starNotificationHandler = type;
1974 }
1975 else if (handler) {
1976 if (Is.string(type)) {
1977 notificationHandlers[type] = { type: undefined, handler };
1978 }
1979 else {
1980 notificationHandlers[type.method] = { type, handler };
1981 }
1982 }
1983 },
1984 sendRequest: (type, ...params) => {
1985 throwIfClosedOrDisposed();
1986 throwIfNotListening();
1987 let method;
1988 let messageParams;
1989 let token = undefined;
1990 if (Is.string(type)) {
1991 method = type;
1992 switch (params.length) {
1993 case 0:
1994 messageParams = null;
1995 break;
1996 case 1:
1997 // The cancellation token is optional so it can also be undefined.
1998 if (cancellation_1.CancellationToken.is(params[0])) {
1999 messageParams = null;
2000 token = params[0];
2001 }
2002 else {
2003 messageParams = undefinedToNull(params[0]);
2004 }
2005 break;
2006 default:
2007 const last = params.length - 1;
2008 if (cancellation_1.CancellationToken.is(params[last])) {
2009 token = params[last];
2010 if (params.length === 2) {
2011 messageParams = undefinedToNull(params[0]);
2012 }
2013 else {
2014 messageParams = params.slice(0, last).map(value => undefinedToNull(value));
2015 }
2016 }
2017 else {
2018 messageParams = params.map(value => undefinedToNull(value));
2019 }
2020 break;
2021 }
2022 }
2023 else {
2024 method = type.method;
2025 messageParams = computeMessageParams(type, params);
2026 let numberOfParams = type.numberOfParams;
2027 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
2028 }
2029 let id = sequenceNumber++;
2030 let result = new Promise((resolve, reject) => {
2031 let requestMessage = {
2032 jsonrpc: version,
2033 id: id,
2034 method: method,
2035 params: messageParams
2036 };
2037 let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };
2038 traceSendingRequest(requestMessage);
2039 try {
2040 messageWriter.write(requestMessage);
2041 }
2042 catch (e) {
2043 // Writing the message failed. So we need to reject the promise.
2044 responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
2045 responsePromise = null;
2046 }
2047 if (responsePromise) {
2048 responsePromises[String(id)] = responsePromise;
2049 }
2050 });
2051 if (token) {
2052 token.onCancellationRequested(() => {
2053 connection.sendNotification(CancelNotification.type, { id });
2054 });
2055 }
2056 return result;
2057 },
2058 onRequest: (type, handler) => {
2059 throwIfClosedOrDisposed();
2060 if (Is.func(type)) {
2061 starRequestHandler = type;
2062 }
2063 else if (handler) {
2064 if (Is.string(type)) {
2065 requestHandlers[type] = { type: undefined, handler };
2066 }
2067 else {
2068 requestHandlers[type.method] = { type, handler };
2069 }
2070 }
2071 },
2072 trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2073 let _sendNotification = false;
2074 let _traceFormat = TraceFormat.Text;
2075 if (sendNotificationOrTraceOptions !== void 0) {
2076 if (Is.boolean(sendNotificationOrTraceOptions)) {
2077 _sendNotification = sendNotificationOrTraceOptions;
2078 }
2079 else {
2080 _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2081 _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2082 }
2083 }
2084 trace = _value;
2085 traceFormat = _traceFormat;
2086 if (trace === Trace.Off) {
2087 tracer = undefined;
2088 }
2089 else {
2090 tracer = _tracer;
2091 }
2092 if (_sendNotification && !isClosed() && !isDisposed()) {
2093 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
2094 }
2095 },
2096 onError: errorEmitter.event,
2097 onClose: closeEmitter.event,
2098 onUnhandledNotification: unhandledNotificationEmitter.event,
2099 onDispose: disposeEmitter.event,
2100 dispose: () => {
2101 if (isDisposed()) {
2102 return;
2103 }
2104 state = ConnectionState.Disposed;
2105 disposeEmitter.fire(undefined);
2106 let error = new Error('Connection got disposed.');
2107 Object.keys(responsePromises).forEach((key) => {
2108 responsePromises[key].reject(error);
2109 });
2110 responsePromises = Object.create(null);
2111 requestTokens = Object.create(null);
2112 messageQueue = new linkedMap_1.LinkedMap();
2113 // Test for backwards compatibility
2114 if (Is.func(messageWriter.dispose)) {
2115 messageWriter.dispose();
2116 }
2117 if (Is.func(messageReader.dispose)) {
2118 messageReader.dispose();
2119 }
2120 },
2121 listen: () => {
2122 throwIfClosedOrDisposed();
2123 throwIfListening();
2124 state = ConnectionState.Listening;
2125 messageReader.listen(callback);
2126 },
2127 inspect: () => {
2128 console.log("inspect");
2129 }
2130 };
2131 connection.onNotification(LogTraceNotification.type, (params) => {
2132 if (trace === Trace.Off || !tracer) {
2133 return;
2134 }
2135 tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
2136 });
2137 return connection;
2138}
2139function isMessageReader(value) {
2140 return value.listen !== void 0 && value.read === void 0;
2141}
2142function isMessageWriter(value) {
2143 return value.write !== void 0 && value.end === void 0;
2144}
2145function createMessageConnection(input, output, logger, strategy) {
2146 if (!logger) {
2147 logger = exports.NullLogger;
2148 }
2149 let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
2150 let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
2151 return _createMessageConnection(reader, writer, logger, strategy);
2152}
2153exports.createMessageConnection = createMessageConnection;
2154
2155
2156/***/ }),
2157/* 7 */
2158/***/ (function(module, exports, __webpack_require__) {
2159
2160"use strict";
2161/* --------------------------------------------------------------------------------------------
2162 * Copyright (c) Microsoft Corporation. All rights reserved.
2163 * Licensed under the MIT License. See License.txt in the project root for license information.
2164 * ------------------------------------------------------------------------------------------ */
2165
2166Object.defineProperty(exports, "__esModule", { value: true });
2167function boolean(value) {
2168 return value === true || value === false;
2169}
2170exports.boolean = boolean;
2171function string(value) {
2172 return typeof value === 'string' || value instanceof String;
2173}
2174exports.string = string;
2175function number(value) {
2176 return typeof value === 'number' || value instanceof Number;
2177}
2178exports.number = number;
2179function error(value) {
2180 return value instanceof Error;
2181}
2182exports.error = error;
2183function func(value) {
2184 return typeof value === 'function';
2185}
2186exports.func = func;
2187function array(value) {
2188 return Array.isArray(value);
2189}
2190exports.array = array;
2191function stringArray(value) {
2192 return array(value) && value.every(elem => string(elem));
2193}
2194exports.stringArray = stringArray;
2195
2196
2197/***/ }),
2198/* 8 */
2199/***/ (function(module, exports, __webpack_require__) {
2200
2201"use strict";
2202/* --------------------------------------------------------------------------------------------
2203 * Copyright (c) Microsoft Corporation. All rights reserved.
2204 * Licensed under the MIT License. See License.txt in the project root for license information.
2205 * ------------------------------------------------------------------------------------------ */
2206
2207Object.defineProperty(exports, "__esModule", { value: true });
2208const is = __webpack_require__(7);
2209/**
2210 * Predefined error codes.
2211 */
2212var ErrorCodes;
2213(function (ErrorCodes) {
2214 // Defined by JSON RPC
2215 ErrorCodes.ParseError = -32700;
2216 ErrorCodes.InvalidRequest = -32600;
2217 ErrorCodes.MethodNotFound = -32601;
2218 ErrorCodes.InvalidParams = -32602;
2219 ErrorCodes.InternalError = -32603;
2220 ErrorCodes.serverErrorStart = -32099;
2221 ErrorCodes.serverErrorEnd = -32000;
2222 ErrorCodes.ServerNotInitialized = -32002;
2223 ErrorCodes.UnknownErrorCode = -32001;
2224 // Defined by the protocol.
2225 ErrorCodes.RequestCancelled = -32800;
2226 // Defined by VSCode library.
2227 ErrorCodes.MessageWriteError = 1;
2228 ErrorCodes.MessageReadError = 2;
2229})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
2230/**
2231 * An error object return in a response in case a request
2232 * has failed.
2233 */
2234class ResponseError extends Error {
2235 constructor(code, message, data) {
2236 super(message);
2237 this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
2238 this.data = data;
2239 Object.setPrototypeOf(this, ResponseError.prototype);
2240 }
2241 toJson() {
2242 return {
2243 code: this.code,
2244 message: this.message,
2245 data: this.data,
2246 };
2247 }
2248}
2249exports.ResponseError = ResponseError;
2250/**
2251 * An abstract implementation of a MessageType.
2252 */
2253class AbstractMessageType {
2254 constructor(_method, _numberOfParams) {
2255 this._method = _method;
2256 this._numberOfParams = _numberOfParams;
2257 }
2258 get method() {
2259 return this._method;
2260 }
2261 get numberOfParams() {
2262 return this._numberOfParams;
2263 }
2264}
2265exports.AbstractMessageType = AbstractMessageType;
2266/**
2267 * Classes to type request response pairs
2268 */
2269class RequestType0 extends AbstractMessageType {
2270 constructor(method) {
2271 super(method, 0);
2272 this._ = undefined;
2273 }
2274}
2275exports.RequestType0 = RequestType0;
2276class RequestType extends AbstractMessageType {
2277 constructor(method) {
2278 super(method, 1);
2279 this._ = undefined;
2280 }
2281}
2282exports.RequestType = RequestType;
2283class RequestType1 extends AbstractMessageType {
2284 constructor(method) {
2285 super(method, 1);
2286 this._ = undefined;
2287 }
2288}
2289exports.RequestType1 = RequestType1;
2290class RequestType2 extends AbstractMessageType {
2291 constructor(method) {
2292 super(method, 2);
2293 this._ = undefined;
2294 }
2295}
2296exports.RequestType2 = RequestType2;
2297class RequestType3 extends AbstractMessageType {
2298 constructor(method) {
2299 super(method, 3);
2300 this._ = undefined;
2301 }
2302}
2303exports.RequestType3 = RequestType3;
2304class RequestType4 extends AbstractMessageType {
2305 constructor(method) {
2306 super(method, 4);
2307 this._ = undefined;
2308 }
2309}
2310exports.RequestType4 = RequestType4;
2311class RequestType5 extends AbstractMessageType {
2312 constructor(method) {
2313 super(method, 5);
2314 this._ = undefined;
2315 }
2316}
2317exports.RequestType5 = RequestType5;
2318class RequestType6 extends AbstractMessageType {
2319 constructor(method) {
2320 super(method, 6);
2321 this._ = undefined;
2322 }
2323}
2324exports.RequestType6 = RequestType6;
2325class RequestType7 extends AbstractMessageType {
2326 constructor(method) {
2327 super(method, 7);
2328 this._ = undefined;
2329 }
2330}
2331exports.RequestType7 = RequestType7;
2332class RequestType8 extends AbstractMessageType {
2333 constructor(method) {
2334 super(method, 8);
2335 this._ = undefined;
2336 }
2337}
2338exports.RequestType8 = RequestType8;
2339class RequestType9 extends AbstractMessageType {
2340 constructor(method) {
2341 super(method, 9);
2342 this._ = undefined;
2343 }
2344}
2345exports.RequestType9 = RequestType9;
2346class NotificationType extends AbstractMessageType {
2347 constructor(method) {
2348 super(method, 1);
2349 this._ = undefined;
2350 }
2351}
2352exports.NotificationType = NotificationType;
2353class NotificationType0 extends AbstractMessageType {
2354 constructor(method) {
2355 super(method, 0);
2356 this._ = undefined;
2357 }
2358}
2359exports.NotificationType0 = NotificationType0;
2360class NotificationType1 extends AbstractMessageType {
2361 constructor(method) {
2362 super(method, 1);
2363 this._ = undefined;
2364 }
2365}
2366exports.NotificationType1 = NotificationType1;
2367class NotificationType2 extends AbstractMessageType {
2368 constructor(method) {
2369 super(method, 2);
2370 this._ = undefined;
2371 }
2372}
2373exports.NotificationType2 = NotificationType2;
2374class NotificationType3 extends AbstractMessageType {
2375 constructor(method) {
2376 super(method, 3);
2377 this._ = undefined;
2378 }
2379}
2380exports.NotificationType3 = NotificationType3;
2381class NotificationType4 extends AbstractMessageType {
2382 constructor(method) {
2383 super(method, 4);
2384 this._ = undefined;
2385 }
2386}
2387exports.NotificationType4 = NotificationType4;
2388class NotificationType5 extends AbstractMessageType {
2389 constructor(method) {
2390 super(method, 5);
2391 this._ = undefined;
2392 }
2393}
2394exports.NotificationType5 = NotificationType5;
2395class NotificationType6 extends AbstractMessageType {
2396 constructor(method) {
2397 super(method, 6);
2398 this._ = undefined;
2399 }
2400}
2401exports.NotificationType6 = NotificationType6;
2402class NotificationType7 extends AbstractMessageType {
2403 constructor(method) {
2404 super(method, 7);
2405 this._ = undefined;
2406 }
2407}
2408exports.NotificationType7 = NotificationType7;
2409class NotificationType8 extends AbstractMessageType {
2410 constructor(method) {
2411 super(method, 8);
2412 this._ = undefined;
2413 }
2414}
2415exports.NotificationType8 = NotificationType8;
2416class NotificationType9 extends AbstractMessageType {
2417 constructor(method) {
2418 super(method, 9);
2419 this._ = undefined;
2420 }
2421}
2422exports.NotificationType9 = NotificationType9;
2423/**
2424 * Tests if the given message is a request message
2425 */
2426function isRequestMessage(message) {
2427 let candidate = message;
2428 return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
2429}
2430exports.isRequestMessage = isRequestMessage;
2431/**
2432 * Tests if the given message is a notification message
2433 */
2434function isNotificationMessage(message) {
2435 let candidate = message;
2436 return candidate && is.string(candidate.method) && message.id === void 0;
2437}
2438exports.isNotificationMessage = isNotificationMessage;
2439/**
2440 * Tests if the given message is a response message
2441 */
2442function isResponseMessage(message) {
2443 let candidate = message;
2444 return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
2445}
2446exports.isResponseMessage = isResponseMessage;
2447
2448
2449/***/ }),
2450/* 9 */
2451/***/ (function(module, exports, __webpack_require__) {
2452
2453"use strict";
2454/* --------------------------------------------------------------------------------------------
2455 * Copyright (c) Microsoft Corporation. All rights reserved.
2456 * Licensed under the MIT License. See License.txt in the project root for license information.
2457 * ------------------------------------------------------------------------------------------ */
2458
2459Object.defineProperty(exports, "__esModule", { value: true });
2460const events_1 = __webpack_require__(10);
2461const Is = __webpack_require__(7);
2462let DefaultSize = 8192;
2463let CR = Buffer.from('\r', 'ascii')[0];
2464let LF = Buffer.from('\n', 'ascii')[0];
2465let CRLF = '\r\n';
2466class MessageBuffer {
2467 constructor(encoding = 'utf8') {
2468 this.encoding = encoding;
2469 this.index = 0;
2470 this.buffer = Buffer.allocUnsafe(DefaultSize);
2471 }
2472 append(chunk) {
2473 var toAppend = chunk;
2474 if (typeof (chunk) === 'string') {
2475 var str = chunk;
2476 var bufferLen = Buffer.byteLength(str, this.encoding);
2477 toAppend = Buffer.allocUnsafe(bufferLen);
2478 toAppend.write(str, 0, bufferLen, this.encoding);
2479 }
2480 if (this.buffer.length - this.index >= toAppend.length) {
2481 toAppend.copy(this.buffer, this.index, 0, toAppend.length);
2482 }
2483 else {
2484 var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
2485 if (this.index === 0) {
2486 this.buffer = Buffer.allocUnsafe(newSize);
2487 toAppend.copy(this.buffer, 0, 0, toAppend.length);
2488 }
2489 else {
2490 this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
2491 }
2492 }
2493 this.index += toAppend.length;
2494 }
2495 tryReadHeaders() {
2496 let result = undefined;
2497 let current = 0;
2498 while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
2499 current++;
2500 }
2501 // No header / body separator found (e.g CRLFCRLF)
2502 if (current + 3 >= this.index) {
2503 return result;
2504 }
2505 result = Object.create(null);
2506 let headers = this.buffer.toString('ascii', 0, current).split(CRLF);
2507 headers.forEach((header) => {
2508 let index = header.indexOf(':');
2509 if (index === -1) {
2510 throw new Error('Message header must separate key and value using :');
2511 }
2512 let key = header.substr(0, index);
2513 let value = header.substr(index + 1).trim();
2514 result[key] = value;
2515 });
2516 let nextStart = current + 4;
2517 this.buffer = this.buffer.slice(nextStart);
2518 this.index = this.index - nextStart;
2519 return result;
2520 }
2521 tryReadContent(length) {
2522 if (this.index < length) {
2523 return null;
2524 }
2525 let result = this.buffer.toString(this.encoding, 0, length);
2526 let nextStart = length;
2527 this.buffer.copy(this.buffer, 0, nextStart);
2528 this.index = this.index - nextStart;
2529 return result;
2530 }
2531 get numberOfBytes() {
2532 return this.index;
2533 }
2534}
2535var MessageReader;
2536(function (MessageReader) {
2537 function is(value) {
2538 let candidate = value;
2539 return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
2540 Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
2541 }
2542 MessageReader.is = is;
2543})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
2544class AbstractMessageReader {
2545 constructor() {
2546 this.errorEmitter = new events_1.Emitter();
2547 this.closeEmitter = new events_1.Emitter();
2548 this.partialMessageEmitter = new events_1.Emitter();
2549 }
2550 dispose() {
2551 this.errorEmitter.dispose();
2552 this.closeEmitter.dispose();
2553 }
2554 get onError() {
2555 return this.errorEmitter.event;
2556 }
2557 fireError(error) {
2558 this.errorEmitter.fire(this.asError(error));
2559 }
2560 get onClose() {
2561 return this.closeEmitter.event;
2562 }
2563 fireClose() {
2564 this.closeEmitter.fire(undefined);
2565 }
2566 get onPartialMessage() {
2567 return this.partialMessageEmitter.event;
2568 }
2569 firePartialMessage(info) {
2570 this.partialMessageEmitter.fire(info);
2571 }
2572 asError(error) {
2573 if (error instanceof Error) {
2574 return error;
2575 }
2576 else {
2577 return new Error(`Reader recevied error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2578 }
2579 }
2580}
2581exports.AbstractMessageReader = AbstractMessageReader;
2582class StreamMessageReader extends AbstractMessageReader {
2583 constructor(readable, encoding = 'utf8') {
2584 super();
2585 this.readable = readable;
2586 this.buffer = new MessageBuffer(encoding);
2587 this._partialMessageTimeout = 10000;
2588 }
2589 set partialMessageTimeout(timeout) {
2590 this._partialMessageTimeout = timeout;
2591 }
2592 get partialMessageTimeout() {
2593 return this._partialMessageTimeout;
2594 }
2595 listen(callback) {
2596 this.nextMessageLength = -1;
2597 this.messageToken = 0;
2598 this.partialMessageTimer = undefined;
2599 this.callback = callback;
2600 this.readable.on('data', (data) => {
2601 this.onData(data);
2602 });
2603 this.readable.on('error', (error) => this.fireError(error));
2604 this.readable.on('close', () => this.fireClose());
2605 }
2606 onData(data) {
2607 this.buffer.append(data);
2608 while (true) {
2609 if (this.nextMessageLength === -1) {
2610 let headers = this.buffer.tryReadHeaders();
2611 if (!headers) {
2612 return;
2613 }
2614 let contentLength = headers['Content-Length'];
2615 if (!contentLength) {
2616 throw new Error('Header must provide a Content-Length property.');
2617 }
2618 let length = parseInt(contentLength);
2619 if (isNaN(length)) {
2620 throw new Error('Content-Length value must be a number.');
2621 }
2622 this.nextMessageLength = length;
2623 // Take the encoding form the header. For compatibility
2624 // treat both utf-8 and utf8 as node utf8
2625 }
2626 var msg = this.buffer.tryReadContent(this.nextMessageLength);
2627 if (msg === null) {
2628 /** We haven't recevied the full message yet. */
2629 this.setPartialMessageTimer();
2630 return;
2631 }
2632 this.clearPartialMessageTimer();
2633 this.nextMessageLength = -1;
2634 this.messageToken++;
2635 var json = JSON.parse(msg);
2636 this.callback(json);
2637 }
2638 }
2639 clearPartialMessageTimer() {
2640 if (this.partialMessageTimer) {
2641 clearTimeout(this.partialMessageTimer);
2642 this.partialMessageTimer = undefined;
2643 }
2644 }
2645 setPartialMessageTimer() {
2646 this.clearPartialMessageTimer();
2647 if (this._partialMessageTimeout <= 0) {
2648 return;
2649 }
2650 this.partialMessageTimer = setTimeout((token, timeout) => {
2651 this.partialMessageTimer = undefined;
2652 if (token === this.messageToken) {
2653 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
2654 this.setPartialMessageTimer();
2655 }
2656 }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
2657 }
2658}
2659exports.StreamMessageReader = StreamMessageReader;
2660class IPCMessageReader extends AbstractMessageReader {
2661 constructor(process) {
2662 super();
2663 this.process = process;
2664 let eventEmitter = this.process;
2665 eventEmitter.on('error', (error) => this.fireError(error));
2666 eventEmitter.on('close', () => this.fireClose());
2667 }
2668 listen(callback) {
2669 this.process.on('message', callback);
2670 }
2671}
2672exports.IPCMessageReader = IPCMessageReader;
2673class SocketMessageReader extends StreamMessageReader {
2674 constructor(socket, encoding = 'utf-8') {
2675 super(socket, encoding);
2676 }
2677}
2678exports.SocketMessageReader = SocketMessageReader;
2679
2680
2681/***/ }),
2682/* 10 */
2683/***/ (function(module, exports, __webpack_require__) {
2684
2685"use strict";
2686/* --------------------------------------------------------------------------------------------
2687 * Copyright (c) Microsoft Corporation. All rights reserved.
2688 * Licensed under the MIT License. See License.txt in the project root for license information.
2689 * ------------------------------------------------------------------------------------------ */
2690
2691Object.defineProperty(exports, "__esModule", { value: true });
2692var Disposable;
2693(function (Disposable) {
2694 function create(func) {
2695 return {
2696 dispose: func
2697 };
2698 }
2699 Disposable.create = create;
2700})(Disposable = exports.Disposable || (exports.Disposable = {}));
2701var Event;
2702(function (Event) {
2703 const _disposable = { dispose() { } };
2704 Event.None = function () { return _disposable; };
2705})(Event = exports.Event || (exports.Event = {}));
2706class CallbackList {
2707 add(callback, context = null, bucket) {
2708 if (!this._callbacks) {
2709 this._callbacks = [];
2710 this._contexts = [];
2711 }
2712 this._callbacks.push(callback);
2713 this._contexts.push(context);
2714 if (Array.isArray(bucket)) {
2715 bucket.push({ dispose: () => this.remove(callback, context) });
2716 }
2717 }
2718 remove(callback, context = null) {
2719 if (!this._callbacks) {
2720 return;
2721 }
2722 var foundCallbackWithDifferentContext = false;
2723 for (var i = 0, len = this._callbacks.length; i < len; i++) {
2724 if (this._callbacks[i] === callback) {
2725 if (this._contexts[i] === context) {
2726 // callback & context match => remove it
2727 this._callbacks.splice(i, 1);
2728 this._contexts.splice(i, 1);
2729 return;
2730 }
2731 else {
2732 foundCallbackWithDifferentContext = true;
2733 }
2734 }
2735 }
2736 if (foundCallbackWithDifferentContext) {
2737 throw new Error('When adding a listener with a context, you should remove it with the same context');
2738 }
2739 }
2740 invoke(...args) {
2741 if (!this._callbacks) {
2742 return [];
2743 }
2744 var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
2745 for (var i = 0, len = callbacks.length; i < len; i++) {
2746 try {
2747 ret.push(callbacks[i].apply(contexts[i], args));
2748 }
2749 catch (e) {
2750 console.error(e);
2751 }
2752 }
2753 return ret;
2754 }
2755 isEmpty() {
2756 return !this._callbacks || this._callbacks.length === 0;
2757 }
2758 dispose() {
2759 this._callbacks = undefined;
2760 this._contexts = undefined;
2761 }
2762}
2763class Emitter {
2764 constructor(_options) {
2765 this._options = _options;
2766 }
2767 /**
2768 * For the public to allow to subscribe
2769 * to events from this Emitter
2770 */
2771 get event() {
2772 if (!this._event) {
2773 this._event = (listener, thisArgs, disposables) => {
2774 if (!this._callbacks) {
2775 this._callbacks = new CallbackList();
2776 }
2777 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
2778 this._options.onFirstListenerAdd(this);
2779 }
2780 this._callbacks.add(listener, thisArgs);
2781 let result;
2782 result = {
2783 dispose: () => {
2784 this._callbacks.remove(listener, thisArgs);
2785 result.dispose = Emitter._noop;
2786 if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
2787 this._options.onLastListenerRemove(this);
2788 }
2789 }
2790 };
2791 if (Array.isArray(disposables)) {
2792 disposables.push(result);
2793 }
2794 return result;
2795 };
2796 }
2797 return this._event;
2798 }
2799 /**
2800 * To be kept private to fire an event to
2801 * subscribers
2802 */
2803 fire(event) {
2804 if (this._callbacks) {
2805 this._callbacks.invoke.call(this._callbacks, event);
2806 }
2807 }
2808 dispose() {
2809 if (this._callbacks) {
2810 this._callbacks.dispose();
2811 this._callbacks = undefined;
2812 }
2813 }
2814}
2815Emitter._noop = function () { };
2816exports.Emitter = Emitter;
2817
2818
2819/***/ }),
2820/* 11 */
2821/***/ (function(module, exports, __webpack_require__) {
2822
2823"use strict";
2824/* --------------------------------------------------------------------------------------------
2825 * Copyright (c) Microsoft Corporation. All rights reserved.
2826 * Licensed under the MIT License. See License.txt in the project root for license information.
2827 * ------------------------------------------------------------------------------------------ */
2828
2829Object.defineProperty(exports, "__esModule", { value: true });
2830const events_1 = __webpack_require__(10);
2831const Is = __webpack_require__(7);
2832let ContentLength = 'Content-Length: ';
2833let CRLF = '\r\n';
2834var MessageWriter;
2835(function (MessageWriter) {
2836 function is(value) {
2837 let candidate = value;
2838 return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
2839 Is.func(candidate.onError) && Is.func(candidate.write);
2840 }
2841 MessageWriter.is = is;
2842})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
2843class AbstractMessageWriter {
2844 constructor() {
2845 this.errorEmitter = new events_1.Emitter();
2846 this.closeEmitter = new events_1.Emitter();
2847 }
2848 dispose() {
2849 this.errorEmitter.dispose();
2850 this.closeEmitter.dispose();
2851 }
2852 get onError() {
2853 return this.errorEmitter.event;
2854 }
2855 fireError(error, message, count) {
2856 this.errorEmitter.fire([this.asError(error), message, count]);
2857 }
2858 get onClose() {
2859 return this.closeEmitter.event;
2860 }
2861 fireClose() {
2862 this.closeEmitter.fire(undefined);
2863 }
2864 asError(error) {
2865 if (error instanceof Error) {
2866 return error;
2867 }
2868 else {
2869 return new Error(`Writer recevied error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2870 }
2871 }
2872}
2873exports.AbstractMessageWriter = AbstractMessageWriter;
2874class StreamMessageWriter extends AbstractMessageWriter {
2875 constructor(writable, encoding = 'utf8') {
2876 super();
2877 this.writable = writable;
2878 this.encoding = encoding;
2879 this.errorCount = 0;
2880 this.writable.on('error', (error) => this.fireError(error));
2881 this.writable.on('close', () => this.fireClose());
2882 }
2883 write(msg) {
2884 let json = JSON.stringify(msg);
2885 let contentLength = Buffer.byteLength(json, this.encoding);
2886 let headers = [
2887 ContentLength, contentLength.toString(), CRLF,
2888 CRLF
2889 ];
2890 try {
2891 // Header must be written in ASCII encoding
2892 this.writable.write(headers.join(''), 'ascii');
2893 // Now write the content. This can be written in any encoding
2894 this.writable.write(json, this.encoding);
2895 this.errorCount = 0;
2896 }
2897 catch (error) {
2898 this.errorCount++;
2899 this.fireError(error, msg, this.errorCount);
2900 }
2901 }
2902}
2903exports.StreamMessageWriter = StreamMessageWriter;
2904class IPCMessageWriter extends AbstractMessageWriter {
2905 constructor(process) {
2906 super();
2907 this.process = process;
2908 this.errorCount = 0;
2909 this.queue = [];
2910 this.sending = false;
2911 let eventEmitter = this.process;
2912 eventEmitter.on('error', (error) => this.fireError(error));
2913 eventEmitter.on('close', () => this.fireClose);
2914 }
2915 write(msg) {
2916 if (!this.sending && this.queue.length === 0) {
2917 // See https://github.com/nodejs/node/issues/7657
2918 this.doWriteMessage(msg);
2919 }
2920 else {
2921 this.queue.push(msg);
2922 }
2923 }
2924 doWriteMessage(msg) {
2925 try {
2926 if (this.process.send) {
2927 this.sending = true;
2928 this.process.send(msg, undefined, undefined, (error) => {
2929 this.sending = false;
2930 if (error) {
2931 this.errorCount++;
2932 this.fireError(error, msg, this.errorCount);
2933 }
2934 else {
2935 this.errorCount = 0;
2936 }
2937 if (this.queue.length > 0) {
2938 this.doWriteMessage(this.queue.shift());
2939 }
2940 });
2941 }
2942 }
2943 catch (error) {
2944 this.errorCount++;
2945 this.fireError(error, msg, this.errorCount);
2946 }
2947 }
2948}
2949exports.IPCMessageWriter = IPCMessageWriter;
2950class SocketMessageWriter extends AbstractMessageWriter {
2951 constructor(socket, encoding = 'utf8') {
2952 super();
2953 this.socket = socket;
2954 this.queue = [];
2955 this.sending = false;
2956 this.encoding = encoding;
2957 this.errorCount = 0;
2958 this.socket.on('error', (error) => this.fireError(error));
2959 this.socket.on('close', () => this.fireClose());
2960 }
2961 write(msg) {
2962 if (!this.sending && this.queue.length === 0) {
2963 // See https://github.com/nodejs/node/issues/7657
2964 this.doWriteMessage(msg);
2965 }
2966 else {
2967 this.queue.push(msg);
2968 }
2969 }
2970 doWriteMessage(msg) {
2971 let json = JSON.stringify(msg);
2972 let contentLength = Buffer.byteLength(json, this.encoding);
2973 let headers = [
2974 ContentLength, contentLength.toString(), CRLF,
2975 CRLF
2976 ];
2977 try {
2978 // Header must be written in ASCII encoding
2979 this.sending = true;
2980 this.socket.write(headers.join(''), 'ascii', (error) => {
2981 if (error) {
2982 this.handleError(error, msg);
2983 }
2984 try {
2985 // Now write the content. This can be written in any encoding
2986 this.socket.write(json, this.encoding, (error) => {
2987 this.sending = false;
2988 if (error) {
2989 this.handleError(error, msg);
2990 }
2991 else {
2992 this.errorCount = 0;
2993 }
2994 if (this.queue.length > 0) {
2995 this.doWriteMessage(this.queue.shift());
2996 }
2997 });
2998 }
2999 catch (error) {
3000 this.handleError(error, msg);
3001 }
3002 });
3003 }
3004 catch (error) {
3005 this.handleError(error, msg);
3006 }
3007 }
3008 handleError(error, msg) {
3009 this.errorCount++;
3010 this.fireError(error, msg, this.errorCount);
3011 }
3012}
3013exports.SocketMessageWriter = SocketMessageWriter;
3014
3015
3016/***/ }),
3017/* 12 */
3018/***/ (function(module, exports, __webpack_require__) {
3019
3020"use strict";
3021/*---------------------------------------------------------------------------------------------
3022 * Copyright (c) Microsoft Corporation. All rights reserved.
3023 * Licensed under the MIT License. See License.txt in the project root for license information.
3024 *--------------------------------------------------------------------------------------------*/
3025
3026Object.defineProperty(exports, "__esModule", { value: true });
3027const events_1 = __webpack_require__(10);
3028const Is = __webpack_require__(7);
3029var CancellationToken;
3030(function (CancellationToken) {
3031 CancellationToken.None = Object.freeze({
3032 isCancellationRequested: false,
3033 onCancellationRequested: events_1.Event.None
3034 });
3035 CancellationToken.Cancelled = Object.freeze({
3036 isCancellationRequested: true,
3037 onCancellationRequested: events_1.Event.None
3038 });
3039 function is(value) {
3040 let candidate = value;
3041 return candidate && (candidate === CancellationToken.None
3042 || candidate === CancellationToken.Cancelled
3043 || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
3044 }
3045 CancellationToken.is = is;
3046})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
3047const shortcutEvent = Object.freeze(function (callback, context) {
3048 let handle = setTimeout(callback.bind(context), 0);
3049 return { dispose() { clearTimeout(handle); } };
3050});
3051class MutableToken {
3052 constructor() {
3053 this._isCancelled = false;
3054 }
3055 cancel() {
3056 if (!this._isCancelled) {
3057 this._isCancelled = true;
3058 if (this._emitter) {
3059 this._emitter.fire(undefined);
3060 this._emitter = undefined;
3061 }
3062 }
3063 }
3064 get isCancellationRequested() {
3065 return this._isCancelled;
3066 }
3067 get onCancellationRequested() {
3068 if (this._isCancelled) {
3069 return shortcutEvent;
3070 }
3071 if (!this._emitter) {
3072 this._emitter = new events_1.Emitter();
3073 }
3074 return this._emitter.event;
3075 }
3076}
3077class CancellationTokenSource {
3078 get token() {
3079 if (!this._token) {
3080 // be lazy and create the token only when
3081 // actually needed
3082 this._token = new MutableToken();
3083 }
3084 return this._token;
3085 }
3086 cancel() {
3087 if (!this._token) {
3088 // save an object by returning the default
3089 // cancelled token when cancellation happens
3090 // before someone asks for the token
3091 this._token = CancellationToken.Cancelled;
3092 }
3093 else {
3094 this._token.cancel();
3095 }
3096 }
3097 dispose() {
3098 this.cancel();
3099 }
3100}
3101exports.CancellationTokenSource = CancellationTokenSource;
3102
3103
3104/***/ }),
3105/* 13 */
3106/***/ (function(module, exports, __webpack_require__) {
3107
3108"use strict";
3109
3110/*---------------------------------------------------------------------------------------------
3111 * Copyright (c) Microsoft Corporation. All rights reserved.
3112 * Licensed under the MIT License. See License.txt in the project root for license information.
3113 *--------------------------------------------------------------------------------------------*/
3114Object.defineProperty(exports, "__esModule", { value: true });
3115var Touch;
3116(function (Touch) {
3117 Touch.None = 0;
3118 Touch.First = 1;
3119 Touch.Last = 2;
3120})(Touch = exports.Touch || (exports.Touch = {}));
3121class LinkedMap {
3122 constructor() {
3123 this._map = new Map();
3124 this._head = undefined;
3125 this._tail = undefined;
3126 this._size = 0;
3127 }
3128 clear() {
3129 this._map.clear();
3130 this._head = undefined;
3131 this._tail = undefined;
3132 this._size = 0;
3133 }
3134 isEmpty() {
3135 return !this._head && !this._tail;
3136 }
3137 get size() {
3138 return this._size;
3139 }
3140 has(key) {
3141 return this._map.has(key);
3142 }
3143 get(key) {
3144 const item = this._map.get(key);
3145 if (!item) {
3146 return undefined;
3147 }
3148 return item.value;
3149 }
3150 set(key, value, touch = Touch.None) {
3151 let item = this._map.get(key);
3152 if (item) {
3153 item.value = value;
3154 if (touch !== Touch.None) {
3155 this.touch(item, touch);
3156 }
3157 }
3158 else {
3159 item = { key, value, next: undefined, previous: undefined };
3160 switch (touch) {
3161 case Touch.None:
3162 this.addItemLast(item);
3163 break;
3164 case Touch.First:
3165 this.addItemFirst(item);
3166 break;
3167 case Touch.Last:
3168 this.addItemLast(item);
3169 break;
3170 default:
3171 this.addItemLast(item);
3172 break;
3173 }
3174 this._map.set(key, item);
3175 this._size++;
3176 }
3177 }
3178 delete(key) {
3179 const item = this._map.get(key);
3180 if (!item) {
3181 return false;
3182 }
3183 this._map.delete(key);
3184 this.removeItem(item);
3185 this._size--;
3186 return true;
3187 }
3188 shift() {
3189 if (!this._head && !this._tail) {
3190 return undefined;
3191 }
3192 if (!this._head || !this._tail) {
3193 throw new Error('Invalid list');
3194 }
3195 const item = this._head;
3196 this._map.delete(item.key);
3197 this.removeItem(item);
3198 this._size--;
3199 return item.value;
3200 }
3201 forEach(callbackfn, thisArg) {
3202 let current = this._head;
3203 while (current) {
3204 if (thisArg) {
3205 callbackfn.bind(thisArg)(current.value, current.key, this);
3206 }
3207 else {
3208 callbackfn(current.value, current.key, this);
3209 }
3210 current = current.next;
3211 }
3212 }
3213 forEachReverse(callbackfn, thisArg) {
3214 let current = this._tail;
3215 while (current) {
3216 if (thisArg) {
3217 callbackfn.bind(thisArg)(current.value, current.key, this);
3218 }
3219 else {
3220 callbackfn(current.value, current.key, this);
3221 }
3222 current = current.previous;
3223 }
3224 }
3225 values() {
3226 let result = [];
3227 let current = this._head;
3228 while (current) {
3229 result.push(current.value);
3230 current = current.next;
3231 }
3232 return result;
3233 }
3234 keys() {
3235 let result = [];
3236 let current = this._head;
3237 while (current) {
3238 result.push(current.key);
3239 current = current.next;
3240 }
3241 return result;
3242 }
3243 /* JSON RPC run on es5 which has no Symbol.iterator
3244 public keys(): IterableIterator<K> {
3245 let current = this._head;
3246 let iterator: IterableIterator<K> = {
3247 [Symbol.iterator]() {
3248 return iterator;
3249 },
3250 next():IteratorResult<K> {
3251 if (current) {
3252 let result = { value: current.key, done: false };
3253 current = current.next;
3254 return result;
3255 } else {
3256 return { value: undefined, done: true };
3257 }
3258 }
3259 };
3260 return iterator;
3261 }
3262
3263 public values(): IterableIterator<V> {
3264 let current = this._head;
3265 let iterator: IterableIterator<V> = {
3266 [Symbol.iterator]() {
3267 return iterator;
3268 },
3269 next():IteratorResult<V> {
3270 if (current) {
3271 let result = { value: current.value, done: false };
3272 current = current.next;
3273 return result;
3274 } else {
3275 return { value: undefined, done: true };
3276 }
3277 }
3278 };
3279 return iterator;
3280 }
3281 */
3282 addItemFirst(item) {
3283 // First time Insert
3284 if (!this._head && !this._tail) {
3285 this._tail = item;
3286 }
3287 else if (!this._head) {
3288 throw new Error('Invalid list');
3289 }
3290 else {
3291 item.next = this._head;
3292 this._head.previous = item;
3293 }
3294 this._head = item;
3295 }
3296 addItemLast(item) {
3297 // First time Insert
3298 if (!this._head && !this._tail) {
3299 this._head = item;
3300 }
3301 else if (!this._tail) {
3302 throw new Error('Invalid list');
3303 }
3304 else {
3305 item.previous = this._tail;
3306 this._tail.next = item;
3307 }
3308 this._tail = item;
3309 }
3310 removeItem(item) {
3311 if (item === this._head && item === this._tail) {
3312 this._head = undefined;
3313 this._tail = undefined;
3314 }
3315 else if (item === this._head) {
3316 this._head = item.next;
3317 }
3318 else if (item === this._tail) {
3319 this._tail = item.previous;
3320 }
3321 else {
3322 const next = item.next;
3323 const previous = item.previous;
3324 if (!next || !previous) {
3325 throw new Error('Invalid list');
3326 }
3327 next.previous = previous;
3328 previous.next = next;
3329 }
3330 }
3331 touch(item, touch) {
3332 if (!this._head || !this._tail) {
3333 throw new Error('Invalid list');
3334 }
3335 if ((touch !== Touch.First && touch !== Touch.Last)) {
3336 return;
3337 }
3338 if (touch === Touch.First) {
3339 if (item === this._head) {
3340 return;
3341 }
3342 const next = item.next;
3343 const previous = item.previous;
3344 // Unlink the item
3345 if (item === this._tail) {
3346 // previous must be defined since item was not head but is tail
3347 // So there are more than on item in the map
3348 previous.next = undefined;
3349 this._tail = previous;
3350 }
3351 else {
3352 // Both next and previous are not undefined since item was neither head nor tail.
3353 next.previous = previous;
3354 previous.next = next;
3355 }
3356 // Insert the node at head
3357 item.previous = undefined;
3358 item.next = this._head;
3359 this._head.previous = item;
3360 this._head = item;
3361 }
3362 else if (touch === Touch.Last) {
3363 if (item === this._tail) {
3364 return;
3365 }
3366 const next = item.next;
3367 const previous = item.previous;
3368 // Unlink the item.
3369 if (item === this._head) {
3370 // next must be defined since item was not tail but is head
3371 // So there are more than on item in the map
3372 next.previous = undefined;
3373 this._head = next;
3374 }
3375 else {
3376 // Both next and previous are not undefined since item was neither head nor tail.
3377 next.previous = previous;
3378 previous.next = next;
3379 }
3380 item.next = undefined;
3381 item.previous = this._tail;
3382 this._tail.next = item;
3383 this._tail = item;
3384 }
3385 }
3386}
3387exports.LinkedMap = LinkedMap;
3388
3389
3390/***/ }),
3391/* 14 */
3392/***/ (function(module, exports, __webpack_require__) {
3393
3394"use strict";
3395/* --------------------------------------------------------------------------------------------
3396 * Copyright (c) Microsoft Corporation. All rights reserved.
3397 * Licensed under the MIT License. See License.txt in the project root for license information.
3398 * ------------------------------------------------------------------------------------------ */
3399
3400Object.defineProperty(exports, "__esModule", { value: true });
3401const path_1 = __webpack_require__(15);
3402const os_1 = __webpack_require__(16);
3403const crypto_1 = __webpack_require__(17);
3404const net_1 = __webpack_require__(18);
3405const messageReader_1 = __webpack_require__(9);
3406const messageWriter_1 = __webpack_require__(11);
3407function generateRandomPipeName() {
3408 const randomSuffix = crypto_1.randomBytes(21).toString('hex');
3409 if (process.platform === 'win32') {
3410 return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
3411 }
3412 else {
3413 // Mac/Unix: use socket file
3414 return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
3415 }
3416}
3417exports.generateRandomPipeName = generateRandomPipeName;
3418function createClientPipeTransport(pipeName, encoding = 'utf-8') {
3419 let connectResolve;
3420 let connected = new Promise((resolve, _reject) => {
3421 connectResolve = resolve;
3422 });
3423 return new Promise((resolve, reject) => {
3424 let server = net_1.createServer((socket) => {
3425 server.close();
3426 connectResolve([
3427 new messageReader_1.SocketMessageReader(socket, encoding),
3428 new messageWriter_1.SocketMessageWriter(socket, encoding)
3429 ]);
3430 });
3431 server.on('error', reject);
3432 server.listen(pipeName, () => {
3433 server.removeListener('error', reject);
3434 resolve({
3435 onConnected: () => { return connected; }
3436 });
3437 });
3438 });
3439}
3440exports.createClientPipeTransport = createClientPipeTransport;
3441function createServerPipeTransport(pipeName, encoding = 'utf-8') {
3442 const socket = net_1.createConnection(pipeName);
3443 return [
3444 new messageReader_1.SocketMessageReader(socket, encoding),
3445 new messageWriter_1.SocketMessageWriter(socket, encoding)
3446 ];
3447}
3448exports.createServerPipeTransport = createServerPipeTransport;
3449
3450
3451/***/ }),
3452/* 15 */
3453/***/ (function(module, exports) {
3454
3455module.exports = require("path");
3456
3457/***/ }),
3458/* 16 */
3459/***/ (function(module, exports) {
3460
3461module.exports = require("os");
3462
3463/***/ }),
3464/* 17 */
3465/***/ (function(module, exports) {
3466
3467module.exports = require("crypto");
3468
3469/***/ }),
3470/* 18 */
3471/***/ (function(module, exports) {
3472
3473module.exports = require("net");
3474
3475/***/ }),
3476/* 19 */
3477/***/ (function(module, exports, __webpack_require__) {
3478
3479"use strict";
3480/* --------------------------------------------------------------------------------------------
3481 * Copyright (c) Microsoft Corporation. All rights reserved.
3482 * Licensed under the MIT License. See License.txt in the project root for license information.
3483 * ------------------------------------------------------------------------------------------ */
3484
3485Object.defineProperty(exports, "__esModule", { value: true });
3486const net_1 = __webpack_require__(18);
3487const messageReader_1 = __webpack_require__(9);
3488const messageWriter_1 = __webpack_require__(11);
3489function createClientSocketTransport(port, encoding = 'utf-8') {
3490 let connectResolve;
3491 let connected = new Promise((resolve, _reject) => {
3492 connectResolve = resolve;
3493 });
3494 return new Promise((resolve, reject) => {
3495 let server = net_1.createServer((socket) => {
3496 server.close();
3497 connectResolve([
3498 new messageReader_1.SocketMessageReader(socket, encoding),
3499 new messageWriter_1.SocketMessageWriter(socket, encoding)
3500 ]);
3501 });
3502 server.on('error', reject);
3503 server.listen(port, '127.0.0.1', () => {
3504 server.removeListener('error', reject);
3505 resolve({
3506 onConnected: () => { return connected; }
3507 });
3508 });
3509 });
3510}
3511exports.createClientSocketTransport = createClientSocketTransport;
3512function createServerSocketTransport(port, encoding = 'utf-8') {
3513 const socket = net_1.createConnection(port, '127.0.0.1');
3514 return [
3515 new messageReader_1.SocketMessageReader(socket, encoding),
3516 new messageWriter_1.SocketMessageWriter(socket, encoding)
3517 ];
3518}
3519exports.createServerSocketTransport = createServerSocketTransport;
3520
3521
3522/***/ }),
3523/* 20 */
3524/***/ (function(module, __webpack_exports__, __webpack_require__) {
3525
3526"use strict";
3527__webpack_require__.r(__webpack_exports__);
3528/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });
3529/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Range", function() { return Range; });
3530/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
3531/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationLink", function() { return LocationLink; });
3532/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; });
3533/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorInformation", function() { return ColorInformation; });
3534/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPresentation", function() { return ColorPresentation; });
3535/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRangeKind", function() { return FoldingRangeKind; });
3536/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRange", function() { return FoldingRange; });
3537/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticRelatedInformation", function() { return DiagnosticRelatedInformation; });
3538/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticSeverity", function() { return DiagnosticSeverity; });
3539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Diagnostic", function() { return Diagnostic; });
3540/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Command", function() { return Command; });
3541/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEdit", function() { return TextEdit; });
3542/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentEdit", function() { return TextDocumentEdit; });
3543/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateFile", function() { return CreateFile; });
3544/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenameFile", function() { return RenameFile; });
3545/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DeleteFile", function() { return DeleteFile; });
3546/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceEdit", function() { return WorkspaceEdit; });
3547/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceChange", function() { return WorkspaceChange; });
3548/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentIdentifier", function() { return TextDocumentIdentifier; });
3549/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VersionedTextDocumentIdentifier", function() { return VersionedTextDocumentIdentifier; });
3550/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentItem", function() { return TextDocumentItem; });
3551/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupKind", function() { return MarkupKind; });
3552/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupContent", function() { return MarkupContent; });
3553/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemKind", function() { return CompletionItemKind; });
3554/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InsertTextFormat", function() { return InsertTextFormat; });
3555/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItem", function() { return CompletionItem; });
3556/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionList", function() { return CompletionList; });
3557/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkedString", function() { return MarkedString; });
3558/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hover", function() { return Hover; });
3559/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParameterInformation", function() { return ParameterInformation; });
3560/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignatureInformation", function() { return SignatureInformation; });
3561/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlightKind", function() { return DocumentHighlightKind; });
3562/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlight", function() { return DocumentHighlight; });
3563/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolKind", function() { return SymbolKind; });
3564/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolInformation", function() { return SymbolInformation; });
3565/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentSymbol", function() { return DocumentSymbol; });
3566/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionKind", function() { return CodeActionKind; });
3567/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionContext", function() { return CodeActionContext; });
3568/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeAction", function() { return CodeAction; });
3569/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeLens", function() { return CodeLens; });
3570/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormattingOptions", function() { return FormattingOptions; });
3571/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentLink", function() { return DocumentLink; });
3572/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EOL", function() { return EOL; });
3573/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
3574/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentSaveReason", function() { return TextDocumentSaveReason; });
3575/* --------------------------------------------------------------------------------------------
3576 * Copyright (c) Microsoft Corporation. All rights reserved.
3577 * Licensed under the MIT License. See License.txt in the project root for license information.
3578 * ------------------------------------------------------------------------------------------ */
3579
3580/**
3581 * The Position namespace provides helper functions to work with
3582 * [Position](#Position) literals.
3583 */
3584var Position;
3585(function (Position) {
3586 /**
3587 * Creates a new Position literal from the given line and character.
3588 * @param line The position's line.
3589 * @param character The position's character.
3590 */
3591 function create(line, character) {
3592 return { line: line, character: character };
3593 }
3594 Position.create = create;
3595 /**
3596 * Checks whether the given liternal conforms to the [Position](#Position) interface.
3597 */
3598 function is(value) {
3599 var candidate = value;
3600 return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
3601 }
3602 Position.is = is;
3603})(Position || (Position = {}));
3604/**
3605 * The Range namespace provides helper functions to work with
3606 * [Range](#Range) literals.
3607 */
3608var Range;
3609(function (Range) {
3610 function create(one, two, three, four) {
3611 if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
3612 return { start: Position.create(one, two), end: Position.create(three, four) };
3613 }
3614 else if (Position.is(one) && Position.is(two)) {
3615 return { start: one, end: two };
3616 }
3617 else {
3618 throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3619 }
3620 }
3621 Range.create = create;
3622 /**
3623 * Checks whether the given literal conforms to the [Range](#Range) interface.
3624 */
3625 function is(value) {
3626 var candidate = value;
3627 return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
3628 }
3629 Range.is = is;
3630})(Range || (Range = {}));
3631/**
3632 * The Location namespace provides helper functions to work with
3633 * [Location](#Location) literals.
3634 */
3635var Location;
3636(function (Location) {
3637 /**
3638 * Creates a Location literal.
3639 * @param uri The location's uri.
3640 * @param range The location's range.
3641 */
3642 function create(uri, range) {
3643 return { uri: uri, range: range };
3644 }
3645 Location.create = create;
3646 /**
3647 * Checks whether the given literal conforms to the [Location](#Location) interface.
3648 */
3649 function is(value) {
3650 var candidate = value;
3651 return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3652 }
3653 Location.is = is;
3654})(Location || (Location = {}));
3655/**
3656 * The LocationLink namespace provides helper functions to work with
3657 * [LocationLink](#LocationLink) literals.
3658 */
3659var LocationLink;
3660(function (LocationLink) {
3661 /**
3662 * Creates a LocationLink literal.
3663 * @param targetUri The definition's uri.
3664 * @param targetRange The full range of the definition.
3665 * @param targetSelectionRange The span of the symbol definition at the target.
3666 * @param originSelectionRange The span of the symbol being defined in the originating source file.
3667 */
3668 function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3669 return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
3670 }
3671 LocationLink.create = create;
3672 /**
3673 * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
3674 */
3675 function is(value) {
3676 var candidate = value;
3677 return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
3678 && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
3679 && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3680 }
3681 LocationLink.is = is;
3682})(LocationLink || (LocationLink = {}));
3683/**
3684 * The Color namespace provides helper functions to work with
3685 * [Color](#Color) literals.
3686 */
3687var Color;
3688(function (Color) {
3689 /**
3690 * Creates a new Color literal.
3691 */
3692 function create(red, green, blue, alpha) {
3693 return {
3694 red: red,
3695 green: green,
3696 blue: blue,
3697 alpha: alpha,
3698 };
3699 }
3700 Color.create = create;
3701 /**
3702 * Checks whether the given literal conforms to the [Color](#Color) interface.
3703 */
3704 function is(value) {
3705 var candidate = value;
3706 return Is.number(candidate.red)
3707 && Is.number(candidate.green)
3708 && Is.number(candidate.blue)
3709 && Is.number(candidate.alpha);
3710 }
3711 Color.is = is;
3712})(Color || (Color = {}));
3713/**
3714 * The ColorInformation namespace provides helper functions to work with
3715 * [ColorInformation](#ColorInformation) literals.
3716 */
3717var ColorInformation;
3718(function (ColorInformation) {
3719 /**
3720 * Creates a new ColorInformation literal.
3721 */
3722 function create(range, color) {
3723 return {
3724 range: range,
3725 color: color,
3726 };
3727 }
3728 ColorInformation.create = create;
3729 /**
3730 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3731 */
3732 function is(value) {
3733 var candidate = value;
3734 return Range.is(candidate.range) && Color.is(candidate.color);
3735 }
3736 ColorInformation.is = is;
3737})(ColorInformation || (ColorInformation = {}));
3738/**
3739 * The Color namespace provides helper functions to work with
3740 * [ColorPresentation](#ColorPresentation) literals.
3741 */
3742var ColorPresentation;
3743(function (ColorPresentation) {
3744 /**
3745 * Creates a new ColorInformation literal.
3746 */
3747 function create(label, textEdit, additionalTextEdits) {
3748 return {
3749 label: label,
3750 textEdit: textEdit,
3751 additionalTextEdits: additionalTextEdits,
3752 };
3753 }
3754 ColorPresentation.create = create;
3755 /**
3756 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3757 */
3758 function is(value) {
3759 var candidate = value;
3760 return Is.string(candidate.label)
3761 && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
3762 && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
3763 }
3764 ColorPresentation.is = is;
3765})(ColorPresentation || (ColorPresentation = {}));
3766/**
3767 * Enum of known range kinds
3768 */
3769var FoldingRangeKind;
3770(function (FoldingRangeKind) {
3771 /**
3772 * Folding range for a comment
3773 */
3774 FoldingRangeKind["Comment"] = "comment";
3775 /**
3776 * Folding range for a imports or includes
3777 */
3778 FoldingRangeKind["Imports"] = "imports";
3779 /**
3780 * Folding range for a region (e.g. `#region`)
3781 */
3782 FoldingRangeKind["Region"] = "region";
3783})(FoldingRangeKind || (FoldingRangeKind = {}));
3784/**
3785 * The folding range namespace provides helper functions to work with
3786 * [FoldingRange](#FoldingRange) literals.
3787 */
3788var FoldingRange;
3789(function (FoldingRange) {
3790 /**
3791 * Creates a new FoldingRange literal.
3792 */
3793 function create(startLine, endLine, startCharacter, endCharacter, kind) {
3794 var result = {
3795 startLine: startLine,
3796 endLine: endLine
3797 };
3798 if (Is.defined(startCharacter)) {
3799 result.startCharacter = startCharacter;
3800 }
3801 if (Is.defined(endCharacter)) {
3802 result.endCharacter = endCharacter;
3803 }
3804 if (Is.defined(kind)) {
3805 result.kind = kind;
3806 }
3807 return result;
3808 }
3809 FoldingRange.create = create;
3810 /**
3811 * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
3812 */
3813 function is(value) {
3814 var candidate = value;
3815 return Is.number(candidate.startLine) && Is.number(candidate.startLine)
3816 && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))
3817 && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))
3818 && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3819 }
3820 FoldingRange.is = is;
3821})(FoldingRange || (FoldingRange = {}));
3822/**
3823 * The DiagnosticRelatedInformation namespace provides helper functions to work with
3824 * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
3825 */
3826var DiagnosticRelatedInformation;
3827(function (DiagnosticRelatedInformation) {
3828 /**
3829 * Creates a new DiagnosticRelatedInformation literal.
3830 */
3831 function create(location, message) {
3832 return {
3833 location: location,
3834 message: message
3835 };
3836 }
3837 DiagnosticRelatedInformation.create = create;
3838 /**
3839 * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
3840 */
3841 function is(value) {
3842 var candidate = value;
3843 return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
3844 }
3845 DiagnosticRelatedInformation.is = is;
3846})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
3847/**
3848 * The diagnostic's severity.
3849 */
3850var DiagnosticSeverity;
3851(function (DiagnosticSeverity) {
3852 /**
3853 * Reports an error.
3854 */
3855 DiagnosticSeverity.Error = 1;
3856 /**
3857 * Reports a warning.
3858 */
3859 DiagnosticSeverity.Warning = 2;
3860 /**
3861 * Reports an information.
3862 */
3863 DiagnosticSeverity.Information = 3;
3864 /**
3865 * Reports a hint.
3866 */
3867 DiagnosticSeverity.Hint = 4;
3868})(DiagnosticSeverity || (DiagnosticSeverity = {}));
3869/**
3870 * The Diagnostic namespace provides helper functions to work with
3871 * [Diagnostic](#Diagnostic) literals.
3872 */
3873var Diagnostic;
3874(function (Diagnostic) {
3875 /**
3876 * Creates a new Diagnostic literal.
3877 */
3878 function create(range, message, severity, code, source, relatedInformation) {
3879 var result = { range: range, message: message };
3880 if (Is.defined(severity)) {
3881 result.severity = severity;
3882 }
3883 if (Is.defined(code)) {
3884 result.code = code;
3885 }
3886 if (Is.defined(source)) {
3887 result.source = source;
3888 }
3889 if (Is.defined(relatedInformation)) {
3890 result.relatedInformation = relatedInformation;
3891 }
3892 return result;
3893 }
3894 Diagnostic.create = create;
3895 /**
3896 * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
3897 */
3898 function is(value) {
3899 var candidate = value;
3900 return Is.defined(candidate)
3901 && Range.is(candidate.range)
3902 && Is.string(candidate.message)
3903 && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
3904 && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
3905 && (Is.string(candidate.source) || Is.undefined(candidate.source))
3906 && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
3907 }
3908 Diagnostic.is = is;
3909})(Diagnostic || (Diagnostic = {}));
3910/**
3911 * The Command namespace provides helper functions to work with
3912 * [Command](#Command) literals.
3913 */
3914var Command;
3915(function (Command) {
3916 /**
3917 * Creates a new Command literal.
3918 */
3919 function create(title, command) {
3920 var args = [];
3921 for (var _i = 2; _i < arguments.length; _i++) {
3922 args[_i - 2] = arguments[_i];
3923 }
3924 var result = { title: title, command: command };
3925 if (Is.defined(args) && args.length > 0) {
3926 result.arguments = args;
3927 }
3928 return result;
3929 }
3930 Command.create = create;
3931 /**
3932 * Checks whether the given literal conforms to the [Command](#Command) interface.
3933 */
3934 function is(value) {
3935 var candidate = value;
3936 return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
3937 }
3938 Command.is = is;
3939})(Command || (Command = {}));
3940/**
3941 * The TextEdit namespace provides helper function to create replace,
3942 * insert and delete edits more easily.
3943 */
3944var TextEdit;
3945(function (TextEdit) {
3946 /**
3947 * Creates a replace text edit.
3948 * @param range The range of text to be replaced.
3949 * @param newText The new text.
3950 */
3951 function replace(range, newText) {
3952 return { range: range, newText: newText };
3953 }
3954 TextEdit.replace = replace;
3955 /**
3956 * Creates a insert text edit.
3957 * @param position The position to insert the text at.
3958 * @param newText The text to be inserted.
3959 */
3960 function insert(position, newText) {
3961 return { range: { start: position, end: position }, newText: newText };
3962 }
3963 TextEdit.insert = insert;
3964 /**
3965 * Creates a delete text edit.
3966 * @param range The range of text to be deleted.
3967 */
3968 function del(range) {
3969 return { range: range, newText: '' };
3970 }
3971 TextEdit.del = del;
3972 function is(value) {
3973 var candidate = value;
3974 return Is.objectLiteral(candidate)
3975 && Is.string(candidate.newText)
3976 && Range.is(candidate.range);
3977 }
3978 TextEdit.is = is;
3979})(TextEdit || (TextEdit = {}));
3980/**
3981 * The TextDocumentEdit namespace provides helper function to create
3982 * an edit that manipulates a text document.
3983 */
3984var TextDocumentEdit;
3985(function (TextDocumentEdit) {
3986 /**
3987 * Creates a new `TextDocumentEdit`
3988 */
3989 function create(textDocument, edits) {
3990 return { textDocument: textDocument, edits: edits };
3991 }
3992 TextDocumentEdit.create = create;
3993 function is(value) {
3994 var candidate = value;
3995 return Is.defined(candidate)
3996 && VersionedTextDocumentIdentifier.is(candidate.textDocument)
3997 && Array.isArray(candidate.edits);
3998 }
3999 TextDocumentEdit.is = is;
4000})(TextDocumentEdit || (TextDocumentEdit = {}));
4001var CreateFile;
4002(function (CreateFile) {
4003 function create(uri, options) {
4004 var result = {
4005 kind: 'create',
4006 uri: uri
4007 };
4008 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4009 result.options = options;
4010 }
4011 return result;
4012 }
4013 CreateFile.create = create;
4014 function is(value) {
4015 var candidate = value;
4016 return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&
4017 (candidate.options === void 0 ||
4018 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4019 }
4020 CreateFile.is = is;
4021})(CreateFile || (CreateFile = {}));
4022var RenameFile;
4023(function (RenameFile) {
4024 function create(oldUri, newUri, options) {
4025 var result = {
4026 kind: 'rename',
4027 oldUri: oldUri,
4028 newUri: newUri
4029 };
4030 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4031 result.options = options;
4032 }
4033 return result;
4034 }
4035 RenameFile.create = create;
4036 function is(value) {
4037 var candidate = value;
4038 return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&
4039 (candidate.options === void 0 ||
4040 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4041 }
4042 RenameFile.is = is;
4043})(RenameFile || (RenameFile = {}));
4044var DeleteFile;
4045(function (DeleteFile) {
4046 function create(uri, options) {
4047 var result = {
4048 kind: 'delete',
4049 uri: uri
4050 };
4051 if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
4052 result.options = options;
4053 }
4054 return result;
4055 }
4056 DeleteFile.create = create;
4057 function is(value) {
4058 var candidate = value;
4059 return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&
4060 (candidate.options === void 0 ||
4061 ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));
4062 }
4063 DeleteFile.is = is;
4064})(DeleteFile || (DeleteFile = {}));
4065var WorkspaceEdit;
4066(function (WorkspaceEdit) {
4067 function is(value) {
4068 var candidate = value;
4069 return candidate &&
4070 (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&
4071 (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {
4072 if (Is.string(change.kind)) {
4073 return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
4074 }
4075 else {
4076 return TextDocumentEdit.is(change);
4077 }
4078 }));
4079 }
4080 WorkspaceEdit.is = is;
4081})(WorkspaceEdit || (WorkspaceEdit = {}));
4082var TextEditChangeImpl = /** @class */ (function () {
4083 function TextEditChangeImpl(edits) {
4084 this.edits = edits;
4085 }
4086 TextEditChangeImpl.prototype.insert = function (position, newText) {
4087 this.edits.push(TextEdit.insert(position, newText));
4088 };
4089 TextEditChangeImpl.prototype.replace = function (range, newText) {
4090 this.edits.push(TextEdit.replace(range, newText));
4091 };
4092 TextEditChangeImpl.prototype.delete = function (range) {
4093 this.edits.push(TextEdit.del(range));
4094 };
4095 TextEditChangeImpl.prototype.add = function (edit) {
4096 this.edits.push(edit);
4097 };
4098 TextEditChangeImpl.prototype.all = function () {
4099 return this.edits;
4100 };
4101 TextEditChangeImpl.prototype.clear = function () {
4102 this.edits.splice(0, this.edits.length);
4103 };
4104 return TextEditChangeImpl;
4105}());
4106/**
4107 * A workspace change helps constructing changes to a workspace.
4108 */
4109var WorkspaceChange = /** @class */ (function () {
4110 function WorkspaceChange(workspaceEdit) {
4111 var _this = this;
4112 this._textEditChanges = Object.create(null);
4113 if (workspaceEdit) {
4114 this._workspaceEdit = workspaceEdit;
4115 if (workspaceEdit.documentChanges) {
4116 workspaceEdit.documentChanges.forEach(function (change) {
4117 if (TextDocumentEdit.is(change)) {
4118 var textEditChange = new TextEditChangeImpl(change.edits);
4119 _this._textEditChanges[change.textDocument.uri] = textEditChange;
4120 }
4121 });
4122 }
4123 else if (workspaceEdit.changes) {
4124 Object.keys(workspaceEdit.changes).forEach(function (key) {
4125 var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
4126 _this._textEditChanges[key] = textEditChange;
4127 });
4128 }
4129 }
4130 }
4131 Object.defineProperty(WorkspaceChange.prototype, "edit", {
4132 /**
4133 * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
4134 * use to be returned from a workspace edit operation like rename.
4135 */
4136 get: function () {
4137 return this._workspaceEdit;
4138 },
4139 enumerable: true,
4140 configurable: true
4141 });
4142 WorkspaceChange.prototype.getTextEditChange = function (key) {
4143 if (VersionedTextDocumentIdentifier.is(key)) {
4144 if (!this._workspaceEdit) {
4145 this._workspaceEdit = {
4146 documentChanges: []
4147 };
4148 }
4149 if (!this._workspaceEdit.documentChanges) {
4150 throw new Error('Workspace edit is not configured for document changes.');
4151 }
4152 var textDocument = key;
4153 var result = this._textEditChanges[textDocument.uri];
4154 if (!result) {
4155 var edits = [];
4156 var textDocumentEdit = {
4157 textDocument: textDocument,
4158 edits: edits
4159 };
4160 this._workspaceEdit.documentChanges.push(textDocumentEdit);
4161 result = new TextEditChangeImpl(edits);
4162 this._textEditChanges[textDocument.uri] = result;
4163 }
4164 return result;
4165 }
4166 else {
4167 if (!this._workspaceEdit) {
4168 this._workspaceEdit = {
4169 changes: Object.create(null)
4170 };
4171 }
4172 if (!this._workspaceEdit.changes) {
4173 throw new Error('Workspace edit is not configured for normal text edit changes.');
4174 }
4175 var result = this._textEditChanges[key];
4176 if (!result) {
4177 var edits = [];
4178 this._workspaceEdit.changes[key] = edits;
4179 result = new TextEditChangeImpl(edits);
4180 this._textEditChanges[key] = result;
4181 }
4182 return result;
4183 }
4184 };
4185 WorkspaceChange.prototype.createFile = function (uri, options) {
4186 this.checkDocumentChanges();
4187 this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
4188 };
4189 WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {
4190 this.checkDocumentChanges();
4191 this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
4192 };
4193 WorkspaceChange.prototype.deleteFile = function (uri, options) {
4194 this.checkDocumentChanges();
4195 this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
4196 };
4197 WorkspaceChange.prototype.checkDocumentChanges = function () {
4198 if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
4199 throw new Error('Workspace edit is not configured for document changes.');
4200 }
4201 };
4202 return WorkspaceChange;
4203}());
4204
4205/**
4206 * The TextDocumentIdentifier namespace provides helper functions to work with
4207 * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
4208 */
4209var TextDocumentIdentifier;
4210(function (TextDocumentIdentifier) {
4211 /**
4212 * Creates a new TextDocumentIdentifier literal.
4213 * @param uri The document's uri.
4214 */
4215 function create(uri) {
4216 return { uri: uri };
4217 }
4218 TextDocumentIdentifier.create = create;
4219 /**
4220 * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
4221 */
4222 function is(value) {
4223 var candidate = value;
4224 return Is.defined(candidate) && Is.string(candidate.uri);
4225 }
4226 TextDocumentIdentifier.is = is;
4227})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
4228/**
4229 * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
4230 * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
4231 */
4232var VersionedTextDocumentIdentifier;
4233(function (VersionedTextDocumentIdentifier) {
4234 /**
4235 * Creates a new VersionedTextDocumentIdentifier literal.
4236 * @param uri The document's uri.
4237 * @param uri The document's text.
4238 */
4239 function create(uri, version) {
4240 return { uri: uri, version: version };
4241 }
4242 VersionedTextDocumentIdentifier.create = create;
4243 /**
4244 * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
4245 */
4246 function is(value) {
4247 var candidate = value;
4248 return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
4249 }
4250 VersionedTextDocumentIdentifier.is = is;
4251})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
4252/**
4253 * The TextDocumentItem namespace provides helper functions to work with
4254 * [TextDocumentItem](#TextDocumentItem) literals.
4255 */
4256var TextDocumentItem;
4257(function (TextDocumentItem) {
4258 /**
4259 * Creates a new TextDocumentItem literal.
4260 * @param uri The document's uri.
4261 * @param languageId The document's language identifier.
4262 * @param version The document's version number.
4263 * @param text The document's text.
4264 */
4265 function create(uri, languageId, version, text) {
4266 return { uri: uri, languageId: languageId, version: version, text: text };
4267 }
4268 TextDocumentItem.create = create;
4269 /**
4270 * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
4271 */
4272 function is(value) {
4273 var candidate = value;
4274 return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
4275 }
4276 TextDocumentItem.is = is;
4277})(TextDocumentItem || (TextDocumentItem = {}));
4278/**
4279 * Describes the content type that a client supports in various
4280 * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
4281 *
4282 * Please note that `MarkupKinds` must not start with a `$`. This kinds
4283 * are reserved for internal usage.
4284 */
4285var MarkupKind;
4286(function (MarkupKind) {
4287 /**
4288 * Plain text is supported as a content format
4289 */
4290 MarkupKind.PlainText = 'plaintext';
4291 /**
4292 * Markdown is supported as a content format
4293 */
4294 MarkupKind.Markdown = 'markdown';
4295})(MarkupKind || (MarkupKind = {}));
4296(function (MarkupKind) {
4297 /**
4298 * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
4299 */
4300 function is(value) {
4301 var candidate = value;
4302 return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
4303 }
4304 MarkupKind.is = is;
4305})(MarkupKind || (MarkupKind = {}));
4306var MarkupContent;
4307(function (MarkupContent) {
4308 /**
4309 * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
4310 */
4311 function is(value) {
4312 var candidate = value;
4313 return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
4314 }
4315 MarkupContent.is = is;
4316})(MarkupContent || (MarkupContent = {}));
4317/**
4318 * The kind of a completion entry.
4319 */
4320var CompletionItemKind;
4321(function (CompletionItemKind) {
4322 CompletionItemKind.Text = 1;
4323 CompletionItemKind.Method = 2;
4324 CompletionItemKind.Function = 3;
4325 CompletionItemKind.Constructor = 4;
4326 CompletionItemKind.Field = 5;
4327 CompletionItemKind.Variable = 6;
4328 CompletionItemKind.Class = 7;
4329 CompletionItemKind.Interface = 8;
4330 CompletionItemKind.Module = 9;
4331 CompletionItemKind.Property = 10;
4332 CompletionItemKind.Unit = 11;
4333 CompletionItemKind.Value = 12;
4334 CompletionItemKind.Enum = 13;
4335 CompletionItemKind.Keyword = 14;
4336 CompletionItemKind.Snippet = 15;
4337 CompletionItemKind.Color = 16;
4338 CompletionItemKind.File = 17;
4339 CompletionItemKind.Reference = 18;
4340 CompletionItemKind.Folder = 19;
4341 CompletionItemKind.EnumMember = 20;
4342 CompletionItemKind.Constant = 21;
4343 CompletionItemKind.Struct = 22;
4344 CompletionItemKind.Event = 23;
4345 CompletionItemKind.Operator = 24;
4346 CompletionItemKind.TypeParameter = 25;
4347})(CompletionItemKind || (CompletionItemKind = {}));
4348/**
4349 * Defines whether the insert text in a completion item should be interpreted as
4350 * plain text or a snippet.
4351 */
4352var InsertTextFormat;
4353(function (InsertTextFormat) {
4354 /**
4355 * The primary text to be inserted is treated as a plain string.
4356 */
4357 InsertTextFormat.PlainText = 1;
4358 /**
4359 * The primary text to be inserted is treated as a snippet.
4360 *
4361 * A snippet can define tab stops and placeholders with `$1`, `$2`
4362 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
4363 * the end of the snippet. Placeholders with equal identifiers are linked,
4364 * that is typing in one will update others too.
4365 *
4366 * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
4367 */
4368 InsertTextFormat.Snippet = 2;
4369})(InsertTextFormat || (InsertTextFormat = {}));
4370/**
4371 * The CompletionItem namespace provides functions to deal with
4372 * completion items.
4373 */
4374var CompletionItem;
4375(function (CompletionItem) {
4376 /**
4377 * Create a completion item and seed it with a label.
4378 * @param label The completion item's label
4379 */
4380 function create(label) {
4381 return { label: label };
4382 }
4383 CompletionItem.create = create;
4384})(CompletionItem || (CompletionItem = {}));
4385/**
4386 * The CompletionList namespace provides functions to deal with
4387 * completion lists.
4388 */
4389var CompletionList;
4390(function (CompletionList) {
4391 /**
4392 * Creates a new completion list.
4393 *
4394 * @param items The completion items.
4395 * @param isIncomplete The list is not complete.
4396 */
4397 function create(items, isIncomplete) {
4398 return { items: items ? items : [], isIncomplete: !!isIncomplete };
4399 }
4400 CompletionList.create = create;
4401})(CompletionList || (CompletionList = {}));
4402var MarkedString;
4403(function (MarkedString) {
4404 /**
4405 * Creates a marked string from plain text.
4406 *
4407 * @param plainText The plain text.
4408 */
4409 function fromPlainText(plainText) {
4410 return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, "\\$&"); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
4411 }
4412 MarkedString.fromPlainText = fromPlainText;
4413 /**
4414 * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
4415 */
4416 function is(value) {
4417 var candidate = value;
4418 return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
4419 }
4420 MarkedString.is = is;
4421})(MarkedString || (MarkedString = {}));
4422var Hover;
4423(function (Hover) {
4424 /**
4425 * Checks whether the given value conforms to the [Hover](#Hover) interface.
4426 */
4427 function is(value) {
4428 var candidate = value;
4429 return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
4430 MarkedString.is(candidate.contents) ||
4431 Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
4432 }
4433 Hover.is = is;
4434})(Hover || (Hover = {}));
4435/**
4436 * The ParameterInformation namespace provides helper functions to work with
4437 * [ParameterInformation](#ParameterInformation) literals.
4438 */
4439var ParameterInformation;
4440(function (ParameterInformation) {
4441 /**
4442 * Creates a new parameter information literal.
4443 *
4444 * @param label A label string.
4445 * @param documentation A doc string.
4446 */
4447 function create(label, documentation) {
4448 return documentation ? { label: label, documentation: documentation } : { label: label };
4449 }
4450 ParameterInformation.create = create;
4451 ;
4452})(ParameterInformation || (ParameterInformation = {}));
4453/**
4454 * The SignatureInformation namespace provides helper functions to work with
4455 * [SignatureInformation](#SignatureInformation) literals.
4456 */
4457var SignatureInformation;
4458(function (SignatureInformation) {
4459 function create(label, documentation) {
4460 var parameters = [];
4461 for (var _i = 2; _i < arguments.length; _i++) {
4462 parameters[_i - 2] = arguments[_i];
4463 }
4464 var result = { label: label };
4465 if (Is.defined(documentation)) {
4466 result.documentation = documentation;
4467 }
4468 if (Is.defined(parameters)) {
4469 result.parameters = parameters;
4470 }
4471 else {
4472 result.parameters = [];
4473 }
4474 return result;
4475 }
4476 SignatureInformation.create = create;
4477})(SignatureInformation || (SignatureInformation = {}));
4478/**
4479 * A document highlight kind.
4480 */
4481var DocumentHighlightKind;
4482(function (DocumentHighlightKind) {
4483 /**
4484 * A textual occurrence.
4485 */
4486 DocumentHighlightKind.Text = 1;
4487 /**
4488 * Read-access of a symbol, like reading a variable.
4489 */
4490 DocumentHighlightKind.Read = 2;
4491 /**
4492 * Write-access of a symbol, like writing to a variable.
4493 */
4494 DocumentHighlightKind.Write = 3;
4495})(DocumentHighlightKind || (DocumentHighlightKind = {}));
4496/**
4497 * DocumentHighlight namespace to provide helper functions to work with
4498 * [DocumentHighlight](#DocumentHighlight) literals.
4499 */
4500var DocumentHighlight;
4501(function (DocumentHighlight) {
4502 /**
4503 * Create a DocumentHighlight object.
4504 * @param range The range the highlight applies to.
4505 */
4506 function create(range, kind) {
4507 var result = { range: range };
4508 if (Is.number(kind)) {
4509 result.kind = kind;
4510 }
4511 return result;
4512 }
4513 DocumentHighlight.create = create;
4514})(DocumentHighlight || (DocumentHighlight = {}));
4515/**
4516 * A symbol kind.
4517 */
4518var SymbolKind;
4519(function (SymbolKind) {
4520 SymbolKind.File = 1;
4521 SymbolKind.Module = 2;
4522 SymbolKind.Namespace = 3;
4523 SymbolKind.Package = 4;
4524 SymbolKind.Class = 5;
4525 SymbolKind.Method = 6;
4526 SymbolKind.Property = 7;
4527 SymbolKind.Field = 8;
4528 SymbolKind.Constructor = 9;
4529 SymbolKind.Enum = 10;
4530 SymbolKind.Interface = 11;
4531 SymbolKind.Function = 12;
4532 SymbolKind.Variable = 13;
4533 SymbolKind.Constant = 14;
4534 SymbolKind.String = 15;
4535 SymbolKind.Number = 16;
4536 SymbolKind.Boolean = 17;
4537 SymbolKind.Array = 18;
4538 SymbolKind.Object = 19;
4539 SymbolKind.Key = 20;
4540 SymbolKind.Null = 21;
4541 SymbolKind.EnumMember = 22;
4542 SymbolKind.Struct = 23;
4543 SymbolKind.Event = 24;
4544 SymbolKind.Operator = 25;
4545 SymbolKind.TypeParameter = 26;
4546})(SymbolKind || (SymbolKind = {}));
4547var SymbolInformation;
4548(function (SymbolInformation) {
4549 /**
4550 * Creates a new symbol information literal.
4551 *
4552 * @param name The name of the symbol.
4553 * @param kind The kind of the symbol.
4554 * @param range The range of the location of the symbol.
4555 * @param uri The resource of the location of symbol, defaults to the current document.
4556 * @param containerName The name of the symbol containing the symbol.
4557 */
4558 function create(name, kind, range, uri, containerName) {
4559 var result = {
4560 name: name,
4561 kind: kind,
4562 location: { uri: uri, range: range }
4563 };
4564 if (containerName) {
4565 result.containerName = containerName;
4566 }
4567 return result;
4568 }
4569 SymbolInformation.create = create;
4570})(SymbolInformation || (SymbolInformation = {}));
4571/**
4572 * Represents programming constructs like variables, classes, interfaces etc.
4573 * that appear in a document. Document symbols can be hierarchical and they
4574 * have two ranges: one that encloses its definition and one that points to
4575 * its most interesting range, e.g. the range of an identifier.
4576 */
4577var DocumentSymbol = /** @class */ (function () {
4578 function DocumentSymbol() {
4579 }
4580 return DocumentSymbol;
4581}());
4582
4583(function (DocumentSymbol) {
4584 /**
4585 * Creates a new symbol information literal.
4586 *
4587 * @param name The name of the symbol.
4588 * @param detail The detail of the symbol.
4589 * @param kind The kind of the symbol.
4590 * @param range The range of the symbol.
4591 * @param selectionRange The selectionRange of the symbol.
4592 * @param children Children of the symbol.
4593 */
4594 function create(name, detail, kind, range, selectionRange, children) {
4595 var result = {
4596 name: name,
4597 detail: detail,
4598 kind: kind,
4599 range: range,
4600 selectionRange: selectionRange
4601 };
4602 if (children !== void 0) {
4603 result.children = children;
4604 }
4605 return result;
4606 }
4607 DocumentSymbol.create = create;
4608 /**
4609 * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
4610 */
4611 function is(value) {
4612 var candidate = value;
4613 return candidate &&
4614 Is.string(candidate.name) && Is.number(candidate.kind) &&
4615 Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
4616 (candidate.detail === void 0 || Is.string(candidate.detail)) &&
4617 (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&
4618 (candidate.children === void 0 || Array.isArray(candidate.children));
4619 }
4620 DocumentSymbol.is = is;
4621})(DocumentSymbol || (DocumentSymbol = {}));
4622/**
4623 * A set of predefined code action kinds
4624 */
4625var CodeActionKind;
4626(function (CodeActionKind) {
4627 /**
4628 * Base kind for quickfix actions: 'quickfix'
4629 */
4630 CodeActionKind.QuickFix = 'quickfix';
4631 /**
4632 * Base kind for refactoring actions: 'refactor'
4633 */
4634 CodeActionKind.Refactor = 'refactor';
4635 /**
4636 * Base kind for refactoring extraction actions: 'refactor.extract'
4637 *
4638 * Example extract actions:
4639 *
4640 * - Extract method
4641 * - Extract function
4642 * - Extract variable
4643 * - Extract interface from class
4644 * - ...
4645 */
4646 CodeActionKind.RefactorExtract = 'refactor.extract';
4647 /**
4648 * Base kind for refactoring inline actions: 'refactor.inline'
4649 *
4650 * Example inline actions:
4651 *
4652 * - Inline function
4653 * - Inline variable
4654 * - Inline constant
4655 * - ...
4656 */
4657 CodeActionKind.RefactorInline = 'refactor.inline';
4658 /**
4659 * Base kind for refactoring rewrite actions: 'refactor.rewrite'
4660 *
4661 * Example rewrite actions:
4662 *
4663 * - Convert JavaScript function to class
4664 * - Add or remove parameter
4665 * - Encapsulate field
4666 * - Make method static
4667 * - Move method to base class
4668 * - ...
4669 */
4670 CodeActionKind.RefactorRewrite = 'refactor.rewrite';
4671 /**
4672 * Base kind for source actions: `source`
4673 *
4674 * Source code actions apply to the entire file.
4675 */
4676 CodeActionKind.Source = 'source';
4677 /**
4678 * Base kind for an organize imports source action: `source.organizeImports`
4679 */
4680 CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
4681})(CodeActionKind || (CodeActionKind = {}));
4682/**
4683 * The CodeActionContext namespace provides helper functions to work with
4684 * [CodeActionContext](#CodeActionContext) literals.
4685 */
4686var CodeActionContext;
4687(function (CodeActionContext) {
4688 /**
4689 * Creates a new CodeActionContext literal.
4690 */
4691 function create(diagnostics, only) {
4692 var result = { diagnostics: diagnostics };
4693 if (only !== void 0 && only !== null) {
4694 result.only = only;
4695 }
4696 return result;
4697 }
4698 CodeActionContext.create = create;
4699 /**
4700 * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
4701 */
4702 function is(value) {
4703 var candidate = value;
4704 return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
4705 }
4706 CodeActionContext.is = is;
4707})(CodeActionContext || (CodeActionContext = {}));
4708var CodeAction;
4709(function (CodeAction) {
4710 function create(title, commandOrEdit, kind) {
4711 var result = { title: title };
4712 if (Command.is(commandOrEdit)) {
4713 result.command = commandOrEdit;
4714 }
4715 else {
4716 result.edit = commandOrEdit;
4717 }
4718 if (kind !== void null) {
4719 result.kind = kind;
4720 }
4721 return result;
4722 }
4723 CodeAction.create = create;
4724 function is(value) {
4725 var candidate = value;
4726 return candidate && Is.string(candidate.title) &&
4727 (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
4728 (candidate.kind === void 0 || Is.string(candidate.kind)) &&
4729 (candidate.edit !== void 0 || candidate.command !== void 0) &&
4730 (candidate.command === void 0 || Command.is(candidate.command)) &&
4731 (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
4732 }
4733 CodeAction.is = is;
4734})(CodeAction || (CodeAction = {}));
4735/**
4736 * The CodeLens namespace provides helper functions to work with
4737 * [CodeLens](#CodeLens) literals.
4738 */
4739var CodeLens;
4740(function (CodeLens) {
4741 /**
4742 * Creates a new CodeLens literal.
4743 */
4744 function create(range, data) {
4745 var result = { range: range };
4746 if (Is.defined(data))
4747 result.data = data;
4748 return result;
4749 }
4750 CodeLens.create = create;
4751 /**
4752 * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
4753 */
4754 function is(value) {
4755 var candidate = value;
4756 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
4757 }
4758 CodeLens.is = is;
4759})(CodeLens || (CodeLens = {}));
4760/**
4761 * The FormattingOptions namespace provides helper functions to work with
4762 * [FormattingOptions](#FormattingOptions) literals.
4763 */
4764var FormattingOptions;
4765(function (FormattingOptions) {
4766 /**
4767 * Creates a new FormattingOptions literal.
4768 */
4769 function create(tabSize, insertSpaces) {
4770 return { tabSize: tabSize, insertSpaces: insertSpaces };
4771 }
4772 FormattingOptions.create = create;
4773 /**
4774 * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
4775 */
4776 function is(value) {
4777 var candidate = value;
4778 return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4779 }
4780 FormattingOptions.is = is;
4781})(FormattingOptions || (FormattingOptions = {}));
4782/**
4783 * A document link is a range in a text document that links to an internal or external resource, like another
4784 * text document or a web site.
4785 */
4786var DocumentLink = /** @class */ (function () {
4787 function DocumentLink() {
4788 }
4789 return DocumentLink;
4790}());
4791
4792/**
4793 * The DocumentLink namespace provides helper functions to work with
4794 * [DocumentLink](#DocumentLink) literals.
4795 */
4796(function (DocumentLink) {
4797 /**
4798 * Creates a new DocumentLink literal.
4799 */
4800 function create(range, target, data) {
4801 return { range: range, target: target, data: data };
4802 }
4803 DocumentLink.create = create;
4804 /**
4805 * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
4806 */
4807 function is(value) {
4808 var candidate = value;
4809 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4810 }
4811 DocumentLink.is = is;
4812})(DocumentLink || (DocumentLink = {}));
4813var EOL = ['\n', '\r\n', '\r'];
4814var TextDocument;
4815(function (TextDocument) {
4816 /**
4817 * Creates a new ITextDocument literal from the given uri and content.
4818 * @param uri The document's uri.
4819 * @param languageId The document's language Id.
4820 * @param content The document's content.
4821 */
4822 function create(uri, languageId, version, content) {
4823 return new FullTextDocument(uri, languageId, version, content);
4824 }
4825 TextDocument.create = create;
4826 /**
4827 * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
4828 */
4829 function is(value) {
4830 var candidate = value;
4831 return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)
4832 && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
4833 }
4834 TextDocument.is = is;
4835 function applyEdits(document, edits) {
4836 var text = document.getText();
4837 var sortedEdits = mergeSort(edits, function (a, b) {
4838 var diff = a.range.start.line - b.range.start.line;
4839 if (diff === 0) {
4840 return a.range.start.character - b.range.start.character;
4841 }
4842 return diff;
4843 });
4844 var lastModifiedOffset = text.length;
4845 for (var i = sortedEdits.length - 1; i >= 0; i--) {
4846 var e = sortedEdits[i];
4847 var startOffset = document.offsetAt(e.range.start);
4848 var endOffset = document.offsetAt(e.range.end);
4849 if (endOffset <= lastModifiedOffset) {
4850 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
4851 }
4852 else {
4853 throw new Error('Overlapping edit');
4854 }
4855 lastModifiedOffset = startOffset;
4856 }
4857 return text;
4858 }
4859 TextDocument.applyEdits = applyEdits;
4860 function mergeSort(data, compare) {
4861 if (data.length <= 1) {
4862 // sorted
4863 return data;
4864 }
4865 var p = (data.length / 2) | 0;
4866 var left = data.slice(0, p);
4867 var right = data.slice(p);
4868 mergeSort(left, compare);
4869 mergeSort(right, compare);
4870 var leftIdx = 0;
4871 var rightIdx = 0;
4872 var i = 0;
4873 while (leftIdx < left.length && rightIdx < right.length) {
4874 var ret = compare(left[leftIdx], right[rightIdx]);
4875 if (ret <= 0) {
4876 // smaller_equal -> take left to preserve order
4877 data[i++] = left[leftIdx++];
4878 }
4879 else {
4880 // greater -> take right
4881 data[i++] = right[rightIdx++];
4882 }
4883 }
4884 while (leftIdx < left.length) {
4885 data[i++] = left[leftIdx++];
4886 }
4887 while (rightIdx < right.length) {
4888 data[i++] = right[rightIdx++];
4889 }
4890 return data;
4891 }
4892})(TextDocument || (TextDocument = {}));
4893/**
4894 * Represents reasons why a text document is saved.
4895 */
4896var TextDocumentSaveReason;
4897(function (TextDocumentSaveReason) {
4898 /**
4899 * Manually triggered, e.g. by the user pressing save, by starting debugging,
4900 * or by an API call.
4901 */
4902 TextDocumentSaveReason.Manual = 1;
4903 /**
4904 * Automatic after a delay.
4905 */
4906 TextDocumentSaveReason.AfterDelay = 2;
4907 /**
4908 * When the editor lost focus.
4909 */
4910 TextDocumentSaveReason.FocusOut = 3;
4911})(TextDocumentSaveReason || (TextDocumentSaveReason = {}));
4912var FullTextDocument = /** @class */ (function () {
4913 function FullTextDocument(uri, languageId, version, content) {
4914 this._uri = uri;
4915 this._languageId = languageId;
4916 this._version = version;
4917 this._content = content;
4918 this._lineOffsets = null;
4919 }
4920 Object.defineProperty(FullTextDocument.prototype, "uri", {
4921 get: function () {
4922 return this._uri;
4923 },
4924 enumerable: true,
4925 configurable: true
4926 });
4927 Object.defineProperty(FullTextDocument.prototype, "languageId", {
4928 get: function () {
4929 return this._languageId;
4930 },
4931 enumerable: true,
4932 configurable: true
4933 });
4934 Object.defineProperty(FullTextDocument.prototype, "version", {
4935 get: function () {
4936 return this._version;
4937 },
4938 enumerable: true,
4939 configurable: true
4940 });
4941 FullTextDocument.prototype.getText = function (range) {
4942 if (range) {
4943 var start = this.offsetAt(range.start);
4944 var end = this.offsetAt(range.end);
4945 return this._content.substring(start, end);
4946 }
4947 return this._content;
4948 };
4949 FullTextDocument.prototype.update = function (event, version) {
4950 this._content = event.text;
4951 this._version = version;
4952 this._lineOffsets = null;
4953 };
4954 FullTextDocument.prototype.getLineOffsets = function () {
4955 if (this._lineOffsets === null) {
4956 var lineOffsets = [];
4957 var text = this._content;
4958 var isLineStart = true;
4959 for (var i = 0; i < text.length; i++) {
4960 if (isLineStart) {
4961 lineOffsets.push(i);
4962 isLineStart = false;
4963 }
4964 var ch = text.charAt(i);
4965 isLineStart = (ch === '\r' || ch === '\n');
4966 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
4967 i++;
4968 }
4969 }
4970 if (isLineStart && text.length > 0) {
4971 lineOffsets.push(text.length);
4972 }
4973 this._lineOffsets = lineOffsets;
4974 }
4975 return this._lineOffsets;
4976 };
4977 FullTextDocument.prototype.positionAt = function (offset) {
4978 offset = Math.max(Math.min(offset, this._content.length), 0);
4979 var lineOffsets = this.getLineOffsets();
4980 var low = 0, high = lineOffsets.length;
4981 if (high === 0) {
4982 return Position.create(0, offset);
4983 }
4984 while (low < high) {
4985 var mid = Math.floor((low + high) / 2);
4986 if (lineOffsets[mid] > offset) {
4987 high = mid;
4988 }
4989 else {
4990 low = mid + 1;
4991 }
4992 }
4993 // low is the least x for which the line offset is larger than the current offset
4994 // or array.length if no line offset is larger than the current offset
4995 var line = low - 1;
4996 return Position.create(line, offset - lineOffsets[line]);
4997 };
4998 FullTextDocument.prototype.offsetAt = function (position) {
4999 var lineOffsets = this.getLineOffsets();
5000 if (position.line >= lineOffsets.length) {
5001 return this._content.length;
5002 }
5003 else if (position.line < 0) {
5004 return 0;
5005 }
5006 var lineOffset = lineOffsets[position.line];
5007 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
5008 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
5009 };
5010 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
5011 get: function () {
5012 return this.getLineOffsets().length;
5013 },
5014 enumerable: true,
5015 configurable: true
5016 });
5017 return FullTextDocument;
5018}());
5019var Is;
5020(function (Is) {
5021 var toString = Object.prototype.toString;
5022 function defined(value) {
5023 return typeof value !== 'undefined';
5024 }
5025 Is.defined = defined;
5026 function undefined(value) {
5027 return typeof value === 'undefined';
5028 }
5029 Is.undefined = undefined;
5030 function boolean(value) {
5031 return value === true || value === false;
5032 }
5033 Is.boolean = boolean;
5034 function string(value) {
5035 return toString.call(value) === '[object String]';
5036 }
5037 Is.string = string;
5038 function number(value) {
5039 return toString.call(value) === '[object Number]';
5040 }
5041 Is.number = number;
5042 function func(value) {
5043 return toString.call(value) === '[object Function]';
5044 }
5045 Is.func = func;
5046 function objectLiteral(value) {
5047 // Strictly speaking class instances pass this check as well. Since the LSP
5048 // doesn't use classes we ignore this for now. If we do we need to add something
5049 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5050 return value !== null && typeof value === 'object';
5051 }
5052 Is.objectLiteral = objectLiteral;
5053 function typedArray(value, check) {
5054 return Array.isArray(value) && value.every(check);
5055 }
5056 Is.typedArray = typedArray;
5057})(Is || (Is = {}));
5058
5059
5060/***/ }),
5061/* 21 */
5062/***/ (function(module, exports, __webpack_require__) {
5063
5064"use strict";
5065/* --------------------------------------------------------------------------------------------
5066 * Copyright (c) Microsoft Corporation. All rights reserved.
5067 * Licensed under the MIT License. See License.txt in the project root for license information.
5068 * ------------------------------------------------------------------------------------------ */
5069
5070Object.defineProperty(exports, "__esModule", { value: true });
5071const Is = __webpack_require__(22);
5072const vscode_jsonrpc_1 = __webpack_require__(6);
5073const protocol_implementation_1 = __webpack_require__(23);
5074exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
5075const protocol_typeDefinition_1 = __webpack_require__(24);
5076exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
5077const protocol_workspaceFolders_1 = __webpack_require__(25);
5078exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
5079exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
5080const protocol_configuration_1 = __webpack_require__(26);
5081exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
5082const protocol_colorProvider_1 = __webpack_require__(27);
5083exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
5084exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
5085const protocol_foldingRange_1 = __webpack_require__(28);
5086exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
5087const protocol_declaration_1 = __webpack_require__(29);
5088exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
5089// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5090let __noDynamicImport;
5091var DocumentFilter;
5092(function (DocumentFilter) {
5093 function is(value) {
5094 let candidate = value;
5095 return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
5096 }
5097 DocumentFilter.is = is;
5098})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
5099/**
5100 * The `client/registerCapability` request is sent from the server to the client to register a new capability
5101 * handler on the client side.
5102 */
5103var RegistrationRequest;
5104(function (RegistrationRequest) {
5105 RegistrationRequest.type = new vscode_jsonrpc_1.RequestType('client/registerCapability');
5106})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
5107/**
5108 * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
5109 * handler on the client side.
5110 */
5111var UnregistrationRequest;
5112(function (UnregistrationRequest) {
5113 UnregistrationRequest.type = new vscode_jsonrpc_1.RequestType('client/unregisterCapability');
5114})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
5115var ResourceOperationKind;
5116(function (ResourceOperationKind) {
5117 /**
5118 * Supports creating new files and folders.
5119 */
5120 ResourceOperationKind.Create = 'create';
5121 /**
5122 * Supports renaming existing files and folders.
5123 */
5124 ResourceOperationKind.Rename = 'rename';
5125 /**
5126 * Supports deleting existing files and folders.
5127 */
5128 ResourceOperationKind.Delete = 'delete';
5129})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
5130var FailureHandlingKind;
5131(function (FailureHandlingKind) {
5132 /**
5133 * Applying the workspace change is simply aborted if one of the changes provided
5134 * fails. All operations executed before the failing operation stay executed.
5135 */
5136 FailureHandlingKind.Abort = 'abort';
5137 /**
5138 * All operations are executed transactional. That means they either all
5139 * succeed or no changes at all are applied to the workspace.
5140 */
5141 FailureHandlingKind.Transactional = 'transactional';
5142 /**
5143 * If the workspace edit contains only textual file changes they are executed transactional.
5144 * If resource changes (create, rename or delete file) are part of the change the failure
5145 * handling startegy is abort.
5146 */
5147 FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
5148 /**
5149 * The client tries to undo the operations already executed. But there is no
5150 * guaruntee that this is succeeding.
5151 */
5152 FailureHandlingKind.Undo = 'undo';
5153})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
5154/**
5155 * Defines how the host (editor) should sync
5156 * document changes to the language server.
5157 */
5158var TextDocumentSyncKind;
5159(function (TextDocumentSyncKind) {
5160 /**
5161 * Documents should not be synced at all.
5162 */
5163 TextDocumentSyncKind.None = 0;
5164 /**
5165 * Documents are synced by always sending the full content
5166 * of the document.
5167 */
5168 TextDocumentSyncKind.Full = 1;
5169 /**
5170 * Documents are synced by sending the full content on open.
5171 * After that only incremental updates to the document are
5172 * send.
5173 */
5174 TextDocumentSyncKind.Incremental = 2;
5175})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
5176/**
5177 * The initialize request is sent from the client to the server.
5178 * It is sent once as the request after starting up the server.
5179 * The requests parameter is of type [InitializeParams](#InitializeParams)
5180 * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
5181 * resolves to such.
5182 */
5183var InitializeRequest;
5184(function (InitializeRequest) {
5185 InitializeRequest.type = new vscode_jsonrpc_1.RequestType('initialize');
5186})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
5187/**
5188 * Known error codes for an `InitializeError`;
5189 */
5190var InitializeError;
5191(function (InitializeError) {
5192 /**
5193 * If the protocol version provided by the client can't be handled by the server.
5194 * @deprecated This initialize error got replaced by client capabilities. There is
5195 * no version handshake in version 3.0x
5196 */
5197 InitializeError.unknownProtocolVersion = 1;
5198})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
5199/**
5200 * The intialized notification is sent from the client to the
5201 * server after the client is fully initialized and the server
5202 * is allowed to send requests from the server to the client.
5203 */
5204var InitializedNotification;
5205(function (InitializedNotification) {
5206 InitializedNotification.type = new vscode_jsonrpc_1.NotificationType('initialized');
5207})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
5208//---- Shutdown Method ----
5209/**
5210 * A shutdown request is sent from the client to the server.
5211 * It is sent once when the client decides to shutdown the
5212 * server. The only notification that is sent after a shutdown request
5213 * is the exit event.
5214 */
5215var ShutdownRequest;
5216(function (ShutdownRequest) {
5217 ShutdownRequest.type = new vscode_jsonrpc_1.RequestType0('shutdown');
5218})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
5219//---- Exit Notification ----
5220/**
5221 * The exit event is sent from the client to the server to
5222 * ask the server to exit its process.
5223 */
5224var ExitNotification;
5225(function (ExitNotification) {
5226 ExitNotification.type = new vscode_jsonrpc_1.NotificationType0('exit');
5227})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
5228//---- Configuration notification ----
5229/**
5230 * The configuration change notification is sent from the client to the server
5231 * when the client's configuration has changed. The notification contains
5232 * the changed configuration as defined by the language client.
5233 */
5234var DidChangeConfigurationNotification;
5235(function (DidChangeConfigurationNotification) {
5236 DidChangeConfigurationNotification.type = new vscode_jsonrpc_1.NotificationType('workspace/didChangeConfiguration');
5237})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
5238//---- Message show and log notifications ----
5239/**
5240 * The message type
5241 */
5242var MessageType;
5243(function (MessageType) {
5244 /**
5245 * An error message.
5246 */
5247 MessageType.Error = 1;
5248 /**
5249 * A warning message.
5250 */
5251 MessageType.Warning = 2;
5252 /**
5253 * An information message.
5254 */
5255 MessageType.Info = 3;
5256 /**
5257 * A log message.
5258 */
5259 MessageType.Log = 4;
5260})(MessageType = exports.MessageType || (exports.MessageType = {}));
5261/**
5262 * The show message notification is sent from a server to a client to ask
5263 * the client to display a particular message in the user interface.
5264 */
5265var ShowMessageNotification;
5266(function (ShowMessageNotification) {
5267 ShowMessageNotification.type = new vscode_jsonrpc_1.NotificationType('window/showMessage');
5268})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
5269/**
5270 * The show message request is sent from the server to the client to show a message
5271 * and a set of options actions to the user.
5272 */
5273var ShowMessageRequest;
5274(function (ShowMessageRequest) {
5275 ShowMessageRequest.type = new vscode_jsonrpc_1.RequestType('window/showMessageRequest');
5276})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
5277/**
5278 * The log message notification is sent from the server to the client to ask
5279 * the client to log a particular message.
5280 */
5281var LogMessageNotification;
5282(function (LogMessageNotification) {
5283 LogMessageNotification.type = new vscode_jsonrpc_1.NotificationType('window/logMessage');
5284})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
5285//---- Telemetry notification
5286/**
5287 * The telemetry event notification is sent from the server to the client to ask
5288 * the client to log telemetry data.
5289 */
5290var TelemetryEventNotification;
5291(function (TelemetryEventNotification) {
5292 TelemetryEventNotification.type = new vscode_jsonrpc_1.NotificationType('telemetry/event');
5293})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
5294/**
5295 * The document open notification is sent from the client to the server to signal
5296 * newly opened text documents. The document's truth is now managed by the client
5297 * and the server must not try to read the document's truth using the document's
5298 * uri. Open in this sense means it is managed by the client. It doesn't necessarily
5299 * mean that its content is presented in an editor. An open notification must not
5300 * be sent more than once without a corresponding close notification send before.
5301 * This means open and close notification must be balanced and the max open count
5302 * is one.
5303 */
5304var DidOpenTextDocumentNotification;
5305(function (DidOpenTextDocumentNotification) {
5306 DidOpenTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didOpen');
5307})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
5308/**
5309 * The document change notification is sent from the client to the server to signal
5310 * changes to a text document.
5311 */
5312var DidChangeTextDocumentNotification;
5313(function (DidChangeTextDocumentNotification) {
5314 DidChangeTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didChange');
5315})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
5316/**
5317 * The document close notification is sent from the client to the server when
5318 * the document got closed in the client. The document's truth now exists where
5319 * the document's uri points to (e.g. if the document's uri is a file uri the
5320 * truth now exists on disk). As with the open notification the close notification
5321 * is about managing the document's content. Receiving a close notification
5322 * doesn't mean that the document was open in an editor before. A close
5323 * notification requires a previous open notification to be sent.
5324 */
5325var DidCloseTextDocumentNotification;
5326(function (DidCloseTextDocumentNotification) {
5327 DidCloseTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didClose');
5328})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
5329/**
5330 * The document save notification is sent from the client to the server when
5331 * the document got saved in the client.
5332 */
5333var DidSaveTextDocumentNotification;
5334(function (DidSaveTextDocumentNotification) {
5335 DidSaveTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/didSave');
5336})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
5337/**
5338 * A document will save notification is sent from the client to the server before
5339 * the document is actually saved.
5340 */
5341var WillSaveTextDocumentNotification;
5342(function (WillSaveTextDocumentNotification) {
5343 WillSaveTextDocumentNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/willSave');
5344})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
5345/**
5346 * A document will save request is sent from the client to the server before
5347 * the document is actually saved. The request can return an array of TextEdits
5348 * which will be applied to the text document before it is saved. Please note that
5349 * clients might drop results if computing the text edits took too long or if a
5350 * server constantly fails on this request. This is done to keep the save fast and
5351 * reliable.
5352 */
5353var WillSaveTextDocumentWaitUntilRequest;
5354(function (WillSaveTextDocumentWaitUntilRequest) {
5355 WillSaveTextDocumentWaitUntilRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/willSaveWaitUntil');
5356})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
5357//---- File eventing ----
5358/**
5359 * The watched files notification is sent from the client to the server when
5360 * the client detects changes to file watched by the language client.
5361 */
5362var DidChangeWatchedFilesNotification;
5363(function (DidChangeWatchedFilesNotification) {
5364 DidChangeWatchedFilesNotification.type = new vscode_jsonrpc_1.NotificationType('workspace/didChangeWatchedFiles');
5365})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
5366/**
5367 * The file event type
5368 */
5369var FileChangeType;
5370(function (FileChangeType) {
5371 /**
5372 * The file got created.
5373 */
5374 FileChangeType.Created = 1;
5375 /**
5376 * The file got changed.
5377 */
5378 FileChangeType.Changed = 2;
5379 /**
5380 * The file got deleted.
5381 */
5382 FileChangeType.Deleted = 3;
5383})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
5384var WatchKind;
5385(function (WatchKind) {
5386 /**
5387 * Interested in create events.
5388 */
5389 WatchKind.Create = 1;
5390 /**
5391 * Interested in change events
5392 */
5393 WatchKind.Change = 2;
5394 /**
5395 * Interested in delete events
5396 */
5397 WatchKind.Delete = 4;
5398})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
5399//---- Diagnostic notification ----
5400/**
5401 * Diagnostics notification are sent from the server to the client to signal
5402 * results of validation runs.
5403 */
5404var PublishDiagnosticsNotification;
5405(function (PublishDiagnosticsNotification) {
5406 PublishDiagnosticsNotification.type = new vscode_jsonrpc_1.NotificationType('textDocument/publishDiagnostics');
5407})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
5408/**
5409 * How a completion was triggered
5410 */
5411var CompletionTriggerKind;
5412(function (CompletionTriggerKind) {
5413 /**
5414 * Completion was triggered by typing an identifier (24x7 code
5415 * complete), manual invocation (e.g Ctrl+Space) or via API.
5416 */
5417 CompletionTriggerKind.Invoked = 1;
5418 /**
5419 * Completion was triggered by a trigger character specified by
5420 * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
5421 */
5422 CompletionTriggerKind.TriggerCharacter = 2;
5423 /**
5424 * Completion was re-triggered as current completion list is incomplete
5425 */
5426 CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
5427})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
5428/**
5429 * Request to request completion at a given text document position. The request's
5430 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
5431 * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
5432 * or a Thenable that resolves to such.
5433 *
5434 * The request can delay the computation of the [`detail`](#CompletionItem.detail)
5435 * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
5436 * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
5437 * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
5438 */
5439var CompletionRequest;
5440(function (CompletionRequest) {
5441 CompletionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/completion');
5442})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
5443/**
5444 * Request to resolve additional information for a given completion item.The request's
5445 * parameter is of type [CompletionItem](#CompletionItem) the response
5446 * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
5447 */
5448var CompletionResolveRequest;
5449(function (CompletionResolveRequest) {
5450 CompletionResolveRequest.type = new vscode_jsonrpc_1.RequestType('completionItem/resolve');
5451})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
5452//---- Hover Support -------------------------------
5453/**
5454 * Request to request hover information at a given text document position. The request's
5455 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
5456 * type [Hover](#Hover) or a Thenable that resolves to such.
5457 */
5458var HoverRequest;
5459(function (HoverRequest) {
5460 HoverRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/hover');
5461})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
5462var SignatureHelpRequest;
5463(function (SignatureHelpRequest) {
5464 SignatureHelpRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/signatureHelp');
5465})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
5466//---- Goto Definition -------------------------------------
5467/**
5468 * A request to resolve the definition location of a symbol at a given text
5469 * document position. The request's parameter is of type [TextDocumentPosition]
5470 * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
5471 * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
5472 * to such.
5473 */
5474var DefinitionRequest;
5475(function (DefinitionRequest) {
5476 DefinitionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/definition');
5477})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
5478/**
5479 * A request to resolve project-wide references for the symbol denoted
5480 * by the given text document position. The request's parameter is of
5481 * type [ReferenceParams](#ReferenceParams) the response is of type
5482 * [Location[]](#Location) or a Thenable that resolves to such.
5483 */
5484var ReferencesRequest;
5485(function (ReferencesRequest) {
5486 ReferencesRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/references');
5487})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
5488//---- Document Highlight ----------------------------------
5489/**
5490 * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
5491 * text document position. The request's parameter is of type [TextDocumentPosition]
5492 * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
5493 * (#DocumentHighlight) or a Thenable that resolves to such.
5494 */
5495var DocumentHighlightRequest;
5496(function (DocumentHighlightRequest) {
5497 DocumentHighlightRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentHighlight');
5498})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
5499//---- Document Symbol Provider ---------------------------
5500/**
5501 * A request to list all symbols found in a given text document. The request's
5502 * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
5503 * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
5504 * that resolves to such.
5505 */
5506var DocumentSymbolRequest;
5507(function (DocumentSymbolRequest) {
5508 DocumentSymbolRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentSymbol');
5509})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
5510//---- Workspace Symbol Provider ---------------------------
5511/**
5512 * A request to list project-wide symbols matching the query string given
5513 * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
5514 * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
5515 * resolves to such.
5516 */
5517var WorkspaceSymbolRequest;
5518(function (WorkspaceSymbolRequest) {
5519 WorkspaceSymbolRequest.type = new vscode_jsonrpc_1.RequestType('workspace/symbol');
5520})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
5521/**
5522 * A request to provide commands for the given text document and range.
5523 */
5524var CodeActionRequest;
5525(function (CodeActionRequest) {
5526 CodeActionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeAction');
5527})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
5528/**
5529 * A request to provide code lens for the given text document.
5530 */
5531var CodeLensRequest;
5532(function (CodeLensRequest) {
5533 CodeLensRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/codeLens');
5534})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
5535/**
5536 * A request to resolve a command for a given code lens.
5537 */
5538var CodeLensResolveRequest;
5539(function (CodeLensResolveRequest) {
5540 CodeLensResolveRequest.type = new vscode_jsonrpc_1.RequestType('codeLens/resolve');
5541})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
5542/**
5543 * A request to to format a whole document.
5544 */
5545var DocumentFormattingRequest;
5546(function (DocumentFormattingRequest) {
5547 DocumentFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/formatting');
5548})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
5549/**
5550 * A request to to format a range in a document.
5551 */
5552var DocumentRangeFormattingRequest;
5553(function (DocumentRangeFormattingRequest) {
5554 DocumentRangeFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/rangeFormatting');
5555})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
5556/**
5557 * A request to format a document on type.
5558 */
5559var DocumentOnTypeFormattingRequest;
5560(function (DocumentOnTypeFormattingRequest) {
5561 DocumentOnTypeFormattingRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/onTypeFormatting');
5562})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
5563/**
5564 * A request to rename a symbol.
5565 */
5566var RenameRequest;
5567(function (RenameRequest) {
5568 RenameRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/rename');
5569})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
5570/**
5571 * A request to test and perform the setup necessary for a rename.
5572 */
5573var PrepareRenameRequest;
5574(function (PrepareRenameRequest) {
5575 PrepareRenameRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/prepareRename');
5576})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
5577/**
5578 * A request to provide document links
5579 */
5580var DocumentLinkRequest;
5581(function (DocumentLinkRequest) {
5582 DocumentLinkRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentLink');
5583})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
5584/**
5585 * Request to resolve additional information for a given document link. The request's
5586 * parameter is of type [DocumentLink](#DocumentLink) the response
5587 * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
5588 */
5589var DocumentLinkResolveRequest;
5590(function (DocumentLinkResolveRequest) {
5591 DocumentLinkResolveRequest.type = new vscode_jsonrpc_1.RequestType('documentLink/resolve');
5592})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
5593/**
5594 * A request send from the client to the server to execute a command. The request might return
5595 * a workspace edit which the client will apply to the workspace.
5596 */
5597var ExecuteCommandRequest;
5598(function (ExecuteCommandRequest) {
5599 ExecuteCommandRequest.type = new vscode_jsonrpc_1.RequestType('workspace/executeCommand');
5600})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
5601/**
5602 * A request sent from the server to the client to modified certain resources.
5603 */
5604var ApplyWorkspaceEditRequest;
5605(function (ApplyWorkspaceEditRequest) {
5606 ApplyWorkspaceEditRequest.type = new vscode_jsonrpc_1.RequestType('workspace/applyEdit');
5607})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
5608
5609
5610/***/ }),
5611/* 22 */
5612/***/ (function(module, exports, __webpack_require__) {
5613
5614"use strict";
5615/* --------------------------------------------------------------------------------------------
5616 * Copyright (c) Microsoft Corporation. All rights reserved.
5617 * Licensed under the MIT License. See License.txt in the project root for license information.
5618 * ------------------------------------------------------------------------------------------ */
5619
5620Object.defineProperty(exports, "__esModule", { value: true });
5621function boolean(value) {
5622 return value === true || value === false;
5623}
5624exports.boolean = boolean;
5625function string(value) {
5626 return typeof value === 'string' || value instanceof String;
5627}
5628exports.string = string;
5629function number(value) {
5630 return typeof value === 'number' || value instanceof Number;
5631}
5632exports.number = number;
5633function error(value) {
5634 return value instanceof Error;
5635}
5636exports.error = error;
5637function func(value) {
5638 return typeof value === 'function';
5639}
5640exports.func = func;
5641function array(value) {
5642 return Array.isArray(value);
5643}
5644exports.array = array;
5645function stringArray(value) {
5646 return array(value) && value.every(elem => string(elem));
5647}
5648exports.stringArray = stringArray;
5649function typedArray(value, check) {
5650 return Array.isArray(value) && value.every(check);
5651}
5652exports.typedArray = typedArray;
5653function thenable(value) {
5654 return value && func(value.then);
5655}
5656exports.thenable = thenable;
5657
5658
5659/***/ }),
5660/* 23 */
5661/***/ (function(module, exports, __webpack_require__) {
5662
5663"use strict";
5664/* --------------------------------------------------------------------------------------------
5665 * Copyright (c) Microsoft Corporation. All rights reserved.
5666 * Licensed under the MIT License. See License.txt in the project root for license information.
5667 * ------------------------------------------------------------------------------------------ */
5668
5669Object.defineProperty(exports, "__esModule", { value: true });
5670const vscode_jsonrpc_1 = __webpack_require__(6);
5671// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5672let __noDynamicImport;
5673/**
5674 * A request to resolve the implementation locations of a symbol at a given text
5675 * document position. The request's parameter is of type [TextDocumentPositioParams]
5676 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
5677 * Thenable that resolves to such.
5678 */
5679var ImplementationRequest;
5680(function (ImplementationRequest) {
5681 ImplementationRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/implementation');
5682})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
5683
5684
5685/***/ }),
5686/* 24 */
5687/***/ (function(module, exports, __webpack_require__) {
5688
5689"use strict";
5690/* --------------------------------------------------------------------------------------------
5691 * Copyright (c) Microsoft Corporation. All rights reserved.
5692 * Licensed under the MIT License. See License.txt in the project root for license information.
5693 * ------------------------------------------------------------------------------------------ */
5694
5695Object.defineProperty(exports, "__esModule", { value: true });
5696const vscode_jsonrpc_1 = __webpack_require__(6);
5697// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5698let __noDynamicImport;
5699/**
5700 * A request to resolve the type definition locations of a symbol at a given text
5701 * document position. The request's parameter is of type [TextDocumentPositioParams]
5702 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
5703 * Thenable that resolves to such.
5704 */
5705var TypeDefinitionRequest;
5706(function (TypeDefinitionRequest) {
5707 TypeDefinitionRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/typeDefinition');
5708})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
5709
5710
5711/***/ }),
5712/* 25 */
5713/***/ (function(module, exports, __webpack_require__) {
5714
5715"use strict";
5716/* --------------------------------------------------------------------------------------------
5717 * Copyright (c) Microsoft Corporation. All rights reserved.
5718 * Licensed under the MIT License. See License.txt in the project root for license information.
5719 * ------------------------------------------------------------------------------------------ */
5720
5721Object.defineProperty(exports, "__esModule", { value: true });
5722const vscode_jsonrpc_1 = __webpack_require__(6);
5723/**
5724 * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
5725 */
5726var WorkspaceFoldersRequest;
5727(function (WorkspaceFoldersRequest) {
5728 WorkspaceFoldersRequest.type = new vscode_jsonrpc_1.RequestType0('workspace/workspaceFolders');
5729})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
5730/**
5731 * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
5732 * folder configuration changes.
5733 */
5734var DidChangeWorkspaceFoldersNotification;
5735(function (DidChangeWorkspaceFoldersNotification) {
5736 DidChangeWorkspaceFoldersNotification.type = new vscode_jsonrpc_1.NotificationType('workspace/didChangeWorkspaceFolders');
5737})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
5738
5739
5740/***/ }),
5741/* 26 */
5742/***/ (function(module, exports, __webpack_require__) {
5743
5744"use strict";
5745/* --------------------------------------------------------------------------------------------
5746 * Copyright (c) Microsoft Corporation. All rights reserved.
5747 * Licensed under the MIT License. See License.txt in the project root for license information.
5748 * ------------------------------------------------------------------------------------------ */
5749
5750Object.defineProperty(exports, "__esModule", { value: true });
5751const vscode_jsonrpc_1 = __webpack_require__(6);
5752/**
5753 * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
5754 * configuration setting.
5755 *
5756 * This pull model replaces the old push model were the client signaled configuration change via an
5757 * event. If the server still needs to react to configuration changes (since the server caches the
5758 * result of `workspace/configuration` requests) the server should register for an empty configuration
5759 * change event and empty the cache if such an event is received.
5760 */
5761var ConfigurationRequest;
5762(function (ConfigurationRequest) {
5763 ConfigurationRequest.type = new vscode_jsonrpc_1.RequestType('workspace/configuration');
5764})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
5765
5766
5767/***/ }),
5768/* 27 */
5769/***/ (function(module, exports, __webpack_require__) {
5770
5771"use strict";
5772/* --------------------------------------------------------------------------------------------
5773 * Copyright (c) Microsoft Corporation. All rights reserved.
5774 * Licensed under the MIT License. See License.txt in the project root for license information.
5775 * ------------------------------------------------------------------------------------------ */
5776
5777Object.defineProperty(exports, "__esModule", { value: true });
5778const vscode_jsonrpc_1 = __webpack_require__(6);
5779/**
5780 * A request to list all color symbols found in a given text document. The request's
5781 * parameter is of type [DocumentColorParams](#DocumentColorParams) the
5782 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
5783 * that resolves to such.
5784 */
5785var DocumentColorRequest;
5786(function (DocumentColorRequest) {
5787 DocumentColorRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/documentColor');
5788})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
5789/**
5790 * A request to list all presentation for a color. The request's
5791 * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
5792 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
5793 * that resolves to such.
5794 */
5795var ColorPresentationRequest;
5796(function (ColorPresentationRequest) {
5797 ColorPresentationRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/colorPresentation');
5798})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
5799
5800
5801/***/ }),
5802/* 28 */
5803/***/ (function(module, exports, __webpack_require__) {
5804
5805"use strict";
5806
5807/*---------------------------------------------------------------------------------------------
5808 * Copyright (c) Microsoft Corporation. All rights reserved.
5809 * Licensed under the MIT License. See License.txt in the project root for license information.
5810 *--------------------------------------------------------------------------------------------*/
5811Object.defineProperty(exports, "__esModule", { value: true });
5812const vscode_jsonrpc_1 = __webpack_require__(6);
5813/**
5814 * Enum of known range kinds
5815 */
5816var FoldingRangeKind;
5817(function (FoldingRangeKind) {
5818 /**
5819 * Folding range for a comment
5820 */
5821 FoldingRangeKind["Comment"] = "comment";
5822 /**
5823 * Folding range for a imports or includes
5824 */
5825 FoldingRangeKind["Imports"] = "imports";
5826 /**
5827 * Folding range for a region (e.g. `#region`)
5828 */
5829 FoldingRangeKind["Region"] = "region";
5830})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
5831/**
5832 * A request to provide folding ranges in a document. The request's
5833 * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
5834 * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
5835 * that resolves to such.
5836 */
5837var FoldingRangeRequest;
5838(function (FoldingRangeRequest) {
5839 FoldingRangeRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/foldingRange');
5840})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
5841
5842
5843/***/ }),
5844/* 29 */
5845/***/ (function(module, exports, __webpack_require__) {
5846
5847"use strict";
5848/* --------------------------------------------------------------------------------------------
5849 * Copyright (c) Microsoft Corporation. All rights reserved.
5850 * Licensed under the MIT License. See License.txt in the project root for license information.
5851 * ------------------------------------------------------------------------------------------ */
5852
5853Object.defineProperty(exports, "__esModule", { value: true });
5854const vscode_jsonrpc_1 = __webpack_require__(6);
5855// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5856let __noDynamicImport;
5857/**
5858 * A request to resolve the type definition locations of a symbol at a given text
5859 * document position. The request's parameter is of type [TextDocumentPositioParams]
5860 * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
5861 * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
5862 * to such.
5863 */
5864var DeclarationRequest;
5865(function (DeclarationRequest) {
5866 DeclarationRequest.type = new vscode_jsonrpc_1.RequestType('textDocument/declaration');
5867})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
5868
5869
5870/***/ }),
5871/* 30 */
5872/***/ (function(module, exports, __webpack_require__) {
5873
5874"use strict";
5875/* --------------------------------------------------------------------------------------------
5876 * Copyright (c) Microsoft Corporation. All rights reserved.
5877 * Licensed under the MIT License. See License.txt in the project root for license information.
5878 * ------------------------------------------------------------------------------------------ */
5879
5880Object.defineProperty(exports, "__esModule", { value: true });
5881const vscode_languageserver_protocol_1 = __webpack_require__(5);
5882const Is = __webpack_require__(31);
5883exports.ConfigurationFeature = (Base) => {
5884 return class extends Base {
5885 getConfiguration(arg) {
5886 if (!arg) {
5887 return this._getConfiguration({});
5888 }
5889 else if (Is.string(arg)) {
5890 return this._getConfiguration({ section: arg });
5891 }
5892 else {
5893 return this._getConfiguration(arg);
5894 }
5895 }
5896 _getConfiguration(arg) {
5897 let params = {
5898 items: Array.isArray(arg) ? arg : [arg]
5899 };
5900 return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
5901 return Array.isArray(arg) ? result : result[0];
5902 });
5903 }
5904 };
5905};
5906
5907
5908/***/ }),
5909/* 31 */
5910/***/ (function(module, exports, __webpack_require__) {
5911
5912"use strict";
5913/* --------------------------------------------------------------------------------------------
5914 * Copyright (c) Microsoft Corporation. All rights reserved.
5915 * Licensed under the MIT License. See License.txt in the project root for license information.
5916 * ------------------------------------------------------------------------------------------ */
5917
5918Object.defineProperty(exports, "__esModule", { value: true });
5919function boolean(value) {
5920 return value === true || value === false;
5921}
5922exports.boolean = boolean;
5923function string(value) {
5924 return typeof value === 'string' || value instanceof String;
5925}
5926exports.string = string;
5927function number(value) {
5928 return typeof value === 'number' || value instanceof Number;
5929}
5930exports.number = number;
5931function error(value) {
5932 return value instanceof Error;
5933}
5934exports.error = error;
5935function func(value) {
5936 return typeof value === 'function';
5937}
5938exports.func = func;
5939function array(value) {
5940 return Array.isArray(value);
5941}
5942exports.array = array;
5943function stringArray(value) {
5944 return array(value) && value.every(elem => string(elem));
5945}
5946exports.stringArray = stringArray;
5947function typedArray(value, check) {
5948 return Array.isArray(value) && value.every(check);
5949}
5950exports.typedArray = typedArray;
5951function thenable(value) {
5952 return value && func(value.then);
5953}
5954exports.thenable = thenable;
5955
5956
5957/***/ }),
5958/* 32 */
5959/***/ (function(module, exports, __webpack_require__) {
5960
5961"use strict";
5962/* --------------------------------------------------------------------------------------------
5963 * Copyright (c) Microsoft Corporation. All rights reserved.
5964 * Licensed under the MIT License. See License.txt in the project root for license information.
5965 * ------------------------------------------------------------------------------------------ */
5966
5967Object.defineProperty(exports, "__esModule", { value: true });
5968const vscode_languageserver_protocol_1 = __webpack_require__(5);
5969exports.WorkspaceFoldersFeature = (Base) => {
5970 return class extends Base {
5971 initialize(capabilities) {
5972 let workspaceCapabilities = capabilities.workspace;
5973 if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
5974 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
5975 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
5976 this._onDidChangeWorkspaceFolders.fire(params.event);
5977 });
5978 }
5979 }
5980 getWorkspaceFolders() {
5981 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
5982 }
5983 get onDidChangeWorkspaceFolders() {
5984 if (!this._onDidChangeWorkspaceFolders) {
5985 throw new Error('Client doesn\'t support sending workspace folder change events.');
5986 }
5987 if (!this._unregistration) {
5988 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
5989 }
5990 return this._onDidChangeWorkspaceFolders.event;
5991 }
5992 };
5993};
5994
5995
5996/***/ }),
5997/* 33 */
5998/***/ (function(module, exports, __webpack_require__) {
5999
6000"use strict";
6001/*---------------------------------------------------------------------------------------------
6002 * Copyright (c) Microsoft Corporation. All rights reserved.
6003 * Licensed under the MIT License. See License.txt in the project root for license information.
6004 *--------------------------------------------------------------------------------------------*/
6005
6006Object.defineProperty(exports, "__esModule", { value: true });
6007class ValueUUID {
6008 constructor(_value) {
6009 this._value = _value;
6010 // empty
6011 }
6012 asHex() {
6013 return this._value;
6014 }
6015 equals(other) {
6016 return this.asHex() === other.asHex();
6017 }
6018}
6019class V4UUID extends ValueUUID {
6020 constructor() {
6021 super([
6022 V4UUID._randomHex(),
6023 V4UUID._randomHex(),
6024 V4UUID._randomHex(),
6025 V4UUID._randomHex(),
6026 V4UUID._randomHex(),
6027 V4UUID._randomHex(),
6028 V4UUID._randomHex(),
6029 V4UUID._randomHex(),
6030 '-',
6031 V4UUID._randomHex(),
6032 V4UUID._randomHex(),
6033 V4UUID._randomHex(),
6034 V4UUID._randomHex(),
6035 '-',
6036 '4',
6037 V4UUID._randomHex(),
6038 V4UUID._randomHex(),
6039 V4UUID._randomHex(),
6040 '-',
6041 V4UUID._oneOf(V4UUID._timeHighBits),
6042 V4UUID._randomHex(),
6043 V4UUID._randomHex(),
6044 V4UUID._randomHex(),
6045 '-',
6046 V4UUID._randomHex(),
6047 V4UUID._randomHex(),
6048 V4UUID._randomHex(),
6049 V4UUID._randomHex(),
6050 V4UUID._randomHex(),
6051 V4UUID._randomHex(),
6052 V4UUID._randomHex(),
6053 V4UUID._randomHex(),
6054 V4UUID._randomHex(),
6055 V4UUID._randomHex(),
6056 V4UUID._randomHex(),
6057 V4UUID._randomHex(),
6058 ].join(''));
6059 }
6060 static _oneOf(array) {
6061 return array[Math.floor(array.length * Math.random())];
6062 }
6063 static _randomHex() {
6064 return V4UUID._oneOf(V4UUID._chars);
6065 }
6066}
6067V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
6068V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
6069/**
6070 * An empty UUID that contains only zeros.
6071 */
6072exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
6073function v4() {
6074 return new V4UUID();
6075}
6076exports.v4 = v4;
6077const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6078function isUUID(value) {
6079 return _UUIDPattern.test(value);
6080}
6081exports.isUUID = isUUID;
6082/**
6083 * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
6084 * @param value A uuid string.
6085 */
6086function parse(value) {
6087 if (!isUUID(value)) {
6088 throw new Error('invalid uuid');
6089 }
6090 return new ValueUUID(value);
6091}
6092exports.parse = parse;
6093function generateUuid() {
6094 return v4().asHex();
6095}
6096exports.generateUuid = generateUuid;
6097
6098
6099/***/ }),
6100/* 34 */
6101/***/ (function(module, exports, __webpack_require__) {
6102
6103"use strict";
6104/* --------------------------------------------------------------------------------------------
6105 * Copyright (c) Microsoft Corporation. All rights reserved.
6106 * Licensed under the MIT License. See License.txt in the project root for license information.
6107 * ------------------------------------------------------------------------------------------ */
6108
6109Object.defineProperty(exports, "__esModule", { value: true });
6110const url = __webpack_require__(35);
6111const path = __webpack_require__(15);
6112const fs = __webpack_require__(36);
6113const child_process_1 = __webpack_require__(37);
6114/**
6115 * @deprecated Use the `vscode-uri` npm module which provides a more
6116 * complete implementation of handling VS Code URIs.
6117 */
6118function uriToFilePath(uri) {
6119 let parsed = url.parse(uri);
6120 if (parsed.protocol !== 'file:' || !parsed.path) {
6121 return undefined;
6122 }
6123 let segments = parsed.path.split('/');
6124 for (var i = 0, len = segments.length; i < len; i++) {
6125 segments[i] = decodeURIComponent(segments[i]);
6126 }
6127 if (process.platform === 'win32' && segments.length > 1) {
6128 let first = segments[0];
6129 let second = segments[1];
6130 // Do we have a drive letter and we started with a / which is the
6131 // case if the first segement is empty (see split above)
6132 if (first.length === 0 && second.length > 1 && second[1] === ':') {
6133 // Remove first slash
6134 segments.shift();
6135 }
6136 }
6137 return path.normalize(segments.join('/'));
6138}
6139exports.uriToFilePath = uriToFilePath;
6140function isWindows() {
6141 return process.platform === 'win32';
6142}
6143function resolveModule(workspaceRoot, moduleName) {
6144 let nodePathKey = 'NODE_PATH';
6145 return new Promise((resolve, reject) => {
6146 let nodePath = [];
6147 if (workspaceRoot) {
6148 nodePath.push(path.join(workspaceRoot, 'node_modules'));
6149 }
6150 child_process_1.exec('npm config get prefix', (error, stdout, _stderr) => {
6151 if (!error) {
6152 let globalPath = stdout.replace(/[\s\r\n]+$/, '');
6153 if (globalPath.length > 0) {
6154 if (isWindows()) {
6155 nodePath.push(path.join(globalPath, 'node_modules'));
6156 }
6157 else {
6158 nodePath.push(path.join(globalPath, 'lib', 'node_modules'));
6159 }
6160 }
6161 }
6162 let separator = isWindows() ? ';' : ':';
6163 let env = process.env;
6164 let newEnv = Object.create(null);
6165 Object.keys(env).forEach(key => newEnv[key] = env[key]);
6166 if (newEnv[nodePathKey]) {
6167 newEnv[nodePathKey] = nodePath.join(separator) + separator + newEnv[nodePathKey];
6168 }
6169 else {
6170 newEnv[nodePathKey] = nodePath.join(separator);
6171 }
6172 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
6173 try {
6174 let cp = child_process_1.fork(path.join(__dirname, 'resolve.js'), [], { env: newEnv, execArgv: [] });
6175 if (cp.pid === void 0) {
6176 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
6177 return;
6178 }
6179 cp.on('message', (message) => {
6180 if (message.command === 'resolve') {
6181 let toRequire = moduleName;
6182 if (message.success) {
6183 toRequire = message.result;
6184 }
6185 cp.send({ command: 'exit' });
6186 try {
6187 resolve(__webpack_require__(38)(toRequire));
6188 }
6189 catch (error) {
6190 reject(error);
6191 }
6192 }
6193 });
6194 let message = {
6195 command: 'resolve',
6196 args: moduleName
6197 };
6198 cp.send(message);
6199 }
6200 catch (error) {
6201 reject(error);
6202 }
6203 });
6204 });
6205}
6206exports.resolveModule = resolveModule;
6207function resolve(moduleName, nodePath, cwd, tracer) {
6208 const nodePathKey = 'NODE_PATH';
6209 const app = [
6210 "var p = process;",
6211 "p.on('message',function(m){",
6212 "if(m.c==='e'){",
6213 "p.exit(0);",
6214 "}",
6215 "else if(m.c==='rs'){",
6216 "try{",
6217 "var r=require.resolve(m.a);",
6218 "p.send({c:'r',s:true,r:r});",
6219 "}",
6220 "catch(err){",
6221 "p.send({c:'r',s:false});",
6222 "}",
6223 "}",
6224 "});"
6225 ].join('');
6226 return new Promise((resolve, reject) => {
6227 let env = process.env;
6228 let newEnv = Object.create(null);
6229 Object.keys(env).forEach(key => newEnv[key] = env[key]);
6230 if (nodePath) {
6231 if (newEnv[nodePathKey]) {
6232 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
6233 }
6234 else {
6235 newEnv[nodePathKey] = nodePath;
6236 }
6237 if (tracer) {
6238 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
6239 }
6240 }
6241 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
6242 try {
6243 let cp = child_process_1.fork('', [], {
6244 cwd: cwd,
6245 env: newEnv,
6246 execArgv: ['-e', app]
6247 });
6248 if (cp.pid === void 0) {
6249 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
6250 return;
6251 }
6252 cp.on('error', (error) => {
6253 reject(error);
6254 });
6255 cp.on('message', (message) => {
6256 if (message.c === 'r') {
6257 cp.send({ c: 'e' });
6258 if (message.s) {
6259 resolve(message.r);
6260 }
6261 else {
6262 reject(new Error(`Failed to resolve module: ${moduleName}`));
6263 }
6264 }
6265 });
6266 let message = {
6267 c: 'rs',
6268 a: moduleName
6269 };
6270 cp.send(message);
6271 }
6272 catch (error) {
6273 reject(error);
6274 }
6275 });
6276}
6277exports.resolve = resolve;
6278function resolveGlobalNodePath(tracer) {
6279 let npmCommand = 'npm';
6280 let options = {
6281 encoding: 'utf8'
6282 };
6283 if (isWindows()) {
6284 npmCommand = 'npm.cmd';
6285 options.shell = true;
6286 }
6287 let handler = () => { };
6288 try {
6289 process.on('SIGPIPE', handler);
6290 let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
6291 if (!stdout) {
6292 if (tracer) {
6293 tracer(`'npm config get prefix' didn't return a value.`);
6294 }
6295 return undefined;
6296 }
6297 let prefix = stdout.trim();
6298 if (tracer) {
6299 tracer(`'npm config get prefix' value is: ${prefix}`);
6300 }
6301 if (prefix.length > 0) {
6302 if (isWindows()) {
6303 return path.join(prefix, 'node_modules');
6304 }
6305 else {
6306 return path.join(prefix, 'lib', 'node_modules');
6307 }
6308 }
6309 return undefined;
6310 }
6311 catch (err) {
6312 return undefined;
6313 }
6314 finally {
6315 process.removeListener('SIGPIPE', handler);
6316 }
6317}
6318exports.resolveGlobalNodePath = resolveGlobalNodePath;
6319function resolveGlobalYarnPath(tracer) {
6320 let yarnCommand = 'yarn';
6321 let options = {
6322 encoding: 'utf8'
6323 };
6324 if (isWindows()) {
6325 yarnCommand = 'yarn.cmd';
6326 options.shell = true;
6327 }
6328 let handler = () => { };
6329 try {
6330 process.on('SIGPIPE', handler);
6331 let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
6332 let stdout = results.stdout;
6333 if (!stdout) {
6334 if (tracer) {
6335 tracer(`'yarn global dir' didn't return a value.`);
6336 if (results.stderr) {
6337 tracer(results.stderr);
6338 }
6339 }
6340 return undefined;
6341 }
6342 let lines = stdout.trim().split(/\r?\n/);
6343 for (let line of lines) {
6344 try {
6345 let yarn = JSON.parse(line);
6346 if (yarn.type === 'log') {
6347 return path.join(yarn.data, 'node_modules');
6348 }
6349 }
6350 catch (e) {
6351 // Do nothing. Ignore the line
6352 }
6353 }
6354 return undefined;
6355 }
6356 catch (err) {
6357 return undefined;
6358 }
6359 finally {
6360 process.removeListener('SIGPIPE', handler);
6361 }
6362}
6363exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
6364var FileSystem;
6365(function (FileSystem) {
6366 let _isCaseSensitive = undefined;
6367 function isCaseSensitive() {
6368 if (_isCaseSensitive !== void 0) {
6369 return _isCaseSensitive;
6370 }
6371 if (process.platform === 'win32') {
6372 _isCaseSensitive = false;
6373 }
6374 else {
6375 // convert current file name to upper case / lower case and check if file exists
6376 // (guards against cases when name is already all uppercase or lowercase)
6377 _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
6378 }
6379 return _isCaseSensitive;
6380 }
6381 FileSystem.isCaseSensitive = isCaseSensitive;
6382 function isParent(parent, child) {
6383 if (isCaseSensitive()) {
6384 return path.normalize(child).indexOf(path.normalize(parent)) === 0;
6385 }
6386 else {
6387 return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) == 0;
6388 }
6389 }
6390 FileSystem.isParent = isParent;
6391})(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
6392function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
6393 if (nodePath) {
6394 if (!path.isAbsolute(nodePath)) {
6395 nodePath = path.join(workspaceRoot, nodePath);
6396 }
6397 return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
6398 if (FileSystem.isParent(nodePath, value)) {
6399 return value;
6400 }
6401 else {
6402 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
6403 }
6404 }).then(undefined, (_error) => {
6405 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
6406 });
6407 }
6408 else {
6409 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
6410 }
6411}
6412exports.resolveModulePath = resolveModulePath;
6413/**
6414 * Resolves the given module relative to the given workspace root. In contrast to
6415 * `resolveModule` this method considers the parent chain as well.
6416 */
6417function resolveModule2(workspaceRoot, moduleName, nodePath, tracer) {
6418 return resolveModulePath(workspaceRoot, moduleName, nodePath, tracer).then((path) => {
6419 if (tracer) {
6420 tracer(`Module ${moduleName} got resolved to ${path}`);
6421 }
6422 return __webpack_require__(38)(path);
6423 });
6424}
6425exports.resolveModule2 = resolveModule2;
6426
6427
6428/***/ }),
6429/* 35 */
6430/***/ (function(module, exports) {
6431
6432module.exports = require("url");
6433
6434/***/ }),
6435/* 36 */
6436/***/ (function(module, exports) {
6437
6438module.exports = require("fs");
6439
6440/***/ }),
6441/* 37 */
6442/***/ (function(module, exports) {
6443
6444module.exports = require("child_process");
6445
6446/***/ }),
6447/* 38 */
6448/***/ (function(module, exports) {
6449
6450function webpackEmptyContext(req) {
6451 var e = new Error("Cannot find module '" + req + "'");
6452 e.code = 'MODULE_NOT_FOUND';
6453 throw e;
6454}
6455webpackEmptyContext.keys = function() { return []; };
6456webpackEmptyContext.resolve = webpackEmptyContext;
6457module.exports = webpackEmptyContext;
6458webpackEmptyContext.id = 38;
6459
6460/***/ }),
6461/* 39 */
6462/***/ (function(module, exports, __webpack_require__) {
6463
6464"use strict";
6465
6466Object.defineProperty(exports, "__esModule", { value: true });
6467function fuzzy(origin, query) {
6468 var score = 0;
6469 for (var qIdx = 0, oIdx = 0; qIdx < query.length && oIdx < origin.length; qIdx++) {
6470 var qc = query.charAt(qIdx).toLowerCase();
6471 for (; oIdx < origin.length; oIdx++) {
6472 var oc = origin.charAt(oIdx).toLowerCase();
6473 if (qc === oc) {
6474 score++;
6475 oIdx++;
6476 break;
6477 }
6478 }
6479 }
6480 return score;
6481}
6482exports.default = fuzzy;
6483
6484
6485/***/ }),
6486/* 40 */
6487/***/ (function(module, exports, __webpack_require__) {
6488
6489"use strict";
6490
6491var __assign = (this && this.__assign) || function () {
6492 __assign = Object.assign || function(t) {
6493 for (var s, i = 1, n = arguments.length; i < n; i++) {
6494 s = arguments[i];
6495 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6496 t[p] = s[p];
6497 }
6498 return t;
6499 };
6500 return __assign.apply(this, arguments);
6501};
6502var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
6503 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
6504 return new (P || (P = Promise))(function (resolve, reject) {
6505 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6506 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6507 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
6508 step((generator = generator.apply(thisArg, _arguments || [])).next());
6509 });
6510};
6511var __generator = (this && this.__generator) || function (thisArg, body) {
6512 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
6513 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
6514 function verb(n) { return function (v) { return step([n, v]); }; }
6515 function step(op) {
6516 if (f) throw new TypeError("Generator is already executing.");
6517 while (_) try {
6518 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;
6519 if (y = 0, t) op = [op[0] & 2, t.value];
6520 switch (op[0]) {
6521 case 0: case 1: t = op; break;
6522 case 4: _.label++; return { value: op[1], done: false };
6523 case 5: _.label++; y = op[1]; op = [0]; continue;
6524 case 7: op = _.ops.pop(); _.trys.pop(); continue;
6525 default:
6526 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
6527 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
6528 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
6529 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
6530 if (t[2]) _.ops.pop();
6531 _.trys.pop(); continue;
6532 }
6533 op = body.call(thisArg, _);
6534 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
6535 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
6536 }
6537};
6538var __spreadArrays = (this && this.__spreadArrays) || function () {
6539 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
6540 for (var r = Array(s), k = 0, i = 0; i < il; i++)
6541 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
6542 r[k] = a[j];
6543 return r;
6544};
6545var __importDefault = (this && this.__importDefault) || function (mod) {
6546 return (mod && mod.__esModule) ? mod : { "default": mod };
6547};
6548Object.defineProperty(exports, "__esModule", { value: true });
6549var child_process_1 = __webpack_require__(37);
6550var findup_1 = __importDefault(__webpack_require__(41));
6551var fs_1 = __importDefault(__webpack_require__(36));
6552var path_1 = __importDefault(__webpack_require__(15));
6553var vscode_languageserver_1 = __webpack_require__(4);
6554var vimparser_1 = __webpack_require__(46);
6555var patterns_1 = __webpack_require__(48);
6556function isSomeMatchPattern(patterns, line) {
6557 return patterns.some(function (p) { return p.test(line); });
6558}
6559exports.isSomeMatchPattern = isSomeMatchPattern;
6560function executeFile(input, command, args, option) {
6561 return new Promise(function (resolve, reject) {
6562 var stdout = "";
6563 var stderr = "";
6564 var error;
6565 var isPassAsText = false;
6566 args = (args || []).map(function (arg) {
6567 if (/%text/.test(arg)) {
6568 isPassAsText = true;
6569 return arg.replace(/%text/g, input.toString());
6570 }
6571 return arg;
6572 });
6573 var cp = child_process_1.spawn(command, args, option);
6574 cp.stdout.on("data", function (data) {
6575 stdout += data;
6576 });
6577 cp.stderr.on("data", function (data) {
6578 stderr += data;
6579 });
6580 cp.on("error", function (err) {
6581 error = err;
6582 reject(error);
6583 });
6584 cp.on("close", function (code) {
6585 if (!error) {
6586 resolve({ code: code, stdout: stdout, stderr: stderr });
6587 }
6588 });
6589 // error will occur when cp get error
6590 if (!isPassAsText) {
6591 input.pipe(cp.stdin).on("error", function () { return; });
6592 }
6593 });
6594}
6595exports.executeFile = executeFile;
6596// cover cb type async function to promise
6597function pcb(cb) {
6598 return function () {
6599 var args = [];
6600 for (var _i = 0; _i < arguments.length; _i++) {
6601 args[_i] = arguments[_i];
6602 }
6603 return new Promise(function (resolve) {
6604 cb.apply(void 0, __spreadArrays(args, [function () {
6605 var params = [];
6606 for (var _i = 0; _i < arguments.length; _i++) {
6607 params[_i] = arguments[_i];
6608 }
6609 resolve(params);
6610 }]));
6611 });
6612 };
6613}
6614exports.pcb = pcb;
6615// find work dirname by root patterns
6616function findProjectRoot(filePath, rootPatterns) {
6617 return __awaiter(this, void 0, void 0, function () {
6618 var dirname, patterns, dirCandidate, _i, patterns_2, pattern, _a, err, dir;
6619 return __generator(this, function (_b) {
6620 switch (_b.label) {
6621 case 0:
6622 dirname = path_1.default.dirname(filePath);
6623 patterns = [].concat(rootPatterns);
6624 dirCandidate = "";
6625 _i = 0, patterns_2 = patterns;
6626 _b.label = 1;
6627 case 1:
6628 if (!(_i < patterns_2.length)) return [3 /*break*/, 4];
6629 pattern = patterns_2[_i];
6630 return [4 /*yield*/, pcb(findup_1.default)(dirname, pattern)];
6631 case 2:
6632 _a = _b.sent(), err = _a[0], dir = _a[1];
6633 if (!err && dir && dir !== "/" && dir.length > dirCandidate.length) {
6634 dirCandidate = dir;
6635 }
6636 _b.label = 3;
6637 case 3:
6638 _i++;
6639 return [3 /*break*/, 1];
6640 case 4:
6641 if (dirCandidate.length) {
6642 return [2 /*return*/, dirCandidate];
6643 }
6644 return [2 /*return*/, dirname];
6645 }
6646 });
6647 });
6648}
6649exports.findProjectRoot = findProjectRoot;
6650function markupSnippets(snippets) {
6651 return [
6652 "```vim",
6653 snippets.replace(/\$\{[0-9]+(:([^}]+))?\}/g, "$2"),
6654 "```",
6655 ].join("\n");
6656}
6657exports.markupSnippets = markupSnippets;
6658function getWordFromPosition(doc, position) {
6659 if (!doc) {
6660 return;
6661 }
6662 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)));
6663 // not keyword position
6664 if (!character || !patterns_1.keywordPattern.test(character)) {
6665 return;
6666 }
6667 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)));
6668 // comment line
6669 if (patterns_1.commentPattern.test(currentLine)) {
6670 return;
6671 }
6672 var preSegment = currentLine.slice(0, position.character);
6673 var nextSegment = currentLine.slice(position.character);
6674 var wordLeft = preSegment.match(patterns_1.wordPrePattern);
6675 var wordRight = nextSegment.match(patterns_1.wordNextPattern);
6676 var word = "" + (wordLeft && wordLeft[1] || "") + (wordRight && wordRight[1] || "");
6677 return {
6678 word: word,
6679 left: wordLeft && wordLeft[1] || "",
6680 right: wordRight && wordRight[1] || "",
6681 wordLeft: wordLeft && wordLeft[1]
6682 ? preSegment.replace(new RegExp(wordLeft[1] + "$"), word)
6683 : "" + preSegment + word,
6684 wordRight: wordRight && wordRight[1]
6685 ? nextSegment.replace(new RegExp("^" + wordRight[1]), word)
6686 : "" + word + nextSegment,
6687 };
6688}
6689exports.getWordFromPosition = getWordFromPosition;
6690// parse vim buffer
6691function handleParse(textDoc) {
6692 return __awaiter(this, void 0, void 0, function () {
6693 var text, tokens, node;
6694 return __generator(this, function (_a) {
6695 text = textDoc instanceof Object ? textDoc.getText() : textDoc;
6696 tokens = new vimparser_1.StringReader(text.split(/\r\n|\r|\n/));
6697 try {
6698 node = new vimparser_1.VimLParser(true).parse(tokens);
6699 return [2 /*return*/, [node, ""]];
6700 }
6701 catch (error) {
6702 return [2 /*return*/, [null, error]];
6703 }
6704 return [2 /*return*/];
6705 });
6706 });
6707}
6708exports.handleParse = handleParse;
6709// remove snippets of completionItem
6710function removeSnippets(completionItems) {
6711 if (completionItems === void 0) { completionItems = []; }
6712 return completionItems.map(function (item) {
6713 if (item.insertTextFormat === vscode_languageserver_1.InsertTextFormat.Snippet) {
6714 return __assign(__assign({}, item), { insertText: item.label, insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText });
6715 }
6716 return item;
6717 });
6718}
6719exports.removeSnippets = removeSnippets;
6720exports.isSymbolLink = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
6721 return __generator(this, function (_a) {
6722 return [2 /*return*/, new Promise(function (resolve) {
6723 fs_1.default.lstat(filePath, function (err, stats) {
6724 resolve({
6725 err: err,
6726 stats: stats && stats.isSymbolicLink(),
6727 });
6728 });
6729 })];
6730 });
6731}); };
6732exports.getRealPath = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
6733 var _a, err, stats;
6734 return __generator(this, function (_b) {
6735 switch (_b.label) {
6736 case 0: return [4 /*yield*/, exports.isSymbolLink(filePath)];
6737 case 1:
6738 _a = _b.sent(), err = _a.err, stats = _a.stats;
6739 if (!err && stats) {
6740 return [2 /*return*/, new Promise(function (resolve) {
6741 fs_1.default.realpath(filePath, function (error, realPath) {
6742 if (error) {
6743 return resolve(filePath);
6744 }
6745 resolve(realPath);
6746 });
6747 })];
6748 }
6749 return [2 /*return*/, filePath];
6750 }
6751 });
6752}); };
6753
6754
6755/***/ }),
6756/* 41 */
6757/***/ (function(module, exports, __webpack_require__) {
6758
6759var fs = __webpack_require__(36),
6760 Path = __webpack_require__(15),
6761 util = __webpack_require__(42),
6762 colors = __webpack_require__(43),
6763 EE = __webpack_require__(45).EventEmitter,
6764 fsExists = fs.exists ? fs.exists : Path.exists,
6765 fsExistsSync = fs.existsSync ? fs.existsSync : Path.existsSync;
6766
6767module.exports = function(dir, iterator, options, callback){
6768 return FindUp(dir, iterator, options, callback);
6769};
6770
6771function FindUp(dir, iterator, options, callback){
6772 if (!(this instanceof FindUp)) {
6773 return new FindUp(dir, iterator, options, callback);
6774 }
6775 if(typeof options === 'function'){
6776 callback = options;
6777 options = {};
6778 }
6779 options = options || {};
6780
6781 EE.call(this);
6782 this.found = false;
6783 this.stopPlease = false;
6784 var self = this;
6785
6786 if(typeof iterator === 'string'){
6787 var file = iterator;
6788 iterator = function(dir, cb){
6789 return fsExists(Path.join(dir, file), cb);
6790 };
6791 }
6792
6793 if(callback) {
6794 this.on('found', function(dir){
6795 if(options.verbose) console.log(('found '+ dir ).green);
6796 callback(null, dir);
6797 self.stop();
6798 });
6799
6800 this.on('end', function(){
6801 if(options.verbose) console.log('end'.grey);
6802 if(!self.found) callback(new Error('not found'));
6803 });
6804
6805 this.on('error', function(err){
6806 if(options.verbose) console.log('error'.red, err);
6807 callback(err);
6808 });
6809 }
6810
6811 this._find(dir, iterator, options, callback);
6812}
6813util.inherits(FindUp, EE);
6814
6815FindUp.prototype._find = function(dir, iterator, options, callback){
6816 var self = this;
6817
6818 iterator(dir, function(exists){
6819 if(options.verbose) console.log(('traverse '+ dir).grey);
6820 if(exists) {
6821 self.found = true;
6822 self.emit('found', dir);
6823 }
6824
6825 var parentDir = Path.join(dir, '..');
6826 if (self.stopPlease) return self.emit('end');
6827 if (dir === parentDir) return self.emit('end');
6828 if(dir.indexOf('../../') !== -1 ) return self.emit('error', new Error(dir + ' is not correct.'));
6829 self._find(parentDir, iterator, options, callback);
6830 });
6831};
6832
6833FindUp.prototype.stop = function(){
6834 this.stopPlease = true;
6835};
6836
6837module.exports.FindUp = FindUp;
6838
6839module.exports.sync = function(dir, iteratorSync){
6840 if(typeof iteratorSync === 'string'){
6841 var file = iteratorSync;
6842 iteratorSync = function(dir){
6843 return fsExistsSync(Path.join(dir, file));
6844 };
6845 }
6846 var initialDir = dir;
6847 while(dir !== Path.join(dir, '..')){
6848 if(dir.indexOf('../../') !== -1 ) throw new Error(initialDir + ' is not correct.');
6849 if(iteratorSync(dir)) return dir;
6850 dir = Path.join(dir, '..');
6851 }
6852 throw new Error('not found');
6853};
6854
6855
6856/***/ }),
6857/* 42 */
6858/***/ (function(module, exports) {
6859
6860module.exports = require("util");
6861
6862/***/ }),
6863/* 43 */
6864/***/ (function(module, exports, __webpack_require__) {
6865
6866/*
6867colors.js
6868
6869Copyright (c) 2010
6870
6871Marak Squires
6872Alexis Sellier (cloudhead)
6873
6874Permission is hereby granted, free of charge, to any person obtaining a copy
6875of this software and associated documentation files (the "Software"), to deal
6876in the Software without restriction, including without limitation the rights
6877to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
6878copies of the Software, and to permit persons to whom the Software is
6879furnished to do so, subject to the following conditions:
6880
6881The above copyright notice and this permission notice shall be included in
6882all copies or substantial portions of the Software.
6883
6884THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6885IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6886FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
6887AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
6888LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
6889OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
6890THE SOFTWARE.
6891
6892*/
6893
6894var isHeadless = false;
6895
6896if (typeof module !== 'undefined') {
6897 isHeadless = true;
6898}
6899
6900if (!isHeadless) {
6901 var exports = {};
6902 var module = {};
6903 var colors = exports;
6904 exports.mode = "browser";
6905} else {
6906 exports.mode = "console";
6907}
6908
6909//
6910// Prototypes the string object to have additional method calls that add terminal colors
6911//
6912var addProperty = function (color, func) {
6913 exports[color] = function (str) {
6914 return func.apply(str);
6915 };
6916 String.prototype.__defineGetter__(color, func);
6917};
6918
6919function stylize(str, style) {
6920
6921 var styles;
6922
6923 if (exports.mode === 'console') {
6924 styles = {
6925 //styles
6926 'bold' : ['\x1B[1m', '\x1B[22m'],
6927 'italic' : ['\x1B[3m', '\x1B[23m'],
6928 'underline' : ['\x1B[4m', '\x1B[24m'],
6929 'inverse' : ['\x1B[7m', '\x1B[27m'],
6930 'strikethrough' : ['\x1B[9m', '\x1B[29m'],
6931 //text colors
6932 //grayscale
6933 'white' : ['\x1B[37m', '\x1B[39m'],
6934 'grey' : ['\x1B[90m', '\x1B[39m'],
6935 'black' : ['\x1B[30m', '\x1B[39m'],
6936 //colors
6937 'blue' : ['\x1B[34m', '\x1B[39m'],
6938 'cyan' : ['\x1B[36m', '\x1B[39m'],
6939 'green' : ['\x1B[32m', '\x1B[39m'],
6940 'magenta' : ['\x1B[35m', '\x1B[39m'],
6941 'red' : ['\x1B[31m', '\x1B[39m'],
6942 'yellow' : ['\x1B[33m', '\x1B[39m'],
6943 //background colors
6944 //grayscale
6945 'whiteBG' : ['\x1B[47m', '\x1B[49m'],
6946 'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
6947 'blackBG' : ['\x1B[40m', '\x1B[49m'],
6948 //colors
6949 'blueBG' : ['\x1B[44m', '\x1B[49m'],
6950 'cyanBG' : ['\x1B[46m', '\x1B[49m'],
6951 'greenBG' : ['\x1B[42m', '\x1B[49m'],
6952 'magentaBG' : ['\x1B[45m', '\x1B[49m'],
6953 'redBG' : ['\x1B[41m', '\x1B[49m'],
6954 'yellowBG' : ['\x1B[43m', '\x1B[49m']
6955 };
6956 } else if (exports.mode === 'browser') {
6957 styles = {
6958 //styles
6959 'bold' : ['<b>', '</b>'],
6960 'italic' : ['<i>', '</i>'],
6961 'underline' : ['<u>', '</u>'],
6962 'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
6963 'strikethrough' : ['<del>', '</del>'],
6964 //text colors
6965 //grayscale
6966 'white' : ['<span style="color:white;">', '</span>'],
6967 'grey' : ['<span style="color:gray;">', '</span>'],
6968 'black' : ['<span style="color:black;">', '</span>'],
6969 //colors
6970 'blue' : ['<span style="color:blue;">', '</span>'],
6971 'cyan' : ['<span style="color:cyan;">', '</span>'],
6972 'green' : ['<span style="color:green;">', '</span>'],
6973 'magenta' : ['<span style="color:magenta;">', '</span>'],
6974 'red' : ['<span style="color:red;">', '</span>'],
6975 'yellow' : ['<span style="color:yellow;">', '</span>'],
6976 //background colors
6977 //grayscale
6978 'whiteBG' : ['<span style="background-color:white;">', '</span>'],
6979 'greyBG' : ['<span style="background-color:gray;">', '</span>'],
6980 'blackBG' : ['<span style="background-color:black;">', '</span>'],
6981 //colors
6982 'blueBG' : ['<span style="background-color:blue;">', '</span>'],
6983 'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
6984 'greenBG' : ['<span style="background-color:green;">', '</span>'],
6985 'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
6986 'redBG' : ['<span style="background-color:red;">', '</span>'],
6987 'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
6988 };
6989 } else if (exports.mode === 'none') {
6990 return str + '';
6991 } else {
6992 console.log('unsupported mode, try "browser", "console" or "none"');
6993 }
6994 return styles[style][0] + str + styles[style][1];
6995}
6996
6997function applyTheme(theme) {
6998
6999 //
7000 // Remark: This is a list of methods that exist
7001 // on String that you should not overwrite.
7002 //
7003 var stringPrototypeBlacklist = [
7004 '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
7005 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
7006 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
7007 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
7008 ];
7009
7010 Object.keys(theme).forEach(function (prop) {
7011 if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
7012 console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
7013 }
7014 else {
7015 if (typeof(theme[prop]) === 'string') {
7016 addProperty(prop, function () {
7017 return exports[theme[prop]](this);
7018 });
7019 }
7020 else {
7021 addProperty(prop, function () {
7022 var ret = this;
7023 for (var t = 0; t < theme[prop].length; t++) {
7024 ret = exports[theme[prop][t]](ret);
7025 }
7026 return ret;
7027 });
7028 }
7029 }
7030 });
7031}
7032
7033
7034//
7035// Iterate through all default styles and colors
7036//
7037var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
7038x.forEach(function (style) {
7039
7040 // __defineGetter__ at the least works in more browsers
7041 // http://robertnyman.com/javascript/javascript-getters-setters.html
7042 // Object.defineProperty only works in Chrome
7043 addProperty(style, function () {
7044 return stylize(this, style);
7045 });
7046});
7047
7048function sequencer(map) {
7049 return function () {
7050 if (!isHeadless) {
7051 return this.replace(/( )/, '$1');
7052 }
7053 var exploded = this.split(""), i = 0;
7054 exploded = exploded.map(map);
7055 return exploded.join("");
7056 };
7057}
7058
7059var rainbowMap = (function () {
7060 var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
7061 return function (letter, i, exploded) {
7062 if (letter === " ") {
7063 return letter;
7064 } else {
7065 return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
7066 }
7067 };
7068})();
7069
7070exports.themes = {};
7071
7072exports.addSequencer = function (name, map) {
7073 addProperty(name, sequencer(map));
7074};
7075
7076exports.addSequencer('rainbow', rainbowMap);
7077exports.addSequencer('zebra', function (letter, i, exploded) {
7078 return i % 2 === 0 ? letter : letter.inverse;
7079});
7080
7081exports.setTheme = function (theme) {
7082 if (typeof theme === 'string') {
7083 try {
7084 exports.themes[theme] = __webpack_require__(44)(theme);
7085 applyTheme(exports.themes[theme]);
7086 return exports.themes[theme];
7087 } catch (err) {
7088 console.log(err);
7089 return err;
7090 }
7091 } else {
7092 applyTheme(theme);
7093 }
7094};
7095
7096
7097addProperty('stripColors', function () {
7098 return ("" + this).replace(/\x1B\[\d+m/g, '');
7099});
7100
7101// please no
7102function zalgo(text, options) {
7103 var soul = {
7104 "up" : [
7105 '̍', '̎', '̄', '̅',
7106 '̿', '̑', '̆', '̐',
7107 '͒', '͗', '͑', '̇',
7108 '̈', '̊', '͂', '̓',
7109 '̈', '͊', '͋', '͌',
7110 '̃', '̂', '̌', '͐',
7111 '̀', '́', '̋', '̏',
7112 '̒', '̓', '̔', '̽',
7113 '̉', 'ͣ', 'ͤ', 'ͥ',
7114 'ͦ', 'ͧ', 'ͨ', 'ͩ',
7115 'ͪ', 'ͫ', 'ͬ', 'ͭ',
7116 'ͮ', 'ͯ', '̾', '͛',
7117 '͆', '̚'
7118 ],
7119 "down" : [
7120 '̖', '̗', '̘', '̙',
7121 '̜', '̝', '̞', '̟',
7122 '̠', '̤', '̥', '̦',
7123 '̩', '̪', '̫', '̬',
7124 '̭', '̮', '̯', '̰',
7125 '̱', '̲', '̳', '̹',
7126 '̺', '̻', '̼', 'ͅ',
7127 '͇', '͈', '͉', '͍',
7128 '͎', '͓', '͔', '͕',
7129 '͖', '͙', '͚', '̣'
7130 ],
7131 "mid" : [
7132 '̕', '̛', '̀', '́',
7133 '͘', '̡', '̢', '̧',
7134 '̨', '̴', '̵', '̶',
7135 '͜', '͝', '͞',
7136 '͟', '͠', '͢', '̸',
7137 '̷', '͡', ' ҉'
7138 ]
7139 },
7140 all = [].concat(soul.up, soul.down, soul.mid),
7141 zalgo = {};
7142
7143 function randomNumber(range) {
7144 var r = Math.floor(Math.random() * range);
7145 return r;
7146 }
7147
7148 function is_char(character) {
7149 var bool = false;
7150 all.filter(function (i) {
7151 bool = (i === character);
7152 });
7153 return bool;
7154 }
7155
7156 function heComes(text, options) {
7157 var result = '', counts, l;
7158 options = options || {};
7159 options["up"] = options["up"] || true;
7160 options["mid"] = options["mid"] || true;
7161 options["down"] = options["down"] || true;
7162 options["size"] = options["size"] || "maxi";
7163 text = text.split('');
7164 for (l in text) {
7165 if (is_char(l)) {
7166 continue;
7167 }
7168 result = result + text[l];
7169 counts = {"up" : 0, "down" : 0, "mid" : 0};
7170 switch (options.size) {
7171 case 'mini':
7172 counts.up = randomNumber(8);
7173 counts.min = randomNumber(2);
7174 counts.down = randomNumber(8);
7175 break;
7176 case 'maxi':
7177 counts.up = randomNumber(16) + 3;
7178 counts.min = randomNumber(4) + 1;
7179 counts.down = randomNumber(64) + 3;
7180 break;
7181 default:
7182 counts.up = randomNumber(8) + 1;
7183 counts.mid = randomNumber(6) / 2;
7184 counts.down = randomNumber(8) + 1;
7185 break;
7186 }
7187
7188 var arr = ["up", "mid", "down"];
7189 for (var d in arr) {
7190 var index = arr[d];
7191 for (var i = 0 ; i <= counts[index]; i++) {
7192 if (options[index]) {
7193 result = result + soul[index][randomNumber(soul[index].length)];
7194 }
7195 }
7196 }
7197 }
7198 return result;
7199 }
7200 return heComes(text);
7201}
7202
7203
7204// don't summon zalgo
7205addProperty('zalgo', function () {
7206 return zalgo(this);
7207});
7208
7209
7210/***/ }),
7211/* 44 */
7212/***/ (function(module, exports) {
7213
7214function webpackEmptyContext(req) {
7215 var e = new Error("Cannot find module '" + req + "'");
7216 e.code = 'MODULE_NOT_FOUND';
7217 throw e;
7218}
7219webpackEmptyContext.keys = function() { return []; };
7220webpackEmptyContext.resolve = webpackEmptyContext;
7221module.exports = webpackEmptyContext;
7222webpackEmptyContext.id = 44;
7223
7224/***/ }),
7225/* 45 */
7226/***/ (function(module, exports) {
7227
7228module.exports = require("events");
7229
7230/***/ }),
7231/* 46 */
7232/***/ (function(module, exports, __webpack_require__) {
7233
7234/* WEBPACK VAR INJECTION */(function(module) {//!/usr/bin/env nodejs
7235// usage: nodejs vimlparser.js [--neovim] foo.vim
7236
7237var fs = __webpack_require__(36);
7238var util = __webpack_require__(42);
7239
7240function main() {
7241 var neovim = false;
7242 var fpath = ''
7243 var args = process.argv;
7244 if (args.length == 4) {
7245 if (args[2] == '--neovim') {
7246 neovim = true;
7247 }
7248 fpath = args[3];
7249 } else if (args.length == 3) {
7250 neovim = false;
7251 fpath = args[2]
7252 }
7253 var r = new StringReader(viml_readfile(fpath));
7254 var p = new VimLParser(neovim);
7255 var c = new Compiler();
7256 try {
7257 var lines = c.compile(p.parse(r));
7258 for (var i in lines) {
7259 process.stdout.write(lines[i] + "\n");
7260 }
7261 } catch (e) {
7262 process.stdout.write(e + '\n');
7263 }
7264}
7265
7266var pat_vim2js = {
7267 "[0-9a-zA-Z]" : "[0-9a-zA-Z]",
7268 "[@*!=><&~#]" : "[@*!=><&~#]",
7269 "\\<ARGOPT\\>" : "\\bARGOPT\\b",
7270 "\\<BANG\\>" : "\\bBANG\\b",
7271 "\\<EDITCMD\\>" : "\\bEDITCMD\\b",
7272 "\\<NOTRLCOM\\>" : "\\bNOTRLCOM\\b",
7273 "\\<TRLBAR\\>" : "\\bTRLBAR\\b",
7274 "\\<USECTRLV\\>" : "\\bUSECTRLV\\b",
7275 "\\<USERCMD\\>" : "\\bUSERCMD\\b",
7276 "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>" : "\\b(XFILE|FILES|FILE1)\\b",
7277 "\\S" : "\\S",
7278 "\\a" : "[A-Za-z]",
7279 "\\d" : "\\d",
7280 "\\h" : "[A-Za-z_]",
7281 "\\s" : "\\s",
7282 "\\v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$",
7283 "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
7284 "\\w" : "[0-9A-Za-z_]",
7285 "\\w\\|[:#]" : "[0-9A-Za-z_]|[:#]",
7286 "\\x" : "[0-9A-Fa-f]",
7287 "^++" : "^\+\+",
7288 "^++bad=\\(keep\\|drop\\|.\\)\\>" : "^\\+\\+bad=(keep|drop|.)\\b",
7289 "^++bad=drop" : "^\\+\\+bad=drop",
7290 "^++bad=keep" : "^\\+\\+bad=keep",
7291 "^++bin\\>" : "^\\+\\+bin\\b",
7292 "^++edit\\>" : "^\\+\\+edit\\b",
7293 "^++enc=\\S" : "^\\+\\+enc=\\S",
7294 "^++encoding=\\S" : "^\\+\\+encoding=\\S",
7295 "^++ff=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+ff=(dos|unix|mac)\\b",
7296 "^++fileformat=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+fileformat=(dos|unix|mac)\\b",
7297 "^++nobin\\>" : "^\\+\\+nobin\\b",
7298 "^[A-Z]" : "^[A-Z]",
7299 "^\\$\\w\\+" : "^\\$[0-9A-Za-z_]+",
7300 "^\\(!\\|global\\|vglobal\\)$" : "^(!|global|vglobal)$",
7301 "^\\(WHILE\\|FOR\\)$" : "^(WHILE|FOR)$",
7302 "^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
7303 "^\\d" : "^\\d",
7304 "^\\h" : "^[A-Za-z_]",
7305 "^\\s" : "^\\s",
7306 "^\\s*\\\\" : "^\\s*\\\\",
7307 "^[ \\t]$" : "^[ \\t]$",
7308 "^[A-Za-z]$" : "^[A-Za-z]$",
7309 "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$",
7310 "^[0-9]$" : "^[0-9]$",
7311 "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$",
7312 "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$",
7313 "^[A-Za-z_]$" : "^[A-Za-z_]$",
7314 "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$",
7315 "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$",
7316 "^[A-Z]$" : "^[A-Z]$",
7317 "^[a-z]$" : "^[a-z]$",
7318 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
7319 "^[0-7]$" : "^[0-7]$",
7320 "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$",
7321 "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$",
7322 "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
7323}
7324
7325function viml_add(lst, item) {
7326 lst.push(item);
7327}
7328
7329function viml_call(func, args) {
7330 return func.apply(null, args);
7331}
7332
7333function viml_char2nr(c) {
7334 return c.charCodeAt(0);
7335}
7336
7337function viml_empty(obj) {
7338 return obj.length == 0;
7339}
7340
7341function viml_equalci(a, b) {
7342 return a.toLowerCase() == b.toLowerCase();
7343}
7344
7345function viml_eqreg(s, reg) {
7346 var mx = new RegExp(pat_vim2js[reg]);
7347 return mx.exec(s) != null;
7348}
7349
7350function viml_eqregh(s, reg) {
7351 var mx = new RegExp(pat_vim2js[reg]);
7352 return mx.exec(s) != null;
7353}
7354
7355function viml_eqregq(s, reg) {
7356 var mx = new RegExp(pat_vim2js[reg], "i");
7357 return mx.exec(s) != null;
7358}
7359
7360function viml_escape(s, chars) {
7361 var r = '';
7362 for (var i = 0; i < s.length; ++i) {
7363 if (chars.indexOf(s.charAt(i)) != -1) {
7364 r = r + "\\" + s.charAt(i);
7365 } else {
7366 r = r + s.charAt(i);
7367 }
7368 }
7369 return r;
7370}
7371
7372function viml_extend(obj, item) {
7373 obj.push.apply(obj, item);
7374}
7375
7376function viml_insert(lst, item) {
7377 var idx = arguments.length >= 3 ? arguments[2] : 0;
7378 lst.splice(0, 0, item);
7379}
7380
7381function viml_join(lst, sep) {
7382 return lst.join(sep);
7383}
7384
7385function viml_keys(obj) {
7386 return Object.keys(obj);
7387}
7388
7389function viml_len(obj) {
7390 if (typeof obj === 'string') {
7391 var len = 0;
7392 for (var i = 0; i < obj.length; i++) {
7393 var c = obj.charCodeAt(i);
7394 len += c < 128 ? 1 : ((c > 127) && (c < 2048)) ? 2 : 3;
7395 }
7396 return len;
7397 }
7398 return obj.length;
7399}
7400
7401function viml_printf() {
7402 var a000 = Array.prototype.slice.call(arguments, 0);
7403 if (a000.length == 1) {
7404 return a000[0];
7405 } else {
7406 return util.format.apply(null, a000);
7407 }
7408}
7409
7410function viml_range(start) {
7411 var end = arguments.length >= 2 ? arguments[1] : null;
7412 if (end == null) {
7413 var x = [];
7414 for (var i = 0; i < start; ++i) {
7415 x.push(i);
7416 }
7417 return x;
7418 } else {
7419 var x = []
7420 for (var i = start; i <= end; ++i) {
7421 x.push(i);
7422 }
7423 return x;
7424 }
7425}
7426
7427function viml_readfile(path) {
7428 // FIXME: newline?
7429 return fs.readFileSync(path, 'utf-8').split(/\r\n|\r|\n/);
7430}
7431
7432function viml_remove(lst, idx) {
7433 lst.splice(idx, 1);
7434}
7435
7436function viml_split(s, sep) {
7437 if (sep == "\\zs") {
7438 return s.split("");
7439 }
7440 throw "NotImplemented";
7441}
7442
7443function viml_str2nr(s) {
7444 var base = arguments.length >= 2 ? arguments[1] : 10;
7445 return parseInt(s, base);
7446}
7447
7448function viml_string(obj) {
7449 return obj.toString();
7450}
7451
7452function viml_has_key(obj, key) {
7453 return obj[key] !== undefined;
7454}
7455
7456function viml_stridx(a, b) {
7457 return a.indexOf(b);
7458}
7459
7460var NIL = [];
7461var TRUE = 1;
7462var FALSE = 0;
7463var NODE_TOPLEVEL = 1;
7464var NODE_COMMENT = 2;
7465var NODE_EXCMD = 3;
7466var NODE_FUNCTION = 4;
7467var NODE_ENDFUNCTION = 5;
7468var NODE_DELFUNCTION = 6;
7469var NODE_RETURN = 7;
7470var NODE_EXCALL = 8;
7471var NODE_LET = 9;
7472var NODE_UNLET = 10;
7473var NODE_LOCKVAR = 11;
7474var NODE_UNLOCKVAR = 12;
7475var NODE_IF = 13;
7476var NODE_ELSEIF = 14;
7477var NODE_ELSE = 15;
7478var NODE_ENDIF = 16;
7479var NODE_WHILE = 17;
7480var NODE_ENDWHILE = 18;
7481var NODE_FOR = 19;
7482var NODE_ENDFOR = 20;
7483var NODE_CONTINUE = 21;
7484var NODE_BREAK = 22;
7485var NODE_TRY = 23;
7486var NODE_CATCH = 24;
7487var NODE_FINALLY = 25;
7488var NODE_ENDTRY = 26;
7489var NODE_THROW = 27;
7490var NODE_ECHO = 28;
7491var NODE_ECHON = 29;
7492var NODE_ECHOHL = 30;
7493var NODE_ECHOMSG = 31;
7494var NODE_ECHOERR = 32;
7495var NODE_EXECUTE = 33;
7496var NODE_TERNARY = 34;
7497var NODE_OR = 35;
7498var NODE_AND = 36;
7499var NODE_EQUAL = 37;
7500var NODE_EQUALCI = 38;
7501var NODE_EQUALCS = 39;
7502var NODE_NEQUAL = 40;
7503var NODE_NEQUALCI = 41;
7504var NODE_NEQUALCS = 42;
7505var NODE_GREATER = 43;
7506var NODE_GREATERCI = 44;
7507var NODE_GREATERCS = 45;
7508var NODE_GEQUAL = 46;
7509var NODE_GEQUALCI = 47;
7510var NODE_GEQUALCS = 48;
7511var NODE_SMALLER = 49;
7512var NODE_SMALLERCI = 50;
7513var NODE_SMALLERCS = 51;
7514var NODE_SEQUAL = 52;
7515var NODE_SEQUALCI = 53;
7516var NODE_SEQUALCS = 54;
7517var NODE_MATCH = 55;
7518var NODE_MATCHCI = 56;
7519var NODE_MATCHCS = 57;
7520var NODE_NOMATCH = 58;
7521var NODE_NOMATCHCI = 59;
7522var NODE_NOMATCHCS = 60;
7523var NODE_IS = 61;
7524var NODE_ISCI = 62;
7525var NODE_ISCS = 63;
7526var NODE_ISNOT = 64;
7527var NODE_ISNOTCI = 65;
7528var NODE_ISNOTCS = 66;
7529var NODE_ADD = 67;
7530var NODE_SUBTRACT = 68;
7531var NODE_CONCAT = 69;
7532var NODE_MULTIPLY = 70;
7533var NODE_DIVIDE = 71;
7534var NODE_REMAINDER = 72;
7535var NODE_NOT = 73;
7536var NODE_MINUS = 74;
7537var NODE_PLUS = 75;
7538var NODE_SUBSCRIPT = 76;
7539var NODE_SLICE = 77;
7540var NODE_CALL = 78;
7541var NODE_DOT = 79;
7542var NODE_NUMBER = 80;
7543var NODE_STRING = 81;
7544var NODE_LIST = 82;
7545var NODE_DICT = 83;
7546var NODE_OPTION = 85;
7547var NODE_IDENTIFIER = 86;
7548var NODE_CURLYNAME = 87;
7549var NODE_ENV = 88;
7550var NODE_REG = 89;
7551var NODE_CURLYNAMEPART = 90;
7552var NODE_CURLYNAMEEXPR = 91;
7553var NODE_LAMBDA = 92;
7554var NODE_BLOB = 93;
7555var NODE_CONST = 94;
7556var NODE_EVAL = 95;
7557var NODE_HEREDOC = 96;
7558var NODE_METHOD = 97;
7559var TOKEN_EOF = 1;
7560var TOKEN_EOL = 2;
7561var TOKEN_SPACE = 3;
7562var TOKEN_OROR = 4;
7563var TOKEN_ANDAND = 5;
7564var TOKEN_EQEQ = 6;
7565var TOKEN_EQEQCI = 7;
7566var TOKEN_EQEQCS = 8;
7567var TOKEN_NEQ = 9;
7568var TOKEN_NEQCI = 10;
7569var TOKEN_NEQCS = 11;
7570var TOKEN_GT = 12;
7571var TOKEN_GTCI = 13;
7572var TOKEN_GTCS = 14;
7573var TOKEN_GTEQ = 15;
7574var TOKEN_GTEQCI = 16;
7575var TOKEN_GTEQCS = 17;
7576var TOKEN_LT = 18;
7577var TOKEN_LTCI = 19;
7578var TOKEN_LTCS = 20;
7579var TOKEN_LTEQ = 21;
7580var TOKEN_LTEQCI = 22;
7581var TOKEN_LTEQCS = 23;
7582var TOKEN_MATCH = 24;
7583var TOKEN_MATCHCI = 25;
7584var TOKEN_MATCHCS = 26;
7585var TOKEN_NOMATCH = 27;
7586var TOKEN_NOMATCHCI = 28;
7587var TOKEN_NOMATCHCS = 29;
7588var TOKEN_IS = 30;
7589var TOKEN_ISCI = 31;
7590var TOKEN_ISCS = 32;
7591var TOKEN_ISNOT = 33;
7592var TOKEN_ISNOTCI = 34;
7593var TOKEN_ISNOTCS = 35;
7594var TOKEN_PLUS = 36;
7595var TOKEN_MINUS = 37;
7596var TOKEN_DOT = 38;
7597var TOKEN_STAR = 39;
7598var TOKEN_SLASH = 40;
7599var TOKEN_PERCENT = 41;
7600var TOKEN_NOT = 42;
7601var TOKEN_QUESTION = 43;
7602var TOKEN_COLON = 44;
7603var TOKEN_POPEN = 45;
7604var TOKEN_PCLOSE = 46;
7605var TOKEN_SQOPEN = 47;
7606var TOKEN_SQCLOSE = 48;
7607var TOKEN_COPEN = 49;
7608var TOKEN_CCLOSE = 50;
7609var TOKEN_COMMA = 51;
7610var TOKEN_NUMBER = 52;
7611var TOKEN_SQUOTE = 53;
7612var TOKEN_DQUOTE = 54;
7613var TOKEN_OPTION = 55;
7614var TOKEN_IDENTIFIER = 56;
7615var TOKEN_ENV = 57;
7616var TOKEN_REG = 58;
7617var TOKEN_EQ = 59;
7618var TOKEN_OR = 60;
7619var TOKEN_SEMICOLON = 61;
7620var TOKEN_BACKTICK = 62;
7621var TOKEN_DOTDOTDOT = 63;
7622var TOKEN_SHARP = 64;
7623var TOKEN_ARROW = 65;
7624var TOKEN_BLOB = 66;
7625var TOKEN_LITCOPEN = 67;
7626var TOKEN_DOTDOT = 68;
7627var TOKEN_HEREDOC = 69;
7628var MAX_FUNC_ARGS = 20;
7629function isalpha(c) {
7630 return viml_eqregh(c, "^[A-Za-z]$");
7631}
7632
7633function isalnum(c) {
7634 return viml_eqregh(c, "^[0-9A-Za-z]$");
7635}
7636
7637function isdigit(c) {
7638 return viml_eqregh(c, "^[0-9]$");
7639}
7640
7641function isodigit(c) {
7642 return viml_eqregh(c, "^[0-7]$");
7643}
7644
7645function isxdigit(c) {
7646 return viml_eqregh(c, "^[0-9A-Fa-f]$");
7647}
7648
7649function iswordc(c) {
7650 return viml_eqregh(c, "^[0-9A-Za-z_]$");
7651}
7652
7653function iswordc1(c) {
7654 return viml_eqregh(c, "^[A-Za-z_]$");
7655}
7656
7657function iswhite(c) {
7658 return viml_eqregh(c, "^[ \\t]$");
7659}
7660
7661function isnamec(c) {
7662 return viml_eqregh(c, "^[0-9A-Za-z_:#]$");
7663}
7664
7665function isnamec1(c) {
7666 return viml_eqregh(c, "^[A-Za-z_]$");
7667}
7668
7669function isargname(s) {
7670 return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$");
7671}
7672
7673function isvarname(s) {
7674 return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$");
7675}
7676
7677// FIXME:
7678function isidc(c) {
7679 return viml_eqregh(c, "^[0-9A-Za-z_]$");
7680}
7681
7682function isupper(c) {
7683 return viml_eqregh(c, "^[A-Z]$");
7684}
7685
7686function islower(c) {
7687 return viml_eqregh(c, "^[a-z]$");
7688}
7689
7690function ExArg() {
7691 var ea = {};
7692 ea.forceit = FALSE;
7693 ea.addr_count = 0;
7694 ea.line1 = 0;
7695 ea.line2 = 0;
7696 ea.flags = 0;
7697 ea.do_ecmd_cmd = "";
7698 ea.do_ecmd_lnum = 0;
7699 ea.append = 0;
7700 ea.usefilter = FALSE;
7701 ea.amount = 0;
7702 ea.regname = 0;
7703 ea.force_bin = 0;
7704 ea.read_edit = 0;
7705 ea.force_ff = 0;
7706 ea.force_enc = 0;
7707 ea.bad_char = 0;
7708 ea.linepos = {};
7709 ea.cmdpos = [];
7710 ea.argpos = [];
7711 ea.cmd = {};
7712 ea.modifiers = [];
7713 ea.range = [];
7714 ea.argopt = {};
7715 ea.argcmd = {};
7716 return ea;
7717}
7718
7719// struct node {
7720// int type
7721// pos pos
7722// node left
7723// node right
7724// node cond
7725// node rest
7726// node[] list
7727// node[] rlist
7728// node[] default_args
7729// node[] body
7730// string op
7731// string str
7732// int depth
7733// variant value
7734// }
7735// TOPLEVEL .body
7736// COMMENT .str
7737// EXCMD .ea .str
7738// FUNCTION .ea .body .left .rlist .default_args .attr .endfunction
7739// ENDFUNCTION .ea
7740// DELFUNCTION .ea .left
7741// RETURN .ea .left
7742// EXCALL .ea .left
7743// LET .ea .op .left .list .rest .right
7744// CONST .ea .op .left .list .rest .right
7745// UNLET .ea .list
7746// LOCKVAR .ea .depth .list
7747// UNLOCKVAR .ea .depth .list
7748// IF .ea .body .cond .elseif .else .endif
7749// ELSEIF .ea .body .cond
7750// ELSE .ea .body
7751// ENDIF .ea
7752// WHILE .ea .body .cond .endwhile
7753// ENDWHILE .ea
7754// FOR .ea .body .left .list .rest .right .endfor
7755// ENDFOR .ea
7756// CONTINUE .ea
7757// BREAK .ea
7758// TRY .ea .body .catch .finally .endtry
7759// CATCH .ea .body .pattern
7760// FINALLY .ea .body
7761// ENDTRY .ea
7762// THROW .ea .left
7763// EVAL .ea .left
7764// ECHO .ea .list
7765// ECHON .ea .list
7766// ECHOHL .ea .str
7767// ECHOMSG .ea .list
7768// ECHOERR .ea .list
7769// EXECUTE .ea .list
7770// TERNARY .cond .left .right
7771// OR .left .right
7772// AND .left .right
7773// EQUAL .left .right
7774// EQUALCI .left .right
7775// EQUALCS .left .right
7776// NEQUAL .left .right
7777// NEQUALCI .left .right
7778// NEQUALCS .left .right
7779// GREATER .left .right
7780// GREATERCI .left .right
7781// GREATERCS .left .right
7782// GEQUAL .left .right
7783// GEQUALCI .left .right
7784// GEQUALCS .left .right
7785// SMALLER .left .right
7786// SMALLERCI .left .right
7787// SMALLERCS .left .right
7788// SEQUAL .left .right
7789// SEQUALCI .left .right
7790// SEQUALCS .left .right
7791// MATCH .left .right
7792// MATCHCI .left .right
7793// MATCHCS .left .right
7794// NOMATCH .left .right
7795// NOMATCHCI .left .right
7796// NOMATCHCS .left .right
7797// IS .left .right
7798// ISCI .left .right
7799// ISCS .left .right
7800// ISNOT .left .right
7801// ISNOTCI .left .right
7802// ISNOTCS .left .right
7803// ADD .left .right
7804// SUBTRACT .left .right
7805// CONCAT .left .right
7806// MULTIPLY .left .right
7807// DIVIDE .left .right
7808// REMAINDER .left .right
7809// NOT .left
7810// MINUS .left
7811// PLUS .left
7812// SUBSCRIPT .left .right
7813// SLICE .left .rlist
7814// METHOD .left .right
7815// CALL .left .rlist
7816// DOT .left .right
7817// NUMBER .value
7818// STRING .value
7819// LIST .value
7820// DICT .value
7821// BLOB .value
7822// NESTING .left
7823// OPTION .value
7824// IDENTIFIER .value
7825// CURLYNAME .value
7826// ENV .value
7827// REG .value
7828// CURLYNAMEPART .value
7829// CURLYNAMEEXPR .value
7830// LAMBDA .rlist .left
7831// HEREDOC .rlist .op .body
7832function Node(type) {
7833 return {"type":type};
7834}
7835
7836function Err(msg, pos) {
7837 return viml_printf("vimlparser: %s: line %d col %d", msg, pos.lnum, pos.col);
7838}
7839
7840function VimLParser() { this.__init__.apply(this, arguments); }
7841VimLParser.prototype.__init__ = function() {
7842 var a000 = Array.prototype.slice.call(arguments, 0);
7843 if (viml_len(a000) > 0) {
7844 this.neovim = a000[0];
7845 }
7846 else {
7847 this.neovim = 0;
7848 }
7849 this.find_command_cache = {};
7850}
7851
7852VimLParser.prototype.push_context = function(node) {
7853 viml_insert(this.context, node);
7854}
7855
7856VimLParser.prototype.pop_context = function() {
7857 viml_remove(this.context, 0);
7858}
7859
7860VimLParser.prototype.find_context = function(type) {
7861 var i = 0;
7862 var __c3 = this.context;
7863 for (var __i3 = 0; __i3 < __c3.length; ++__i3) {
7864 var node = __c3[__i3];
7865 if (node.type == type) {
7866 return i;
7867 }
7868 i += 1;
7869 }
7870 return -1;
7871}
7872
7873VimLParser.prototype.add_node = function(node) {
7874 viml_add(this.context[0].body, node);
7875}
7876
7877VimLParser.prototype.check_missing_endfunction = function(ends, pos) {
7878 if (this.context[0].type == NODE_FUNCTION) {
7879 throw Err(viml_printf("E126: Missing :endfunction: %s", ends), pos);
7880 }
7881}
7882
7883VimLParser.prototype.check_missing_endif = function(ends, pos) {
7884 if (this.context[0].type == NODE_IF || this.context[0].type == NODE_ELSEIF || this.context[0].type == NODE_ELSE) {
7885 throw Err(viml_printf("E171: Missing :endif: %s", ends), pos);
7886 }
7887}
7888
7889VimLParser.prototype.check_missing_endtry = function(ends, pos) {
7890 if (this.context[0].type == NODE_TRY || this.context[0].type == NODE_CATCH || this.context[0].type == NODE_FINALLY) {
7891 throw Err(viml_printf("E600: Missing :endtry: %s", ends), pos);
7892 }
7893}
7894
7895VimLParser.prototype.check_missing_endwhile = function(ends, pos) {
7896 if (this.context[0].type == NODE_WHILE) {
7897 throw Err(viml_printf("E170: Missing :endwhile: %s", ends), pos);
7898 }
7899}
7900
7901VimLParser.prototype.check_missing_endfor = function(ends, pos) {
7902 if (this.context[0].type == NODE_FOR) {
7903 throw Err(viml_printf("E170: Missing :endfor: %s", ends), pos);
7904 }
7905}
7906
7907VimLParser.prototype.parse = function(reader) {
7908 this.reader = reader;
7909 this.context = [];
7910 var toplevel = Node(NODE_TOPLEVEL);
7911 toplevel.pos = this.reader.getpos();
7912 toplevel.body = [];
7913 this.push_context(toplevel);
7914 while (this.reader.peek() != "<EOF>") {
7915 this.parse_one_cmd();
7916 }
7917 this.check_missing_endfunction("TOPLEVEL", this.reader.getpos());
7918 this.check_missing_endif("TOPLEVEL", this.reader.getpos());
7919 this.check_missing_endtry("TOPLEVEL", this.reader.getpos());
7920 this.check_missing_endwhile("TOPLEVEL", this.reader.getpos());
7921 this.check_missing_endfor("TOPLEVEL", this.reader.getpos());
7922 this.pop_context();
7923 return toplevel;
7924}
7925
7926VimLParser.prototype.parse_one_cmd = function() {
7927 this.ea = ExArg();
7928 if (this.reader.peekn(2) == "#!") {
7929 this.parse_hashbang();
7930 this.reader.get();
7931 return;
7932 }
7933 this.reader.skip_white_and_colon();
7934 if (this.reader.peekn(1) == "") {
7935 this.reader.get();
7936 return;
7937 }
7938 if (this.reader.peekn(1) == "\"") {
7939 this.parse_comment();
7940 this.reader.get();
7941 return;
7942 }
7943 this.ea.linepos = this.reader.getpos();
7944 this.parse_command_modifiers();
7945 this.parse_range();
7946 this.parse_command();
7947 this.parse_trail();
7948}
7949
7950// FIXME:
7951VimLParser.prototype.parse_command_modifiers = function() {
7952 var modifiers = [];
7953 while (TRUE) {
7954 var pos = this.reader.tell();
7955 var d = "";
7956 if (isdigit(this.reader.peekn(1))) {
7957 var d = this.reader.read_digit();
7958 this.reader.skip_white();
7959 }
7960 var k = this.reader.read_alpha();
7961 var c = this.reader.peekn(1);
7962 this.reader.skip_white();
7963 if (viml_stridx("aboveleft", k) == 0 && viml_len(k) >= 3) {
7964 // abo\%[veleft]
7965 viml_add(modifiers, {"name":"aboveleft"});
7966 }
7967 else if (viml_stridx("belowright", k) == 0 && viml_len(k) >= 3) {
7968 // bel\%[owright]
7969 viml_add(modifiers, {"name":"belowright"});
7970 }
7971 else if (viml_stridx("browse", k) == 0 && viml_len(k) >= 3) {
7972 // bro\%[wse]
7973 viml_add(modifiers, {"name":"browse"});
7974 }
7975 else if (viml_stridx("botright", k) == 0 && viml_len(k) >= 2) {
7976 // bo\%[tright]
7977 viml_add(modifiers, {"name":"botright"});
7978 }
7979 else if (viml_stridx("confirm", k) == 0 && viml_len(k) >= 4) {
7980 // conf\%[irm]
7981 viml_add(modifiers, {"name":"confirm"});
7982 }
7983 else if (viml_stridx("keepmarks", k) == 0 && viml_len(k) >= 3) {
7984 // kee\%[pmarks]
7985 viml_add(modifiers, {"name":"keepmarks"});
7986 }
7987 else if (viml_stridx("keepalt", k) == 0 && viml_len(k) >= 5) {
7988 // keepa\%[lt]
7989 viml_add(modifiers, {"name":"keepalt"});
7990 }
7991 else if (viml_stridx("keepjumps", k) == 0 && viml_len(k) >= 5) {
7992 // keepj\%[umps]
7993 viml_add(modifiers, {"name":"keepjumps"});
7994 }
7995 else if (viml_stridx("keeppatterns", k) == 0 && viml_len(k) >= 5) {
7996 // keepp\%[atterns]
7997 viml_add(modifiers, {"name":"keeppatterns"});
7998 }
7999 else if (viml_stridx("hide", k) == 0 && viml_len(k) >= 3) {
8000 // hid\%[e]
8001 if (this.ends_excmds(c)) {
8002 break;
8003 }
8004 viml_add(modifiers, {"name":"hide"});
8005 }
8006 else if (viml_stridx("lockmarks", k) == 0 && viml_len(k) >= 3) {
8007 // loc\%[kmarks]
8008 viml_add(modifiers, {"name":"lockmarks"});
8009 }
8010 else if (viml_stridx("leftabove", k) == 0 && viml_len(k) >= 5) {
8011 // lefta\%[bove]
8012 viml_add(modifiers, {"name":"leftabove"});
8013 }
8014 else if (viml_stridx("noautocmd", k) == 0 && viml_len(k) >= 3) {
8015 // noa\%[utocmd]
8016 viml_add(modifiers, {"name":"noautocmd"});
8017 }
8018 else if (viml_stridx("noswapfile", k) == 0 && viml_len(k) >= 3) {
8019 // :nos\%[wapfile]
8020 viml_add(modifiers, {"name":"noswapfile"});
8021 }
8022 else if (viml_stridx("rightbelow", k) == 0 && viml_len(k) >= 6) {
8023 // rightb\%[elow]
8024 viml_add(modifiers, {"name":"rightbelow"});
8025 }
8026 else if (viml_stridx("sandbox", k) == 0 && viml_len(k) >= 3) {
8027 // san\%[dbox]
8028 viml_add(modifiers, {"name":"sandbox"});
8029 }
8030 else if (viml_stridx("silent", k) == 0 && viml_len(k) >= 3) {
8031 // sil\%[ent]
8032 if (c == "!") {
8033 this.reader.get();
8034 viml_add(modifiers, {"name":"silent", "bang":1});
8035 }
8036 else {
8037 viml_add(modifiers, {"name":"silent", "bang":0});
8038 }
8039 }
8040 else if (k == "tab") {
8041 // tab
8042 if (d != "") {
8043 viml_add(modifiers, {"name":"tab", "count":viml_str2nr(d, 10)});
8044 }
8045 else {
8046 viml_add(modifiers, {"name":"tab"});
8047 }
8048 }
8049 else if (viml_stridx("topleft", k) == 0 && viml_len(k) >= 2) {
8050 // to\%[pleft]
8051 viml_add(modifiers, {"name":"topleft"});
8052 }
8053 else if (viml_stridx("unsilent", k) == 0 && viml_len(k) >= 3) {
8054 // uns\%[ilent]
8055 viml_add(modifiers, {"name":"unsilent"});
8056 }
8057 else if (viml_stridx("vertical", k) == 0 && viml_len(k) >= 4) {
8058 // vert\%[ical]
8059 viml_add(modifiers, {"name":"vertical"});
8060 }
8061 else if (viml_stridx("verbose", k) == 0 && viml_len(k) >= 4) {
8062 // verb\%[ose]
8063 if (d != "") {
8064 viml_add(modifiers, {"name":"verbose", "count":viml_str2nr(d, 10)});
8065 }
8066 else {
8067 viml_add(modifiers, {"name":"verbose", "count":1});
8068 }
8069 }
8070 else {
8071 this.reader.seek_set(pos);
8072 break;
8073 }
8074 }
8075 this.ea.modifiers = modifiers;
8076}
8077
8078// FIXME:
8079VimLParser.prototype.parse_range = function() {
8080 var tokens = [];
8081 while (TRUE) {
8082 while (TRUE) {
8083 this.reader.skip_white();
8084 var c = this.reader.peekn(1);
8085 if (c == "") {
8086 break;
8087 }
8088 if (c == ".") {
8089 viml_add(tokens, this.reader.getn(1));
8090 }
8091 else if (c == "$") {
8092 viml_add(tokens, this.reader.getn(1));
8093 }
8094 else if (c == "'") {
8095 this.reader.getn(1);
8096 var m = this.reader.getn(1);
8097 if (m == "") {
8098 break;
8099 }
8100 viml_add(tokens, "'" + m);
8101 }
8102 else if (c == "/") {
8103 this.reader.getn(1);
8104 var __tmp = this.parse_pattern(c);
8105 var pattern = __tmp[0];
8106 var _ = __tmp[1];
8107 viml_add(tokens, pattern);
8108 }
8109 else if (c == "?") {
8110 this.reader.getn(1);
8111 var __tmp = this.parse_pattern(c);
8112 var pattern = __tmp[0];
8113 var _ = __tmp[1];
8114 viml_add(tokens, pattern);
8115 }
8116 else if (c == "\\") {
8117 var m = this.reader.p(1);
8118 if (m == "&" || m == "?" || m == "/") {
8119 this.reader.seek_cur(2);
8120 viml_add(tokens, "\\" + m);
8121 }
8122 else {
8123 throw Err("E10: \\\\ should be followed by /, ? or &", this.reader.getpos());
8124 }
8125 }
8126 else if (isdigit(c)) {
8127 viml_add(tokens, this.reader.read_digit());
8128 }
8129 while (TRUE) {
8130 this.reader.skip_white();
8131 if (this.reader.peekn(1) == "") {
8132 break;
8133 }
8134 var n = this.reader.read_integer();
8135 if (n == "") {
8136 break;
8137 }
8138 viml_add(tokens, n);
8139 }
8140 if (this.reader.p(0) != "/" && this.reader.p(0) != "?") {
8141 break;
8142 }
8143 }
8144 if (this.reader.peekn(1) == "%") {
8145 viml_add(tokens, this.reader.getn(1));
8146 }
8147 else if (this.reader.peekn(1) == "*") {
8148 // && &cpoptions !~ '\*'
8149 viml_add(tokens, this.reader.getn(1));
8150 }
8151 if (this.reader.peekn(1) == ";") {
8152 viml_add(tokens, this.reader.getn(1));
8153 continue;
8154 }
8155 else if (this.reader.peekn(1) == ",") {
8156 viml_add(tokens, this.reader.getn(1));
8157 continue;
8158 }
8159 break;
8160 }
8161 this.ea.range = tokens;
8162}
8163
8164// FIXME:
8165VimLParser.prototype.parse_pattern = function(delimiter) {
8166 var pattern = "";
8167 var endc = "";
8168 var inbracket = 0;
8169 while (TRUE) {
8170 var c = this.reader.getn(1);
8171 if (c == "") {
8172 break;
8173 }
8174 if (c == delimiter && inbracket == 0) {
8175 var endc = c;
8176 break;
8177 }
8178 pattern += c;
8179 if (c == "\\") {
8180 var c = this.reader.peekn(1);
8181 if (c == "") {
8182 throw Err("E682: Invalid search pattern or delimiter", this.reader.getpos());
8183 }
8184 this.reader.getn(1);
8185 pattern += c;
8186 }
8187 else if (c == "[") {
8188 inbracket += 1;
8189 }
8190 else if (c == "]") {
8191 inbracket -= 1;
8192 }
8193 }
8194 return [pattern, endc];
8195}
8196
8197VimLParser.prototype.parse_command = function() {
8198 this.reader.skip_white_and_colon();
8199 this.ea.cmdpos = this.reader.getpos();
8200 if (this.reader.peekn(1) == "" || this.reader.peekn(1) == "\"") {
8201 if (!viml_empty(this.ea.modifiers) || !viml_empty(this.ea.range)) {
8202 this.parse_cmd_modifier_range();
8203 }
8204 return;
8205 }
8206 this.ea.cmd = this.find_command();
8207 if (this.ea.cmd === NIL) {
8208 this.reader.setpos(this.ea.cmdpos);
8209 throw Err(viml_printf("E492: Not an editor command: %s", this.reader.peekline()), this.ea.cmdpos);
8210 }
8211 if (this.reader.peekn(1) == "!" && this.ea.cmd.name != "substitute" && this.ea.cmd.name != "smagic" && this.ea.cmd.name != "snomagic") {
8212 this.reader.getn(1);
8213 this.ea.forceit = TRUE;
8214 }
8215 else {
8216 this.ea.forceit = FALSE;
8217 }
8218 if (!viml_eqregh(this.ea.cmd.flags, "\\<BANG\\>") && this.ea.forceit && !viml_eqregh(this.ea.cmd.flags, "\\<USERCMD\\>")) {
8219 throw Err("E477: No ! allowed", this.ea.cmdpos);
8220 }
8221 if (this.ea.cmd.name != "!") {
8222 this.reader.skip_white();
8223 }
8224 this.ea.argpos = this.reader.getpos();
8225 if (viml_eqregh(this.ea.cmd.flags, "\\<ARGOPT\\>")) {
8226 this.parse_argopt();
8227 }
8228 if (this.ea.cmd.name == "write" || this.ea.cmd.name == "update") {
8229 if (this.reader.p(0) == ">") {
8230 if (this.reader.p(1) != ">") {
8231 throw Err("E494: Use w or w>>", this.ea.cmdpos);
8232 }
8233 this.reader.seek_cur(2);
8234 this.reader.skip_white();
8235 this.ea.append = 1;
8236 }
8237 else if (this.reader.peekn(1) == "!" && this.ea.cmd.name == "write") {
8238 this.reader.getn(1);
8239 this.ea.usefilter = TRUE;
8240 }
8241 }
8242 if (this.ea.cmd.name == "read") {
8243 if (this.ea.forceit) {
8244 this.ea.usefilter = TRUE;
8245 this.ea.forceit = FALSE;
8246 }
8247 else if (this.reader.peekn(1) == "!") {
8248 this.reader.getn(1);
8249 this.ea.usefilter = TRUE;
8250 }
8251 }
8252 if (this.ea.cmd.name == "<" || this.ea.cmd.name == ">") {
8253 this.ea.amount = 1;
8254 while (this.reader.peekn(1) == this.ea.cmd.name) {
8255 this.reader.getn(1);
8256 this.ea.amount += 1;
8257 }
8258 this.reader.skip_white();
8259 }
8260 if (viml_eqregh(this.ea.cmd.flags, "\\<EDITCMD\\>") && !this.ea.usefilter) {
8261 this.parse_argcmd();
8262 }
8263 this._parse_command(this.ea.cmd.parser);
8264}
8265
8266// TODO: self[a:parser]
8267VimLParser.prototype._parse_command = function(parser) {
8268 if (parser == "parse_cmd_append") {
8269 this.parse_cmd_append();
8270 }
8271 else if (parser == "parse_cmd_break") {
8272 this.parse_cmd_break();
8273 }
8274 else if (parser == "parse_cmd_call") {
8275 this.parse_cmd_call();
8276 }
8277 else if (parser == "parse_cmd_catch") {
8278 this.parse_cmd_catch();
8279 }
8280 else if (parser == "parse_cmd_common") {
8281 this.parse_cmd_common();
8282 }
8283 else if (parser == "parse_cmd_continue") {
8284 this.parse_cmd_continue();
8285 }
8286 else if (parser == "parse_cmd_delfunction") {
8287 this.parse_cmd_delfunction();
8288 }
8289 else if (parser == "parse_cmd_echo") {
8290 this.parse_cmd_echo();
8291 }
8292 else if (parser == "parse_cmd_echoerr") {
8293 this.parse_cmd_echoerr();
8294 }
8295 else if (parser == "parse_cmd_echohl") {
8296 this.parse_cmd_echohl();
8297 }
8298 else if (parser == "parse_cmd_echomsg") {
8299 this.parse_cmd_echomsg();
8300 }
8301 else if (parser == "parse_cmd_echon") {
8302 this.parse_cmd_echon();
8303 }
8304 else if (parser == "parse_cmd_else") {
8305 this.parse_cmd_else();
8306 }
8307 else if (parser == "parse_cmd_elseif") {
8308 this.parse_cmd_elseif();
8309 }
8310 else if (parser == "parse_cmd_endfor") {
8311 this.parse_cmd_endfor();
8312 }
8313 else if (parser == "parse_cmd_endfunction") {
8314 this.parse_cmd_endfunction();
8315 }
8316 else if (parser == "parse_cmd_endif") {
8317 this.parse_cmd_endif();
8318 }
8319 else if (parser == "parse_cmd_endtry") {
8320 this.parse_cmd_endtry();
8321 }
8322 else if (parser == "parse_cmd_endwhile") {
8323 this.parse_cmd_endwhile();
8324 }
8325 else if (parser == "parse_cmd_execute") {
8326 this.parse_cmd_execute();
8327 }
8328 else if (parser == "parse_cmd_finally") {
8329 this.parse_cmd_finally();
8330 }
8331 else if (parser == "parse_cmd_finish") {
8332 this.parse_cmd_finish();
8333 }
8334 else if (parser == "parse_cmd_for") {
8335 this.parse_cmd_for();
8336 }
8337 else if (parser == "parse_cmd_function") {
8338 this.parse_cmd_function();
8339 }
8340 else if (parser == "parse_cmd_if") {
8341 this.parse_cmd_if();
8342 }
8343 else if (parser == "parse_cmd_insert") {
8344 this.parse_cmd_insert();
8345 }
8346 else if (parser == "parse_cmd_let") {
8347 this.parse_cmd_let();
8348 }
8349 else if (parser == "parse_cmd_const") {
8350 this.parse_cmd_const();
8351 }
8352 else if (parser == "parse_cmd_loadkeymap") {
8353 this.parse_cmd_loadkeymap();
8354 }
8355 else if (parser == "parse_cmd_lockvar") {
8356 this.parse_cmd_lockvar();
8357 }
8358 else if (parser == "parse_cmd_lua") {
8359 this.parse_cmd_lua();
8360 }
8361 else if (parser == "parse_cmd_modifier_range") {
8362 this.parse_cmd_modifier_range();
8363 }
8364 else if (parser == "parse_cmd_mzscheme") {
8365 this.parse_cmd_mzscheme();
8366 }
8367 else if (parser == "parse_cmd_perl") {
8368 this.parse_cmd_perl();
8369 }
8370 else if (parser == "parse_cmd_python") {
8371 this.parse_cmd_python();
8372 }
8373 else if (parser == "parse_cmd_python3") {
8374 this.parse_cmd_python3();
8375 }
8376 else if (parser == "parse_cmd_return") {
8377 this.parse_cmd_return();
8378 }
8379 else if (parser == "parse_cmd_ruby") {
8380 this.parse_cmd_ruby();
8381 }
8382 else if (parser == "parse_cmd_tcl") {
8383 this.parse_cmd_tcl();
8384 }
8385 else if (parser == "parse_cmd_throw") {
8386 this.parse_cmd_throw();
8387 }
8388 else if (parser == "parse_cmd_eval") {
8389 this.parse_cmd_eval();
8390 }
8391 else if (parser == "parse_cmd_try") {
8392 this.parse_cmd_try();
8393 }
8394 else if (parser == "parse_cmd_unlet") {
8395 this.parse_cmd_unlet();
8396 }
8397 else if (parser == "parse_cmd_unlockvar") {
8398 this.parse_cmd_unlockvar();
8399 }
8400 else if (parser == "parse_cmd_usercmd") {
8401 this.parse_cmd_usercmd();
8402 }
8403 else if (parser == "parse_cmd_while") {
8404 this.parse_cmd_while();
8405 }
8406 else if (parser == "parse_wincmd") {
8407 this.parse_wincmd();
8408 }
8409 else if (parser == "parse_cmd_syntax") {
8410 this.parse_cmd_syntax();
8411 }
8412 else {
8413 throw viml_printf("unknown parser: %s", viml_string(parser));
8414 }
8415}
8416
8417VimLParser.prototype.find_command = function() {
8418 var c = this.reader.peekn(1);
8419 var name = "";
8420 if (c == "k") {
8421 this.reader.getn(1);
8422 var name = "k";
8423 }
8424 else if (c == "s" && viml_eqregh(this.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])")) {
8425 this.reader.getn(1);
8426 var name = "substitute";
8427 }
8428 else if (viml_eqregh(c, "[@*!=><&~#]")) {
8429 this.reader.getn(1);
8430 var name = c;
8431 }
8432 else if (this.reader.peekn(2) == "py") {
8433 var name = this.reader.read_alnum();
8434 }
8435 else {
8436 var pos = this.reader.tell();
8437 var name = this.reader.read_alpha();
8438 if (name != "del" && viml_eqregh(name, "\\v^d%[elete][lp]$")) {
8439 this.reader.seek_set(pos);
8440 var name = this.reader.getn(viml_len(name) - 1);
8441 }
8442 }
8443 if (name == "") {
8444 return NIL;
8445 }
8446 if (viml_has_key(this.find_command_cache, name)) {
8447 return this.find_command_cache[name];
8448 }
8449 var cmd = NIL;
8450 var __c4 = this.builtin_commands;
8451 for (var __i4 = 0; __i4 < __c4.length; ++__i4) {
8452 var x = __c4[__i4];
8453 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
8454 delete cmd;
8455 var cmd = x;
8456 break;
8457 }
8458 }
8459 if (this.neovim) {
8460 var __c5 = this.neovim_additional_commands;
8461 for (var __i5 = 0; __i5 < __c5.length; ++__i5) {
8462 var x = __c5[__i5];
8463 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
8464 delete cmd;
8465 var cmd = x;
8466 break;
8467 }
8468 }
8469 var __c6 = this.neovim_removed_commands;
8470 for (var __i6 = 0; __i6 < __c6.length; ++__i6) {
8471 var x = __c6[__i6];
8472 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
8473 delete cmd;
8474 var cmd = NIL;
8475 break;
8476 }
8477 }
8478 }
8479 // FIXME: user defined command
8480 if ((cmd === NIL || cmd.name == "Print") && viml_eqregh(name, "^[A-Z]")) {
8481 name += this.reader.read_alnum();
8482 delete cmd;
8483 var cmd = {"name":name, "flags":"USERCMD", "parser":"parse_cmd_usercmd"};
8484 }
8485 this.find_command_cache[name] = cmd;
8486 return cmd;
8487}
8488
8489// TODO:
8490VimLParser.prototype.parse_hashbang = function() {
8491 this.reader.getn(-1);
8492}
8493
8494// TODO:
8495// ++opt=val
8496VimLParser.prototype.parse_argopt = function() {
8497 while (this.reader.p(0) == "+" && this.reader.p(1) == "+") {
8498 var s = this.reader.peekn(20);
8499 if (viml_eqregh(s, "^++bin\\>")) {
8500 this.reader.getn(5);
8501 this.ea.force_bin = 1;
8502 }
8503 else if (viml_eqregh(s, "^++nobin\\>")) {
8504 this.reader.getn(7);
8505 this.ea.force_bin = 2;
8506 }
8507 else if (viml_eqregh(s, "^++edit\\>")) {
8508 this.reader.getn(6);
8509 this.ea.read_edit = 1;
8510 }
8511 else if (viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>")) {
8512 this.reader.getn(5);
8513 this.ea.force_ff = this.reader.read_alpha();
8514 }
8515 else if (viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>")) {
8516 this.reader.getn(13);
8517 this.ea.force_ff = this.reader.read_alpha();
8518 }
8519 else if (viml_eqregh(s, "^++enc=\\S")) {
8520 this.reader.getn(6);
8521 this.ea.force_enc = this.reader.read_nonwhite();
8522 }
8523 else if (viml_eqregh(s, "^++encoding=\\S")) {
8524 this.reader.getn(11);
8525 this.ea.force_enc = this.reader.read_nonwhite();
8526 }
8527 else if (viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>")) {
8528 this.reader.getn(6);
8529 if (viml_eqregh(s, "^++bad=keep")) {
8530 this.ea.bad_char = this.reader.getn(4);
8531 }
8532 else if (viml_eqregh(s, "^++bad=drop")) {
8533 this.ea.bad_char = this.reader.getn(4);
8534 }
8535 else {
8536 this.ea.bad_char = this.reader.getn(1);
8537 }
8538 }
8539 else if (viml_eqregh(s, "^++")) {
8540 throw Err("E474: Invalid Argument", this.reader.getpos());
8541 }
8542 else {
8543 break;
8544 }
8545 this.reader.skip_white();
8546 }
8547}
8548
8549// TODO:
8550// +command
8551VimLParser.prototype.parse_argcmd = function() {
8552 if (this.reader.peekn(1) == "+") {
8553 this.reader.getn(1);
8554 if (this.reader.peekn(1) == " ") {
8555 this.ea.do_ecmd_cmd = "$";
8556 }
8557 else {
8558 this.ea.do_ecmd_cmd = this.read_cmdarg();
8559 }
8560 }
8561}
8562
8563VimLParser.prototype.read_cmdarg = function() {
8564 var r = "";
8565 while (TRUE) {
8566 var c = this.reader.peekn(1);
8567 if (c == "" || iswhite(c)) {
8568 break;
8569 }
8570 this.reader.getn(1);
8571 if (c == "\\") {
8572 var c = this.reader.getn(1);
8573 }
8574 r += c;
8575 }
8576 return r;
8577}
8578
8579VimLParser.prototype.parse_comment = function() {
8580 var npos = this.reader.getpos();
8581 var c = this.reader.get();
8582 if (c != "\"") {
8583 throw Err(viml_printf("unexpected character: %s", c), npos);
8584 }
8585 var node = Node(NODE_COMMENT);
8586 node.pos = npos;
8587 node.str = this.reader.getn(-1);
8588 this.add_node(node);
8589}
8590
8591VimLParser.prototype.parse_trail = function() {
8592 this.reader.skip_white();
8593 var c = this.reader.peek();
8594 if (c == "<EOF>") {
8595 // pass
8596 }
8597 else if (c == "<EOL>") {
8598 this.reader.get();
8599 }
8600 else if (c == "|") {
8601 this.reader.get();
8602 }
8603 else if (c == "\"") {
8604 this.parse_comment();
8605 this.reader.get();
8606 }
8607 else {
8608 throw Err(viml_printf("E488: Trailing characters: %s", c), this.reader.getpos());
8609 }
8610}
8611
8612// modifier or range only command line
8613VimLParser.prototype.parse_cmd_modifier_range = function() {
8614 var node = Node(NODE_EXCMD);
8615 node.pos = this.ea.cmdpos;
8616 node.ea = this.ea;
8617 node.str = this.reader.getstr(this.ea.linepos, this.reader.getpos());
8618 this.add_node(node);
8619}
8620
8621// TODO:
8622VimLParser.prototype.parse_cmd_common = function() {
8623 var end = this.reader.getpos();
8624 if (viml_eqregh(this.ea.cmd.flags, "\\<TRLBAR\\>") && !this.ea.usefilter) {
8625 var end = this.separate_nextcmd();
8626 }
8627 else if (this.ea.cmd.name == "!" || this.ea.cmd.name == "global" || this.ea.cmd.name == "vglobal" || this.ea.usefilter) {
8628 while (TRUE) {
8629 var end = this.reader.getpos();
8630 if (this.reader.getn(1) == "") {
8631 break;
8632 }
8633 }
8634 }
8635 else {
8636 while (TRUE) {
8637 var end = this.reader.getpos();
8638 if (this.reader.getn(1) == "") {
8639 break;
8640 }
8641 }
8642 }
8643 var node = Node(NODE_EXCMD);
8644 node.pos = this.ea.cmdpos;
8645 node.ea = this.ea;
8646 node.str = this.reader.getstr(this.ea.linepos, end);
8647 this.add_node(node);
8648}
8649
8650VimLParser.prototype.separate_nextcmd = function() {
8651 if (this.ea.cmd.name == "vimgrep" || this.ea.cmd.name == "vimgrepadd" || this.ea.cmd.name == "lvimgrep" || this.ea.cmd.name == "lvimgrepadd") {
8652 this.skip_vimgrep_pat();
8653 }
8654 var pc = "";
8655 var end = this.reader.getpos();
8656 var nospend = end;
8657 while (TRUE) {
8658 var end = this.reader.getpos();
8659 if (!iswhite(pc)) {
8660 var nospend = end;
8661 }
8662 var c = this.reader.peek();
8663 if (c == "<EOF>" || c == "<EOL>") {
8664 break;
8665 }
8666 else if (c == "\x16") {
8667 // <C-V>
8668 this.reader.get();
8669 var end = this.reader.getpos();
8670 var nospend = this.reader.getpos();
8671 var c = this.reader.peek();
8672 if (c == "<EOF>" || c == "<EOL>") {
8673 break;
8674 }
8675 this.reader.get();
8676 }
8677 else if (this.reader.peekn(2) == "`=" && viml_eqregh(this.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>")) {
8678 this.reader.getn(2);
8679 this.parse_expr();
8680 var c = this.reader.peekn(1);
8681 if (c != "`") {
8682 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
8683 }
8684 this.reader.getn(1);
8685 }
8686 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 != "@")) {
8687 var has_cpo_bar = FALSE;
8688 // &cpoptions =~ 'b'
8689 if ((!has_cpo_bar || !viml_eqregh(this.ea.cmd.flags, "\\<USECTRLV\\>")) && pc == "\\") {
8690 this.reader.get();
8691 }
8692 else {
8693 break;
8694 }
8695 }
8696 else {
8697 this.reader.get();
8698 }
8699 var pc = c;
8700 }
8701 if (!viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>")) {
8702 var end = nospend;
8703 }
8704 return end;
8705}
8706
8707// FIXME
8708VimLParser.prototype.skip_vimgrep_pat = function() {
8709 if (this.reader.peekn(1) == "") {
8710 // pass
8711 }
8712 else if (isidc(this.reader.peekn(1))) {
8713 // :vimgrep pattern fname
8714 this.reader.read_nonwhite();
8715 }
8716 else {
8717 // :vimgrep /pattern/[g][j] fname
8718 var c = this.reader.getn(1);
8719 var __tmp = this.parse_pattern(c);
8720 var _ = __tmp[0];
8721 var endc = __tmp[1];
8722 if (c != endc) {
8723 return;
8724 }
8725 while (this.reader.p(0) == "g" || this.reader.p(0) == "j") {
8726 this.reader.getn(1);
8727 }
8728 }
8729}
8730
8731VimLParser.prototype.parse_cmd_append = function() {
8732 this.reader.setpos(this.ea.linepos);
8733 var cmdline = this.reader.readline();
8734 var lines = [cmdline];
8735 var m = ".";
8736 while (TRUE) {
8737 if (this.reader.peek() == "<EOF>") {
8738 break;
8739 }
8740 var line = this.reader.getn(-1);
8741 viml_add(lines, line);
8742 if (line == m) {
8743 break;
8744 }
8745 this.reader.get();
8746 }
8747 var node = Node(NODE_EXCMD);
8748 node.pos = this.ea.cmdpos;
8749 node.ea = this.ea;
8750 node.str = viml_join(lines, "\n");
8751 this.add_node(node);
8752}
8753
8754VimLParser.prototype.parse_cmd_insert = function() {
8755 this.parse_cmd_append();
8756}
8757
8758VimLParser.prototype.parse_cmd_loadkeymap = function() {
8759 this.reader.setpos(this.ea.linepos);
8760 var cmdline = this.reader.readline();
8761 var lines = [cmdline];
8762 while (TRUE) {
8763 if (this.reader.peek() == "<EOF>") {
8764 break;
8765 }
8766 var line = this.reader.readline();
8767 viml_add(lines, line);
8768 }
8769 var node = Node(NODE_EXCMD);
8770 node.pos = this.ea.cmdpos;
8771 node.ea = this.ea;
8772 node.str = viml_join(lines, "\n");
8773 this.add_node(node);
8774}
8775
8776VimLParser.prototype.parse_cmd_lua = function() {
8777 var lines = [];
8778 this.reader.skip_white();
8779 if (this.reader.peekn(2) == "<<") {
8780 this.reader.getn(2);
8781 this.reader.skip_white();
8782 var m = this.reader.readline();
8783 if (m == "") {
8784 var m = ".";
8785 }
8786 this.reader.setpos(this.ea.linepos);
8787 var cmdline = this.reader.getn(-1);
8788 var lines = [cmdline];
8789 this.reader.get();
8790 while (TRUE) {
8791 if (this.reader.peek() == "<EOF>") {
8792 break;
8793 }
8794 var line = this.reader.getn(-1);
8795 viml_add(lines, line);
8796 if (line == m) {
8797 break;
8798 }
8799 this.reader.get();
8800 }
8801 }
8802 else {
8803 this.reader.setpos(this.ea.linepos);
8804 var cmdline = this.reader.getn(-1);
8805 var lines = [cmdline];
8806 }
8807 var node = Node(NODE_EXCMD);
8808 node.pos = this.ea.cmdpos;
8809 node.ea = this.ea;
8810 node.str = viml_join(lines, "\n");
8811 this.add_node(node);
8812}
8813
8814VimLParser.prototype.parse_cmd_mzscheme = function() {
8815 this.parse_cmd_lua();
8816}
8817
8818VimLParser.prototype.parse_cmd_perl = function() {
8819 this.parse_cmd_lua();
8820}
8821
8822VimLParser.prototype.parse_cmd_python = function() {
8823 this.parse_cmd_lua();
8824}
8825
8826VimLParser.prototype.parse_cmd_python3 = function() {
8827 this.parse_cmd_lua();
8828}
8829
8830VimLParser.prototype.parse_cmd_ruby = function() {
8831 this.parse_cmd_lua();
8832}
8833
8834VimLParser.prototype.parse_cmd_tcl = function() {
8835 this.parse_cmd_lua();
8836}
8837
8838VimLParser.prototype.parse_cmd_finish = function() {
8839 this.parse_cmd_common();
8840 if (this.context[0].type == NODE_TOPLEVEL) {
8841 this.reader.seek_end(0);
8842 }
8843}
8844
8845// FIXME
8846VimLParser.prototype.parse_cmd_usercmd = function() {
8847 this.parse_cmd_common();
8848}
8849
8850VimLParser.prototype.parse_cmd_function = function() {
8851 var pos = this.reader.tell();
8852 this.reader.skip_white();
8853 // :function
8854 if (this.ends_excmds(this.reader.peek())) {
8855 this.reader.seek_set(pos);
8856 this.parse_cmd_common();
8857 return;
8858 }
8859 // :function /pattern
8860 if (this.reader.peekn(1) == "/") {
8861 this.reader.seek_set(pos);
8862 this.parse_cmd_common();
8863 return;
8864 }
8865 var left = this.parse_lvalue_func();
8866 this.reader.skip_white();
8867 if (left.type == NODE_IDENTIFIER) {
8868 var s = left.value;
8869 var ss = viml_split(s, "\\zs");
8870 if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) {
8871 throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos);
8872 }
8873 }
8874 // :function {name}
8875 if (this.reader.peekn(1) != "(") {
8876 this.reader.seek_set(pos);
8877 this.parse_cmd_common();
8878 return;
8879 }
8880 // :function[!] {name}([arguments]) [range] [abort] [dict] [closure]
8881 var node = Node(NODE_FUNCTION);
8882 node.pos = this.ea.cmdpos;
8883 node.body = [];
8884 node.ea = this.ea;
8885 node.left = left;
8886 node.rlist = [];
8887 node.default_args = [];
8888 node.attr = {"range":0, "abort":0, "dict":0, "closure":0};
8889 node.endfunction = NIL;
8890 this.reader.getn(1);
8891 var tokenizer = new ExprTokenizer(this.reader);
8892 if (tokenizer.peek().type == TOKEN_PCLOSE) {
8893 tokenizer.get();
8894 }
8895 else {
8896 var named = {};
8897 while (TRUE) {
8898 var varnode = Node(NODE_IDENTIFIER);
8899 var token = tokenizer.get();
8900 if (token.type == TOKEN_IDENTIFIER) {
8901 if (!isargname(token.value) || token.value == "firstline" || token.value == "lastline") {
8902 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
8903 }
8904 else if (viml_has_key(named, token.value)) {
8905 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
8906 }
8907 named[token.value] = 1;
8908 varnode.pos = token.pos;
8909 varnode.value = token.value;
8910 viml_add(node.rlist, varnode);
8911 if (tokenizer.peek().type == TOKEN_EQ) {
8912 tokenizer.get();
8913 viml_add(node.default_args, this.parse_expr());
8914 }
8915 else if (viml_len(node.default_args) > 0) {
8916 throw Err("E989: Non-default argument follows default argument", varnode.pos);
8917 }
8918 // XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
8919 if (iswhite(this.reader.p(0)) && tokenizer.peek().type == TOKEN_COMMA) {
8920 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
8921 }
8922 var token = tokenizer.get();
8923 if (token.type == TOKEN_COMMA) {
8924 // XXX: Vim allows last comma. F(a, b, ) => OK
8925 if (tokenizer.peek().type == TOKEN_PCLOSE) {
8926 tokenizer.get();
8927 break;
8928 }
8929 }
8930 else if (token.type == TOKEN_PCLOSE) {
8931 break;
8932 }
8933 else {
8934 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
8935 }
8936 }
8937 else if (token.type == TOKEN_DOTDOTDOT) {
8938 varnode.pos = token.pos;
8939 varnode.value = token.value;
8940 viml_add(node.rlist, varnode);
8941 var token = tokenizer.get();
8942 if (token.type == TOKEN_PCLOSE) {
8943 break;
8944 }
8945 else {
8946 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
8947 }
8948 }
8949 else {
8950 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
8951 }
8952 }
8953 }
8954 while (TRUE) {
8955 this.reader.skip_white();
8956 var epos = this.reader.getpos();
8957 var key = this.reader.read_alpha();
8958 if (key == "") {
8959 break;
8960 }
8961 else if (key == "range") {
8962 node.attr.range = TRUE;
8963 }
8964 else if (key == "abort") {
8965 node.attr.abort = TRUE;
8966 }
8967 else if (key == "dict") {
8968 node.attr.dict = TRUE;
8969 }
8970 else if (key == "closure") {
8971 node.attr.closure = TRUE;
8972 }
8973 else {
8974 throw Err(viml_printf("unexpected token: %s", key), epos);
8975 }
8976 }
8977 this.add_node(node);
8978 this.push_context(node);
8979}
8980
8981VimLParser.prototype.parse_cmd_endfunction = function() {
8982 this.check_missing_endif("ENDFUNCTION", this.ea.cmdpos);
8983 this.check_missing_endtry("ENDFUNCTION", this.ea.cmdpos);
8984 this.check_missing_endwhile("ENDFUNCTION", this.ea.cmdpos);
8985 this.check_missing_endfor("ENDFUNCTION", this.ea.cmdpos);
8986 if (this.context[0].type != NODE_FUNCTION) {
8987 throw Err("E193: :endfunction not inside a function", this.ea.cmdpos);
8988 }
8989 this.reader.getn(-1);
8990 var node = Node(NODE_ENDFUNCTION);
8991 node.pos = this.ea.cmdpos;
8992 node.ea = this.ea;
8993 this.context[0].endfunction = node;
8994 this.pop_context();
8995}
8996
8997VimLParser.prototype.parse_cmd_delfunction = function() {
8998 var node = Node(NODE_DELFUNCTION);
8999 node.pos = this.ea.cmdpos;
9000 node.ea = this.ea;
9001 node.left = this.parse_lvalue_func();
9002 this.add_node(node);
9003}
9004
9005VimLParser.prototype.parse_cmd_return = function() {
9006 if (this.find_context(NODE_FUNCTION) == -1) {
9007 throw Err("E133: :return not inside a function", this.ea.cmdpos);
9008 }
9009 var node = Node(NODE_RETURN);
9010 node.pos = this.ea.cmdpos;
9011 node.ea = this.ea;
9012 node.left = NIL;
9013 this.reader.skip_white();
9014 var c = this.reader.peek();
9015 if (c == "\"" || !this.ends_excmds(c)) {
9016 node.left = this.parse_expr();
9017 }
9018 this.add_node(node);
9019}
9020
9021VimLParser.prototype.parse_cmd_call = function() {
9022 var node = Node(NODE_EXCALL);
9023 node.pos = this.ea.cmdpos;
9024 node.ea = this.ea;
9025 this.reader.skip_white();
9026 var c = this.reader.peek();
9027 if (this.ends_excmds(c)) {
9028 throw Err("E471: Argument required", this.reader.getpos());
9029 }
9030 node.left = this.parse_expr();
9031 if (node.left.type != NODE_CALL) {
9032 throw Err("Not an function call", node.left.pos);
9033 }
9034 this.add_node(node);
9035}
9036
9037VimLParser.prototype.parse_heredoc = function() {
9038 var node = Node(NODE_HEREDOC);
9039 node.pos = this.ea.cmdpos;
9040 node.op = "";
9041 node.rlist = [];
9042 node.body = [];
9043 while (TRUE) {
9044 this.reader.skip_white();
9045 var key = this.reader.read_word();
9046 if (key == "") {
9047 break;
9048 }
9049 if (!islower(key[0])) {
9050 node.op = key;
9051 break;
9052 }
9053 else {
9054 viml_add(node.rlist, key);
9055 }
9056 }
9057 if (node.op == "") {
9058 throw Err("E172: Missing marker", this.reader.getpos());
9059 }
9060 this.parse_trail();
9061 while (TRUE) {
9062 if (this.reader.peek() == "<EOF>") {
9063 break;
9064 }
9065 var line = this.reader.getn(-1);
9066 if (line == node.op) {
9067 return node;
9068 }
9069 viml_add(node.body, line);
9070 this.reader.get();
9071 }
9072 throw Err(viml_printf("E990: Missing end marker '%s'", node.op), this.reader.getpos());
9073}
9074
9075VimLParser.prototype.parse_cmd_let = function() {
9076 var pos = this.reader.tell();
9077 this.reader.skip_white();
9078 // :let
9079 if (this.ends_excmds(this.reader.peek())) {
9080 this.reader.seek_set(pos);
9081 this.parse_cmd_common();
9082 return;
9083 }
9084 var lhs = this.parse_letlhs();
9085 this.reader.skip_white();
9086 var s1 = this.reader.peekn(1);
9087 var s2 = this.reader.peekn(2);
9088 // TODO check scriptversion?
9089 if (s2 == "..") {
9090 var s2 = this.reader.peekn(3);
9091 }
9092 else if (s2 == "=<") {
9093 var s2 = this.reader.peekn(3);
9094 }
9095 // :let {var-name} ..
9096 if (this.ends_excmds(s1) || s2 != "+=" && s2 != "-=" && s2 != ".=" && s2 != "..=" && s2 != "*=" && s2 != "/=" && s2 != "%=" && s2 != "=<<" && s1 != "=") {
9097 this.reader.seek_set(pos);
9098 this.parse_cmd_common();
9099 return;
9100 }
9101 // :let left op right
9102 var node = Node(NODE_LET);
9103 node.pos = this.ea.cmdpos;
9104 node.ea = this.ea;
9105 node.op = "";
9106 node.left = lhs.left;
9107 node.list = lhs.list;
9108 node.rest = lhs.rest;
9109 node.right = NIL;
9110 if (s2 == "+=" || s2 == "-=" || s2 == ".=" || s2 == "..=" || s2 == "*=" || s2 == "/=" || s2 == "%=") {
9111 this.reader.getn(viml_len(s2));
9112 node.op = s2;
9113 }
9114 else if (s2 == "=<<") {
9115 this.reader.getn(viml_len(s2));
9116 this.reader.skip_white();
9117 node.op = s2;
9118 node.right = this.parse_heredoc();
9119 this.add_node(node);
9120 return;
9121 }
9122 else if (s1 == "=") {
9123 this.reader.getn(1);
9124 node.op = s1;
9125 }
9126 else {
9127 throw "NOT REACHED";
9128 }
9129 node.right = this.parse_expr();
9130 this.add_node(node);
9131}
9132
9133VimLParser.prototype.parse_cmd_const = function() {
9134 var pos = this.reader.tell();
9135 this.reader.skip_white();
9136 // :const
9137 if (this.ends_excmds(this.reader.peek())) {
9138 this.reader.seek_set(pos);
9139 this.parse_cmd_common();
9140 return;
9141 }
9142 var lhs = this.parse_constlhs();
9143 this.reader.skip_white();
9144 var s1 = this.reader.peekn(1);
9145 // :const {var-name}
9146 if (this.ends_excmds(s1) || s1 != "=") {
9147 this.reader.seek_set(pos);
9148 this.parse_cmd_common();
9149 return;
9150 }
9151 // :const left op right
9152 var node = Node(NODE_CONST);
9153 node.pos = this.ea.cmdpos;
9154 node.ea = this.ea;
9155 this.reader.getn(1);
9156 node.op = s1;
9157 node.left = lhs.left;
9158 node.list = lhs.list;
9159 node.rest = lhs.rest;
9160 node.right = this.parse_expr();
9161 this.add_node(node);
9162}
9163
9164VimLParser.prototype.parse_cmd_unlet = function() {
9165 var node = Node(NODE_UNLET);
9166 node.pos = this.ea.cmdpos;
9167 node.ea = this.ea;
9168 node.list = this.parse_lvaluelist();
9169 this.add_node(node);
9170}
9171
9172VimLParser.prototype.parse_cmd_lockvar = function() {
9173 var node = Node(NODE_LOCKVAR);
9174 node.pos = this.ea.cmdpos;
9175 node.ea = this.ea;
9176 node.depth = NIL;
9177 node.list = [];
9178 this.reader.skip_white();
9179 if (isdigit(this.reader.peekn(1))) {
9180 node.depth = viml_str2nr(this.reader.read_digit(), 10);
9181 }
9182 node.list = this.parse_lvaluelist();
9183 this.add_node(node);
9184}
9185
9186VimLParser.prototype.parse_cmd_unlockvar = function() {
9187 var node = Node(NODE_UNLOCKVAR);
9188 node.pos = this.ea.cmdpos;
9189 node.ea = this.ea;
9190 node.depth = NIL;
9191 node.list = [];
9192 this.reader.skip_white();
9193 if (isdigit(this.reader.peekn(1))) {
9194 node.depth = viml_str2nr(this.reader.read_digit(), 10);
9195 }
9196 node.list = this.parse_lvaluelist();
9197 this.add_node(node);
9198}
9199
9200VimLParser.prototype.parse_cmd_if = function() {
9201 var node = Node(NODE_IF);
9202 node.pos = this.ea.cmdpos;
9203 node.body = [];
9204 node.ea = this.ea;
9205 node.cond = this.parse_expr();
9206 node.elseif = [];
9207 node._else = NIL;
9208 node.endif = NIL;
9209 this.add_node(node);
9210 this.push_context(node);
9211}
9212
9213VimLParser.prototype.parse_cmd_elseif = function() {
9214 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
9215 throw Err("E582: :elseif without :if", this.ea.cmdpos);
9216 }
9217 if (this.context[0].type != NODE_IF) {
9218 this.pop_context();
9219 }
9220 var node = Node(NODE_ELSEIF);
9221 node.pos = this.ea.cmdpos;
9222 node.body = [];
9223 node.ea = this.ea;
9224 node.cond = this.parse_expr();
9225 viml_add(this.context[0].elseif, node);
9226 this.push_context(node);
9227}
9228
9229VimLParser.prototype.parse_cmd_else = function() {
9230 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
9231 throw Err("E581: :else without :if", this.ea.cmdpos);
9232 }
9233 if (this.context[0].type != NODE_IF) {
9234 this.pop_context();
9235 }
9236 var node = Node(NODE_ELSE);
9237 node.pos = this.ea.cmdpos;
9238 node.body = [];
9239 node.ea = this.ea;
9240 this.context[0]._else = node;
9241 this.push_context(node);
9242}
9243
9244VimLParser.prototype.parse_cmd_endif = function() {
9245 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF && this.context[0].type != NODE_ELSE) {
9246 throw Err("E580: :endif without :if", this.ea.cmdpos);
9247 }
9248 if (this.context[0].type != NODE_IF) {
9249 this.pop_context();
9250 }
9251 var node = Node(NODE_ENDIF);
9252 node.pos = this.ea.cmdpos;
9253 node.ea = this.ea;
9254 this.context[0].endif = node;
9255 this.pop_context();
9256}
9257
9258VimLParser.prototype.parse_cmd_while = function() {
9259 var node = Node(NODE_WHILE);
9260 node.pos = this.ea.cmdpos;
9261 node.body = [];
9262 node.ea = this.ea;
9263 node.cond = this.parse_expr();
9264 node.endwhile = NIL;
9265 this.add_node(node);
9266 this.push_context(node);
9267}
9268
9269VimLParser.prototype.parse_cmd_endwhile = function() {
9270 if (this.context[0].type != NODE_WHILE) {
9271 throw Err("E588: :endwhile without :while", this.ea.cmdpos);
9272 }
9273 var node = Node(NODE_ENDWHILE);
9274 node.pos = this.ea.cmdpos;
9275 node.ea = this.ea;
9276 this.context[0].endwhile = node;
9277 this.pop_context();
9278}
9279
9280VimLParser.prototype.parse_cmd_for = function() {
9281 var node = Node(NODE_FOR);
9282 node.pos = this.ea.cmdpos;
9283 node.body = [];
9284 node.ea = this.ea;
9285 node.left = NIL;
9286 node.right = NIL;
9287 node.endfor = NIL;
9288 var lhs = this.parse_letlhs();
9289 node.left = lhs.left;
9290 node.list = lhs.list;
9291 node.rest = lhs.rest;
9292 this.reader.skip_white();
9293 var epos = this.reader.getpos();
9294 if (this.reader.read_alpha() != "in") {
9295 throw Err("Missing \"in\" after :for", epos);
9296 }
9297 node.right = this.parse_expr();
9298 this.add_node(node);
9299 this.push_context(node);
9300}
9301
9302VimLParser.prototype.parse_cmd_endfor = function() {
9303 if (this.context[0].type != NODE_FOR) {
9304 throw Err("E588: :endfor without :for", this.ea.cmdpos);
9305 }
9306 var node = Node(NODE_ENDFOR);
9307 node.pos = this.ea.cmdpos;
9308 node.ea = this.ea;
9309 this.context[0].endfor = node;
9310 this.pop_context();
9311}
9312
9313VimLParser.prototype.parse_cmd_continue = function() {
9314 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
9315 throw Err("E586: :continue without :while or :for", this.ea.cmdpos);
9316 }
9317 var node = Node(NODE_CONTINUE);
9318 node.pos = this.ea.cmdpos;
9319 node.ea = this.ea;
9320 this.add_node(node);
9321}
9322
9323VimLParser.prototype.parse_cmd_break = function() {
9324 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
9325 throw Err("E587: :break without :while or :for", this.ea.cmdpos);
9326 }
9327 var node = Node(NODE_BREAK);
9328 node.pos = this.ea.cmdpos;
9329 node.ea = this.ea;
9330 this.add_node(node);
9331}
9332
9333VimLParser.prototype.parse_cmd_try = function() {
9334 var node = Node(NODE_TRY);
9335 node.pos = this.ea.cmdpos;
9336 node.body = [];
9337 node.ea = this.ea;
9338 node.catch = [];
9339 node._finally = NIL;
9340 node.endtry = NIL;
9341 this.add_node(node);
9342 this.push_context(node);
9343}
9344
9345VimLParser.prototype.parse_cmd_catch = function() {
9346 if (this.context[0].type == NODE_FINALLY) {
9347 throw Err("E604: :catch after :finally", this.ea.cmdpos);
9348 }
9349 else if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
9350 throw Err("E603: :catch without :try", this.ea.cmdpos);
9351 }
9352 if (this.context[0].type != NODE_TRY) {
9353 this.pop_context();
9354 }
9355 var node = Node(NODE_CATCH);
9356 node.pos = this.ea.cmdpos;
9357 node.body = [];
9358 node.ea = this.ea;
9359 node.pattern = NIL;
9360 this.reader.skip_white();
9361 if (!this.ends_excmds(this.reader.peek())) {
9362 var __tmp = this.parse_pattern(this.reader.get());
9363 node.pattern = __tmp[0];
9364 var _ = __tmp[1];
9365 }
9366 viml_add(this.context[0].catch, node);
9367 this.push_context(node);
9368}
9369
9370VimLParser.prototype.parse_cmd_finally = function() {
9371 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
9372 throw Err("E606: :finally without :try", this.ea.cmdpos);
9373 }
9374 if (this.context[0].type != NODE_TRY) {
9375 this.pop_context();
9376 }
9377 var node = Node(NODE_FINALLY);
9378 node.pos = this.ea.cmdpos;
9379 node.body = [];
9380 node.ea = this.ea;
9381 this.context[0]._finally = node;
9382 this.push_context(node);
9383}
9384
9385VimLParser.prototype.parse_cmd_endtry = function() {
9386 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH && this.context[0].type != NODE_FINALLY) {
9387 throw Err("E602: :endtry without :try", this.ea.cmdpos);
9388 }
9389 if (this.context[0].type != NODE_TRY) {
9390 this.pop_context();
9391 }
9392 var node = Node(NODE_ENDTRY);
9393 node.pos = this.ea.cmdpos;
9394 node.ea = this.ea;
9395 this.context[0].endtry = node;
9396 this.pop_context();
9397}
9398
9399VimLParser.prototype.parse_cmd_throw = function() {
9400 var node = Node(NODE_THROW);
9401 node.pos = this.ea.cmdpos;
9402 node.ea = this.ea;
9403 node.left = this.parse_expr();
9404 this.add_node(node);
9405}
9406
9407VimLParser.prototype.parse_cmd_eval = function() {
9408 var node = Node(NODE_EVAL);
9409 node.pos = this.ea.cmdpos;
9410 node.ea = this.ea;
9411 node.left = this.parse_expr();
9412 this.add_node(node);
9413}
9414
9415VimLParser.prototype.parse_cmd_echo = function() {
9416 var node = Node(NODE_ECHO);
9417 node.pos = this.ea.cmdpos;
9418 node.ea = this.ea;
9419 node.list = this.parse_exprlist();
9420 this.add_node(node);
9421}
9422
9423VimLParser.prototype.parse_cmd_echon = function() {
9424 var node = Node(NODE_ECHON);
9425 node.pos = this.ea.cmdpos;
9426 node.ea = this.ea;
9427 node.list = this.parse_exprlist();
9428 this.add_node(node);
9429}
9430
9431VimLParser.prototype.parse_cmd_echohl = function() {
9432 var node = Node(NODE_ECHOHL);
9433 node.pos = this.ea.cmdpos;
9434 node.ea = this.ea;
9435 node.str = "";
9436 while (!this.ends_excmds(this.reader.peek())) {
9437 node.str += this.reader.get();
9438 }
9439 this.add_node(node);
9440}
9441
9442VimLParser.prototype.parse_cmd_echomsg = function() {
9443 var node = Node(NODE_ECHOMSG);
9444 node.pos = this.ea.cmdpos;
9445 node.ea = this.ea;
9446 node.list = this.parse_exprlist();
9447 this.add_node(node);
9448}
9449
9450VimLParser.prototype.parse_cmd_echoerr = function() {
9451 var node = Node(NODE_ECHOERR);
9452 node.pos = this.ea.cmdpos;
9453 node.ea = this.ea;
9454 node.list = this.parse_exprlist();
9455 this.add_node(node);
9456}
9457
9458VimLParser.prototype.parse_cmd_execute = function() {
9459 var node = Node(NODE_EXECUTE);
9460 node.pos = this.ea.cmdpos;
9461 node.ea = this.ea;
9462 node.list = this.parse_exprlist();
9463 this.add_node(node);
9464}
9465
9466VimLParser.prototype.parse_expr = function() {
9467 return new ExprParser(this.reader).parse();
9468}
9469
9470VimLParser.prototype.parse_exprlist = function() {
9471 var list = [];
9472 while (TRUE) {
9473 this.reader.skip_white();
9474 var c = this.reader.peek();
9475 if (c != "\"" && this.ends_excmds(c)) {
9476 break;
9477 }
9478 var node = this.parse_expr();
9479 viml_add(list, node);
9480 }
9481 return list;
9482}
9483
9484VimLParser.prototype.parse_lvalue_func = function() {
9485 var p = new LvalueParser(this.reader);
9486 var node = p.parse();
9487 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) {
9488 return node;
9489 }
9490 throw Err("Invalid Expression", node.pos);
9491}
9492
9493// FIXME:
9494VimLParser.prototype.parse_lvalue = function() {
9495 var p = new LvalueParser(this.reader);
9496 var node = p.parse();
9497 if (node.type == NODE_IDENTIFIER) {
9498 if (!isvarname(node.value)) {
9499 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
9500 }
9501 }
9502 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) {
9503 return node;
9504 }
9505 throw Err("Invalid Expression", node.pos);
9506}
9507
9508// TODO: merge with s:VimLParser.parse_lvalue()
9509VimLParser.prototype.parse_constlvalue = function() {
9510 var p = new LvalueParser(this.reader);
9511 var node = p.parse();
9512 if (node.type == NODE_IDENTIFIER) {
9513 if (!isvarname(node.value)) {
9514 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
9515 }
9516 }
9517 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME) {
9518 return node;
9519 }
9520 else if (node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT) {
9521 throw Err("E996: Cannot lock a list or dict", node.pos);
9522 }
9523 else if (node.type == NODE_OPTION) {
9524 throw Err("E996: Cannot lock an option", node.pos);
9525 }
9526 else if (node.type == NODE_ENV) {
9527 throw Err("E996: Cannot lock an environment variable", node.pos);
9528 }
9529 else if (node.type == NODE_REG) {
9530 throw Err("E996: Cannot lock a register", node.pos);
9531 }
9532 throw Err("Invalid Expression", node.pos);
9533}
9534
9535VimLParser.prototype.parse_lvaluelist = function() {
9536 var list = [];
9537 var node = this.parse_expr();
9538 viml_add(list, node);
9539 while (TRUE) {
9540 this.reader.skip_white();
9541 if (this.ends_excmds(this.reader.peek())) {
9542 break;
9543 }
9544 var node = this.parse_lvalue();
9545 viml_add(list, node);
9546 }
9547 return list;
9548}
9549
9550// FIXME:
9551VimLParser.prototype.parse_letlhs = function() {
9552 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
9553 var tokenizer = new ExprTokenizer(this.reader);
9554 if (tokenizer.peek().type == TOKEN_SQOPEN) {
9555 tokenizer.get();
9556 lhs.list = [];
9557 while (TRUE) {
9558 var node = this.parse_lvalue();
9559 viml_add(lhs.list, node);
9560 var token = tokenizer.get();
9561 if (token.type == TOKEN_SQCLOSE) {
9562 break;
9563 }
9564 else if (token.type == TOKEN_COMMA) {
9565 continue;
9566 }
9567 else if (token.type == TOKEN_SEMICOLON) {
9568 var node = this.parse_lvalue();
9569 lhs.rest = node;
9570 var token = tokenizer.get();
9571 if (token.type == TOKEN_SQCLOSE) {
9572 break;
9573 }
9574 else {
9575 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
9576 }
9577 }
9578 else {
9579 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
9580 }
9581 }
9582 }
9583 else {
9584 lhs.left = this.parse_lvalue();
9585 }
9586 return lhs;
9587}
9588
9589// TODO: merge with s:VimLParser.parse_letlhs() ?
9590VimLParser.prototype.parse_constlhs = function() {
9591 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
9592 var tokenizer = new ExprTokenizer(this.reader);
9593 if (tokenizer.peek().type == TOKEN_SQOPEN) {
9594 tokenizer.get();
9595 lhs.list = [];
9596 while (TRUE) {
9597 var node = this.parse_lvalue();
9598 viml_add(lhs.list, node);
9599 var token = tokenizer.get();
9600 if (token.type == TOKEN_SQCLOSE) {
9601 break;
9602 }
9603 else if (token.type == TOKEN_COMMA) {
9604 continue;
9605 }
9606 else if (token.type == TOKEN_SEMICOLON) {
9607 var node = this.parse_lvalue();
9608 lhs.rest = node;
9609 var token = tokenizer.get();
9610 if (token.type == TOKEN_SQCLOSE) {
9611 break;
9612 }
9613 else {
9614 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
9615 }
9616 }
9617 else {
9618 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
9619 }
9620 }
9621 }
9622 else {
9623 lhs.left = this.parse_constlvalue();
9624 }
9625 return lhs;
9626}
9627
9628VimLParser.prototype.ends_excmds = function(c) {
9629 return c == "" || c == "|" || c == "\"" || c == "<EOF>" || c == "<EOL>";
9630}
9631
9632// FIXME: validate argument
9633VimLParser.prototype.parse_wincmd = function() {
9634 var c = this.reader.getn(1);
9635 if (c == "") {
9636 throw Err("E471: Argument required", this.reader.getpos());
9637 }
9638 else if (c == "g" || c == "\x07") {
9639 // <C-G>
9640 var c2 = this.reader.getn(1);
9641 if (c2 == "" || iswhite(c2)) {
9642 throw Err("E474: Invalid Argument", this.reader.getpos());
9643 }
9644 }
9645 var end = this.reader.getpos();
9646 this.reader.skip_white();
9647 if (!this.ends_excmds(this.reader.peek())) {
9648 throw Err("E474: Invalid Argument", this.reader.getpos());
9649 }
9650 var node = Node(NODE_EXCMD);
9651 node.pos = this.ea.cmdpos;
9652 node.ea = this.ea;
9653 node.str = this.reader.getstr(this.ea.linepos, end);
9654 this.add_node(node);
9655}
9656
9657// FIXME: validate argument
9658VimLParser.prototype.parse_cmd_syntax = function() {
9659 var end = this.reader.getpos();
9660 while (TRUE) {
9661 var end = this.reader.getpos();
9662 var c = this.reader.peek();
9663 if (c == "/" || c == "'" || c == "\"") {
9664 this.reader.getn(1);
9665 this.parse_pattern(c);
9666 }
9667 else if (c == "=") {
9668 this.reader.getn(1);
9669 this.parse_pattern(" ");
9670 }
9671 else if (this.ends_excmds(c)) {
9672 break;
9673 }
9674 this.reader.getn(1);
9675 }
9676 var node = Node(NODE_EXCMD);
9677 node.pos = this.ea.cmdpos;
9678 node.ea = this.ea;
9679 node.str = this.reader.getstr(this.ea.linepos, end);
9680 this.add_node(node);
9681}
9682
9683VimLParser.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"}];
9684VimLParser.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"}];
9685// To find new builtin_commands, run the below script.
9686// $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
9687VimLParser.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"}];
9688// To find new builtin_functions, run the below script.
9689// $ scripts/update_builtin_functions.sh /path/to/vim/src/evalfunc.c
9690VimLParser.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"}];
9691function ExprTokenizer() { this.__init__.apply(this, arguments); }
9692ExprTokenizer.prototype.__init__ = function(reader) {
9693 this.reader = reader;
9694 this.cache = {};
9695}
9696
9697ExprTokenizer.prototype.token = function(type, value, pos) {
9698 return {"type":type, "value":value, "pos":pos};
9699}
9700
9701ExprTokenizer.prototype.peek = function() {
9702 var pos = this.reader.tell();
9703 var r = this.get();
9704 this.reader.seek_set(pos);
9705 return r;
9706}
9707
9708ExprTokenizer.prototype.get = function() {
9709 // FIXME: remove dirty hack
9710 if (viml_has_key(this.cache, this.reader.tell())) {
9711 var x = this.cache[this.reader.tell()];
9712 this.reader.seek_set(x[0]);
9713 return x[1];
9714 }
9715 var pos = this.reader.tell();
9716 this.reader.skip_white();
9717 var r = this.get2();
9718 this.cache[pos] = [this.reader.tell(), r];
9719 return r;
9720}
9721
9722ExprTokenizer.prototype.get2 = function() {
9723 var r = this.reader;
9724 var pos = r.getpos();
9725 var c = r.peek();
9726 if (c == "<EOF>") {
9727 return this.token(TOKEN_EOF, c, pos);
9728 }
9729 else if (c == "<EOL>") {
9730 r.seek_cur(1);
9731 return this.token(TOKEN_EOL, c, pos);
9732 }
9733 else if (iswhite(c)) {
9734 var s = r.read_white();
9735 return this.token(TOKEN_SPACE, s, pos);
9736 }
9737 else if (c == "0" && (r.p(1) == "X" || r.p(1) == "x") && isxdigit(r.p(2))) {
9738 var s = r.getn(3);
9739 s += r.read_xdigit();
9740 return this.token(TOKEN_NUMBER, s, pos);
9741 }
9742 else if (c == "0" && (r.p(1) == "B" || r.p(1) == "b") && (r.p(2) == "0" || r.p(2) == "1")) {
9743 var s = r.getn(3);
9744 s += r.read_bdigit();
9745 return this.token(TOKEN_NUMBER, s, pos);
9746 }
9747 else if (c == "0" && (r.p(1) == "Z" || r.p(1) == "z") && r.p(2) != ".") {
9748 var s = r.getn(2);
9749 s += r.read_blob();
9750 return this.token(TOKEN_BLOB, s, pos);
9751 }
9752 else if (isdigit(c)) {
9753 var s = r.read_digit();
9754 if (r.p(0) == "." && isdigit(r.p(1))) {
9755 s += r.getn(1);
9756 s += r.read_digit();
9757 if ((r.p(0) == "E" || r.p(0) == "e") && (isdigit(r.p(1)) || (r.p(1) == "-" || r.p(1) == "+") && isdigit(r.p(2)))) {
9758 s += r.getn(2);
9759 s += r.read_digit();
9760 }
9761 }
9762 return this.token(TOKEN_NUMBER, s, pos);
9763 }
9764 else if (c == "i" && r.p(1) == "s" && !isidc(r.p(2))) {
9765 if (r.p(2) == "?") {
9766 r.seek_cur(3);
9767 return this.token(TOKEN_ISCI, "is?", pos);
9768 }
9769 else if (r.p(2) == "#") {
9770 r.seek_cur(3);
9771 return this.token(TOKEN_ISCS, "is#", pos);
9772 }
9773 else {
9774 r.seek_cur(2);
9775 return this.token(TOKEN_IS, "is", pos);
9776 }
9777 }
9778 else if (c == "i" && r.p(1) == "s" && r.p(2) == "n" && r.p(3) == "o" && r.p(4) == "t" && !isidc(r.p(5))) {
9779 if (r.p(5) == "?") {
9780 r.seek_cur(6);
9781 return this.token(TOKEN_ISNOTCI, "isnot?", pos);
9782 }
9783 else if (r.p(5) == "#") {
9784 r.seek_cur(6);
9785 return this.token(TOKEN_ISNOTCS, "isnot#", pos);
9786 }
9787 else {
9788 r.seek_cur(5);
9789 return this.token(TOKEN_ISNOT, "isnot", pos);
9790 }
9791 }
9792 else if (isnamec1(c)) {
9793 var s = r.read_name();
9794 return this.token(TOKEN_IDENTIFIER, s, pos);
9795 }
9796 else if (c == "|" && r.p(1) == "|") {
9797 r.seek_cur(2);
9798 return this.token(TOKEN_OROR, "||", pos);
9799 }
9800 else if (c == "&" && r.p(1) == "&") {
9801 r.seek_cur(2);
9802 return this.token(TOKEN_ANDAND, "&&", pos);
9803 }
9804 else if (c == "=" && r.p(1) == "=") {
9805 if (r.p(2) == "?") {
9806 r.seek_cur(3);
9807 return this.token(TOKEN_EQEQCI, "==?", pos);
9808 }
9809 else if (r.p(2) == "#") {
9810 r.seek_cur(3);
9811 return this.token(TOKEN_EQEQCS, "==#", pos);
9812 }
9813 else {
9814 r.seek_cur(2);
9815 return this.token(TOKEN_EQEQ, "==", pos);
9816 }
9817 }
9818 else if (c == "!" && r.p(1) == "=") {
9819 if (r.p(2) == "?") {
9820 r.seek_cur(3);
9821 return this.token(TOKEN_NEQCI, "!=?", pos);
9822 }
9823 else if (r.p(2) == "#") {
9824 r.seek_cur(3);
9825 return this.token(TOKEN_NEQCS, "!=#", pos);
9826 }
9827 else {
9828 r.seek_cur(2);
9829 return this.token(TOKEN_NEQ, "!=", pos);
9830 }
9831 }
9832 else if (c == ">" && r.p(1) == "=") {
9833 if (r.p(2) == "?") {
9834 r.seek_cur(3);
9835 return this.token(TOKEN_GTEQCI, ">=?", pos);
9836 }
9837 else if (r.p(2) == "#") {
9838 r.seek_cur(3);
9839 return this.token(TOKEN_GTEQCS, ">=#", pos);
9840 }
9841 else {
9842 r.seek_cur(2);
9843 return this.token(TOKEN_GTEQ, ">=", pos);
9844 }
9845 }
9846 else if (c == "<" && r.p(1) == "=") {
9847 if (r.p(2) == "?") {
9848 r.seek_cur(3);
9849 return this.token(TOKEN_LTEQCI, "<=?", pos);
9850 }
9851 else if (r.p(2) == "#") {
9852 r.seek_cur(3);
9853 return this.token(TOKEN_LTEQCS, "<=#", pos);
9854 }
9855 else {
9856 r.seek_cur(2);
9857 return this.token(TOKEN_LTEQ, "<=", pos);
9858 }
9859 }
9860 else if (c == "=" && r.p(1) == "~") {
9861 if (r.p(2) == "?") {
9862 r.seek_cur(3);
9863 return this.token(TOKEN_MATCHCI, "=~?", pos);
9864 }
9865 else if (r.p(2) == "#") {
9866 r.seek_cur(3);
9867 return this.token(TOKEN_MATCHCS, "=~#", pos);
9868 }
9869 else {
9870 r.seek_cur(2);
9871 return this.token(TOKEN_MATCH, "=~", pos);
9872 }
9873 }
9874 else if (c == "!" && r.p(1) == "~") {
9875 if (r.p(2) == "?") {
9876 r.seek_cur(3);
9877 return this.token(TOKEN_NOMATCHCI, "!~?", pos);
9878 }
9879 else if (r.p(2) == "#") {
9880 r.seek_cur(3);
9881 return this.token(TOKEN_NOMATCHCS, "!~#", pos);
9882 }
9883 else {
9884 r.seek_cur(2);
9885 return this.token(TOKEN_NOMATCH, "!~", pos);
9886 }
9887 }
9888 else if (c == ">") {
9889 if (r.p(1) == "?") {
9890 r.seek_cur(2);
9891 return this.token(TOKEN_GTCI, ">?", pos);
9892 }
9893 else if (r.p(1) == "#") {
9894 r.seek_cur(2);
9895 return this.token(TOKEN_GTCS, ">#", pos);
9896 }
9897 else {
9898 r.seek_cur(1);
9899 return this.token(TOKEN_GT, ">", pos);
9900 }
9901 }
9902 else if (c == "<") {
9903 if (r.p(1) == "?") {
9904 r.seek_cur(2);
9905 return this.token(TOKEN_LTCI, "<?", pos);
9906 }
9907 else if (r.p(1) == "#") {
9908 r.seek_cur(2);
9909 return this.token(TOKEN_LTCS, "<#", pos);
9910 }
9911 else {
9912 r.seek_cur(1);
9913 return this.token(TOKEN_LT, "<", pos);
9914 }
9915 }
9916 else if (c == "+") {
9917 r.seek_cur(1);
9918 return this.token(TOKEN_PLUS, "+", pos);
9919 }
9920 else if (c == "-") {
9921 if (r.p(1) == ">") {
9922 r.seek_cur(2);
9923 return this.token(TOKEN_ARROW, "->", pos);
9924 }
9925 else {
9926 r.seek_cur(1);
9927 return this.token(TOKEN_MINUS, "-", pos);
9928 }
9929 }
9930 else if (c == ".") {
9931 if (r.p(1) == "." && r.p(2) == ".") {
9932 r.seek_cur(3);
9933 return this.token(TOKEN_DOTDOTDOT, "...", pos);
9934 }
9935 else if (r.p(1) == ".") {
9936 r.seek_cur(2);
9937 return this.token(TOKEN_DOTDOT, "..", pos);
9938 // TODO check scriptversion?
9939 }
9940 else {
9941 r.seek_cur(1);
9942 return this.token(TOKEN_DOT, ".", pos);
9943 // TODO check scriptversion?
9944 }
9945 }
9946 else if (c == "*") {
9947 r.seek_cur(1);
9948 return this.token(TOKEN_STAR, "*", pos);
9949 }
9950 else if (c == "/") {
9951 r.seek_cur(1);
9952 return this.token(TOKEN_SLASH, "/", pos);
9953 }
9954 else if (c == "%") {
9955 r.seek_cur(1);
9956 return this.token(TOKEN_PERCENT, "%", pos);
9957 }
9958 else if (c == "!") {
9959 r.seek_cur(1);
9960 return this.token(TOKEN_NOT, "!", pos);
9961 }
9962 else if (c == "?") {
9963 r.seek_cur(1);
9964 return this.token(TOKEN_QUESTION, "?", pos);
9965 }
9966 else if (c == ":") {
9967 r.seek_cur(1);
9968 return this.token(TOKEN_COLON, ":", pos);
9969 }
9970 else if (c == "#") {
9971 if (r.p(1) == "{") {
9972 r.seek_cur(2);
9973 return this.token(TOKEN_LITCOPEN, "#{", pos);
9974 }
9975 else {
9976 r.seek_cur(1);
9977 return this.token(TOKEN_SHARP, "#", pos);
9978 }
9979 }
9980 else if (c == "(") {
9981 r.seek_cur(1);
9982 return this.token(TOKEN_POPEN, "(", pos);
9983 }
9984 else if (c == ")") {
9985 r.seek_cur(1);
9986 return this.token(TOKEN_PCLOSE, ")", pos);
9987 }
9988 else if (c == "[") {
9989 r.seek_cur(1);
9990 return this.token(TOKEN_SQOPEN, "[", pos);
9991 }
9992 else if (c == "]") {
9993 r.seek_cur(1);
9994 return this.token(TOKEN_SQCLOSE, "]", pos);
9995 }
9996 else if (c == "{") {
9997 r.seek_cur(1);
9998 return this.token(TOKEN_COPEN, "{", pos);
9999 }
10000 else if (c == "}") {
10001 r.seek_cur(1);
10002 return this.token(TOKEN_CCLOSE, "}", pos);
10003 }
10004 else if (c == ",") {
10005 r.seek_cur(1);
10006 return this.token(TOKEN_COMMA, ",", pos);
10007 }
10008 else if (c == "'") {
10009 r.seek_cur(1);
10010 return this.token(TOKEN_SQUOTE, "'", pos);
10011 }
10012 else if (c == "\"") {
10013 r.seek_cur(1);
10014 return this.token(TOKEN_DQUOTE, "\"", pos);
10015 }
10016 else if (c == "$") {
10017 var s = r.getn(1);
10018 s += r.read_word();
10019 return this.token(TOKEN_ENV, s, pos);
10020 }
10021 else if (c == "@") {
10022 // @<EOL> is treated as @"
10023 return this.token(TOKEN_REG, r.getn(2), pos);
10024 }
10025 else if (c == "&") {
10026 var s = "";
10027 if ((r.p(1) == "g" || r.p(1) == "l") && r.p(2) == ":") {
10028 var s = r.getn(3) + r.read_word();
10029 }
10030 else {
10031 var s = r.getn(1) + r.read_word();
10032 }
10033 return this.token(TOKEN_OPTION, s, pos);
10034 }
10035 else if (c == "=") {
10036 r.seek_cur(1);
10037 return this.token(TOKEN_EQ, "=", pos);
10038 }
10039 else if (c == "|") {
10040 r.seek_cur(1);
10041 return this.token(TOKEN_OR, "|", pos);
10042 }
10043 else if (c == ";") {
10044 r.seek_cur(1);
10045 return this.token(TOKEN_SEMICOLON, ";", pos);
10046 }
10047 else if (c == "`") {
10048 r.seek_cur(1);
10049 return this.token(TOKEN_BACKTICK, "`", pos);
10050 }
10051 else {
10052 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10053 }
10054}
10055
10056ExprTokenizer.prototype.get_sstring = function() {
10057 this.reader.skip_white();
10058 var c = this.reader.p(0);
10059 if (c != "'") {
10060 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10061 }
10062 this.reader.seek_cur(1);
10063 var s = "";
10064 while (TRUE) {
10065 var c = this.reader.p(0);
10066 if (c == "<EOF>" || c == "<EOL>") {
10067 throw Err("unexpected EOL", this.reader.getpos());
10068 }
10069 else if (c == "'") {
10070 this.reader.seek_cur(1);
10071 if (this.reader.p(0) == "'") {
10072 this.reader.seek_cur(1);
10073 s += "''";
10074 }
10075 else {
10076 break;
10077 }
10078 }
10079 else {
10080 this.reader.seek_cur(1);
10081 s += c;
10082 }
10083 }
10084 return s;
10085}
10086
10087ExprTokenizer.prototype.get_dstring = function() {
10088 this.reader.skip_white();
10089 var c = this.reader.p(0);
10090 if (c != "\"") {
10091 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10092 }
10093 this.reader.seek_cur(1);
10094 var s = "";
10095 while (TRUE) {
10096 var c = this.reader.p(0);
10097 if (c == "<EOF>" || c == "<EOL>") {
10098 throw Err("unexpectd EOL", this.reader.getpos());
10099 }
10100 else if (c == "\"") {
10101 this.reader.seek_cur(1);
10102 break;
10103 }
10104 else if (c == "\\") {
10105 this.reader.seek_cur(1);
10106 s += c;
10107 var c = this.reader.p(0);
10108 if (c == "<EOF>" || c == "<EOL>") {
10109 throw Err("ExprTokenizer: unexpected EOL", this.reader.getpos());
10110 }
10111 this.reader.seek_cur(1);
10112 s += c;
10113 }
10114 else {
10115 this.reader.seek_cur(1);
10116 s += c;
10117 }
10118 }
10119 return s;
10120}
10121
10122ExprTokenizer.prototype.parse_dict_literal_key = function() {
10123 this.reader.skip_white();
10124 var c = this.reader.peek();
10125 if (!isalnum(c) && c != "_" && c != "-") {
10126 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10127 }
10128 var node = Node(NODE_STRING);
10129 var s = c;
10130 this.reader.seek_cur(1);
10131 node.pos = this.reader.getpos();
10132 while (TRUE) {
10133 var c = this.reader.p(0);
10134 if (c == "<EOF>" || c == "<EOL>") {
10135 throw Err("unexpectd EOL", this.reader.getpos());
10136 }
10137 if (!isalnum(c) && c != "_" && c != "-") {
10138 break;
10139 }
10140 this.reader.seek_cur(1);
10141 s += c;
10142 }
10143 node.value = "'" + s + "'";
10144 return node;
10145}
10146
10147function ExprParser() { this.__init__.apply(this, arguments); }
10148ExprParser.prototype.__init__ = function(reader) {
10149 this.reader = reader;
10150 this.tokenizer = new ExprTokenizer(reader);
10151}
10152
10153ExprParser.prototype.parse = function() {
10154 return this.parse_expr1();
10155}
10156
10157// expr1: expr2 ? expr1 : expr1
10158ExprParser.prototype.parse_expr1 = function() {
10159 var left = this.parse_expr2();
10160 var pos = this.reader.tell();
10161 var token = this.tokenizer.get();
10162 if (token.type == TOKEN_QUESTION) {
10163 var node = Node(NODE_TERNARY);
10164 node.pos = token.pos;
10165 node.cond = left;
10166 node.left = this.parse_expr1();
10167 var token = this.tokenizer.get();
10168 if (token.type != TOKEN_COLON) {
10169 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10170 }
10171 node.right = this.parse_expr1();
10172 var left = node;
10173 }
10174 else {
10175 this.reader.seek_set(pos);
10176 }
10177 return left;
10178}
10179
10180// expr2: expr3 || expr3 ..
10181ExprParser.prototype.parse_expr2 = function() {
10182 var left = this.parse_expr3();
10183 while (TRUE) {
10184 var pos = this.reader.tell();
10185 var token = this.tokenizer.get();
10186 if (token.type == TOKEN_OROR) {
10187 var node = Node(NODE_OR);
10188 node.pos = token.pos;
10189 node.left = left;
10190 node.right = this.parse_expr3();
10191 var left = node;
10192 }
10193 else {
10194 this.reader.seek_set(pos);
10195 break;
10196 }
10197 }
10198 return left;
10199}
10200
10201// expr3: expr4 && expr4
10202ExprParser.prototype.parse_expr3 = function() {
10203 var left = this.parse_expr4();
10204 while (TRUE) {
10205 var pos = this.reader.tell();
10206 var token = this.tokenizer.get();
10207 if (token.type == TOKEN_ANDAND) {
10208 var node = Node(NODE_AND);
10209 node.pos = token.pos;
10210 node.left = left;
10211 node.right = this.parse_expr4();
10212 var left = node;
10213 }
10214 else {
10215 this.reader.seek_set(pos);
10216 break;
10217 }
10218 }
10219 return left;
10220}
10221
10222// expr4: expr5 == expr5
10223// expr5 != expr5
10224// expr5 > expr5
10225// expr5 >= expr5
10226// expr5 < expr5
10227// expr5 <= expr5
10228// expr5 =~ expr5
10229// expr5 !~ expr5
10230//
10231// expr5 ==? expr5
10232// expr5 ==# expr5
10233// etc.
10234//
10235// expr5 is expr5
10236// expr5 isnot expr5
10237ExprParser.prototype.parse_expr4 = function() {
10238 var left = this.parse_expr5();
10239 var pos = this.reader.tell();
10240 var token = this.tokenizer.get();
10241 if (token.type == TOKEN_EQEQ) {
10242 var node = Node(NODE_EQUAL);
10243 node.pos = token.pos;
10244 node.left = left;
10245 node.right = this.parse_expr5();
10246 var left = node;
10247 }
10248 else if (token.type == TOKEN_EQEQCI) {
10249 var node = Node(NODE_EQUALCI);
10250 node.pos = token.pos;
10251 node.left = left;
10252 node.right = this.parse_expr5();
10253 var left = node;
10254 }
10255 else if (token.type == TOKEN_EQEQCS) {
10256 var node = Node(NODE_EQUALCS);
10257 node.pos = token.pos;
10258 node.left = left;
10259 node.right = this.parse_expr5();
10260 var left = node;
10261 }
10262 else if (token.type == TOKEN_NEQ) {
10263 var node = Node(NODE_NEQUAL);
10264 node.pos = token.pos;
10265 node.left = left;
10266 node.right = this.parse_expr5();
10267 var left = node;
10268 }
10269 else if (token.type == TOKEN_NEQCI) {
10270 var node = Node(NODE_NEQUALCI);
10271 node.pos = token.pos;
10272 node.left = left;
10273 node.right = this.parse_expr5();
10274 var left = node;
10275 }
10276 else if (token.type == TOKEN_NEQCS) {
10277 var node = Node(NODE_NEQUALCS);
10278 node.pos = token.pos;
10279 node.left = left;
10280 node.right = this.parse_expr5();
10281 var left = node;
10282 }
10283 else if (token.type == TOKEN_GT) {
10284 var node = Node(NODE_GREATER);
10285 node.pos = token.pos;
10286 node.left = left;
10287 node.right = this.parse_expr5();
10288 var left = node;
10289 }
10290 else if (token.type == TOKEN_GTCI) {
10291 var node = Node(NODE_GREATERCI);
10292 node.pos = token.pos;
10293 node.left = left;
10294 node.right = this.parse_expr5();
10295 var left = node;
10296 }
10297 else if (token.type == TOKEN_GTCS) {
10298 var node = Node(NODE_GREATERCS);
10299 node.pos = token.pos;
10300 node.left = left;
10301 node.right = this.parse_expr5();
10302 var left = node;
10303 }
10304 else if (token.type == TOKEN_GTEQ) {
10305 var node = Node(NODE_GEQUAL);
10306 node.pos = token.pos;
10307 node.left = left;
10308 node.right = this.parse_expr5();
10309 var left = node;
10310 }
10311 else if (token.type == TOKEN_GTEQCI) {
10312 var node = Node(NODE_GEQUALCI);
10313 node.pos = token.pos;
10314 node.left = left;
10315 node.right = this.parse_expr5();
10316 var left = node;
10317 }
10318 else if (token.type == TOKEN_GTEQCS) {
10319 var node = Node(NODE_GEQUALCS);
10320 node.pos = token.pos;
10321 node.left = left;
10322 node.right = this.parse_expr5();
10323 var left = node;
10324 }
10325 else if (token.type == TOKEN_LT) {
10326 var node = Node(NODE_SMALLER);
10327 node.pos = token.pos;
10328 node.left = left;
10329 node.right = this.parse_expr5();
10330 var left = node;
10331 }
10332 else if (token.type == TOKEN_LTCI) {
10333 var node = Node(NODE_SMALLERCI);
10334 node.pos = token.pos;
10335 node.left = left;
10336 node.right = this.parse_expr5();
10337 var left = node;
10338 }
10339 else if (token.type == TOKEN_LTCS) {
10340 var node = Node(NODE_SMALLERCS);
10341 node.pos = token.pos;
10342 node.left = left;
10343 node.right = this.parse_expr5();
10344 var left = node;
10345 }
10346 else if (token.type == TOKEN_LTEQ) {
10347 var node = Node(NODE_SEQUAL);
10348 node.pos = token.pos;
10349 node.left = left;
10350 node.right = this.parse_expr5();
10351 var left = node;
10352 }
10353 else if (token.type == TOKEN_LTEQCI) {
10354 var node = Node(NODE_SEQUALCI);
10355 node.pos = token.pos;
10356 node.left = left;
10357 node.right = this.parse_expr5();
10358 var left = node;
10359 }
10360 else if (token.type == TOKEN_LTEQCS) {
10361 var node = Node(NODE_SEQUALCS);
10362 node.pos = token.pos;
10363 node.left = left;
10364 node.right = this.parse_expr5();
10365 var left = node;
10366 }
10367 else if (token.type == TOKEN_MATCH) {
10368 var node = Node(NODE_MATCH);
10369 node.pos = token.pos;
10370 node.left = left;
10371 node.right = this.parse_expr5();
10372 var left = node;
10373 }
10374 else if (token.type == TOKEN_MATCHCI) {
10375 var node = Node(NODE_MATCHCI);
10376 node.pos = token.pos;
10377 node.left = left;
10378 node.right = this.parse_expr5();
10379 var left = node;
10380 }
10381 else if (token.type == TOKEN_MATCHCS) {
10382 var node = Node(NODE_MATCHCS);
10383 node.pos = token.pos;
10384 node.left = left;
10385 node.right = this.parse_expr5();
10386 var left = node;
10387 }
10388 else if (token.type == TOKEN_NOMATCH) {
10389 var node = Node(NODE_NOMATCH);
10390 node.pos = token.pos;
10391 node.left = left;
10392 node.right = this.parse_expr5();
10393 var left = node;
10394 }
10395 else if (token.type == TOKEN_NOMATCHCI) {
10396 var node = Node(NODE_NOMATCHCI);
10397 node.pos = token.pos;
10398 node.left = left;
10399 node.right = this.parse_expr5();
10400 var left = node;
10401 }
10402 else if (token.type == TOKEN_NOMATCHCS) {
10403 var node = Node(NODE_NOMATCHCS);
10404 node.pos = token.pos;
10405 node.left = left;
10406 node.right = this.parse_expr5();
10407 var left = node;
10408 }
10409 else if (token.type == TOKEN_IS) {
10410 var node = Node(NODE_IS);
10411 node.pos = token.pos;
10412 node.left = left;
10413 node.right = this.parse_expr5();
10414 var left = node;
10415 }
10416 else if (token.type == TOKEN_ISCI) {
10417 var node = Node(NODE_ISCI);
10418 node.pos = token.pos;
10419 node.left = left;
10420 node.right = this.parse_expr5();
10421 var left = node;
10422 }
10423 else if (token.type == TOKEN_ISCS) {
10424 var node = Node(NODE_ISCS);
10425 node.pos = token.pos;
10426 node.left = left;
10427 node.right = this.parse_expr5();
10428 var left = node;
10429 }
10430 else if (token.type == TOKEN_ISNOT) {
10431 var node = Node(NODE_ISNOT);
10432 node.pos = token.pos;
10433 node.left = left;
10434 node.right = this.parse_expr5();
10435 var left = node;
10436 }
10437 else if (token.type == TOKEN_ISNOTCI) {
10438 var node = Node(NODE_ISNOTCI);
10439 node.pos = token.pos;
10440 node.left = left;
10441 node.right = this.parse_expr5();
10442 var left = node;
10443 }
10444 else if (token.type == TOKEN_ISNOTCS) {
10445 var node = Node(NODE_ISNOTCS);
10446 node.pos = token.pos;
10447 node.left = left;
10448 node.right = this.parse_expr5();
10449 var left = node;
10450 }
10451 else {
10452 this.reader.seek_set(pos);
10453 }
10454 return left;
10455}
10456
10457// expr5: expr6 + expr6 ..
10458// expr6 - expr6 ..
10459// expr6 . expr6 ..
10460// expr6 .. expr6 ..
10461ExprParser.prototype.parse_expr5 = function() {
10462 var left = this.parse_expr6();
10463 while (TRUE) {
10464 var pos = this.reader.tell();
10465 var token = this.tokenizer.get();
10466 if (token.type == TOKEN_PLUS) {
10467 var node = Node(NODE_ADD);
10468 node.pos = token.pos;
10469 node.left = left;
10470 node.right = this.parse_expr6();
10471 var left = node;
10472 }
10473 else if (token.type == TOKEN_MINUS) {
10474 var node = Node(NODE_SUBTRACT);
10475 node.pos = token.pos;
10476 node.left = left;
10477 node.right = this.parse_expr6();
10478 var left = node;
10479 }
10480 else if (token.type == TOKEN_DOTDOT) {
10481 // TODO check scriptversion?
10482 var node = Node(NODE_CONCAT);
10483 node.pos = token.pos;
10484 node.left = left;
10485 node.right = this.parse_expr6();
10486 var left = node;
10487 }
10488 else if (token.type == TOKEN_DOT) {
10489 // TODO check scriptversion?
10490 var node = Node(NODE_CONCAT);
10491 node.pos = token.pos;
10492 node.left = left;
10493 node.right = this.parse_expr6();
10494 var left = node;
10495 }
10496 else {
10497 this.reader.seek_set(pos);
10498 break;
10499 }
10500 }
10501 return left;
10502}
10503
10504// expr6: expr7 * expr7 ..
10505// expr7 / expr7 ..
10506// expr7 % expr7 ..
10507ExprParser.prototype.parse_expr6 = function() {
10508 var left = this.parse_expr7();
10509 while (TRUE) {
10510 var pos = this.reader.tell();
10511 var token = this.tokenizer.get();
10512 if (token.type == TOKEN_STAR) {
10513 var node = Node(NODE_MULTIPLY);
10514 node.pos = token.pos;
10515 node.left = left;
10516 node.right = this.parse_expr7();
10517 var left = node;
10518 }
10519 else if (token.type == TOKEN_SLASH) {
10520 var node = Node(NODE_DIVIDE);
10521 node.pos = token.pos;
10522 node.left = left;
10523 node.right = this.parse_expr7();
10524 var left = node;
10525 }
10526 else if (token.type == TOKEN_PERCENT) {
10527 var node = Node(NODE_REMAINDER);
10528 node.pos = token.pos;
10529 node.left = left;
10530 node.right = this.parse_expr7();
10531 var left = node;
10532 }
10533 else {
10534 this.reader.seek_set(pos);
10535 break;
10536 }
10537 }
10538 return left;
10539}
10540
10541// expr7: ! expr7
10542// - expr7
10543// + expr7
10544ExprParser.prototype.parse_expr7 = function() {
10545 var pos = this.reader.tell();
10546 var token = this.tokenizer.get();
10547 if (token.type == TOKEN_NOT) {
10548 var node = Node(NODE_NOT);
10549 node.pos = token.pos;
10550 node.left = this.parse_expr7();
10551 return node;
10552 }
10553 else if (token.type == TOKEN_MINUS) {
10554 var node = Node(NODE_MINUS);
10555 node.pos = token.pos;
10556 node.left = this.parse_expr7();
10557 return node;
10558 }
10559 else if (token.type == TOKEN_PLUS) {
10560 var node = Node(NODE_PLUS);
10561 node.pos = token.pos;
10562 node.left = this.parse_expr7();
10563 return node;
10564 }
10565 else {
10566 this.reader.seek_set(pos);
10567 var node = this.parse_expr8();
10568 return node;
10569 }
10570}
10571
10572// expr8: expr8[expr1]
10573// expr8[expr1 : expr1]
10574// expr8.name
10575// expr8->name(expr1, ...)
10576// expr8->s:user_func(expr1, ...)
10577// expr8->{lambda}(expr1, ...)
10578// expr8(expr1, ...)
10579ExprParser.prototype.parse_expr8 = function() {
10580 var left = this.parse_expr9();
10581 while (TRUE) {
10582 var pos = this.reader.tell();
10583 var c = this.reader.peek();
10584 var token = this.tokenizer.get();
10585 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
10586 var npos = token.pos;
10587 if (this.tokenizer.peek().type == TOKEN_COLON) {
10588 this.tokenizer.get();
10589 var node = Node(NODE_SLICE);
10590 node.pos = npos;
10591 node.left = left;
10592 node.rlist = [NIL, NIL];
10593 var token = this.tokenizer.peek();
10594 if (token.type != TOKEN_SQCLOSE) {
10595 node.rlist[1] = this.parse_expr1();
10596 }
10597 var token = this.tokenizer.get();
10598 if (token.type != TOKEN_SQCLOSE) {
10599 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10600 }
10601 var left = node;
10602 }
10603 else {
10604 var right = this.parse_expr1();
10605 if (this.tokenizer.peek().type == TOKEN_COLON) {
10606 this.tokenizer.get();
10607 var node = Node(NODE_SLICE);
10608 node.pos = npos;
10609 node.left = left;
10610 node.rlist = [right, NIL];
10611 var token = this.tokenizer.peek();
10612 if (token.type != TOKEN_SQCLOSE) {
10613 node.rlist[1] = this.parse_expr1();
10614 }
10615 var token = this.tokenizer.get();
10616 if (token.type != TOKEN_SQCLOSE) {
10617 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10618 }
10619 var left = node;
10620 }
10621 else {
10622 var node = Node(NODE_SUBSCRIPT);
10623 node.pos = npos;
10624 node.left = left;
10625 node.right = right;
10626 var token = this.tokenizer.get();
10627 if (token.type != TOKEN_SQCLOSE) {
10628 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10629 }
10630 var left = node;
10631 }
10632 }
10633 delete node;
10634 }
10635 else if (token.type == TOKEN_ARROW) {
10636 var funcname_or_lambda = this.parse_expr9();
10637 var token = this.tokenizer.get();
10638 if (token.type != TOKEN_POPEN) {
10639 throw Err("E107: Missing parentheses: lambda", token.pos);
10640 }
10641 var right = Node(NODE_CALL);
10642 right.pos = token.pos;
10643 right.left = funcname_or_lambda;
10644 right.rlist = this.parse_rlist();
10645 var node = Node(NODE_METHOD);
10646 node.pos = token.pos;
10647 node.left = left;
10648 node.right = right;
10649 var left = node;
10650 delete node;
10651 }
10652 else if (token.type == TOKEN_POPEN) {
10653 var node = Node(NODE_CALL);
10654 node.pos = token.pos;
10655 node.left = left;
10656 node.rlist = this.parse_rlist();
10657 var left = node;
10658 delete node;
10659 }
10660 else if (!iswhite(c) && token.type == TOKEN_DOT) {
10661 // TODO check scriptversion?
10662 var node = this.parse_dot(token, left);
10663 if (node === NIL) {
10664 this.reader.seek_set(pos);
10665 break;
10666 }
10667 var left = node;
10668 delete node;
10669 }
10670 else {
10671 this.reader.seek_set(pos);
10672 break;
10673 }
10674 }
10675 return left;
10676}
10677
10678ExprParser.prototype.parse_rlist = function() {
10679 var rlist = [];
10680 var token = this.tokenizer.peek();
10681 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
10682 this.tokenizer.get();
10683 }
10684 else {
10685 while (TRUE) {
10686 viml_add(rlist, this.parse_expr1());
10687 var token = this.tokenizer.get();
10688 if (token.type == TOKEN_COMMA) {
10689 // XXX: Vim allows foo(a, b, ). Lint should warn it.
10690 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
10691 this.tokenizer.get();
10692 break;
10693 }
10694 }
10695 else if (token.type == TOKEN_PCLOSE) {
10696 break;
10697 }
10698 else {
10699 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10700 }
10701 }
10702 }
10703 if (viml_len(rlist) > MAX_FUNC_ARGS) {
10704 // TODO: funcname E740: Too many arguments for function: %s
10705 throw Err("E740: Too many arguments for function", token.pos);
10706 }
10707 return rlist;
10708}
10709
10710// expr9: number
10711// "string"
10712// 'string'
10713// [expr1, ...]
10714// {expr1: expr1, ...}
10715// #{literal_key1: expr1, ...}
10716// {args -> expr1}
10717// &option
10718// (expr1)
10719// variable
10720// var{ria}ble
10721// $VAR
10722// @r
10723// function(expr1, ...)
10724// func{ti}on(expr1, ...)
10725ExprParser.prototype.parse_expr9 = function() {
10726 var pos = this.reader.tell();
10727 var token = this.tokenizer.get();
10728 var node = Node(-1);
10729 if (token.type == TOKEN_NUMBER) {
10730 var node = Node(NODE_NUMBER);
10731 node.pos = token.pos;
10732 node.value = token.value;
10733 }
10734 else if (token.type == TOKEN_BLOB) {
10735 var node = Node(NODE_BLOB);
10736 node.pos = token.pos;
10737 node.value = token.value;
10738 }
10739 else if (token.type == TOKEN_DQUOTE) {
10740 this.reader.seek_set(pos);
10741 var node = Node(NODE_STRING);
10742 node.pos = token.pos;
10743 node.value = "\"" + this.tokenizer.get_dstring() + "\"";
10744 }
10745 else if (token.type == TOKEN_SQUOTE) {
10746 this.reader.seek_set(pos);
10747 var node = Node(NODE_STRING);
10748 node.pos = token.pos;
10749 node.value = "'" + this.tokenizer.get_sstring() + "'";
10750 }
10751 else if (token.type == TOKEN_SQOPEN) {
10752 var node = Node(NODE_LIST);
10753 node.pos = token.pos;
10754 node.value = [];
10755 var token = this.tokenizer.peek();
10756 if (token.type == TOKEN_SQCLOSE) {
10757 this.tokenizer.get();
10758 }
10759 else {
10760 while (TRUE) {
10761 viml_add(node.value, this.parse_expr1());
10762 var token = this.tokenizer.peek();
10763 if (token.type == TOKEN_COMMA) {
10764 this.tokenizer.get();
10765 if (this.tokenizer.peek().type == TOKEN_SQCLOSE) {
10766 this.tokenizer.get();
10767 break;
10768 }
10769 }
10770 else if (token.type == TOKEN_SQCLOSE) {
10771 this.tokenizer.get();
10772 break;
10773 }
10774 else {
10775 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10776 }
10777 }
10778 }
10779 }
10780 else if (token.type == TOKEN_COPEN || token.type == TOKEN_LITCOPEN) {
10781 var is_litdict = token.type == TOKEN_LITCOPEN;
10782 var savepos = this.reader.tell();
10783 var nodepos = token.pos;
10784 var token = this.tokenizer.get();
10785 var lambda = token.type == TOKEN_ARROW;
10786 if (!lambda && !(token.type == TOKEN_SQUOTE || token.type == TOKEN_DQUOTE)) {
10787 // if the token type is stirng, we cannot peek next token and we can
10788 // assume it's not lambda.
10789 var token2 = this.tokenizer.peek();
10790 var lambda = token2.type == TOKEN_ARROW || token2.type == TOKEN_COMMA;
10791 }
10792 // fallback to dict or {expr} if true
10793 var fallback = FALSE;
10794 if (lambda) {
10795 // lambda {token,...} {->...} {token->...}
10796 var node = Node(NODE_LAMBDA);
10797 node.pos = nodepos;
10798 node.rlist = [];
10799 var named = {};
10800 while (TRUE) {
10801 if (token.type == TOKEN_ARROW) {
10802 break;
10803 }
10804 else if (token.type == TOKEN_IDENTIFIER) {
10805 if (!isargname(token.value)) {
10806 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
10807 }
10808 else if (viml_has_key(named, token.value)) {
10809 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
10810 }
10811 named[token.value] = 1;
10812 var varnode = Node(NODE_IDENTIFIER);
10813 varnode.pos = token.pos;
10814 varnode.value = token.value;
10815 // XXX: Vim doesn't skip white space before comma. {a ,b -> ...} => E475
10816 if (iswhite(this.reader.p(0)) && this.tokenizer.peek().type == TOKEN_COMMA) {
10817 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
10818 }
10819 var token = this.tokenizer.get();
10820 viml_add(node.rlist, varnode);
10821 if (token.type == TOKEN_COMMA) {
10822 // XXX: Vim allows last comma. {a, b, -> ...} => OK
10823 var token = this.tokenizer.peek();
10824 if (token.type == TOKEN_ARROW) {
10825 this.tokenizer.get();
10826 break;
10827 }
10828 }
10829 else if (token.type == TOKEN_ARROW) {
10830 break;
10831 }
10832 else {
10833 throw Err(viml_printf("unexpected token: %s, type: %d", token.value, token.type), token.pos);
10834 }
10835 }
10836 else if (token.type == TOKEN_DOTDOTDOT) {
10837 var varnode = Node(NODE_IDENTIFIER);
10838 varnode.pos = token.pos;
10839 varnode.value = token.value;
10840 viml_add(node.rlist, varnode);
10841 var token = this.tokenizer.peek();
10842 if (token.type == TOKEN_ARROW) {
10843 this.tokenizer.get();
10844 break;
10845 }
10846 else {
10847 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10848 }
10849 }
10850 else {
10851 var fallback = TRUE;
10852 break;
10853 }
10854 var token = this.tokenizer.get();
10855 }
10856 if (!fallback) {
10857 node.left = this.parse_expr1();
10858 var token = this.tokenizer.get();
10859 if (token.type != TOKEN_CCLOSE) {
10860 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10861 }
10862 return node;
10863 }
10864 }
10865 // dict
10866 var node = Node(NODE_DICT);
10867 node.pos = nodepos;
10868 node.value = [];
10869 this.reader.seek_set(savepos);
10870 var token = this.tokenizer.peek();
10871 if (token.type == TOKEN_CCLOSE) {
10872 this.tokenizer.get();
10873 return node;
10874 }
10875 while (1) {
10876 var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
10877 var token = this.tokenizer.get();
10878 if (token.type == TOKEN_CCLOSE) {
10879 if (!viml_empty(node.value)) {
10880 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10881 }
10882 this.reader.seek_set(pos);
10883 var node = this.parse_identifier();
10884 break;
10885 }
10886 if (token.type != TOKEN_COLON) {
10887 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10888 }
10889 var val = this.parse_expr1();
10890 viml_add(node.value, [key, val]);
10891 var token = this.tokenizer.get();
10892 if (token.type == TOKEN_COMMA) {
10893 if (this.tokenizer.peek().type == TOKEN_CCLOSE) {
10894 this.tokenizer.get();
10895 break;
10896 }
10897 }
10898 else if (token.type == TOKEN_CCLOSE) {
10899 break;
10900 }
10901 else {
10902 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10903 }
10904 }
10905 return node;
10906 }
10907 else if (token.type == TOKEN_POPEN) {
10908 var node = this.parse_expr1();
10909 var token = this.tokenizer.get();
10910 if (token.type != TOKEN_PCLOSE) {
10911 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10912 }
10913 }
10914 else if (token.type == TOKEN_OPTION) {
10915 var node = Node(NODE_OPTION);
10916 node.pos = token.pos;
10917 node.value = token.value;
10918 }
10919 else if (token.type == TOKEN_IDENTIFIER) {
10920 this.reader.seek_set(pos);
10921 var node = this.parse_identifier();
10922 }
10923 else if (FALSE && (token.type == TOKEN_COLON || token.type == TOKEN_SHARP)) {
10924 // XXX: no parse error but invalid expression
10925 this.reader.seek_set(pos);
10926 var node = this.parse_identifier();
10927 }
10928 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
10929 this.reader.seek_set(pos);
10930 var node = this.parse_identifier();
10931 }
10932 else if (token.type == TOKEN_IS || token.type == TOKEN_ISCS || token.type == TOKEN_ISNOT || token.type == TOKEN_ISNOTCS) {
10933 this.reader.seek_set(pos);
10934 var node = this.parse_identifier();
10935 }
10936 else if (token.type == TOKEN_ENV) {
10937 var node = Node(NODE_ENV);
10938 node.pos = token.pos;
10939 node.value = token.value;
10940 }
10941 else if (token.type == TOKEN_REG) {
10942 var node = Node(NODE_REG);
10943 node.pos = token.pos;
10944 node.value = token.value;
10945 }
10946 else {
10947 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
10948 }
10949 return node;
10950}
10951
10952// SUBSCRIPT or CONCAT
10953// dict "." [0-9A-Za-z_]+ => (subscript dict key)
10954// str "." expr6 => (concat str expr6)
10955ExprParser.prototype.parse_dot = function(token, left) {
10956 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) {
10957 return NIL;
10958 }
10959 if (!iswordc(this.reader.p(0))) {
10960 return NIL;
10961 }
10962 var pos = this.reader.getpos();
10963 var name = this.reader.read_word();
10964 if (isnamec(this.reader.p(0))) {
10965 // XXX: foo is str => ok, foo is obj => invalid expression
10966 // foo.s:bar or foo.bar#baz
10967 return NIL;
10968 }
10969 var node = Node(NODE_DOT);
10970 node.pos = token.pos;
10971 node.left = left;
10972 node.right = Node(NODE_IDENTIFIER);
10973 node.right.pos = pos;
10974 node.right.value = name;
10975 return node;
10976}
10977
10978// CONCAT
10979// str ".." expr6 => (concat str expr6)
10980ExprParser.prototype.parse_concat = function(token, left) {
10981 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) {
10982 return NIL;
10983 }
10984 if (!iswordc(this.reader.p(0))) {
10985 return NIL;
10986 }
10987 var pos = this.reader.getpos();
10988 var name = this.reader.read_word();
10989 if (isnamec(this.reader.p(0))) {
10990 // XXX: foo is str => ok, foo is obj => invalid expression
10991 // foo.s:bar or foo.bar#baz
10992 return NIL;
10993 }
10994 var node = Node(NODE_CONCAT);
10995 node.pos = token.pos;
10996 node.left = left;
10997 node.right = Node(NODE_IDENTIFIER);
10998 node.right.pos = pos;
10999 node.right.value = name;
11000 return node;
11001}
11002
11003ExprParser.prototype.parse_identifier = function() {
11004 this.reader.skip_white();
11005 var npos = this.reader.getpos();
11006 var curly_parts = this.parse_curly_parts();
11007 if (viml_len(curly_parts) == 1 && curly_parts[0].type == NODE_CURLYNAMEPART) {
11008 var node = Node(NODE_IDENTIFIER);
11009 node.pos = npos;
11010 node.value = curly_parts[0].value;
11011 return node;
11012 }
11013 else {
11014 var node = Node(NODE_CURLYNAME);
11015 node.pos = npos;
11016 node.value = curly_parts;
11017 return node;
11018 }
11019}
11020
11021ExprParser.prototype.parse_curly_parts = function() {
11022 var curly_parts = [];
11023 var c = this.reader.peek();
11024 var pos = this.reader.getpos();
11025 if (c == "<" && viml_equalci(this.reader.peekn(5), "<SID>")) {
11026 var name = this.reader.getn(5);
11027 var node = Node(NODE_CURLYNAMEPART);
11028 node.curly = FALSE;
11029 // Keep backword compatibility for the curly attribute
11030 node.pos = pos;
11031 node.value = name;
11032 viml_add(curly_parts, node);
11033 }
11034 while (TRUE) {
11035 var c = this.reader.peek();
11036 if (isnamec(c)) {
11037 var pos = this.reader.getpos();
11038 var name = this.reader.read_name();
11039 var node = Node(NODE_CURLYNAMEPART);
11040 node.curly = FALSE;
11041 // Keep backword compatibility for the curly attribute
11042 node.pos = pos;
11043 node.value = name;
11044 viml_add(curly_parts, node);
11045 }
11046 else if (c == "{") {
11047 this.reader.get();
11048 var pos = this.reader.getpos();
11049 var node = Node(NODE_CURLYNAMEEXPR);
11050 node.curly = TRUE;
11051 // Keep backword compatibility for the curly attribute
11052 node.pos = pos;
11053 node.value = this.parse_expr1();
11054 viml_add(curly_parts, node);
11055 this.reader.skip_white();
11056 var c = this.reader.p(0);
11057 if (c != "}") {
11058 throw Err(viml_printf("unexpected token: %s", c), this.reader.getpos());
11059 }
11060 this.reader.seek_cur(1);
11061 }
11062 else {
11063 break;
11064 }
11065 }
11066 return curly_parts;
11067}
11068
11069function LvalueParser() { ExprParser.apply(this, arguments); this.__init__.apply(this, arguments); }
11070LvalueParser.prototype = Object.create(ExprParser.prototype);
11071LvalueParser.prototype.parse = function() {
11072 return this.parse_lv8();
11073}
11074
11075// expr8: expr8[expr1]
11076// expr8[expr1 : expr1]
11077// expr8.name
11078LvalueParser.prototype.parse_lv8 = function() {
11079 var left = this.parse_lv9();
11080 while (TRUE) {
11081 var pos = this.reader.tell();
11082 var c = this.reader.peek();
11083 var token = this.tokenizer.get();
11084 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11085 var npos = token.pos;
11086 var node = Node(-1);
11087 if (this.tokenizer.peek().type == TOKEN_COLON) {
11088 this.tokenizer.get();
11089 var node = Node(NODE_SLICE);
11090 node.pos = npos;
11091 node.left = left;
11092 node.rlist = [NIL, NIL];
11093 var token = this.tokenizer.peek();
11094 if (token.type != TOKEN_SQCLOSE) {
11095 node.rlist[1] = this.parse_expr1();
11096 }
11097 var token = this.tokenizer.get();
11098 if (token.type != TOKEN_SQCLOSE) {
11099 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11100 }
11101 }
11102 else {
11103 var right = this.parse_expr1();
11104 if (this.tokenizer.peek().type == TOKEN_COLON) {
11105 this.tokenizer.get();
11106 var node = Node(NODE_SLICE);
11107 node.pos = npos;
11108 node.left = left;
11109 node.rlist = [right, NIL];
11110 var token = this.tokenizer.peek();
11111 if (token.type != TOKEN_SQCLOSE) {
11112 node.rlist[1] = this.parse_expr1();
11113 }
11114 var token = this.tokenizer.get();
11115 if (token.type != TOKEN_SQCLOSE) {
11116 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11117 }
11118 }
11119 else {
11120 var node = Node(NODE_SUBSCRIPT);
11121 node.pos = npos;
11122 node.left = left;
11123 node.right = right;
11124 var token = this.tokenizer.get();
11125 if (token.type != TOKEN_SQCLOSE) {
11126 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11127 }
11128 }
11129 }
11130 var left = node;
11131 delete node;
11132 }
11133 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11134 var node = this.parse_dot(token, left);
11135 if (node === NIL) {
11136 this.reader.seek_set(pos);
11137 break;
11138 }
11139 var left = node;
11140 delete node;
11141 }
11142 else {
11143 this.reader.seek_set(pos);
11144 break;
11145 }
11146 }
11147 return left;
11148}
11149
11150// expr9: &option
11151// variable
11152// var{ria}ble
11153// $VAR
11154// @r
11155LvalueParser.prototype.parse_lv9 = function() {
11156 var pos = this.reader.tell();
11157 var token = this.tokenizer.get();
11158 var node = Node(-1);
11159 if (token.type == TOKEN_COPEN) {
11160 this.reader.seek_set(pos);
11161 var node = this.parse_identifier();
11162 }
11163 else if (token.type == TOKEN_OPTION) {
11164 var node = Node(NODE_OPTION);
11165 node.pos = token.pos;
11166 node.value = token.value;
11167 }
11168 else if (token.type == TOKEN_IDENTIFIER) {
11169 this.reader.seek_set(pos);
11170 var node = this.parse_identifier();
11171 }
11172 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
11173 this.reader.seek_set(pos);
11174 var node = this.parse_identifier();
11175 }
11176 else if (token.type == TOKEN_ENV) {
11177 var node = Node(NODE_ENV);
11178 node.pos = token.pos;
11179 node.value = token.value;
11180 }
11181 else if (token.type == TOKEN_REG) {
11182 var node = Node(NODE_REG);
11183 node.pos = token.pos;
11184 node.pos = token.pos;
11185 node.value = token.value;
11186 }
11187 else {
11188 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11189 }
11190 return node;
11191}
11192
11193function StringReader() { this.__init__.apply(this, arguments); }
11194StringReader.prototype.__init__ = function(lines) {
11195 this.buf = [];
11196 this.pos = [];
11197 var lnum = 0;
11198 var offset = 0;
11199 while (lnum < viml_len(lines)) {
11200 var col = 0;
11201 var __c7 = viml_split(lines[lnum], "\\zs");
11202 for (var __i7 = 0; __i7 < __c7.length; ++__i7) {
11203 var c = __c7[__i7];
11204 viml_add(this.buf, c);
11205 viml_add(this.pos, [lnum + 1, col + 1, offset]);
11206 col += viml_len(c);
11207 offset += viml_len(c);
11208 }
11209 while (lnum + 1 < viml_len(lines) && viml_eqregh(lines[lnum + 1], "^\\s*\\\\")) {
11210 var skip = TRUE;
11211 var col = 0;
11212 var __c8 = viml_split(lines[lnum + 1], "\\zs");
11213 for (var __i8 = 0; __i8 < __c8.length; ++__i8) {
11214 var c = __c8[__i8];
11215 if (skip) {
11216 if (c == "\\") {
11217 var skip = FALSE;
11218 }
11219 }
11220 else {
11221 viml_add(this.buf, c);
11222 viml_add(this.pos, [lnum + 2, col + 1, offset]);
11223 }
11224 col += viml_len(c);
11225 offset += viml_len(c);
11226 }
11227 lnum += 1;
11228 offset += 1;
11229 }
11230 viml_add(this.buf, "<EOL>");
11231 viml_add(this.pos, [lnum + 1, col + 1, offset]);
11232 lnum += 1;
11233 offset += 1;
11234 }
11235 // for <EOF>
11236 viml_add(this.pos, [lnum + 1, 0, offset]);
11237 this.i = 0;
11238}
11239
11240StringReader.prototype.eof = function() {
11241 return this.i >= viml_len(this.buf);
11242}
11243
11244StringReader.prototype.tell = function() {
11245 return this.i;
11246}
11247
11248StringReader.prototype.seek_set = function(i) {
11249 this.i = i;
11250}
11251
11252StringReader.prototype.seek_cur = function(i) {
11253 this.i = this.i + i;
11254}
11255
11256StringReader.prototype.seek_end = function(i) {
11257 this.i = viml_len(this.buf) + i;
11258}
11259
11260StringReader.prototype.p = function(i) {
11261 if (this.i >= viml_len(this.buf)) {
11262 return "<EOF>";
11263 }
11264 return this.buf[this.i + i];
11265}
11266
11267StringReader.prototype.peek = function() {
11268 if (this.i >= viml_len(this.buf)) {
11269 return "<EOF>";
11270 }
11271 return this.buf[this.i];
11272}
11273
11274StringReader.prototype.get = function() {
11275 if (this.i >= viml_len(this.buf)) {
11276 return "<EOF>";
11277 }
11278 this.i += 1;
11279 return this.buf[this.i - 1];
11280}
11281
11282StringReader.prototype.peekn = function(n) {
11283 var pos = this.tell();
11284 var r = this.getn(n);
11285 this.seek_set(pos);
11286 return r;
11287}
11288
11289StringReader.prototype.getn = function(n) {
11290 var r = "";
11291 var j = 0;
11292 while (this.i < viml_len(this.buf) && (n < 0 || j < n)) {
11293 var c = this.buf[this.i];
11294 if (c == "<EOL>") {
11295 break;
11296 }
11297 r += c;
11298 this.i += 1;
11299 j += 1;
11300 }
11301 return r;
11302}
11303
11304StringReader.prototype.peekline = function() {
11305 return this.peekn(-1);
11306}
11307
11308StringReader.prototype.readline = function() {
11309 var r = this.getn(-1);
11310 this.get();
11311 return r;
11312}
11313
11314StringReader.prototype.getstr = function(begin, end) {
11315 var r = "";
11316 var __c9 = viml_range(begin.i, end.i - 1);
11317 for (var __i9 = 0; __i9 < __c9.length; ++__i9) {
11318 var i = __c9[__i9];
11319 if (i >= viml_len(this.buf)) {
11320 break;
11321 }
11322 var c = this.buf[i];
11323 if (c == "<EOL>") {
11324 var c = "\n";
11325 }
11326 r += c;
11327 }
11328 return r;
11329}
11330
11331StringReader.prototype.getpos = function() {
11332 var __tmp = this.pos[this.i];
11333 var lnum = __tmp[0];
11334 var col = __tmp[1];
11335 var offset = __tmp[2];
11336 return {"i":this.i, "lnum":lnum, "col":col, "offset":offset};
11337}
11338
11339StringReader.prototype.setpos = function(pos) {
11340 this.i = pos.i;
11341}
11342
11343StringReader.prototype.read_alpha = function() {
11344 var r = "";
11345 while (isalpha(this.peekn(1))) {
11346 r += this.getn(1);
11347 }
11348 return r;
11349}
11350
11351StringReader.prototype.read_alnum = function() {
11352 var r = "";
11353 while (isalnum(this.peekn(1))) {
11354 r += this.getn(1);
11355 }
11356 return r;
11357}
11358
11359StringReader.prototype.read_digit = function() {
11360 var r = "";
11361 while (isdigit(this.peekn(1))) {
11362 r += this.getn(1);
11363 }
11364 return r;
11365}
11366
11367StringReader.prototype.read_odigit = function() {
11368 var r = "";
11369 while (isodigit(this.peekn(1))) {
11370 r += this.getn(1);
11371 }
11372 return r;
11373}
11374
11375StringReader.prototype.read_blob = function() {
11376 var r = "";
11377 while (1) {
11378 var s = this.peekn(2);
11379 if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
11380 r += this.getn(2);
11381 }
11382 else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
11383 r += this.getn(1);
11384 }
11385 else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
11386 throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
11387 }
11388 else {
11389 break;
11390 }
11391 }
11392 return r;
11393}
11394
11395StringReader.prototype.read_xdigit = function() {
11396 var r = "";
11397 while (isxdigit(this.peekn(1))) {
11398 r += this.getn(1);
11399 }
11400 return r;
11401}
11402
11403StringReader.prototype.read_bdigit = function() {
11404 var r = "";
11405 while (this.peekn(1) == "0" || this.peekn(1) == "1") {
11406 r += this.getn(1);
11407 }
11408 return r;
11409}
11410
11411StringReader.prototype.read_integer = function() {
11412 var r = "";
11413 var c = this.peekn(1);
11414 if (c == "-" || c == "+") {
11415 var r = this.getn(1);
11416 }
11417 return r + this.read_digit();
11418}
11419
11420StringReader.prototype.read_word = function() {
11421 var r = "";
11422 while (iswordc(this.peekn(1))) {
11423 r += this.getn(1);
11424 }
11425 return r;
11426}
11427
11428StringReader.prototype.read_white = function() {
11429 var r = "";
11430 while (iswhite(this.peekn(1))) {
11431 r += this.getn(1);
11432 }
11433 return r;
11434}
11435
11436StringReader.prototype.read_nonwhite = function() {
11437 var r = "";
11438 var ch = this.peekn(1);
11439 while (!iswhite(ch) && ch != "") {
11440 r += this.getn(1);
11441 var ch = this.peekn(1);
11442 }
11443 return r;
11444}
11445
11446StringReader.prototype.read_name = function() {
11447 var r = "";
11448 while (isnamec(this.peekn(1))) {
11449 r += this.getn(1);
11450 }
11451 return r;
11452}
11453
11454StringReader.prototype.skip_white = function() {
11455 while (iswhite(this.peekn(1))) {
11456 this.seek_cur(1);
11457 }
11458}
11459
11460StringReader.prototype.skip_white_and_colon = function() {
11461 while (TRUE) {
11462 var c = this.peekn(1);
11463 if (!iswhite(c) && c != ":") {
11464 break;
11465 }
11466 this.seek_cur(1);
11467 }
11468}
11469
11470function Compiler() { this.__init__.apply(this, arguments); }
11471Compiler.prototype.__init__ = function() {
11472 this.indent = [""];
11473 this.lines = [];
11474}
11475
11476Compiler.prototype.out = function() {
11477 var a000 = Array.prototype.slice.call(arguments, 0);
11478 if (viml_len(a000) == 1) {
11479 if (a000[0][0] == ")") {
11480 this.lines[this.lines.length - 1] += a000[0];
11481 }
11482 else {
11483 viml_add(this.lines, this.indent[0] + a000[0]);
11484 }
11485 }
11486 else {
11487 viml_add(this.lines, this.indent[0] + viml_printf.apply(null, a000));
11488 }
11489}
11490
11491Compiler.prototype.incindent = function(s) {
11492 viml_insert(this.indent, this.indent[0] + s);
11493}
11494
11495Compiler.prototype.decindent = function() {
11496 viml_remove(this.indent, 0);
11497}
11498
11499Compiler.prototype.compile = function(node) {
11500 if (node.type == NODE_TOPLEVEL) {
11501 return this.compile_toplevel(node);
11502 }
11503 else if (node.type == NODE_COMMENT) {
11504 this.compile_comment(node);
11505 return NIL;
11506 }
11507 else if (node.type == NODE_EXCMD) {
11508 this.compile_excmd(node);
11509 return NIL;
11510 }
11511 else if (node.type == NODE_FUNCTION) {
11512 this.compile_function(node);
11513 return NIL;
11514 }
11515 else if (node.type == NODE_DELFUNCTION) {
11516 this.compile_delfunction(node);
11517 return NIL;
11518 }
11519 else if (node.type == NODE_RETURN) {
11520 this.compile_return(node);
11521 return NIL;
11522 }
11523 else if (node.type == NODE_EXCALL) {
11524 this.compile_excall(node);
11525 return NIL;
11526 }
11527 else if (node.type == NODE_EVAL) {
11528 this.compile_eval(node);
11529 return NIL;
11530 }
11531 else if (node.type == NODE_LET) {
11532 this.compile_let(node);
11533 return NIL;
11534 }
11535 else if (node.type == NODE_CONST) {
11536 this.compile_const(node);
11537 return NIL;
11538 }
11539 else if (node.type == NODE_UNLET) {
11540 this.compile_unlet(node);
11541 return NIL;
11542 }
11543 else if (node.type == NODE_LOCKVAR) {
11544 this.compile_lockvar(node);
11545 return NIL;
11546 }
11547 else if (node.type == NODE_UNLOCKVAR) {
11548 this.compile_unlockvar(node);
11549 return NIL;
11550 }
11551 else if (node.type == NODE_IF) {
11552 this.compile_if(node);
11553 return NIL;
11554 }
11555 else if (node.type == NODE_WHILE) {
11556 this.compile_while(node);
11557 return NIL;
11558 }
11559 else if (node.type == NODE_FOR) {
11560 this.compile_for(node);
11561 return NIL;
11562 }
11563 else if (node.type == NODE_CONTINUE) {
11564 this.compile_continue(node);
11565 return NIL;
11566 }
11567 else if (node.type == NODE_BREAK) {
11568 this.compile_break(node);
11569 return NIL;
11570 }
11571 else if (node.type == NODE_TRY) {
11572 this.compile_try(node);
11573 return NIL;
11574 }
11575 else if (node.type == NODE_THROW) {
11576 this.compile_throw(node);
11577 return NIL;
11578 }
11579 else if (node.type == NODE_ECHO) {
11580 this.compile_echo(node);
11581 return NIL;
11582 }
11583 else if (node.type == NODE_ECHON) {
11584 this.compile_echon(node);
11585 return NIL;
11586 }
11587 else if (node.type == NODE_ECHOHL) {
11588 this.compile_echohl(node);
11589 return NIL;
11590 }
11591 else if (node.type == NODE_ECHOMSG) {
11592 this.compile_echomsg(node);
11593 return NIL;
11594 }
11595 else if (node.type == NODE_ECHOERR) {
11596 this.compile_echoerr(node);
11597 return NIL;
11598 }
11599 else if (node.type == NODE_EXECUTE) {
11600 this.compile_execute(node);
11601 return NIL;
11602 }
11603 else if (node.type == NODE_TERNARY) {
11604 return this.compile_ternary(node);
11605 }
11606 else if (node.type == NODE_OR) {
11607 return this.compile_or(node);
11608 }
11609 else if (node.type == NODE_AND) {
11610 return this.compile_and(node);
11611 }
11612 else if (node.type == NODE_EQUAL) {
11613 return this.compile_equal(node);
11614 }
11615 else if (node.type == NODE_EQUALCI) {
11616 return this.compile_equalci(node);
11617 }
11618 else if (node.type == NODE_EQUALCS) {
11619 return this.compile_equalcs(node);
11620 }
11621 else if (node.type == NODE_NEQUAL) {
11622 return this.compile_nequal(node);
11623 }
11624 else if (node.type == NODE_NEQUALCI) {
11625 return this.compile_nequalci(node);
11626 }
11627 else if (node.type == NODE_NEQUALCS) {
11628 return this.compile_nequalcs(node);
11629 }
11630 else if (node.type == NODE_GREATER) {
11631 return this.compile_greater(node);
11632 }
11633 else if (node.type == NODE_GREATERCI) {
11634 return this.compile_greaterci(node);
11635 }
11636 else if (node.type == NODE_GREATERCS) {
11637 return this.compile_greatercs(node);
11638 }
11639 else if (node.type == NODE_GEQUAL) {
11640 return this.compile_gequal(node);
11641 }
11642 else if (node.type == NODE_GEQUALCI) {
11643 return this.compile_gequalci(node);
11644 }
11645 else if (node.type == NODE_GEQUALCS) {
11646 return this.compile_gequalcs(node);
11647 }
11648 else if (node.type == NODE_SMALLER) {
11649 return this.compile_smaller(node);
11650 }
11651 else if (node.type == NODE_SMALLERCI) {
11652 return this.compile_smallerci(node);
11653 }
11654 else if (node.type == NODE_SMALLERCS) {
11655 return this.compile_smallercs(node);
11656 }
11657 else if (node.type == NODE_SEQUAL) {
11658 return this.compile_sequal(node);
11659 }
11660 else if (node.type == NODE_SEQUALCI) {
11661 return this.compile_sequalci(node);
11662 }
11663 else if (node.type == NODE_SEQUALCS) {
11664 return this.compile_sequalcs(node);
11665 }
11666 else if (node.type == NODE_MATCH) {
11667 return this.compile_match(node);
11668 }
11669 else if (node.type == NODE_MATCHCI) {
11670 return this.compile_matchci(node);
11671 }
11672 else if (node.type == NODE_MATCHCS) {
11673 return this.compile_matchcs(node);
11674 }
11675 else if (node.type == NODE_NOMATCH) {
11676 return this.compile_nomatch(node);
11677 }
11678 else if (node.type == NODE_NOMATCHCI) {
11679 return this.compile_nomatchci(node);
11680 }
11681 else if (node.type == NODE_NOMATCHCS) {
11682 return this.compile_nomatchcs(node);
11683 }
11684 else if (node.type == NODE_IS) {
11685 return this.compile_is(node);
11686 }
11687 else if (node.type == NODE_ISCI) {
11688 return this.compile_isci(node);
11689 }
11690 else if (node.type == NODE_ISCS) {
11691 return this.compile_iscs(node);
11692 }
11693 else if (node.type == NODE_ISNOT) {
11694 return this.compile_isnot(node);
11695 }
11696 else if (node.type == NODE_ISNOTCI) {
11697 return this.compile_isnotci(node);
11698 }
11699 else if (node.type == NODE_ISNOTCS) {
11700 return this.compile_isnotcs(node);
11701 }
11702 else if (node.type == NODE_ADD) {
11703 return this.compile_add(node);
11704 }
11705 else if (node.type == NODE_SUBTRACT) {
11706 return this.compile_subtract(node);
11707 }
11708 else if (node.type == NODE_CONCAT) {
11709 return this.compile_concat(node);
11710 }
11711 else if (node.type == NODE_MULTIPLY) {
11712 return this.compile_multiply(node);
11713 }
11714 else if (node.type == NODE_DIVIDE) {
11715 return this.compile_divide(node);
11716 }
11717 else if (node.type == NODE_REMAINDER) {
11718 return this.compile_remainder(node);
11719 }
11720 else if (node.type == NODE_NOT) {
11721 return this.compile_not(node);
11722 }
11723 else if (node.type == NODE_PLUS) {
11724 return this.compile_plus(node);
11725 }
11726 else if (node.type == NODE_MINUS) {
11727 return this.compile_minus(node);
11728 }
11729 else if (node.type == NODE_SUBSCRIPT) {
11730 return this.compile_subscript(node);
11731 }
11732 else if (node.type == NODE_SLICE) {
11733 return this.compile_slice(node);
11734 }
11735 else if (node.type == NODE_DOT) {
11736 return this.compile_dot(node);
11737 }
11738 else if (node.type == NODE_METHOD) {
11739 return this.compile_method(node);
11740 }
11741 else if (node.type == NODE_CALL) {
11742 return this.compile_call(node);
11743 }
11744 else if (node.type == NODE_NUMBER) {
11745 return this.compile_number(node);
11746 }
11747 else if (node.type == NODE_BLOB) {
11748 return this.compile_blob(node);
11749 }
11750 else if (node.type == NODE_STRING) {
11751 return this.compile_string(node);
11752 }
11753 else if (node.type == NODE_LIST) {
11754 return this.compile_list(node);
11755 }
11756 else if (node.type == NODE_DICT) {
11757 return this.compile_dict(node);
11758 }
11759 else if (node.type == NODE_OPTION) {
11760 return this.compile_option(node);
11761 }
11762 else if (node.type == NODE_IDENTIFIER) {
11763 return this.compile_identifier(node);
11764 }
11765 else if (node.type == NODE_CURLYNAME) {
11766 return this.compile_curlyname(node);
11767 }
11768 else if (node.type == NODE_ENV) {
11769 return this.compile_env(node);
11770 }
11771 else if (node.type == NODE_REG) {
11772 return this.compile_reg(node);
11773 }
11774 else if (node.type == NODE_CURLYNAMEPART) {
11775 return this.compile_curlynamepart(node);
11776 }
11777 else if (node.type == NODE_CURLYNAMEEXPR) {
11778 return this.compile_curlynameexpr(node);
11779 }
11780 else if (node.type == NODE_LAMBDA) {
11781 return this.compile_lambda(node);
11782 }
11783 else if (node.type == NODE_HEREDOC) {
11784 return this.compile_heredoc(node);
11785 }
11786 else {
11787 throw viml_printf("Compiler: unknown node: %s", viml_string(node));
11788 }
11789 return NIL;
11790}
11791
11792Compiler.prototype.compile_body = function(body) {
11793 var __c10 = body;
11794 for (var __i10 = 0; __i10 < __c10.length; ++__i10) {
11795 var node = __c10[__i10];
11796 this.compile(node);
11797 }
11798}
11799
11800Compiler.prototype.compile_toplevel = function(node) {
11801 this.compile_body(node.body);
11802 return this.lines;
11803}
11804
11805Compiler.prototype.compile_comment = function(node) {
11806 this.out(";%s", node.str);
11807}
11808
11809Compiler.prototype.compile_excmd = function(node) {
11810 this.out("(excmd \"%s\")", viml_escape(node.str, "\\\""));
11811}
11812
11813Compiler.prototype.compile_function = function(node) {
11814 var left = this.compile(node.left);
11815 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
11816 var default_args = node.default_args.map((function(vval) { return this.compile(vval); }).bind(this));
11817 if (!viml_empty(rlist)) {
11818 var remaining = FALSE;
11819 if (rlist[rlist.length - 1] == "...") {
11820 viml_remove(rlist, -1);
11821 var remaining = TRUE;
11822 }
11823 var __c11 = viml_range(viml_len(rlist));
11824 for (var __i11 = 0; __i11 < __c11.length; ++__i11) {
11825 var i = __c11[__i11];
11826 if (i < viml_len(rlist) - viml_len(default_args)) {
11827 left += viml_printf(" %s", rlist[i]);
11828 }
11829 else {
11830 left += viml_printf(" (%s %s)", rlist[i], default_args[i + viml_len(default_args) - viml_len(rlist)]);
11831 }
11832 }
11833 if (remaining) {
11834 left += " . ...";
11835 }
11836 }
11837 this.out("(function (%s)", left);
11838 this.incindent(" ");
11839 this.compile_body(node.body);
11840 this.out(")");
11841 this.decindent();
11842}
11843
11844Compiler.prototype.compile_delfunction = function(node) {
11845 this.out("(delfunction %s)", this.compile(node.left));
11846}
11847
11848Compiler.prototype.compile_return = function(node) {
11849 if (node.left === NIL) {
11850 this.out("(return)");
11851 }
11852 else {
11853 this.out("(return %s)", this.compile(node.left));
11854 }
11855}
11856
11857Compiler.prototype.compile_excall = function(node) {
11858 this.out("(call %s)", this.compile(node.left));
11859}
11860
11861Compiler.prototype.compile_eval = function(node) {
11862 this.out("(eval %s)", this.compile(node.left));
11863}
11864
11865Compiler.prototype.compile_let = function(node) {
11866 var left = "";
11867 if (node.left !== NIL) {
11868 var left = this.compile(node.left);
11869 }
11870 else {
11871 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
11872 if (node.rest !== NIL) {
11873 left += " . " + this.compile(node.rest);
11874 }
11875 var left = "(" + left + ")";
11876 }
11877 var right = this.compile(node.right);
11878 this.out("(let %s %s %s)", node.op, left, right);
11879}
11880
11881// TODO: merge with s:Compiler.compile_let() ?
11882Compiler.prototype.compile_const = function(node) {
11883 var left = "";
11884 if (node.left !== NIL) {
11885 var left = this.compile(node.left);
11886 }
11887 else {
11888 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
11889 if (node.rest !== NIL) {
11890 left += " . " + this.compile(node.rest);
11891 }
11892 var left = "(" + left + ")";
11893 }
11894 var right = this.compile(node.right);
11895 this.out("(const %s %s %s)", node.op, left, right);
11896}
11897
11898Compiler.prototype.compile_unlet = function(node) {
11899 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
11900 this.out("(unlet %s)", viml_join(list, " "));
11901}
11902
11903Compiler.prototype.compile_lockvar = function(node) {
11904 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
11905 if (node.depth === NIL) {
11906 this.out("(lockvar %s)", viml_join(list, " "));
11907 }
11908 else {
11909 this.out("(lockvar %s %s)", node.depth, viml_join(list, " "));
11910 }
11911}
11912
11913Compiler.prototype.compile_unlockvar = function(node) {
11914 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
11915 if (node.depth === NIL) {
11916 this.out("(unlockvar %s)", viml_join(list, " "));
11917 }
11918 else {
11919 this.out("(unlockvar %s %s)", node.depth, viml_join(list, " "));
11920 }
11921}
11922
11923Compiler.prototype.compile_if = function(node) {
11924 this.out("(if %s", this.compile(node.cond));
11925 this.incindent(" ");
11926 this.compile_body(node.body);
11927 this.decindent();
11928 var __c12 = node.elseif;
11929 for (var __i12 = 0; __i12 < __c12.length; ++__i12) {
11930 var enode = __c12[__i12];
11931 this.out(" elseif %s", this.compile(enode.cond));
11932 this.incindent(" ");
11933 this.compile_body(enode.body);
11934 this.decindent();
11935 }
11936 if (node._else !== NIL) {
11937 this.out(" else");
11938 this.incindent(" ");
11939 this.compile_body(node._else.body);
11940 this.decindent();
11941 }
11942 this.incindent(" ");
11943 this.out(")");
11944 this.decindent();
11945}
11946
11947Compiler.prototype.compile_while = function(node) {
11948 this.out("(while %s", this.compile(node.cond));
11949 this.incindent(" ");
11950 this.compile_body(node.body);
11951 this.out(")");
11952 this.decindent();
11953}
11954
11955Compiler.prototype.compile_for = function(node) {
11956 var left = "";
11957 if (node.left !== NIL) {
11958 var left = this.compile(node.left);
11959 }
11960 else {
11961 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
11962 if (node.rest !== NIL) {
11963 left += " . " + this.compile(node.rest);
11964 }
11965 var left = "(" + left + ")";
11966 }
11967 var right = this.compile(node.right);
11968 this.out("(for %s %s", left, right);
11969 this.incindent(" ");
11970 this.compile_body(node.body);
11971 this.out(")");
11972 this.decindent();
11973}
11974
11975Compiler.prototype.compile_continue = function(node) {
11976 this.out("(continue)");
11977}
11978
11979Compiler.prototype.compile_break = function(node) {
11980 this.out("(break)");
11981}
11982
11983Compiler.prototype.compile_try = function(node) {
11984 this.out("(try");
11985 this.incindent(" ");
11986 this.compile_body(node.body);
11987 var __c13 = node.catch;
11988 for (var __i13 = 0; __i13 < __c13.length; ++__i13) {
11989 var cnode = __c13[__i13];
11990 if (cnode.pattern !== NIL) {
11991 this.decindent();
11992 this.out(" catch /%s/", cnode.pattern);
11993 this.incindent(" ");
11994 this.compile_body(cnode.body);
11995 }
11996 else {
11997 this.decindent();
11998 this.out(" catch");
11999 this.incindent(" ");
12000 this.compile_body(cnode.body);
12001 }
12002 }
12003 if (node._finally !== NIL) {
12004 this.decindent();
12005 this.out(" finally");
12006 this.incindent(" ");
12007 this.compile_body(node._finally.body);
12008 }
12009 this.out(")");
12010 this.decindent();
12011}
12012
12013Compiler.prototype.compile_throw = function(node) {
12014 this.out("(throw %s)", this.compile(node.left));
12015}
12016
12017Compiler.prototype.compile_echo = function(node) {
12018 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12019 this.out("(echo %s)", viml_join(list, " "));
12020}
12021
12022Compiler.prototype.compile_echon = function(node) {
12023 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12024 this.out("(echon %s)", viml_join(list, " "));
12025}
12026
12027Compiler.prototype.compile_echohl = function(node) {
12028 this.out("(echohl \"%s\")", viml_escape(node.str, "\\\""));
12029}
12030
12031Compiler.prototype.compile_echomsg = function(node) {
12032 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12033 this.out("(echomsg %s)", viml_join(list, " "));
12034}
12035
12036Compiler.prototype.compile_echoerr = function(node) {
12037 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12038 this.out("(echoerr %s)", viml_join(list, " "));
12039}
12040
12041Compiler.prototype.compile_execute = function(node) {
12042 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12043 this.out("(execute %s)", viml_join(list, " "));
12044}
12045
12046Compiler.prototype.compile_ternary = function(node) {
12047 return viml_printf("(?: %s %s %s)", this.compile(node.cond), this.compile(node.left), this.compile(node.right));
12048}
12049
12050Compiler.prototype.compile_or = function(node) {
12051 return viml_printf("(|| %s %s)", this.compile(node.left), this.compile(node.right));
12052}
12053
12054Compiler.prototype.compile_and = function(node) {
12055 return viml_printf("(&& %s %s)", this.compile(node.left), this.compile(node.right));
12056}
12057
12058Compiler.prototype.compile_equal = function(node) {
12059 return viml_printf("(== %s %s)", this.compile(node.left), this.compile(node.right));
12060}
12061
12062Compiler.prototype.compile_equalci = function(node) {
12063 return viml_printf("(==? %s %s)", this.compile(node.left), this.compile(node.right));
12064}
12065
12066Compiler.prototype.compile_equalcs = function(node) {
12067 return viml_printf("(==# %s %s)", this.compile(node.left), this.compile(node.right));
12068}
12069
12070Compiler.prototype.compile_nequal = function(node) {
12071 return viml_printf("(!= %s %s)", this.compile(node.left), this.compile(node.right));
12072}
12073
12074Compiler.prototype.compile_nequalci = function(node) {
12075 return viml_printf("(!=? %s %s)", this.compile(node.left), this.compile(node.right));
12076}
12077
12078Compiler.prototype.compile_nequalcs = function(node) {
12079 return viml_printf("(!=# %s %s)", this.compile(node.left), this.compile(node.right));
12080}
12081
12082Compiler.prototype.compile_greater = function(node) {
12083 return viml_printf("(> %s %s)", this.compile(node.left), this.compile(node.right));
12084}
12085
12086Compiler.prototype.compile_greaterci = function(node) {
12087 return viml_printf("(>? %s %s)", this.compile(node.left), this.compile(node.right));
12088}
12089
12090Compiler.prototype.compile_greatercs = function(node) {
12091 return viml_printf("(># %s %s)", this.compile(node.left), this.compile(node.right));
12092}
12093
12094Compiler.prototype.compile_gequal = function(node) {
12095 return viml_printf("(>= %s %s)", this.compile(node.left), this.compile(node.right));
12096}
12097
12098Compiler.prototype.compile_gequalci = function(node) {
12099 return viml_printf("(>=? %s %s)", this.compile(node.left), this.compile(node.right));
12100}
12101
12102Compiler.prototype.compile_gequalcs = function(node) {
12103 return viml_printf("(>=# %s %s)", this.compile(node.left), this.compile(node.right));
12104}
12105
12106Compiler.prototype.compile_smaller = function(node) {
12107 return viml_printf("(< %s %s)", this.compile(node.left), this.compile(node.right));
12108}
12109
12110Compiler.prototype.compile_smallerci = function(node) {
12111 return viml_printf("(<? %s %s)", this.compile(node.left), this.compile(node.right));
12112}
12113
12114Compiler.prototype.compile_smallercs = function(node) {
12115 return viml_printf("(<# %s %s)", this.compile(node.left), this.compile(node.right));
12116}
12117
12118Compiler.prototype.compile_sequal = function(node) {
12119 return viml_printf("(<= %s %s)", this.compile(node.left), this.compile(node.right));
12120}
12121
12122Compiler.prototype.compile_sequalci = function(node) {
12123 return viml_printf("(<=? %s %s)", this.compile(node.left), this.compile(node.right));
12124}
12125
12126Compiler.prototype.compile_sequalcs = function(node) {
12127 return viml_printf("(<=# %s %s)", this.compile(node.left), this.compile(node.right));
12128}
12129
12130Compiler.prototype.compile_match = function(node) {
12131 return viml_printf("(=~ %s %s)", this.compile(node.left), this.compile(node.right));
12132}
12133
12134Compiler.prototype.compile_matchci = function(node) {
12135 return viml_printf("(=~? %s %s)", this.compile(node.left), this.compile(node.right));
12136}
12137
12138Compiler.prototype.compile_matchcs = function(node) {
12139 return viml_printf("(=~# %s %s)", this.compile(node.left), this.compile(node.right));
12140}
12141
12142Compiler.prototype.compile_nomatch = function(node) {
12143 return viml_printf("(!~ %s %s)", this.compile(node.left), this.compile(node.right));
12144}
12145
12146Compiler.prototype.compile_nomatchci = function(node) {
12147 return viml_printf("(!~? %s %s)", this.compile(node.left), this.compile(node.right));
12148}
12149
12150Compiler.prototype.compile_nomatchcs = function(node) {
12151 return viml_printf("(!~# %s %s)", this.compile(node.left), this.compile(node.right));
12152}
12153
12154Compiler.prototype.compile_is = function(node) {
12155 return viml_printf("(is %s %s)", this.compile(node.left), this.compile(node.right));
12156}
12157
12158Compiler.prototype.compile_isci = function(node) {
12159 return viml_printf("(is? %s %s)", this.compile(node.left), this.compile(node.right));
12160}
12161
12162Compiler.prototype.compile_iscs = function(node) {
12163 return viml_printf("(is# %s %s)", this.compile(node.left), this.compile(node.right));
12164}
12165
12166Compiler.prototype.compile_isnot = function(node) {
12167 return viml_printf("(isnot %s %s)", this.compile(node.left), this.compile(node.right));
12168}
12169
12170Compiler.prototype.compile_isnotci = function(node) {
12171 return viml_printf("(isnot? %s %s)", this.compile(node.left), this.compile(node.right));
12172}
12173
12174Compiler.prototype.compile_isnotcs = function(node) {
12175 return viml_printf("(isnot# %s %s)", this.compile(node.left), this.compile(node.right));
12176}
12177
12178Compiler.prototype.compile_add = function(node) {
12179 return viml_printf("(+ %s %s)", this.compile(node.left), this.compile(node.right));
12180}
12181
12182Compiler.prototype.compile_subtract = function(node) {
12183 return viml_printf("(- %s %s)", this.compile(node.left), this.compile(node.right));
12184}
12185
12186Compiler.prototype.compile_concat = function(node) {
12187 return viml_printf("(concat %s %s)", this.compile(node.left), this.compile(node.right));
12188}
12189
12190Compiler.prototype.compile_multiply = function(node) {
12191 return viml_printf("(* %s %s)", this.compile(node.left), this.compile(node.right));
12192}
12193
12194Compiler.prototype.compile_divide = function(node) {
12195 return viml_printf("(/ %s %s)", this.compile(node.left), this.compile(node.right));
12196}
12197
12198Compiler.prototype.compile_remainder = function(node) {
12199 return viml_printf("(%% %s %s)", this.compile(node.left), this.compile(node.right));
12200}
12201
12202Compiler.prototype.compile_not = function(node) {
12203 return viml_printf("(! %s)", this.compile(node.left));
12204}
12205
12206Compiler.prototype.compile_plus = function(node) {
12207 return viml_printf("(+ %s)", this.compile(node.left));
12208}
12209
12210Compiler.prototype.compile_minus = function(node) {
12211 return viml_printf("(- %s)", this.compile(node.left));
12212}
12213
12214Compiler.prototype.compile_subscript = function(node) {
12215 return viml_printf("(subscript %s %s)", this.compile(node.left), this.compile(node.right));
12216}
12217
12218Compiler.prototype.compile_slice = function(node) {
12219 var r0 = node.rlist[0] === NIL ? "nil" : this.compile(node.rlist[0]);
12220 var r1 = node.rlist[1] === NIL ? "nil" : this.compile(node.rlist[1]);
12221 return viml_printf("(slice %s %s %s)", this.compile(node.left), r0, r1);
12222}
12223
12224Compiler.prototype.compile_dot = function(node) {
12225 return viml_printf("(dot %s %s)", this.compile(node.left), this.compile(node.right));
12226}
12227
12228Compiler.prototype.compile_method = function(node) {
12229 return viml_printf("(method %s %s)", this.compile(node.left), this.compile(node.right));
12230}
12231
12232Compiler.prototype.compile_call = function(node) {
12233 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
12234 if (viml_empty(rlist)) {
12235 return viml_printf("(%s)", this.compile(node.left));
12236 }
12237 else {
12238 return viml_printf("(%s %s)", this.compile(node.left), viml_join(rlist, " "));
12239 }
12240}
12241
12242Compiler.prototype.compile_number = function(node) {
12243 return node.value;
12244}
12245
12246Compiler.prototype.compile_blob = function(node) {
12247 return node.value;
12248}
12249
12250Compiler.prototype.compile_string = function(node) {
12251 return node.value;
12252}
12253
12254Compiler.prototype.compile_list = function(node) {
12255 var value = node.value.map((function(vval) { return this.compile(vval); }).bind(this));
12256 if (viml_empty(value)) {
12257 return "(list)";
12258 }
12259 else {
12260 return viml_printf("(list %s)", viml_join(value, " "));
12261 }
12262}
12263
12264Compiler.prototype.compile_dict = function(node) {
12265 var value = node.value.map((function(vval) { return "(" + this.compile(vval[0]) + " " + this.compile(vval[1]) + ")"; }).bind(this));
12266 if (viml_empty(value)) {
12267 return "(dict)";
12268 }
12269 else {
12270 return viml_printf("(dict %s)", viml_join(value, " "));
12271 }
12272}
12273
12274Compiler.prototype.compile_option = function(node) {
12275 return node.value;
12276}
12277
12278Compiler.prototype.compile_identifier = function(node) {
12279 return node.value;
12280}
12281
12282Compiler.prototype.compile_curlyname = function(node) {
12283 return viml_join(node.value.map((function(vval) { return this.compile(vval); }).bind(this)), "");
12284}
12285
12286Compiler.prototype.compile_env = function(node) {
12287 return node.value;
12288}
12289
12290Compiler.prototype.compile_reg = function(node) {
12291 return node.value;
12292}
12293
12294Compiler.prototype.compile_curlynamepart = function(node) {
12295 return node.value;
12296}
12297
12298Compiler.prototype.compile_curlynameexpr = function(node) {
12299 return "{" + this.compile(node.value) + "}";
12300}
12301
12302Compiler.prototype.escape_string = function(str) {
12303 var m = {"\n":"\\n", "\t":"\\t", "\r":"\\r"};
12304 var out = "\"";
12305 var __c14 = viml_range(viml_len(str));
12306 for (var __i14 = 0; __i14 < __c14.length; ++__i14) {
12307 var i = __c14[__i14];
12308 var c = str[i];
12309 if (viml_has_key(m, c)) {
12310 out += m[c];
12311 }
12312 else {
12313 out += c;
12314 }
12315 }
12316 out += "\"";
12317 return out;
12318}
12319
12320Compiler.prototype.compile_lambda = function(node) {
12321 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
12322 return viml_printf("(lambda (%s) %s)", viml_join(rlist, " "), this.compile(node.left));
12323}
12324
12325Compiler.prototype.compile_heredoc = function(node) {
12326 if (viml_empty(node.rlist)) {
12327 var rlist = "(list)";
12328 }
12329 else {
12330 var rlist = "(list " + viml_join(node.rlist.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
12331 }
12332 if (viml_empty(node.body)) {
12333 var body = "(list)";
12334 }
12335 else {
12336 var body = "(list " + viml_join(node.body.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
12337 }
12338 var op = this.escape_string(node.op);
12339 return viml_printf("(heredoc %s %s %s)", rlist, op, body);
12340}
12341
12342// TODO: under construction
12343function RegexpParser() { this.__init__.apply(this, arguments); }
12344RegexpParser.prototype.RE_VERY_NOMAGIC = 1;
12345RegexpParser.prototype.RE_NOMAGIC = 2;
12346RegexpParser.prototype.RE_MAGIC = 3;
12347RegexpParser.prototype.RE_VERY_MAGIC = 4;
12348RegexpParser.prototype.__init__ = function(reader, cmd, delim) {
12349 this.reader = reader;
12350 this.cmd = cmd;
12351 this.delim = delim;
12352 this.reg_magic = this.RE_MAGIC;
12353}
12354
12355RegexpParser.prototype.isend = function(c) {
12356 return c == "<EOF>" || c == "<EOL>" || c == this.delim;
12357}
12358
12359RegexpParser.prototype.parse_regexp = function() {
12360 var prevtoken = "";
12361 var ntoken = "";
12362 var ret = [];
12363 if (this.reader.peekn(4) == "\\%#=") {
12364 var epos = this.reader.getpos();
12365 var token = this.reader.getn(5);
12366 if (token != "\\%#=0" && token != "\\%#=1" && token != "\\%#=2") {
12367 throw Err("E864: \\%#= can only be followed by 0, 1, or 2", epos);
12368 }
12369 viml_add(ret, token);
12370 }
12371 while (!this.isend(this.reader.peek())) {
12372 var prevtoken = ntoken;
12373 var __tmp = this.get_token();
12374 var token = __tmp[0];
12375 var ntoken = __tmp[1];
12376 if (ntoken == "\\m") {
12377 this.reg_magic = this.RE_MAGIC;
12378 }
12379 else if (ntoken == "\\M") {
12380 this.reg_magic = this.RE_NOMAGIC;
12381 }
12382 else if (ntoken == "\\v") {
12383 this.reg_magic = this.RE_VERY_MAGIC;
12384 }
12385 else if (ntoken == "\\V") {
12386 this.reg_magic = this.RE_VERY_NOMAGIC;
12387 }
12388 else if (ntoken == "\\*") {
12389 // '*' is not magic as the very first character.
12390 if (prevtoken == "" || prevtoken == "\\^" || prevtoken == "\\&" || prevtoken == "\\|" || prevtoken == "\\(") {
12391 var ntoken = "*";
12392 }
12393 }
12394 else if (ntoken == "\\^") {
12395 // '^' is only magic as the very first character.
12396 if (this.reg_magic != this.RE_VERY_MAGIC && prevtoken != "" && prevtoken != "\\&" && prevtoken != "\\|" && prevtoken != "\\n" && prevtoken != "\\(" && prevtoken != "\\%(") {
12397 var ntoken = "^";
12398 }
12399 }
12400 else if (ntoken == "\\$") {
12401 // '$' is only magic as the very last character
12402 var pos = this.reader.tell();
12403 if (this.reg_magic != this.RE_VERY_MAGIC) {
12404 while (!this.isend(this.reader.peek())) {
12405 var __tmp = this.get_token();
12406 var t = __tmp[0];
12407 var n = __tmp[1];
12408 // XXX: Vim doesn't check \v and \V?
12409 if (n == "\\c" || n == "\\C" || n == "\\m" || n == "\\M" || n == "\\Z") {
12410 continue;
12411 }
12412 if (n != "\\|" && n != "\\&" && n != "\\n" && n != "\\)") {
12413 var ntoken = "$";
12414 }
12415 break;
12416 }
12417 }
12418 this.reader.seek_set(pos);
12419 }
12420 else if (ntoken == "\\?") {
12421 // '?' is literal in '?' command.
12422 if (this.cmd == "?") {
12423 var ntoken = "?";
12424 }
12425 }
12426 viml_add(ret, ntoken);
12427 }
12428 return ret;
12429}
12430
12431// @return [actual_token, normalized_token]
12432RegexpParser.prototype.get_token = function() {
12433 if (this.reg_magic == this.RE_VERY_MAGIC) {
12434 return this.get_token_very_magic();
12435 }
12436 else if (this.reg_magic == this.RE_MAGIC) {
12437 return this.get_token_magic();
12438 }
12439 else if (this.reg_magic == this.RE_NOMAGIC) {
12440 return this.get_token_nomagic();
12441 }
12442 else if (this.reg_magic == this.RE_VERY_NOMAGIC) {
12443 return this.get_token_very_nomagic();
12444 }
12445}
12446
12447RegexpParser.prototype.get_token_very_magic = function() {
12448 if (this.isend(this.reader.peek())) {
12449 return ["<END>", "<END>"];
12450 }
12451 var c = this.reader.get();
12452 if (c == "\\") {
12453 return this.get_token_backslash_common();
12454 }
12455 else if (c == "*") {
12456 return ["*", "\\*"];
12457 }
12458 else if (c == "+") {
12459 return ["+", "\\+"];
12460 }
12461 else if (c == "=") {
12462 return ["=", "\\="];
12463 }
12464 else if (c == "?") {
12465 return ["?", "\\?"];
12466 }
12467 else if (c == "{") {
12468 return this.get_token_brace("{");
12469 }
12470 else if (c == "@") {
12471 return this.get_token_at("@");
12472 }
12473 else if (c == "^") {
12474 return ["^", "\\^"];
12475 }
12476 else if (c == "$") {
12477 return ["$", "\\$"];
12478 }
12479 else if (c == ".") {
12480 return [".", "\\."];
12481 }
12482 else if (c == "<") {
12483 return ["<", "\\<"];
12484 }
12485 else if (c == ">") {
12486 return [">", "\\>"];
12487 }
12488 else if (c == "%") {
12489 return this.get_token_percent("%");
12490 }
12491 else if (c == "[") {
12492 return this.get_token_sq("[");
12493 }
12494 else if (c == "~") {
12495 return ["~", "\\~"];
12496 }
12497 else if (c == "|") {
12498 return ["|", "\\|"];
12499 }
12500 else if (c == "&") {
12501 return ["&", "\\&"];
12502 }
12503 else if (c == "(") {
12504 return ["(", "\\("];
12505 }
12506 else if (c == ")") {
12507 return [")", "\\)"];
12508 }
12509 return [c, c];
12510}
12511
12512RegexpParser.prototype.get_token_magic = function() {
12513 if (this.isend(this.reader.peek())) {
12514 return ["<END>", "<END>"];
12515 }
12516 var c = this.reader.get();
12517 if (c == "\\") {
12518 var pos = this.reader.tell();
12519 var c = this.reader.get();
12520 if (c == "+") {
12521 return ["\\+", "\\+"];
12522 }
12523 else if (c == "=") {
12524 return ["\\=", "\\="];
12525 }
12526 else if (c == "?") {
12527 return ["\\?", "\\?"];
12528 }
12529 else if (c == "{") {
12530 return this.get_token_brace("\\{");
12531 }
12532 else if (c == "@") {
12533 return this.get_token_at("\\@");
12534 }
12535 else if (c == "<") {
12536 return ["\\<", "\\<"];
12537 }
12538 else if (c == ">") {
12539 return ["\\>", "\\>"];
12540 }
12541 else if (c == "%") {
12542 return this.get_token_percent("\\%");
12543 }
12544 else if (c == "|") {
12545 return ["\\|", "\\|"];
12546 }
12547 else if (c == "&") {
12548 return ["\\&", "\\&"];
12549 }
12550 else if (c == "(") {
12551 return ["\\(", "\\("];
12552 }
12553 else if (c == ")") {
12554 return ["\\)", "\\)"];
12555 }
12556 this.reader.seek_set(pos);
12557 return this.get_token_backslash_common();
12558 }
12559 else if (c == "*") {
12560 return ["*", "\\*"];
12561 }
12562 else if (c == "^") {
12563 return ["^", "\\^"];
12564 }
12565 else if (c == "$") {
12566 return ["$", "\\$"];
12567 }
12568 else if (c == ".") {
12569 return [".", "\\."];
12570 }
12571 else if (c == "[") {
12572 return this.get_token_sq("[");
12573 }
12574 else if (c == "~") {
12575 return ["~", "\\~"];
12576 }
12577 return [c, c];
12578}
12579
12580RegexpParser.prototype.get_token_nomagic = function() {
12581 if (this.isend(this.reader.peek())) {
12582 return ["<END>", "<END>"];
12583 }
12584 var c = this.reader.get();
12585 if (c == "\\") {
12586 var pos = this.reader.tell();
12587 var c = this.reader.get();
12588 if (c == "*") {
12589 return ["\\*", "\\*"];
12590 }
12591 else if (c == "+") {
12592 return ["\\+", "\\+"];
12593 }
12594 else if (c == "=") {
12595 return ["\\=", "\\="];
12596 }
12597 else if (c == "?") {
12598 return ["\\?", "\\?"];
12599 }
12600 else if (c == "{") {
12601 return this.get_token_brace("\\{");
12602 }
12603 else if (c == "@") {
12604 return this.get_token_at("\\@");
12605 }
12606 else if (c == ".") {
12607 return ["\\.", "\\."];
12608 }
12609 else if (c == "<") {
12610 return ["\\<", "\\<"];
12611 }
12612 else if (c == ">") {
12613 return ["\\>", "\\>"];
12614 }
12615 else if (c == "%") {
12616 return this.get_token_percent("\\%");
12617 }
12618 else if (c == "~") {
12619 return ["\\~", "\\^"];
12620 }
12621 else if (c == "[") {
12622 return this.get_token_sq("\\[");
12623 }
12624 else if (c == "|") {
12625 return ["\\|", "\\|"];
12626 }
12627 else if (c == "&") {
12628 return ["\\&", "\\&"];
12629 }
12630 else if (c == "(") {
12631 return ["\\(", "\\("];
12632 }
12633 else if (c == ")") {
12634 return ["\\)", "\\)"];
12635 }
12636 this.reader.seek_set(pos);
12637 return this.get_token_backslash_common();
12638 }
12639 else if (c == "^") {
12640 return ["^", "\\^"];
12641 }
12642 else if (c == "$") {
12643 return ["$", "\\$"];
12644 }
12645 return [c, c];
12646}
12647
12648RegexpParser.prototype.get_token_very_nomagic = function() {
12649 if (this.isend(this.reader.peek())) {
12650 return ["<END>", "<END>"];
12651 }
12652 var c = this.reader.get();
12653 if (c == "\\") {
12654 var pos = this.reader.tell();
12655 var c = this.reader.get();
12656 if (c == "*") {
12657 return ["\\*", "\\*"];
12658 }
12659 else if (c == "+") {
12660 return ["\\+", "\\+"];
12661 }
12662 else if (c == "=") {
12663 return ["\\=", "\\="];
12664 }
12665 else if (c == "?") {
12666 return ["\\?", "\\?"];
12667 }
12668 else if (c == "{") {
12669 return this.get_token_brace("\\{");
12670 }
12671 else if (c == "@") {
12672 return this.get_token_at("\\@");
12673 }
12674 else if (c == "^") {
12675 return ["\\^", "\\^"];
12676 }
12677 else if (c == "$") {
12678 return ["\\$", "\\$"];
12679 }
12680 else if (c == "<") {
12681 return ["\\<", "\\<"];
12682 }
12683 else if (c == ">") {
12684 return ["\\>", "\\>"];
12685 }
12686 else if (c == "%") {
12687 return this.get_token_percent("\\%");
12688 }
12689 else if (c == "~") {
12690 return ["\\~", "\\~"];
12691 }
12692 else if (c == "[") {
12693 return this.get_token_sq("\\[");
12694 }
12695 else if (c == "|") {
12696 return ["\\|", "\\|"];
12697 }
12698 else if (c == "&") {
12699 return ["\\&", "\\&"];
12700 }
12701 else if (c == "(") {
12702 return ["\\(", "\\("];
12703 }
12704 else if (c == ")") {
12705 return ["\\)", "\\)"];
12706 }
12707 this.reader.seek_set(pos);
12708 return this.get_token_backslash_common();
12709 }
12710 return [c, c];
12711}
12712
12713RegexpParser.prototype.get_token_backslash_common = function() {
12714 var cclass = "iIkKfFpPsSdDxXoOwWhHaAlLuU";
12715 var c = this.reader.get();
12716 if (c == "\\") {
12717 return ["\\\\", "\\\\"];
12718 }
12719 else if (viml_stridx(cclass, c) != -1) {
12720 return ["\\" + c, "\\" + c];
12721 }
12722 else if (c == "_") {
12723 var epos = this.reader.getpos();
12724 var c = this.reader.get();
12725 if (viml_stridx(cclass, c) != -1) {
12726 return ["\\_" + c, "\\_ . c"];
12727 }
12728 else if (c == "^") {
12729 return ["\\_^", "\\_^"];
12730 }
12731 else if (c == "$") {
12732 return ["\\_$", "\\_$"];
12733 }
12734 else if (c == ".") {
12735 return ["\\_.", "\\_."];
12736 }
12737 else if (c == "[") {
12738 return this.get_token_sq("\\_[");
12739 }
12740 throw Err("E63: invalid use of \\_", epos);
12741 }
12742 else if (viml_stridx("etrb", c) != -1) {
12743 return ["\\" + c, "\\" + c];
12744 }
12745 else if (viml_stridx("123456789", c) != -1) {
12746 return ["\\" + c, "\\" + c];
12747 }
12748 else if (c == "z") {
12749 var epos = this.reader.getpos();
12750 var c = this.reader.get();
12751 if (viml_stridx("123456789", c) != -1) {
12752 return ["\\z" + c, "\\z" + c];
12753 }
12754 else if (c == "s") {
12755 return ["\\zs", "\\zs"];
12756 }
12757 else if (c == "e") {
12758 return ["\\ze", "\\ze"];
12759 }
12760 else if (c == "(") {
12761 return ["\\z(", "\\z("];
12762 }
12763 throw Err("E68: Invalid character after \\z", epos);
12764 }
12765 else if (viml_stridx("cCmMvVZ", c) != -1) {
12766 return ["\\" + c, "\\" + c];
12767 }
12768 else if (c == "%") {
12769 var epos = this.reader.getpos();
12770 var c = this.reader.get();
12771 if (c == "d") {
12772 var r = this.getdecchrs();
12773 if (r != "") {
12774 return ["\\%d" + r, "\\%d" + r];
12775 }
12776 }
12777 else if (c == "o") {
12778 var r = this.getoctchrs();
12779 if (r != "") {
12780 return ["\\%o" + r, "\\%o" + r];
12781 }
12782 }
12783 else if (c == "x") {
12784 var r = this.gethexchrs(2);
12785 if (r != "") {
12786 return ["\\%x" + r, "\\%x" + r];
12787 }
12788 }
12789 else if (c == "u") {
12790 var r = this.gethexchrs(4);
12791 if (r != "") {
12792 return ["\\%u" + r, "\\%u" + r];
12793 }
12794 }
12795 else if (c == "U") {
12796 var r = this.gethexchrs(8);
12797 if (r != "") {
12798 return ["\\%U" + r, "\\%U" + r];
12799 }
12800 }
12801 throw Err("E678: Invalid character after \\%[dxouU]", epos);
12802 }
12803 return ["\\" + c, c];
12804}
12805
12806// \{}
12807RegexpParser.prototype.get_token_brace = function(pre) {
12808 var r = "";
12809 var minus = "";
12810 var comma = "";
12811 var n = "";
12812 var m = "";
12813 if (this.reader.p(0) == "-") {
12814 var minus = this.reader.get();
12815 r += minus;
12816 }
12817 if (isdigit(this.reader.p(0))) {
12818 var n = this.reader.read_digit();
12819 r += n;
12820 }
12821 if (this.reader.p(0) == ",") {
12822 var comma = this.rader.get();
12823 r += comma;
12824 }
12825 if (isdigit(this.reader.p(0))) {
12826 var m = this.reader.read_digit();
12827 r += m;
12828 }
12829 if (this.reader.p(0) == "\\") {
12830 r += this.reader.get();
12831 }
12832 if (this.reader.p(0) != "}") {
12833 throw Err("E554: Syntax error in \\{...}", this.reader.getpos());
12834 }
12835 this.reader.get();
12836 return [pre + r, "\\{" + minus + n + comma + m + "}"];
12837}
12838
12839// \[]
12840RegexpParser.prototype.get_token_sq = function(pre) {
12841 var start = this.reader.tell();
12842 var r = "";
12843 // Complement of range
12844 if (this.reader.p(0) == "^") {
12845 r += this.reader.get();
12846 }
12847 // At the start ']' and '-' mean the literal character.
12848 if (this.reader.p(0) == "]" || this.reader.p(0) == "-") {
12849 r += this.reader.get();
12850 }
12851 while (TRUE) {
12852 var startc = 0;
12853 var c = this.reader.p(0);
12854 if (this.isend(c)) {
12855 // If there is no matching ']', we assume the '[' is a normal character.
12856 this.reader.seek_set(start);
12857 return [pre, "["];
12858 }
12859 else if (c == "]") {
12860 this.reader.seek_cur(1);
12861 return [pre + r + "]", "\\[" + r + "]"];
12862 }
12863 else if (c == "[") {
12864 var e = this.get_token_sq_char_class();
12865 if (e == "") {
12866 var e = this.get_token_sq_equi_class();
12867 if (e == "") {
12868 var e = this.get_token_sq_coll_element();
12869 if (e == "") {
12870 var __tmp = this.get_token_sq_c();
12871 var e = __tmp[0];
12872 var startc = __tmp[1];
12873 }
12874 }
12875 }
12876 r += e;
12877 }
12878 else {
12879 var __tmp = this.get_token_sq_c();
12880 var e = __tmp[0];
12881 var startc = __tmp[1];
12882 r += e;
12883 }
12884 if (startc != 0 && this.reader.p(0) == "-" && !this.isend(this.reader.p(1)) && !(this.reader.p(1) == "\\" && this.reader.p(2) == "n")) {
12885 this.reader.seek_cur(1);
12886 r += "-";
12887 var c = this.reader.p(0);
12888 if (c == "[") {
12889 var e = this.get_token_sq_coll_element();
12890 if (e != "") {
12891 var endc = viml_char2nr(e[2]);
12892 }
12893 else {
12894 var __tmp = this.get_token_sq_c();
12895 var e = __tmp[0];
12896 var endc = __tmp[1];
12897 }
12898 r += e;
12899 }
12900 else {
12901 var __tmp = this.get_token_sq_c();
12902 var e = __tmp[0];
12903 var endc = __tmp[1];
12904 r += e;
12905 }
12906 if (startc > endc || endc > startc + 256) {
12907 throw Err("E16: Invalid range", this.reader.getpos());
12908 }
12909 }
12910 }
12911}
12912
12913// [c]
12914RegexpParser.prototype.get_token_sq_c = function() {
12915 var c = this.reader.p(0);
12916 if (c == "\\") {
12917 this.reader.seek_cur(1);
12918 var c = this.reader.p(0);
12919 if (c == "n") {
12920 this.reader.seek_cur(1);
12921 return ["\\n", 0];
12922 }
12923 else if (c == "r") {
12924 this.reader.seek_cur(1);
12925 return ["\\r", 13];
12926 }
12927 else if (c == "t") {
12928 this.reader.seek_cur(1);
12929 return ["\\t", 9];
12930 }
12931 else if (c == "e") {
12932 this.reader.seek_cur(1);
12933 return ["\\e", 27];
12934 }
12935 else if (c == "b") {
12936 this.reader.seek_cur(1);
12937 return ["\\b", 8];
12938 }
12939 else if (viml_stridx("]^-\\", c) != -1) {
12940 this.reader.seek_cur(1);
12941 return ["\\" + c, viml_char2nr(c)];
12942 }
12943 else if (viml_stridx("doxuU", c) != -1) {
12944 var __tmp = this.get_token_sq_coll_char();
12945 var c = __tmp[0];
12946 var n = __tmp[1];
12947 return [c, n];
12948 }
12949 else {
12950 return ["\\", viml_char2nr("\\")];
12951 }
12952 }
12953 else if (c == "-") {
12954 this.reader.seek_cur(1);
12955 return ["-", viml_char2nr("-")];
12956 }
12957 else {
12958 this.reader.seek_cur(1);
12959 return [c, viml_char2nr(c)];
12960 }
12961}
12962
12963// [\d123]
12964RegexpParser.prototype.get_token_sq_coll_char = function() {
12965 var pos = this.reader.tell();
12966 var c = this.reader.get();
12967 if (c == "d") {
12968 var r = this.getdecchrs();
12969 var n = viml_str2nr(r, 10);
12970 }
12971 else if (c == "o") {
12972 var r = this.getoctchrs();
12973 var n = viml_str2nr(r, 8);
12974 }
12975 else if (c == "x") {
12976 var r = this.gethexchrs(2);
12977 var n = viml_str2nr(r, 16);
12978 }
12979 else if (c == "u") {
12980 var r = this.gethexchrs(4);
12981 var n = viml_str2nr(r, 16);
12982 }
12983 else if (c == "U") {
12984 var r = this.gethexchrs(8);
12985 var n = viml_str2nr(r, 16);
12986 }
12987 else {
12988 var r = "";
12989 }
12990 if (r == "") {
12991 this.reader.seek_set(pos);
12992 return "\\";
12993 }
12994 return ["\\" + c + r, n];
12995}
12996
12997// [[.a.]]
12998RegexpParser.prototype.get_token_sq_coll_element = function() {
12999 if (this.reader.p(0) == "[" && this.reader.p(1) == "." && !this.isend(this.reader.p(2)) && this.reader.p(3) == "." && this.reader.p(4) == "]") {
13000 return this.reader.getn(5);
13001 }
13002 return "";
13003}
13004
13005// [[=a=]]
13006RegexpParser.prototype.get_token_sq_equi_class = function() {
13007 if (this.reader.p(0) == "[" && this.reader.p(1) == "=" && !this.isend(this.reader.p(2)) && this.reader.p(3) == "=" && this.reader.p(4) == "]") {
13008 return this.reader.getn(5);
13009 }
13010 return "";
13011}
13012
13013// [[:alpha:]]
13014RegexpParser.prototype.get_token_sq_char_class = function() {
13015 var class_names = ["alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "tab", "return", "backspace", "escape"];
13016 var pos = this.reader.tell();
13017 if (this.reader.p(0) == "[" && this.reader.p(1) == ":") {
13018 this.reader.seek_cur(2);
13019 var r = this.reader.read_alpha();
13020 if (this.reader.p(0) == ":" && this.reader.p(1) == "]") {
13021 this.reader.seek_cur(2);
13022 var __c15 = class_names;
13023 for (var __i15 = 0; __i15 < __c15.length; ++__i15) {
13024 var name = __c15[__i15];
13025 if (r == name) {
13026 return "[:" + name + ":]";
13027 }
13028 }
13029 }
13030 }
13031 this.reader.seek_set(pos);
13032 return "";
13033}
13034
13035// \@...
13036RegexpParser.prototype.get_token_at = function(pre) {
13037 var epos = this.reader.getpos();
13038 var c = this.reader.get();
13039 if (c == ">") {
13040 return [pre + ">", "\\@>"];
13041 }
13042 else if (c == "=") {
13043 return [pre + "=", "\\@="];
13044 }
13045 else if (c == "!") {
13046 return [pre + "!", "\\@!"];
13047 }
13048 else if (c == "<") {
13049 var c = this.reader.get();
13050 if (c == "=") {
13051 return [pre + "<=", "\\@<="];
13052 }
13053 else if (c == "!") {
13054 return [pre + "<!", "\\@<!"];
13055 }
13056 }
13057 throw Err("E64: @ follows nothing", epos);
13058}
13059
13060// \%...
13061RegexpParser.prototype.get_token_percent = function(pre) {
13062 var c = this.reader.get();
13063 if (c == "^") {
13064 return [pre + "^", "\\%^"];
13065 }
13066 else if (c == "$") {
13067 return [pre + "$", "\\%$"];
13068 }
13069 else if (c == "V") {
13070 return [pre + "V", "\\%V"];
13071 }
13072 else if (c == "#") {
13073 return [pre + "#", "\\%#"];
13074 }
13075 else if (c == "[") {
13076 return this.get_token_percent_sq(pre + "[");
13077 }
13078 else if (c == "(") {
13079 return [pre + "(", "\\%("];
13080 }
13081 else {
13082 return this.get_token_mlcv(pre);
13083 }
13084}
13085
13086// \%[]
13087RegexpParser.prototype.get_token_percent_sq = function(pre) {
13088 var r = "";
13089 while (TRUE) {
13090 var c = this.reader.peek();
13091 if (this.isend(c)) {
13092 throw Err("E69: Missing ] after \\%[", this.reader.getpos());
13093 }
13094 else if (c == "]") {
13095 if (r == "") {
13096 throw Err("E70: Empty \\%[", this.reader.getpos());
13097 }
13098 this.reader.seek_cur(1);
13099 break;
13100 }
13101 this.reader.seek_cur(1);
13102 r += c;
13103 }
13104 return [pre + r + "]", "\\%[" + r + "]"];
13105}
13106
13107// \%'m \%l \%c \%v
13108RegexpParser.prototype.get_token_mlvc = function(pre) {
13109 var r = "";
13110 var cmp = "";
13111 if (this.reader.p(0) == "<" || this.reader.p(0) == ">") {
13112 var cmp = this.reader.get();
13113 r += cmp;
13114 }
13115 if (this.reader.p(0) == "'") {
13116 r += this.reader.get();
13117 var c = this.reader.p(0);
13118 if (this.isend(c)) {
13119 // FIXME: Should be error? Vim allow this.
13120 var c = "";
13121 }
13122 else {
13123 var c = this.reader.get();
13124 }
13125 return [pre + r + c, "\\%" + cmp + "'" + c];
13126 }
13127 else if (isdigit(this.reader.p(0))) {
13128 var d = this.reader.read_digit();
13129 r += d;
13130 var c = this.reader.p(0);
13131 if (c == "l") {
13132 this.reader.get();
13133 return [pre + r + "l", "\\%" + cmp + d + "l"];
13134 }
13135 else if (c == "c") {
13136 this.reader.get();
13137 return [pre + r + "c", "\\%" + cmp + d + "c"];
13138 }
13139 else if (c == "v") {
13140 this.reader.get();
13141 return [pre + r + "v", "\\%" + cmp + d + "v"];
13142 }
13143 }
13144 throw Err("E71: Invalid character after %", this.reader.getpos());
13145}
13146
13147RegexpParser.prototype.getdecchrs = function() {
13148 return this.reader.read_digit();
13149}
13150
13151RegexpParser.prototype.getoctchrs = function() {
13152 return this.reader.read_odigit();
13153}
13154
13155RegexpParser.prototype.gethexchrs = function(n) {
13156 var r = "";
13157 var __c16 = viml_range(n);
13158 for (var __i16 = 0; __i16 < __c16.length; ++__i16) {
13159 var i = __c16[__i16];
13160 var c = this.reader.peek();
13161 if (!isxdigit(c)) {
13162 break;
13163 }
13164 r += this.reader.get();
13165 }
13166 return r;
13167}
13168
13169if (__webpack_require__.c[__webpack_require__.s] === module) {
13170 main();
13171}
13172else {
13173 module.exports = {
13174 VimLParser: VimLParser,
13175 StringReader: StringReader,
13176 Compiler: Compiler
13177 };
13178}
13179
13180/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(47)(module)))
13181
13182/***/ }),
13183/* 47 */
13184/***/ (function(module, exports) {
13185
13186module.exports = function(module) {
13187 if (!module.webpackPolyfill) {
13188 module.deprecate = function() {};
13189 module.paths = [];
13190 // module.parent = undefined by default
13191 if (!module.children) module.children = [];
13192 Object.defineProperty(module, "loaded", {
13193 enumerable: true,
13194 get: function() {
13195 return module.l;
13196 }
13197 });
13198 Object.defineProperty(module, "id", {
13199 enumerable: true,
13200 get: function() {
13201 return module.i;
13202 }
13203 });
13204 module.webpackPolyfill = 1;
13205 }
13206 return module;
13207};
13208
13209
13210/***/ }),
13211/* 48 */
13212/***/ (function(module, exports, __webpack_require__) {
13213
13214"use strict";
13215
13216Object.defineProperty(exports, "__esModule", { value: true });
13217exports.errorLinePattern = /[^:]+:\s*(.+?):\s*line\s*([0-9]+)\s*col\s*([0-9]+)/;
13218exports.commentPattern = /^[ \t]*("|')/;
13219exports.keywordPattern = /[\w#&$<>.:]/;
13220exports.builtinFunctionPattern = /^((<SID>|\b(v|g|b|s|l|a):)?[\w#&]+)[ \t]*\([^)]*\)/;
13221exports.wordPrePattern = /^.*?(((<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+)|(<SID>|<SID|<SI|<S|<|\b(v|g|b|s|l|a):))$/;
13222exports.wordNextPattern = /^((SID>|ID>|D>|>|<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+|(:[\w#&$.]+)).*?(\r\n|\r|\n)?$/;
13223exports.colorschemePattern = /\bcolorscheme[ \t]+\w*$/;
13224exports.mapCommandPattern = /^([ \t]*(\[ \t]*)?)\w*map[ \t]+/;
13225exports.highlightLinkPattern = /^[ \t]*(hi|highlight)[ \t]+link([ \t]+[^ \t]+)*[ \t]*$/;
13226exports.highlightPattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]*$/;
13227exports.highlightValuePattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]+([^ \t=]+)=[^ \t=]*$/;
13228exports.autocmdPattern = /^[ \t]*(au|autocmd)!?[ \t]+([^ \t,]+,)*[^ \t,]*$/;
13229exports.builtinVariablePattern = [
13230 /\bv:\w*$/,
13231];
13232exports.optionPattern = [
13233 /(^|[ \t]+)&\w*$/,
13234 /(^|[ \t]+)set(l|local|g|global)?[ \t]+\w+$/,
13235];
13236exports.notFunctionPattern = [
13237 /^[ \t]*\\$/,
13238 /^[ \t]*\w+$/,
13239 /^[ \t]*"/,
13240 /(let|set|colorscheme)[ \t][^ \t]*$/,
13241 /[^([,\\ \t\w#>]\w*$/,
13242 /^[ \t]*(hi|highlight)([ \t]+link)?([ \t]+[^ \t]+)*[ \t]*$/,
13243 exports.autocmdPattern,
13244];
13245exports.commandPattern = [
13246 /(^|[ \t]):\w+$/,
13247 /^[ \t]*\w+$/,
13248 /:?silent!?[ \t]\w+/,
13249];
13250exports.featurePattern = [
13251 /\bhas\([ \t]*["']\w*/,
13252];
13253exports.expandPattern = [
13254 /\bexpand\(['"]<\w*$/,
13255 /\bexpand\([ \t]*['"]\w*$/,
13256];
13257exports.notIdentifierPattern = [
13258 exports.commentPattern,
13259 /("|'):\w*$/,
13260 /^[ \t]*\\$/,
13261 /^[ \t]*call[ \t]+[^ \t()]*$/,
13262 /('|"|#|&|\$|<)\w*$/,
13263];
13264
13265
13266/***/ }),
13267/* 49 */
13268/***/ (function(module, exports, __webpack_require__) {
13269
13270"use strict";
13271
13272Object.defineProperty(exports, "__esModule", { value: true });
13273var constant_1 = __webpack_require__(2);
13274var conf;
13275exports.default = {
13276 init: function (config) {
13277 conf = config;
13278 },
13279 get iskeyword() {
13280 return conf && conf.iskeyword || "";
13281 },
13282 get vimruntime() {
13283 return conf && conf.vimruntime || "";
13284 },
13285 get runtimepath() {
13286 return conf && conf.runtimepath || [];
13287 },
13288 get diagnostic() {
13289 return conf && conf.diagnostic || {
13290 enable: true,
13291 };
13292 },
13293 get snippetSupport() {
13294 return conf && conf.snippetSupport || false;
13295 },
13296 get suggest() {
13297 return conf && conf.suggest || {
13298 fromRuntimepath: false,
13299 fromVimruntime: true,
13300 };
13301 },
13302 get indexes() {
13303 var defaults = {
13304 runtimepath: true,
13305 gap: 100,
13306 count: 1,
13307 projectRootPatterns: constant_1.projectRootPatterns,
13308 };
13309 if (!conf || !conf.indexes) {
13310 return defaults;
13311 }
13312 if (conf.indexes.gap !== undefined) {
13313 defaults.gap = conf.indexes.gap;
13314 }
13315 if (conf.indexes.count !== undefined) {
13316 defaults.count = conf.indexes.count;
13317 }
13318 if (conf.indexes.projectRootPatterns !== undefined
13319 && Array.isArray(conf.indexes.projectRootPatterns)
13320 && conf.indexes.projectRootPatterns.length) {
13321 defaults.projectRootPatterns = conf.indexes.projectRootPatterns;
13322 }
13323 return defaults;
13324 },
13325};
13326
13327
13328/***/ }),
13329/* 50 */
13330/***/ (function(module, exports, __webpack_require__) {
13331
13332"use strict";
13333
13334Object.defineProperty(exports, "__esModule", { value: true });
13335var vscode_languageserver_1 = __webpack_require__(4);
13336// sync text document manager
13337// TODO: increment
13338exports.documents = new vscode_languageserver_1.TextDocuments();
13339
13340
13341/***/ }),
13342/* 51 */
13343/***/ (function(module, exports, __webpack_require__) {
13344
13345"use strict";
13346
13347Object.defineProperty(exports, "__esModule", { value: true });
13348var patterns_1 = __webpack_require__(48);
13349var builtin_1 = __webpack_require__(52);
13350var provider_1 = __webpack_require__(124);
13351function provider(line) {
13352 if (patterns_1.autocmdPattern.test(line)) {
13353 return builtin_1.builtinDocs.getVimAutocmds().filter(function (item) {
13354 return line.indexOf(item.label) === -1;
13355 });
13356 }
13357 return [];
13358}
13359provider_1.useProvider(provider);
13360
13361
13362/***/ }),
13363/* 52 */
13364/***/ (function(module, exports, __webpack_require__) {
13365
13366"use strict";
13367
13368var __assign = (this && this.__assign) || function () {
13369 __assign = Object.assign || function(t) {
13370 for (var s, i = 1, n = arguments.length; i < n; i++) {
13371 s = arguments[i];
13372 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
13373 t[p] = s[p];
13374 }
13375 return t;
13376 };
13377 return __assign.apply(this, arguments);
13378};
13379var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
13380 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13381 return new (P || (P = Promise))(function (resolve, reject) {
13382 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
13383 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
13384 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
13385 step((generator = generator.apply(thisArg, _arguments || [])).next());
13386 });
13387};
13388var __generator = (this && this.__generator) || function (thisArg, body) {
13389 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13390 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
13391 function verb(n) { return function (v) { return step([n, v]); }; }
13392 function step(op) {
13393 if (f) throw new TypeError("Generator is already executing.");
13394 while (_) try {
13395 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;
13396 if (y = 0, t) op = [op[0] & 2, t.value];
13397 switch (op[0]) {
13398 case 0: case 1: t = op; break;
13399 case 4: _.label++; return { value: op[1], done: false };
13400 case 5: _.label++; y = op[1]; op = [0]; continue;
13401 case 7: op = _.ops.pop(); _.trys.pop(); continue;
13402 default:
13403 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
13404 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
13405 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
13406 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
13407 if (t[2]) _.ops.pop();
13408 _.trys.pop(); continue;
13409 }
13410 op = body.call(thisArg, _);
13411 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
13412 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
13413 }
13414};
13415var __spreadArrays = (this && this.__spreadArrays) || function () {
13416 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
13417 for (var r = Array(s), k = 0, i = 0; i < il; i++)
13418 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
13419 r[k] = a[j];
13420 return r;
13421};
13422var __importDefault = (this && this.__importDefault) || function (mod) {
13423 return (mod && mod.__esModule) ? mod : { "default": mod };
13424};
13425Object.defineProperty(exports, "__esModule", { value: true });
13426/*
13427 * vim builtin completion items
13428 *
13429 * 1. functions
13430 * 2. options
13431 * 3. variables
13432 * 4. commands
13433 * 5. has features
13434 * 6. expand Keyword
13435 * 7. map args
13436 */
13437var fast_glob_1 = __importDefault(__webpack_require__(53));
13438var path_1 = __importDefault(__webpack_require__(15));
13439var vscode_languageserver_1 = __webpack_require__(4);
13440var logger_1 = __importDefault(__webpack_require__(121));
13441var patterns_1 = __webpack_require__(48);
13442var util_1 = __webpack_require__(40);
13443var builtin_docs_json_1 = __importDefault(__webpack_require__(123));
13444var config_1 = __importDefault(__webpack_require__(49));
13445var log = logger_1.default("builtin");
13446var Builtin = /** @class */ (function () {
13447 function Builtin() {
13448 // completion items
13449 this.vimPredefinedVariablesItems = [];
13450 this.vimOptionItems = [];
13451 this.vimBuiltinFunctionItems = [];
13452 this.vimBuiltinFunctionMap = {};
13453 this.vimCommandItems = [];
13454 this.vimMapArgsItems = [];
13455 this.vimFeatureItems = [];
13456 this.vimAutocmdItems = [];
13457 this.expandKeywordItems = [];
13458 this.colorschemeItems = [];
13459 this.highlightArgKeys = [];
13460 this.highlightArgValues = {};
13461 // signature help
13462 this.vimBuiltFunctionSignatureHelp = {};
13463 // documents
13464 this.vimBuiltFunctionDocuments = {};
13465 this.vimOptionDocuments = {};
13466 this.vimPredefinedVariableDocuments = {};
13467 this.vimCommandDocuments = {};
13468 this.vimFeatureDocuments = {};
13469 this.expandKeywordDocuments = {};
13470 }
13471 Builtin.prototype.init = function () {
13472 this.start();
13473 };
13474 Builtin.prototype.getPredefinedVimVariables = function () {
13475 return this.vimPredefinedVariablesItems;
13476 };
13477 Builtin.prototype.getVimOptions = function () {
13478 return this.vimOptionItems;
13479 };
13480 Builtin.prototype.getBuiltinVimFunctions = function () {
13481 return this.vimBuiltinFunctionItems;
13482 };
13483 Builtin.prototype.isBuiltinFunction = function (label) {
13484 return this.vimBuiltinFunctionMap[label];
13485 };
13486 Builtin.prototype.getExpandKeywords = function () {
13487 return this.expandKeywordItems;
13488 };
13489 Builtin.prototype.getVimCommands = function () {
13490 return this.vimCommandItems;
13491 };
13492 Builtin.prototype.getVimMapArgs = function () {
13493 return this.vimMapArgsItems;
13494 };
13495 Builtin.prototype.getVimFeatures = function () {
13496 return this.vimFeatureItems;
13497 };
13498 Builtin.prototype.getVimAutocmds = function () {
13499 return this.vimAutocmdItems;
13500 };
13501 Builtin.prototype.getColorschemes = function () {
13502 return this.colorschemeItems;
13503 };
13504 Builtin.prototype.getHighlightArgKeys = function () {
13505 return this.highlightArgKeys;
13506 };
13507 Builtin.prototype.getHighlightArgValues = function () {
13508 return this.highlightArgValues;
13509 };
13510 Builtin.prototype.getSignatureHelpByName = function (name, idx) {
13511 var params = this.vimBuiltFunctionSignatureHelp[name];
13512 if (params) {
13513 return {
13514 signatures: [{
13515 label: name + "(" + params[0] + ")" + (params[1] ? ": " + params[1] : ""),
13516 documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
13517 parameters: params[0].split("[")[0].split(",").map(function (param) {
13518 return {
13519 label: param.trim(),
13520 };
13521 }),
13522 }],
13523 activeSignature: 0,
13524 activeParameter: idx,
13525 };
13526 }
13527 return;
13528 };
13529 Builtin.prototype.getDocumentByCompletionItem = function (params) {
13530 var kind = params.kind;
13531 switch (kind) {
13532 case vscode_languageserver_1.CompletionItemKind.Variable:
13533 if (!this.vimPredefinedVariableDocuments[params.label]) {
13534 return params;
13535 }
13536 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimPredefinedVariableDocuments[params.label]) });
13537 case vscode_languageserver_1.CompletionItemKind.Property:
13538 if (!this.vimOptionDocuments[params.label]) {
13539 return params;
13540 }
13541 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimOptionDocuments[params.label]) });
13542 case vscode_languageserver_1.CompletionItemKind.Function:
13543 if (!this.vimBuiltFunctionDocuments[params.label]) {
13544 return params;
13545 }
13546 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[params.label]) });
13547 case vscode_languageserver_1.CompletionItemKind.EnumMember:
13548 if (!this.vimFeatureDocuments[params.label]) {
13549 return params;
13550 }
13551 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimFeatureDocuments[params.label]) });
13552 case vscode_languageserver_1.CompletionItemKind.Operator:
13553 if (!this.vimCommandDocuments[params.label]) {
13554 return params;
13555 }
13556 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimCommandDocuments[params.label]) });
13557 default:
13558 return params;
13559 }
13560 };
13561 Builtin.prototype.getHoverDocument = function (name, pre, next) {
13562 // builtin variables
13563 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, pre) && this.vimPredefinedVariableDocuments[name]) {
13564 return {
13565 contents: this.formatVimDocument(this.vimPredefinedVariableDocuments[name]),
13566 };
13567 // options
13568 }
13569 else if (util_1.isSomeMatchPattern(patterns_1.optionPattern, pre)
13570 && (this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)])) {
13571 return {
13572 contents: this.formatVimDocument(this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)]),
13573 };
13574 // builtin functions
13575 }
13576 else if (patterns_1.builtinFunctionPattern.test(next) && this.vimBuiltFunctionDocuments[name]) {
13577 return {
13578 contents: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
13579 };
13580 // has features
13581 }
13582 else if (util_1.isSomeMatchPattern(patterns_1.featurePattern, pre) && this.vimFeatureDocuments[name]) {
13583 return {
13584 contents: this.formatVimDocument(this.vimFeatureDocuments[name]),
13585 };
13586 // expand Keywords
13587 }
13588 else if (util_1.isSomeMatchPattern(patterns_1.expandPattern, pre) && this.expandKeywordDocuments["<" + name + ">"]) {
13589 return {
13590 contents: this.formatVimDocument(this.expandKeywordDocuments["<" + name + ">"]),
13591 };
13592 // command
13593 }
13594 else if (util_1.isSomeMatchPattern(patterns_1.commandPattern, pre) && this.vimCommandDocuments[name]) {
13595 return {
13596 contents: this.formatVimDocument(this.vimCommandDocuments[name]),
13597 };
13598 }
13599 };
13600 Builtin.prototype.start = function () {
13601 return __awaiter(this, void 0, void 0, function () {
13602 var runtimepath, data;
13603 var _this = this;
13604 return __generator(this, function (_a) {
13605 runtimepath = config_1.default.runtimepath;
13606 // get colorschemes
13607 if (runtimepath) {
13608 this.resolveColorschemes(runtimepath);
13609 }
13610 // get map args
13611 this.resolveMapArgs();
13612 // get highlight arg keys
13613 this.resolveHighlightArgKeys();
13614 // get highlight arg values
13615 this.resolveHighlightArgValues();
13616 try {
13617 data = builtin_docs_json_1.default;
13618 this.vimBuiltinFunctionItems = data.completionItems.functions;
13619 this.vimBuiltinFunctionItems.forEach(function (item) {
13620 if (!_this.vimBuiltinFunctionMap[item.label]) {
13621 _this.vimBuiltinFunctionMap[item.label] = true;
13622 }
13623 });
13624 this.vimBuiltFunctionDocuments = data.documents.functions;
13625 this.vimCommandItems = data.completionItems.commands;
13626 this.vimCommandDocuments = data.documents.commands;
13627 this.vimPredefinedVariablesItems = data.completionItems.variables;
13628 this.vimPredefinedVariableDocuments = data.documents.variables;
13629 this.vimOptionItems = data.completionItems.options;
13630 this.vimOptionDocuments = data.documents.options;
13631 this.vimFeatureItems = data.completionItems.features;
13632 this.vimAutocmdItems = data.completionItems.autocmds;
13633 this.vimFeatureDocuments = data.documents.features;
13634 this.expandKeywordItems = data.completionItems.expandKeywords;
13635 this.expandKeywordDocuments = data.documents.expandKeywords;
13636 this.vimBuiltFunctionSignatureHelp = data.signatureHelp;
13637 }
13638 catch (error) {
13639 log.error("[vimls]: parse docs/builtin-doc.json fail => " + (error.message || error));
13640 }
13641 return [2 /*return*/];
13642 });
13643 });
13644 };
13645 // format vim document to markdown
13646 Builtin.prototype.formatVimDocument = function (document) {
13647 var indent = 0;
13648 return {
13649 kind: vscode_languageserver_1.MarkupKind.Markdown,
13650 value: __spreadArrays([
13651 "```help"
13652 ], document.map(function (line) {
13653 if (indent === 0) {
13654 var m = line.match(/^([ \t]+)/);
13655 if (m) {
13656 indent = m[1].length;
13657 }
13658 }
13659 return line.replace(new RegExp("^[ \\t]{" + indent + "}", "g"), "").replace(/\t/g, " ");
13660 }), [
13661 "```",
13662 ]).join("\n"),
13663 };
13664 };
13665 Builtin.prototype.resolveMapArgs = function () {
13666 this.vimMapArgsItems = ["<buffer>", "<nowait>", "<silent>", "<script>", "<expr>", "<unique>"]
13667 .map(function (item) {
13668 return {
13669 label: item,
13670 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
13671 documentation: "",
13672 insertText: item,
13673 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
13674 };
13675 });
13676 };
13677 Builtin.prototype.resolveColorschemes = function (runtimepath) {
13678 return __awaiter(this, void 0, void 0, function () {
13679 var list, glob, colorschemes, error_1;
13680 return __generator(this, function (_a) {
13681 switch (_a.label) {
13682 case 0:
13683 list = runtimepath;
13684 if (config_1.default.vimruntime) {
13685 list.push(config_1.default.vimruntime);
13686 }
13687 glob = runtimepath.map(function (p) { return path_1.default.join(p.trim(), "colors/*.vim"); });
13688 colorschemes = [];
13689 _a.label = 1;
13690 case 1:
13691 _a.trys.push([1, 3, , 4]);
13692 return [4 /*yield*/, fast_glob_1.default(glob, { onlyFiles: false, deep: 0 })];
13693 case 2:
13694 colorschemes = _a.sent();
13695 return [3 /*break*/, 4];
13696 case 3:
13697 error_1 = _a.sent();
13698 log.error([
13699 "Index Colorschemes Error: " + JSON.stringify(glob),
13700 "Error => " + (error_1.stack || error_1.message || error_1),
13701 ].join("\n"));
13702 return [3 /*break*/, 4];
13703 case 4:
13704 this.colorschemeItems = colorschemes.map(function (p) {
13705 var label = path_1.default.basename(p, ".vim");
13706 var item = {
13707 label: label,
13708 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
13709 insertText: label,
13710 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
13711 };
13712 return item;
13713 });
13714 return [2 /*return*/];
13715 }
13716 });
13717 });
13718 };
13719 Builtin.prototype.resolveHighlightArgKeys = function () {
13720 this.highlightArgKeys = [
13721 "cterm",
13722 "start",
13723 "stop",
13724 "ctermfg",
13725 "ctermbg",
13726 "gui",
13727 "font",
13728 "guifg",
13729 "guibg",
13730 "guisp",
13731 "blend",
13732 ]
13733 .map(function (item) {
13734 return {
13735 label: item,
13736 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
13737 documentation: "",
13738 insertText: item + "=${0}",
13739 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
13740 };
13741 });
13742 };
13743 Builtin.prototype.resolveHighlightArgValues = function () {
13744 var values = {
13745 "cterm": ["bold", "underline", "undercurl", "reverse", "inverse", "italic", "standout", "NONE"],
13746 "ctermfg ctermbg": [
13747 "Black",
13748 "DarkBlue",
13749 "DarkGreen",
13750 "DarkCyan",
13751 "DarkRed",
13752 "DarkMagenta",
13753 "Brown", "DarkYellow",
13754 "LightGray", "LightGrey", "Gray", "Grey",
13755 "DarkGray", "DarkGrey",
13756 "Blue", "LightBlue",
13757 "Green", "LightGreen",
13758 "Cyan", "LightCyan",
13759 "Red", "LightRed",
13760 "Magenta", "LightMagenta",
13761 "Yellow", "LightYellow",
13762 "White",
13763 ],
13764 "guifg guibg guisp": [
13765 "NONE",
13766 "bg",
13767 "background",
13768 "fg",
13769 "foreground",
13770 "Red", "LightRed", "DarkRed",
13771 "Green", "LightGreen", "DarkGreen", "SeaGreen",
13772 "Blue", "LightBlue", "DarkBlue", "SlateBlue",
13773 "Cyan", "LightCyan", "DarkCyan",
13774 "Magenta", "LightMagenta", "DarkMagenta",
13775 "Yellow", "LightYellow", "Brown", "DarkYellow",
13776 "Gray", "LightGray", "DarkGray",
13777 "Black", "White",
13778 "Orange", "Purple", "Violet",
13779 ],
13780 };
13781 var argValues = {};
13782 Object.keys(values).forEach(function (key) {
13783 var items = values[key].map(function (val) { return ({
13784 label: val,
13785 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
13786 documentation: "",
13787 insertText: val,
13788 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
13789 }); });
13790 key.split(" ").forEach(function (name) {
13791 argValues[name] = items;
13792 });
13793 });
13794 this.highlightArgValues = argValues;
13795 };
13796 return Builtin;
13797}());
13798exports.builtinDocs = new Builtin();
13799
13800
13801/***/ }),
13802/* 53 */
13803/***/ (function(module, exports, __webpack_require__) {
13804
13805"use strict";
13806
13807const taskManager = __webpack_require__(54);
13808const async_1 = __webpack_require__(84);
13809const stream_1 = __webpack_require__(117);
13810const sync_1 = __webpack_require__(118);
13811const settings_1 = __webpack_require__(120);
13812const utils = __webpack_require__(55);
13813function FastGlob(source, options) {
13814 try {
13815 assertPatternsInput(source);
13816 }
13817 catch (error) {
13818 return Promise.reject(error);
13819 }
13820 const works = getWorks(source, async_1.default, options);
13821 return Promise.all(works).then(utils.array.flatten);
13822}
13823(function (FastGlob) {
13824 function sync(source, options) {
13825 assertPatternsInput(source);
13826 const works = getWorks(source, sync_1.default, options);
13827 return utils.array.flatten(works);
13828 }
13829 FastGlob.sync = sync;
13830 function stream(source, options) {
13831 assertPatternsInput(source);
13832 const works = getWorks(source, stream_1.default, options);
13833 /**
13834 * The stream returned by the provider cannot work with an asynchronous iterator.
13835 * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
13836 * This affects performance (+25%). I don't see best solution right now.
13837 */
13838 return utils.stream.merge(works);
13839 }
13840 FastGlob.stream = stream;
13841 function generateTasks(source, options) {
13842 assertPatternsInput(source);
13843 const patterns = [].concat(source);
13844 const settings = new settings_1.default(options);
13845 return taskManager.generate(patterns, settings);
13846 }
13847 FastGlob.generateTasks = generateTasks;
13848})(FastGlob || (FastGlob = {}));
13849function getWorks(source, _Provider, options) {
13850 const patterns = [].concat(source);
13851 const settings = new settings_1.default(options);
13852 const tasks = taskManager.generate(patterns, settings);
13853 const provider = new _Provider(settings);
13854 return tasks.map(provider.read, provider);
13855}
13856function assertPatternsInput(source) {
13857 if ([].concat(source).every(isString)) {
13858 return;
13859 }
13860 throw new TypeError('Patterns must be a string or an array of strings');
13861}
13862function isString(source) {
13863 /* tslint:disable-next-line strict-type-predicates */
13864 return typeof source === 'string';
13865}
13866module.exports = FastGlob;
13867
13868
13869/***/ }),
13870/* 54 */
13871/***/ (function(module, exports, __webpack_require__) {
13872
13873"use strict";
13874
13875Object.defineProperty(exports, "__esModule", { value: true });
13876const utils = __webpack_require__(55);
13877function generate(patterns, settings) {
13878 const positivePatterns = getPositivePatterns(patterns);
13879 const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
13880 /**
13881 * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
13882 * filepath directly (without read directory).
13883 */
13884 const staticPatterns = !settings.caseSensitiveMatch ? [] : positivePatterns.filter(utils.pattern.isStaticPattern);
13885 const dynamicPatterns = !settings.caseSensitiveMatch ? positivePatterns : positivePatterns.filter(utils.pattern.isDynamicPattern);
13886 const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
13887 const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
13888 return staticTasks.concat(dynamicTasks);
13889}
13890exports.generate = generate;
13891function convertPatternsToTasks(positive, negative, dynamic) {
13892 const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
13893 // When we have a global group – there is no reason to divide the patterns into independent tasks.
13894 // In this case, the global task covers the rest.
13895 if ('.' in positivePatternsGroup) {
13896 const task = convertPatternGroupToTask('.', positive, negative, dynamic);
13897 return [task];
13898 }
13899 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
13900}
13901exports.convertPatternsToTasks = convertPatternsToTasks;
13902function getPositivePatterns(patterns) {
13903 return utils.pattern.getPositivePatterns(patterns);
13904}
13905exports.getPositivePatterns = getPositivePatterns;
13906function getNegativePatternsAsPositive(patterns, ignore) {
13907 const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
13908 const positive = negative.map(utils.pattern.convertToPositivePattern);
13909 return positive;
13910}
13911exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
13912function groupPatternsByBaseDirectory(patterns) {
13913 return patterns.reduce((collection, pattern) => {
13914 const base = utils.pattern.getBaseDirectory(pattern);
13915 if (base in collection) {
13916 collection[base].push(pattern);
13917 }
13918 else {
13919 collection[base] = [pattern];
13920 }
13921 return collection;
13922 }, {});
13923}
13924exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
13925function convertPatternGroupsToTasks(positive, negative, dynamic) {
13926 return Object.keys(positive).map((base) => {
13927 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
13928 });
13929}
13930exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
13931function convertPatternGroupToTask(base, positive, negative, dynamic) {
13932 return {
13933 dynamic,
13934 positive,
13935 negative,
13936 base,
13937 patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
13938 };
13939}
13940exports.convertPatternGroupToTask = convertPatternGroupToTask;
13941
13942
13943/***/ }),
13944/* 55 */
13945/***/ (function(module, exports, __webpack_require__) {
13946
13947"use strict";
13948
13949Object.defineProperty(exports, "__esModule", { value: true });
13950const array = __webpack_require__(56);
13951exports.array = array;
13952const errno = __webpack_require__(57);
13953exports.errno = errno;
13954const fs = __webpack_require__(58);
13955exports.fs = fs;
13956const path = __webpack_require__(59);
13957exports.path = path;
13958const pattern = __webpack_require__(60);
13959exports.pattern = pattern;
13960const stream = __webpack_require__(81);
13961exports.stream = stream;
13962
13963
13964/***/ }),
13965/* 56 */
13966/***/ (function(module, exports, __webpack_require__) {
13967
13968"use strict";
13969
13970Object.defineProperty(exports, "__esModule", { value: true });
13971function flatten(items) {
13972 return items.reduce((collection, item) => [].concat(collection, item), []);
13973}
13974exports.flatten = flatten;
13975
13976
13977/***/ }),
13978/* 57 */
13979/***/ (function(module, exports, __webpack_require__) {
13980
13981"use strict";
13982
13983Object.defineProperty(exports, "__esModule", { value: true });
13984function isEnoentCodeError(error) {
13985 return error.code === 'ENOENT';
13986}
13987exports.isEnoentCodeError = isEnoentCodeError;
13988
13989
13990/***/ }),
13991/* 58 */
13992/***/ (function(module, exports, __webpack_require__) {
13993
13994"use strict";
13995
13996Object.defineProperty(exports, "__esModule", { value: true });
13997class DirentFromStats {
13998 constructor(name, stats) {
13999 this.name = name;
14000 this.isBlockDevice = stats.isBlockDevice.bind(stats);
14001 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
14002 this.isDirectory = stats.isDirectory.bind(stats);
14003 this.isFIFO = stats.isFIFO.bind(stats);
14004 this.isFile = stats.isFile.bind(stats);
14005 this.isSocket = stats.isSocket.bind(stats);
14006 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
14007 }
14008}
14009function createDirentFromStats(name, stats) {
14010 return new DirentFromStats(name, stats);
14011}
14012exports.createDirentFromStats = createDirentFromStats;
14013
14014
14015/***/ }),
14016/* 59 */
14017/***/ (function(module, exports, __webpack_require__) {
14018
14019"use strict";
14020
14021Object.defineProperty(exports, "__esModule", { value: true });
14022const path = __webpack_require__(15);
14023/**
14024 * Designed to work only with simple paths: `dir\\file`.
14025 */
14026function unixify(filepath) {
14027 return filepath.replace(/\\/g, '/');
14028}
14029exports.unixify = unixify;
14030function makeAbsolute(cwd, filepath) {
14031 return path.resolve(cwd, filepath);
14032}
14033exports.makeAbsolute = makeAbsolute;
14034
14035
14036/***/ }),
14037/* 60 */
14038/***/ (function(module, exports, __webpack_require__) {
14039
14040"use strict";
14041
14042Object.defineProperty(exports, "__esModule", { value: true });
14043const path = __webpack_require__(15);
14044const globParent = __webpack_require__(61);
14045const isGlob = __webpack_require__(62);
14046const micromatch = __webpack_require__(64);
14047const GLOBSTAR = '**';
14048function isStaticPattern(pattern) {
14049 return !isDynamicPattern(pattern);
14050}
14051exports.isStaticPattern = isStaticPattern;
14052function isDynamicPattern(pattern) {
14053 return isGlob(pattern, { strict: false });
14054}
14055exports.isDynamicPattern = isDynamicPattern;
14056function convertToPositivePattern(pattern) {
14057 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
14058}
14059exports.convertToPositivePattern = convertToPositivePattern;
14060function convertToNegativePattern(pattern) {
14061 return '!' + pattern;
14062}
14063exports.convertToNegativePattern = convertToNegativePattern;
14064function isNegativePattern(pattern) {
14065 return pattern.startsWith('!') && pattern[1] !== '(';
14066}
14067exports.isNegativePattern = isNegativePattern;
14068function isPositivePattern(pattern) {
14069 return !isNegativePattern(pattern);
14070}
14071exports.isPositivePattern = isPositivePattern;
14072function getNegativePatterns(patterns) {
14073 return patterns.filter(isNegativePattern);
14074}
14075exports.getNegativePatterns = getNegativePatterns;
14076function getPositivePatterns(patterns) {
14077 return patterns.filter(isPositivePattern);
14078}
14079exports.getPositivePatterns = getPositivePatterns;
14080function getBaseDirectory(pattern) {
14081 return globParent(pattern);
14082}
14083exports.getBaseDirectory = getBaseDirectory;
14084function hasGlobStar(pattern) {
14085 return pattern.indexOf(GLOBSTAR) !== -1;
14086}
14087exports.hasGlobStar = hasGlobStar;
14088function endsWithSlashGlobStar(pattern) {
14089 return pattern.endsWith('/' + GLOBSTAR);
14090}
14091exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
14092function isAffectDepthOfReadingPattern(pattern) {
14093 const basename = path.basename(pattern);
14094 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
14095}
14096exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
14097function getNaiveDepth(pattern) {
14098 const base = getBaseDirectory(pattern);
14099 const patternDepth = pattern.split('/').length;
14100 const patternBaseDepth = base.split('/').length;
14101 /**
14102 * This is a hack for pattern that has no base directory.
14103 *
14104 * This is related to the `*\something\*` pattern.
14105 */
14106 if (base === '.') {
14107 return patternDepth - patternBaseDepth;
14108 }
14109 return patternDepth - patternBaseDepth - 1;
14110}
14111exports.getNaiveDepth = getNaiveDepth;
14112function getMaxNaivePatternsDepth(patterns) {
14113 return patterns.reduce((max, pattern) => {
14114 const depth = getNaiveDepth(pattern);
14115 return depth > max ? depth : max;
14116 }, 0);
14117}
14118exports.getMaxNaivePatternsDepth = getMaxNaivePatternsDepth;
14119function makeRe(pattern, options) {
14120 return micromatch.makeRe(pattern, options);
14121}
14122exports.makeRe = makeRe;
14123function convertPatternsToRe(patterns, options) {
14124 return patterns.map((pattern) => makeRe(pattern, options));
14125}
14126exports.convertPatternsToRe = convertPatternsToRe;
14127function matchAny(entry, patternsRe) {
14128 const filepath = entry.replace(/^\.[\\\/]/, '');
14129 return patternsRe.some((patternRe) => patternRe.test(filepath));
14130}
14131exports.matchAny = matchAny;
14132
14133
14134/***/ }),
14135/* 61 */
14136/***/ (function(module, exports, __webpack_require__) {
14137
14138"use strict";
14139
14140
14141var isGlob = __webpack_require__(62);
14142var pathPosixDirname = __webpack_require__(15).posix.dirname;
14143var isWin32 = __webpack_require__(16).platform() === 'win32';
14144
14145var slash = '/';
14146var backslash = /\\/g;
14147var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
14148var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
14149var escaped = /\\([\*\?\|\[\]\(\)\{\}])/g;
14150
14151module.exports = function globParent(str) {
14152 // flip windows path separators
14153 if (isWin32 && str.indexOf(slash) < 0) {
14154 str = str.replace(backslash, slash);
14155 }
14156
14157 // special case for strings ending in enclosure containing path separator
14158 if (enclosure.test(str)) {
14159 str += slash;
14160 }
14161
14162 // preserves full path in case of trailing path separator
14163 str += 'a';
14164
14165 // remove path parts that are globby
14166 do {
14167 str = pathPosixDirname(str);
14168 } while (isGlob(str) || globby.test(str));
14169
14170 // remove escape chars and return result
14171 return str.replace(escaped, '$1');
14172};
14173
14174
14175/***/ }),
14176/* 62 */
14177/***/ (function(module, exports, __webpack_require__) {
14178
14179/*!
14180 * is-glob <https://github.com/jonschlinkert/is-glob>
14181 *
14182 * Copyright (c) 2014-2017, Jon Schlinkert.
14183 * Released under the MIT License.
14184 */
14185
14186var isExtglob = __webpack_require__(63);
14187var chars = { '{': '}', '(': ')', '[': ']'};
14188var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
14189var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
14190
14191module.exports = function isGlob(str, options) {
14192 if (typeof str !== 'string' || str === '') {
14193 return false;
14194 }
14195
14196 if (isExtglob(str)) {
14197 return true;
14198 }
14199
14200 var regex = strictRegex;
14201 var match;
14202
14203 // optionally relax regex
14204 if (options && options.strict === false) {
14205 regex = relaxedRegex;
14206 }
14207
14208 while ((match = regex.exec(str))) {
14209 if (match[2]) return true;
14210 var idx = match.index + match[0].length;
14211
14212 // if an open bracket/brace/paren is escaped,
14213 // set the index to the next closing character
14214 var open = match[1];
14215 var close = open ? chars[open] : null;
14216 if (open && close) {
14217 var n = str.indexOf(close, idx);
14218 if (n !== -1) {
14219 idx = n + 1;
14220 }
14221 }
14222
14223 str = str.slice(idx);
14224 }
14225 return false;
14226};
14227
14228
14229/***/ }),
14230/* 63 */
14231/***/ (function(module, exports) {
14232
14233/*!
14234 * is-extglob <https://github.com/jonschlinkert/is-extglob>
14235 *
14236 * Copyright (c) 2014-2016, Jon Schlinkert.
14237 * Licensed under the MIT License.
14238 */
14239
14240module.exports = function isExtglob(str) {
14241 if (typeof str !== 'string' || str === '') {
14242 return false;
14243 }
14244
14245 var match;
14246 while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
14247 if (match[2]) return true;
14248 str = str.slice(match.index + match[0].length);
14249 }
14250
14251 return false;
14252};
14253
14254
14255/***/ }),
14256/* 64 */
14257/***/ (function(module, exports, __webpack_require__) {
14258
14259"use strict";
14260
14261
14262const util = __webpack_require__(42);
14263const braces = __webpack_require__(65);
14264const picomatch = __webpack_require__(75);
14265const utils = __webpack_require__(78);
14266const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
14267
14268/**
14269 * Returns an array of strings that match one or more glob patterns.
14270 *
14271 * ```js
14272 * const mm = require('micromatch');
14273 * // mm(list, patterns[, options]);
14274 *
14275 * console.log(mm(['a.js', 'a.txt'], ['*.js']));
14276 * //=> [ 'a.js' ]
14277 * ```
14278 * @param {String|Array<string>} list List of strings to match.
14279 * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
14280 * @param {Object} options See available [options](#options)
14281 * @return {Array} Returns an array of matches
14282 * @summary false
14283 * @api public
14284 */
14285
14286const micromatch = (list, patterns, options) => {
14287 patterns = [].concat(patterns);
14288 list = [].concat(list);
14289
14290 let omit = new Set();
14291 let keep = new Set();
14292 let items = new Set();
14293 let negatives = 0;
14294
14295 let onResult = state => {
14296 items.add(state.output);
14297 if (options && options.onResult) {
14298 options.onResult(state);
14299 }
14300 };
14301
14302 for (let i = 0; i < patterns.length; i++) {
14303 let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
14304 let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
14305 if (negated) negatives++;
14306
14307 for (let item of list) {
14308 let matched = isMatch(item, true);
14309
14310 let match = negated ? !matched.isMatch : matched.isMatch;
14311 if (!match) continue;
14312
14313 if (negated) {
14314 omit.add(matched.output);
14315 } else {
14316 omit.delete(matched.output);
14317 keep.add(matched.output);
14318 }
14319 }
14320 }
14321
14322 let result = negatives === patterns.length ? [...items] : [...keep];
14323 let matches = result.filter(item => !omit.has(item));
14324
14325 if (options && matches.length === 0) {
14326 if (options.failglob === true) {
14327 throw new Error(`No matches found for "${patterns.join(', ')}"`);
14328 }
14329
14330 if (options.nonull === true || options.nullglob === true) {
14331 return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
14332 }
14333 }
14334
14335 return matches;
14336};
14337
14338/**
14339 * Backwards compatibility
14340 */
14341
14342micromatch.match = micromatch;
14343
14344/**
14345 * Returns a matcher function from the given glob `pattern` and `options`.
14346 * The returned function takes a string to match as its only argument and returns
14347 * true if the string is a match.
14348 *
14349 * ```js
14350 * const mm = require('micromatch');
14351 * // mm.matcher(pattern[, options]);
14352 *
14353 * const isMatch = mm.matcher('*.!(*a)');
14354 * console.log(isMatch('a.a')); //=> false
14355 * console.log(isMatch('a.b')); //=> true
14356 * ```
14357 * @param {String} `pattern` Glob pattern
14358 * @param {Object} `options`
14359 * @return {Function} Returns a matcher function.
14360 * @api public
14361 */
14362
14363micromatch.matcher = (pattern, options) => picomatch(pattern, options);
14364
14365/**
14366 * Returns true if **any** of the given glob `patterns` match the specified `string`.
14367 *
14368 * ```js
14369 * const mm = require('micromatch');
14370 * // mm.isMatch(string, patterns[, options]);
14371 *
14372 * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
14373 * console.log(mm.isMatch('a.a', 'b.*')); //=> false
14374 * ```
14375 * @param {String} str The string to test.
14376 * @param {String|Array} patterns One or more glob patterns to use for matching.
14377 * @param {Object} [options] See available [options](#options).
14378 * @return {Boolean} Returns true if any patterns match `str`
14379 * @api public
14380 */
14381
14382micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
14383
14384/**
14385 * Backwards compatibility
14386 */
14387
14388micromatch.any = micromatch.isMatch;
14389
14390/**
14391 * Returns a list of strings that _**do not match any**_ of the given `patterns`.
14392 *
14393 * ```js
14394 * const mm = require('micromatch');
14395 * // mm.not(list, patterns[, options]);
14396 *
14397 * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
14398 * //=> ['b.b', 'c.c']
14399 * ```
14400 * @param {Array} `list` Array of strings to match.
14401 * @param {String|Array} `patterns` One or more glob pattern to use for matching.
14402 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14403 * @return {Array} Returns an array of strings that **do not match** the given patterns.
14404 * @api public
14405 */
14406
14407micromatch.not = (list, patterns, options = {}) => {
14408 patterns = [].concat(patterns).map(String);
14409 let result = new Set();
14410 let items = [];
14411
14412 let onResult = state => {
14413 if (options.onResult) options.onResult(state);
14414 items.push(state.output);
14415 };
14416
14417 let matches = micromatch(list, patterns, { ...options, onResult });
14418
14419 for (let item of items) {
14420 if (!matches.includes(item)) {
14421 result.add(item);
14422 }
14423 }
14424 return [...result];
14425};
14426
14427/**
14428 * Returns true if the given `string` contains the given pattern. Similar
14429 * to [.isMatch](#isMatch) but the pattern can match any part of the string.
14430 *
14431 * ```js
14432 * var mm = require('micromatch');
14433 * // mm.contains(string, pattern[, options]);
14434 *
14435 * console.log(mm.contains('aa/bb/cc', '*b'));
14436 * //=> true
14437 * console.log(mm.contains('aa/bb/cc', '*d'));
14438 * //=> false
14439 * ```
14440 * @param {String} `str` The string to match.
14441 * @param {String|Array} `patterns` Glob pattern to use for matching.
14442 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14443 * @return {Boolean} Returns true if the patter matches any part of `str`.
14444 * @api public
14445 */
14446
14447micromatch.contains = (str, pattern, options) => {
14448 if (typeof str !== 'string') {
14449 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
14450 }
14451
14452 if (Array.isArray(pattern)) {
14453 return pattern.some(p => micromatch.contains(str, p, options));
14454 }
14455
14456 if (typeof pattern === 'string') {
14457 if (isEmptyString(str) || isEmptyString(pattern)) {
14458 return false;
14459 }
14460
14461 if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
14462 return true;
14463 }
14464 }
14465
14466 return micromatch.isMatch(str, pattern, { ...options, contains: true });
14467};
14468
14469/**
14470 * Filter the keys of the given object with the given `glob` pattern
14471 * and `options`. Does not attempt to match nested keys. If you need this feature,
14472 * use [glob-object][] instead.
14473 *
14474 * ```js
14475 * const mm = require('micromatch');
14476 * // mm.matchKeys(object, patterns[, options]);
14477 *
14478 * const obj = { aa: 'a', ab: 'b', ac: 'c' };
14479 * console.log(mm.matchKeys(obj, '*b'));
14480 * //=> { ab: 'b' }
14481 * ```
14482 * @param {Object} `object` The object with keys to filter.
14483 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
14484 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14485 * @return {Object} Returns an object with only keys that match the given patterns.
14486 * @api public
14487 */
14488
14489micromatch.matchKeys = (obj, patterns, options) => {
14490 if (!utils.isObject(obj)) {
14491 throw new TypeError('Expected the first argument to be an object');
14492 }
14493 let keys = micromatch(Object.keys(obj), patterns, options);
14494 let res = {};
14495 for (let key of keys) res[key] = obj[key];
14496 return res;
14497};
14498
14499/**
14500 * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
14501 *
14502 * ```js
14503 * const mm = require('micromatch');
14504 * // mm.some(list, patterns[, options]);
14505 *
14506 * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
14507 * // true
14508 * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
14509 * // false
14510 * ```
14511 * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
14512 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
14513 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14514 * @return {Boolean} Returns true if any patterns match `str`
14515 * @api public
14516 */
14517
14518micromatch.some = (list, patterns, options) => {
14519 let items = [].concat(list);
14520
14521 for (let pattern of [].concat(patterns)) {
14522 let isMatch = picomatch(String(pattern), options);
14523 if (items.some(item => isMatch(item))) {
14524 return true;
14525 }
14526 }
14527 return false;
14528};
14529
14530/**
14531 * Returns true if every string in the given `list` matches
14532 * any of the given glob `patterns`.
14533 *
14534 * ```js
14535 * const mm = require('micromatch');
14536 * // mm.every(list, patterns[, options]);
14537 *
14538 * console.log(mm.every('foo.js', ['foo.js']));
14539 * // true
14540 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
14541 * // true
14542 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
14543 * // false
14544 * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
14545 * // false
14546 * ```
14547 * @param {String|Array} `list` The string or array of strings to test.
14548 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
14549 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14550 * @return {Boolean} Returns true if any patterns match `str`
14551 * @api public
14552 */
14553
14554micromatch.every = (list, patterns, options) => {
14555 let items = [].concat(list);
14556
14557 for (let pattern of [].concat(patterns)) {
14558 let isMatch = picomatch(String(pattern), options);
14559 if (!items.every(item => isMatch(item))) {
14560 return false;
14561 }
14562 }
14563 return true;
14564};
14565
14566/**
14567 * Returns true if **all** of the given `patterns` match
14568 * the specified string.
14569 *
14570 * ```js
14571 * const mm = require('micromatch');
14572 * // mm.all(string, patterns[, options]);
14573 *
14574 * console.log(mm.all('foo.js', ['foo.js']));
14575 * // true
14576 *
14577 * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
14578 * // false
14579 *
14580 * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
14581 * // true
14582 *
14583 * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
14584 * // true
14585 * ```
14586 * @param {String|Array} `str` The string to test.
14587 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
14588 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14589 * @return {Boolean} Returns true if any patterns match `str`
14590 * @api public
14591 */
14592
14593micromatch.all = (str, patterns, options) => {
14594 if (typeof str !== 'string') {
14595 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
14596 }
14597
14598 return [].concat(patterns).every(p => picomatch(p, options)(str));
14599};
14600
14601/**
14602 * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
14603 *
14604 * ```js
14605 * const mm = require('micromatch');
14606 * // mm.capture(pattern, string[, options]);
14607 *
14608 * console.log(mm.capture('test/*.js', 'test/foo.js'));
14609 * //=> ['foo']
14610 * console.log(mm.capture('test/*.js', 'foo/bar.css'));
14611 * //=> null
14612 * ```
14613 * @param {String} `glob` Glob pattern to use for matching.
14614 * @param {String} `input` String to match
14615 * @param {Object} `options` See available [options](#options) for changing how matches are performed
14616 * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
14617 * @api public
14618 */
14619
14620micromatch.capture = (glob, input, options) => {
14621 let posix = utils.isWindows(options);
14622 let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
14623 let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
14624
14625 if (match) {
14626 return match.slice(1).map(v => v === void 0 ? '' : v);
14627 }
14628};
14629
14630/**
14631 * Create a regular expression from the given glob `pattern`.
14632 *
14633 * ```js
14634 * const mm = require('micromatch');
14635 * // mm.makeRe(pattern[, options]);
14636 *
14637 * console.log(mm.makeRe('*.js'));
14638 * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
14639 * ```
14640 * @param {String} `pattern` A glob pattern to convert to regex.
14641 * @param {Object} `options`
14642 * @return {RegExp} Returns a regex created from the given pattern.
14643 * @api public
14644 */
14645
14646micromatch.makeRe = (...args) => picomatch.makeRe(...args);
14647
14648/**
14649 * Scan a glob pattern to separate the pattern into segments. Used
14650 * by the [split](#split) method.
14651 *
14652 * ```js
14653 * const mm = require('micromatch');
14654 * const state = mm.scan(pattern[, options]);
14655 * ```
14656 * @param {String} `pattern`
14657 * @param {Object} `options`
14658 * @return {Object} Returns an object with
14659 * @api public
14660 */
14661
14662micromatch.scan = (...args) => picomatch.scan(...args);
14663
14664/**
14665 * Parse a glob pattern to create the source string for a regular
14666 * expression.
14667 *
14668 * ```js
14669 * const mm = require('micromatch');
14670 * const state = mm(pattern[, options]);
14671 * ```
14672 * @param {String} `glob`
14673 * @param {Object} `options`
14674 * @return {Object} Returns an object with useful properties and output to be used as regex source string.
14675 * @api public
14676 */
14677
14678micromatch.parse = (patterns, options) => {
14679 let res = [];
14680 for (let pattern of [].concat(patterns || [])) {
14681 for (let str of braces(String(pattern), options)) {
14682 res.push(picomatch.parse(str, options));
14683 }
14684 }
14685 return res;
14686};
14687
14688/**
14689 * Process the given brace `pattern`.
14690 *
14691 * ```js
14692 * const { braces } = require('micromatch');
14693 * console.log(braces('foo/{a,b,c}/bar'));
14694 * //=> [ 'foo/(a|b|c)/bar' ]
14695 *
14696 * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
14697 * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
14698 * ```
14699 * @param {String} `pattern` String with brace pattern to process.
14700 * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
14701 * @return {Array}
14702 * @api public
14703 */
14704
14705micromatch.braces = (pattern, options) => {
14706 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
14707 if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
14708 return [pattern];
14709 }
14710 return braces(pattern, options);
14711};
14712
14713/**
14714 * Expand braces
14715 */
14716
14717micromatch.braceExpand = (pattern, options) => {
14718 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
14719 return micromatch.braces(pattern, { ...options, expand: true });
14720};
14721
14722/**
14723 * Expose micromatch
14724 */
14725
14726module.exports = micromatch;
14727
14728
14729/***/ }),
14730/* 65 */
14731/***/ (function(module, exports, __webpack_require__) {
14732
14733"use strict";
14734
14735
14736const stringify = __webpack_require__(66);
14737const compile = __webpack_require__(68);
14738const expand = __webpack_require__(72);
14739const parse = __webpack_require__(73);
14740
14741/**
14742 * Expand the given pattern or create a regex-compatible string.
14743 *
14744 * ```js
14745 * const braces = require('braces');
14746 * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
14747 * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
14748 * ```
14749 * @param {String} `str`
14750 * @param {Object} `options`
14751 * @return {String}
14752 * @api public
14753 */
14754
14755const braces = (input, options = {}) => {
14756 let output = [];
14757
14758 if (Array.isArray(input)) {
14759 for (let pattern of input) {
14760 let result = braces.create(pattern, options);
14761 if (Array.isArray(result)) {
14762 output.push(...result);
14763 } else {
14764 output.push(result);
14765 }
14766 }
14767 } else {
14768 output = [].concat(braces.create(input, options));
14769 }
14770
14771 if (options && options.expand === true && options.nodupes === true) {
14772 output = [...new Set(output)];
14773 }
14774 return output;
14775};
14776
14777/**
14778 * Parse the given `str` with the given `options`.
14779 *
14780 * ```js
14781 * // braces.parse(pattern, [, options]);
14782 * const ast = braces.parse('a/{b,c}/d');
14783 * console.log(ast);
14784 * ```
14785 * @param {String} pattern Brace pattern to parse
14786 * @param {Object} options
14787 * @return {Object} Returns an AST
14788 * @api public
14789 */
14790
14791braces.parse = (input, options = {}) => parse(input, options);
14792
14793/**
14794 * Creates a braces string from an AST, or an AST node.
14795 *
14796 * ```js
14797 * const braces = require('braces');
14798 * let ast = braces.parse('foo/{a,b}/bar');
14799 * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
14800 * ```
14801 * @param {String} `input` Brace pattern or AST.
14802 * @param {Object} `options`
14803 * @return {Array} Returns an array of expanded values.
14804 * @api public
14805 */
14806
14807braces.stringify = (input, options = {}) => {
14808 if (typeof input === 'string') {
14809 return stringify(braces.parse(input, options), options);
14810 }
14811 return stringify(input, options);
14812};
14813
14814/**
14815 * Compiles a brace pattern into a regex-compatible, optimized string.
14816 * This method is called by the main [braces](#braces) function by default.
14817 *
14818 * ```js
14819 * const braces = require('braces');
14820 * console.log(braces.compile('a/{b,c}/d'));
14821 * //=> ['a/(b|c)/d']
14822 * ```
14823 * @param {String} `input` Brace pattern or AST.
14824 * @param {Object} `options`
14825 * @return {Array} Returns an array of expanded values.
14826 * @api public
14827 */
14828
14829braces.compile = (input, options = {}) => {
14830 if (typeof input === 'string') {
14831 input = braces.parse(input, options);
14832 }
14833 return compile(input, options);
14834};
14835
14836/**
14837 * Expands a brace pattern into an array. This method is called by the
14838 * main [braces](#braces) function when `options.expand` is true. Before
14839 * using this method it's recommended that you read the [performance notes](#performance))
14840 * and advantages of using [.compile](#compile) instead.
14841 *
14842 * ```js
14843 * const braces = require('braces');
14844 * console.log(braces.expand('a/{b,c}/d'));
14845 * //=> ['a/b/d', 'a/c/d'];
14846 * ```
14847 * @param {String} `pattern` Brace pattern
14848 * @param {Object} `options`
14849 * @return {Array} Returns an array of expanded values.
14850 * @api public
14851 */
14852
14853braces.expand = (input, options = {}) => {
14854 if (typeof input === 'string') {
14855 input = braces.parse(input, options);
14856 }
14857
14858 let result = expand(input, options);
14859
14860 // filter out empty strings if specified
14861 if (options.noempty === true) {
14862 result = result.filter(Boolean);
14863 }
14864
14865 // filter out duplicates if specified
14866 if (options.nodupes === true) {
14867 result = [...new Set(result)];
14868 }
14869
14870 return result;
14871};
14872
14873/**
14874 * Processes a brace pattern and returns either an expanded array
14875 * (if `options.expand` is true), a highly optimized regex-compatible string.
14876 * This method is called by the main [braces](#braces) function.
14877 *
14878 * ```js
14879 * const braces = require('braces');
14880 * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
14881 * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
14882 * ```
14883 * @param {String} `pattern` Brace pattern
14884 * @param {Object} `options`
14885 * @return {Array} Returns an array of expanded values.
14886 * @api public
14887 */
14888
14889braces.create = (input, options = {}) => {
14890 if (input === '' || input.length < 3) {
14891 return [input];
14892 }
14893
14894 return options.expand !== true
14895 ? braces.compile(input, options)
14896 : braces.expand(input, options);
14897};
14898
14899/**
14900 * Expose "braces"
14901 */
14902
14903module.exports = braces;
14904
14905
14906/***/ }),
14907/* 66 */
14908/***/ (function(module, exports, __webpack_require__) {
14909
14910"use strict";
14911
14912
14913const utils = __webpack_require__(67);
14914
14915module.exports = (ast, options = {}) => {
14916 let stringify = (node, parent = {}) => {
14917 let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
14918 let invalidNode = node.invalid === true && options.escapeInvalid === true;
14919 let output = '';
14920
14921 if (node.value) {
14922 if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
14923 return '\\' + node.value;
14924 }
14925 return node.value;
14926 }
14927
14928 if (node.value) {
14929 return node.value;
14930 }
14931
14932 if (node.nodes) {
14933 for (let child of node.nodes) {
14934 output += stringify(child);
14935 }
14936 }
14937 return output;
14938 };
14939
14940 return stringify(ast);
14941};
14942
14943
14944
14945/***/ }),
14946/* 67 */
14947/***/ (function(module, exports, __webpack_require__) {
14948
14949"use strict";
14950
14951
14952exports.isInteger = num => {
14953 if (typeof num === 'number') {
14954 return Number.isInteger(num);
14955 }
14956 if (typeof num === 'string' && num.trim() !== '') {
14957 return Number.isInteger(Number(num));
14958 }
14959 return false;
14960};
14961
14962/**
14963 * Find a node of the given type
14964 */
14965
14966exports.find = (node, type) => node.nodes.find(node => node.type === type);
14967
14968/**
14969 * Find a node of the given type
14970 */
14971
14972exports.exceedsLimit = (min, max, step = 1, limit) => {
14973 if (limit === false) return false;
14974 if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
14975 return ((Number(max) - Number(min)) / Number(step)) >= limit;
14976};
14977
14978/**
14979 * Escape the given node with '\\' before node.value
14980 */
14981
14982exports.escapeNode = (block, n = 0, type) => {
14983 let node = block.nodes[n];
14984 if (!node) return;
14985
14986 if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
14987 if (node.escaped !== true) {
14988 node.value = '\\' + node.value;
14989 node.escaped = true;
14990 }
14991 }
14992};
14993
14994/**
14995 * Returns true if the given brace node should be enclosed in literal braces
14996 */
14997
14998exports.encloseBrace = node => {
14999 if (node.type !== 'brace') return false;
15000 if ((node.commas >> 0 + node.ranges >> 0) === 0) {
15001 node.invalid = true;
15002 return true;
15003 }
15004 return false;
15005};
15006
15007/**
15008 * Returns true if a brace node is invalid.
15009 */
15010
15011exports.isInvalidBrace = block => {
15012 if (block.type !== 'brace') return false;
15013 if (block.invalid === true || block.dollar) return true;
15014 if ((block.commas >> 0 + block.ranges >> 0) === 0) {
15015 block.invalid = true;
15016 return true;
15017 }
15018 if (block.open !== true || block.close !== true) {
15019 block.invalid = true;
15020 return true;
15021 }
15022 return false;
15023};
15024
15025/**
15026 * Returns true if a node is an open or close node
15027 */
15028
15029exports.isOpenOrClose = node => {
15030 if (node.type === 'open' || node.type === 'close') {
15031 return true;
15032 }
15033 return node.open === true || node.close === true;
15034};
15035
15036/**
15037 * Reduce an array of text nodes.
15038 */
15039
15040exports.reduce = nodes => nodes.reduce((acc, node) => {
15041 if (node.type === 'text') acc.push(node.value);
15042 if (node.type === 'range') node.type = 'text';
15043 return acc;
15044}, []);
15045
15046/**
15047 * Flatten an array
15048 */
15049
15050exports.flatten = (...args) => {
15051 const result = [];
15052 const flat = arr => {
15053 for (let i = 0; i < arr.length; i++) {
15054 let ele = arr[i];
15055 Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
15056 }
15057 return result;
15058 };
15059 flat(args);
15060 return result;
15061};
15062
15063
15064/***/ }),
15065/* 68 */
15066/***/ (function(module, exports, __webpack_require__) {
15067
15068"use strict";
15069
15070
15071const fill = __webpack_require__(69);
15072const utils = __webpack_require__(67);
15073
15074const compile = (ast, options = {}) => {
15075 let walk = (node, parent = {}) => {
15076 let invalidBlock = utils.isInvalidBrace(parent);
15077 let invalidNode = node.invalid === true && options.escapeInvalid === true;
15078 let invalid = invalidBlock === true || invalidNode === true;
15079 let prefix = options.escapeInvalid === true ? '\\' : '';
15080 let output = '';
15081
15082 if (node.isOpen === true) {
15083 return prefix + node.value;
15084 }
15085 if (node.isClose === true) {
15086 return prefix + node.value;
15087 }
15088
15089 if (node.type === 'open') {
15090 return invalid ? (prefix + node.value) : '(';
15091 }
15092
15093 if (node.type === 'close') {
15094 return invalid ? (prefix + node.value) : ')';
15095 }
15096
15097 if (node.type === 'comma') {
15098 return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
15099 }
15100
15101 if (node.value) {
15102 return node.value;
15103 }
15104
15105 if (node.nodes && node.ranges > 0) {
15106 let args = utils.reduce(node.nodes);
15107 let range = fill(...args, { ...options, wrap: false, toRegex: true });
15108
15109 if (range.length !== 0) {
15110 return args.length > 1 && range.length > 1 ? `(${range})` : range;
15111 }
15112 }
15113
15114 if (node.nodes) {
15115 for (let child of node.nodes) {
15116 output += walk(child, node);
15117 }
15118 }
15119 return output;
15120 };
15121
15122 return walk(ast);
15123};
15124
15125module.exports = compile;
15126
15127
15128/***/ }),
15129/* 69 */
15130/***/ (function(module, exports, __webpack_require__) {
15131
15132"use strict";
15133/*!
15134 * fill-range <https://github.com/jonschlinkert/fill-range>
15135 *
15136 * Copyright (c) 2014-present, Jon Schlinkert.
15137 * Licensed under the MIT License.
15138 */
15139
15140
15141
15142const util = __webpack_require__(42);
15143const toRegexRange = __webpack_require__(70);
15144
15145const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
15146
15147const transform = toNumber => {
15148 return value => toNumber === true ? Number(value) : String(value);
15149};
15150
15151const isValidValue = value => {
15152 return typeof value === 'number' || (typeof value === 'string' && value !== '');
15153};
15154
15155const isNumber = num => Number.isInteger(+num);
15156
15157const zeros = input => {
15158 let value = `${input}`;
15159 let index = -1;
15160 if (value[0] === '-') value = value.slice(1);
15161 if (value === '0') return false;
15162 while (value[++index] === '0');
15163 return index > 0;
15164};
15165
15166const stringify = (start, end, options) => {
15167 if (typeof start === 'string' || typeof end === 'string') {
15168 return true;
15169 }
15170 return options.stringify === true;
15171};
15172
15173const pad = (input, maxLength, toNumber) => {
15174 if (maxLength > 0) {
15175 let dash = input[0] === '-' ? '-' : '';
15176 if (dash) input = input.slice(1);
15177 input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
15178 }
15179 if (toNumber === false) {
15180 return String(input);
15181 }
15182 return input;
15183};
15184
15185const toMaxLen = (input, maxLength) => {
15186 let negative = input[0] === '-' ? '-' : '';
15187 if (negative) {
15188 input = input.slice(1);
15189 maxLength--;
15190 }
15191 while (input.length < maxLength) input = '0' + input;
15192 return negative ? ('-' + input) : input;
15193};
15194
15195const toSequence = (parts, options) => {
15196 parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
15197 parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
15198
15199 let prefix = options.capture ? '' : '?:';
15200 let positives = '';
15201 let negatives = '';
15202 let result;
15203
15204 if (parts.positives.length) {
15205 positives = parts.positives.join('|');
15206 }
15207
15208 if (parts.negatives.length) {
15209 negatives = `-(${prefix}${parts.negatives.join('|')})`;
15210 }
15211
15212 if (positives && negatives) {
15213 result = `${positives}|${negatives}`;
15214 } else {
15215 result = positives || negatives;
15216 }
15217
15218 if (options.wrap) {
15219 return `(${prefix}${result})`;
15220 }
15221
15222 return result;
15223};
15224
15225const toRange = (a, b, isNumbers, options) => {
15226 if (isNumbers) {
15227 return toRegexRange(a, b, { wrap: false, ...options });
15228 }
15229
15230 let start = String.fromCharCode(a);
15231 if (a === b) return start;
15232
15233 let stop = String.fromCharCode(b);
15234 return `[${start}-${stop}]`;
15235};
15236
15237const toRegex = (start, end, options) => {
15238 if (Array.isArray(start)) {
15239 let wrap = options.wrap === true;
15240 let prefix = options.capture ? '' : '?:';
15241 return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
15242 }
15243 return toRegexRange(start, end, options);
15244};
15245
15246const rangeError = (...args) => {
15247 return new RangeError('Invalid range arguments: ' + util.inspect(...args));
15248};
15249
15250const invalidRange = (start, end, options) => {
15251 if (options.strictRanges === true) throw rangeError([start, end]);
15252 return [];
15253};
15254
15255const invalidStep = (step, options) => {
15256 if (options.strictRanges === true) {
15257 throw new TypeError(`Expected step "${step}" to be a number`);
15258 }
15259 return [];
15260};
15261
15262const fillNumbers = (start, end, step = 1, options = {}) => {
15263 let a = Number(start);
15264 let b = Number(end);
15265
15266 if (!Number.isInteger(a) || !Number.isInteger(b)) {
15267 if (options.strictRanges === true) throw rangeError([start, end]);
15268 return [];
15269 }
15270
15271 // fix negative zero
15272 if (a === 0) a = 0;
15273 if (b === 0) b = 0;
15274
15275 let descending = a > b;
15276 let startString = String(start);
15277 let endString = String(end);
15278 let stepString = String(step);
15279 step = Math.max(Math.abs(step), 1);
15280
15281 let padded = zeros(startString) || zeros(endString) || zeros(stepString);
15282 let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
15283 let toNumber = padded === false && stringify(start, end, options) === false;
15284 let format = options.transform || transform(toNumber);
15285
15286 if (options.toRegex && step === 1) {
15287 return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
15288 }
15289
15290 let parts = { negatives: [], positives: [] };
15291 let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
15292 let range = [];
15293 let index = 0;
15294
15295 while (descending ? a >= b : a <= b) {
15296 if (options.toRegex === true && step > 1) {
15297 push(a);
15298 } else {
15299 range.push(pad(format(a, index), maxLen, toNumber));
15300 }
15301 a = descending ? a - step : a + step;
15302 index++;
15303 }
15304
15305 if (options.toRegex === true) {
15306 return step > 1
15307 ? toSequence(parts, options)
15308 : toRegex(range, null, { wrap: false, ...options });
15309 }
15310
15311 return range;
15312};
15313
15314const fillLetters = (start, end, step = 1, options = {}) => {
15315 if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
15316 return invalidRange(start, end, options);
15317 }
15318
15319
15320 let format = options.transform || (val => String.fromCharCode(val));
15321 let a = `${start}`.charCodeAt(0);
15322 let b = `${end}`.charCodeAt(0);
15323
15324 let descending = a > b;
15325 let min = Math.min(a, b);
15326 let max = Math.max(a, b);
15327
15328 if (options.toRegex && step === 1) {
15329 return toRange(min, max, false, options);
15330 }
15331
15332 let range = [];
15333 let index = 0;
15334
15335 while (descending ? a >= b : a <= b) {
15336 range.push(format(a, index));
15337 a = descending ? a - step : a + step;
15338 index++;
15339 }
15340
15341 if (options.toRegex === true) {
15342 return toRegex(range, null, { wrap: false, options });
15343 }
15344
15345 return range;
15346};
15347
15348const fill = (start, end, step, options = {}) => {
15349 if (end == null && isValidValue(start)) {
15350 return [start];
15351 }
15352
15353 if (!isValidValue(start) || !isValidValue(end)) {
15354 return invalidRange(start, end, options);
15355 }
15356
15357 if (typeof step === 'function') {
15358 return fill(start, end, 1, { transform: step });
15359 }
15360
15361 if (isObject(step)) {
15362 return fill(start, end, 0, step);
15363 }
15364
15365 let opts = { ...options };
15366 if (opts.capture === true) opts.wrap = true;
15367 step = step || opts.step || 1;
15368
15369 if (!isNumber(step)) {
15370 if (step != null && !isObject(step)) return invalidStep(step, opts);
15371 return fill(start, end, 1, step);
15372 }
15373
15374 if (isNumber(start) && isNumber(end)) {
15375 return fillNumbers(start, end, step, opts);
15376 }
15377
15378 return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
15379};
15380
15381module.exports = fill;
15382
15383
15384/***/ }),
15385/* 70 */
15386/***/ (function(module, exports, __webpack_require__) {
15387
15388"use strict";
15389/*!
15390 * to-regex-range <https://github.com/micromatch/to-regex-range>
15391 *
15392 * Copyright (c) 2015-present, Jon Schlinkert.
15393 * Released under the MIT License.
15394 */
15395
15396
15397
15398const isNumber = __webpack_require__(71);
15399
15400const toRegexRange = (min, max, options) => {
15401 if (isNumber(min) === false) {
15402 throw new TypeError('toRegexRange: expected the first argument to be a number');
15403 }
15404
15405 if (max === void 0 || min === max) {
15406 return String(min);
15407 }
15408
15409 if (isNumber(max) === false) {
15410 throw new TypeError('toRegexRange: expected the second argument to be a number.');
15411 }
15412
15413 let opts = { relaxZeros: true, ...options };
15414 if (typeof opts.strictZeros === 'boolean') {
15415 opts.relaxZeros = opts.strictZeros === false;
15416 }
15417
15418 let relax = String(opts.relaxZeros);
15419 let shorthand = String(opts.shorthand);
15420 let capture = String(opts.capture);
15421 let wrap = String(opts.wrap);
15422 let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
15423
15424 if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
15425 return toRegexRange.cache[cacheKey].result;
15426 }
15427
15428 let a = Math.min(min, max);
15429 let b = Math.max(min, max);
15430
15431 if (Math.abs(a - b) === 1) {
15432 let result = min + '|' + max;
15433 if (opts.capture) {
15434 return `(${result})`;
15435 }
15436 if (opts.wrap === false) {
15437 return result;
15438 }
15439 return `(?:${result})`;
15440 }
15441
15442 let isPadded = hasPadding(min) || hasPadding(max);
15443 let state = { min, max, a, b };
15444 let positives = [];
15445 let negatives = [];
15446
15447 if (isPadded) {
15448 state.isPadded = isPadded;
15449 state.maxLen = String(state.max).length;
15450 }
15451
15452 if (a < 0) {
15453 let newMin = b < 0 ? Math.abs(b) : 1;
15454 negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
15455 a = state.a = 0;
15456 }
15457
15458 if (b >= 0) {
15459 positives = splitToPatterns(a, b, state, opts);
15460 }
15461
15462 state.negatives = negatives;
15463 state.positives = positives;
15464 state.result = collatePatterns(negatives, positives, opts);
15465
15466 if (opts.capture === true) {
15467 state.result = `(${state.result})`;
15468 } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
15469 state.result = `(?:${state.result})`;
15470 }
15471
15472 toRegexRange.cache[cacheKey] = state;
15473 return state.result;
15474};
15475
15476function collatePatterns(neg, pos, options) {
15477 let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
15478 let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
15479 let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
15480 let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
15481 return subpatterns.join('|');
15482}
15483
15484function splitToRanges(min, max) {
15485 let nines = 1;
15486 let zeros = 1;
15487
15488 let stop = countNines(min, nines);
15489 let stops = new Set([max]);
15490
15491 while (min <= stop && stop <= max) {
15492 stops.add(stop);
15493 nines += 1;
15494 stop = countNines(min, nines);
15495 }
15496
15497 stop = countZeros(max + 1, zeros) - 1;
15498
15499 while (min < stop && stop <= max) {
15500 stops.add(stop);
15501 zeros += 1;
15502 stop = countZeros(max + 1, zeros) - 1;
15503 }
15504
15505 stops = [...stops];
15506 stops.sort(compare);
15507 return stops;
15508}
15509
15510/**
15511 * Convert a range to a regex pattern
15512 * @param {Number} `start`
15513 * @param {Number} `stop`
15514 * @return {String}
15515 */
15516
15517function rangeToPattern(start, stop, options) {
15518 if (start === stop) {
15519 return { pattern: start, count: [], digits: 0 };
15520 }
15521
15522 let zipped = zip(start, stop);
15523 let digits = zipped.length;
15524 let pattern = '';
15525 let count = 0;
15526
15527 for (let i = 0; i < digits; i++) {
15528 let [startDigit, stopDigit] = zipped[i];
15529
15530 if (startDigit === stopDigit) {
15531 pattern += startDigit;
15532
15533 } else if (startDigit !== '0' || stopDigit !== '9') {
15534 pattern += toCharacterClass(startDigit, stopDigit, options);
15535
15536 } else {
15537 count++;
15538 }
15539 }
15540
15541 if (count) {
15542 pattern += options.shorthand === true ? '\\d' : '[0-9]';
15543 }
15544
15545 return { pattern, count: [count], digits };
15546}
15547
15548function splitToPatterns(min, max, tok, options) {
15549 let ranges = splitToRanges(min, max);
15550 let tokens = [];
15551 let start = min;
15552 let prev;
15553
15554 for (let i = 0; i < ranges.length; i++) {
15555 let max = ranges[i];
15556 let obj = rangeToPattern(String(start), String(max), options);
15557 let zeros = '';
15558
15559 if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
15560 if (prev.count.length > 1) {
15561 prev.count.pop();
15562 }
15563
15564 prev.count.push(obj.count[0]);
15565 prev.string = prev.pattern + toQuantifier(prev.count);
15566 start = max + 1;
15567 continue;
15568 }
15569
15570 if (tok.isPadded) {
15571 zeros = padZeros(max, tok, options);
15572 }
15573
15574 obj.string = zeros + obj.pattern + toQuantifier(obj.count);
15575 tokens.push(obj);
15576 start = max + 1;
15577 prev = obj;
15578 }
15579
15580 return tokens;
15581}
15582
15583function filterPatterns(arr, comparison, prefix, intersection, options) {
15584 let result = [];
15585
15586 for (let ele of arr) {
15587 let { string } = ele;
15588
15589 // only push if _both_ are negative...
15590 if (!intersection && !contains(comparison, 'string', string)) {
15591 result.push(prefix + string);
15592 }
15593
15594 // or _both_ are positive
15595 if (intersection && contains(comparison, 'string', string)) {
15596 result.push(prefix + string);
15597 }
15598 }
15599 return result;
15600}
15601
15602/**
15603 * Zip strings
15604 */
15605
15606function zip(a, b) {
15607 let arr = [];
15608 for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
15609 return arr;
15610}
15611
15612function compare(a, b) {
15613 return a > b ? 1 : b > a ? -1 : 0;
15614}
15615
15616function contains(arr, key, val) {
15617 return arr.some(ele => ele[key] === val);
15618}
15619
15620function countNines(min, len) {
15621 return Number(String(min).slice(0, -len) + '9'.repeat(len));
15622}
15623
15624function countZeros(integer, zeros) {
15625 return integer - (integer % Math.pow(10, zeros));
15626}
15627
15628function toQuantifier(digits) {
15629 let [start = 0, stop = ''] = digits;
15630 if (stop || start > 1) {
15631 return `{${start + (stop ? ',' + stop : '')}}`;
15632 }
15633 return '';
15634}
15635
15636function toCharacterClass(a, b, options) {
15637 return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
15638}
15639
15640function hasPadding(str) {
15641 return /^-?(0+)\d/.test(str);
15642}
15643
15644function padZeros(value, tok, options) {
15645 if (!tok.isPadded) {
15646 return value;
15647 }
15648
15649 let diff = Math.abs(tok.maxLen - String(value).length);
15650 let relax = options.relaxZeros !== false;
15651
15652 switch (diff) {
15653 case 0:
15654 return '';
15655 case 1:
15656 return relax ? '0?' : '0';
15657 case 2:
15658 return relax ? '0{0,2}' : '00';
15659 default: {
15660 return relax ? `0{0,${diff}}` : `0{${diff}}`;
15661 }
15662 }
15663}
15664
15665/**
15666 * Cache
15667 */
15668
15669toRegexRange.cache = {};
15670toRegexRange.clearCache = () => (toRegexRange.cache = {});
15671
15672/**
15673 * Expose `toRegexRange`
15674 */
15675
15676module.exports = toRegexRange;
15677
15678
15679/***/ }),
15680/* 71 */
15681/***/ (function(module, exports, __webpack_require__) {
15682
15683"use strict";
15684/*!
15685 * is-number <https://github.com/jonschlinkert/is-number>
15686 *
15687 * Copyright (c) 2014-present, Jon Schlinkert.
15688 * Released under the MIT License.
15689 */
15690
15691
15692
15693module.exports = function(num) {
15694 if (typeof num === 'number') {
15695 return num - num === 0;
15696 }
15697 if (typeof num === 'string' && num.trim() !== '') {
15698 return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
15699 }
15700 return false;
15701};
15702
15703
15704/***/ }),
15705/* 72 */
15706/***/ (function(module, exports, __webpack_require__) {
15707
15708"use strict";
15709
15710
15711const fill = __webpack_require__(69);
15712const stringify = __webpack_require__(66);
15713const utils = __webpack_require__(67);
15714
15715const append = (queue = '', stash = '', enclose = false) => {
15716 let result = [];
15717
15718 queue = [].concat(queue);
15719 stash = [].concat(stash);
15720
15721 if (!stash.length) return queue;
15722 if (!queue.length) {
15723 return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
15724 }
15725
15726 for (let item of queue) {
15727 if (Array.isArray(item)) {
15728 for (let value of item) {
15729 result.push(append(value, stash, enclose));
15730 }
15731 } else {
15732 for (let ele of stash) {
15733 if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
15734 result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
15735 }
15736 }
15737 }
15738 return utils.flatten(result);
15739};
15740
15741const expand = (ast, options = {}) => {
15742 let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
15743
15744 let walk = (node, parent = {}) => {
15745 node.queue = [];
15746
15747 let p = parent;
15748 let q = parent.queue;
15749
15750 while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
15751 p = p.parent;
15752 q = p.queue;
15753 }
15754
15755 if (node.invalid || node.dollar) {
15756 q.push(append(q.pop(), stringify(node, options)));
15757 return;
15758 }
15759
15760 if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
15761 q.push(append(q.pop(), ['{}']));
15762 return;
15763 }
15764
15765 if (node.nodes && node.ranges > 0) {
15766 let args = utils.reduce(node.nodes);
15767
15768 if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
15769 throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
15770 }
15771
15772 let range = fill(...args, options);
15773 if (range.length === 0) {
15774 range = stringify(node, options);
15775 }
15776
15777 q.push(append(q.pop(), range));
15778 node.nodes = [];
15779 return;
15780 }
15781
15782 let enclose = utils.encloseBrace(node);
15783 let queue = node.queue;
15784 let block = node;
15785
15786 while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
15787 block = block.parent;
15788 queue = block.queue;
15789 }
15790
15791 for (let i = 0; i < node.nodes.length; i++) {
15792 let child = node.nodes[i];
15793
15794 if (child.type === 'comma' && node.type === 'brace') {
15795 if (i === 1) queue.push('');
15796 queue.push('');
15797 continue;
15798 }
15799
15800 if (child.type === 'close') {
15801 q.push(append(q.pop(), queue, enclose));
15802 continue;
15803 }
15804
15805 if (child.value && child.type !== 'open') {
15806 queue.push(append(queue.pop(), child.value));
15807 continue;
15808 }
15809
15810 if (child.nodes) {
15811 walk(child, node);
15812 }
15813 }
15814
15815 return queue;
15816 };
15817
15818 return utils.flatten(walk(ast));
15819};
15820
15821module.exports = expand;
15822
15823
15824/***/ }),
15825/* 73 */
15826/***/ (function(module, exports, __webpack_require__) {
15827
15828"use strict";
15829
15830
15831const stringify = __webpack_require__(66);
15832
15833/**
15834 * Constants
15835 */
15836
15837const {
15838 MAX_LENGTH,
15839 CHAR_BACKSLASH, /* \ */
15840 CHAR_BACKTICK, /* ` */
15841 CHAR_COMMA, /* , */
15842 CHAR_DOT, /* . */
15843 CHAR_LEFT_PARENTHESES, /* ( */
15844 CHAR_RIGHT_PARENTHESES, /* ) */
15845 CHAR_LEFT_CURLY_BRACE, /* { */
15846 CHAR_RIGHT_CURLY_BRACE, /* } */
15847 CHAR_LEFT_SQUARE_BRACKET, /* [ */
15848 CHAR_RIGHT_SQUARE_BRACKET, /* ] */
15849 CHAR_DOUBLE_QUOTE, /* " */
15850 CHAR_SINGLE_QUOTE, /* ' */
15851 CHAR_NO_BREAK_SPACE,
15852 CHAR_ZERO_WIDTH_NOBREAK_SPACE
15853} = __webpack_require__(74);
15854
15855/**
15856 * parse
15857 */
15858
15859const parse = (input, options = {}) => {
15860 if (typeof input !== 'string') {
15861 throw new TypeError('Expected a string');
15862 }
15863
15864 let opts = options || {};
15865 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
15866 if (input.length > max) {
15867 throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
15868 }
15869
15870 let ast = { type: 'root', input, nodes: [] };
15871 let stack = [ast];
15872 let block = ast;
15873 let prev = ast;
15874 let brackets = 0;
15875 let length = input.length;
15876 let index = 0;
15877 let depth = 0;
15878 let value;
15879 let memo = {};
15880
15881 /**
15882 * Helpers
15883 */
15884
15885 const advance = () => input[index++];
15886 const push = node => {
15887 if (node.type === 'text' && prev.type === 'dot') {
15888 prev.type = 'text';
15889 }
15890
15891 if (prev && prev.type === 'text' && node.type === 'text') {
15892 prev.value += node.value;
15893 return;
15894 }
15895
15896 block.nodes.push(node);
15897 node.parent = block;
15898 node.prev = prev;
15899 prev = node;
15900 return node;
15901 };
15902
15903 push({ type: 'bos' });
15904
15905 while (index < length) {
15906 block = stack[stack.length - 1];
15907 value = advance();
15908
15909 /**
15910 * Invalid chars
15911 */
15912
15913 if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
15914 continue;
15915 }
15916
15917 /**
15918 * Escaped chars
15919 */
15920
15921 if (value === CHAR_BACKSLASH) {
15922 push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
15923 continue;
15924 }
15925
15926 /**
15927 * Right square bracket (literal): ']'
15928 */
15929
15930 if (value === CHAR_RIGHT_SQUARE_BRACKET) {
15931 push({ type: 'text', value: '\\' + value });
15932 continue;
15933 }
15934
15935 /**
15936 * Left square bracket: '['
15937 */
15938
15939 if (value === CHAR_LEFT_SQUARE_BRACKET) {
15940 brackets++;
15941
15942 let closed = true;
15943 let next;
15944
15945 while (index < length && (next = advance())) {
15946 value += next;
15947
15948 if (next === CHAR_LEFT_SQUARE_BRACKET) {
15949 brackets++;
15950 continue;
15951 }
15952
15953 if (next === CHAR_BACKSLASH) {
15954 value += advance();
15955 continue;
15956 }
15957
15958 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
15959 brackets--;
15960
15961 if (brackets === 0) {
15962 break;
15963 }
15964 }
15965 }
15966
15967 push({ type: 'text', value });
15968 continue;
15969 }
15970
15971 /**
15972 * Parentheses
15973 */
15974
15975 if (value === CHAR_LEFT_PARENTHESES) {
15976 block = push({ type: 'paren', nodes: [] });
15977 stack.push(block);
15978 push({ type: 'text', value });
15979 continue;
15980 }
15981
15982 if (value === CHAR_RIGHT_PARENTHESES) {
15983 if (block.type !== 'paren') {
15984 push({ type: 'text', value });
15985 continue;
15986 }
15987 block = stack.pop();
15988 push({ type: 'text', value });
15989 block = stack[stack.length - 1];
15990 continue;
15991 }
15992
15993 /**
15994 * Quotes: '|"|`
15995 */
15996
15997 if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
15998 let open = value;
15999 let next;
16000
16001 if (options.keepQuotes !== true) {
16002 value = '';
16003 }
16004
16005 while (index < length && (next = advance())) {
16006 if (next === CHAR_BACKSLASH) {
16007 value += next + advance();
16008 continue;
16009 }
16010
16011 if (next === open) {
16012 if (options.keepQuotes === true) value += next;
16013 break;
16014 }
16015
16016 value += next;
16017 }
16018
16019 push({ type: 'text', value });
16020 continue;
16021 }
16022
16023 /**
16024 * Left curly brace: '{'
16025 */
16026
16027 if (value === CHAR_LEFT_CURLY_BRACE) {
16028 depth++;
16029
16030 let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
16031 let brace = {
16032 type: 'brace',
16033 open: true,
16034 close: false,
16035 dollar,
16036 depth,
16037 commas: 0,
16038 ranges: 0,
16039 nodes: []
16040 };
16041
16042 block = push(brace);
16043 stack.push(block);
16044 push({ type: 'open', value });
16045 continue;
16046 }
16047
16048 /**
16049 * Right curly brace: '}'
16050 */
16051
16052 if (value === CHAR_RIGHT_CURLY_BRACE) {
16053 if (block.type !== 'brace') {
16054 push({ type: 'text', value });
16055 continue;
16056 }
16057
16058 let type = 'close';
16059 block = stack.pop();
16060 block.close = true;
16061
16062 push({ type, value });
16063 depth--;
16064
16065 block = stack[stack.length - 1];
16066 continue;
16067 }
16068
16069 /**
16070 * Comma: ','
16071 */
16072
16073 if (value === CHAR_COMMA && depth > 0) {
16074 if (block.ranges > 0) {
16075 block.ranges = 0;
16076 let open = block.nodes.shift();
16077 block.nodes = [open, { type: 'text', value: stringify(block) }];
16078 }
16079
16080 push({ type: 'comma', value });
16081 block.commas++;
16082 continue;
16083 }
16084
16085 /**
16086 * Dot: '.'
16087 */
16088
16089 if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
16090 let siblings = block.nodes;
16091
16092 if (depth === 0 || siblings.length === 0) {
16093 push({ type: 'text', value });
16094 continue;
16095 }
16096
16097 if (prev.type === 'dot') {
16098 block.range = [];
16099 prev.value += value;
16100 prev.type = 'range';
16101
16102 if (block.nodes.length !== 3 && block.nodes.length !== 5) {
16103 block.invalid = true;
16104 block.ranges = 0;
16105 prev.type = 'text';
16106 continue;
16107 }
16108
16109 block.ranges++;
16110 block.args = [];
16111 continue;
16112 }
16113
16114 if (prev.type === 'range') {
16115 siblings.pop();
16116
16117 let before = siblings[siblings.length - 1];
16118 before.value += prev.value + value;
16119 prev = before;
16120 block.ranges--;
16121 continue;
16122 }
16123
16124 push({ type: 'dot', value });
16125 continue;
16126 }
16127
16128 /**
16129 * Text
16130 */
16131
16132 push({ type: 'text', value });
16133 }
16134
16135 // Mark imbalanced braces and brackets as invalid
16136 do {
16137 block = stack.pop();
16138
16139 if (block.type !== 'root') {
16140 block.nodes.forEach(node => {
16141 if (!node.nodes) {
16142 if (node.type === 'open') node.isOpen = true;
16143 if (node.type === 'close') node.isClose = true;
16144 if (!node.nodes) node.type = 'text';
16145 node.invalid = true;
16146 }
16147 });
16148
16149 // get the location of the block on parent.nodes (block's siblings)
16150 let parent = stack[stack.length - 1];
16151 let index = parent.nodes.indexOf(block);
16152 // replace the (invalid) block with it's nodes
16153 parent.nodes.splice(index, 1, ...block.nodes);
16154 }
16155 } while (stack.length > 0);
16156
16157 push({ type: 'eos' });
16158 return ast;
16159};
16160
16161module.exports = parse;
16162
16163
16164/***/ }),
16165/* 74 */
16166/***/ (function(module, exports, __webpack_require__) {
16167
16168"use strict";
16169
16170
16171module.exports = {
16172 MAX_LENGTH: 1024 * 64,
16173
16174 // Digits
16175 CHAR_0: '0', /* 0 */
16176 CHAR_9: '9', /* 9 */
16177
16178 // Alphabet chars.
16179 CHAR_UPPERCASE_A: 'A', /* A */
16180 CHAR_LOWERCASE_A: 'a', /* a */
16181 CHAR_UPPERCASE_Z: 'Z', /* Z */
16182 CHAR_LOWERCASE_Z: 'z', /* z */
16183
16184 CHAR_LEFT_PARENTHESES: '(', /* ( */
16185 CHAR_RIGHT_PARENTHESES: ')', /* ) */
16186
16187 CHAR_ASTERISK: '*', /* * */
16188
16189 // Non-alphabetic chars.
16190 CHAR_AMPERSAND: '&', /* & */
16191 CHAR_AT: '@', /* @ */
16192 CHAR_BACKSLASH: '\\', /* \ */
16193 CHAR_BACKTICK: '`', /* ` */
16194 CHAR_CARRIAGE_RETURN: '\r', /* \r */
16195 CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
16196 CHAR_COLON: ':', /* : */
16197 CHAR_COMMA: ',', /* , */
16198 CHAR_DOLLAR: '$', /* . */
16199 CHAR_DOT: '.', /* . */
16200 CHAR_DOUBLE_QUOTE: '"', /* " */
16201 CHAR_EQUAL: '=', /* = */
16202 CHAR_EXCLAMATION_MARK: '!', /* ! */
16203 CHAR_FORM_FEED: '\f', /* \f */
16204 CHAR_FORWARD_SLASH: '/', /* / */
16205 CHAR_HASH: '#', /* # */
16206 CHAR_HYPHEN_MINUS: '-', /* - */
16207 CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
16208 CHAR_LEFT_CURLY_BRACE: '{', /* { */
16209 CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
16210 CHAR_LINE_FEED: '\n', /* \n */
16211 CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
16212 CHAR_PERCENT: '%', /* % */
16213 CHAR_PLUS: '+', /* + */
16214 CHAR_QUESTION_MARK: '?', /* ? */
16215 CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
16216 CHAR_RIGHT_CURLY_BRACE: '}', /* } */
16217 CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
16218 CHAR_SEMICOLON: ';', /* ; */
16219 CHAR_SINGLE_QUOTE: '\'', /* ' */
16220 CHAR_SPACE: ' ', /* */
16221 CHAR_TAB: '\t', /* \t */
16222 CHAR_UNDERSCORE: '_', /* _ */
16223 CHAR_VERTICAL_LINE: '|', /* | */
16224 CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
16225};
16226
16227
16228/***/ }),
16229/* 75 */
16230/***/ (function(module, exports, __webpack_require__) {
16231
16232"use strict";
16233
16234
16235module.exports = __webpack_require__(76);
16236
16237
16238/***/ }),
16239/* 76 */
16240/***/ (function(module, exports, __webpack_require__) {
16241
16242"use strict";
16243
16244
16245const path = __webpack_require__(15);
16246const scan = __webpack_require__(77);
16247const parse = __webpack_require__(80);
16248const utils = __webpack_require__(78);
16249
16250/**
16251 * Creates a matcher function from one or more glob patterns. The
16252 * returned function takes a string to match as its first argument,
16253 * and returns true if the string is a match. The returned matcher
16254 * function also takes a boolean as the second argument that, when true,
16255 * returns an object with additional information.
16256 *
16257 * ```js
16258 * const picomatch = require('picomatch');
16259 * // picomatch(glob[, options]);
16260 *
16261 * const isMatch = picomatch('*.!(*a)');
16262 * console.log(isMatch('a.a')); //=> false
16263 * console.log(isMatch('a.b')); //=> true
16264 * ```
16265 * @name picomatch
16266 * @param {String|Array} `globs` One or more glob patterns.
16267 * @param {Object=} `options`
16268 * @return {Function=} Returns a matcher function.
16269 * @api public
16270 */
16271
16272const picomatch = (glob, options, returnState = false) => {
16273 if (Array.isArray(glob)) {
16274 let fns = glob.map(input => picomatch(input, options, returnState));
16275 return str => {
16276 for (let isMatch of fns) {
16277 let state = isMatch(str);
16278 if (state) return state;
16279 }
16280 return false;
16281 };
16282 }
16283
16284 if (typeof glob !== 'string' || glob === '') {
16285 throw new TypeError('Expected pattern to be a non-empty string');
16286 }
16287
16288 let opts = options || {};
16289 let posix = utils.isWindows(options);
16290 let regex = picomatch.makeRe(glob, options, false, true);
16291 let state = regex.state;
16292 delete regex.state;
16293
16294 let isIgnored = () => false;
16295 if (opts.ignore) {
16296 let ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
16297 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
16298 }
16299
16300 const matcher = (input, returnObject = false) => {
16301 let { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
16302 let result = { glob, state, regex, posix, input, output, match, isMatch };
16303
16304 if (typeof opts.onResult === 'function') {
16305 opts.onResult(result);
16306 }
16307
16308 if (isMatch === false) {
16309 result.isMatch = false;
16310 return returnObject ? result : false;
16311 }
16312
16313 if (isIgnored(input)) {
16314 if (typeof opts.onIgnore === 'function') {
16315 opts.onIgnore(result);
16316 }
16317 result.isMatch = false;
16318 return returnObject ? result : false;
16319 }
16320
16321 if (typeof opts.onMatch === 'function') {
16322 opts.onMatch(result);
16323 }
16324 return returnObject ? result : true;
16325 };
16326
16327 if (returnState) {
16328 matcher.state = state;
16329 }
16330
16331 return matcher;
16332};
16333
16334/**
16335 * Test `input` with the given `regex`. This is used by the main
16336 * `picomatch()` function to test the input string.
16337 *
16338 * ```js
16339 * const picomatch = require('picomatch');
16340 * // picomatch.test(input, regex[, options]);
16341 *
16342 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
16343 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
16344 * ```
16345 * @param {String} `input` String to test.
16346 * @param {RegExp} `regex`
16347 * @return {Object} Returns an object with matching info.
16348 * @api public
16349 */
16350
16351picomatch.test = (input, regex, options, { glob, posix } = {}) => {
16352 if (typeof input !== 'string') {
16353 throw new TypeError('Expected input to be a string');
16354 }
16355
16356 if (input === '') {
16357 return { isMatch: false, output: '' };
16358 }
16359
16360 let opts = options || {};
16361 let format = opts.format || (posix ? utils.toPosixSlashes : null);
16362 let match = input === glob;
16363 let output = (match && format) ? format(input) : input;
16364
16365 if (match === false) {
16366 output = format ? format(input) : input;
16367 match = output === glob;
16368 }
16369
16370 if (match === false || opts.capture === true) {
16371 if (opts.matchBase === true || opts.basename === true) {
16372 match = picomatch.matchBase(input, regex, options, posix);
16373 } else {
16374 match = regex.exec(output);
16375 }
16376 }
16377
16378 return { isMatch: !!match, match, output };
16379};
16380
16381/**
16382 * Match the basename of a filepath.
16383 *
16384 * ```js
16385 * const picomatch = require('picomatch');
16386 * // picomatch.matchBase(input, glob[, options]);
16387 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
16388 * ```
16389 * @param {String} `input` String to test.
16390 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
16391 * @return {Boolean}
16392 * @api public
16393 */
16394
16395picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
16396 let regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
16397 return regex.test(path.basename(input));
16398};
16399
16400/**
16401 * Returns true if **any** of the given glob `patterns` match the specified `string`.
16402 *
16403 * ```js
16404 * const picomatch = require('picomatch');
16405 * // picomatch.isMatch(string, patterns[, options]);
16406 *
16407 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
16408 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
16409 * ```
16410 * @param {String|Array} str The string to test.
16411 * @param {String|Array} patterns One or more glob patterns to use for matching.
16412 * @param {Object} [options] See available [options](#options).
16413 * @return {Boolean} Returns true if any patterns match `str`
16414 * @api public
16415 */
16416
16417picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
16418
16419/**
16420 * Parse a glob pattern to create the source string for a regular
16421 * expression.
16422 *
16423 * ```js
16424 * const picomatch = require('picomatch');
16425 * const result = picomatch.parse(glob[, options]);
16426 * ```
16427 * @param {String} `glob`
16428 * @param {Object} `options`
16429 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
16430 * @api public
16431 */
16432
16433picomatch.parse = (glob, options) => parse(glob, options);
16434
16435/**
16436 * Scan a glob pattern to separate the pattern into segments.
16437 *
16438 * ```js
16439 * const picomatch = require('picomatch');
16440 * // picomatch.scan(input[, options]);
16441 *
16442 * const result = picomatch.scan('!./foo/*.js');
16443 * console.log(result);
16444 * // { prefix: '!./',
16445 * // input: '!./foo/*.js',
16446 * // base: 'foo',
16447 * // glob: '*.js',
16448 * // negated: true,
16449 * // isGlob: true }
16450 * ```
16451 * @param {String} `input` Glob pattern to scan.
16452 * @param {Object} `options`
16453 * @return {Object} Returns an object with
16454 * @api public
16455 */
16456
16457picomatch.scan = (input, options) => scan(input, options);
16458
16459/**
16460 * Create a regular expression from a glob pattern.
16461 *
16462 * ```js
16463 * const picomatch = require('picomatch');
16464 * // picomatch.makeRe(input[, options]);
16465 *
16466 * console.log(picomatch.makeRe('*.js'));
16467 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
16468 * ```
16469 * @param {String} `input` A glob pattern to convert to regex.
16470 * @param {Object} `options`
16471 * @return {RegExp} Returns a regex created from the given pattern.
16472 * @api public
16473 */
16474
16475picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
16476 if (!input || typeof input !== 'string') {
16477 throw new TypeError('Expected a non-empty string');
16478 }
16479
16480 let opts = options || {};
16481 let prepend = opts.contains ? '' : '^';
16482 let append = opts.contains ? '' : '$';
16483 let state = { negated: false, fastpaths: true };
16484 let prefix = '';
16485 let output;
16486
16487 if (input.startsWith('./')) {
16488 input = input.slice(2);
16489 prefix = state.prefix = './';
16490 }
16491
16492 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
16493 output = parse.fastpaths(input, options);
16494 }
16495
16496 if (output === void 0) {
16497 state = picomatch.parse(input, options);
16498 state.prefix = prefix + (state.prefix || '');
16499 output = state.output;
16500 }
16501
16502 if (returnOutput === true) {
16503 return output;
16504 }
16505
16506 let source = `${prepend}(?:${output})${append}`;
16507 if (state && state.negated === true) {
16508 source = `^(?!${source}).*$`;
16509 }
16510
16511 let regex = picomatch.toRegex(source, options);
16512 if (returnState === true) {
16513 regex.state = state;
16514 }
16515
16516 return regex;
16517};
16518
16519/**
16520 * Create a regular expression from the given regex source string.
16521 *
16522 * ```js
16523 * const picomatch = require('picomatch');
16524 * // picomatch.toRegex(source[, options]);
16525 *
16526 * const { output } = picomatch.parse('*.js');
16527 * console.log(picomatch.toRegex(output));
16528 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
16529 * ```
16530 * @param {String} `source` Regular expression source string.
16531 * @param {Object} `options`
16532 * @return {RegExp}
16533 * @api public
16534 */
16535
16536picomatch.toRegex = (source, options) => {
16537 try {
16538 let opts = options || {};
16539 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
16540 } catch (err) {
16541 if (options && options.debug === true) throw err;
16542 return /$^/;
16543 }
16544};
16545
16546/**
16547 * Picomatch constants.
16548 * @return {Object}
16549 */
16550
16551picomatch.constants = __webpack_require__(79);
16552
16553/**
16554 * Expose "picomatch"
16555 */
16556
16557module.exports = picomatch;
16558
16559
16560/***/ }),
16561/* 77 */
16562/***/ (function(module, exports, __webpack_require__) {
16563
16564"use strict";
16565
16566
16567const utils = __webpack_require__(78);
16568
16569const {
16570 CHAR_ASTERISK, /* * */
16571 CHAR_AT, /* @ */
16572 CHAR_BACKWARD_SLASH, /* \ */
16573 CHAR_COMMA, /* , */
16574 CHAR_DOT, /* . */
16575 CHAR_EXCLAMATION_MARK, /* ! */
16576 CHAR_FORWARD_SLASH, /* / */
16577 CHAR_LEFT_CURLY_BRACE, /* { */
16578 CHAR_LEFT_PARENTHESES, /* ( */
16579 CHAR_LEFT_SQUARE_BRACKET, /* [ */
16580 CHAR_PLUS, /* + */
16581 CHAR_QUESTION_MARK, /* ? */
16582 CHAR_RIGHT_CURLY_BRACE, /* } */
16583 CHAR_RIGHT_PARENTHESES, /* ) */
16584 CHAR_RIGHT_SQUARE_BRACKET /* ] */
16585} = __webpack_require__(79);
16586
16587const isPathSeparator = code => {
16588 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
16589};
16590
16591/**
16592 * Quickly scans a glob pattern and returns an object with a handful of
16593 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
16594 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
16595 *
16596 * ```js
16597 * const pm = require('picomatch');
16598 * console.log(pm.scan('foo/bar/*.js'));
16599 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
16600 * ```
16601 * @param {String} `str`
16602 * @param {Object} `options`
16603 * @return {Object} Returns an object with tokens and regex source string.
16604 * @api public
16605 */
16606
16607module.exports = (input, options) => {
16608 let opts = options || {};
16609 let length = input.length - 1;
16610 let index = -1;
16611 let start = 0;
16612 let lastIndex = 0;
16613 let isGlob = false;
16614 let backslashes = false;
16615 let negated = false;
16616 let braces = 0;
16617 let prev;
16618 let code;
16619
16620 let braceEscaped = false;
16621
16622 let eos = () => index >= length;
16623 let advance = () => {
16624 prev = code;
16625 return input.charCodeAt(++index);
16626 };
16627
16628 while (index < length) {
16629 code = advance();
16630 let next;
16631
16632 if (code === CHAR_BACKWARD_SLASH) {
16633 backslashes = true;
16634 next = advance();
16635
16636 if (next === CHAR_LEFT_CURLY_BRACE) {
16637 braceEscaped = true;
16638 }
16639 continue;
16640 }
16641
16642 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
16643 braces++;
16644
16645 while (!eos() && (next = advance())) {
16646 if (next === CHAR_BACKWARD_SLASH) {
16647 backslashes = true;
16648 next = advance();
16649 continue;
16650 }
16651
16652 if (next === CHAR_LEFT_CURLY_BRACE) {
16653 braces++;
16654 continue;
16655 }
16656
16657 if (!braceEscaped && next === CHAR_DOT && (next = advance()) === CHAR_DOT) {
16658 isGlob = true;
16659 break;
16660 }
16661
16662 if (!braceEscaped && next === CHAR_COMMA) {
16663 isGlob = true;
16664 break;
16665 }
16666
16667 if (next === CHAR_RIGHT_CURLY_BRACE) {
16668 braces--;
16669 if (braces === 0) {
16670 braceEscaped = false;
16671 break;
16672 }
16673 }
16674 }
16675 }
16676
16677 if (code === CHAR_FORWARD_SLASH) {
16678 if (prev === CHAR_DOT && index === (start + 1)) {
16679 start += 2;
16680 continue;
16681 }
16682
16683 lastIndex = index + 1;
16684 continue;
16685 }
16686
16687 if (code === CHAR_ASTERISK) {
16688 isGlob = true;
16689 break;
16690 }
16691
16692 if (code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK) {
16693 isGlob = true;
16694 break;
16695 }
16696
16697 if (code === CHAR_LEFT_SQUARE_BRACKET) {
16698 while (!eos() && (next = advance())) {
16699 if (next === CHAR_BACKWARD_SLASH) {
16700 backslashes = true;
16701 next = advance();
16702 continue;
16703 }
16704
16705 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
16706 isGlob = true;
16707 break;
16708 }
16709 }
16710 }
16711
16712 let isExtglobChar = code === CHAR_PLUS
16713 || code === CHAR_AT
16714 || code === CHAR_EXCLAMATION_MARK;
16715
16716 if (isExtglobChar && input.charCodeAt(index + 1) === CHAR_LEFT_PARENTHESES) {
16717 isGlob = true;
16718 break;
16719 }
16720
16721 if (code === CHAR_EXCLAMATION_MARK && index === start) {
16722 negated = true;
16723 start++;
16724 continue;
16725 }
16726
16727 if (code === CHAR_LEFT_PARENTHESES) {
16728 while (!eos() && (next = advance())) {
16729 if (next === CHAR_BACKWARD_SLASH) {
16730 backslashes = true;
16731 next = advance();
16732 continue;
16733 }
16734
16735 if (next === CHAR_RIGHT_PARENTHESES) {
16736 isGlob = true;
16737 break;
16738 }
16739 }
16740 }
16741
16742 if (isGlob) {
16743 break;
16744 }
16745 }
16746
16747 let prefix = '';
16748 let orig = input;
16749 let base = input;
16750 let glob = '';
16751
16752 if (start > 0) {
16753 prefix = input.slice(0, start);
16754 input = input.slice(start);
16755 lastIndex -= start;
16756 }
16757
16758 if (base && isGlob === true && lastIndex > 0) {
16759 base = input.slice(0, lastIndex);
16760 glob = input.slice(lastIndex);
16761 } else if (isGlob === true) {
16762 base = '';
16763 glob = input;
16764 } else {
16765 base = input;
16766 }
16767
16768 if (base && base !== '' && base !== '/' && base !== input) {
16769 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
16770 base = base.slice(0, -1);
16771 }
16772 }
16773
16774 if (opts.unescape === true) {
16775 if (glob) glob = utils.removeBackslashes(glob);
16776
16777 if (base && backslashes === true) {
16778 base = utils.removeBackslashes(base);
16779 }
16780 }
16781
16782 return { prefix, input: orig, base, glob, negated, isGlob };
16783};
16784
16785
16786/***/ }),
16787/* 78 */
16788/***/ (function(module, exports, __webpack_require__) {
16789
16790"use strict";
16791
16792
16793const path = __webpack_require__(15);
16794const win32 = process.platform === 'win32';
16795const {
16796 REGEX_SPECIAL_CHARS,
16797 REGEX_SPECIAL_CHARS_GLOBAL,
16798 REGEX_REMOVE_BACKSLASH
16799} = __webpack_require__(79);
16800
16801exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
16802exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
16803exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
16804exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
16805exports.toPosixSlashes = str => str.replace(/\\/g, '/');
16806
16807exports.removeBackslashes = str => {
16808 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
16809 return match === '\\' ? '' : match;
16810 });
16811}
16812
16813exports.supportsLookbehinds = () => {
16814 let segs = process.version.slice(1).split('.');
16815 if (segs.length === 3 && +segs[0] >= 9 || (+segs[0] === 8 && +segs[1] >= 10)) {
16816 return true;
16817 }
16818 return false;
16819};
16820
16821exports.isWindows = options => {
16822 if (options && typeof options.windows === 'boolean') {
16823 return options.windows;
16824 }
16825 return win32 === true || path.sep === '\\';
16826};
16827
16828exports.escapeLast = (input, char, lastIdx) => {
16829 let idx = input.lastIndexOf(char, lastIdx);
16830 if (idx === -1) return input;
16831 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
16832 return input.slice(0, idx) + '\\' + input.slice(idx);
16833};
16834
16835
16836/***/ }),
16837/* 79 */
16838/***/ (function(module, exports, __webpack_require__) {
16839
16840"use strict";
16841
16842
16843const path = __webpack_require__(15);
16844const WIN_SLASH = '\\\\/';
16845const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
16846
16847/**
16848 * Posix glob regex
16849 */
16850
16851const DOT_LITERAL = '\\.';
16852const PLUS_LITERAL = '\\+';
16853const QMARK_LITERAL = '\\?';
16854const SLASH_LITERAL = '\\/';
16855const ONE_CHAR = '(?=.)';
16856const QMARK = '[^/]';
16857const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
16858const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
16859const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
16860const NO_DOT = `(?!${DOT_LITERAL})`;
16861const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
16862const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
16863const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
16864const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
16865const STAR = `${QMARK}*?`;
16866
16867const POSIX_CHARS = {
16868 DOT_LITERAL,
16869 PLUS_LITERAL,
16870 QMARK_LITERAL,
16871 SLASH_LITERAL,
16872 ONE_CHAR,
16873 QMARK,
16874 END_ANCHOR,
16875 DOTS_SLASH,
16876 NO_DOT,
16877 NO_DOTS,
16878 NO_DOT_SLASH,
16879 NO_DOTS_SLASH,
16880 QMARK_NO_DOT,
16881 STAR,
16882 START_ANCHOR
16883};
16884
16885/**
16886 * Windows glob regex
16887 */
16888
16889const WINDOWS_CHARS = {
16890 ...POSIX_CHARS,
16891
16892 SLASH_LITERAL: `[${WIN_SLASH}]`,
16893 QMARK: WIN_NO_SLASH,
16894 STAR: `${WIN_NO_SLASH}*?`,
16895 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
16896 NO_DOT: `(?!${DOT_LITERAL})`,
16897 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
16898 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
16899 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
16900 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
16901 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
16902 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
16903};
16904
16905/**
16906 * POSIX Bracket Regex
16907 */
16908
16909const POSIX_REGEX_SOURCE = {
16910 alnum: 'a-zA-Z0-9',
16911 alpha: 'a-zA-Z',
16912 ascii: '\\x00-\\x7F',
16913 blank: ' \\t',
16914 cntrl: '\\x00-\\x1F\\x7F',
16915 digit: '0-9',
16916 graph: '\\x21-\\x7E',
16917 lower: 'a-z',
16918 print: '\\x20-\\x7E ',
16919 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
16920 space: ' \\t\\r\\n\\v\\f',
16921 upper: 'A-Z',
16922 word: 'A-Za-z0-9_',
16923 xdigit: 'A-Fa-f0-9'
16924};
16925
16926module.exports = {
16927 MAX_LENGTH: 1024 * 64,
16928 POSIX_REGEX_SOURCE,
16929
16930 // regular expressions
16931 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
16932 REGEX_NON_SPECIAL_CHAR: /^[^@![\].,$*+?^{}()|\\/]+/,
16933 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
16934 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
16935 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
16936 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
16937
16938 // Replace globs with equivalent patterns to reduce parsing time.
16939 REPLACEMENTS: {
16940 '***': '*',
16941 '**/**': '**',
16942 '**/**/**': '**'
16943 },
16944
16945 // Digits
16946 CHAR_0: 48, /* 0 */
16947 CHAR_9: 57, /* 9 */
16948
16949 // Alphabet chars.
16950 CHAR_UPPERCASE_A: 65, /* A */
16951 CHAR_LOWERCASE_A: 97, /* a */
16952 CHAR_UPPERCASE_Z: 90, /* Z */
16953 CHAR_LOWERCASE_Z: 122, /* z */
16954
16955 CHAR_LEFT_PARENTHESES: 40, /* ( */
16956 CHAR_RIGHT_PARENTHESES: 41, /* ) */
16957
16958 CHAR_ASTERISK: 42, /* * */
16959
16960 // Non-alphabetic chars.
16961 CHAR_AMPERSAND: 38, /* & */
16962 CHAR_AT: 64, /* @ */
16963 CHAR_BACKWARD_SLASH: 92, /* \ */
16964 CHAR_CARRIAGE_RETURN: 13, /* \r */
16965 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
16966 CHAR_COLON: 58, /* : */
16967 CHAR_COMMA: 44, /* , */
16968 CHAR_DOT: 46, /* . */
16969 CHAR_DOUBLE_QUOTE: 34, /* " */
16970 CHAR_EQUAL: 61, /* = */
16971 CHAR_EXCLAMATION_MARK: 33, /* ! */
16972 CHAR_FORM_FEED: 12, /* \f */
16973 CHAR_FORWARD_SLASH: 47, /* / */
16974 CHAR_GRAVE_ACCENT: 96, /* ` */
16975 CHAR_HASH: 35, /* # */
16976 CHAR_HYPHEN_MINUS: 45, /* - */
16977 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
16978 CHAR_LEFT_CURLY_BRACE: 123, /* { */
16979 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
16980 CHAR_LINE_FEED: 10, /* \n */
16981 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
16982 CHAR_PERCENT: 37, /* % */
16983 CHAR_PLUS: 43, /* + */
16984 CHAR_QUESTION_MARK: 63, /* ? */
16985 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
16986 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
16987 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
16988 CHAR_SEMICOLON: 59, /* ; */
16989 CHAR_SINGLE_QUOTE: 39, /* ' */
16990 CHAR_SPACE: 32, /* */
16991 CHAR_TAB: 9, /* \t */
16992 CHAR_UNDERSCORE: 95, /* _ */
16993 CHAR_VERTICAL_LINE: 124, /* | */
16994 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
16995
16996 SEP: path.sep,
16997
16998 /**
16999 * Create EXTGLOB_CHARS
17000 */
17001
17002 extglobChars(chars) {
17003 return {
17004 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
17005 '?': { type: 'qmark', open: '(?:', close: ')?' },
17006 '+': { type: 'plus', open: '(?:', close: ')+' },
17007 '*': { type: 'star', open: '(?:', close: ')*' },
17008 '@': { type: 'at', open: '(?:', close: ')' }
17009 };
17010 },
17011
17012 /**
17013 * Create GLOB_CHARS
17014 */
17015
17016 globChars(win32) {
17017 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
17018 }
17019};
17020
17021
17022/***/ }),
17023/* 80 */
17024/***/ (function(module, exports, __webpack_require__) {
17025
17026"use strict";
17027
17028
17029const utils = __webpack_require__(78);
17030const constants = __webpack_require__(79);
17031
17032/**
17033 * Constants
17034 */
17035
17036const {
17037 MAX_LENGTH,
17038 POSIX_REGEX_SOURCE,
17039 REGEX_NON_SPECIAL_CHAR,
17040 REGEX_SPECIAL_CHARS_BACKREF,
17041 REPLACEMENTS
17042} = constants;
17043
17044/**
17045 * Helpers
17046 */
17047
17048const expandRange = (args, options) => {
17049 if (typeof options.expandRange === 'function') {
17050 return options.expandRange(...args, options);
17051 }
17052
17053 args.sort();
17054 let value = `[${args.join('-')}]`;
17055
17056 try {
17057 /* eslint-disable no-new */
17058 new RegExp(value);
17059 } catch (ex) {
17060 return args.map(v => utils.escapeRegex(v)).join('..');
17061 }
17062
17063 return value;
17064};
17065
17066const negate = state => {
17067 let count = 1;
17068
17069 while (state.peek() === '!' && (state.peek(2) !== '(' || state.peek(3) === '?')) {
17070 state.advance();
17071 state.start++;
17072 count++;
17073 }
17074
17075 if (count % 2 === 0) {
17076 return false;
17077 }
17078
17079 state.negated = true;
17080 state.start++;
17081 return true;
17082};
17083
17084/**
17085 * Create the message for a syntax error
17086 */
17087
17088const syntaxError = (type, char) => {
17089 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
17090};
17091
17092/**
17093 * Parse the given input string.
17094 * @param {String} input
17095 * @param {Object} options
17096 * @return {Object}
17097 */
17098
17099const parse = (input, options) => {
17100 if (typeof input !== 'string') {
17101 throw new TypeError('Expected a string');
17102 }
17103
17104 input = REPLACEMENTS[input] || input;
17105
17106 let opts = { ...options };
17107 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
17108 let len = input.length;
17109 if (len > max) {
17110 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
17111 }
17112
17113 let bos = { type: 'bos', value: '', output: opts.prepend || '' };
17114 let tokens = [bos];
17115
17116 let capture = opts.capture ? '' : '?:';
17117 let win32 = utils.isWindows(options);
17118
17119 // create constants based on platform, for windows or posix
17120 const PLATFORM_CHARS = constants.globChars(win32);
17121 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
17122
17123 const {
17124 DOT_LITERAL,
17125 PLUS_LITERAL,
17126 SLASH_LITERAL,
17127 ONE_CHAR,
17128 DOTS_SLASH,
17129 NO_DOT,
17130 NO_DOT_SLASH,
17131 NO_DOTS_SLASH,
17132 QMARK,
17133 QMARK_NO_DOT,
17134 STAR,
17135 START_ANCHOR
17136 } = PLATFORM_CHARS;
17137
17138 const globstar = (opts) => {
17139 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
17140 };
17141
17142 let nodot = opts.dot ? '' : NO_DOT;
17143 let star = opts.bash === true ? globstar(opts) : STAR;
17144 let qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
17145
17146 if (opts.capture) {
17147 star = `(${star})`;
17148 }
17149
17150 // minimatch options support
17151 if (typeof opts.noext === 'boolean') {
17152 opts.noextglob = opts.noext;
17153 }
17154
17155 let state = {
17156 index: -1,
17157 start: 0,
17158 consumed: '',
17159 output: '',
17160 backtrack: false,
17161 brackets: 0,
17162 braces: 0,
17163 parens: 0,
17164 quotes: 0,
17165 tokens
17166 };
17167
17168 let extglobs = [];
17169 let stack = [];
17170 let prev = bos;
17171 let value;
17172
17173 /**
17174 * Tokenizing helpers
17175 */
17176
17177 const eos = () => state.index === len - 1;
17178 const peek = state.peek = (n = 1) => input[state.index + n];
17179 const advance = state.advance = () => input[++state.index];
17180 const append = token => {
17181 state.output += token.output != null ? token.output : token.value;
17182 state.consumed += token.value || '';
17183 };
17184
17185 const increment = type => {
17186 state[type]++;
17187 stack.push(type);
17188 };
17189
17190 const decrement = type => {
17191 state[type]--;
17192 stack.pop();
17193 };
17194
17195 /**
17196 * Push tokens onto the tokens array. This helper speeds up
17197 * tokenizing by 1) helping us avoid backtracking as much as possible,
17198 * and 2) helping us avoid creating extra tokens when consecutive
17199 * characters are plain text. This improves performance and simplifies
17200 * lookbehinds.
17201 */
17202
17203 const push = tok => {
17204 if (prev.type === 'globstar') {
17205 let isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
17206 let isExtglob = extglobs.length && (tok.type === 'pipe' || tok.type === 'paren');
17207 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
17208 state.output = state.output.slice(0, -prev.output.length);
17209 prev.type = 'star';
17210 prev.value = '*';
17211 prev.output = star;
17212 state.output += prev.output;
17213 }
17214 }
17215
17216 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
17217 extglobs[extglobs.length - 1].inner += tok.value;
17218 }
17219
17220 if (tok.value || tok.output) append(tok);
17221 if (prev && prev.type === 'text' && tok.type === 'text') {
17222 prev.value += tok.value;
17223 return;
17224 }
17225
17226 tok.prev = prev;
17227 tokens.push(tok);
17228 prev = tok;
17229 };
17230
17231 const extglobOpen = (type, value) => {
17232 let token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
17233
17234 token.prev = prev;
17235 token.parens = state.parens;
17236 token.output = state.output;
17237 let output = (opts.capture ? '(' : '') + token.open;
17238
17239 push({ type, value, output: state.output ? '' : ONE_CHAR });
17240 push({ type: 'paren', extglob: true, value: advance(), output });
17241 increment('parens');
17242 extglobs.push(token);
17243 };
17244
17245 const extglobClose = token => {
17246 let output = token.close + (opts.capture ? ')' : '');
17247
17248 if (token.type === 'negate') {
17249 let extglobStar = star;
17250
17251 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
17252 extglobStar = globstar(opts);
17253 }
17254
17255 if (extglobStar !== star || eos() || /^\)+$/.test(input.slice(state.index + 1))) {
17256 output = token.close = ')$))' + extglobStar;
17257 }
17258
17259 if (token.prev.type === 'bos' && eos()) {
17260 state.negatedExtglob = true;
17261 }
17262 }
17263
17264 push({ type: 'paren', extglob: true, value, output });
17265 decrement('parens');
17266 };
17267
17268 if (opts.fastpaths !== false && !/(^[*!]|[/{[()\]}"])/.test(input)) {
17269 let backslashes = false;
17270
17271 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
17272 if (first === '\\') {
17273 backslashes = true;
17274 return m;
17275 }
17276
17277 if (first === '?') {
17278 if (esc) {
17279 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
17280 }
17281 if (index === 0) {
17282 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
17283 }
17284 return QMARK.repeat(chars.length);
17285 }
17286
17287 if (first === '.') {
17288 return DOT_LITERAL.repeat(chars.length);
17289 }
17290
17291 if (first === '*') {
17292 if (esc) {
17293 return esc + first + (rest ? star : '');
17294 }
17295 return star;
17296 }
17297 return esc ? m : '\\' + m;
17298 });
17299
17300 if (backslashes === true) {
17301 if (opts.unescape === true) {
17302 output = output.replace(/\\/g, '');
17303 } else {
17304 output = output.replace(/\\+/g, m => {
17305 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
17306 });
17307 }
17308 }
17309
17310 state.output = output;
17311 return state;
17312 }
17313
17314 /**
17315 * Tokenize input until we reach end-of-string
17316 */
17317
17318 while (!eos()) {
17319 value = advance();
17320
17321 if (value === '\u0000') {
17322 continue;
17323 }
17324
17325 /**
17326 * Escaped characters
17327 */
17328
17329 if (value === '\\') {
17330 let next = peek();
17331
17332 if (next === '/' && opts.bash !== true) {
17333 continue;
17334 }
17335
17336 if (next === '.' || next === ';') {
17337 continue;
17338 }
17339
17340 if (!next) {
17341 value += '\\';
17342 push({ type: 'text', value });
17343 continue;
17344 }
17345
17346 // collapse slashes to reduce potential for exploits
17347 let match = /^\\+/.exec(input.slice(state.index + 1));
17348 let slashes = 0;
17349
17350 if (match && match[0].length > 2) {
17351 slashes = match[0].length;
17352 state.index += slashes;
17353 if (slashes % 2 !== 0) {
17354 value += '\\';
17355 }
17356 }
17357
17358 if (opts.unescape === true) {
17359 value = advance() || '';
17360 } else {
17361 value += advance() || '';
17362 }
17363
17364 if (state.brackets === 0) {
17365 push({ type: 'text', value });
17366 continue;
17367 }
17368 }
17369
17370 /**
17371 * If we're inside a regex character class, continue
17372 * until we reach the closing bracket.
17373 */
17374
17375 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
17376 if (opts.posix !== false && value === ':') {
17377 let inner = prev.value.slice(1);
17378 if (inner.includes('[')) {
17379 prev.posix = true;
17380
17381 if (inner.includes(':')) {
17382 let idx = prev.value.lastIndexOf('[');
17383 let pre = prev.value.slice(0, idx);
17384 let rest = prev.value.slice(idx + 2);
17385 let posix = POSIX_REGEX_SOURCE[rest];
17386 if (posix) {
17387 prev.value = pre + posix;
17388 state.backtrack = true;
17389 advance();
17390
17391 if (!bos.output && tokens.indexOf(prev) === 1) {
17392 bos.output = ONE_CHAR;
17393 }
17394 continue;
17395 }
17396 }
17397 }
17398 }
17399
17400 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
17401 value = '\\' + value;
17402 }
17403
17404 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
17405 value = '\\' + value;
17406 }
17407
17408 if (opts.posix === true && value === '!' && prev.value === '[') {
17409 value = '^';
17410 }
17411
17412 prev.value += value;
17413 append({ value });
17414 continue;
17415 }
17416
17417 /**
17418 * If we're inside a quoted string, continue
17419 * until we reach the closing double quote.
17420 */
17421
17422 if (state.quotes === 1 && value !== '"') {
17423 value = utils.escapeRegex(value);
17424 prev.value += value;
17425 append({ value });
17426 continue;
17427 }
17428
17429 /**
17430 * Double quotes
17431 */
17432
17433 if (value === '"') {
17434 state.quotes = state.quotes === 1 ? 0 : 1;
17435 if (opts.keepQuotes === true) {
17436 push({ type: 'text', value });
17437 }
17438 continue;
17439 }
17440
17441 /**
17442 * Parentheses
17443 */
17444
17445 if (value === '(') {
17446 push({ type: 'paren', value });
17447 increment('parens');
17448 continue;
17449 }
17450
17451 if (value === ')') {
17452 if (state.parens === 0 && opts.strictBrackets === true) {
17453 throw new SyntaxError(syntaxError('opening', '('));
17454 }
17455
17456 let extglob = extglobs[extglobs.length - 1];
17457 if (extglob && state.parens === extglob.parens + 1) {
17458 extglobClose(extglobs.pop());
17459 continue;
17460 }
17461
17462 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
17463 decrement('parens');
17464 continue;
17465 }
17466
17467 /**
17468 * Brackets
17469 */
17470
17471 if (value === '[') {
17472 if (opts.nobracket === true || !input.slice(state.index + 1).includes(']')) {
17473 if (opts.nobracket !== true && opts.strictBrackets === true) {
17474 throw new SyntaxError(syntaxError('closing', ']'));
17475 }
17476
17477 value = '\\' + value;
17478 } else {
17479 increment('brackets');
17480 }
17481
17482 push({ type: 'bracket', value });
17483 continue;
17484 }
17485
17486 if (value === ']') {
17487 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
17488 push({ type: 'text', value, output: '\\' + value });
17489 continue;
17490 }
17491
17492 if (state.brackets === 0) {
17493 if (opts.strictBrackets === true) {
17494 throw new SyntaxError(syntaxError('opening', '['));
17495 }
17496
17497 push({ type: 'text', value, output: '\\' + value });
17498 continue;
17499 }
17500
17501 decrement('brackets');
17502
17503 let prevValue = prev.value.slice(1);
17504 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
17505 value = '/' + value;
17506 }
17507
17508 prev.value += value;
17509 append({ value });
17510
17511 // when literal brackets are explicitly disabled
17512 // assume we should match with a regex character class
17513 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
17514 continue;
17515 }
17516
17517 let escaped = utils.escapeRegex(prev.value);
17518 state.output = state.output.slice(0, -prev.value.length);
17519
17520 // when literal brackets are explicitly enabled
17521 // assume we should escape the brackets to match literal characters
17522 if (opts.literalBrackets === true) {
17523 state.output += escaped;
17524 prev.value = escaped;
17525 continue;
17526 }
17527
17528 // when the user specifies nothing, try to match both
17529 prev.value = `(${capture}${escaped}|${prev.value})`;
17530 state.output += prev.value;
17531 continue;
17532 }
17533
17534 /**
17535 * Braces
17536 */
17537
17538 if (value === '{' && opts.nobrace !== true) {
17539 push({ type: 'brace', value, output: '(' });
17540 increment('braces');
17541 continue;
17542 }
17543
17544 if (value === '}') {
17545 if (opts.nobrace === true || state.braces === 0) {
17546 push({ type: 'text', value, output: '\\' + value });
17547 continue;
17548 }
17549
17550 let output = ')';
17551
17552 if (state.dots === true) {
17553 let arr = tokens.slice();
17554 let range = [];
17555
17556 for (let i = arr.length - 1; i >= 0; i--) {
17557 tokens.pop();
17558 if (arr[i].type === 'brace') {
17559 break;
17560 }
17561 if (arr[i].type !== 'dots') {
17562 range.unshift(arr[i].value);
17563 }
17564 }
17565
17566 output = expandRange(range, opts);
17567 state.backtrack = true;
17568 }
17569
17570 push({ type: 'brace', value, output });
17571 decrement('braces');
17572 continue;
17573 }
17574
17575 /**
17576 * Pipes
17577 */
17578
17579 if (value === '|') {
17580 if (extglobs.length > 0) {
17581 extglobs[extglobs.length - 1].conditions++;
17582 }
17583 push({ type: 'text', value });
17584 continue;
17585 }
17586
17587 /**
17588 * Commas
17589 */
17590
17591 if (value === ',') {
17592 let output = value;
17593
17594 if (state.braces > 0 && stack[stack.length - 1] === 'braces') {
17595 output = '|';
17596 }
17597
17598 push({ type: 'comma', value, output });
17599 continue;
17600 }
17601
17602 /**
17603 * Slashes
17604 */
17605
17606 if (value === '/') {
17607 // if the beginning of the glob is "./", advance the start
17608 // to the current index, and don't add the "./" characters
17609 // to the state. This greatly simplifies lookbehinds when
17610 // checking for BOS characters like "!" and "." (not "./")
17611 if (prev.type === 'dot' && state.index === 1) {
17612 state.start = state.index + 1;
17613 state.consumed = '';
17614 state.output = '';
17615 tokens.pop();
17616 prev = bos; // reset "prev" to the first token
17617 continue;
17618 }
17619
17620 push({ type: 'slash', value, output: SLASH_LITERAL });
17621 continue;
17622 }
17623
17624 /**
17625 * Dots
17626 */
17627
17628 if (value === '.') {
17629 if (state.braces > 0 && prev.type === 'dot') {
17630 if (prev.value === '.') prev.output = DOT_LITERAL;
17631 prev.type = 'dots';
17632 prev.output += value;
17633 prev.value += value;
17634 state.dots = true;
17635 continue;
17636 }
17637
17638 push({ type: 'dot', value, output: DOT_LITERAL });
17639 continue;
17640 }
17641
17642 /**
17643 * Question marks
17644 */
17645
17646 if (value === '?') {
17647 if (prev && prev.type === 'paren') {
17648 let next = peek();
17649 let output = value;
17650
17651 if (next === '<' && !utils.supportsLookbehinds()) {
17652 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
17653 }
17654
17655 if (prev.value === '(' && !/[!=<:]/.test(next) || (next === '<' && !/[!=]/.test(peek(2)))) {
17656 output = '\\' + value;
17657 }
17658
17659 push({ type: 'text', value, output });
17660 continue;
17661 }
17662
17663 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
17664 extglobOpen('qmark', value);
17665 continue;
17666 }
17667
17668 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
17669 push({ type: 'qmark', value, output: QMARK_NO_DOT });
17670 continue;
17671 }
17672
17673 push({ type: 'qmark', value, output: QMARK });
17674 continue;
17675 }
17676
17677 /**
17678 * Exclamation
17679 */
17680
17681 if (value === '!') {
17682 if (opts.noextglob !== true && peek() === '(') {
17683 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
17684 extglobOpen('negate', value);
17685 continue;
17686 }
17687 }
17688
17689 if (opts.nonegate !== true && state.index === 0) {
17690 negate(state);
17691 continue;
17692 }
17693 }
17694
17695 /**
17696 * Plus
17697 */
17698
17699 if (value === '+') {
17700 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
17701 extglobOpen('plus', value);
17702 continue;
17703 }
17704
17705 if (prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) {
17706 let output = prev.extglob === true ? '\\' + value : value;
17707 push({ type: 'plus', value, output });
17708 continue;
17709 }
17710
17711 // use regex behavior inside parens
17712 if (state.parens > 0 && opts.regex !== false) {
17713 push({ type: 'plus', value });
17714 continue;
17715 }
17716
17717 push({ type: 'plus', value: PLUS_LITERAL });
17718 continue;
17719 }
17720
17721 /**
17722 * Plain text
17723 */
17724
17725 if (value === '@') {
17726 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
17727 push({ type: 'at', value, output: '' });
17728 continue;
17729 }
17730
17731 push({ type: 'text', value });
17732 continue;
17733 }
17734
17735 /**
17736 * Plain text
17737 */
17738
17739 if (value !== '*') {
17740 if (value === '$' || value === '^') {
17741 value = '\\' + value;
17742 }
17743
17744 let match = REGEX_NON_SPECIAL_CHAR.exec(input.slice(state.index + 1));
17745 if (match) {
17746 value += match[0];
17747 state.index += match[0].length;
17748 }
17749
17750 push({ type: 'text', value });
17751 continue;
17752 }
17753
17754 /**
17755 * Stars
17756 */
17757
17758 if (prev && (prev.type === 'globstar' || prev.star === true)) {
17759 prev.type = 'star';
17760 prev.star = true;
17761 prev.value += value;
17762 prev.output = star;
17763 state.backtrack = true;
17764 state.consumed += value;
17765 continue;
17766 }
17767
17768 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
17769 extglobOpen('star', value);
17770 continue;
17771 }
17772
17773 if (prev.type === 'star') {
17774 if (opts.noglobstar === true) {
17775 state.consumed += value;
17776 continue;
17777 }
17778
17779 let prior = prev.prev;
17780 let before = prior.prev;
17781 let isStart = prior.type === 'slash' || prior.type === 'bos';
17782 let afterStar = before && (before.type === 'star' || before.type === 'globstar');
17783
17784 if (opts.bash === true && (!isStart || (!eos() && peek() !== '/'))) {
17785 push({ type: 'star', value, output: '' });
17786 continue;
17787 }
17788
17789 let isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
17790 let isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
17791 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
17792 push({ type: 'star', value, output: '' });
17793 continue;
17794 }
17795
17796 // strip consecutive `/**/`
17797 while (input.slice(state.index + 1, state.index + 4) === '/**') {
17798 let after = input[state.index + 4];
17799 if (after && after !== '/') {
17800 break;
17801 }
17802 state.consumed += '/**';
17803 state.index += 3;
17804 }
17805
17806 if (prior.type === 'bos' && eos()) {
17807 prev.type = 'globstar';
17808 prev.value += value;
17809 prev.output = globstar(opts);
17810 state.output = prev.output;
17811 state.consumed += value;
17812 continue;
17813 }
17814
17815 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
17816 state.output = state.output.slice(0, -(prior.output + prev.output).length);
17817 prior.output = '(?:' + prior.output;
17818
17819 prev.type = 'globstar';
17820 prev.output = globstar(opts) + '|$)';
17821 prev.value += value;
17822
17823 state.output += prior.output + prev.output;
17824 state.consumed += value;
17825 continue;
17826 }
17827
17828 let next = peek();
17829 if (prior.type === 'slash' && prior.prev.type !== 'bos' && next === '/') {
17830 let end = peek(2) !== void 0 ? '|$' : '';
17831
17832 state.output = state.output.slice(0, -(prior.output + prev.output).length);
17833 prior.output = '(?:' + prior.output;
17834
17835 prev.type = 'globstar';
17836 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
17837 prev.value += value;
17838
17839 state.output += prior.output + prev.output;
17840 state.consumed += value + advance();
17841
17842 push({ type: 'slash', value, output: '' });
17843 continue;
17844 }
17845
17846 if (prior.type === 'bos' && next === '/') {
17847 prev.type = 'globstar';
17848 prev.value += value;
17849 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
17850 state.output = prev.output;
17851 state.consumed += value + advance();
17852 push({ type: 'slash', value, output: '' });
17853 continue;
17854 }
17855
17856 // remove single star from output
17857 state.output = state.output.slice(0, -prev.output.length);
17858
17859 // reset previous token to globstar
17860 prev.type = 'globstar';
17861 prev.output = globstar(opts);
17862 prev.value += value;
17863
17864 // reset output with globstar
17865 state.output += prev.output;
17866 state.consumed += value;
17867 continue;
17868 }
17869
17870 let token = { type: 'star', value, output: star };
17871
17872 if (opts.bash === true) {
17873 token.output = '.*?';
17874 if (prev.type === 'bos' || prev.type === 'slash') {
17875 token.output = nodot + token.output;
17876 }
17877 push(token);
17878 continue;
17879 }
17880
17881 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
17882 token.output = value;
17883 push(token);
17884 continue;
17885 }
17886
17887 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
17888 if (prev.type === 'dot') {
17889 state.output += NO_DOT_SLASH;
17890 prev.output += NO_DOT_SLASH;
17891
17892 } else if (opts.dot === true) {
17893 state.output += NO_DOTS_SLASH;
17894 prev.output += NO_DOTS_SLASH;
17895
17896 } else {
17897 state.output += nodot;
17898 prev.output += nodot;
17899 }
17900
17901 if (peek() !== '*') {
17902 state.output += ONE_CHAR;
17903 prev.output += ONE_CHAR;
17904 }
17905 }
17906
17907 push(token);
17908 }
17909
17910 while (state.brackets > 0) {
17911 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
17912 state.output = utils.escapeLast(state.output, '[');
17913 decrement('brackets');
17914 }
17915
17916 while (state.parens > 0) {
17917 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
17918 state.output = utils.escapeLast(state.output, '(');
17919 decrement('parens');
17920 }
17921
17922 while (state.braces > 0) {
17923 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
17924 state.output = utils.escapeLast(state.output, '{');
17925 decrement('braces');
17926 }
17927
17928 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
17929 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
17930 }
17931
17932 // rebuild the output if we had to backtrack at any point
17933 if (state.backtrack === true) {
17934 state.output = '';
17935
17936 for (let token of state.tokens) {
17937 state.output += token.output != null ? token.output : token.value;
17938
17939 if (token.suffix) {
17940 state.output += token.suffix;
17941 }
17942 }
17943 }
17944
17945 return state;
17946};
17947
17948/**
17949 * Fast paths for creating regular expressions for common glob patterns.
17950 * This can significantly speed up processing and has very little downside
17951 * impact when none of the fast paths match.
17952 */
17953
17954parse.fastpaths = (input, options) => {
17955 let opts = { ...options };
17956 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
17957 let len = input.length;
17958 if (len > max) {
17959 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
17960 }
17961
17962 input = REPLACEMENTS[input] || input;
17963 let win32 = utils.isWindows(options);
17964
17965 // create constants based on platform, for windows or posix
17966 const {
17967 DOT_LITERAL,
17968 SLASH_LITERAL,
17969 ONE_CHAR,
17970 DOTS_SLASH,
17971 NO_DOT,
17972 NO_DOTS,
17973 NO_DOTS_SLASH,
17974 STAR,
17975 START_ANCHOR
17976 } = constants.globChars(win32);
17977
17978 let capture = opts.capture ? '' : '?:';
17979 let star = opts.bash === true ? '.*?' : STAR;
17980 let nodot = opts.dot ? NO_DOTS : NO_DOT;
17981 let slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
17982
17983 if (opts.capture) {
17984 star = `(${star})`;
17985 }
17986
17987 const globstar = (opts) => {
17988 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
17989 };
17990
17991 const create = str => {
17992 switch (str) {
17993 case '*':
17994 return `${nodot}${ONE_CHAR}${star}`;
17995
17996 case '.*':
17997 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
17998
17999 case '*.*':
18000 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
18001
18002 case '*/*':
18003 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
18004
18005 case '**':
18006 return nodot + globstar(opts);
18007
18008 case '**/*':
18009 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
18010
18011 case '**/*.*':
18012 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
18013
18014 case '**/.*':
18015 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
18016
18017 default: {
18018 let match = /^(.*?)\.(\w+)$/.exec(str);
18019 if (!match) return;
18020
18021 let source = create(match[1], options);
18022 if (!source) return;
18023
18024 return source + DOT_LITERAL + match[2];
18025 }
18026 }
18027 };
18028
18029 let output = create(input);
18030 if (output && opts.strictSlashes !== true) {
18031 output += `${SLASH_LITERAL}?`;
18032 }
18033
18034 return output;
18035};
18036
18037module.exports = parse;
18038
18039
18040/***/ }),
18041/* 81 */
18042/***/ (function(module, exports, __webpack_require__) {
18043
18044"use strict";
18045
18046Object.defineProperty(exports, "__esModule", { value: true });
18047const merge2 = __webpack_require__(82);
18048function merge(streams) {
18049 const mergedStream = merge2(streams);
18050 streams.forEach((stream) => {
18051 stream.once('error', (err) => mergedStream.emit('error', err));
18052 });
18053 return mergedStream;
18054}
18055exports.merge = merge;
18056
18057
18058/***/ }),
18059/* 82 */
18060/***/ (function(module, exports, __webpack_require__) {
18061
18062"use strict";
18063
18064/*
18065 * merge2
18066 * https://github.com/teambition/merge2
18067 *
18068 * Copyright (c) 2014-2016 Teambition
18069 * Licensed under the MIT license.
18070 */
18071const Stream = __webpack_require__(83)
18072const PassThrough = Stream.PassThrough
18073const slice = Array.prototype.slice
18074
18075module.exports = merge2
18076
18077function merge2 () {
18078 const streamsQueue = []
18079 let merging = false
18080 const args = slice.call(arguments)
18081 let options = args[args.length - 1]
18082
18083 if (options && !Array.isArray(options) && options.pipe == null) args.pop()
18084 else options = {}
18085
18086 const doEnd = options.end !== false
18087 if (options.objectMode == null) options.objectMode = true
18088 if (options.highWaterMark == null) options.highWaterMark = 64 * 1024
18089 const mergedStream = PassThrough(options)
18090
18091 function addStream () {
18092 for (let i = 0, len = arguments.length; i < len; i++) {
18093 streamsQueue.push(pauseStreams(arguments[i], options))
18094 }
18095 mergeStream()
18096 return this
18097 }
18098
18099 function mergeStream () {
18100 if (merging) return
18101 merging = true
18102
18103 let streams = streamsQueue.shift()
18104 if (!streams) {
18105 process.nextTick(endStream)
18106 return
18107 }
18108 if (!Array.isArray(streams)) streams = [streams]
18109
18110 let pipesCount = streams.length + 1
18111
18112 function next () {
18113 if (--pipesCount > 0) return
18114 merging = false
18115 mergeStream()
18116 }
18117
18118 function pipe (stream) {
18119 function onend () {
18120 stream.removeListener('merge2UnpipeEnd', onend)
18121 stream.removeListener('end', onend)
18122 next()
18123 }
18124 // skip ended stream
18125 if (stream._readableState.endEmitted) return next()
18126
18127 stream.on('merge2UnpipeEnd', onend)
18128 stream.on('end', onend)
18129 stream.pipe(mergedStream, { end: false })
18130 // compatible for old stream
18131 stream.resume()
18132 }
18133
18134 for (let i = 0; i < streams.length; i++) pipe(streams[i])
18135
18136 next()
18137 }
18138
18139 function endStream () {
18140 merging = false
18141 // emit 'queueDrain' when all streams merged.
18142 mergedStream.emit('queueDrain')
18143 return doEnd && mergedStream.end()
18144 }
18145
18146 mergedStream.setMaxListeners(0)
18147 mergedStream.add = addStream
18148 mergedStream.on('unpipe', function (stream) {
18149 stream.emit('merge2UnpipeEnd')
18150 })
18151
18152 if (args.length) addStream.apply(null, args)
18153 return mergedStream
18154}
18155
18156// check and pause streams for pipe.
18157function pauseStreams (streams, options) {
18158 if (!Array.isArray(streams)) {
18159 // Backwards-compat with old-style streams
18160 if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options))
18161 if (!streams._readableState || !streams.pause || !streams.pipe) {
18162 throw new Error('Only readable stream can be merged.')
18163 }
18164 streams.pause()
18165 } else {
18166 for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options)
18167 }
18168 return streams
18169}
18170
18171
18172/***/ }),
18173/* 83 */
18174/***/ (function(module, exports) {
18175
18176module.exports = require("stream");
18177
18178/***/ }),
18179/* 84 */
18180/***/ (function(module, exports, __webpack_require__) {
18181
18182"use strict";
18183
18184Object.defineProperty(exports, "__esModule", { value: true });
18185const stream_1 = __webpack_require__(85);
18186const provider_1 = __webpack_require__(112);
18187class ProviderAsync extends provider_1.default {
18188 constructor() {
18189 super(...arguments);
18190 this._reader = new stream_1.default(this._settings);
18191 }
18192 read(task) {
18193 const root = this._getRootDirectory(task);
18194 const options = this._getReaderOptions(task);
18195 const entries = [];
18196 return new Promise((resolve, reject) => {
18197 const stream = this.api(root, task, options);
18198 stream.once('error', reject);
18199 stream.on('data', (entry) => entries.push(options.transform(entry)));
18200 stream.once('end', () => resolve(entries));
18201 });
18202 }
18203 api(root, task, options) {
18204 if (task.dynamic) {
18205 return this._reader.dynamic(root, options);
18206 }
18207 return this._reader.static(task.patterns, options);
18208 }
18209}
18210exports.default = ProviderAsync;
18211
18212
18213/***/ }),
18214/* 85 */
18215/***/ (function(module, exports, __webpack_require__) {
18216
18217"use strict";
18218
18219Object.defineProperty(exports, "__esModule", { value: true });
18220const stream_1 = __webpack_require__(83);
18221const fsStat = __webpack_require__(86);
18222const fsWalk = __webpack_require__(91);
18223const reader_1 = __webpack_require__(111);
18224class ReaderStream extends reader_1.default {
18225 constructor() {
18226 super(...arguments);
18227 this._walkStream = fsWalk.walkStream;
18228 this._stat = fsStat.stat;
18229 }
18230 dynamic(root, options) {
18231 return this._walkStream(root, options);
18232 }
18233 static(patterns, options) {
18234 const filepaths = patterns.map(this._getFullEntryPath, this);
18235 const stream = new stream_1.PassThrough({ objectMode: true });
18236 stream._write = (index, _enc, done) => {
18237 return this._getEntry(filepaths[index], patterns[index], options)
18238 .then((entry) => {
18239 if (entry !== null && options.entryFilter(entry)) {
18240 stream.push(entry);
18241 }
18242 if (index === filepaths.length - 1) {
18243 stream.end();
18244 }
18245 done();
18246 })
18247 .catch(done);
18248 };
18249 for (let i = 0; i < filepaths.length; i++) {
18250 stream.write(i);
18251 }
18252 return stream;
18253 }
18254 _getEntry(filepath, pattern, options) {
18255 return this._getStat(filepath)
18256 .then((stats) => this._makeEntry(stats, pattern))
18257 .catch((error) => {
18258 if (options.errorFilter(error)) {
18259 return null;
18260 }
18261 throw error;
18262 });
18263 }
18264 _getStat(filepath) {
18265 return new Promise((resolve, reject) => {
18266 this._stat(filepath, this._fsStatSettings, (error, stats) => {
18267 error ? reject(error) : resolve(stats);
18268 });
18269 });
18270 }
18271}
18272exports.default = ReaderStream;
18273
18274
18275/***/ }),
18276/* 86 */
18277/***/ (function(module, exports, __webpack_require__) {
18278
18279"use strict";
18280
18281Object.defineProperty(exports, "__esModule", { value: true });
18282const async = __webpack_require__(87);
18283const sync = __webpack_require__(88);
18284const settings_1 = __webpack_require__(89);
18285exports.Settings = settings_1.default;
18286function stat(path, optionsOrSettingsOrCallback, callback) {
18287 if (typeof optionsOrSettingsOrCallback === 'function') {
18288 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
18289 }
18290 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
18291}
18292exports.stat = stat;
18293function statSync(path, optionsOrSettings) {
18294 const settings = getSettings(optionsOrSettings);
18295 return sync.read(path, settings);
18296}
18297exports.statSync = statSync;
18298function getSettings(settingsOrOptions = {}) {
18299 if (settingsOrOptions instanceof settings_1.default) {
18300 return settingsOrOptions;
18301 }
18302 return new settings_1.default(settingsOrOptions);
18303}
18304
18305
18306/***/ }),
18307/* 87 */
18308/***/ (function(module, exports, __webpack_require__) {
18309
18310"use strict";
18311
18312Object.defineProperty(exports, "__esModule", { value: true });
18313function read(path, settings, callback) {
18314 settings.fs.lstat(path, (lstatError, lstat) => {
18315 if (lstatError) {
18316 return callFailureCallback(callback, lstatError);
18317 }
18318 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
18319 return callSuccessCallback(callback, lstat);
18320 }
18321 settings.fs.stat(path, (statError, stat) => {
18322 if (statError) {
18323 if (settings.throwErrorOnBrokenSymbolicLink) {
18324 return callFailureCallback(callback, statError);
18325 }
18326 return callSuccessCallback(callback, lstat);
18327 }
18328 if (settings.markSymbolicLink) {
18329 stat.isSymbolicLink = () => true;
18330 }
18331 callSuccessCallback(callback, stat);
18332 });
18333 });
18334}
18335exports.read = read;
18336function callFailureCallback(callback, error) {
18337 callback(error);
18338}
18339function callSuccessCallback(callback, result) {
18340 callback(null, result);
18341}
18342
18343
18344/***/ }),
18345/* 88 */
18346/***/ (function(module, exports, __webpack_require__) {
18347
18348"use strict";
18349
18350Object.defineProperty(exports, "__esModule", { value: true });
18351function read(path, settings) {
18352 const lstat = settings.fs.lstatSync(path);
18353 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
18354 return lstat;
18355 }
18356 try {
18357 const stat = settings.fs.statSync(path);
18358 if (settings.markSymbolicLink) {
18359 stat.isSymbolicLink = () => true;
18360 }
18361 return stat;
18362 }
18363 catch (error) {
18364 if (!settings.throwErrorOnBrokenSymbolicLink) {
18365 return lstat;
18366 }
18367 throw error;
18368 }
18369}
18370exports.read = read;
18371
18372
18373/***/ }),
18374/* 89 */
18375/***/ (function(module, exports, __webpack_require__) {
18376
18377"use strict";
18378
18379Object.defineProperty(exports, "__esModule", { value: true });
18380const fs = __webpack_require__(90);
18381class Settings {
18382 constructor(_options = {}) {
18383 this._options = _options;
18384 this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
18385 this.fs = fs.createFileSystemAdapter(this._options.fs);
18386 this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
18387 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
18388 }
18389 _getValue(option, value) {
18390 return option === undefined ? value : option;
18391 }
18392}
18393exports.default = Settings;
18394
18395
18396/***/ }),
18397/* 90 */
18398/***/ (function(module, exports, __webpack_require__) {
18399
18400"use strict";
18401
18402Object.defineProperty(exports, "__esModule", { value: true });
18403const fs = __webpack_require__(36);
18404exports.FILE_SYSTEM_ADAPTER = {
18405 lstat: fs.lstat,
18406 stat: fs.stat,
18407 lstatSync: fs.lstatSync,
18408 statSync: fs.statSync
18409};
18410function createFileSystemAdapter(fsMethods) {
18411 if (!fsMethods) {
18412 return exports.FILE_SYSTEM_ADAPTER;
18413 }
18414 return Object.assign({}, exports.FILE_SYSTEM_ADAPTER, fsMethods);
18415}
18416exports.createFileSystemAdapter = createFileSystemAdapter;
18417
18418
18419/***/ }),
18420/* 91 */
18421/***/ (function(module, exports, __webpack_require__) {
18422
18423"use strict";
18424
18425Object.defineProperty(exports, "__esModule", { value: true });
18426const async_1 = __webpack_require__(92);
18427const stream_1 = __webpack_require__(107);
18428const sync_1 = __webpack_require__(108);
18429const settings_1 = __webpack_require__(110);
18430exports.Settings = settings_1.default;
18431function walk(dir, optionsOrSettingsOrCallback, callback) {
18432 if (typeof optionsOrSettingsOrCallback === 'function') {
18433 return new async_1.default(dir, getSettings()).read(optionsOrSettingsOrCallback);
18434 }
18435 new async_1.default(dir, getSettings(optionsOrSettingsOrCallback)).read(callback);
18436}
18437exports.walk = walk;
18438function walkSync(dir, optionsOrSettings) {
18439 const settings = getSettings(optionsOrSettings);
18440 const provider = new sync_1.default(dir, settings);
18441 return provider.read();
18442}
18443exports.walkSync = walkSync;
18444function walkStream(dir, optionsOrSettings) {
18445 const settings = getSettings(optionsOrSettings);
18446 const provider = new stream_1.default(dir, settings);
18447 return provider.read();
18448}
18449exports.walkStream = walkStream;
18450function getSettings(settingsOrOptions = {}) {
18451 if (settingsOrOptions instanceof settings_1.default) {
18452 return settingsOrOptions;
18453 }
18454 return new settings_1.default(settingsOrOptions);
18455}
18456
18457
18458/***/ }),
18459/* 92 */
18460/***/ (function(module, exports, __webpack_require__) {
18461
18462"use strict";
18463
18464Object.defineProperty(exports, "__esModule", { value: true });
18465const async_1 = __webpack_require__(93);
18466class AsyncProvider {
18467 constructor(_root, _settings) {
18468 this._root = _root;
18469 this._settings = _settings;
18470 this._reader = new async_1.default(this._root, this._settings);
18471 this._storage = new Set();
18472 }
18473 read(callback) {
18474 this._reader.onError((error) => {
18475 callFailureCallback(callback, error);
18476 });
18477 this._reader.onEntry((entry) => {
18478 this._storage.add(entry);
18479 });
18480 this._reader.onEnd(() => {
18481 callSuccessCallback(callback, Array.from(this._storage));
18482 });
18483 this._reader.read();
18484 }
18485}
18486exports.default = AsyncProvider;
18487function callFailureCallback(callback, error) {
18488 callback(error);
18489}
18490function callSuccessCallback(callback, entries) {
18491 callback(null, entries);
18492}
18493
18494
18495/***/ }),
18496/* 93 */
18497/***/ (function(module, exports, __webpack_require__) {
18498
18499"use strict";
18500
18501Object.defineProperty(exports, "__esModule", { value: true });
18502const events_1 = __webpack_require__(45);
18503const fsScandir = __webpack_require__(94);
18504const fastq = __webpack_require__(103);
18505const common = __webpack_require__(105);
18506const reader_1 = __webpack_require__(106);
18507class AsyncReader extends reader_1.default {
18508 constructor(_root, _settings) {
18509 super(_root, _settings);
18510 this._settings = _settings;
18511 this._scandir = fsScandir.scandir;
18512 this._emitter = new events_1.EventEmitter();
18513 this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
18514 this._isFatalError = false;
18515 this._isDestroyed = false;
18516 this._queue.drain = () => {
18517 if (!this._isFatalError) {
18518 this._emitter.emit('end');
18519 }
18520 };
18521 }
18522 read() {
18523 this._isFatalError = false;
18524 this._isDestroyed = false;
18525 setImmediate(() => {
18526 this._pushToQueue(this._root, this._settings.basePath);
18527 });
18528 return this._emitter;
18529 }
18530 destroy() {
18531 if (this._isDestroyed) {
18532 throw new Error('The reader is already destroyed');
18533 }
18534 this._isDestroyed = true;
18535 this._queue.killAndDrain();
18536 }
18537 onEntry(callback) {
18538 this._emitter.on('entry', callback);
18539 }
18540 onError(callback) {
18541 this._emitter.once('error', callback);
18542 }
18543 onEnd(callback) {
18544 this._emitter.once('end', callback);
18545 }
18546 _pushToQueue(dir, base) {
18547 const queueItem = { dir, base };
18548 this._queue.push(queueItem, (error) => {
18549 if (error) {
18550 this._handleError(error);
18551 }
18552 });
18553 }
18554 _worker(item, done) {
18555 this._scandir(item.dir, this._settings.fsScandirSettings, (error, entries) => {
18556 if (error) {
18557 return done(error, undefined);
18558 }
18559 for (const entry of entries) {
18560 this._handleEntry(entry, item.base);
18561 }
18562 done(null, undefined);
18563 });
18564 }
18565 _handleError(error) {
18566 if (!common.isFatalError(this._settings, error)) {
18567 return;
18568 }
18569 this._isFatalError = true;
18570 this._isDestroyed = true;
18571 this._emitter.emit('error', error);
18572 }
18573 _handleEntry(entry, base) {
18574 if (this._isDestroyed || this._isFatalError) {
18575 return;
18576 }
18577 const fullpath = entry.path;
18578 if (base !== undefined) {
18579 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
18580 }
18581 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
18582 this._emitEntry(entry);
18583 }
18584 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
18585 this._pushToQueue(fullpath, entry.path);
18586 }
18587 }
18588 _emitEntry(entry) {
18589 this._emitter.emit('entry', entry);
18590 }
18591}
18592exports.default = AsyncReader;
18593
18594
18595/***/ }),
18596/* 94 */
18597/***/ (function(module, exports, __webpack_require__) {
18598
18599"use strict";
18600
18601Object.defineProperty(exports, "__esModule", { value: true });
18602const async = __webpack_require__(95);
18603const sync = __webpack_require__(100);
18604const settings_1 = __webpack_require__(101);
18605exports.Settings = settings_1.default;
18606function scandir(path, optionsOrSettingsOrCallback, callback) {
18607 if (typeof optionsOrSettingsOrCallback === 'function') {
18608 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
18609 }
18610 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
18611}
18612exports.scandir = scandir;
18613function scandirSync(path, optionsOrSettings) {
18614 const settings = getSettings(optionsOrSettings);
18615 return sync.read(path, settings);
18616}
18617exports.scandirSync = scandirSync;
18618function getSettings(settingsOrOptions = {}) {
18619 if (settingsOrOptions instanceof settings_1.default) {
18620 return settingsOrOptions;
18621 }
18622 return new settings_1.default(settingsOrOptions);
18623}
18624
18625
18626/***/ }),
18627/* 95 */
18628/***/ (function(module, exports, __webpack_require__) {
18629
18630"use strict";
18631
18632Object.defineProperty(exports, "__esModule", { value: true });
18633const fsStat = __webpack_require__(86);
18634const rpl = __webpack_require__(96);
18635const constants_1 = __webpack_require__(97);
18636const utils = __webpack_require__(98);
18637function read(dir, settings, callback) {
18638 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
18639 return readdirWithFileTypes(dir, settings, callback);
18640 }
18641 return readdir(dir, settings, callback);
18642}
18643exports.read = read;
18644function readdirWithFileTypes(dir, settings, callback) {
18645 settings.fs.readdir(dir, { withFileTypes: true }, (readdirError, dirents) => {
18646 if (readdirError) {
18647 return callFailureCallback(callback, readdirError);
18648 }
18649 const entries = dirents.map((dirent) => ({
18650 dirent,
18651 name: dirent.name,
18652 path: `${dir}${settings.pathSegmentSeparator}${dirent.name}`
18653 }));
18654 if (!settings.followSymbolicLinks) {
18655 return callSuccessCallback(callback, entries);
18656 }
18657 const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
18658 rpl(tasks, (rplError, rplEntries) => {
18659 if (rplError) {
18660 return callFailureCallback(callback, rplError);
18661 }
18662 callSuccessCallback(callback, rplEntries);
18663 });
18664 });
18665}
18666exports.readdirWithFileTypes = readdirWithFileTypes;
18667function makeRplTaskEntry(entry, settings) {
18668 return (done) => {
18669 if (!entry.dirent.isSymbolicLink()) {
18670 return done(null, entry);
18671 }
18672 settings.fs.stat(entry.path, (statError, stats) => {
18673 if (statError) {
18674 if (settings.throwErrorOnBrokenSymbolicLink) {
18675 return done(statError);
18676 }
18677 return done(null, entry);
18678 }
18679 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
18680 return done(null, entry);
18681 });
18682 };
18683}
18684function readdir(dir, settings, callback) {
18685 settings.fs.readdir(dir, (readdirError, names) => {
18686 if (readdirError) {
18687 return callFailureCallback(callback, readdirError);
18688 }
18689 const filepaths = names.map((name) => `${dir}${settings.pathSegmentSeparator}${name}`);
18690 const tasks = filepaths.map((filepath) => {
18691 return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
18692 });
18693 rpl(tasks, (rplError, results) => {
18694 if (rplError) {
18695 return callFailureCallback(callback, rplError);
18696 }
18697 const entries = [];
18698 for (let index = 0; index < names.length; index++) {
18699 const name = names[index];
18700 const stats = results[index];
18701 const entry = {
18702 name,
18703 path: filepaths[index],
18704 dirent: utils.fs.createDirentFromStats(name, stats)
18705 };
18706 if (settings.stats) {
18707 entry.stats = stats;
18708 }
18709 entries.push(entry);
18710 }
18711 callSuccessCallback(callback, entries);
18712 });
18713 });
18714}
18715exports.readdir = readdir;
18716function callFailureCallback(callback, error) {
18717 callback(error);
18718}
18719function callSuccessCallback(callback, result) {
18720 callback(null, result);
18721}
18722
18723
18724/***/ }),
18725/* 96 */
18726/***/ (function(module, exports) {
18727
18728module.exports = runParallel
18729
18730function runParallel (tasks, cb) {
18731 var results, pending, keys
18732 var isSync = true
18733
18734 if (Array.isArray(tasks)) {
18735 results = []
18736 pending = tasks.length
18737 } else {
18738 keys = Object.keys(tasks)
18739 results = {}
18740 pending = keys.length
18741 }
18742
18743 function done (err) {
18744 function end () {
18745 if (cb) cb(err, results)
18746 cb = null
18747 }
18748 if (isSync) process.nextTick(end)
18749 else end()
18750 }
18751
18752 function each (i, err, result) {
18753 results[i] = result
18754 if (--pending === 0 || err) {
18755 done(err)
18756 }
18757 }
18758
18759 if (!pending) {
18760 // empty
18761 done(null)
18762 } else if (keys) {
18763 // object
18764 keys.forEach(function (key) {
18765 tasks[key](function (err, result) { each(key, err, result) })
18766 })
18767 } else {
18768 // array
18769 tasks.forEach(function (task, i) {
18770 task(function (err, result) { each(i, err, result) })
18771 })
18772 }
18773
18774 isSync = false
18775}
18776
18777
18778/***/ }),
18779/* 97 */
18780/***/ (function(module, exports, __webpack_require__) {
18781
18782"use strict";
18783
18784Object.defineProperty(exports, "__esModule", { value: true });
18785const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
18786const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
18787const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
18788/**
18789 * IS `true` for Node.js 10.10 and greater.
18790 */
18791exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = MAJOR_VERSION > 10 || (MAJOR_VERSION === 10 && MINOR_VERSION >= 10);
18792
18793
18794/***/ }),
18795/* 98 */
18796/***/ (function(module, exports, __webpack_require__) {
18797
18798"use strict";
18799
18800Object.defineProperty(exports, "__esModule", { value: true });
18801const fs = __webpack_require__(99);
18802exports.fs = fs;
18803
18804
18805/***/ }),
18806/* 99 */
18807/***/ (function(module, exports, __webpack_require__) {
18808
18809"use strict";
18810
18811Object.defineProperty(exports, "__esModule", { value: true });
18812class DirentFromStats {
18813 constructor(name, stats) {
18814 this.name = name;
18815 this.isBlockDevice = stats.isBlockDevice.bind(stats);
18816 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
18817 this.isDirectory = stats.isDirectory.bind(stats);
18818 this.isFIFO = stats.isFIFO.bind(stats);
18819 this.isFile = stats.isFile.bind(stats);
18820 this.isSocket = stats.isSocket.bind(stats);
18821 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
18822 }
18823}
18824function createDirentFromStats(name, stats) {
18825 return new DirentFromStats(name, stats);
18826}
18827exports.createDirentFromStats = createDirentFromStats;
18828
18829
18830/***/ }),
18831/* 100 */
18832/***/ (function(module, exports, __webpack_require__) {
18833
18834"use strict";
18835
18836Object.defineProperty(exports, "__esModule", { value: true });
18837const fsStat = __webpack_require__(86);
18838const constants_1 = __webpack_require__(97);
18839const utils = __webpack_require__(98);
18840function read(dir, settings) {
18841 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
18842 return readdirWithFileTypes(dir, settings);
18843 }
18844 return readdir(dir, settings);
18845}
18846exports.read = read;
18847function readdirWithFileTypes(dir, settings) {
18848 const dirents = settings.fs.readdirSync(dir, { withFileTypes: true });
18849 return dirents.map((dirent) => {
18850 const entry = {
18851 dirent,
18852 name: dirent.name,
18853 path: `${dir}${settings.pathSegmentSeparator}${dirent.name}`
18854 };
18855 if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
18856 try {
18857 const stats = settings.fs.statSync(entry.path);
18858 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
18859 }
18860 catch (error) {
18861 if (settings.throwErrorOnBrokenSymbolicLink) {
18862 throw error;
18863 }
18864 }
18865 }
18866 return entry;
18867 });
18868}
18869exports.readdirWithFileTypes = readdirWithFileTypes;
18870function readdir(dir, settings) {
18871 const names = settings.fs.readdirSync(dir);
18872 return names.map((name) => {
18873 const entryPath = `${dir}${settings.pathSegmentSeparator}${name}`;
18874 const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
18875 const entry = {
18876 name,
18877 path: entryPath,
18878 dirent: utils.fs.createDirentFromStats(name, stats)
18879 };
18880 if (settings.stats) {
18881 entry.stats = stats;
18882 }
18883 return entry;
18884 });
18885}
18886exports.readdir = readdir;
18887
18888
18889/***/ }),
18890/* 101 */
18891/***/ (function(module, exports, __webpack_require__) {
18892
18893"use strict";
18894
18895Object.defineProperty(exports, "__esModule", { value: true });
18896const path = __webpack_require__(15);
18897const fsStat = __webpack_require__(86);
18898const fs = __webpack_require__(102);
18899class Settings {
18900 constructor(_options = {}) {
18901 this._options = _options;
18902 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
18903 this.fs = fs.createFileSystemAdapter(this._options.fs);
18904 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
18905 this.stats = this._getValue(this._options.stats, false);
18906 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
18907 this.fsStatSettings = new fsStat.Settings({
18908 followSymbolicLink: this.followSymbolicLinks,
18909 fs: this.fs,
18910 throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
18911 });
18912 }
18913 _getValue(option, value) {
18914 return option === undefined ? value : option;
18915 }
18916}
18917exports.default = Settings;
18918
18919
18920/***/ }),
18921/* 102 */
18922/***/ (function(module, exports, __webpack_require__) {
18923
18924"use strict";
18925
18926Object.defineProperty(exports, "__esModule", { value: true });
18927const fs = __webpack_require__(36);
18928exports.FILE_SYSTEM_ADAPTER = {
18929 lstat: fs.lstat,
18930 stat: fs.stat,
18931 lstatSync: fs.lstatSync,
18932 statSync: fs.statSync,
18933 readdir: fs.readdir,
18934 readdirSync: fs.readdirSync
18935};
18936function createFileSystemAdapter(fsMethods) {
18937 if (!fsMethods) {
18938 return exports.FILE_SYSTEM_ADAPTER;
18939 }
18940 return Object.assign({}, exports.FILE_SYSTEM_ADAPTER, fsMethods);
18941}
18942exports.createFileSystemAdapter = createFileSystemAdapter;
18943
18944
18945/***/ }),
18946/* 103 */
18947/***/ (function(module, exports, __webpack_require__) {
18948
18949"use strict";
18950
18951
18952var reusify = __webpack_require__(104)
18953
18954function fastqueue (context, worker, concurrency) {
18955 if (typeof context === 'function') {
18956 concurrency = worker
18957 worker = context
18958 context = null
18959 }
18960
18961 var cache = reusify(Task)
18962 var queueHead = null
18963 var queueTail = null
18964 var _running = 0
18965
18966 var self = {
18967 push: push,
18968 drain: noop,
18969 saturated: noop,
18970 pause: pause,
18971 paused: false,
18972 concurrency: concurrency,
18973 running: running,
18974 resume: resume,
18975 idle: idle,
18976 length: length,
18977 unshift: unshift,
18978 empty: noop,
18979 kill: kill,
18980 killAndDrain: killAndDrain
18981 }
18982
18983 return self
18984
18985 function running () {
18986 return _running
18987 }
18988
18989 function pause () {
18990 self.paused = true
18991 }
18992
18993 function length () {
18994 var current = queueHead
18995 var counter = 0
18996
18997 while (current) {
18998 current = current.next
18999 counter++
19000 }
19001
19002 return counter
19003 }
19004
19005 function resume () {
19006 if (!self.paused) return
19007 self.paused = false
19008 for (var i = 0; i < self.concurrency; i++) {
19009 _running++
19010 release()
19011 }
19012 }
19013
19014 function idle () {
19015 return _running === 0 && self.length() === 0
19016 }
19017
19018 function push (value, done) {
19019 var current = cache.get()
19020
19021 current.context = context
19022 current.release = release
19023 current.value = value
19024 current.callback = done || noop
19025
19026 if (_running === self.concurrency || self.paused) {
19027 if (queueTail) {
19028 queueTail.next = current
19029 queueTail = current
19030 } else {
19031 queueHead = current
19032 queueTail = current
19033 self.saturated()
19034 }
19035 } else {
19036 _running++
19037 worker.call(context, current.value, current.worked)
19038 }
19039 }
19040
19041 function unshift (value, done) {
19042 var current = cache.get()
19043
19044 current.context = context
19045 current.release = release
19046 current.value = value
19047 current.callback = done || noop
19048
19049 if (_running === self.concurrency || self.paused) {
19050 if (queueHead) {
19051 current.next = queueHead
19052 queueHead = current
19053 } else {
19054 queueHead = current
19055 queueTail = current
19056 self.saturated()
19057 }
19058 } else {
19059 _running++
19060 worker.call(context, current.value, current.worked)
19061 }
19062 }
19063
19064 function release (holder) {
19065 if (holder) {
19066 cache.release(holder)
19067 }
19068 var next = queueHead
19069 if (next) {
19070 if (!self.paused) {
19071 if (queueTail === queueHead) {
19072 queueTail = null
19073 }
19074 queueHead = next.next
19075 next.next = null
19076 worker.call(context, next.value, next.worked)
19077 if (queueTail === null) {
19078 self.empty()
19079 }
19080 } else {
19081 _running--
19082 }
19083 } else if (--_running === 0) {
19084 self.drain()
19085 }
19086 }
19087
19088 function kill () {
19089 queueHead = null
19090 queueTail = null
19091 self.drain = noop
19092 }
19093
19094 function killAndDrain () {
19095 queueHead = null
19096 queueTail = null
19097 self.drain()
19098 self.drain = noop
19099 }
19100}
19101
19102function noop () {}
19103
19104function Task () {
19105 this.value = null
19106 this.callback = noop
19107 this.next = null
19108 this.release = noop
19109 this.context = null
19110
19111 var self = this
19112
19113 this.worked = function worked (err, result) {
19114 var callback = self.callback
19115 self.value = null
19116 self.callback = noop
19117 callback.call(self.context, err, result)
19118 self.release(self)
19119 }
19120}
19121
19122module.exports = fastqueue
19123
19124
19125/***/ }),
19126/* 104 */
19127/***/ (function(module, exports, __webpack_require__) {
19128
19129"use strict";
19130
19131
19132function reusify (Constructor) {
19133 var head = new Constructor()
19134 var tail = head
19135
19136 function get () {
19137 var current = head
19138
19139 if (current.next) {
19140 head = current.next
19141 } else {
19142 head = new Constructor()
19143 tail = head
19144 }
19145
19146 current.next = null
19147
19148 return current
19149 }
19150
19151 function release (obj) {
19152 tail.next = obj
19153 tail = obj
19154 }
19155
19156 return {
19157 get: get,
19158 release: release
19159 }
19160}
19161
19162module.exports = reusify
19163
19164
19165/***/ }),
19166/* 105 */
19167/***/ (function(module, exports, __webpack_require__) {
19168
19169"use strict";
19170
19171Object.defineProperty(exports, "__esModule", { value: true });
19172function isFatalError(settings, error) {
19173 if (settings.errorFilter === null) {
19174 return true;
19175 }
19176 return !settings.errorFilter(error);
19177}
19178exports.isFatalError = isFatalError;
19179function isAppliedFilter(filter, value) {
19180 return filter === null || filter(value);
19181}
19182exports.isAppliedFilter = isAppliedFilter;
19183function replacePathSegmentSeparator(filepath, separator) {
19184 return filepath.split(/[\\\/]/).join(separator);
19185}
19186exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
19187function joinPathSegments(a, b, separator) {
19188 if (a === '') {
19189 return b;
19190 }
19191 return a + separator + b;
19192}
19193exports.joinPathSegments = joinPathSegments;
19194
19195
19196/***/ }),
19197/* 106 */
19198/***/ (function(module, exports, __webpack_require__) {
19199
19200"use strict";
19201
19202Object.defineProperty(exports, "__esModule", { value: true });
19203const common = __webpack_require__(105);
19204class Reader {
19205 constructor(_root, _settings) {
19206 this._root = _root;
19207 this._settings = _settings;
19208 this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
19209 }
19210}
19211exports.default = Reader;
19212
19213
19214/***/ }),
19215/* 107 */
19216/***/ (function(module, exports, __webpack_require__) {
19217
19218"use strict";
19219
19220Object.defineProperty(exports, "__esModule", { value: true });
19221const stream_1 = __webpack_require__(83);
19222const async_1 = __webpack_require__(93);
19223class StreamProvider {
19224 constructor(_root, _settings) {
19225 this._root = _root;
19226 this._settings = _settings;
19227 this._reader = new async_1.default(this._root, this._settings);
19228 this._stream = new stream_1.Readable({
19229 objectMode: true,
19230 read: () => { },
19231 destroy: this._reader.destroy.bind(this._reader)
19232 });
19233 }
19234 read() {
19235 this._reader.onError((error) => {
19236 this._stream.emit('error', error);
19237 });
19238 this._reader.onEntry((entry) => {
19239 this._stream.push(entry);
19240 });
19241 this._reader.onEnd(() => {
19242 this._stream.push(null);
19243 });
19244 this._reader.read();
19245 return this._stream;
19246 }
19247}
19248exports.default = StreamProvider;
19249
19250
19251/***/ }),
19252/* 108 */
19253/***/ (function(module, exports, __webpack_require__) {
19254
19255"use strict";
19256
19257Object.defineProperty(exports, "__esModule", { value: true });
19258const sync_1 = __webpack_require__(109);
19259class SyncProvider {
19260 constructor(_root, _settings) {
19261 this._root = _root;
19262 this._settings = _settings;
19263 this._reader = new sync_1.default(this._root, this._settings);
19264 }
19265 read() {
19266 return this._reader.read();
19267 }
19268}
19269exports.default = SyncProvider;
19270
19271
19272/***/ }),
19273/* 109 */
19274/***/ (function(module, exports, __webpack_require__) {
19275
19276"use strict";
19277
19278Object.defineProperty(exports, "__esModule", { value: true });
19279const fsScandir = __webpack_require__(94);
19280const common = __webpack_require__(105);
19281const reader_1 = __webpack_require__(106);
19282class SyncReader extends reader_1.default {
19283 constructor() {
19284 super(...arguments);
19285 this._scandir = fsScandir.scandirSync;
19286 this._storage = new Set();
19287 this._queue = new Set();
19288 }
19289 read() {
19290 this._pushToQueue(this._root, this._settings.basePath);
19291 this._handleQueue();
19292 return Array.from(this._storage);
19293 }
19294 _pushToQueue(dir, base) {
19295 this._queue.add({ dir, base });
19296 }
19297 _handleQueue() {
19298 for (const item of this._queue.values()) {
19299 this._handleDirectory(item.dir, item.base);
19300 }
19301 }
19302 _handleDirectory(dir, base) {
19303 try {
19304 const entries = this._scandir(dir, this._settings.fsScandirSettings);
19305 for (const entry of entries) {
19306 this._handleEntry(entry, base);
19307 }
19308 }
19309 catch (error) {
19310 this._handleError(error);
19311 }
19312 }
19313 _handleError(error) {
19314 if (!common.isFatalError(this._settings, error)) {
19315 return;
19316 }
19317 throw error;
19318 }
19319 _handleEntry(entry, base) {
19320 const fullpath = entry.path;
19321 if (base !== undefined) {
19322 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
19323 }
19324 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
19325 this._pushToStorage(entry);
19326 }
19327 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
19328 this._pushToQueue(fullpath, entry.path);
19329 }
19330 }
19331 _pushToStorage(entry) {
19332 this._storage.add(entry);
19333 }
19334}
19335exports.default = SyncReader;
19336
19337
19338/***/ }),
19339/* 110 */
19340/***/ (function(module, exports, __webpack_require__) {
19341
19342"use strict";
19343
19344Object.defineProperty(exports, "__esModule", { value: true });
19345const path = __webpack_require__(15);
19346const fsScandir = __webpack_require__(94);
19347class Settings {
19348 constructor(_options = {}) {
19349 this._options = _options;
19350 this.basePath = this._getValue(this._options.basePath, undefined);
19351 this.concurrency = this._getValue(this._options.concurrency, Infinity);
19352 this.deepFilter = this._getValue(this._options.deepFilter, null);
19353 this.entryFilter = this._getValue(this._options.entryFilter, null);
19354 this.errorFilter = this._getValue(this._options.errorFilter, null);
19355 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
19356 this.fsScandirSettings = new fsScandir.Settings({
19357 followSymbolicLinks: this._options.followSymbolicLinks,
19358 fs: this._options.fs,
19359 pathSegmentSeparator: this._options.pathSegmentSeparator,
19360 stats: this._options.stats,
19361 throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
19362 });
19363 }
19364 _getValue(option, value) {
19365 return option === undefined ? value : option;
19366 }
19367}
19368exports.default = Settings;
19369
19370
19371/***/ }),
19372/* 111 */
19373/***/ (function(module, exports, __webpack_require__) {
19374
19375"use strict";
19376
19377Object.defineProperty(exports, "__esModule", { value: true });
19378const path = __webpack_require__(15);
19379const fsStat = __webpack_require__(86);
19380const utils = __webpack_require__(55);
19381class Reader {
19382 constructor(_settings) {
19383 this._settings = _settings;
19384 this._fsStatSettings = new fsStat.Settings({
19385 followSymbolicLink: this._settings.followSymbolicLinks,
19386 fs: this._settings.fs,
19387 throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
19388 });
19389 }
19390 _getFullEntryPath(filepath) {
19391 return path.resolve(this._settings.cwd, filepath);
19392 }
19393 _makeEntry(stats, pattern) {
19394 const entry = {
19395 name: pattern,
19396 path: pattern,
19397 dirent: utils.fs.createDirentFromStats(pattern, stats)
19398 };
19399 if (this._settings.stats) {
19400 entry.stats = stats;
19401 }
19402 return entry;
19403 }
19404 _isFatalError(error) {
19405 return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
19406 }
19407}
19408exports.default = Reader;
19409
19410
19411/***/ }),
19412/* 112 */
19413/***/ (function(module, exports, __webpack_require__) {
19414
19415"use strict";
19416
19417Object.defineProperty(exports, "__esModule", { value: true });
19418const path = __webpack_require__(15);
19419const deep_1 = __webpack_require__(113);
19420const entry_1 = __webpack_require__(114);
19421const error_1 = __webpack_require__(115);
19422const entry_2 = __webpack_require__(116);
19423class Provider {
19424 constructor(_settings) {
19425 this._settings = _settings;
19426 this.errorFilter = new error_1.default(this._settings);
19427 this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
19428 this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
19429 this.entryTransformer = new entry_2.default(this._settings);
19430 }
19431 _getRootDirectory(task) {
19432 return path.resolve(this._settings.cwd, task.base);
19433 }
19434 _getReaderOptions(task) {
19435 const basePath = task.base === '.' ? '' : task.base;
19436 return {
19437 basePath,
19438 pathSegmentSeparator: '/',
19439 concurrency: this._settings.concurrency,
19440 deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
19441 entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
19442 errorFilter: this.errorFilter.getFilter(),
19443 followSymbolicLinks: this._settings.followSymbolicLinks,
19444 fs: this._settings.fs,
19445 stats: this._settings.stats,
19446 throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
19447 transform: this.entryTransformer.getTransformer()
19448 };
19449 }
19450 _getMicromatchOptions() {
19451 return {
19452 dot: this._settings.dot,
19453 matchBase: this._settings.baseNameMatch,
19454 nobrace: !this._settings.braceExpansion,
19455 nocase: !this._settings.caseSensitiveMatch,
19456 noext: !this._settings.extglob,
19457 noglobstar: !this._settings.globstar,
19458 posix: true,
19459 strictSlashes: false
19460 };
19461 }
19462}
19463exports.default = Provider;
19464
19465
19466/***/ }),
19467/* 113 */
19468/***/ (function(module, exports, __webpack_require__) {
19469
19470"use strict";
19471
19472Object.defineProperty(exports, "__esModule", { value: true });
19473const utils = __webpack_require__(55);
19474class DeepFilter {
19475 constructor(_settings, _micromatchOptions) {
19476 this._settings = _settings;
19477 this._micromatchOptions = _micromatchOptions;
19478 }
19479 getFilter(basePath, positive, negative) {
19480 const maxPatternDepth = this._getMaxPatternDepth(positive);
19481 const negativeRe = this._getNegativePatternsRe(negative);
19482 return (entry) => this._filter(basePath, entry, negativeRe, maxPatternDepth);
19483 }
19484 _getMaxPatternDepth(patterns) {
19485 const globstar = patterns.some(utils.pattern.hasGlobStar);
19486 return globstar ? Infinity : utils.pattern.getMaxNaivePatternsDepth(patterns);
19487 }
19488 _getNegativePatternsRe(patterns) {
19489 const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
19490 return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
19491 }
19492 _filter(basePath, entry, negativeRe, maxPatternDepth) {
19493 const depth = this._getEntryDepth(basePath, entry.path);
19494 if (this._isSkippedByDeep(depth)) {
19495 return false;
19496 }
19497 if (this._isSkippedByMaxPatternDepth(depth, maxPatternDepth)) {
19498 return false;
19499 }
19500 if (this._isSkippedSymbolicLink(entry)) {
19501 return false;
19502 }
19503 if (this._isSkippedDotDirectory(entry)) {
19504 return false;
19505 }
19506 return this._isSkippedByNegativePatterns(entry, negativeRe);
19507 }
19508 _getEntryDepth(basePath, entryPath) {
19509 const basePathDepth = basePath.split('/').length;
19510 const entryPathDepth = entryPath.split('/').length;
19511 return entryPathDepth - (basePath === '' ? 0 : basePathDepth);
19512 }
19513 _isSkippedByDeep(entryDepth) {
19514 return entryDepth >= this._settings.deep;
19515 }
19516 _isSkippedByMaxPatternDepth(entryDepth, maxPatternDepth) {
19517 return !this._settings.baseNameMatch && maxPatternDepth !== Infinity && entryDepth > maxPatternDepth;
19518 }
19519 _isSkippedSymbolicLink(entry) {
19520 return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
19521 }
19522 _isSkippedDotDirectory(entry) {
19523 return !this._settings.dot && entry.name.startsWith('.');
19524 }
19525 _isSkippedByNegativePatterns(entry, negativeRe) {
19526 return !utils.pattern.matchAny(entry.path, negativeRe);
19527 }
19528}
19529exports.default = DeepFilter;
19530
19531
19532/***/ }),
19533/* 114 */
19534/***/ (function(module, exports, __webpack_require__) {
19535
19536"use strict";
19537
19538Object.defineProperty(exports, "__esModule", { value: true });
19539const utils = __webpack_require__(55);
19540class EntryFilter {
19541 constructor(_settings, _micromatchOptions) {
19542 this._settings = _settings;
19543 this._micromatchOptions = _micromatchOptions;
19544 this.index = new Map();
19545 }
19546 getFilter(positive, negative) {
19547 const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
19548 const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
19549 return (entry) => this._filter(entry, positiveRe, negativeRe);
19550 }
19551 _filter(entry, positiveRe, negativeRe) {
19552 if (this._settings.unique) {
19553 if (this._isDuplicateEntry(entry)) {
19554 return false;
19555 }
19556 this._createIndexRecord(entry);
19557 }
19558 if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
19559 return false;
19560 }
19561 if (this._isSkippedByAbsoluteNegativePatterns(entry, negativeRe)) {
19562 return false;
19563 }
19564 const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
19565 return this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
19566 }
19567 _isDuplicateEntry(entry) {
19568 return this.index.has(entry.path);
19569 }
19570 _createIndexRecord(entry) {
19571 this.index.set(entry.path, undefined);
19572 }
19573 _onlyFileFilter(entry) {
19574 return this._settings.onlyFiles && !entry.dirent.isFile();
19575 }
19576 _onlyDirectoryFilter(entry) {
19577 return this._settings.onlyDirectories && !entry.dirent.isDirectory();
19578 }
19579 _isSkippedByAbsoluteNegativePatterns(entry, negativeRe) {
19580 if (!this._settings.absolute) {
19581 return false;
19582 }
19583 const fullpath = utils.path.makeAbsolute(this._settings.cwd, entry.path);
19584 return this._isMatchToPatterns(fullpath, negativeRe);
19585 }
19586 _isMatchToPatterns(filepath, patternsRe) {
19587 return utils.pattern.matchAny(filepath, patternsRe);
19588 }
19589}
19590exports.default = EntryFilter;
19591
19592
19593/***/ }),
19594/* 115 */
19595/***/ (function(module, exports, __webpack_require__) {
19596
19597"use strict";
19598
19599Object.defineProperty(exports, "__esModule", { value: true });
19600const utils = __webpack_require__(55);
19601class ErrorFilter {
19602 constructor(_settings) {
19603 this._settings = _settings;
19604 }
19605 getFilter() {
19606 return (error) => this._isNonFatalError(error);
19607 }
19608 _isNonFatalError(error) {
19609 return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
19610 }
19611}
19612exports.default = ErrorFilter;
19613
19614
19615/***/ }),
19616/* 116 */
19617/***/ (function(module, exports, __webpack_require__) {
19618
19619"use strict";
19620
19621Object.defineProperty(exports, "__esModule", { value: true });
19622const utils = __webpack_require__(55);
19623class EntryTransformer {
19624 constructor(_settings) {
19625 this._settings = _settings;
19626 }
19627 getTransformer() {
19628 return (entry) => this._transform(entry);
19629 }
19630 _transform(entry) {
19631 let filepath = entry.path;
19632 if (this._settings.absolute) {
19633 filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
19634 filepath = utils.path.unixify(filepath);
19635 }
19636 if (this._settings.markDirectories && entry.dirent.isDirectory()) {
19637 filepath += '/';
19638 }
19639 if (!this._settings.objectMode) {
19640 return filepath;
19641 }
19642 return Object.assign({}, entry, { path: filepath });
19643 }
19644}
19645exports.default = EntryTransformer;
19646
19647
19648/***/ }),
19649/* 117 */
19650/***/ (function(module, exports, __webpack_require__) {
19651
19652"use strict";
19653
19654Object.defineProperty(exports, "__esModule", { value: true });
19655const stream_1 = __webpack_require__(83);
19656const stream_2 = __webpack_require__(85);
19657const provider_1 = __webpack_require__(112);
19658class ProviderStream extends provider_1.default {
19659 constructor() {
19660 super(...arguments);
19661 this._reader = new stream_2.default(this._settings);
19662 }
19663 read(task) {
19664 const root = this._getRootDirectory(task);
19665 const options = this._getReaderOptions(task);
19666 const source = this.api(root, task, options);
19667 const dest = new stream_1.Readable({ objectMode: true, read: () => { } });
19668 source
19669 .once('error', (error) => dest.emit('error', error))
19670 .on('data', (entry) => dest.emit('data', options.transform(entry)))
19671 .once('end', () => dest.emit('end'));
19672 return dest;
19673 }
19674 api(root, task, options) {
19675 if (task.dynamic) {
19676 return this._reader.dynamic(root, options);
19677 }
19678 return this._reader.static(task.patterns, options);
19679 }
19680}
19681exports.default = ProviderStream;
19682
19683
19684/***/ }),
19685/* 118 */
19686/***/ (function(module, exports, __webpack_require__) {
19687
19688"use strict";
19689
19690Object.defineProperty(exports, "__esModule", { value: true });
19691const sync_1 = __webpack_require__(119);
19692const provider_1 = __webpack_require__(112);
19693class ProviderSync extends provider_1.default {
19694 constructor() {
19695 super(...arguments);
19696 this._reader = new sync_1.default(this._settings);
19697 }
19698 read(task) {
19699 const root = this._getRootDirectory(task);
19700 const options = this._getReaderOptions(task);
19701 const entries = this.api(root, task, options);
19702 return entries.map(options.transform);
19703 }
19704 api(root, task, options) {
19705 if (task.dynamic) {
19706 return this._reader.dynamic(root, options);
19707 }
19708 return this._reader.static(task.patterns, options);
19709 }
19710}
19711exports.default = ProviderSync;
19712
19713
19714/***/ }),
19715/* 119 */
19716/***/ (function(module, exports, __webpack_require__) {
19717
19718"use strict";
19719
19720Object.defineProperty(exports, "__esModule", { value: true });
19721const fsStat = __webpack_require__(86);
19722const fsWalk = __webpack_require__(91);
19723const reader_1 = __webpack_require__(111);
19724class ReaderSync extends reader_1.default {
19725 constructor() {
19726 super(...arguments);
19727 this._walkSync = fsWalk.walkSync;
19728 this._statSync = fsStat.statSync;
19729 }
19730 dynamic(root, options) {
19731 return this._walkSync(root, options);
19732 }
19733 static(patterns, options) {
19734 const entries = [];
19735 for (const pattern of patterns) {
19736 const filepath = this._getFullEntryPath(pattern);
19737 const entry = this._getEntry(filepath, pattern, options);
19738 if (entry === null || !options.entryFilter(entry)) {
19739 continue;
19740 }
19741 entries.push(entry);
19742 }
19743 return entries;
19744 }
19745 _getEntry(filepath, pattern, options) {
19746 try {
19747 const stats = this._getStat(filepath);
19748 return this._makeEntry(stats, pattern);
19749 }
19750 catch (error) {
19751 if (options.errorFilter(error)) {
19752 return null;
19753 }
19754 throw error;
19755 }
19756 }
19757 _getStat(filepath) {
19758 return this._statSync(filepath, this._fsStatSettings);
19759 }
19760}
19761exports.default = ReaderSync;
19762
19763
19764/***/ }),
19765/* 120 */
19766/***/ (function(module, exports, __webpack_require__) {
19767
19768"use strict";
19769
19770Object.defineProperty(exports, "__esModule", { value: true });
19771const fs = __webpack_require__(36);
19772const os = __webpack_require__(16);
19773const CPU_COUNT = os.cpus().length;
19774exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
19775 lstat: fs.lstat,
19776 lstatSync: fs.lstatSync,
19777 stat: fs.stat,
19778 statSync: fs.statSync,
19779 readdir: fs.readdir,
19780 readdirSync: fs.readdirSync
19781};
19782// tslint:enable no-redundant-jsdoc
19783class Settings {
19784 constructor(_options = {}) {
19785 this._options = _options;
19786 this.absolute = this._getValue(this._options.absolute, false);
19787 this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
19788 this.braceExpansion = this._getValue(this._options.braceExpansion, true);
19789 this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
19790 this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
19791 this.cwd = this._getValue(this._options.cwd, process.cwd());
19792 this.deep = this._getValue(this._options.deep, Infinity);
19793 this.dot = this._getValue(this._options.dot, false);
19794 this.extglob = this._getValue(this._options.extglob, true);
19795 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
19796 this.fs = this._getFileSystemMethods(this._options.fs);
19797 this.globstar = this._getValue(this._options.globstar, true);
19798 this.ignore = this._getValue(this._options.ignore, []);
19799 this.markDirectories = this._getValue(this._options.markDirectories, false);
19800 this.objectMode = this._getValue(this._options.objectMode, false);
19801 this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
19802 this.onlyFiles = this._getValue(this._options.onlyFiles, true);
19803 this.stats = this._getValue(this._options.stats, false);
19804 this.suppressErrors = this._getValue(this._options.suppressErrors, false);
19805 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
19806 this.unique = this._getValue(this._options.unique, true);
19807 if (this.onlyDirectories) {
19808 this.onlyFiles = false;
19809 }
19810 if (this.stats) {
19811 this.objectMode = true;
19812 }
19813 }
19814 _getValue(option, value) {
19815 return option === undefined ? value : option;
19816 }
19817 _getFileSystemMethods(methods = {}) {
19818 return Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER, methods);
19819 }
19820}
19821exports.default = Settings;
19822
19823
19824/***/ }),
19825/* 121 */
19826/***/ (function(module, exports, __webpack_require__) {
19827
19828"use strict";
19829
19830Object.defineProperty(exports, "__esModule", { value: true });
19831var connection_1 = __webpack_require__(122);
19832function default_1(name) {
19833 return {
19834 log: function (message) {
19835 connection_1.connection.console.log(name + ": " + message);
19836 },
19837 info: function (message) {
19838 connection_1.connection.console.info(name + ": " + message);
19839 },
19840 warn: function (message) {
19841 connection_1.connection.console.warn(name + ": " + message);
19842 },
19843 error: function (message) {
19844 connection_1.connection.console.error(name + ": " + message);
19845 },
19846 };
19847}
19848exports.default = default_1;
19849
19850
19851/***/ }),
19852/* 122 */
19853/***/ (function(module, exports, __webpack_require__) {
19854
19855"use strict";
19856
19857Object.defineProperty(exports, "__esModule", { value: true });
19858var vscode_languageserver_1 = __webpack_require__(4);
19859// create connection by command argv
19860exports.connection = vscode_languageserver_1.createConnection();
19861
19862
19863/***/ }),
19864/* 123 */
19865/***/ (function(module) {
19866
19867module.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()`\"]}}}");
19868
19869/***/ }),
19870/* 124 */
19871/***/ (function(module, exports, __webpack_require__) {
19872
19873"use strict";
19874
19875Object.defineProperty(exports, "__esModule", { value: true });
19876var providers = [];
19877function useProvider(p) {
19878 providers.push(p);
19879}
19880exports.useProvider = useProvider;
19881function getProvider() {
19882 return providers.reduce(function (pre, next) {
19883 return function (line, uri, position, items) { return pre(line, uri, position, items.concat(next(line, uri, position))); };
19884 }, function (_line, _uri, _position, items) { return items; });
19885}
19886exports.getProvider = getProvider;
19887
19888
19889/***/ }),
19890/* 125 */
19891/***/ (function(module, exports, __webpack_require__) {
19892
19893"use strict";
19894
19895Object.defineProperty(exports, "__esModule", { value: true });
19896var patterns_1 = __webpack_require__(48);
19897var util_1 = __webpack_require__(40);
19898var builtin_1 = __webpack_require__(52);
19899var provider_1 = __webpack_require__(124);
19900function provider(line) {
19901 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, line)) {
19902 return builtin_1.builtinDocs.getPredefinedVimVariables();
19903 }
19904 return [];
19905}
19906provider_1.useProvider(provider);
19907
19908
19909/***/ }),
19910/* 126 */
19911/***/ (function(module, exports, __webpack_require__) {
19912
19913"use strict";
19914
19915Object.defineProperty(exports, "__esModule", { value: true });
19916var patterns_1 = __webpack_require__(48);
19917var builtin_1 = __webpack_require__(52);
19918var provider_1 = __webpack_require__(124);
19919function provider(line) {
19920 if (patterns_1.colorschemePattern.test(line)) {
19921 return builtin_1.builtinDocs.getColorschemes();
19922 }
19923 return [];
19924}
19925provider_1.useProvider(provider);
19926
19927
19928/***/ }),
19929/* 127 */
19930/***/ (function(module, exports, __webpack_require__) {
19931
19932"use strict";
19933
19934var __importDefault = (this && this.__importDefault) || function (mod) {
19935 return (mod && mod.__esModule) ? mod : { "default": mod };
19936};
19937Object.defineProperty(exports, "__esModule", { value: true });
19938var patterns_1 = __webpack_require__(48);
19939var util_1 = __webpack_require__(40);
19940var builtin_1 = __webpack_require__(52);
19941var config_1 = __importDefault(__webpack_require__(49));
19942var snippets_1 = __webpack_require__(128);
19943var provider_1 = __webpack_require__(124);
19944function provider(line) {
19945 if (util_1.isSomeMatchPattern(patterns_1.commandPattern, line)) {
19946 // only return snippets when snippetSupport is true
19947 if (config_1.default.snippetSupport) {
19948 return builtin_1.builtinDocs.getVimCommands().concat(snippets_1.commandSnippets);
19949 }
19950 return builtin_1.builtinDocs.getVimCommands();
19951 }
19952 return [];
19953}
19954provider_1.useProvider(provider);
19955
19956
19957/***/ }),
19958/* 128 */
19959/***/ (function(module, exports, __webpack_require__) {
19960
19961"use strict";
19962
19963var __assign = (this && this.__assign) || function () {
19964 __assign = Object.assign || function(t) {
19965 for (var s, i = 1, n = arguments.length; i < n; i++) {
19966 s = arguments[i];
19967 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
19968 t[p] = s[p];
19969 }
19970 return t;
19971 };
19972 return __assign.apply(this, arguments);
19973};
19974Object.defineProperty(exports, "__esModule", { value: true });
19975var vscode_languageserver_1 = __webpack_require__(4);
19976var util_1 = __webpack_require__(40);
19977exports.commandSnippets = [
19978 {
19979 label: "func",
19980 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
19981 insertText: [
19982 "function ${1:Name}(${2}) ${3:abort}",
19983 "\t${0}",
19984 "endfunction",
19985 ].join("\n"),
19986 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
19987 },
19988 {
19989 label: "tryc",
19990 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
19991 insertText: [
19992 "try",
19993 "\t${1}",
19994 "catch /.*/",
19995 "\t${0}",
19996 "endtry",
19997 ].join("\n"),
19998 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
19999 },
20000 {
20001 label: "tryf",
20002 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20003 insertText: [
20004 "try",
20005 "\t${1}",
20006 "finally",
20007 "\t${0}",
20008 "endtry",
20009 ].join("\n"),
20010 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20011 },
20012 {
20013 label: "trycf",
20014 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20015 insertText: [
20016 "try",
20017 "\t${1}",
20018 "catch /.*/",
20019 "\t${2}",
20020 "finally",
20021 "\t${0}",
20022 "endtry",
20023 ].join("\n"),
20024 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20025 },
20026 {
20027 label: "aug",
20028 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20029 insertText: [
20030 "augroup ${1:Start}",
20031 "\tautocmd!",
20032 "\t${0}",
20033 "augroup END",
20034 ].join("\n"),
20035 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20036 },
20037 {
20038 label: "aut",
20039 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20040 insertText: [
20041 "autocmd ${1:group-event} ${2:pat} ${3:once} ${4:nested} ${5:cmd}",
20042 ].join("\n"),
20043 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20044 },
20045 {
20046 label: "if",
20047 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20048 insertText: [
20049 "if ${1:condition}",
20050 "\t${0}",
20051 "endif",
20052 ].join("\n"),
20053 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20054 },
20055 {
20056 label: "cmd",
20057 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20058 insertText: [
20059 "command! ${1:attr} ${2:cmd} ${3:rep} ${0}",
20060 ].join("\n"),
20061 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20062 },
20063 {
20064 label: "hi",
20065 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
20066 insertText: [
20067 "highlight ${1:default} ${2:group-name} ${3:args} ${0}",
20068 ].join("\n"),
20069 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
20070 },
20071].map(function (item) { return (__assign(__assign({}, item), { documentation: util_1.markupSnippets(item.insertText) })); });
20072
20073
20074/***/ }),
20075/* 129 */
20076/***/ (function(module, exports, __webpack_require__) {
20077
20078"use strict";
20079
20080var __assign = (this && this.__assign) || function () {
20081 __assign = Object.assign || function(t) {
20082 for (var s, i = 1, n = arguments.length; i < n; i++) {
20083 s = arguments[i];
20084 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
20085 t[p] = s[p];
20086 }
20087 return t;
20088 };
20089 return __assign.apply(this, arguments);
20090};
20091Object.defineProperty(exports, "__esModule", { value: true });
20092var patterns_1 = __webpack_require__(48);
20093var builtin_1 = __webpack_require__(52);
20094var provider_1 = __webpack_require__(124);
20095function provider(line) {
20096 if (patterns_1.expandPattern[0].test(line)) {
20097 return builtin_1.builtinDocs.getExpandKeywords().map(function (item) {
20098 return __assign(__assign({}, item), { insertText: item.insertText.slice(1) });
20099 });
20100 }
20101 else if (patterns_1.expandPattern[1].test(line)) {
20102 return builtin_1.builtinDocs.getExpandKeywords();
20103 }
20104 return [];
20105}
20106provider_1.useProvider(provider);
20107
20108
20109/***/ }),
20110/* 130 */
20111/***/ (function(module, exports, __webpack_require__) {
20112
20113"use strict";
20114
20115var __assign = (this && this.__assign) || function () {
20116 __assign = Object.assign || function(t) {
20117 for (var s, i = 1, n = arguments.length; i < n; i++) {
20118 s = arguments[i];
20119 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
20120 t[p] = s[p];
20121 }
20122 return t;
20123 };
20124 return __assign.apply(this, arguments);
20125};
20126var __importDefault = (this && this.__importDefault) || function (mod) {
20127 return (mod && mod.__esModule) ? mod : { "default": mod };
20128};
20129Object.defineProperty(exports, "__esModule", { value: true });
20130var patterns_1 = __webpack_require__(48);
20131var util_1 = __webpack_require__(40);
20132var builtin_1 = __webpack_require__(52);
20133var config_1 = __importDefault(__webpack_require__(49));
20134var workspaces_1 = __webpack_require__(131);
20135var provider_1 = __webpack_require__(124);
20136function provider(line, uri, position) {
20137 if (/\b(g:|s:|<SID>)\w*$/.test(line)) {
20138 var list = [];
20139 if (/\bg:\w*$/.test(line)) {
20140 list = workspaces_1.workspace.getFunctionItems(uri)
20141 .filter(function (item) { return /^g:/.test(item.label); });
20142 }
20143 else if (/\b(s:|<SID>)\w*$/i.test(line)) {
20144 list = workspaces_1.workspace.getFunctionItems(uri)
20145 .filter(function (item) { return /^s:/.test(item.label); });
20146 }
20147 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
20148 }
20149 else if (/\B:\w*$/.test(line)) {
20150 return workspaces_1.workspace.getFunctionItems(uri)
20151 .filter(function (item) { return /:/.test(item.label); })
20152 .map(function (item) {
20153 var m = line.match(/:[^:]*$/);
20154 return __assign(__assign({}, item), {
20155 // delete the `:` symbol
20156 textEdit: {
20157 range: {
20158 start: {
20159 line: position.line,
20160 character: line.length - m[0].length,
20161 },
20162 end: {
20163 line: position.line,
20164 character: line.length - m[0].length + 1,
20165 },
20166 },
20167 newText: item.insertText,
20168 } });
20169 });
20170 }
20171 else if (util_1.isSomeMatchPattern(patterns_1.notFunctionPattern, line)) {
20172 return [];
20173 }
20174 return workspaces_1.workspace.getFunctionItems(uri)
20175 .filter(function (item) {
20176 return !builtin_1.builtinDocs.isBuiltinFunction(item.label);
20177 })
20178 .concat(builtin_1.builtinDocs.getBuiltinVimFunctions());
20179}
20180provider_1.useProvider(provider);
20181
20182
20183/***/ }),
20184/* 131 */
20185/***/ (function(module, exports, __webpack_require__) {
20186
20187"use strict";
20188
20189var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
20190 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20191 return new (P || (P = Promise))(function (resolve, reject) {
20192 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20193 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
20194 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20195 step((generator = generator.apply(thisArg, _arguments || [])).next());
20196 });
20197};
20198var __generator = (this && this.__generator) || function (thisArg, body) {
20199 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
20200 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
20201 function verb(n) { return function (v) { return step([n, v]); }; }
20202 function step(op) {
20203 if (f) throw new TypeError("Generator is already executing.");
20204 while (_) try {
20205 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;
20206 if (y = 0, t) op = [op[0] & 2, t.value];
20207 switch (op[0]) {
20208 case 0: case 1: t = op; break;
20209 case 4: _.label++; return { value: op[1], done: false };
20210 case 5: _.label++; y = op[1]; op = [0]; continue;
20211 case 7: op = _.ops.pop(); _.trys.pop(); continue;
20212 default:
20213 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
20214 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
20215 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
20216 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
20217 if (t[2]) _.ops.pop();
20218 _.trys.pop(); continue;
20219 }
20220 op = body.call(thisArg, _);
20221 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
20222 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
20223 }
20224};
20225var __importDefault = (this && this.__importDefault) || function (mod) {
20226 return (mod && mod.__esModule) ? mod : { "default": mod };
20227};
20228Object.defineProperty(exports, "__esModule", { value: true });
20229var vscode_uri_1 = __importDefault(__webpack_require__(132));
20230var vscode_languageserver_1 = __webpack_require__(4);
20231var util_1 = __webpack_require__(40);
20232var buffer_1 = __webpack_require__(133);
20233var config_1 = __importDefault(__webpack_require__(49));
20234// import logger from '../common/logger';
20235// const log = logger('workspace')
20236var Workspace = /** @class */ (function () {
20237 function Workspace() {
20238 this.buffers = {};
20239 }
20240 Workspace.prototype.isExistsBuffer = function (uri) {
20241 if (this.buffers[uri]) {
20242 return true;
20243 }
20244 return false;
20245 };
20246 Workspace.prototype.updateBuffer = function (uri, node) {
20247 return __awaiter(this, void 0, void 0, function () {
20248 var projectRoot;
20249 return __generator(this, function (_a) {
20250 switch (_a.label) {
20251 case 0:
20252 if (!node) {
20253 return [2 /*return*/];
20254 }
20255 if (!this.buffers[uri]) return [3 /*break*/, 1];
20256 this.buffers[uri].updateBufferByNode(node);
20257 return [3 /*break*/, 3];
20258 case 1: return [4 /*yield*/, util_1.findProjectRoot(vscode_uri_1.default.parse(uri).fsPath, config_1.default.indexes.projectRootPatterns)];
20259 case 2:
20260 projectRoot = _a.sent();
20261 if (projectRoot.indexOf(config_1.default.vimruntime) === 0) {
20262 projectRoot = config_1.default.vimruntime;
20263 }
20264 this.buffers[uri] = new buffer_1.Buffer(uri, projectRoot, node);
20265 _a.label = 3;
20266 case 3: return [2 /*return*/];
20267 }
20268 });
20269 });
20270 };
20271 Workspace.prototype.getFunctionItems = function (uri) {
20272 return this.getScriptFunctionItems(uri).concat(this.getGlobalFunctionItems(uri));
20273 };
20274 Workspace.prototype.getIdentifierItems = function (uri, line) {
20275 return this.getLocalIdentifierItems(uri, line)
20276 .concat(this.getGlobalIdentifierItems(uri));
20277 };
20278 Workspace.prototype.getLocations = function (name, uri, position, locationType) {
20279 var isFunArg = false;
20280 var res = [];
20281 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
20282 res = this.getGlobalLocation(name, uri, position, locationType);
20283 }
20284 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
20285 // get function args references first
20286 res = this.getFunArgLocation(name, uri, position, locationType);
20287 if (res.length) {
20288 isFunArg = true;
20289 }
20290 else {
20291 res = this.getLocalLocation(name, uri, position, locationType);
20292 if (!res.length) {
20293 res = this.getGlobalLocation(name, uri, position, locationType);
20294 }
20295 }
20296 }
20297 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20298 var names = [name];
20299 if (/^<SID>/.test(name)) {
20300 names.push(name.replace(/^<SID>/, "s:"));
20301 }
20302 else {
20303 names.push(name.replace(/^s:/, "<SID>"));
20304 }
20305 res = this.getScriptLocation(names, uri, position, locationType);
20306 }
20307 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20308 res = this.getLocalLocation(name, uri, position, locationType);
20309 }
20310 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20311 res = this.getAIdentifierLocation(name, uri, position, locationType);
20312 }
20313 if (res.length) {
20314 res = res.sort(function (a, b) {
20315 if (a.range.start.line === b.range.start.line) {
20316 return a.range.start.character - b.range.start.character;
20317 }
20318 return a.range.start.line - b.range.start.line;
20319 });
20320 }
20321 return {
20322 isFunArg: isFunArg,
20323 locations: res,
20324 };
20325 };
20326 Workspace.prototype.getLocationsByUri = function (name, uri, position, locationType) {
20327 var isFunArg = false;
20328 var res = [];
20329 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
20330 res = this.getGlobalLocationByUri(name, uri, position, locationType);
20331 }
20332 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
20333 // get function args references first
20334 res = this.getFunArgLocation(name, uri, position, locationType);
20335 if (res.length) {
20336 isFunArg = true;
20337 }
20338 else {
20339 res = this.getLocalLocation(name, uri, position, locationType);
20340 if (!res.length) {
20341 res = this.getGlobalLocationByUri(name, uri, position, locationType);
20342 }
20343 }
20344 }
20345 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20346 var names = [name];
20347 if (/^<SID>/.test(name)) {
20348 names.push(name.replace(/^<SID>/, "s:"));
20349 }
20350 else {
20351 names.push(name.replace(/^s:/, "<SID>"));
20352 }
20353 res = this.getScriptLocation(names, uri, position, locationType);
20354 }
20355 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20356 res = this.getLocalLocation(name, uri, position, locationType);
20357 }
20358 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
20359 res = this.getAIdentifierLocation(name, uri, position, locationType);
20360 }
20361 if (res.length) {
20362 res = res.sort(function (a, b) {
20363 if (a.range.start.line === b.range.start.line) {
20364 return a.range.start.character - b.range.start.character;
20365 }
20366 return a.range.start.line - b.range.start.line;
20367 });
20368 }
20369 return {
20370 isFunArg: isFunArg,
20371 locations: res,
20372 };
20373 };
20374 Workspace.prototype.filterDuplicate = function (items) {
20375 var tmp = {};
20376 return items.reduce(function (res, next) {
20377 if (!tmp[next.label]) {
20378 tmp[next.label] = true;
20379 res.push(next);
20380 }
20381 return res;
20382 }, []);
20383 };
20384 Workspace.prototype.getGlobalFunctionItems = function (uri) {
20385 var buf = this.buffers[uri];
20386 if (!buf) {
20387 return [];
20388 }
20389 var buffers = config_1.default.suggest.fromRuntimepath
20390 ? Object.values(this.buffers)
20391 : Object.values(this.buffers).filter(function (b) {
20392 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
20393 return true;
20394 }
20395 return b.isBelongToWorkdir(buf.getProjectRoot());
20396 });
20397 return this.filterDuplicate(buffers.reduce(function (res, cur) {
20398 return res.concat(cur.getGlobalFunctionItems());
20399 }, []));
20400 };
20401 Workspace.prototype.getScriptFunctionItems = function (uri) {
20402 if (!this.buffers[uri]) {
20403 return [];
20404 }
20405 return this.buffers[uri].getScriptFunctionItems();
20406 };
20407 Workspace.prototype.getGlobalIdentifierItems = function (uri) {
20408 var buf = this.buffers[uri];
20409 if (!buf) {
20410 return [];
20411 }
20412 var buffers = config_1.default.suggest.fromRuntimepath
20413 ? Object.values(this.buffers)
20414 : Object.values(this.buffers).filter(function (b) {
20415 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
20416 return true;
20417 }
20418 return b.isBelongToWorkdir(buf.getProjectRoot());
20419 });
20420 return this.filterDuplicate(buffers.reduce(function (res, cur) {
20421 return res
20422 .concat(cur.getGlobalIdentifierItems())
20423 .concat(cur.getEnvItems());
20424 }, []));
20425 };
20426 Workspace.prototype.getLocalIdentifierItems = function (uri, line) {
20427 if (!this.buffers[uri]) {
20428 return [];
20429 }
20430 var buf = this.buffers[uri];
20431 return buf.getFunctionLocalIdentifierItems(line)
20432 .concat(buf.getLocalIdentifierItems());
20433 };
20434 Workspace.prototype.getLocation = function (uri, item) {
20435 return {
20436 uri: uri,
20437 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)),
20438 };
20439 };
20440 Workspace.prototype.getGlobalLocation = function (name,
20441 // tslint:disable-next-line: variable-name
20442 _uri,
20443 // tslint:disable-next-line: variable-name
20444 position, locationType) {
20445 var _this = this;
20446 return Object.keys(this.buffers).reduce(function (pre, uri) {
20447 return pre.concat(_this.getGlobalLocationByUri(name, uri, position, locationType));
20448 }, []);
20449 };
20450 Workspace.prototype.getGlobalLocationByUri = function (name,
20451 // tslint:disable-next-line: variable-name
20452 uri,
20453 // tslint:disable-next-line: variable-name
20454 _position, locationType) {
20455 var _this = this;
20456 var res = [];
20457 var tmp = [];
20458 var list = [];
20459 var gloalFunctions = locationType === "definition"
20460 ? this.buffers[uri].getGlobalFunctions()
20461 : this.buffers[uri].getGlobalFunctionRefs();
20462 Object.keys(gloalFunctions).forEach(function (fname) {
20463 if (fname === name) {
20464 res = res.concat(gloalFunctions[fname].map(function (item) { return _this.getLocation(uri, item); }));
20465 }
20466 });
20467 var identifiers = locationType === "definition"
20468 ? this.buffers[uri].getGlobalIdentifiers()
20469 : this.buffers[uri].getGlobalIdentifierRefs();
20470 Object.keys(identifiers).forEach(function (fname) {
20471 if (fname === name) {
20472 tmp = tmp.concat(identifiers[fname].map(function (item) { return _this.getLocation(uri, item); }));
20473 }
20474 });
20475 // filter function local variables
20476 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
20477 var glFunctions = this.buffers[uri].getGlobalFunctions();
20478 var scriptFunctions = this.buffers[uri].getScriptFunctions();
20479 var funList_1 = Object.values(glFunctions).concat(Object.values(scriptFunctions)).reduce(function (aur, fs) { return aur.concat(fs); }, []);
20480 tmp.forEach(function (l) {
20481 if (!funList_1.some(function (fun) {
20482 return fun.startLine - 1 < l.range.start.line && l.range.start.line < fun.endLine - 1;
20483 })) {
20484 list.push(l);
20485 }
20486 });
20487 }
20488 else {
20489 list = tmp;
20490 }
20491 res = res.concat(list);
20492 return res;
20493 };
20494 Workspace.prototype.getScriptLocation = function (names, uri,
20495 // tslint:disable-next-line: variable-name
20496 _position, locationType) {
20497 var _this = this;
20498 var res = [];
20499 if (!this.buffers[uri]) {
20500 return res;
20501 }
20502 var functions = locationType === "definition"
20503 ? this.buffers[uri].getScriptFunctions()
20504 : this.buffers[uri].getScriptFunctionRefs();
20505 Object.keys(functions).forEach(function (fname) {
20506 var idx = names.indexOf(fname);
20507 if (idx !== -1) {
20508 res = res.concat(functions[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
20509 }
20510 });
20511 var identifiers = locationType === "definition"
20512 ? this.buffers[uri].getLocalIdentifiers()
20513 : this.buffers[uri].getLocalIdentifierRefs();
20514 Object.keys(identifiers).forEach(function (fname) {
20515 var idx = names.indexOf(fname);
20516 if (idx !== -1) {
20517 res = res.concat(identifiers[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
20518 }
20519 });
20520 return res;
20521 };
20522 Workspace.prototype.getLocalLocation = function (name, uri, position, locationType) {
20523 var _this = this;
20524 var list = [];
20525 if (!this.buffers[uri]) {
20526 return list;
20527 }
20528 var vimLineNum = position.line + 1;
20529 var startLine = -1;
20530 var endLine = -1;
20531 // get function args completion items
20532 []
20533 .concat(Object
20534 .values(this.buffers[uri].getGlobalFunctions())
20535 .reduce(function (res, next) { return res.concat(next); }, []))
20536 .concat(Object
20537 .values(this.buffers[uri].getScriptFunctions())
20538 .reduce(function (res, next) { return res.concat(next); }, []))
20539 .forEach(function (fun) {
20540 if (fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
20541 startLine = fun.startLine;
20542 endLine = fun.endLine;
20543 }
20544 });
20545 if (startLine !== -1 && endLine !== -1) {
20546 var globalVariables_1 = locationType === "definition"
20547 ? this.buffers[uri].getGlobalIdentifiers()
20548 : this.buffers[uri].getGlobalIdentifierRefs();
20549 Object.keys(globalVariables_1).some(function (key) {
20550 if (key === name) {
20551 globalVariables_1[key].forEach(function (item) {
20552 if (startLine < item.startLine && item.startLine < endLine) {
20553 list.push(_this.getLocation(uri, item));
20554 }
20555 });
20556 return true;
20557 }
20558 return false;
20559 });
20560 var localVariables_1 = locationType === "definition"
20561 ? this.buffers[uri].getLocalIdentifiers()
20562 : this.buffers[uri].getLocalIdentifierRefs();
20563 Object.keys(localVariables_1).some(function (key) {
20564 if (key === name) {
20565 localVariables_1[key].forEach(function (item) {
20566 if (startLine < item.startLine && item.startLine < endLine) {
20567 list.push(_this.getLocation(uri, item));
20568 }
20569 });
20570 return true;
20571 }
20572 return false;
20573 });
20574 }
20575 return list;
20576 };
20577 Workspace.prototype.getAIdentifierLocation = function (name, uri, position, locationType) {
20578 var res = [];
20579 if (!this.buffers[uri]) {
20580 return res;
20581 }
20582 if (locationType === "definition") {
20583 var flist_1 = [];
20584 var globalFunctions_1 = this.buffers[uri].getGlobalFunctions();
20585 Object.keys(globalFunctions_1).forEach(function (fname) {
20586 globalFunctions_1[fname].forEach(function (item) {
20587 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
20588 flist_1.push(item);
20589 }
20590 });
20591 });
20592 var scriptFunctions_1 = this.buffers[uri].getScriptFunctions();
20593 Object.keys(scriptFunctions_1).forEach(function (fname) {
20594 scriptFunctions_1[fname].forEach(function (item) {
20595 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
20596 flist_1.push(item);
20597 }
20598 });
20599 });
20600 if (flist_1.length) {
20601 var n_1 = name.slice(2);
20602 return flist_1.filter(function (item) { return item.args && item.args.some(function (m) { return m.value === n_1; }); })
20603 .map(function (item) {
20604 var startLine = item.startLine - 1;
20605 var startCol = item.startCol - 1;
20606 var endCol = item.startCol - 1;
20607 item.args.some(function (arg) {
20608 if (arg.value === n_1) {
20609 startCol = arg.pos.col - 1;
20610 endCol = startCol + n_1.length;
20611 return true;
20612 }
20613 return false;
20614 });
20615 return {
20616 uri: uri,
20617 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
20618 };
20619 });
20620 }
20621 }
20622 else {
20623 var flist_2 = [];
20624 var globalFunctions_2 = this.buffers[uri].getGlobalFunctions();
20625 Object.keys(globalFunctions_2).forEach(function (fname) {
20626 globalFunctions_2[fname].forEach(function (item) {
20627 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
20628 flist_2.push(item);
20629 }
20630 });
20631 });
20632 var scriptFunctions_2 = this.buffers[uri].getScriptFunctions();
20633 Object.keys(scriptFunctions_2).forEach(function (fname) {
20634 scriptFunctions_2[fname].forEach(function (item) {
20635 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
20636 flist_2.push(item);
20637 }
20638 });
20639 });
20640 if (flist_2.length) {
20641 var identifiers_1 = this.buffers[uri].getLocalIdentifierRefs();
20642 Object.keys(identifiers_1).forEach(function (key) {
20643 if (key === name) {
20644 identifiers_1[name].forEach(function (item) {
20645 flist_2.forEach(function (fitem) {
20646 if (fitem.startLine < item.startLine && item.startLine < fitem.endLine) {
20647 res.push({
20648 uri: uri,
20649 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)),
20650 });
20651 }
20652 });
20653 });
20654 }
20655 });
20656 }
20657 }
20658 return res;
20659 };
20660 Workspace.prototype.getFunArgLocation = function (name, uri, position, locationType) {
20661 var res = [];
20662 if (!this.buffers[uri]) {
20663 return res;
20664 }
20665 if (locationType === "references") {
20666 var globalFunctions = this.buffers[uri].getGlobalFunctions();
20667 var scriptFunctions = this.buffers[uri].getScriptFunctions();
20668 var startLine_1 = -1;
20669 var endLine_1 = -1;
20670 Object.values(globalFunctions).forEach(function (fitems) {
20671 fitems.forEach(function (fitem) {
20672 fitem.args.forEach(function (arg) {
20673 var pos = arg.pos;
20674 if (pos) {
20675 if (pos.lnum === position.line + 1 && arg.value === name) {
20676 startLine_1 = fitem.startLine;
20677 endLine_1 = fitem.endLine;
20678 }
20679 }
20680 });
20681 });
20682 });
20683 if (startLine_1 === -1 && endLine_1 === -1) {
20684 Object.values(scriptFunctions).forEach(function (fitems) {
20685 fitems.forEach(function (fitem) {
20686 fitem.args.forEach(function (arg) {
20687 var pos = arg.pos;
20688 if (pos) {
20689 if (pos.lnum === position.line + 1 && arg.value === name) {
20690 startLine_1 = fitem.startLine;
20691 endLine_1 = fitem.endLine;
20692 }
20693 }
20694 });
20695 });
20696 });
20697 }
20698 if (startLine_1 !== -1 && endLine_1 !== -1) {
20699 var identifiers_2 = this.buffers[uri].getLocalIdentifierRefs();
20700 Object.keys(identifiers_2).forEach(function (key) {
20701 if (key === "a:" + name) {
20702 identifiers_2[key].forEach(function (item) {
20703 if (startLine_1 < item.startLine && item.startLine < endLine_1) {
20704 res.push({
20705 uri: uri,
20706 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)),
20707 });
20708 }
20709 });
20710 }
20711 });
20712 }
20713 }
20714 else {
20715 var flist_3 = [];
20716 var globalFunctions_3 = this.buffers[uri].getGlobalFunctions();
20717 Object.keys(globalFunctions_3).forEach(function (fname) {
20718 globalFunctions_3[fname].forEach(function (item) {
20719 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
20720 flist_3.push(item);
20721 }
20722 });
20723 });
20724 var scriptFunctions_3 = this.buffers[uri].getScriptFunctions();
20725 Object.keys(scriptFunctions_3).forEach(function (fname) {
20726 scriptFunctions_3[fname].forEach(function (item) {
20727 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
20728 flist_3.push(item);
20729 }
20730 });
20731 });
20732 if (flist_3.length) {
20733 return flist_3.filter(function (item) { return item.args && item.args.some(function (n) { return n.value === name; }); })
20734 .map(function (item) {
20735 var startLine = item.startLine - 1;
20736 var startCol = item.startCol - 1;
20737 var endCol = item.startCol - 1;
20738 item.args.some(function (arg) {
20739 if (arg.value === name) {
20740 startCol = arg.pos.col - 1;
20741 endCol = startCol + name.length;
20742 return true;
20743 }
20744 return false;
20745 });
20746 return {
20747 uri: uri,
20748 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
20749 };
20750 });
20751 }
20752 }
20753 return res;
20754 };
20755 return Workspace;
20756}());
20757exports.Workspace = Workspace;
20758exports.workspace = new Workspace();
20759
20760
20761/***/ }),
20762/* 132 */
20763/***/ (function(module, __webpack_exports__, __webpack_require__) {
20764
20765"use strict";
20766__webpack_require__.r(__webpack_exports__);
20767/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setUriThrowOnMissingScheme", function() { return setUriThrowOnMissingScheme; });
20768/*---------------------------------------------------------------------------------------------
20769 * Copyright (c) Microsoft Corporation. All rights reserved.
20770 * Licensed under the MIT License. See License.txt in the project root for license information.
20771 *--------------------------------------------------------------------------------------------*/
20772
20773var __extends = (undefined && undefined.__extends) || (function () {
20774 var extendStatics = Object.setPrototypeOf ||
20775 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20776 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
20777 return function (d, b) {
20778 extendStatics(d, b);
20779 function __() { this.constructor = d; }
20780 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20781 };
20782})();
20783var isWindows;
20784if (typeof process === 'object') {
20785 isWindows = process.platform === 'win32';
20786}
20787else if (typeof navigator === 'object') {
20788 var userAgent = navigator.userAgent;
20789 isWindows = userAgent.indexOf('Windows') >= 0;
20790}
20791//#endregion
20792var _schemePattern = /^\w[\w\d+.-]*$/;
20793var _singleSlashStart = /^\//;
20794var _doubleSlashStart = /^\/\//;
20795var _throwOnMissingSchema = true;
20796/**
20797 * @internal
20798 */
20799function setUriThrowOnMissingScheme(value) {
20800 var old = _throwOnMissingSchema;
20801 _throwOnMissingSchema = value;
20802 return old;
20803}
20804function _validateUri(ret, _strict) {
20805 // scheme, must be set
20806 if (!ret.scheme) {
20807 if (_strict || _throwOnMissingSchema) {
20808 throw new Error("[UriError]: Scheme is missing: {scheme: \"\", authority: \"" + ret.authority + "\", path: \"" + ret.path + "\", query: \"" + ret.query + "\", fragment: \"" + ret.fragment + "\"}");
20809 // } else {
20810 // console.warn(`[UriError]: Scheme is missing: {scheme: "", authority: "${ret.authority}", path: "${ret.path}", query: "${ret.query}", fragment: "${ret.fragment}"}`);
20811 }
20812 }
20813 // scheme, https://tools.ietf.org/html/rfc3986#section-3.1
20814 // ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
20815 if (ret.scheme && !_schemePattern.test(ret.scheme)) {
20816 throw new Error('[UriError]: Scheme contains illegal characters.');
20817 }
20818 // path, http://tools.ietf.org/html/rfc3986#section-3.3
20819 // If a URI contains an authority component, then the path component
20820 // must either be empty or begin with a slash ("/") character. If a URI
20821 // does not contain an authority component, then the path cannot begin
20822 // with two slash characters ("//").
20823 if (ret.path) {
20824 if (ret.authority) {
20825 if (!_singleSlashStart.test(ret.path)) {
20826 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');
20827 }
20828 }
20829 else {
20830 if (_doubleSlashStart.test(ret.path)) {
20831 throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
20832 }
20833 }
20834 }
20835}
20836// for a while we allowed uris *without* schemes and this is the migration
20837// for them, e.g. an uri without scheme and without strict-mode warns and falls
20838// back to the file-scheme. that should cause the least carnage and still be a
20839// clear warning
20840function _schemeFix(scheme, _strict) {
20841 if (_strict || _throwOnMissingSchema) {
20842 return scheme || _empty;
20843 }
20844 if (!scheme) {
20845 // console.trace('BAD uri lacks scheme, falling back to file-scheme.');
20846 scheme = 'file';
20847 }
20848 return scheme;
20849}
20850// implements a bit of https://tools.ietf.org/html/rfc3986#section-5
20851function _referenceResolution(scheme, path) {
20852 // the slash-character is our 'default base' as we don't
20853 // support constructing URIs relative to other URIs. This
20854 // also means that we alter and potentially break paths.
20855 // see https://tools.ietf.org/html/rfc3986#section-5.1.4
20856 switch (scheme) {
20857 case 'https':
20858 case 'http':
20859 case 'file':
20860 if (!path) {
20861 path = _slash;
20862 }
20863 else if (path[0] !== _slash) {
20864 path = _slash + path;
20865 }
20866 break;
20867 }
20868 return path;
20869}
20870var _empty = '';
20871var _slash = '/';
20872var _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
20873/**
20874 * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
20875 * This class is a simple parser which creates the basic component parts
20876 * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
20877 * and encoding.
20878 *
20879 * foo://example.com:8042/over/there?name=ferret#nose
20880 * \_/ \______________/\_________/ \_________/ \__/
20881 * | | | | |
20882 * scheme authority path query fragment
20883 * | _____________________|__
20884 * / \ / \
20885 * urn:example:animal:ferret:nose
20886 */
20887var URI = (function () {
20888 /**
20889 * @internal
20890 */
20891 function URI(schemeOrData, authority, path, query, fragment, _strict) {
20892 if (_strict === void 0) { _strict = false; }
20893 if (typeof schemeOrData === 'object') {
20894 this.scheme = schemeOrData.scheme || _empty;
20895 this.authority = schemeOrData.authority || _empty;
20896 this.path = schemeOrData.path || _empty;
20897 this.query = schemeOrData.query || _empty;
20898 this.fragment = schemeOrData.fragment || _empty;
20899 // no validation because it's this URI
20900 // that creates uri components.
20901 // _validateUri(this);
20902 }
20903 else {
20904 this.scheme = _schemeFix(schemeOrData, _strict);
20905 this.authority = authority || _empty;
20906 this.path = _referenceResolution(this.scheme, path || _empty);
20907 this.query = query || _empty;
20908 this.fragment = fragment || _empty;
20909 _validateUri(this, _strict);
20910 }
20911 }
20912 URI.isUri = function (thing) {
20913 if (thing instanceof URI) {
20914 return true;
20915 }
20916 if (!thing) {
20917 return false;
20918 }
20919 return typeof thing.authority === 'string'
20920 && typeof thing.fragment === 'string'
20921 && typeof thing.path === 'string'
20922 && typeof thing.query === 'string'
20923 && typeof thing.scheme === 'string'
20924 && typeof thing.fsPath === 'function'
20925 && typeof thing.with === 'function'
20926 && typeof thing.toString === 'function';
20927 };
20928 Object.defineProperty(URI.prototype, "fsPath", {
20929 // ---- filesystem path -----------------------
20930 /**
20931 * Returns a string representing the corresponding file system path of this URI.
20932 * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
20933 * platform specific path separator.
20934 *
20935 * * Will *not* validate the path for invalid characters and semantics.
20936 * * Will *not* look at the scheme of this URI.
20937 * * The result shall *not* be used for display purposes but for accessing a file on disk.
20938 *
20939 *
20940 * The *difference* to `URI#path` is the use of the platform specific separator and the handling
20941 * of UNC paths. See the below sample of a file-uri with an authority (UNC path).
20942 *
20943 * ```ts
20944 const u = URI.parse('file://server/c$/folder/file.txt')
20945 u.authority === 'server'
20946 u.path === '/shares/c$/file.txt'
20947 u.fsPath === '\\server\c$\folder\file.txt'
20948 ```
20949 *
20950 * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
20951 * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
20952 * with URIs that represent files on disk (`file` scheme).
20953 */
20954 get: function () {
20955 // if (this.scheme !== 'file') {
20956 // console.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);
20957 // }
20958 return _makeFsPath(this);
20959 },
20960 enumerable: true,
20961 configurable: true
20962 });
20963 // ---- modify to new -------------------------
20964 URI.prototype.with = function (change) {
20965 if (!change) {
20966 return this;
20967 }
20968 var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;
20969 if (scheme === undefined) {
20970 scheme = this.scheme;
20971 }
20972 else if (scheme === null) {
20973 scheme = _empty;
20974 }
20975 if (authority === undefined) {
20976 authority = this.authority;
20977 }
20978 else if (authority === null) {
20979 authority = _empty;
20980 }
20981 if (path === undefined) {
20982 path = this.path;
20983 }
20984 else if (path === null) {
20985 path = _empty;
20986 }
20987 if (query === undefined) {
20988 query = this.query;
20989 }
20990 else if (query === null) {
20991 query = _empty;
20992 }
20993 if (fragment === undefined) {
20994 fragment = this.fragment;
20995 }
20996 else if (fragment === null) {
20997 fragment = _empty;
20998 }
20999 if (scheme === this.scheme
21000 && authority === this.authority
21001 && path === this.path
21002 && query === this.query
21003 && fragment === this.fragment) {
21004 return this;
21005 }
21006 return new _URI(scheme, authority, path, query, fragment);
21007 };
21008 // ---- parse & validate ------------------------
21009 /**
21010 * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
21011 * `file:///usr/home`, or `scheme:with/path`.
21012 *
21013 * @param value A string which represents an URI (see `URI#toString`).
21014 */
21015 URI.parse = function (value, _strict) {
21016 if (_strict === void 0) { _strict = false; }
21017 var match = _regexp.exec(value);
21018 if (!match) {
21019 return new _URI(_empty, _empty, _empty, _empty, _empty);
21020 }
21021 return new _URI(match[2] || _empty, decodeURIComponent(match[4] || _empty), decodeURIComponent(match[5] || _empty), decodeURIComponent(match[7] || _empty), decodeURIComponent(match[9] || _empty), _strict);
21022 };
21023 /**
21024 * Creates a new URI from a file system path, e.g. `c:\my\files`,
21025 * `/usr/home`, or `\\server\share\some\path`.
21026 *
21027 * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
21028 * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
21029 * `URI.parse('file://' + path)` because the path might contain characters that are
21030 * interpreted (# and ?). See the following sample:
21031 * ```ts
21032 const good = URI.file('/coding/c#/project1');
21033 good.scheme === 'file';
21034 good.path === '/coding/c#/project1';
21035 good.fragment === '';
21036 const bad = URI.parse('file://' + '/coding/c#/project1');
21037 bad.scheme === 'file';
21038 bad.path === '/coding/c'; // path is now broken
21039 bad.fragment === '/project1';
21040 ```
21041 *
21042 * @param path A file system path (see `URI#fsPath`)
21043 */
21044 URI.file = function (path) {
21045 var authority = _empty;
21046 // normalize to fwd-slashes on windows,
21047 // on other systems bwd-slashes are valid
21048 // filename character, eg /f\oo/ba\r.txt
21049 if (isWindows) {
21050 path = path.replace(/\\/g, _slash);
21051 }
21052 // check for authority as used in UNC shares
21053 // or use the path as given
21054 if (path[0] === _slash && path[1] === _slash) {
21055 var idx = path.indexOf(_slash, 2);
21056 if (idx === -1) {
21057 authority = path.substring(2);
21058 path = _slash;
21059 }
21060 else {
21061 authority = path.substring(2, idx);
21062 path = path.substring(idx) || _slash;
21063 }
21064 }
21065 return new _URI('file', authority, path, _empty, _empty);
21066 };
21067 URI.from = function (components) {
21068 return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);
21069 };
21070 // ---- printing/externalize ---------------------------
21071 /**
21072 * Creates a string representation for this URI. It's guaranteed that calling
21073 * `URI.parse` with the result of this function creates an URI which is equal
21074 * to this URI.
21075 *
21076 * * The result shall *not* be used for display purposes but for externalization or transport.
21077 * * The result will be encoded using the percentage encoding and encoding happens mostly
21078 * ignore the scheme-specific encoding rules.
21079 *
21080 * @param skipEncoding Do not encode the result, default is `false`
21081 */
21082 URI.prototype.toString = function (skipEncoding) {
21083 if (skipEncoding === void 0) { skipEncoding = false; }
21084 return _asFormatted(this, skipEncoding);
21085 };
21086 URI.prototype.toJSON = function () {
21087 return this;
21088 };
21089 URI.revive = function (data) {
21090 if (!data) {
21091 return data;
21092 }
21093 else if (data instanceof URI) {
21094 return data;
21095 }
21096 else {
21097 var result = new _URI(data);
21098 result._formatted = data.external;
21099 result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;
21100 return result;
21101 }
21102 };
21103 return URI;
21104}());
21105/* harmony default export */ __webpack_exports__["default"] = (URI);
21106var _pathSepMarker = isWindows ? 1 : undefined;
21107// tslint:disable-next-line:class-name
21108var _URI = (function (_super) {
21109 __extends(_URI, _super);
21110 function _URI() {
21111 var _this = _super !== null && _super.apply(this, arguments) || this;
21112 _this._formatted = null;
21113 _this._fsPath = null;
21114 return _this;
21115 }
21116 Object.defineProperty(_URI.prototype, "fsPath", {
21117 get: function () {
21118 if (!this._fsPath) {
21119 this._fsPath = _makeFsPath(this);
21120 }
21121 return this._fsPath;
21122 },
21123 enumerable: true,
21124 configurable: true
21125 });
21126 _URI.prototype.toString = function (skipEncoding) {
21127 if (skipEncoding === void 0) { skipEncoding = false; }
21128 if (!skipEncoding) {
21129 if (!this._formatted) {
21130 this._formatted = _asFormatted(this, false);
21131 }
21132 return this._formatted;
21133 }
21134 else {
21135 // we don't cache that
21136 return _asFormatted(this, true);
21137 }
21138 };
21139 _URI.prototype.toJSON = function () {
21140 var res = {
21141 $mid: 1
21142 };
21143 // cached state
21144 if (this._fsPath) {
21145 res.fsPath = this._fsPath;
21146 res._sep = _pathSepMarker;
21147 }
21148 if (this._formatted) {
21149 res.external = this._formatted;
21150 }
21151 // uri components
21152 if (this.path) {
21153 res.path = this.path;
21154 }
21155 if (this.scheme) {
21156 res.scheme = this.scheme;
21157 }
21158 if (this.authority) {
21159 res.authority = this.authority;
21160 }
21161 if (this.query) {
21162 res.query = this.query;
21163 }
21164 if (this.fragment) {
21165 res.fragment = this.fragment;
21166 }
21167 return res;
21168 };
21169 return _URI;
21170}(URI));
21171// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2
21172var encodeTable = (_a = {},
21173 _a[58 /* Colon */] = '%3A',
21174 _a[47 /* Slash */] = '%2F',
21175 _a[63 /* QuestionMark */] = '%3F',
21176 _a[35 /* Hash */] = '%23',
21177 _a[91 /* OpenSquareBracket */] = '%5B',
21178 _a[93 /* CloseSquareBracket */] = '%5D',
21179 _a[64 /* AtSign */] = '%40',
21180 _a[33 /* ExclamationMark */] = '%21',
21181 _a[36 /* DollarSign */] = '%24',
21182 _a[38 /* Ampersand */] = '%26',
21183 _a[39 /* SingleQuote */] = '%27',
21184 _a[40 /* OpenParen */] = '%28',
21185 _a[41 /* CloseParen */] = '%29',
21186 _a[42 /* Asterisk */] = '%2A',
21187 _a[43 /* Plus */] = '%2B',
21188 _a[44 /* Comma */] = '%2C',
21189 _a[59 /* Semicolon */] = '%3B',
21190 _a[61 /* Equals */] = '%3D',
21191 _a[32 /* Space */] = '%20',
21192 _a);
21193function encodeURIComponentFast(uriComponent, allowSlash) {
21194 var res = undefined;
21195 var nativeEncodePos = -1;
21196 for (var pos = 0; pos < uriComponent.length; pos++) {
21197 var code = uriComponent.charCodeAt(pos);
21198 // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3
21199 if ((code >= 97 /* a */ && code <= 122 /* z */)
21200 || (code >= 65 /* A */ && code <= 90 /* Z */)
21201 || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)
21202 || code === 45 /* Dash */
21203 || code === 46 /* Period */
21204 || code === 95 /* Underline */
21205 || code === 126 /* Tilde */
21206 || (allowSlash && code === 47 /* Slash */)) {
21207 // check if we are delaying native encode
21208 if (nativeEncodePos !== -1) {
21209 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
21210 nativeEncodePos = -1;
21211 }
21212 // check if we write into a new string (by default we try to return the param)
21213 if (res !== undefined) {
21214 res += uriComponent.charAt(pos);
21215 }
21216 }
21217 else {
21218 // encoding needed, we need to allocate a new string
21219 if (res === undefined) {
21220 res = uriComponent.substr(0, pos);
21221 }
21222 // check with default table first
21223 var escaped = encodeTable[code];
21224 if (escaped !== undefined) {
21225 // check if we are delaying native encode
21226 if (nativeEncodePos !== -1) {
21227 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
21228 nativeEncodePos = -1;
21229 }
21230 // append escaped variant to result
21231 res += escaped;
21232 }
21233 else if (nativeEncodePos === -1) {
21234 // use native encode only when needed
21235 nativeEncodePos = pos;
21236 }
21237 }
21238 }
21239 if (nativeEncodePos !== -1) {
21240 res += encodeURIComponent(uriComponent.substring(nativeEncodePos));
21241 }
21242 return res !== undefined ? res : uriComponent;
21243}
21244function encodeURIComponentMinimal(path) {
21245 var res = undefined;
21246 for (var pos = 0; pos < path.length; pos++) {
21247 var code = path.charCodeAt(pos);
21248 if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {
21249 if (res === undefined) {
21250 res = path.substr(0, pos);
21251 }
21252 res += encodeTable[code];
21253 }
21254 else {
21255 if (res !== undefined) {
21256 res += path[pos];
21257 }
21258 }
21259 }
21260 return res !== undefined ? res : path;
21261}
21262/**
21263 * Compute `fsPath` for the given uri
21264 */
21265function _makeFsPath(uri) {
21266 var value;
21267 if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {
21268 // unc path: file://shares/c$/far/boo
21269 value = "//" + uri.authority + uri.path;
21270 }
21271 else if (uri.path.charCodeAt(0) === 47 /* Slash */
21272 && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)
21273 && uri.path.charCodeAt(2) === 58 /* Colon */) {
21274 // windows drive letter: file:///c:/far/boo
21275 value = uri.path[1].toLowerCase() + uri.path.substr(2);
21276 }
21277 else {
21278 // other path
21279 value = uri.path;
21280 }
21281 if (isWindows) {
21282 value = value.replace(/\//g, '\\');
21283 }
21284 return value;
21285}
21286/**
21287 * Create the external version of a uri
21288 */
21289function _asFormatted(uri, skipEncoding) {
21290 var encoder = !skipEncoding
21291 ? encodeURIComponentFast
21292 : encodeURIComponentMinimal;
21293 var res = '';
21294 var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;
21295 if (scheme) {
21296 res += scheme;
21297 res += ':';
21298 }
21299 if (authority || scheme === 'file') {
21300 res += _slash;
21301 res += _slash;
21302 }
21303 if (authority) {
21304 var idx = authority.indexOf('@');
21305 if (idx !== -1) {
21306 // <user>@<auth>
21307 var userinfo = authority.substr(0, idx);
21308 authority = authority.substr(idx + 1);
21309 idx = userinfo.indexOf(':');
21310 if (idx === -1) {
21311 res += encoder(userinfo, false);
21312 }
21313 else {
21314 // <user>:<pass>@<auth>
21315 res += encoder(userinfo.substr(0, idx), false);
21316 res += ':';
21317 res += encoder(userinfo.substr(idx + 1), false);
21318 }
21319 res += '@';
21320 }
21321 authority = authority.toLowerCase();
21322 idx = authority.indexOf(':');
21323 if (idx === -1) {
21324 res += encoder(authority, false);
21325 }
21326 else {
21327 // <auth>:<port>
21328 res += encoder(authority.substr(0, idx), false);
21329 res += authority.substr(idx);
21330 }
21331 }
21332 if (path) {
21333 // lower-case windows drive letters in /C:/fff or C:/fff
21334 if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {
21335 var code = path.charCodeAt(1);
21336 if (code >= 65 /* A */ && code <= 90 /* Z */) {
21337 path = "/" + String.fromCharCode(code + 32) + ":" + path.substr(3); // "/c:".length === 3
21338 }
21339 }
21340 else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {
21341 var code = path.charCodeAt(0);
21342 if (code >= 65 /* A */ && code <= 90 /* Z */) {
21343 path = String.fromCharCode(code + 32) + ":" + path.substr(2); // "/c:".length === 3
21344 }
21345 }
21346 // encode the rest of the path
21347 res += encoder(path, true);
21348 }
21349 if (query) {
21350 res += '?';
21351 res += encoder(query, false);
21352 }
21353 if (fragment) {
21354 res += '#';
21355 res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;
21356 }
21357 return res;
21358}
21359var _a;
21360
21361
21362/***/ }),
21363/* 133 */
21364/***/ (function(module, exports, __webpack_require__) {
21365
21366"use strict";
21367
21368var __importDefault = (this && this.__importDefault) || function (mod) {
21369 return (mod && mod.__esModule) ? mod : { "default": mod };
21370};
21371Object.defineProperty(exports, "__esModule", { value: true });
21372var vscode_languageserver_1 = __webpack_require__(4);
21373var constant_1 = __webpack_require__(2);
21374var logger_1 = __importDefault(__webpack_require__(121));
21375var log = logger_1.default("buffer");
21376var NODE_TOPLEVEL = 1;
21377var NODE_EXCMD = 3;
21378var NODE_FUNCTION = 4;
21379var NODE_DELFUNCTION = 6;
21380var NODE_RETURN = 7;
21381var NODE_EXCALL = 8;
21382var NODE_LET = 9;
21383var NODE_UNLET = 10;
21384var NODE_LOCKVAR = 11;
21385var NODE_UNLOCKVAR = 12;
21386var NODE_IF = 13;
21387var NODE_ELSEIF = 14;
21388var NODE_ELSE = 15;
21389var NODE_WHILE = 17;
21390var NODE_FOR = 19;
21391var NODE_TRY = 23;
21392var NODE_CATCH = 24;
21393var NODE_FINALLY = 25;
21394var NODE_THROW = 27;
21395var NODE_ECHO = 28;
21396var NODE_ECHON = 29;
21397var NODE_ECHOMSG = 31;
21398var NODE_ECHOERR = 32;
21399var NODE_EXECUTE = 33;
21400var NODE_TERNARY = 34;
21401var NODE_OR = 35;
21402var NODE_AND = 36;
21403var NODE_EQUAL = 37;
21404var NODE_EQUALCI = 38;
21405var NODE_EQUALCS = 39;
21406var NODE_NEQUAL = 40;
21407var NODE_NEQUALCI = 41;
21408var NODE_NEQUALCS = 42;
21409var NODE_GREATER = 43;
21410var NODE_GREATERCI = 44;
21411var NODE_GREATERCS = 45;
21412var NODE_GEQUAL = 46;
21413var NODE_GEQUALCI = 47;
21414var NODE_GEQUALCS = 48;
21415var NODE_SMALLER = 49;
21416var NODE_SMALLERCI = 50;
21417var NODE_SMALLERCS = 51;
21418var NODE_SEQUAL = 52;
21419var NODE_SEQUALCI = 53;
21420var NODE_SEQUALCS = 54;
21421var NODE_MATCH = 55;
21422var NODE_MATCHCI = 56;
21423var NODE_MATCHCS = 57;
21424var NODE_NOMATCH = 58;
21425var NODE_NOMATCHCI = 59;
21426var NODE_NOMATCHCS = 60;
21427var NODE_IS = 61;
21428var NODE_ISCI = 62;
21429var NODE_ISCS = 63;
21430var NODE_ISNOT = 64;
21431var NODE_ISNOTCI = 65;
21432var NODE_ISNOTCS = 66;
21433var NODE_ADD = 67;
21434var NODE_SUBTRACT = 68;
21435var NODE_CONCAT = 69;
21436var NODE_MULTIPLY = 70;
21437var NODE_DIVIDE = 71;
21438var NODE_REMAINDER = 72;
21439var NODE_NOT = 73;
21440var NODE_MINUS = 74;
21441var NODE_PLUS = 75;
21442var NODE_SUBSCRIPT = 76;
21443var NODE_SLICE = 77;
21444var NODE_CALL = 78;
21445var NODE_DOT = 79;
21446var NODE_NUMBER = 80;
21447var NODE_STRING = 81;
21448var NODE_LIST = 82;
21449var NODE_DICT = 83;
21450var NODE_IDENTIFIER = 86;
21451var NODE_CURLYNAME = 87;
21452var NODE_ENV = 88;
21453var NODE_REG = 89; // TODO
21454var NODE_CURLYNAMEPART = 90; // TODO
21455var NODE_CURLYNAMEEXPR = 91; // TODO
21456var NODE_LAMBDA = 92;
21457var NODE_CONST = 94;
21458var NODE_EVAL = 95;
21459var NODE_HEREDOC = 96;
21460var NODE_METHOD = 97;
21461var globalFuncPattern = /^(g:\w+(\.\w+)*|[a-zA-Z_]\w*(\.\w+)*|\w+(#\w+)+)$/;
21462var scriptFuncPattern = /^(s:\w+(\.\w+)*|<SID>\w+(\.\w+)*)$/i;
21463var globalVariablePattern = /^(g:\w+(\.\w+)*|b:\w+(\.\w+)*|\w{1,}(\.\w+)*|\w+(#\w+)+)$/;
21464var localVariablePattern = /^(s:\w+(\.\w+)*|l:\w+(\.\w+)*|a:\w+(\.\w+)*)$/;
21465var envPattern = /^\$\w+$/;
21466var Buffer = /** @class */ (function () {
21467 function Buffer(uri, projectRoot, node) {
21468 this.uri = uri;
21469 this.projectRoot = projectRoot;
21470 this.node = node;
21471 this.globalFunctions = {};
21472 this.scriptFunctions = {};
21473 this.globalFunctionRefs = {};
21474 this.scriptFunctionRefs = {};
21475 this.globalVariables = {};
21476 this.localVariables = {};
21477 this.globalVariableRefs = {};
21478 this.localVariableRefs = {};
21479 this.envs = {};
21480 this.envRefs = {};
21481 this.updateBufferByNode(this.node);
21482 }
21483 Buffer.prototype.getGlobalFunctions = function () {
21484 return this.globalFunctions;
21485 };
21486 Buffer.prototype.getGlobalFunctionRefs = function () {
21487 return this.globalFunctionRefs;
21488 };
21489 Buffer.prototype.getScriptFunctions = function () {
21490 return this.scriptFunctions;
21491 };
21492 Buffer.prototype.getScriptFunctionRefs = function () {
21493 return this.scriptFunctionRefs;
21494 };
21495 Buffer.prototype.getGlobalIdentifiers = function () {
21496 return this.globalVariables;
21497 };
21498 Buffer.prototype.getGlobalIdentifierRefs = function () {
21499 return this.globalVariableRefs;
21500 };
21501 Buffer.prototype.getLocalIdentifiers = function () {
21502 return this.localVariables;
21503 };
21504 Buffer.prototype.getLocalIdentifierRefs = function () {
21505 return this.localVariableRefs;
21506 };
21507 Buffer.prototype.getProjectRoot = function () {
21508 return this.projectRoot;
21509 };
21510 Buffer.prototype.isBelongToWorkdir = function (workUri) {
21511 return this.projectRoot === workUri;
21512 };
21513 Buffer.prototype.updateBufferByNode = function (node) {
21514 this.node = node;
21515 this.resetProperties();
21516 try {
21517 this.resolveCompletionItems([node]);
21518 }
21519 catch (error) {
21520 log.error(error.stack);
21521 }
21522 };
21523 /*
21524 * global function
21525 *
21526 * - g:xxx
21527 * - xx#xxx
21528 */
21529 Buffer.prototype.getGlobalFunctionItems = function () {
21530 var _this = this;
21531 var refs = {};
21532 Object.keys(this.globalFunctionRefs).forEach(function (name) {
21533 if (!_this.globalFunctions[name]) {
21534 refs[name] = _this.globalFunctionRefs[name];
21535 }
21536 });
21537 return this.getFunctionItems(this.globalFunctions, constant_1.sortTexts.three)
21538 .concat(this.getFunctionItems(refs, constant_1.sortTexts.three));
21539 };
21540 /*
21541 * script function
21542 *
21543 * - s:xxx
21544 */
21545 Buffer.prototype.getScriptFunctionItems = function () {
21546 var _this = this;
21547 var refs = {};
21548 Object.keys(this.scriptFunctionRefs).forEach(function (name) {
21549 if (!_this.scriptFunctions[name]) {
21550 refs[name] = _this.scriptFunctionRefs[name];
21551 }
21552 });
21553 return this.getFunctionItems(this.scriptFunctions, constant_1.sortTexts.two)
21554 .concat(this.getFunctionItems(refs, constant_1.sortTexts.two));
21555 };
21556 /*
21557 * global identifier
21558 *
21559 * - g:xxx
21560 * - b:xxx
21561 * - [a-zA-Z]+
21562 * - xx#xxx
21563 */
21564 Buffer.prototype.getGlobalIdentifierItems = function () {
21565 var _this = this;
21566 var refs = {};
21567 Object.keys(this.globalVariableRefs).forEach(function (name) {
21568 if (!_this.globalVariables[name]) {
21569 refs[name] = _this.globalVariableRefs[name];
21570 }
21571 });
21572 var globalVariables = [];
21573 var localVariables = [];
21574 this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.three)
21575 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.three))
21576 .forEach(function (item) {
21577 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label)) {
21578 localVariables.push(item);
21579 }
21580 else {
21581 globalVariables.push(item);
21582 }
21583 });
21584 if (localVariables.length) {
21585 var gloalFunctions = this.getGlobalFunctions();
21586 var scriptFunctions = this.getScriptFunctions();
21587 var funList_1 = Object.values(gloalFunctions).concat(Object.values(scriptFunctions)).reduce(function (res, fs) { return res.concat(fs); }, []);
21588 localVariables.forEach(function (l) {
21589 if (l.data.some(function (identifier) {
21590 return funList_1.every(function (fun) {
21591 return !(fun.startLine < identifier.startLine && identifier.startLine < fun.endLine);
21592 });
21593 })) {
21594 globalVariables.push(l);
21595 }
21596 });
21597 }
21598 return globalVariables;
21599 };
21600 /*
21601 * local identifier
21602 *
21603 * - s:xxx
21604 */
21605 Buffer.prototype.getLocalIdentifierItems = function () {
21606 var _this = this;
21607 var refs = {};
21608 Object.keys(this.localVariableRefs).forEach(function (name) {
21609 if (!_this.localVariables[name]) {
21610 refs[name] = _this.localVariableRefs[name];
21611 }
21612 });
21613 return this.getIdentifierItems(this.localVariables, constant_1.sortTexts.two)
21614 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.two))
21615 .filter(function (item) { return !/^(a|l):/.test(item.label); });
21616 };
21617 /*
21618 * function local identifier
21619 *
21620 * - l:xxx
21621 * - a:xxx
21622 * - identifiers in function range
21623 */
21624 Buffer.prototype.getFunctionLocalIdentifierItems = function (line) {
21625 var vimLineNum = line + 1;
21626 var startLine = -1;
21627 var endLine = -1;
21628 // get function args completion items
21629 var funArgs = []
21630 .concat(Object.values(this.globalFunctions).reduce(function (res, next) { return res.concat(next); }, []))
21631 .concat(Object.values(this.scriptFunctions).reduce(function (res, next) { return res.concat(next); }, []))
21632 .filter(function (fun) {
21633 if (startLine === -1 && endLine === -1 && fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
21634 startLine = fun.startLine;
21635 endLine = fun.endLine;
21636 }
21637 else if (fun.startLine > startLine && endLine > fun.endLine) {
21638 startLine = fun.startLine;
21639 endLine = fun.endLine;
21640 }
21641 return fun.startLine < vimLineNum && vimLineNum < fun.endLine;
21642 })
21643 .reduce(function (res, next) {
21644 (next.args || []).forEach(function (name) {
21645 if (res.indexOf(name.value) === -1) {
21646 res.push(name.value);
21647 }
21648 });
21649 return res;
21650 }, [])
21651 .map(function (name) { return ({
21652 label: "a:" + name,
21653 kind: vscode_languageserver_1.CompletionItemKind.Variable,
21654 sortText: constant_1.sortTexts.one,
21655 insertText: "a:" + name,
21656 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
21657 }); });
21658 if (startLine !== -1 && endLine !== -1) {
21659 var funcLocalIdentifiers = this.getIdentifierItems(this.localVariables, constant_1.sortTexts.one)
21660 .concat(this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.one))
21661 .filter(function (item) {
21662 if (!(/^l:/.test(item.label) || /^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label))) {
21663 return false;
21664 }
21665 var data = item.data;
21666 if (!data) {
21667 return false;
21668 }
21669 return data.some(function (i) { return startLine < i.startLine && i.startLine < endLine; });
21670 });
21671 return funArgs.concat(funcLocalIdentifiers);
21672 }
21673 return [];
21674 };
21675 /*
21676 * environment identifier
21677 *
21678 * - $xxx
21679 */
21680 Buffer.prototype.getEnvItems = function () {
21681 return Object.keys(this.envs).map(function (name) {
21682 return {
21683 label: name,
21684 insertText: name,
21685 sortText: constant_1.sortTexts.three,
21686 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
21687 };
21688 });
21689 };
21690 Buffer.prototype.resetProperties = function () {
21691 this.globalFunctions = {};
21692 this.scriptFunctions = {};
21693 this.globalFunctionRefs = {};
21694 this.scriptFunctionRefs = {};
21695 this.globalVariables = {};
21696 this.localVariables = {};
21697 this.globalVariableRefs = {};
21698 this.localVariableRefs = {};
21699 this.envs = {};
21700 this.envRefs = {};
21701 };
21702 Buffer.prototype.resolveCompletionItems = function (nodes) {
21703 var nodeList = [].concat(nodes);
21704 while (nodeList.length > 0) {
21705 var node = nodeList.pop();
21706 switch (node.type) {
21707 case NODE_TOPLEVEL:
21708 nodeList = nodeList.concat(node.body);
21709 break;
21710 // autocmd/command/map
21711 case NODE_EXCMD:
21712 this.takeFuncRefByExcmd(node);
21713 break;
21714 case NODE_EXCALL:
21715 case NODE_RETURN:
21716 case NODE_DELFUNCTION:
21717 case NODE_THROW:
21718 case NODE_EVAL:
21719 nodeList = nodeList.concat(node.left);
21720 break;
21721 case NODE_DOT:
21722 nodeList = nodeList.concat(node.left);
21723 this.takeIdentifier(node);
21724 break;
21725 case NODE_ECHO:
21726 case NODE_ECHON:
21727 case NODE_ECHOMSG:
21728 case NODE_ECHOERR:
21729 case NODE_UNLET:
21730 case NODE_LOCKVAR:
21731 case NODE_UNLOCKVAR:
21732 case NODE_EXECUTE:
21733 nodeList = nodeList.concat(node.list || []);
21734 break;
21735 case NODE_TERNARY:
21736 nodeList = nodeList.concat(node.cond || []);
21737 nodeList = nodeList.concat(node.left || []);
21738 nodeList = nodeList.concat(node.right || []);
21739 break;
21740 case NODE_IF:
21741 case NODE_ELSEIF:
21742 case NODE_ELSE:
21743 case NODE_WHILE:
21744 nodeList = nodeList.concat(node.body || []);
21745 nodeList = nodeList.concat(node.cond || []);
21746 nodeList = nodeList.concat(node.elseif || []);
21747 nodeList = nodeList.concat(node._else || []);
21748 break;
21749 case NODE_OR:
21750 case NODE_AND:
21751 case NODE_EQUAL:
21752 case NODE_EQUALCI:
21753 case NODE_EQUALCS:
21754 case NODE_NEQUAL:
21755 case NODE_NEQUALCI:
21756 case NODE_NEQUALCS:
21757 case NODE_GREATER:
21758 case NODE_GREATERCI:
21759 case NODE_GREATERCS:
21760 case NODE_GEQUAL:
21761 case NODE_GEQUALCI:
21762 case NODE_GEQUALCS:
21763 case NODE_SMALLER:
21764 case NODE_SMALLERCI:
21765 case NODE_SMALLERCS:
21766 case NODE_SEQUAL:
21767 case NODE_SEQUALCI:
21768 case NODE_SEQUALCS:
21769 case NODE_MATCH:
21770 case NODE_MATCHCI:
21771 case NODE_MATCHCS:
21772 case NODE_NOMATCH:
21773 case NODE_NOMATCHCI:
21774 case NODE_NOMATCHCS:
21775 case NODE_IS:
21776 case NODE_ISCI:
21777 case NODE_ISCS:
21778 case NODE_ISNOT:
21779 case NODE_ISNOTCI:
21780 case NODE_ISNOTCS:
21781 case NODE_CONCAT:
21782 case NODE_MULTIPLY:
21783 case NODE_DIVIDE:
21784 case NODE_REMAINDER:
21785 case NODE_NOT:
21786 case NODE_MINUS:
21787 case NODE_PLUS:
21788 case NODE_ADD:
21789 case NODE_SUBTRACT:
21790 case NODE_SUBSCRIPT:
21791 case NODE_METHOD:
21792 nodeList = nodeList.concat(node.left || []);
21793 nodeList = nodeList.concat(node.right || []);
21794 break;
21795 case NODE_FOR:
21796 nodeList = nodeList.concat(node.body || []);
21797 nodeList = nodeList.concat(node.right || []);
21798 this.takeFor([].concat(node.left || []).concat(node.list || []));
21799 break;
21800 case NODE_TRY:
21801 case NODE_CATCH:
21802 case NODE_FINALLY:
21803 nodeList = nodeList.concat(node.body || []);
21804 nodeList = nodeList.concat(node.catch || []);
21805 nodeList = nodeList.concat(node._finally || []);
21806 break;
21807 case NODE_FUNCTION:
21808 nodeList = nodeList.concat(node.body || []);
21809 if (node.left && node.left.type === NODE_DOT) {
21810 nodeList = nodeList.concat(node.left.left);
21811 }
21812 this.takeFunction(node);
21813 break;
21814 case NODE_LIST:
21815 nodeList = nodeList.concat(node.value || []);
21816 break;
21817 case NODE_DICT:
21818 nodeList = nodeList.concat((node.value || []).map(function (item) { return item[1]; }));
21819 break;
21820 case NODE_SLICE:
21821 case NODE_LAMBDA:
21822 nodeList = nodeList.concat(node.left || []);
21823 nodeList = nodeList.concat(node.rlist || []);
21824 break;
21825 case NODE_CALL:
21826 nodeList = nodeList.concat(node.rlist || []);
21827 if (node.left && node.left.type === NODE_DOT) {
21828 nodeList = nodeList.concat(node.left.left);
21829 }
21830 this.takeFuncRefByRef(node);
21831 this.takeFuncRef(node);
21832 break;
21833 case NODE_LET:
21834 case NODE_CONST:
21835 nodeList = nodeList.concat(node.right || []);
21836 if (node.left && node.left.type === NODE_DOT) {
21837 nodeList = nodeList.concat(node.left.left);
21838 }
21839 // not a function by function()/funcref()
21840 if (!this.takeFunctionByRef(node)) {
21841 this.takeLet(node);
21842 }
21843 break;
21844 case NODE_ENV:
21845 case NODE_IDENTIFIER:
21846 this.takeIdentifier(node);
21847 break;
21848 default:
21849 break;
21850 }
21851 }
21852 // log.info(`parse_buffer: ${JSON.stringify(this)}`)
21853 };
21854 Buffer.prototype.takeFunction = function (node) {
21855 var left = node.left, rlist = node.rlist, endfunction = node.endfunction;
21856 var name = this.getDotName(left);
21857 if (!name) {
21858 return;
21859 }
21860 var pos = this.getDotPos(left);
21861 if (!pos) {
21862 return;
21863 }
21864 var func = {
21865 name: name,
21866 args: rlist || [],
21867 startLine: pos.lnum,
21868 startCol: pos.col,
21869 endLine: endfunction.pos.lnum,
21870 endCol: endfunction.pos.col,
21871 };
21872 if (globalFuncPattern.test(name)) {
21873 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
21874 this.globalFunctions[name] = [];
21875 }
21876 this.globalFunctions[name].push(func);
21877 }
21878 else if (scriptFuncPattern.test(name)) {
21879 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
21880 this.scriptFunctions[name] = [];
21881 }
21882 this.scriptFunctions[name].push(func);
21883 }
21884 };
21885 /*
21886 * vim function
21887 *
21888 * - let funcName = function()
21889 * - let funcName = funcref()
21890 */
21891 Buffer.prototype.takeFunctionByRef = function (node) {
21892 var left = node.left, right = node.right;
21893 if (!right || right.type !== NODE_CALL) {
21894 return;
21895 }
21896 // is not function()/funcref()
21897 if (!right.left ||
21898 !right.left.value ||
21899 ["function", "funcref"].indexOf(right.left.value) === -1) {
21900 return;
21901 }
21902 var name = this.getDotName(left);
21903 if (!name) {
21904 return;
21905 }
21906 var pos = this.getDotPos(left);
21907 if (!pos) {
21908 return false;
21909 }
21910 var func = {
21911 name: name,
21912 args: [],
21913 startLine: pos.lnum,
21914 startCol: pos.col,
21915 endLine: pos.lnum,
21916 endCol: pos.col,
21917 };
21918 if (globalFuncPattern.test(name)) {
21919 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
21920 this.globalFunctions[name] = [];
21921 }
21922 this.globalFunctions[name].push(func);
21923 return true;
21924 }
21925 else if (scriptFuncPattern.test(name)) {
21926 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
21927 this.scriptFunctions[name] = [];
21928 }
21929 this.scriptFunctions[name].push(func);
21930 return true;
21931 }
21932 return false;
21933 };
21934 Buffer.prototype.takeFuncRef = function (node) {
21935 var left = node.left, rlist = node.rlist;
21936 var name = "";
21937 if (left.type === NODE_IDENTIFIER) {
21938 name = left.value;
21939 // <SID>funName
21940 }
21941 else if (left.type === NODE_CURLYNAME) {
21942 name = (left.value || []).map(function (item) { return item.value; }).join("");
21943 }
21944 else if (left.type === NODE_DOT) {
21945 name = this.getDotName(left);
21946 }
21947 if (!name) {
21948 return;
21949 }
21950 var pos = this.getDotPos(left);
21951 if (!pos) {
21952 return;
21953 }
21954 var funcRef = {
21955 name: name,
21956 args: rlist || [],
21957 startLine: pos.lnum,
21958 startCol: pos.col,
21959 };
21960 if (globalFuncPattern.test(name)) {
21961 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
21962 this.globalFunctionRefs[name] = [];
21963 }
21964 this.globalFunctionRefs[name].push(funcRef);
21965 }
21966 else if (scriptFuncPattern.test(name)) {
21967 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
21968 this.scriptFunctionRefs[name] = [];
21969 }
21970 this.scriptFunctionRefs[name].push(funcRef);
21971 }
21972 };
21973 /*
21974 * vim function ref
21975 * first value is function name
21976 *
21977 * - function('funcName')
21978 * - funcref('funcName')
21979 */
21980 Buffer.prototype.takeFuncRefByRef = function (node) {
21981 var left = node.left, rlist = node.rlist;
21982 var funcNode = rlist && rlist[0];
21983 if (!left ||
21984 ["function", "funcref"].indexOf(left.value) === -1 ||
21985 !funcNode ||
21986 !funcNode.pos ||
21987 typeof funcNode.value !== "string") {
21988 return;
21989 }
21990 // delete '/" of function name
21991 var name = funcNode.value.replace(/^['"]|['"]$/g, "");
21992 var funcRef = {
21993 name: name,
21994 args: [],
21995 startLine: funcNode.pos.lnum,
21996 startCol: funcNode.pos.col + 1,
21997 };
21998 if (globalFuncPattern.test(name)) {
21999 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
22000 this.globalFunctionRefs[name] = [];
22001 }
22002 this.globalFunctionRefs[name].push(funcRef);
22003 }
22004 else if (scriptFuncPattern.test(name)) {
22005 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
22006 this.scriptFunctionRefs[name] = [];
22007 }
22008 this.scriptFunctionRefs[name].push(funcRef);
22009 }
22010 };
22011 /*
22012 * FIXME: take function ref by
22013 *
22014 * - autocmd
22015 * - command
22016 * - map
22017 */
22018 Buffer.prototype.takeFuncRefByExcmd = function (node) {
22019 var pos = node.pos, str = node.str;
22020 if (!str) {
22021 return;
22022 }
22023 // tslint:disable-next-line: max-line-length
22024 if (!/^[ \t]*((au|aut|auto|autoc|autocm|autocmd|com|comm|comma|comman|command)!?[ \t]+|([a-zA-Z]*map!?[ \t]+.*?:))/.test(str)) {
22025 return;
22026 }
22027 var regFunc = /(<sid>[\w_#]+|[a-zA-Z_]:[\w_#]+|[\w_#]+)[ \t]*\(/gi;
22028 var m = regFunc.exec(str);
22029 while (m) {
22030 var name = m[1];
22031 if (name) {
22032 var funcRef = {
22033 name: name,
22034 args: [],
22035 startLine: pos.lnum,
22036 startCol: pos.col + m.index,
22037 };
22038 if (globalFuncPattern.test(name)) {
22039 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
22040 this.globalFunctionRefs[name] = [];
22041 }
22042 this.globalFunctionRefs[name].push(funcRef);
22043 }
22044 else if (scriptFuncPattern.test(name)) {
22045 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
22046 this.scriptFunctionRefs[name] = [];
22047 }
22048 this.scriptFunctionRefs[name].push(funcRef);
22049 }
22050 }
22051 m = regFunc.exec(str);
22052 }
22053 };
22054 Buffer.prototype.takeLet = function (node) {
22055 var pos = this.getDotPos(node.left);
22056 var name = this.getDotName(node.left);
22057 if (!pos || !name) {
22058 return;
22059 }
22060 var identifier = {
22061 name: name,
22062 startLine: pos.lnum,
22063 startCol: pos.col,
22064 };
22065 if (localVariablePattern.test(name)) {
22066 if (!this.localVariables[name] || !Array.isArray(this.localVariables[name])) {
22067 this.localVariables[name] = [];
22068 }
22069 this.localVariables[name].push(identifier);
22070 }
22071 else if (globalVariablePattern.test(name)) {
22072 if (!this.globalVariables[name] || !Array.isArray(this.globalVariables[name])) {
22073 this.globalVariables[name] = [];
22074 }
22075 this.globalVariables[name].push(identifier);
22076 }
22077 else if (envPattern.test(name)) {
22078 if (!this.envs[name] || !Array.isArray(this.envs[name])) {
22079 this.envs[name] = [];
22080 }
22081 this.envs[name].push(identifier);
22082 }
22083 };
22084 Buffer.prototype.takeFor = function (nodes) {
22085 var _this = this;
22086 nodes.forEach(function (node) {
22087 if (node.type !== NODE_IDENTIFIER || !node.pos) {
22088 return;
22089 }
22090 var name = node.value;
22091 var identifier = {
22092 name: name,
22093 startLine: node.pos.lnum,
22094 startCol: node.pos.col,
22095 };
22096 if (localVariablePattern.test(name)) {
22097 if (!_this.localVariables[name] || !Array.isArray(_this.localVariables[name])) {
22098 _this.localVariables[name] = [];
22099 }
22100 _this.localVariables[name].push(identifier);
22101 }
22102 else if (globalVariablePattern.test(name)) {
22103 if (!_this.globalVariables[name] || !Array.isArray(_this.globalVariables[name])) {
22104 _this.globalVariables[name] = [];
22105 }
22106 _this.globalVariables[name].push(identifier);
22107 }
22108 else if (envPattern.test(name)) {
22109 if (!_this.envs[name] || !Array.isArray(_this.envs[name])) {
22110 _this.envs[name] = [];
22111 }
22112 _this.envs[name].push(identifier);
22113 }
22114 });
22115 };
22116 Buffer.prototype.takeIdentifier = function (node) {
22117 var name = this.getDotName(node);
22118 if (!name) {
22119 return;
22120 }
22121 var pos = this.getDotPos(node);
22122 if (!pos) {
22123 return;
22124 }
22125 var identifier = {
22126 name: name,
22127 startLine: pos.lnum,
22128 startCol: pos.col,
22129 };
22130 if (globalVariablePattern.test(name)) {
22131 if (!this.globalVariableRefs[name] || !Array.isArray(this.globalVariableRefs[name])) {
22132 this.globalVariableRefs[name] = [];
22133 }
22134 this.globalVariableRefs[name].push(identifier);
22135 }
22136 else if (localVariablePattern.test(name)) {
22137 if (!this.localVariableRefs[name] || !Array.isArray(this.localVariableRefs[name])) {
22138 this.localVariableRefs[name] = [];
22139 }
22140 this.localVariableRefs[name].push(identifier);
22141 }
22142 else if (envPattern.test(name)) {
22143 if (!this.envRefs[name] || !Array.isArray(this.envRefs[name])) {
22144 this.envRefs[name] = [];
22145 }
22146 this.envRefs[name].push(identifier);
22147 }
22148 };
22149 Buffer.prototype.getDotPos = function (node) {
22150 if (!node) {
22151 return null;
22152 }
22153 if (node.type === NODE_IDENTIFIER ||
22154 node.type === NODE_ENV ||
22155 node.type === NODE_CURLYNAME) {
22156 return node.pos;
22157 }
22158 var left = node.left;
22159 return this.getDotPos(left);
22160 };
22161 Buffer.prototype.getDotName = function (node) {
22162 if (node.type === NODE_IDENTIFIER ||
22163 node.type === NODE_STRING ||
22164 node.type === NODE_NUMBER ||
22165 node.type === NODE_ENV) {
22166 return node.value;
22167 }
22168 else if (node.type === NODE_CURLYNAME) {
22169 return (node.value || []).map(function (item) { return item.value; }).join("");
22170 }
22171 else if (node.type === NODE_SUBSCRIPT) {
22172 return this.getDotName(node.left);
22173 }
22174 var left = node.left, right = node.right;
22175 var list = [];
22176 if (left) {
22177 list.push(this.getDotName(left));
22178 }
22179 if (right) {
22180 list.push(this.getDotName(right));
22181 }
22182 return list.join(".");
22183 };
22184 Buffer.prototype.getFunctionItems = function (items, sortText) {
22185 return Object.keys(items).map(function (name) {
22186 var list = items[name];
22187 var args = "${1}";
22188 if (list[0] && list[0].args && list[0].args.length > 0) {
22189 args = (list[0].args || []).reduce(function (res, next, idx) {
22190 // FIXME: resove next.value is not string
22191 var value = typeof next.value !== "string" ? "param" : next.value;
22192 if (idx === 0) {
22193 return "${" + (idx + 1) + ":" + value + "}";
22194 }
22195 return res + ", ${" + (idx + 1) + ":" + value + "}";
22196 }, "");
22197 }
22198 var label = name;
22199 if (/^<SID>/.test(name)) {
22200 label = name.replace(/^<SID>/, "s:");
22201 }
22202 return {
22203 label: label,
22204 detail: "any",
22205 sortText: sortText,
22206 documentation: "User defined function",
22207 kind: vscode_languageserver_1.CompletionItemKind.Function,
22208 insertText: label + "(" + args + ")${0}",
22209 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
22210 };
22211 });
22212 };
22213 Buffer.prototype.getIdentifierItems = function (items, sortText) {
22214 var _this = this;
22215 return Object.keys(items)
22216 .filter(function (name) { return !_this.globalFunctions[name] && !_this.scriptFunctions[name]; })
22217 .map(function (name) {
22218 var list = items[name];
22219 return {
22220 label: name,
22221 kind: vscode_languageserver_1.CompletionItemKind.Variable,
22222 sortText: sortText,
22223 documentation: "User defined variable",
22224 insertText: name,
22225 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
22226 data: list || [],
22227 };
22228 });
22229 };
22230 return Buffer;
22231}());
22232exports.Buffer = Buffer;
22233
22234
22235/***/ }),
22236/* 134 */
22237/***/ (function(module, exports, __webpack_require__) {
22238
22239"use strict";
22240
22241Object.defineProperty(exports, "__esModule", { value: true });
22242var patterns_1 = __webpack_require__(48);
22243var util_1 = __webpack_require__(40);
22244var builtin_1 = __webpack_require__(52);
22245var provider_1 = __webpack_require__(124);
22246function provider(line) {
22247 if (util_1.isSomeMatchPattern(patterns_1.featurePattern, line)) {
22248 return builtin_1.builtinDocs.getVimFeatures();
22249 }
22250 return [];
22251}
22252provider_1.useProvider(provider);
22253
22254
22255/***/ }),
22256/* 135 */
22257/***/ (function(module, exports, __webpack_require__) {
22258
22259"use strict";
22260
22261Object.defineProperty(exports, "__esModule", { value: true });
22262var patterns_1 = __webpack_require__(48);
22263var builtin_1 = __webpack_require__(52);
22264var provider_1 = __webpack_require__(124);
22265function provider(line) {
22266 if (!patterns_1.highlightLinkPattern.test(line) &&
22267 !patterns_1.highlightValuePattern.test(line) &&
22268 patterns_1.highlightPattern.test(line)) {
22269 return builtin_1.builtinDocs.getHighlightArgKeys().filter(function (item) {
22270 return line.indexOf(item.label) === -1;
22271 });
22272 }
22273 return [];
22274}
22275provider_1.useProvider(provider);
22276
22277
22278/***/ }),
22279/* 136 */
22280/***/ (function(module, exports, __webpack_require__) {
22281
22282"use strict";
22283
22284Object.defineProperty(exports, "__esModule", { value: true });
22285var patterns_1 = __webpack_require__(48);
22286var builtin_1 = __webpack_require__(52);
22287var provider_1 = __webpack_require__(124);
22288function provider(line) {
22289 var m = line.match(patterns_1.highlightValuePattern);
22290 if (!patterns_1.highlightLinkPattern.test(line) && m) {
22291 var values = builtin_1.builtinDocs.getHighlightArgValues();
22292 var keyName = m[3];
22293 if (values[keyName]) {
22294 return values[keyName];
22295 }
22296 }
22297 return [];
22298}
22299provider_1.useProvider(provider);
22300
22301
22302/***/ }),
22303/* 137 */
22304/***/ (function(module, exports, __webpack_require__) {
22305
22306"use strict";
22307
22308var __assign = (this && this.__assign) || function () {
22309 __assign = Object.assign || function(t) {
22310 for (var s, i = 1, n = arguments.length; i < n; i++) {
22311 s = arguments[i];
22312 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22313 t[p] = s[p];
22314 }
22315 return t;
22316 };
22317 return __assign.apply(this, arguments);
22318};
22319var __importDefault = (this && this.__importDefault) || function (mod) {
22320 return (mod && mod.__esModule) ? mod : { "default": mod };
22321};
22322Object.defineProperty(exports, "__esModule", { value: true });
22323var patterns_1 = __webpack_require__(48);
22324var util_1 = __webpack_require__(40);
22325var config_1 = __importDefault(__webpack_require__(49));
22326var workspaces_1 = __webpack_require__(131);
22327var provider_1 = __webpack_require__(124);
22328function provider(line, uri, position) {
22329 if (util_1.isSomeMatchPattern(patterns_1.notIdentifierPattern, line)) {
22330 return [];
22331 }
22332 else if (/\b[gbsla]:\w*$/.test(line)) {
22333 var list = [];
22334 if (/\bg:\w*$/.test(line)) {
22335 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
22336 .filter(function (item) { return /^g:/.test(item.label); });
22337 }
22338 else if (/\bb:\w*$/.test(line)) {
22339 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
22340 .filter(function (item) { return /^b:/.test(item.label); });
22341 }
22342 else if (/\bs:\w*$/.test(line)) {
22343 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
22344 .filter(function (item) { return /^s:/.test(item.label); });
22345 }
22346 else if (/\bl:\w*$/.test(line)) {
22347 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
22348 .filter(function (item) { return /^l:/.test(item.label); });
22349 }
22350 else if (/\ba:\w*$/.test(line)) {
22351 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
22352 .filter(function (item) { return /^a:/.test(item.label); });
22353 }
22354 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
22355 }
22356 else if (/\B:\w*$/.test(line)) {
22357 return workspaces_1.workspace.getIdentifierItems(uri, position.line)
22358 .filter(function (item) { return /:/.test(item.label); })
22359 .map(function (item) {
22360 var m = line.match(/:[^:]*$/);
22361 return __assign(__assign({}, item), {
22362 // delete the `:` symbol
22363 textEdit: {
22364 range: {
22365 start: {
22366 line: position.line,
22367 character: line.length - m[0].length,
22368 },
22369 end: {
22370 line: position.line,
22371 character: line.length - m[0].length + 1,
22372 },
22373 },
22374 newText: item.insertText,
22375 } });
22376 });
22377 }
22378 return workspaces_1.workspace.getIdentifierItems(uri, position.line);
22379}
22380provider_1.useProvider(provider);
22381
22382
22383/***/ }),
22384/* 138 */
22385/***/ (function(module, exports, __webpack_require__) {
22386
22387"use strict";
22388
22389var __assign = (this && this.__assign) || function () {
22390 __assign = Object.assign || function(t) {
22391 for (var s, i = 1, n = arguments.length; i < n; i++) {
22392 s = arguments[i];
22393 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22394 t[p] = s[p];
22395 }
22396 return t;
22397 };
22398 return __assign.apply(this, arguments);
22399};
22400Object.defineProperty(exports, "__esModule", { value: true });
22401var patterns_1 = __webpack_require__(48);
22402var builtin_1 = __webpack_require__(52);
22403var provider_1 = __webpack_require__(124);
22404function provider(line) {
22405 if (patterns_1.mapCommandPattern.test(line)) {
22406 if (/<$/.test(line)) {
22407 return builtin_1.builtinDocs.getVimMapArgs().map(function (item) { return (__assign(__assign({}, item), { insertText: item.insertText.slice(1) })); });
22408 }
22409 return builtin_1.builtinDocs.getVimMapArgs();
22410 }
22411 return [];
22412}
22413provider_1.useProvider(provider);
22414
22415
22416/***/ }),
22417/* 139 */
22418/***/ (function(module, exports, __webpack_require__) {
22419
22420"use strict";
22421
22422Object.defineProperty(exports, "__esModule", { value: true });
22423var patterns_1 = __webpack_require__(48);
22424var util_1 = __webpack_require__(40);
22425var builtin_1 = __webpack_require__(52);
22426var provider_1 = __webpack_require__(124);
22427function provider(line) {
22428 if (util_1.isSomeMatchPattern(patterns_1.optionPattern, line)) {
22429 return builtin_1.builtinDocs.getVimOptions();
22430 }
22431 return [];
22432}
22433provider_1.useProvider(provider);
22434
22435
22436/***/ }),
22437/* 140 */
22438/***/ (function(module, exports, __webpack_require__) {
22439
22440"use strict";
22441
22442Object.defineProperty(exports, "__esModule", { value: true });
22443var builtin_1 = __webpack_require__(52);
22444exports.completionResolveProvider = function (params) {
22445 return builtin_1.builtinDocs.getDocumentByCompletionItem(params);
22446};
22447
22448
22449/***/ }),
22450/* 141 */
22451/***/ (function(module, exports, __webpack_require__) {
22452
22453"use strict";
22454
22455Object.defineProperty(exports, "__esModule", { value: true });
22456var util_1 = __webpack_require__(40);
22457var documents_1 = __webpack_require__(50);
22458var workspaces_1 = __webpack_require__(131);
22459exports.definitionProvider = function (params) {
22460 var textDocument = params.textDocument, position = params.position;
22461 var doc = documents_1.documents.get(textDocument.uri);
22462 if (!doc) {
22463 return null;
22464 }
22465 var words = util_1.getWordFromPosition(doc, position);
22466 if (!words) {
22467 return null;
22468 }
22469 var currentName = words.word;
22470 if (/\./.test(words.right)) {
22471 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
22472 currentName = words.word.replace(tail, "");
22473 }
22474 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations;
22475};
22476
22477
22478/***/ }),
22479/* 142 */
22480/***/ (function(module, exports, __webpack_require__) {
22481
22482"use strict";
22483
22484Object.defineProperty(exports, "__esModule", { value: true });
22485var util_1 = __webpack_require__(40);
22486var builtin_1 = __webpack_require__(52);
22487var documents_1 = __webpack_require__(50);
22488exports.hoverProvider = function (params) {
22489 var textDocument = params.textDocument, position = params.position;
22490 var doc = documents_1.documents.get(textDocument.uri);
22491 if (!doc) {
22492 return;
22493 }
22494 var words = util_1.getWordFromPosition(doc, position);
22495 if (!words) {
22496 return;
22497 }
22498 return builtin_1.builtinDocs.getHoverDocument(words.word, words.wordLeft, words.wordRight);
22499};
22500
22501
22502/***/ }),
22503/* 143 */
22504/***/ (function(module, exports, __webpack_require__) {
22505
22506"use strict";
22507
22508Object.defineProperty(exports, "__esModule", { value: true });
22509var util_1 = __webpack_require__(40);
22510var documents_1 = __webpack_require__(50);
22511var workspaces_1 = __webpack_require__(131);
22512exports.referencesProvider = function (params) {
22513 var textDocument = params.textDocument, position = params.position;
22514 var doc = documents_1.documents.get(textDocument.uri);
22515 if (!doc) {
22516 return null;
22517 }
22518 var words = util_1.getWordFromPosition(doc, position);
22519 if (!words) {
22520 return null;
22521 }
22522 var currentName = words.word;
22523 if (/\./.test(words.right)) {
22524 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
22525 currentName = words.word.replace(tail, "");
22526 }
22527 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references").locations;
22528};
22529
22530
22531/***/ }),
22532/* 144 */
22533/***/ (function(module, exports, __webpack_require__) {
22534
22535"use strict";
22536
22537Object.defineProperty(exports, "__esModule", { value: true });
22538var vscode_languageserver_1 = __webpack_require__(4);
22539var util_1 = __webpack_require__(40);
22540var documents_1 = __webpack_require__(50);
22541var workspaces_1 = __webpack_require__(131);
22542exports.prepareProvider = function (params) {
22543 var textDocument = params.textDocument, position = params.position;
22544 var doc = documents_1.documents.get(textDocument.uri);
22545 if (!doc) {
22546 return null;
22547 }
22548 var words = util_1.getWordFromPosition(doc, position);
22549 if (!words) {
22550 return null;
22551 }
22552 var currentName = words.word;
22553 if (/\./.test(words.right)) {
22554 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
22555 currentName = words.word.replace(tail, "");
22556 }
22557 return {
22558 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)),
22559 placeholder: currentName,
22560 };
22561};
22562exports.renameProvider = function (params) {
22563 var textDocument = params.textDocument, position = params.position, newName = params.newName;
22564 var doc = documents_1.documents.get(textDocument.uri);
22565 if (!doc) {
22566 return null;
22567 }
22568 var words = util_1.getWordFromPosition(doc, position);
22569 if (!words) {
22570 return null;
22571 }
22572 var currentName = words.word;
22573 if (/\./.test(words.right)) {
22574 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
22575 currentName = words.word.replace(tail, "");
22576 }
22577 var changes = {};
22578 var isChange = false;
22579 workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations
22580 .forEach(function (l) {
22581 isChange = true;
22582 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
22583 changes[l.uri] = [];
22584 }
22585 changes[l.uri].push({
22586 newText: /^a:/.test(newName) ? newName.slice(2) : newName,
22587 range: l.range,
22588 });
22589 });
22590 var refs = workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references");
22591 refs.locations.forEach(function (l) {
22592 isChange = true;
22593 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
22594 changes[l.uri] = [];
22595 }
22596 changes[l.uri].push({
22597 newText: refs.isFunArg ? "a:" + newName : newName,
22598 range: l.range,
22599 });
22600 });
22601 if (isChange) {
22602 return {
22603 changes: changes,
22604 };
22605 }
22606 return null;
22607};
22608
22609
22610/***/ }),
22611/* 145 */
22612/***/ (function(module, exports, __webpack_require__) {
22613
22614"use strict";
22615
22616Object.defineProperty(exports, "__esModule", { value: true });
22617var vscode_languageserver_1 = __webpack_require__(4);
22618var patterns_1 = __webpack_require__(48);
22619var builtin_1 = __webpack_require__(52);
22620var documents_1 = __webpack_require__(50);
22621exports.signatureHelpProvider = function (params) {
22622 var textDocument = params.textDocument, position = params.position;
22623 var doc = documents_1.documents.get(textDocument.uri);
22624 if (!doc) {
22625 return;
22626 }
22627 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)));
22628 // comment line
22629 if (patterns_1.commentPattern.test(currentLine)) {
22630 return;
22631 }
22632 var preSegment = currentLine.slice(0, position.character);
22633 var m = preSegment.match(/([\w#&:]+)[ \t]*\(([^()]*|\([^)]*\))*$/);
22634 if (!m) {
22635 return;
22636 }
22637 var functionName = m["1"];
22638 var placeIdx = m[0].split(",").length - 1;
22639 return builtin_1.builtinDocs.getSignatureHelpByName(functionName, placeIdx);
22640};
22641
22642
22643/***/ }),
22644/* 146 */
22645/***/ (function(module, exports, __webpack_require__) {
22646
22647"use strict";
22648
22649Object.defineProperty(exports, "__esModule", { value: true });
22650var util_1 = __webpack_require__(40);
22651var documents_1 = __webpack_require__(50);
22652var workspaces_1 = __webpack_require__(131);
22653exports.documentHighlightProvider = (function (params) {
22654 var textDocument = params.textDocument, position = params.position;
22655 var doc = documents_1.documents.get(textDocument.uri);
22656 if (!doc) {
22657 return [];
22658 }
22659 var words = util_1.getWordFromPosition(doc, position);
22660 if (!words) {
22661 return [];
22662 }
22663 var currentName = words.word;
22664 if (/\./.test(words.right)) {
22665 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
22666 currentName = words.word.replace(tail, "");
22667 }
22668 var defs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "definition");
22669 var refs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "references");
22670 return defs.locations.concat(refs.locations)
22671 .map(function (location) {
22672 return {
22673 range: location.range,
22674 };
22675 });
22676});
22677
22678
22679/***/ }),
22680/* 147 */
22681/***/ (function(module, exports, __webpack_require__) {
22682
22683"use strict";
22684
22685var __importDefault = (this && this.__importDefault) || function (mod) {
22686 return (mod && mod.__esModule) ? mod : { "default": mod };
22687};
22688Object.defineProperty(exports, "__esModule", { value: true });
22689var child_process_1 = __importDefault(__webpack_require__(37));
22690var path_1 = __webpack_require__(15);
22691var rxjs_1 = __webpack_require__(148);
22692var waitMap_1 = __webpack_require__(250);
22693var operators_1 = __webpack_require__(251);
22694var vscode_uri_1 = __importDefault(__webpack_require__(132));
22695var logger_1 = __importDefault(__webpack_require__(121));
22696var util_1 = __webpack_require__(40);
22697var diagnostic_1 = __webpack_require__(349);
22698var config_1 = __importDefault(__webpack_require__(49));
22699var workspaces_1 = __webpack_require__(131);
22700var log = logger_1.default("parser");
22701var parserHandles = {};
22702var indexes = {};
22703var origin$ = new rxjs_1.Subject();
22704var scanProcess;
22705var isScanRuntimepath = false;
22706function startIndex() {
22707 if (scanProcess) {
22708 return;
22709 }
22710 scanProcess = child_process_1.default.fork(path_1.join(__dirname, "scan.js"), ["--node-ipc"]);
22711 scanProcess.on("message", function (mess) {
22712 var data = mess.data, msglog = mess.msglog;
22713 if (data) {
22714 if (!workspaces_1.workspace.isExistsBuffer(data.uri)) {
22715 workspaces_1.workspace.updateBuffer(data.uri, data.node);
22716 }
22717 }
22718 if (msglog) {
22719 log.info("child_log: " + msglog);
22720 }
22721 });
22722 scanProcess.on("error", function (err) {
22723 log.error("" + (err.stack || err.message || err));
22724 });
22725 scanProcess.send({
22726 config: {
22727 gap: config_1.default.indexes.gap,
22728 count: config_1.default.indexes.count,
22729 projectRootPatterns: config_1.default.indexes.projectRootPatterns,
22730 },
22731 });
22732}
22733function next(textDoc) {
22734 if (!parserHandles[textDoc.uri]) {
22735 var uri_1 = textDoc.uri;
22736 parserHandles[uri_1] = origin$.pipe(operators_1.filter(function (td) { return uri_1 === td.uri; }), operators_1.switchMap(function (td) {
22737 return rxjs_1.timer(100).pipe(operators_1.map(function () { return td; }));
22738 }), waitMap_1.waitMap(function (td) {
22739 return rxjs_1.from(util_1.handleParse(td));
22740 }, true)).subscribe(function (res) {
22741 if (config_1.default.diagnostic.enable) {
22742 // handle diagnostic
22743 diagnostic_1.handleDiagnostic(textDoc, res[1]);
22744 }
22745 // handle node
22746 workspaces_1.workspace.updateBuffer(uri_1, res[0]);
22747 // scan project
22748 if (!indexes[uri_1]) {
22749 indexes[uri_1] = true;
22750 scanProcess.send({
22751 uri: uri_1,
22752 });
22753 if (!isScanRuntimepath) {
22754 isScanRuntimepath = true;
22755 scan([config_1.default.vimruntime].concat(config_1.default.runtimepath));
22756 }
22757 }
22758 }, function (err) {
22759 log.error("" + (err.stack || err.message || err));
22760 });
22761 }
22762 if (!scanProcess) {
22763 startIndex();
22764 }
22765 origin$.next(textDoc);
22766}
22767exports.next = next;
22768function unsubscribe(textDoc) {
22769 if (parserHandles[textDoc.uri] !== undefined) {
22770 parserHandles[textDoc.uri].unsubscribe();
22771 }
22772 parserHandles[textDoc.uri] = undefined;
22773}
22774exports.unsubscribe = unsubscribe;
22775// scan directory
22776function scan(paths) {
22777 if (!scanProcess) {
22778 startIndex();
22779 }
22780 if (config_1.default.indexes.runtimepath) {
22781 var list = [].concat(paths);
22782 for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
22783 var p = list_1[_i];
22784 if (!p) {
22785 continue;
22786 }
22787 p = p.trim();
22788 if (!p || p === "/") {
22789 continue;
22790 }
22791 scanProcess.send({
22792 uri: vscode_uri_1.default.file(path_1.join(p, "f")).toString(),
22793 });
22794 }
22795 }
22796}
22797exports.scan = scan;
22798
22799
22800/***/ }),
22801/* 148 */
22802/***/ (function(module, __webpack_exports__, __webpack_require__) {
22803
22804"use strict";
22805__webpack_require__.r(__webpack_exports__);
22806/* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
22807/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return _internal_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]; });
22808
22809/* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(166);
22810/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__["ConnectableObservable"]; });
22811
22812/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
22813/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__["GroupedObservable"]; });
22814
22815/* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(163);
22816/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__["observable"]; });
22817
22818/* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(167);
22819/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _internal_Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]; });
22820
22821/* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(172);
22822/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]; });
22823
22824/* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(173);
22825/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__["ReplaySubject"]; });
22826
22827/* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(190);
22828/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__["AsyncSubject"]; });
22829
22830/* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(191);
22831/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asapScheduler", function() { return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asap"]; });
22832
22833/* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(195);
22834/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asyncScheduler", function() { return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["async"]; });
22835
22836/* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(174);
22837/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "queueScheduler", function() { return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queue"]; });
22838
22839/* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(196);
22840/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function() { return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrame"]; });
22841
22842/* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(199);
22843/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualTimeScheduler"]; });
22844
22845/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualAction"]; });
22846
22847/* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(180);
22848/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__["Scheduler"]; });
22849
22850/* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(157);
22851/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__["Subscription"]; });
22852
22853/* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(151);
22854/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__["Subscriber"]; });
22855
22856/* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(182);
22857/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["Notification"]; });
22858
22859/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["NotificationKind"]; });
22860
22861/* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(164);
22862/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__["pipe"]; });
22863
22864/* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(165);
22865/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__["noop"]; });
22866
22867/* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(200);
22868/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__["identity"]; });
22869
22870/* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(201);
22871/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__["isObservable"]; });
22872
22873/* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(202);
22874/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__["ArgumentOutOfRangeError"]; });
22875
22876/* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(203);
22877/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__["EmptyError"]; });
22878
22879/* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(168);
22880/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__["ObjectUnsubscribedError"]; });
22881
22882/* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(160);
22883/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__["UnsubscriptionError"]; });
22884
22885/* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(204);
22886/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__["TimeoutError"]; });
22887
22888/* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(205);
22889/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__["bindCallback"]; });
22890
22891/* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(207);
22892/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__["bindNodeCallback"]; });
22893
22894/* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(208);
22895/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__["combineLatest"]; });
22896
22897/* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(219);
22898/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__["concat"]; });
22899
22900/* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(230);
22901/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__["defer"]; });
22902
22903/* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(183);
22904/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["empty"]; });
22905
22906/* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(231);
22907/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__["forkJoin"]; });
22908
22909/* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(223);
22910/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "from", function() { return _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__["from"]; });
22911
22912/* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(232);
22913/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__["fromEvent"]; });
22914
22915/* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(233);
22916/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__["fromEventPattern"]; });
22917
22918/* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(234);
22919/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__["generate"]; });
22920
22921/* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(235);
22922/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__["iif"]; });
22923
22924/* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(236);
22925/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__["interval"]; });
22926
22927/* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(238);
22928/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__["merge"]; });
22929
22930/* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(239);
22931/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "never", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["never"]; });
22932
22933/* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(184);
22934/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "of", function() { return _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__["of"]; });
22935
22936/* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(240);
22937/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__["onErrorResumeNext"]; });
22938
22939/* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(241);
22940/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__["pairs"]; });
22941
22942/* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(242);
22943/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__["partition"]; });
22944
22945/* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(245);
22946/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__["race"]; });
22947
22948/* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(246);
22949/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__["range"]; });
22950
22951/* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(189);
22952/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__["throwError"]; });
22953
22954/* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(247);
22955/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__["timer"]; });
22956
22957/* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(248);
22958/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "using", function() { return _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__["using"]; });
22959
22960/* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(249);
22961/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__["zip"]; });
22962
22963/* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(224);
22964/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__["scheduled"]; });
22965
22966/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["EMPTY"]; });
22967
22968/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["NEVER"]; });
22969
22970/* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(155);
22971/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "config", function() { return _internal_config__WEBPACK_IMPORTED_MODULE_52__["config"]; });
22972
22973/** PURE_IMPORTS_START PURE_IMPORTS_END */
22974
22975
22976
22977
22978
22979
22980
22981
22982
22983
22984
22985
22986
22987
22988
22989
22990
22991
22992
22993
22994
22995
22996
22997
22998
22999
23000
23001
23002
23003
23004
23005
23006
23007
23008
23009
23010
23011
23012
23013
23014
23015
23016
23017
23018
23019
23020
23021
23022
23023
23024
23025
23026
23027
23028
23029//# sourceMappingURL=index.js.map
23030
23031
23032/***/ }),
23033/* 149 */
23034/***/ (function(module, __webpack_exports__, __webpack_require__) {
23035
23036"use strict";
23037__webpack_require__.r(__webpack_exports__);
23038/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return Observable; });
23039/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(150);
23040/* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(162);
23041/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(163);
23042/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(164);
23043/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(155);
23044/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */
23045
23046
23047
23048
23049
23050var Observable = /*@__PURE__*/ (function () {
23051 function Observable(subscribe) {
23052 this._isScalar = false;
23053 if (subscribe) {
23054 this._subscribe = subscribe;
23055 }
23056 }
23057 Observable.prototype.lift = function (operator) {
23058 var observable = new Observable();
23059 observable.source = this;
23060 observable.operator = operator;
23061 return observable;
23062 };
23063 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
23064 var operator = this.operator;
23065 var sink = Object(_util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__["toSubscriber"])(observerOrNext, error, complete);
23066 if (operator) {
23067 sink.add(operator.call(sink, this.source));
23068 }
23069 else {
23070 sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
23071 this._subscribe(sink) :
23072 this._trySubscribe(sink));
23073 }
23074 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
23075 if (sink.syncErrorThrowable) {
23076 sink.syncErrorThrowable = false;
23077 if (sink.syncErrorThrown) {
23078 throw sink.syncErrorValue;
23079 }
23080 }
23081 }
23082 return sink;
23083 };
23084 Observable.prototype._trySubscribe = function (sink) {
23085 try {
23086 return this._subscribe(sink);
23087 }
23088 catch (err) {
23089 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
23090 sink.syncErrorThrown = true;
23091 sink.syncErrorValue = err;
23092 }
23093 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_0__["canReportError"])(sink)) {
23094 sink.error(err);
23095 }
23096 else {
23097 console.warn(err);
23098 }
23099 }
23100 };
23101 Observable.prototype.forEach = function (next, promiseCtor) {
23102 var _this = this;
23103 promiseCtor = getPromiseCtor(promiseCtor);
23104 return new promiseCtor(function (resolve, reject) {
23105 var subscription;
23106 subscription = _this.subscribe(function (value) {
23107 try {
23108 next(value);
23109 }
23110 catch (err) {
23111 reject(err);
23112 if (subscription) {
23113 subscription.unsubscribe();
23114 }
23115 }
23116 }, reject, resolve);
23117 });
23118 };
23119 Observable.prototype._subscribe = function (subscriber) {
23120 var source = this.source;
23121 return source && source.subscribe(subscriber);
23122 };
23123 Observable.prototype[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]] = function () {
23124 return this;
23125 };
23126 Observable.prototype.pipe = function () {
23127 var operations = [];
23128 for (var _i = 0; _i < arguments.length; _i++) {
23129 operations[_i] = arguments[_i];
23130 }
23131 if (operations.length === 0) {
23132 return this;
23133 }
23134 return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipeFromArray"])(operations)(this);
23135 };
23136 Observable.prototype.toPromise = function (promiseCtor) {
23137 var _this = this;
23138 promiseCtor = getPromiseCtor(promiseCtor);
23139 return new promiseCtor(function (resolve, reject) {
23140 var value;
23141 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
23142 });
23143 };
23144 Observable.create = function (subscribe) {
23145 return new Observable(subscribe);
23146 };
23147 return Observable;
23148}());
23149
23150function getPromiseCtor(promiseCtor) {
23151 if (!promiseCtor) {
23152 promiseCtor = _config__WEBPACK_IMPORTED_MODULE_4__["config"].Promise || Promise;
23153 }
23154 if (!promiseCtor) {
23155 throw new Error('no Promise impl found');
23156 }
23157 return promiseCtor;
23158}
23159//# sourceMappingURL=Observable.js.map
23160
23161
23162/***/ }),
23163/* 150 */
23164/***/ (function(module, __webpack_exports__, __webpack_require__) {
23165
23166"use strict";
23167__webpack_require__.r(__webpack_exports__);
23168/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canReportError", function() { return canReportError; });
23169/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(151);
23170/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */
23171
23172function canReportError(observer) {
23173 while (observer) {
23174 var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
23175 if (closed_1 || isStopped) {
23176 return false;
23177 }
23178 else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
23179 observer = destination;
23180 }
23181 else {
23182 observer = null;
23183 }
23184 }
23185 return true;
23186}
23187//# sourceMappingURL=canReportError.js.map
23188
23189
23190/***/ }),
23191/* 151 */
23192/***/ (function(module, __webpack_exports__, __webpack_require__) {
23193
23194"use strict";
23195__webpack_require__.r(__webpack_exports__);
23196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return Subscriber; });
23197/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SafeSubscriber", function() { return SafeSubscriber; });
23198/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
23199/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(153);
23200/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(154);
23201/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(157);
23202/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(161);
23203/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(155);
23204/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(156);
23205/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */
23206
23207
23208
23209
23210
23211
23212
23213var Subscriber = /*@__PURE__*/ (function (_super) {
23214 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subscriber, _super);
23215 function Subscriber(destinationOrNext, error, complete) {
23216 var _this = _super.call(this) || this;
23217 _this.syncErrorValue = null;
23218 _this.syncErrorThrown = false;
23219 _this.syncErrorThrowable = false;
23220 _this.isStopped = false;
23221 switch (arguments.length) {
23222 case 0:
23223 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
23224 break;
23225 case 1:
23226 if (!destinationOrNext) {
23227 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
23228 break;
23229 }
23230 if (typeof destinationOrNext === 'object') {
23231 if (destinationOrNext instanceof Subscriber) {
23232 _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
23233 _this.destination = destinationOrNext;
23234 destinationOrNext.add(_this);
23235 }
23236 else {
23237 _this.syncErrorThrowable = true;
23238 _this.destination = new SafeSubscriber(_this, destinationOrNext);
23239 }
23240 break;
23241 }
23242 default:
23243 _this.syncErrorThrowable = true;
23244 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
23245 break;
23246 }
23247 return _this;
23248 }
23249 Subscriber.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__["rxSubscriber"]] = function () { return this; };
23250 Subscriber.create = function (next, error, complete) {
23251 var subscriber = new Subscriber(next, error, complete);
23252 subscriber.syncErrorThrowable = false;
23253 return subscriber;
23254 };
23255 Subscriber.prototype.next = function (value) {
23256 if (!this.isStopped) {
23257 this._next(value);
23258 }
23259 };
23260 Subscriber.prototype.error = function (err) {
23261 if (!this.isStopped) {
23262 this.isStopped = true;
23263 this._error(err);
23264 }
23265 };
23266 Subscriber.prototype.complete = function () {
23267 if (!this.isStopped) {
23268 this.isStopped = true;
23269 this._complete();
23270 }
23271 };
23272 Subscriber.prototype.unsubscribe = function () {
23273 if (this.closed) {
23274 return;
23275 }
23276 this.isStopped = true;
23277 _super.prototype.unsubscribe.call(this);
23278 };
23279 Subscriber.prototype._next = function (value) {
23280 this.destination.next(value);
23281 };
23282 Subscriber.prototype._error = function (err) {
23283 this.destination.error(err);
23284 this.unsubscribe();
23285 };
23286 Subscriber.prototype._complete = function () {
23287 this.destination.complete();
23288 this.unsubscribe();
23289 };
23290 Subscriber.prototype._unsubscribeAndRecycle = function () {
23291 var _parentOrParents = this._parentOrParents;
23292 this._parentOrParents = null;
23293 this.unsubscribe();
23294 this.closed = false;
23295 this.isStopped = false;
23296 this._parentOrParents = _parentOrParents;
23297 return this;
23298 };
23299 return Subscriber;
23300}(_Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"]));
23301
23302var SafeSubscriber = /*@__PURE__*/ (function (_super) {
23303 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SafeSubscriber, _super);
23304 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
23305 var _this = _super.call(this) || this;
23306 _this._parentSubscriber = _parentSubscriber;
23307 var next;
23308 var context = _this;
23309 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(observerOrNext)) {
23310 next = observerOrNext;
23311 }
23312 else if (observerOrNext) {
23313 next = observerOrNext.next;
23314 error = observerOrNext.error;
23315 complete = observerOrNext.complete;
23316 if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]) {
23317 context = Object.create(observerOrNext);
23318 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(context.unsubscribe)) {
23319 _this.add(context.unsubscribe.bind(context));
23320 }
23321 context.unsubscribe = _this.unsubscribe.bind(_this);
23322 }
23323 }
23324 _this._context = context;
23325 _this._next = next;
23326 _this._error = error;
23327 _this._complete = complete;
23328 return _this;
23329 }
23330 SafeSubscriber.prototype.next = function (value) {
23331 if (!this.isStopped && this._next) {
23332 var _parentSubscriber = this._parentSubscriber;
23333 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
23334 this.__tryOrUnsub(this._next, value);
23335 }
23336 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
23337 this.unsubscribe();
23338 }
23339 }
23340 };
23341 SafeSubscriber.prototype.error = function (err) {
23342 if (!this.isStopped) {
23343 var _parentSubscriber = this._parentSubscriber;
23344 var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling;
23345 if (this._error) {
23346 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
23347 this.__tryOrUnsub(this._error, err);
23348 this.unsubscribe();
23349 }
23350 else {
23351 this.__tryOrSetError(_parentSubscriber, this._error, err);
23352 this.unsubscribe();
23353 }
23354 }
23355 else if (!_parentSubscriber.syncErrorThrowable) {
23356 this.unsubscribe();
23357 if (useDeprecatedSynchronousErrorHandling) {
23358 throw err;
23359 }
23360 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
23361 }
23362 else {
23363 if (useDeprecatedSynchronousErrorHandling) {
23364 _parentSubscriber.syncErrorValue = err;
23365 _parentSubscriber.syncErrorThrown = true;
23366 }
23367 else {
23368 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
23369 }
23370 this.unsubscribe();
23371 }
23372 }
23373 };
23374 SafeSubscriber.prototype.complete = function () {
23375 var _this = this;
23376 if (!this.isStopped) {
23377 var _parentSubscriber = this._parentSubscriber;
23378 if (this._complete) {
23379 var wrappedComplete = function () { return _this._complete.call(_this._context); };
23380 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
23381 this.__tryOrUnsub(wrappedComplete);
23382 this.unsubscribe();
23383 }
23384 else {
23385 this.__tryOrSetError(_parentSubscriber, wrappedComplete);
23386 this.unsubscribe();
23387 }
23388 }
23389 else {
23390 this.unsubscribe();
23391 }
23392 }
23393 };
23394 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
23395 try {
23396 fn.call(this._context, value);
23397 }
23398 catch (err) {
23399 this.unsubscribe();
23400 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
23401 throw err;
23402 }
23403 else {
23404 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
23405 }
23406 }
23407 };
23408 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
23409 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
23410 throw new Error('bad call');
23411 }
23412 try {
23413 fn.call(this._context, value);
23414 }
23415 catch (err) {
23416 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
23417 parent.syncErrorValue = err;
23418 parent.syncErrorThrown = true;
23419 return true;
23420 }
23421 else {
23422 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
23423 return true;
23424 }
23425 }
23426 return false;
23427 };
23428 SafeSubscriber.prototype._unsubscribe = function () {
23429 var _parentSubscriber = this._parentSubscriber;
23430 this._context = null;
23431 this._parentSubscriber = null;
23432 _parentSubscriber.unsubscribe();
23433 };
23434 return SafeSubscriber;
23435}(Subscriber));
23436
23437//# sourceMappingURL=Subscriber.js.map
23438
23439
23440/***/ }),
23441/* 152 */
23442/***/ (function(module, __webpack_exports__, __webpack_require__) {
23443
23444"use strict";
23445__webpack_require__.r(__webpack_exports__);
23446/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
23447/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
23448/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
23449/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
23450/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
23451/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
23452/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
23453/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
23454/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
23455/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
23456/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
23457/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
23458/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
23459/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
23460/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
23461/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
23462/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
23463/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
23464/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
23465/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
23466/*! *****************************************************************************
23467Copyright (c) Microsoft Corporation. All rights reserved.
23468Licensed under the Apache License, Version 2.0 (the "License"); you may not use
23469this file except in compliance with the License. You may obtain a copy of the
23470License at http://www.apache.org/licenses/LICENSE-2.0
23471
23472THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
23473KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
23474WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
23475MERCHANTABLITY OR NON-INFRINGEMENT.
23476
23477See the Apache Version 2.0 License for specific language governing permissions
23478and limitations under the License.
23479***************************************************************************** */
23480/* global Reflect, Promise */
23481
23482var extendStatics = function(d, b) {
23483 extendStatics = Object.setPrototypeOf ||
23484 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23485 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
23486 return extendStatics(d, b);
23487};
23488
23489function __extends(d, b) {
23490 extendStatics(d, b);
23491 function __() { this.constructor = d; }
23492 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23493}
23494
23495var __assign = function() {
23496 __assign = Object.assign || function __assign(t) {
23497 for (var s, i = 1, n = arguments.length; i < n; i++) {
23498 s = arguments[i];
23499 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
23500 }
23501 return t;
23502 }
23503 return __assign.apply(this, arguments);
23504}
23505
23506function __rest(s, e) {
23507 var t = {};
23508 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
23509 t[p] = s[p];
23510 if (s != null && typeof Object.getOwnPropertySymbols === "function")
23511 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
23512 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
23513 t[p[i]] = s[p[i]];
23514 }
23515 return t;
23516}
23517
23518function __decorate(decorators, target, key, desc) {
23519 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23520 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23521 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;
23522 return c > 3 && r && Object.defineProperty(target, key, r), r;
23523}
23524
23525function __param(paramIndex, decorator) {
23526 return function (target, key) { decorator(target, key, paramIndex); }
23527}
23528
23529function __metadata(metadataKey, metadataValue) {
23530 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
23531}
23532
23533function __awaiter(thisArg, _arguments, P, generator) {
23534 return new (P || (P = Promise))(function (resolve, reject) {
23535 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
23536 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23537 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
23538 step((generator = generator.apply(thisArg, _arguments || [])).next());
23539 });
23540}
23541
23542function __generator(thisArg, body) {
23543 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23544 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23545 function verb(n) { return function (v) { return step([n, v]); }; }
23546 function step(op) {
23547 if (f) throw new TypeError("Generator is already executing.");
23548 while (_) try {
23549 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;
23550 if (y = 0, t) op = [op[0] & 2, t.value];
23551 switch (op[0]) {
23552 case 0: case 1: t = op; break;
23553 case 4: _.label++; return { value: op[1], done: false };
23554 case 5: _.label++; y = op[1]; op = [0]; continue;
23555 case 7: op = _.ops.pop(); _.trys.pop(); continue;
23556 default:
23557 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
23558 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
23559 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
23560 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
23561 if (t[2]) _.ops.pop();
23562 _.trys.pop(); continue;
23563 }
23564 op = body.call(thisArg, _);
23565 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
23566 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
23567 }
23568}
23569
23570function __exportStar(m, exports) {
23571 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
23572}
23573
23574function __values(o) {
23575 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
23576 if (m) return m.call(o);
23577 return {
23578 next: function () {
23579 if (o && i >= o.length) o = void 0;
23580 return { value: o && o[i++], done: !o };
23581 }
23582 };
23583}
23584
23585function __read(o, n) {
23586 var m = typeof Symbol === "function" && o[Symbol.iterator];
23587 if (!m) return o;
23588 var i = m.call(o), r, ar = [], e;
23589 try {
23590 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
23591 }
23592 catch (error) { e = { error: error }; }
23593 finally {
23594 try {
23595 if (r && !r.done && (m = i["return"])) m.call(i);
23596 }
23597 finally { if (e) throw e.error; }
23598 }
23599 return ar;
23600}
23601
23602function __spread() {
23603 for (var ar = [], i = 0; i < arguments.length; i++)
23604 ar = ar.concat(__read(arguments[i]));
23605 return ar;
23606}
23607
23608function __spreadArrays() {
23609 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
23610 for (var r = Array(s), k = 0, i = 0; i < il; i++)
23611 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
23612 r[k] = a[j];
23613 return r;
23614};
23615
23616function __await(v) {
23617 return this instanceof __await ? (this.v = v, this) : new __await(v);
23618}
23619
23620function __asyncGenerator(thisArg, _arguments, generator) {
23621 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
23622 var g = generator.apply(thisArg, _arguments || []), i, q = [];
23623 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
23624 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); }); }; }
23625 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
23626 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
23627 function fulfill(value) { resume("next", value); }
23628 function reject(value) { resume("throw", value); }
23629 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
23630}
23631
23632function __asyncDelegator(o) {
23633 var i, p;
23634 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
23635 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; }
23636}
23637
23638function __asyncValues(o) {
23639 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
23640 var m = o[Symbol.asyncIterator], i;
23641 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);
23642 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); }); }; }
23643 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
23644}
23645
23646function __makeTemplateObject(cooked, raw) {
23647 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
23648 return cooked;
23649};
23650
23651function __importStar(mod) {
23652 if (mod && mod.__esModule) return mod;
23653 var result = {};
23654 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
23655 result.default = mod;
23656 return result;
23657}
23658
23659function __importDefault(mod) {
23660 return (mod && mod.__esModule) ? mod : { default: mod };
23661}
23662
23663
23664/***/ }),
23665/* 153 */
23666/***/ (function(module, __webpack_exports__, __webpack_require__) {
23667
23668"use strict";
23669__webpack_require__.r(__webpack_exports__);
23670/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunction", function() { return isFunction; });
23671/** PURE_IMPORTS_START PURE_IMPORTS_END */
23672function isFunction(x) {
23673 return typeof x === 'function';
23674}
23675//# sourceMappingURL=isFunction.js.map
23676
23677
23678/***/ }),
23679/* 154 */
23680/***/ (function(module, __webpack_exports__, __webpack_require__) {
23681
23682"use strict";
23683__webpack_require__.r(__webpack_exports__);
23684/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
23685/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(155);
23686/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(156);
23687/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */
23688
23689
23690var empty = {
23691 closed: true,
23692 next: function (value) { },
23693 error: function (err) {
23694 if (_config__WEBPACK_IMPORTED_MODULE_0__["config"].useDeprecatedSynchronousErrorHandling) {
23695 throw err;
23696 }
23697 else {
23698 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__["hostReportError"])(err);
23699 }
23700 },
23701 complete: function () { }
23702};
23703//# sourceMappingURL=Observer.js.map
23704
23705
23706/***/ }),
23707/* 155 */
23708/***/ (function(module, __webpack_exports__, __webpack_require__) {
23709
23710"use strict";
23711__webpack_require__.r(__webpack_exports__);
23712/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
23713/** PURE_IMPORTS_START PURE_IMPORTS_END */
23714var _enable_super_gross_mode_that_will_cause_bad_things = false;
23715var config = {
23716 Promise: undefined,
23717 set useDeprecatedSynchronousErrorHandling(value) {
23718 if (value) {
23719 var error = /*@__PURE__*/ new Error();
23720 /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
23721 }
23722 else if (_enable_super_gross_mode_that_will_cause_bad_things) {
23723 /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');
23724 }
23725 _enable_super_gross_mode_that_will_cause_bad_things = value;
23726 },
23727 get useDeprecatedSynchronousErrorHandling() {
23728 return _enable_super_gross_mode_that_will_cause_bad_things;
23729 },
23730};
23731//# sourceMappingURL=config.js.map
23732
23733
23734/***/ }),
23735/* 156 */
23736/***/ (function(module, __webpack_exports__, __webpack_require__) {
23737
23738"use strict";
23739__webpack_require__.r(__webpack_exports__);
23740/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hostReportError", function() { return hostReportError; });
23741/** PURE_IMPORTS_START PURE_IMPORTS_END */
23742function hostReportError(err) {
23743 setTimeout(function () { throw err; }, 0);
23744}
23745//# sourceMappingURL=hostReportError.js.map
23746
23747
23748/***/ }),
23749/* 157 */
23750/***/ (function(module, __webpack_exports__, __webpack_require__) {
23751
23752"use strict";
23753__webpack_require__.r(__webpack_exports__);
23754/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return Subscription; });
23755/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(158);
23756/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(159);
23757/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(153);
23758/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(160);
23759/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
23760
23761
23762
23763
23764var Subscription = /*@__PURE__*/ (function () {
23765 function Subscription(unsubscribe) {
23766 this.closed = false;
23767 this._parentOrParents = null;
23768 this._subscriptions = null;
23769 if (unsubscribe) {
23770 this._unsubscribe = unsubscribe;
23771 }
23772 }
23773 Subscription.prototype.unsubscribe = function () {
23774 var errors;
23775 if (this.closed) {
23776 return;
23777 }
23778 var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
23779 this.closed = true;
23780 this._parentOrParents = null;
23781 this._subscriptions = null;
23782 if (_parentOrParents instanceof Subscription) {
23783 _parentOrParents.remove(this);
23784 }
23785 else if (_parentOrParents !== null) {
23786 for (var index = 0; index < _parentOrParents.length; ++index) {
23787 var parent_1 = _parentOrParents[index];
23788 parent_1.remove(this);
23789 }
23790 }
23791 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(_unsubscribe)) {
23792 try {
23793 _unsubscribe.call(this);
23794 }
23795 catch (e) {
23796 errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? flattenUnsubscriptionErrors(e.errors) : [e];
23797 }
23798 }
23799 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(_subscriptions)) {
23800 var index = -1;
23801 var len = _subscriptions.length;
23802 while (++index < len) {
23803 var sub = _subscriptions[index];
23804 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_1__["isObject"])(sub)) {
23805 try {
23806 sub.unsubscribe();
23807 }
23808 catch (e) {
23809 errors = errors || [];
23810 if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) {
23811 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
23812 }
23813 else {
23814 errors.push(e);
23815 }
23816 }
23817 }
23818 }
23819 }
23820 if (errors) {
23821 throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"](errors);
23822 }
23823 };
23824 Subscription.prototype.add = function (teardown) {
23825 var subscription = teardown;
23826 if (!teardown) {
23827 return Subscription.EMPTY;
23828 }
23829 switch (typeof teardown) {
23830 case 'function':
23831 subscription = new Subscription(teardown);
23832 case 'object':
23833 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
23834 return subscription;
23835 }
23836 else if (this.closed) {
23837 subscription.unsubscribe();
23838 return subscription;
23839 }
23840 else if (!(subscription instanceof Subscription)) {
23841 var tmp = subscription;
23842 subscription = new Subscription();
23843 subscription._subscriptions = [tmp];
23844 }
23845 break;
23846 default: {
23847 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
23848 }
23849 }
23850 var _parentOrParents = subscription._parentOrParents;
23851 if (_parentOrParents === null) {
23852 subscription._parentOrParents = this;
23853 }
23854 else if (_parentOrParents instanceof Subscription) {
23855 if (_parentOrParents === this) {
23856 return subscription;
23857 }
23858 subscription._parentOrParents = [_parentOrParents, this];
23859 }
23860 else if (_parentOrParents.indexOf(this) === -1) {
23861 _parentOrParents.push(this);
23862 }
23863 else {
23864 return subscription;
23865 }
23866 var subscriptions = this._subscriptions;
23867 if (subscriptions === null) {
23868 this._subscriptions = [subscription];
23869 }
23870 else {
23871 subscriptions.push(subscription);
23872 }
23873 return subscription;
23874 };
23875 Subscription.prototype.remove = function (subscription) {
23876 var subscriptions = this._subscriptions;
23877 if (subscriptions) {
23878 var subscriptionIndex = subscriptions.indexOf(subscription);
23879 if (subscriptionIndex !== -1) {
23880 subscriptions.splice(subscriptionIndex, 1);
23881 }
23882 }
23883 };
23884 Subscription.EMPTY = (function (empty) {
23885 empty.closed = true;
23886 return empty;
23887 }(new Subscription()));
23888 return Subscription;
23889}());
23890
23891function flattenUnsubscriptionErrors(errors) {
23892 return errors.reduce(function (errs, err) { return errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) ? err.errors : err); }, []);
23893}
23894//# sourceMappingURL=Subscription.js.map
23895
23896
23897/***/ }),
23898/* 158 */
23899/***/ (function(module, __webpack_exports__, __webpack_require__) {
23900
23901"use strict";
23902__webpack_require__.r(__webpack_exports__);
23903/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; });
23904/** PURE_IMPORTS_START PURE_IMPORTS_END */
23905var isArray = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
23906//# sourceMappingURL=isArray.js.map
23907
23908
23909/***/ }),
23910/* 159 */
23911/***/ (function(module, __webpack_exports__, __webpack_require__) {
23912
23913"use strict";
23914__webpack_require__.r(__webpack_exports__);
23915/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
23916/** PURE_IMPORTS_START PURE_IMPORTS_END */
23917function isObject(x) {
23918 return x !== null && typeof x === 'object';
23919}
23920//# sourceMappingURL=isObject.js.map
23921
23922
23923/***/ }),
23924/* 160 */
23925/***/ (function(module, __webpack_exports__, __webpack_require__) {
23926
23927"use strict";
23928__webpack_require__.r(__webpack_exports__);
23929/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return UnsubscriptionError; });
23930/** PURE_IMPORTS_START PURE_IMPORTS_END */
23931function UnsubscriptionErrorImpl(errors) {
23932 Error.call(this);
23933 this.message = errors ?
23934 errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : '';
23935 this.name = 'UnsubscriptionError';
23936 this.errors = errors;
23937 return this;
23938}
23939UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
23940var UnsubscriptionError = UnsubscriptionErrorImpl;
23941//# sourceMappingURL=UnsubscriptionError.js.map
23942
23943
23944/***/ }),
23945/* 161 */
23946/***/ (function(module, __webpack_exports__, __webpack_require__) {
23947
23948"use strict";
23949__webpack_require__.r(__webpack_exports__);
23950/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rxSubscriber", function() { return rxSubscriber; });
23951/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$rxSubscriber", function() { return $$rxSubscriber; });
23952/** PURE_IMPORTS_START PURE_IMPORTS_END */
23953var rxSubscriber = typeof Symbol === 'function'
23954 ? /*@__PURE__*/ Symbol('rxSubscriber')
23955 : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();
23956var $$rxSubscriber = rxSubscriber;
23957//# sourceMappingURL=rxSubscriber.js.map
23958
23959
23960/***/ }),
23961/* 162 */
23962/***/ (function(module, __webpack_exports__, __webpack_require__) {
23963
23964"use strict";
23965__webpack_require__.r(__webpack_exports__);
23966/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toSubscriber", function() { return toSubscriber; });
23967/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(151);
23968/* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(161);
23969/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(154);
23970/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */
23971
23972
23973
23974function toSubscriber(nextOrObserver, error, complete) {
23975 if (nextOrObserver) {
23976 if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
23977 return nextOrObserver;
23978 }
23979 if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]) {
23980 return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]();
23981 }
23982 }
23983 if (!nextOrObserver && !error && !complete) {
23984 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](_Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]);
23985 }
23986 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](nextOrObserver, error, complete);
23987}
23988//# sourceMappingURL=toSubscriber.js.map
23989
23990
23991/***/ }),
23992/* 163 */
23993/***/ (function(module, __webpack_exports__, __webpack_require__) {
23994
23995"use strict";
23996__webpack_require__.r(__webpack_exports__);
23997/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return observable; });
23998/** PURE_IMPORTS_START PURE_IMPORTS_END */
23999var observable = typeof Symbol === 'function' && Symbol.observable || '@@observable';
24000//# sourceMappingURL=observable.js.map
24001
24002
24003/***/ }),
24004/* 164 */
24005/***/ (function(module, __webpack_exports__, __webpack_require__) {
24006
24007"use strict";
24008__webpack_require__.r(__webpack_exports__);
24009/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return pipe; });
24010/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipeFromArray", function() { return pipeFromArray; });
24011/* harmony import */ var _noop__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(165);
24012/** PURE_IMPORTS_START _noop PURE_IMPORTS_END */
24013
24014function pipe() {
24015 var fns = [];
24016 for (var _i = 0; _i < arguments.length; _i++) {
24017 fns[_i] = arguments[_i];
24018 }
24019 return pipeFromArray(fns);
24020}
24021function pipeFromArray(fns) {
24022 if (!fns) {
24023 return _noop__WEBPACK_IMPORTED_MODULE_0__["noop"];
24024 }
24025 if (fns.length === 1) {
24026 return fns[0];
24027 }
24028 return function piped(input) {
24029 return fns.reduce(function (prev, fn) { return fn(prev); }, input);
24030 };
24031}
24032//# sourceMappingURL=pipe.js.map
24033
24034
24035/***/ }),
24036/* 165 */
24037/***/ (function(module, __webpack_exports__, __webpack_require__) {
24038
24039"use strict";
24040__webpack_require__.r(__webpack_exports__);
24041/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; });
24042/** PURE_IMPORTS_START PURE_IMPORTS_END */
24043function noop() { }
24044//# sourceMappingURL=noop.js.map
24045
24046
24047/***/ }),
24048/* 166 */
24049/***/ (function(module, __webpack_exports__, __webpack_require__) {
24050
24051"use strict";
24052__webpack_require__.r(__webpack_exports__);
24053/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return ConnectableObservable; });
24054/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectableObservableDescriptor", function() { return connectableObservableDescriptor; });
24055/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24056/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
24057/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(149);
24058/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(151);
24059/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(157);
24060/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(170);
24061/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */
24062
24063
24064
24065
24066
24067
24068var ConnectableObservable = /*@__PURE__*/ (function (_super) {
24069 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableObservable, _super);
24070 function ConnectableObservable(source, subjectFactory) {
24071 var _this = _super.call(this) || this;
24072 _this.source = source;
24073 _this.subjectFactory = subjectFactory;
24074 _this._refCount = 0;
24075 _this._isComplete = false;
24076 return _this;
24077 }
24078 ConnectableObservable.prototype._subscribe = function (subscriber) {
24079 return this.getSubject().subscribe(subscriber);
24080 };
24081 ConnectableObservable.prototype.getSubject = function () {
24082 var subject = this._subject;
24083 if (!subject || subject.isStopped) {
24084 this._subject = this.subjectFactory();
24085 }
24086 return this._subject;
24087 };
24088 ConnectableObservable.prototype.connect = function () {
24089 var connection = this._connection;
24090 if (!connection) {
24091 this._isComplete = false;
24092 connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"]();
24093 connection.add(this.source
24094 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
24095 if (connection.closed) {
24096 this._connection = null;
24097 connection = _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY;
24098 }
24099 }
24100 return connection;
24101 };
24102 ConnectableObservable.prototype.refCount = function () {
24103 return Object(_operators_refCount__WEBPACK_IMPORTED_MODULE_5__["refCount"])()(this);
24104 };
24105 return ConnectableObservable;
24106}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
24107
24108var connectableProto = ConnectableObservable.prototype;
24109var connectableObservableDescriptor = {
24110 operator: { value: null },
24111 _refCount: { value: 0, writable: true },
24112 _subject: { value: null, writable: true },
24113 _connection: { value: null, writable: true },
24114 _subscribe: { value: connectableProto._subscribe },
24115 _isComplete: { value: connectableProto._isComplete, writable: true },
24116 getSubject: { value: connectableProto.getSubject },
24117 connect: { value: connectableProto.connect },
24118 refCount: { value: connectableProto.refCount }
24119};
24120var ConnectableSubscriber = /*@__PURE__*/ (function (_super) {
24121 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableSubscriber, _super);
24122 function ConnectableSubscriber(destination, connectable) {
24123 var _this = _super.call(this, destination) || this;
24124 _this.connectable = connectable;
24125 return _this;
24126 }
24127 ConnectableSubscriber.prototype._error = function (err) {
24128 this._unsubscribe();
24129 _super.prototype._error.call(this, err);
24130 };
24131 ConnectableSubscriber.prototype._complete = function () {
24132 this.connectable._isComplete = true;
24133 this._unsubscribe();
24134 _super.prototype._complete.call(this);
24135 };
24136 ConnectableSubscriber.prototype._unsubscribe = function () {
24137 var connectable = this.connectable;
24138 if (connectable) {
24139 this.connectable = null;
24140 var connection = connectable._connection;
24141 connectable._refCount = 0;
24142 connectable._subject = null;
24143 connectable._connection = null;
24144 if (connection) {
24145 connection.unsubscribe();
24146 }
24147 }
24148 };
24149 return ConnectableSubscriber;
24150}(_Subject__WEBPACK_IMPORTED_MODULE_1__["SubjectSubscriber"]));
24151var RefCountOperator = /*@__PURE__*/ (function () {
24152 function RefCountOperator(connectable) {
24153 this.connectable = connectable;
24154 }
24155 RefCountOperator.prototype.call = function (subscriber, source) {
24156 var connectable = this.connectable;
24157 connectable._refCount++;
24158 var refCounter = new RefCountSubscriber(subscriber, connectable);
24159 var subscription = source.subscribe(refCounter);
24160 if (!refCounter.closed) {
24161 refCounter.connection = connectable.connect();
24162 }
24163 return subscription;
24164 };
24165 return RefCountOperator;
24166}());
24167var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
24168 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
24169 function RefCountSubscriber(destination, connectable) {
24170 var _this = _super.call(this, destination) || this;
24171 _this.connectable = connectable;
24172 return _this;
24173 }
24174 RefCountSubscriber.prototype._unsubscribe = function () {
24175 var connectable = this.connectable;
24176 if (!connectable) {
24177 this.connection = null;
24178 return;
24179 }
24180 this.connectable = null;
24181 var refCount = connectable._refCount;
24182 if (refCount <= 0) {
24183 this.connection = null;
24184 return;
24185 }
24186 connectable._refCount = refCount - 1;
24187 if (refCount > 1) {
24188 this.connection = null;
24189 return;
24190 }
24191 var connection = this.connection;
24192 var sharedConnection = connectable._connection;
24193 this.connection = null;
24194 if (sharedConnection && (!connection || sharedConnection === connection)) {
24195 sharedConnection.unsubscribe();
24196 }
24197 };
24198 return RefCountSubscriber;
24199}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
24200//# sourceMappingURL=ConnectableObservable.js.map
24201
24202
24203/***/ }),
24204/* 167 */
24205/***/ (function(module, __webpack_exports__, __webpack_require__) {
24206
24207"use strict";
24208__webpack_require__.r(__webpack_exports__);
24209/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscriber", function() { return SubjectSubscriber; });
24210/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return Subject; });
24211/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnonymousSubject", function() { return AnonymousSubject; });
24212/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24213/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(149);
24214/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(151);
24215/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(157);
24216/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(168);
24217/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(169);
24218/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(161);
24219/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */
24220
24221
24222
24223
24224
24225
24226
24227var SubjectSubscriber = /*@__PURE__*/ (function (_super) {
24228 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscriber, _super);
24229 function SubjectSubscriber(destination) {
24230 var _this = _super.call(this, destination) || this;
24231 _this.destination = destination;
24232 return _this;
24233 }
24234 return SubjectSubscriber;
24235}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
24236
24237var Subject = /*@__PURE__*/ (function (_super) {
24238 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subject, _super);
24239 function Subject() {
24240 var _this = _super.call(this) || this;
24241 _this.observers = [];
24242 _this.closed = false;
24243 _this.isStopped = false;
24244 _this.hasError = false;
24245 _this.thrownError = null;
24246 return _this;
24247 }
24248 Subject.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__["rxSubscriber"]] = function () {
24249 return new SubjectSubscriber(this);
24250 };
24251 Subject.prototype.lift = function (operator) {
24252 var subject = new AnonymousSubject(this, this);
24253 subject.operator = operator;
24254 return subject;
24255 };
24256 Subject.prototype.next = function (value) {
24257 if (this.closed) {
24258 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
24259 }
24260 if (!this.isStopped) {
24261 var observers = this.observers;
24262 var len = observers.length;
24263 var copy = observers.slice();
24264 for (var i = 0; i < len; i++) {
24265 copy[i].next(value);
24266 }
24267 }
24268 };
24269 Subject.prototype.error = function (err) {
24270 if (this.closed) {
24271 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
24272 }
24273 this.hasError = true;
24274 this.thrownError = err;
24275 this.isStopped = true;
24276 var observers = this.observers;
24277 var len = observers.length;
24278 var copy = observers.slice();
24279 for (var i = 0; i < len; i++) {
24280 copy[i].error(err);
24281 }
24282 this.observers.length = 0;
24283 };
24284 Subject.prototype.complete = function () {
24285 if (this.closed) {
24286 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
24287 }
24288 this.isStopped = true;
24289 var observers = this.observers;
24290 var len = observers.length;
24291 var copy = observers.slice();
24292 for (var i = 0; i < len; i++) {
24293 copy[i].complete();
24294 }
24295 this.observers.length = 0;
24296 };
24297 Subject.prototype.unsubscribe = function () {
24298 this.isStopped = true;
24299 this.closed = true;
24300 this.observers = null;
24301 };
24302 Subject.prototype._trySubscribe = function (subscriber) {
24303 if (this.closed) {
24304 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
24305 }
24306 else {
24307 return _super.prototype._trySubscribe.call(this, subscriber);
24308 }
24309 };
24310 Subject.prototype._subscribe = function (subscriber) {
24311 if (this.closed) {
24312 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
24313 }
24314 else if (this.hasError) {
24315 subscriber.error(this.thrownError);
24316 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
24317 }
24318 else if (this.isStopped) {
24319 subscriber.complete();
24320 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
24321 }
24322 else {
24323 this.observers.push(subscriber);
24324 return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__["SubjectSubscription"](this, subscriber);
24325 }
24326 };
24327 Subject.prototype.asObservable = function () {
24328 var observable = new _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]();
24329 observable.source = this;
24330 return observable;
24331 };
24332 Subject.create = function (destination, source) {
24333 return new AnonymousSubject(destination, source);
24334 };
24335 return Subject;
24336}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
24337
24338var AnonymousSubject = /*@__PURE__*/ (function (_super) {
24339 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnonymousSubject, _super);
24340 function AnonymousSubject(destination, source) {
24341 var _this = _super.call(this) || this;
24342 _this.destination = destination;
24343 _this.source = source;
24344 return _this;
24345 }
24346 AnonymousSubject.prototype.next = function (value) {
24347 var destination = this.destination;
24348 if (destination && destination.next) {
24349 destination.next(value);
24350 }
24351 };
24352 AnonymousSubject.prototype.error = function (err) {
24353 var destination = this.destination;
24354 if (destination && destination.error) {
24355 this.destination.error(err);
24356 }
24357 };
24358 AnonymousSubject.prototype.complete = function () {
24359 var destination = this.destination;
24360 if (destination && destination.complete) {
24361 this.destination.complete();
24362 }
24363 };
24364 AnonymousSubject.prototype._subscribe = function (subscriber) {
24365 var source = this.source;
24366 if (source) {
24367 return this.source.subscribe(subscriber);
24368 }
24369 else {
24370 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
24371 }
24372 };
24373 return AnonymousSubject;
24374}(Subject));
24375
24376//# sourceMappingURL=Subject.js.map
24377
24378
24379/***/ }),
24380/* 168 */
24381/***/ (function(module, __webpack_exports__, __webpack_require__) {
24382
24383"use strict";
24384__webpack_require__.r(__webpack_exports__);
24385/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return ObjectUnsubscribedError; });
24386/** PURE_IMPORTS_START PURE_IMPORTS_END */
24387function ObjectUnsubscribedErrorImpl() {
24388 Error.call(this);
24389 this.message = 'object unsubscribed';
24390 this.name = 'ObjectUnsubscribedError';
24391 return this;
24392}
24393ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
24394var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
24395//# sourceMappingURL=ObjectUnsubscribedError.js.map
24396
24397
24398/***/ }),
24399/* 169 */
24400/***/ (function(module, __webpack_exports__, __webpack_require__) {
24401
24402"use strict";
24403__webpack_require__.r(__webpack_exports__);
24404/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscription", function() { return SubjectSubscription; });
24405/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24406/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
24407/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
24408
24409
24410var SubjectSubscription = /*@__PURE__*/ (function (_super) {
24411 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscription, _super);
24412 function SubjectSubscription(subject, subscriber) {
24413 var _this = _super.call(this) || this;
24414 _this.subject = subject;
24415 _this.subscriber = subscriber;
24416 _this.closed = false;
24417 return _this;
24418 }
24419 SubjectSubscription.prototype.unsubscribe = function () {
24420 if (this.closed) {
24421 return;
24422 }
24423 this.closed = true;
24424 var subject = this.subject;
24425 var observers = subject.observers;
24426 this.subject = null;
24427 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
24428 return;
24429 }
24430 var subscriberIndex = observers.indexOf(this.subscriber);
24431 if (subscriberIndex !== -1) {
24432 observers.splice(subscriberIndex, 1);
24433 }
24434 };
24435 return SubjectSubscription;
24436}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
24437
24438//# sourceMappingURL=SubjectSubscription.js.map
24439
24440
24441/***/ }),
24442/* 170 */
24443/***/ (function(module, __webpack_exports__, __webpack_require__) {
24444
24445"use strict";
24446__webpack_require__.r(__webpack_exports__);
24447/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return refCount; });
24448/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24449/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
24450/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
24451
24452
24453function refCount() {
24454 return function refCountOperatorFunction(source) {
24455 return source.lift(new RefCountOperator(source));
24456 };
24457}
24458var RefCountOperator = /*@__PURE__*/ (function () {
24459 function RefCountOperator(connectable) {
24460 this.connectable = connectable;
24461 }
24462 RefCountOperator.prototype.call = function (subscriber, source) {
24463 var connectable = this.connectable;
24464 connectable._refCount++;
24465 var refCounter = new RefCountSubscriber(subscriber, connectable);
24466 var subscription = source.subscribe(refCounter);
24467 if (!refCounter.closed) {
24468 refCounter.connection = connectable.connect();
24469 }
24470 return subscription;
24471 };
24472 return RefCountOperator;
24473}());
24474var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
24475 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
24476 function RefCountSubscriber(destination, connectable) {
24477 var _this = _super.call(this, destination) || this;
24478 _this.connectable = connectable;
24479 return _this;
24480 }
24481 RefCountSubscriber.prototype._unsubscribe = function () {
24482 var connectable = this.connectable;
24483 if (!connectable) {
24484 this.connection = null;
24485 return;
24486 }
24487 this.connectable = null;
24488 var refCount = connectable._refCount;
24489 if (refCount <= 0) {
24490 this.connection = null;
24491 return;
24492 }
24493 connectable._refCount = refCount - 1;
24494 if (refCount > 1) {
24495 this.connection = null;
24496 return;
24497 }
24498 var connection = this.connection;
24499 var sharedConnection = connectable._connection;
24500 this.connection = null;
24501 if (sharedConnection && (!connection || sharedConnection === connection)) {
24502 sharedConnection.unsubscribe();
24503 }
24504 };
24505 return RefCountSubscriber;
24506}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
24507//# sourceMappingURL=refCount.js.map
24508
24509
24510/***/ }),
24511/* 171 */
24512/***/ (function(module, __webpack_exports__, __webpack_require__) {
24513
24514"use strict";
24515__webpack_require__.r(__webpack_exports__);
24516/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return groupBy; });
24517/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return GroupedObservable; });
24518/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24519/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
24520/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(157);
24521/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(149);
24522/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(167);
24523/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription,_Observable,_Subject PURE_IMPORTS_END */
24524
24525
24526
24527
24528
24529function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
24530 return function (source) {
24531 return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
24532 };
24533}
24534var GroupByOperator = /*@__PURE__*/ (function () {
24535 function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
24536 this.keySelector = keySelector;
24537 this.elementSelector = elementSelector;
24538 this.durationSelector = durationSelector;
24539 this.subjectSelector = subjectSelector;
24540 }
24541 GroupByOperator.prototype.call = function (subscriber, source) {
24542 return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
24543 };
24544 return GroupByOperator;
24545}());
24546var GroupBySubscriber = /*@__PURE__*/ (function (_super) {
24547 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupBySubscriber, _super);
24548 function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
24549 var _this = _super.call(this, destination) || this;
24550 _this.keySelector = keySelector;
24551 _this.elementSelector = elementSelector;
24552 _this.durationSelector = durationSelector;
24553 _this.subjectSelector = subjectSelector;
24554 _this.groups = null;
24555 _this.attemptedToUnsubscribe = false;
24556 _this.count = 0;
24557 return _this;
24558 }
24559 GroupBySubscriber.prototype._next = function (value) {
24560 var key;
24561 try {
24562 key = this.keySelector(value);
24563 }
24564 catch (err) {
24565 this.error(err);
24566 return;
24567 }
24568 this._group(value, key);
24569 };
24570 GroupBySubscriber.prototype._group = function (value, key) {
24571 var groups = this.groups;
24572 if (!groups) {
24573 groups = this.groups = new Map();
24574 }
24575 var group = groups.get(key);
24576 var element;
24577 if (this.elementSelector) {
24578 try {
24579 element = this.elementSelector(value);
24580 }
24581 catch (err) {
24582 this.error(err);
24583 }
24584 }
24585 else {
24586 element = value;
24587 }
24588 if (!group) {
24589 group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]());
24590 groups.set(key, group);
24591 var groupedObservable = new GroupedObservable(key, group, this);
24592 this.destination.next(groupedObservable);
24593 if (this.durationSelector) {
24594 var duration = void 0;
24595 try {
24596 duration = this.durationSelector(new GroupedObservable(key, group));
24597 }
24598 catch (err) {
24599 this.error(err);
24600 return;
24601 }
24602 this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
24603 }
24604 }
24605 if (!group.closed) {
24606 group.next(element);
24607 }
24608 };
24609 GroupBySubscriber.prototype._error = function (err) {
24610 var groups = this.groups;
24611 if (groups) {
24612 groups.forEach(function (group, key) {
24613 group.error(err);
24614 });
24615 groups.clear();
24616 }
24617 this.destination.error(err);
24618 };
24619 GroupBySubscriber.prototype._complete = function () {
24620 var groups = this.groups;
24621 if (groups) {
24622 groups.forEach(function (group, key) {
24623 group.complete();
24624 });
24625 groups.clear();
24626 }
24627 this.destination.complete();
24628 };
24629 GroupBySubscriber.prototype.removeGroup = function (key) {
24630 this.groups.delete(key);
24631 };
24632 GroupBySubscriber.prototype.unsubscribe = function () {
24633 if (!this.closed) {
24634 this.attemptedToUnsubscribe = true;
24635 if (this.count === 0) {
24636 _super.prototype.unsubscribe.call(this);
24637 }
24638 }
24639 };
24640 return GroupBySubscriber;
24641}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
24642var GroupDurationSubscriber = /*@__PURE__*/ (function (_super) {
24643 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupDurationSubscriber, _super);
24644 function GroupDurationSubscriber(key, group, parent) {
24645 var _this = _super.call(this, group) || this;
24646 _this.key = key;
24647 _this.group = group;
24648 _this.parent = parent;
24649 return _this;
24650 }
24651 GroupDurationSubscriber.prototype._next = function (value) {
24652 this.complete();
24653 };
24654 GroupDurationSubscriber.prototype._unsubscribe = function () {
24655 var _a = this, parent = _a.parent, key = _a.key;
24656 this.key = this.parent = null;
24657 if (parent) {
24658 parent.removeGroup(key);
24659 }
24660 };
24661 return GroupDurationSubscriber;
24662}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
24663var GroupedObservable = /*@__PURE__*/ (function (_super) {
24664 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupedObservable, _super);
24665 function GroupedObservable(key, groupSubject, refCountSubscription) {
24666 var _this = _super.call(this) || this;
24667 _this.key = key;
24668 _this.groupSubject = groupSubject;
24669 _this.refCountSubscription = refCountSubscription;
24670 return _this;
24671 }
24672 GroupedObservable.prototype._subscribe = function (subscriber) {
24673 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
24674 var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
24675 if (refCountSubscription && !refCountSubscription.closed) {
24676 subscription.add(new InnerRefCountSubscription(refCountSubscription));
24677 }
24678 subscription.add(groupSubject.subscribe(subscriber));
24679 return subscription;
24680 };
24681 return GroupedObservable;
24682}(_Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"]));
24683
24684var InnerRefCountSubscription = /*@__PURE__*/ (function (_super) {
24685 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerRefCountSubscription, _super);
24686 function InnerRefCountSubscription(parent) {
24687 var _this = _super.call(this) || this;
24688 _this.parent = parent;
24689 parent.count++;
24690 return _this;
24691 }
24692 InnerRefCountSubscription.prototype.unsubscribe = function () {
24693 var parent = this.parent;
24694 if (!parent.closed && !this.closed) {
24695 _super.prototype.unsubscribe.call(this);
24696 parent.count -= 1;
24697 if (parent.count === 0 && parent.attemptedToUnsubscribe) {
24698 parent.unsubscribe();
24699 }
24700 }
24701 };
24702 return InnerRefCountSubscription;
24703}(_Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]));
24704//# sourceMappingURL=groupBy.js.map
24705
24706
24707/***/ }),
24708/* 172 */
24709/***/ (function(module, __webpack_exports__, __webpack_require__) {
24710
24711"use strict";
24712__webpack_require__.r(__webpack_exports__);
24713/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return BehaviorSubject; });
24714/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24715/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
24716/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(168);
24717/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */
24718
24719
24720
24721var BehaviorSubject = /*@__PURE__*/ (function (_super) {
24722 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BehaviorSubject, _super);
24723 function BehaviorSubject(_value) {
24724 var _this = _super.call(this) || this;
24725 _this._value = _value;
24726 return _this;
24727 }
24728 Object.defineProperty(BehaviorSubject.prototype, "value", {
24729 get: function () {
24730 return this.getValue();
24731 },
24732 enumerable: true,
24733 configurable: true
24734 });
24735 BehaviorSubject.prototype._subscribe = function (subscriber) {
24736 var subscription = _super.prototype._subscribe.call(this, subscriber);
24737 if (subscription && !subscription.closed) {
24738 subscriber.next(this._value);
24739 }
24740 return subscription;
24741 };
24742 BehaviorSubject.prototype.getValue = function () {
24743 if (this.hasError) {
24744 throw this.thrownError;
24745 }
24746 else if (this.closed) {
24747 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__["ObjectUnsubscribedError"]();
24748 }
24749 else {
24750 return this._value;
24751 }
24752 };
24753 BehaviorSubject.prototype.next = function (value) {
24754 _super.prototype.next.call(this, this._value = value);
24755 };
24756 return BehaviorSubject;
24757}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
24758
24759//# sourceMappingURL=BehaviorSubject.js.map
24760
24761
24762/***/ }),
24763/* 173 */
24764/***/ (function(module, __webpack_exports__, __webpack_require__) {
24765
24766"use strict";
24767__webpack_require__.r(__webpack_exports__);
24768/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return ReplaySubject; });
24769/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24770/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
24771/* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(174);
24772/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(157);
24773/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(181);
24774/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(168);
24775/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(169);
24776/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */
24777
24778
24779
24780
24781
24782
24783
24784var ReplaySubject = /*@__PURE__*/ (function (_super) {
24785 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ReplaySubject, _super);
24786 function ReplaySubject(bufferSize, windowTime, scheduler) {
24787 if (bufferSize === void 0) {
24788 bufferSize = Number.POSITIVE_INFINITY;
24789 }
24790 if (windowTime === void 0) {
24791 windowTime = Number.POSITIVE_INFINITY;
24792 }
24793 var _this = _super.call(this) || this;
24794 _this.scheduler = scheduler;
24795 _this._events = [];
24796 _this._infiniteTimeWindow = false;
24797 _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
24798 _this._windowTime = windowTime < 1 ? 1 : windowTime;
24799 if (windowTime === Number.POSITIVE_INFINITY) {
24800 _this._infiniteTimeWindow = true;
24801 _this.next = _this.nextInfiniteTimeWindow;
24802 }
24803 else {
24804 _this.next = _this.nextTimeWindow;
24805 }
24806 return _this;
24807 }
24808 ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
24809 var _events = this._events;
24810 _events.push(value);
24811 if (_events.length > this._bufferSize) {
24812 _events.shift();
24813 }
24814 _super.prototype.next.call(this, value);
24815 };
24816 ReplaySubject.prototype.nextTimeWindow = function (value) {
24817 this._events.push(new ReplayEvent(this._getNow(), value));
24818 this._trimBufferThenGetEvents();
24819 _super.prototype.next.call(this, value);
24820 };
24821 ReplaySubject.prototype._subscribe = function (subscriber) {
24822 var _infiniteTimeWindow = this._infiniteTimeWindow;
24823 var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
24824 var scheduler = this.scheduler;
24825 var len = _events.length;
24826 var subscription;
24827 if (this.closed) {
24828 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__["ObjectUnsubscribedError"]();
24829 }
24830 else if (this.isStopped || this.hasError) {
24831 subscription = _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
24832 }
24833 else {
24834 this.observers.push(subscriber);
24835 subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__["SubjectSubscription"](this, subscriber);
24836 }
24837 if (scheduler) {
24838 subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__["ObserveOnSubscriber"](subscriber, scheduler));
24839 }
24840 if (_infiniteTimeWindow) {
24841 for (var i = 0; i < len && !subscriber.closed; i++) {
24842 subscriber.next(_events[i]);
24843 }
24844 }
24845 else {
24846 for (var i = 0; i < len && !subscriber.closed; i++) {
24847 subscriber.next(_events[i].value);
24848 }
24849 }
24850 if (this.hasError) {
24851 subscriber.error(this.thrownError);
24852 }
24853 else if (this.isStopped) {
24854 subscriber.complete();
24855 }
24856 return subscription;
24857 };
24858 ReplaySubject.prototype._getNow = function () {
24859 return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__["queue"]).now();
24860 };
24861 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
24862 var now = this._getNow();
24863 var _bufferSize = this._bufferSize;
24864 var _windowTime = this._windowTime;
24865 var _events = this._events;
24866 var eventsCount = _events.length;
24867 var spliceCount = 0;
24868 while (spliceCount < eventsCount) {
24869 if ((now - _events[spliceCount].time) < _windowTime) {
24870 break;
24871 }
24872 spliceCount++;
24873 }
24874 if (eventsCount > _bufferSize) {
24875 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
24876 }
24877 if (spliceCount > 0) {
24878 _events.splice(0, spliceCount);
24879 }
24880 return _events;
24881 };
24882 return ReplaySubject;
24883}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
24884
24885var ReplayEvent = /*@__PURE__*/ (function () {
24886 function ReplayEvent(time, value) {
24887 this.time = time;
24888 this.value = value;
24889 }
24890 return ReplayEvent;
24891}());
24892//# sourceMappingURL=ReplaySubject.js.map
24893
24894
24895/***/ }),
24896/* 174 */
24897/***/ (function(module, __webpack_exports__, __webpack_require__) {
24898
24899"use strict";
24900__webpack_require__.r(__webpack_exports__);
24901/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queue", function() { return queue; });
24902/* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(175);
24903/* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(178);
24904/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */
24905
24906
24907var queue = /*@__PURE__*/ new _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__["QueueScheduler"](_QueueAction__WEBPACK_IMPORTED_MODULE_0__["QueueAction"]);
24908//# sourceMappingURL=queue.js.map
24909
24910
24911/***/ }),
24912/* 175 */
24913/***/ (function(module, __webpack_exports__, __webpack_require__) {
24914
24915"use strict";
24916__webpack_require__.r(__webpack_exports__);
24917/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueAction", function() { return QueueAction; });
24918/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24919/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
24920/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
24921
24922
24923var QueueAction = /*@__PURE__*/ (function (_super) {
24924 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueAction, _super);
24925 function QueueAction(scheduler, work) {
24926 var _this = _super.call(this, scheduler, work) || this;
24927 _this.scheduler = scheduler;
24928 _this.work = work;
24929 return _this;
24930 }
24931 QueueAction.prototype.schedule = function (state, delay) {
24932 if (delay === void 0) {
24933 delay = 0;
24934 }
24935 if (delay > 0) {
24936 return _super.prototype.schedule.call(this, state, delay);
24937 }
24938 this.delay = delay;
24939 this.state = state;
24940 this.scheduler.flush(this);
24941 return this;
24942 };
24943 QueueAction.prototype.execute = function (state, delay) {
24944 return (delay > 0 || this.closed) ?
24945 _super.prototype.execute.call(this, state, delay) :
24946 this._execute(state, delay);
24947 };
24948 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
24949 if (delay === void 0) {
24950 delay = 0;
24951 }
24952 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
24953 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
24954 }
24955 return scheduler.flush(this);
24956 };
24957 return QueueAction;
24958}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
24959
24960//# sourceMappingURL=QueueAction.js.map
24961
24962
24963/***/ }),
24964/* 176 */
24965/***/ (function(module, __webpack_exports__, __webpack_require__) {
24966
24967"use strict";
24968__webpack_require__.r(__webpack_exports__);
24969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncAction", function() { return AsyncAction; });
24970/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
24971/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
24972/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */
24973
24974
24975var AsyncAction = /*@__PURE__*/ (function (_super) {
24976 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncAction, _super);
24977 function AsyncAction(scheduler, work) {
24978 var _this = _super.call(this, scheduler, work) || this;
24979 _this.scheduler = scheduler;
24980 _this.work = work;
24981 _this.pending = false;
24982 return _this;
24983 }
24984 AsyncAction.prototype.schedule = function (state, delay) {
24985 if (delay === void 0) {
24986 delay = 0;
24987 }
24988 if (this.closed) {
24989 return this;
24990 }
24991 this.state = state;
24992 var id = this.id;
24993 var scheduler = this.scheduler;
24994 if (id != null) {
24995 this.id = this.recycleAsyncId(scheduler, id, delay);
24996 }
24997 this.pending = true;
24998 this.delay = delay;
24999 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
25000 return this;
25001 };
25002 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
25003 if (delay === void 0) {
25004 delay = 0;
25005 }
25006 return setInterval(scheduler.flush.bind(scheduler, this), delay);
25007 };
25008 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
25009 if (delay === void 0) {
25010 delay = 0;
25011 }
25012 if (delay !== null && this.delay === delay && this.pending === false) {
25013 return id;
25014 }
25015 clearInterval(id);
25016 return undefined;
25017 };
25018 AsyncAction.prototype.execute = function (state, delay) {
25019 if (this.closed) {
25020 return new Error('executing a cancelled action');
25021 }
25022 this.pending = false;
25023 var error = this._execute(state, delay);
25024 if (error) {
25025 return error;
25026 }
25027 else if (this.pending === false && this.id != null) {
25028 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
25029 }
25030 };
25031 AsyncAction.prototype._execute = function (state, delay) {
25032 var errored = false;
25033 var errorValue = undefined;
25034 try {
25035 this.work(state);
25036 }
25037 catch (e) {
25038 errored = true;
25039 errorValue = !!e && e || new Error(e);
25040 }
25041 if (errored) {
25042 this.unsubscribe();
25043 return errorValue;
25044 }
25045 };
25046 AsyncAction.prototype._unsubscribe = function () {
25047 var id = this.id;
25048 var scheduler = this.scheduler;
25049 var actions = scheduler.actions;
25050 var index = actions.indexOf(this);
25051 this.work = null;
25052 this.state = null;
25053 this.pending = false;
25054 this.scheduler = null;
25055 if (index !== -1) {
25056 actions.splice(index, 1);
25057 }
25058 if (id != null) {
25059 this.id = this.recycleAsyncId(scheduler, id, null);
25060 }
25061 this.delay = null;
25062 };
25063 return AsyncAction;
25064}(_Action__WEBPACK_IMPORTED_MODULE_1__["Action"]));
25065
25066//# sourceMappingURL=AsyncAction.js.map
25067
25068
25069/***/ }),
25070/* 177 */
25071/***/ (function(module, __webpack_exports__, __webpack_require__) {
25072
25073"use strict";
25074__webpack_require__.r(__webpack_exports__);
25075/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Action", function() { return Action; });
25076/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25077/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
25078/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
25079
25080
25081var Action = /*@__PURE__*/ (function (_super) {
25082 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Action, _super);
25083 function Action(scheduler, work) {
25084 return _super.call(this) || this;
25085 }
25086 Action.prototype.schedule = function (state, delay) {
25087 if (delay === void 0) {
25088 delay = 0;
25089 }
25090 return this;
25091 };
25092 return Action;
25093}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
25094
25095//# sourceMappingURL=Action.js.map
25096
25097
25098/***/ }),
25099/* 178 */
25100/***/ (function(module, __webpack_exports__, __webpack_require__) {
25101
25102"use strict";
25103__webpack_require__.r(__webpack_exports__);
25104/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueScheduler", function() { return QueueScheduler; });
25105/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25106/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
25107/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
25108
25109
25110var QueueScheduler = /*@__PURE__*/ (function (_super) {
25111 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueScheduler, _super);
25112 function QueueScheduler() {
25113 return _super !== null && _super.apply(this, arguments) || this;
25114 }
25115 return QueueScheduler;
25116}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
25117
25118//# sourceMappingURL=QueueScheduler.js.map
25119
25120
25121/***/ }),
25122/* 179 */
25123/***/ (function(module, __webpack_exports__, __webpack_require__) {
25124
25125"use strict";
25126__webpack_require__.r(__webpack_exports__);
25127/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncScheduler", function() { return AsyncScheduler; });
25128/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25129/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(180);
25130/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */
25131
25132
25133var AsyncScheduler = /*@__PURE__*/ (function (_super) {
25134 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncScheduler, _super);
25135 function AsyncScheduler(SchedulerAction, now) {
25136 if (now === void 0) {
25137 now = _Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"].now;
25138 }
25139 var _this = _super.call(this, SchedulerAction, function () {
25140 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
25141 return AsyncScheduler.delegate.now();
25142 }
25143 else {
25144 return now();
25145 }
25146 }) || this;
25147 _this.actions = [];
25148 _this.active = false;
25149 _this.scheduled = undefined;
25150 return _this;
25151 }
25152 AsyncScheduler.prototype.schedule = function (work, delay, state) {
25153 if (delay === void 0) {
25154 delay = 0;
25155 }
25156 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
25157 return AsyncScheduler.delegate.schedule(work, delay, state);
25158 }
25159 else {
25160 return _super.prototype.schedule.call(this, work, delay, state);
25161 }
25162 };
25163 AsyncScheduler.prototype.flush = function (action) {
25164 var actions = this.actions;
25165 if (this.active) {
25166 actions.push(action);
25167 return;
25168 }
25169 var error;
25170 this.active = true;
25171 do {
25172 if (error = action.execute(action.state, action.delay)) {
25173 break;
25174 }
25175 } while (action = actions.shift());
25176 this.active = false;
25177 if (error) {
25178 while (action = actions.shift()) {
25179 action.unsubscribe();
25180 }
25181 throw error;
25182 }
25183 };
25184 return AsyncScheduler;
25185}(_Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"]));
25186
25187//# sourceMappingURL=AsyncScheduler.js.map
25188
25189
25190/***/ }),
25191/* 180 */
25192/***/ (function(module, __webpack_exports__, __webpack_require__) {
25193
25194"use strict";
25195__webpack_require__.r(__webpack_exports__);
25196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return Scheduler; });
25197var Scheduler = /*@__PURE__*/ (function () {
25198 function Scheduler(SchedulerAction, now) {
25199 if (now === void 0) {
25200 now = Scheduler.now;
25201 }
25202 this.SchedulerAction = SchedulerAction;
25203 this.now = now;
25204 }
25205 Scheduler.prototype.schedule = function (work, delay, state) {
25206 if (delay === void 0) {
25207 delay = 0;
25208 }
25209 return new this.SchedulerAction(this, work).schedule(state, delay);
25210 };
25211 Scheduler.now = function () { return Date.now(); };
25212 return Scheduler;
25213}());
25214
25215//# sourceMappingURL=Scheduler.js.map
25216
25217
25218/***/ }),
25219/* 181 */
25220/***/ (function(module, __webpack_exports__, __webpack_require__) {
25221
25222"use strict";
25223__webpack_require__.r(__webpack_exports__);
25224/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return observeOn; });
25225/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnOperator", function() { return ObserveOnOperator; });
25226/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnSubscriber", function() { return ObserveOnSubscriber; });
25227/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnMessage", function() { return ObserveOnMessage; });
25228/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25229/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
25230/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(182);
25231/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
25232
25233
25234
25235function observeOn(scheduler, delay) {
25236 if (delay === void 0) {
25237 delay = 0;
25238 }
25239 return function observeOnOperatorFunction(source) {
25240 return source.lift(new ObserveOnOperator(scheduler, delay));
25241 };
25242}
25243var ObserveOnOperator = /*@__PURE__*/ (function () {
25244 function ObserveOnOperator(scheduler, delay) {
25245 if (delay === void 0) {
25246 delay = 0;
25247 }
25248 this.scheduler = scheduler;
25249 this.delay = delay;
25250 }
25251 ObserveOnOperator.prototype.call = function (subscriber, source) {
25252 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
25253 };
25254 return ObserveOnOperator;
25255}());
25256
25257var ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {
25258 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ObserveOnSubscriber, _super);
25259 function ObserveOnSubscriber(destination, scheduler, delay) {
25260 if (delay === void 0) {
25261 delay = 0;
25262 }
25263 var _this = _super.call(this, destination) || this;
25264 _this.scheduler = scheduler;
25265 _this.delay = delay;
25266 return _this;
25267 }
25268 ObserveOnSubscriber.dispatch = function (arg) {
25269 var notification = arg.notification, destination = arg.destination;
25270 notification.observe(destination);
25271 this.unsubscribe();
25272 };
25273 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
25274 var destination = this.destination;
25275 destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
25276 };
25277 ObserveOnSubscriber.prototype._next = function (value) {
25278 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
25279 };
25280 ObserveOnSubscriber.prototype._error = function (err) {
25281 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
25282 this.unsubscribe();
25283 };
25284 ObserveOnSubscriber.prototype._complete = function () {
25285 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
25286 this.unsubscribe();
25287 };
25288 return ObserveOnSubscriber;
25289}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
25290
25291var ObserveOnMessage = /*@__PURE__*/ (function () {
25292 function ObserveOnMessage(notification, destination) {
25293 this.notification = notification;
25294 this.destination = destination;
25295 }
25296 return ObserveOnMessage;
25297}());
25298
25299//# sourceMappingURL=observeOn.js.map
25300
25301
25302/***/ }),
25303/* 182 */
25304/***/ (function(module, __webpack_exports__, __webpack_require__) {
25305
25306"use strict";
25307__webpack_require__.r(__webpack_exports__);
25308/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return NotificationKind; });
25309/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; });
25310/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(183);
25311/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(184);
25312/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(189);
25313/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */
25314
25315
25316
25317var NotificationKind;
25318/*@__PURE__*/ (function (NotificationKind) {
25319 NotificationKind["NEXT"] = "N";
25320 NotificationKind["ERROR"] = "E";
25321 NotificationKind["COMPLETE"] = "C";
25322})(NotificationKind || (NotificationKind = {}));
25323var Notification = /*@__PURE__*/ (function () {
25324 function Notification(kind, value, error) {
25325 this.kind = kind;
25326 this.value = value;
25327 this.error = error;
25328 this.hasValue = kind === 'N';
25329 }
25330 Notification.prototype.observe = function (observer) {
25331 switch (this.kind) {
25332 case 'N':
25333 return observer.next && observer.next(this.value);
25334 case 'E':
25335 return observer.error && observer.error(this.error);
25336 case 'C':
25337 return observer.complete && observer.complete();
25338 }
25339 };
25340 Notification.prototype.do = function (next, error, complete) {
25341 var kind = this.kind;
25342 switch (kind) {
25343 case 'N':
25344 return next && next(this.value);
25345 case 'E':
25346 return error && error(this.error);
25347 case 'C':
25348 return complete && complete();
25349 }
25350 };
25351 Notification.prototype.accept = function (nextOrObserver, error, complete) {
25352 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
25353 return this.observe(nextOrObserver);
25354 }
25355 else {
25356 return this.do(nextOrObserver, error, complete);
25357 }
25358 };
25359 Notification.prototype.toObservable = function () {
25360 var kind = this.kind;
25361 switch (kind) {
25362 case 'N':
25363 return Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(this.value);
25364 case 'E':
25365 return Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_2__["throwError"])(this.error);
25366 case 'C':
25367 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_0__["empty"])();
25368 }
25369 throw new Error('unexpected notification kind value');
25370 };
25371 Notification.createNext = function (value) {
25372 if (typeof value !== 'undefined') {
25373 return new Notification('N', value);
25374 }
25375 return Notification.undefinedValueNotification;
25376 };
25377 Notification.createError = function (err) {
25378 return new Notification('E', undefined, err);
25379 };
25380 Notification.createComplete = function () {
25381 return Notification.completeNotification;
25382 };
25383 Notification.completeNotification = new Notification('C');
25384 Notification.undefinedValueNotification = new Notification('N', undefined);
25385 return Notification;
25386}());
25387
25388//# sourceMappingURL=Notification.js.map
25389
25390
25391/***/ }),
25392/* 183 */
25393/***/ (function(module, __webpack_exports__, __webpack_require__) {
25394
25395"use strict";
25396__webpack_require__.r(__webpack_exports__);
25397/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return EMPTY; });
25398/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
25399/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
25400/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
25401
25402var EMPTY = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.complete(); });
25403function empty(scheduler) {
25404 return scheduler ? emptyScheduled(scheduler) : EMPTY;
25405}
25406function emptyScheduled(scheduler) {
25407 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
25408}
25409//# sourceMappingURL=empty.js.map
25410
25411
25412/***/ }),
25413/* 184 */
25414/***/ (function(module, __webpack_exports__, __webpack_require__) {
25415
25416"use strict";
25417__webpack_require__.r(__webpack_exports__);
25418/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "of", function() { return of; });
25419/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(185);
25420/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
25421/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
25422/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */
25423
25424
25425
25426function of() {
25427 var args = [];
25428 for (var _i = 0; _i < arguments.length; _i++) {
25429 args[_i] = arguments[_i];
25430 }
25431 var scheduler = args[args.length - 1];
25432 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(scheduler)) {
25433 args.pop();
25434 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(args, scheduler);
25435 }
25436 else {
25437 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(args);
25438 }
25439}
25440//# sourceMappingURL=of.js.map
25441
25442
25443/***/ }),
25444/* 185 */
25445/***/ (function(module, __webpack_exports__, __webpack_require__) {
25446
25447"use strict";
25448__webpack_require__.r(__webpack_exports__);
25449/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScheduler", function() { return isScheduler; });
25450/** PURE_IMPORTS_START PURE_IMPORTS_END */
25451function isScheduler(value) {
25452 return value && typeof value.schedule === 'function';
25453}
25454//# sourceMappingURL=isScheduler.js.map
25455
25456
25457/***/ }),
25458/* 186 */
25459/***/ (function(module, __webpack_exports__, __webpack_require__) {
25460
25461"use strict";
25462__webpack_require__.r(__webpack_exports__);
25463/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromArray", function() { return fromArray; });
25464/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
25465/* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(187);
25466/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
25467/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */
25468
25469
25470
25471function fromArray(input, scheduler) {
25472 if (!scheduler) {
25473 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__["subscribeToArray"])(input));
25474 }
25475 else {
25476 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
25477 }
25478}
25479//# sourceMappingURL=fromArray.js.map
25480
25481
25482/***/ }),
25483/* 187 */
25484/***/ (function(module, __webpack_exports__, __webpack_require__) {
25485
25486"use strict";
25487__webpack_require__.r(__webpack_exports__);
25488/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToArray", function() { return subscribeToArray; });
25489/** PURE_IMPORTS_START PURE_IMPORTS_END */
25490var subscribeToArray = function (array) {
25491 return function (subscriber) {
25492 for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
25493 subscriber.next(array[i]);
25494 }
25495 subscriber.complete();
25496 };
25497};
25498//# sourceMappingURL=subscribeToArray.js.map
25499
25500
25501/***/ }),
25502/* 188 */
25503/***/ (function(module, __webpack_exports__, __webpack_require__) {
25504
25505"use strict";
25506__webpack_require__.r(__webpack_exports__);
25507/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleArray", function() { return scheduleArray; });
25508/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
25509/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
25510/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
25511
25512
25513function scheduleArray(input, scheduler) {
25514 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
25515 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
25516 var i = 0;
25517 sub.add(scheduler.schedule(function () {
25518 if (i === input.length) {
25519 subscriber.complete();
25520 return;
25521 }
25522 subscriber.next(input[i++]);
25523 if (!subscriber.closed) {
25524 sub.add(this.schedule());
25525 }
25526 }));
25527 return sub;
25528 });
25529}
25530//# sourceMappingURL=scheduleArray.js.map
25531
25532
25533/***/ }),
25534/* 189 */
25535/***/ (function(module, __webpack_exports__, __webpack_require__) {
25536
25537"use strict";
25538__webpack_require__.r(__webpack_exports__);
25539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return throwError; });
25540/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
25541/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
25542
25543function throwError(error, scheduler) {
25544 if (!scheduler) {
25545 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.error(error); });
25546 }
25547 else {
25548 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
25549 }
25550}
25551function dispatch(_a) {
25552 var error = _a.error, subscriber = _a.subscriber;
25553 subscriber.error(error);
25554}
25555//# sourceMappingURL=throwError.js.map
25556
25557
25558/***/ }),
25559/* 190 */
25560/***/ (function(module, __webpack_exports__, __webpack_require__) {
25561
25562"use strict";
25563__webpack_require__.r(__webpack_exports__);
25564/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return AsyncSubject; });
25565/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25566/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
25567/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(157);
25568/** PURE_IMPORTS_START tslib,_Subject,_Subscription PURE_IMPORTS_END */
25569
25570
25571
25572var AsyncSubject = /*@__PURE__*/ (function (_super) {
25573 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncSubject, _super);
25574 function AsyncSubject() {
25575 var _this = _super !== null && _super.apply(this, arguments) || this;
25576 _this.value = null;
25577 _this.hasNext = false;
25578 _this.hasCompleted = false;
25579 return _this;
25580 }
25581 AsyncSubject.prototype._subscribe = function (subscriber) {
25582 if (this.hasError) {
25583 subscriber.error(this.thrownError);
25584 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
25585 }
25586 else if (this.hasCompleted && this.hasNext) {
25587 subscriber.next(this.value);
25588 subscriber.complete();
25589 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
25590 }
25591 return _super.prototype._subscribe.call(this, subscriber);
25592 };
25593 AsyncSubject.prototype.next = function (value) {
25594 if (!this.hasCompleted) {
25595 this.value = value;
25596 this.hasNext = true;
25597 }
25598 };
25599 AsyncSubject.prototype.error = function (error) {
25600 if (!this.hasCompleted) {
25601 _super.prototype.error.call(this, error);
25602 }
25603 };
25604 AsyncSubject.prototype.complete = function () {
25605 this.hasCompleted = true;
25606 if (this.hasNext) {
25607 _super.prototype.next.call(this, this.value);
25608 }
25609 _super.prototype.complete.call(this);
25610 };
25611 return AsyncSubject;
25612}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
25613
25614//# sourceMappingURL=AsyncSubject.js.map
25615
25616
25617/***/ }),
25618/* 191 */
25619/***/ (function(module, __webpack_exports__, __webpack_require__) {
25620
25621"use strict";
25622__webpack_require__.r(__webpack_exports__);
25623/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asap", function() { return asap; });
25624/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(192);
25625/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
25626/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */
25627
25628
25629var asap = /*@__PURE__*/ new _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__["AsapScheduler"](_AsapAction__WEBPACK_IMPORTED_MODULE_0__["AsapAction"]);
25630//# sourceMappingURL=asap.js.map
25631
25632
25633/***/ }),
25634/* 192 */
25635/***/ (function(module, __webpack_exports__, __webpack_require__) {
25636
25637"use strict";
25638__webpack_require__.r(__webpack_exports__);
25639/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapAction", function() { return AsapAction; });
25640/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25641/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(193);
25642/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
25643/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */
25644
25645
25646
25647var AsapAction = /*@__PURE__*/ (function (_super) {
25648 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapAction, _super);
25649 function AsapAction(scheduler, work) {
25650 var _this = _super.call(this, scheduler, work) || this;
25651 _this.scheduler = scheduler;
25652 _this.work = work;
25653 return _this;
25654 }
25655 AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
25656 if (delay === void 0) {
25657 delay = 0;
25658 }
25659 if (delay !== null && delay > 0) {
25660 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
25661 }
25662 scheduler.actions.push(this);
25663 return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].setImmediate(scheduler.flush.bind(scheduler, null)));
25664 };
25665 AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
25666 if (delay === void 0) {
25667 delay = 0;
25668 }
25669 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
25670 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
25671 }
25672 if (scheduler.actions.length === 0) {
25673 _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].clearImmediate(id);
25674 scheduler.scheduled = undefined;
25675 }
25676 return undefined;
25677 };
25678 return AsapAction;
25679}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__["AsyncAction"]));
25680
25681//# sourceMappingURL=AsapAction.js.map
25682
25683
25684/***/ }),
25685/* 193 */
25686/***/ (function(module, __webpack_exports__, __webpack_require__) {
25687
25688"use strict";
25689__webpack_require__.r(__webpack_exports__);
25690/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Immediate", function() { return Immediate; });
25691/** PURE_IMPORTS_START PURE_IMPORTS_END */
25692var nextHandle = 1;
25693var tasksByHandle = {};
25694function runIfPresent(handle) {
25695 var cb = tasksByHandle[handle];
25696 if (cb) {
25697 cb();
25698 }
25699}
25700var Immediate = {
25701 setImmediate: function (cb) {
25702 var handle = nextHandle++;
25703 tasksByHandle[handle] = cb;
25704 Promise.resolve().then(function () { return runIfPresent(handle); });
25705 return handle;
25706 },
25707 clearImmediate: function (handle) {
25708 delete tasksByHandle[handle];
25709 },
25710};
25711//# sourceMappingURL=Immediate.js.map
25712
25713
25714/***/ }),
25715/* 194 */
25716/***/ (function(module, __webpack_exports__, __webpack_require__) {
25717
25718"use strict";
25719__webpack_require__.r(__webpack_exports__);
25720/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapScheduler", function() { return AsapScheduler; });
25721/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25722/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
25723/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
25724
25725
25726var AsapScheduler = /*@__PURE__*/ (function (_super) {
25727 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapScheduler, _super);
25728 function AsapScheduler() {
25729 return _super !== null && _super.apply(this, arguments) || this;
25730 }
25731 AsapScheduler.prototype.flush = function (action) {
25732 this.active = true;
25733 this.scheduled = undefined;
25734 var actions = this.actions;
25735 var error;
25736 var index = -1;
25737 var count = actions.length;
25738 action = action || actions.shift();
25739 do {
25740 if (error = action.execute(action.state, action.delay)) {
25741 break;
25742 }
25743 } while (++index < count && (action = actions.shift()));
25744 this.active = false;
25745 if (error) {
25746 while (++index < count && (action = actions.shift())) {
25747 action.unsubscribe();
25748 }
25749 throw error;
25750 }
25751 };
25752 return AsapScheduler;
25753}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
25754
25755//# sourceMappingURL=AsapScheduler.js.map
25756
25757
25758/***/ }),
25759/* 195 */
25760/***/ (function(module, __webpack_exports__, __webpack_require__) {
25761
25762"use strict";
25763__webpack_require__.r(__webpack_exports__);
25764/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "async", function() { return async; });
25765/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
25766/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
25767/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
25768
25769
25770var async = /*@__PURE__*/ new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"](_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]);
25771//# sourceMappingURL=async.js.map
25772
25773
25774/***/ }),
25775/* 196 */
25776/***/ (function(module, __webpack_exports__, __webpack_require__) {
25777
25778"use strict";
25779__webpack_require__.r(__webpack_exports__);
25780/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animationFrame", function() { return animationFrame; });
25781/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(197);
25782/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(198);
25783/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */
25784
25785
25786var animationFrame = /*@__PURE__*/ new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__["AnimationFrameScheduler"](_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__["AnimationFrameAction"]);
25787//# sourceMappingURL=animationFrame.js.map
25788
25789
25790/***/ }),
25791/* 197 */
25792/***/ (function(module, __webpack_exports__, __webpack_require__) {
25793
25794"use strict";
25795__webpack_require__.r(__webpack_exports__);
25796/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameAction", function() { return AnimationFrameAction; });
25797/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25798/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
25799/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
25800
25801
25802var AnimationFrameAction = /*@__PURE__*/ (function (_super) {
25803 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameAction, _super);
25804 function AnimationFrameAction(scheduler, work) {
25805 var _this = _super.call(this, scheduler, work) || this;
25806 _this.scheduler = scheduler;
25807 _this.work = work;
25808 return _this;
25809 }
25810 AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
25811 if (delay === void 0) {
25812 delay = 0;
25813 }
25814 if (delay !== null && delay > 0) {
25815 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
25816 }
25817 scheduler.actions.push(this);
25818 return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
25819 };
25820 AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
25821 if (delay === void 0) {
25822 delay = 0;
25823 }
25824 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
25825 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
25826 }
25827 if (scheduler.actions.length === 0) {
25828 cancelAnimationFrame(id);
25829 scheduler.scheduled = undefined;
25830 }
25831 return undefined;
25832 };
25833 return AnimationFrameAction;
25834}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
25835
25836//# sourceMappingURL=AnimationFrameAction.js.map
25837
25838
25839/***/ }),
25840/* 198 */
25841/***/ (function(module, __webpack_exports__, __webpack_require__) {
25842
25843"use strict";
25844__webpack_require__.r(__webpack_exports__);
25845/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameScheduler", function() { return AnimationFrameScheduler; });
25846/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25847/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
25848/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
25849
25850
25851var AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {
25852 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameScheduler, _super);
25853 function AnimationFrameScheduler() {
25854 return _super !== null && _super.apply(this, arguments) || this;
25855 }
25856 AnimationFrameScheduler.prototype.flush = function (action) {
25857 this.active = true;
25858 this.scheduled = undefined;
25859 var actions = this.actions;
25860 var error;
25861 var index = -1;
25862 var count = actions.length;
25863 action = action || actions.shift();
25864 do {
25865 if (error = action.execute(action.state, action.delay)) {
25866 break;
25867 }
25868 } while (++index < count && (action = actions.shift()));
25869 this.active = false;
25870 if (error) {
25871 while (++index < count && (action = actions.shift())) {
25872 action.unsubscribe();
25873 }
25874 throw error;
25875 }
25876 };
25877 return AnimationFrameScheduler;
25878}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
25879
25880//# sourceMappingURL=AnimationFrameScheduler.js.map
25881
25882
25883/***/ }),
25884/* 199 */
25885/***/ (function(module, __webpack_exports__, __webpack_require__) {
25886
25887"use strict";
25888__webpack_require__.r(__webpack_exports__);
25889/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return VirtualTimeScheduler; });
25890/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return VirtualAction; });
25891/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
25892/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
25893/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(179);
25894/** PURE_IMPORTS_START tslib,_AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
25895
25896
25897
25898var VirtualTimeScheduler = /*@__PURE__*/ (function (_super) {
25899 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualTimeScheduler, _super);
25900 function VirtualTimeScheduler(SchedulerAction, maxFrames) {
25901 if (SchedulerAction === void 0) {
25902 SchedulerAction = VirtualAction;
25903 }
25904 if (maxFrames === void 0) {
25905 maxFrames = Number.POSITIVE_INFINITY;
25906 }
25907 var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
25908 _this.maxFrames = maxFrames;
25909 _this.frame = 0;
25910 _this.index = -1;
25911 return _this;
25912 }
25913 VirtualTimeScheduler.prototype.flush = function () {
25914 var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
25915 var error, action;
25916 while ((action = actions[0]) && action.delay <= maxFrames) {
25917 actions.shift();
25918 this.frame = action.delay;
25919 if (error = action.execute(action.state, action.delay)) {
25920 break;
25921 }
25922 }
25923 if (error) {
25924 while (action = actions.shift()) {
25925 action.unsubscribe();
25926 }
25927 throw error;
25928 }
25929 };
25930 VirtualTimeScheduler.frameTimeFactor = 10;
25931 return VirtualTimeScheduler;
25932}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__["AsyncScheduler"]));
25933
25934var VirtualAction = /*@__PURE__*/ (function (_super) {
25935 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualAction, _super);
25936 function VirtualAction(scheduler, work, index) {
25937 if (index === void 0) {
25938 index = scheduler.index += 1;
25939 }
25940 var _this = _super.call(this, scheduler, work) || this;
25941 _this.scheduler = scheduler;
25942 _this.work = work;
25943 _this.index = index;
25944 _this.active = true;
25945 _this.index = scheduler.index = index;
25946 return _this;
25947 }
25948 VirtualAction.prototype.schedule = function (state, delay) {
25949 if (delay === void 0) {
25950 delay = 0;
25951 }
25952 if (!this.id) {
25953 return _super.prototype.schedule.call(this, state, delay);
25954 }
25955 this.active = false;
25956 var action = new VirtualAction(this.scheduler, this.work);
25957 this.add(action);
25958 return action.schedule(state, delay);
25959 };
25960 VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
25961 if (delay === void 0) {
25962 delay = 0;
25963 }
25964 this.delay = scheduler.frame + delay;
25965 var actions = scheduler.actions;
25966 actions.push(this);
25967 actions.sort(VirtualAction.sortActions);
25968 return true;
25969 };
25970 VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
25971 if (delay === void 0) {
25972 delay = 0;
25973 }
25974 return undefined;
25975 };
25976 VirtualAction.prototype._execute = function (state, delay) {
25977 if (this.active === true) {
25978 return _super.prototype._execute.call(this, state, delay);
25979 }
25980 };
25981 VirtualAction.sortActions = function (a, b) {
25982 if (a.delay === b.delay) {
25983 if (a.index === b.index) {
25984 return 0;
25985 }
25986 else if (a.index > b.index) {
25987 return 1;
25988 }
25989 else {
25990 return -1;
25991 }
25992 }
25993 else if (a.delay > b.delay) {
25994 return 1;
25995 }
25996 else {
25997 return -1;
25998 }
25999 };
26000 return VirtualAction;
26001}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
26002
26003//# sourceMappingURL=VirtualTimeScheduler.js.map
26004
26005
26006/***/ }),
26007/* 200 */
26008/***/ (function(module, __webpack_exports__, __webpack_require__) {
26009
26010"use strict";
26011__webpack_require__.r(__webpack_exports__);
26012/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });
26013/** PURE_IMPORTS_START PURE_IMPORTS_END */
26014function identity(x) {
26015 return x;
26016}
26017//# sourceMappingURL=identity.js.map
26018
26019
26020/***/ }),
26021/* 201 */
26022/***/ (function(module, __webpack_exports__, __webpack_require__) {
26023
26024"use strict";
26025__webpack_require__.r(__webpack_exports__);
26026/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return isObservable; });
26027/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
26028/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
26029
26030function isObservable(obj) {
26031 return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
26032}
26033//# sourceMappingURL=isObservable.js.map
26034
26035
26036/***/ }),
26037/* 202 */
26038/***/ (function(module, __webpack_exports__, __webpack_require__) {
26039
26040"use strict";
26041__webpack_require__.r(__webpack_exports__);
26042/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return ArgumentOutOfRangeError; });
26043/** PURE_IMPORTS_START PURE_IMPORTS_END */
26044function ArgumentOutOfRangeErrorImpl() {
26045 Error.call(this);
26046 this.message = 'argument out of range';
26047 this.name = 'ArgumentOutOfRangeError';
26048 return this;
26049}
26050ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
26051var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
26052//# sourceMappingURL=ArgumentOutOfRangeError.js.map
26053
26054
26055/***/ }),
26056/* 203 */
26057/***/ (function(module, __webpack_exports__, __webpack_require__) {
26058
26059"use strict";
26060__webpack_require__.r(__webpack_exports__);
26061/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return EmptyError; });
26062/** PURE_IMPORTS_START PURE_IMPORTS_END */
26063function EmptyErrorImpl() {
26064 Error.call(this);
26065 this.message = 'no elements in sequence';
26066 this.name = 'EmptyError';
26067 return this;
26068}
26069EmptyErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
26070var EmptyError = EmptyErrorImpl;
26071//# sourceMappingURL=EmptyError.js.map
26072
26073
26074/***/ }),
26075/* 204 */
26076/***/ (function(module, __webpack_exports__, __webpack_require__) {
26077
26078"use strict";
26079__webpack_require__.r(__webpack_exports__);
26080/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return TimeoutError; });
26081/** PURE_IMPORTS_START PURE_IMPORTS_END */
26082function TimeoutErrorImpl() {
26083 Error.call(this);
26084 this.message = 'Timeout has occurred';
26085 this.name = 'TimeoutError';
26086 return this;
26087}
26088TimeoutErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
26089var TimeoutError = TimeoutErrorImpl;
26090//# sourceMappingURL=TimeoutError.js.map
26091
26092
26093/***/ }),
26094/* 205 */
26095/***/ (function(module, __webpack_exports__, __webpack_require__) {
26096
26097"use strict";
26098__webpack_require__.r(__webpack_exports__);
26099/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return bindCallback; });
26100/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
26101/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(190);
26102/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
26103/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(150);
26104/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(158);
26105/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(185);
26106/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */
26107
26108
26109
26110
26111
26112
26113function bindCallback(callbackFunc, resultSelector, scheduler) {
26114 if (resultSelector) {
26115 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(resultSelector)) {
26116 scheduler = resultSelector;
26117 }
26118 else {
26119 return function () {
26120 var args = [];
26121 for (var _i = 0; _i < arguments.length; _i++) {
26122 args[_i] = arguments[_i];
26123 }
26124 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); }));
26125 };
26126 }
26127 }
26128 return function () {
26129 var args = [];
26130 for (var _i = 0; _i < arguments.length; _i++) {
26131 args[_i] = arguments[_i];
26132 }
26133 var context = this;
26134 var subject;
26135 var params = {
26136 context: context,
26137 subject: subject,
26138 callbackFunc: callbackFunc,
26139 scheduler: scheduler,
26140 };
26141 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
26142 if (!scheduler) {
26143 if (!subject) {
26144 subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
26145 var handler = function () {
26146 var innerArgs = [];
26147 for (var _i = 0; _i < arguments.length; _i++) {
26148 innerArgs[_i] = arguments[_i];
26149 }
26150 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
26151 subject.complete();
26152 };
26153 try {
26154 callbackFunc.apply(context, args.concat([handler]));
26155 }
26156 catch (err) {
26157 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
26158 subject.error(err);
26159 }
26160 else {
26161 console.warn(err);
26162 }
26163 }
26164 }
26165 return subject.subscribe(subscriber);
26166 }
26167 else {
26168 var state = {
26169 args: args, subscriber: subscriber, params: params,
26170 };
26171 return scheduler.schedule(dispatch, 0, state);
26172 }
26173 });
26174 };
26175}
26176function dispatch(state) {
26177 var _this = this;
26178 var self = this;
26179 var args = state.args, subscriber = state.subscriber, params = state.params;
26180 var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
26181 var subject = params.subject;
26182 if (!subject) {
26183 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
26184 var handler = function () {
26185 var innerArgs = [];
26186 for (var _i = 0; _i < arguments.length; _i++) {
26187 innerArgs[_i] = arguments[_i];
26188 }
26189 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
26190 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
26191 };
26192 try {
26193 callbackFunc.apply(context, args.concat([handler]));
26194 }
26195 catch (err) {
26196 subject.error(err);
26197 }
26198 }
26199 this.add(subject.subscribe(subscriber));
26200}
26201function dispatchNext(state) {
26202 var value = state.value, subject = state.subject;
26203 subject.next(value);
26204 subject.complete();
26205}
26206function dispatchError(state) {
26207 var err = state.err, subject = state.subject;
26208 subject.error(err);
26209}
26210//# sourceMappingURL=bindCallback.js.map
26211
26212
26213/***/ }),
26214/* 206 */
26215/***/ (function(module, __webpack_exports__, __webpack_require__) {
26216
26217"use strict";
26218__webpack_require__.r(__webpack_exports__);
26219/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; });
26220/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MapOperator", function() { return MapOperator; });
26221/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
26222/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
26223/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
26224
26225
26226function map(project, thisArg) {
26227 return function mapOperation(source) {
26228 if (typeof project !== 'function') {
26229 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
26230 }
26231 return source.lift(new MapOperator(project, thisArg));
26232 };
26233}
26234var MapOperator = /*@__PURE__*/ (function () {
26235 function MapOperator(project, thisArg) {
26236 this.project = project;
26237 this.thisArg = thisArg;
26238 }
26239 MapOperator.prototype.call = function (subscriber, source) {
26240 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
26241 };
26242 return MapOperator;
26243}());
26244
26245var MapSubscriber = /*@__PURE__*/ (function (_super) {
26246 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapSubscriber, _super);
26247 function MapSubscriber(destination, project, thisArg) {
26248 var _this = _super.call(this, destination) || this;
26249 _this.project = project;
26250 _this.count = 0;
26251 _this.thisArg = thisArg || _this;
26252 return _this;
26253 }
26254 MapSubscriber.prototype._next = function (value) {
26255 var result;
26256 try {
26257 result = this.project.call(this.thisArg, value, this.count++);
26258 }
26259 catch (err) {
26260 this.destination.error(err);
26261 return;
26262 }
26263 this.destination.next(result);
26264 };
26265 return MapSubscriber;
26266}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
26267//# sourceMappingURL=map.js.map
26268
26269
26270/***/ }),
26271/* 207 */
26272/***/ (function(module, __webpack_exports__, __webpack_require__) {
26273
26274"use strict";
26275__webpack_require__.r(__webpack_exports__);
26276/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return bindNodeCallback; });
26277/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
26278/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(190);
26279/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
26280/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(150);
26281/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
26282/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(158);
26283/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isScheduler,_util_isArray PURE_IMPORTS_END */
26284
26285
26286
26287
26288
26289
26290function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
26291 if (resultSelector) {
26292 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(resultSelector)) {
26293 scheduler = resultSelector;
26294 }
26295 else {
26296 return function () {
26297 var args = [];
26298 for (var _i = 0; _i < arguments.length; _i++) {
26299 args[_i] = arguments[_i];
26300 }
26301 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); }));
26302 };
26303 }
26304 }
26305 return function () {
26306 var args = [];
26307 for (var _i = 0; _i < arguments.length; _i++) {
26308 args[_i] = arguments[_i];
26309 }
26310 var params = {
26311 subject: undefined,
26312 args: args,
26313 callbackFunc: callbackFunc,
26314 scheduler: scheduler,
26315 context: this,
26316 };
26317 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
26318 var context = params.context;
26319 var subject = params.subject;
26320 if (!scheduler) {
26321 if (!subject) {
26322 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
26323 var handler = function () {
26324 var innerArgs = [];
26325 for (var _i = 0; _i < arguments.length; _i++) {
26326 innerArgs[_i] = arguments[_i];
26327 }
26328 var err = innerArgs.shift();
26329 if (err) {
26330 subject.error(err);
26331 return;
26332 }
26333 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
26334 subject.complete();
26335 };
26336 try {
26337 callbackFunc.apply(context, args.concat([handler]));
26338 }
26339 catch (err) {
26340 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
26341 subject.error(err);
26342 }
26343 else {
26344 console.warn(err);
26345 }
26346 }
26347 }
26348 return subject.subscribe(subscriber);
26349 }
26350 else {
26351 return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context });
26352 }
26353 });
26354 };
26355}
26356function dispatch(state) {
26357 var _this = this;
26358 var params = state.params, subscriber = state.subscriber, context = state.context;
26359 var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
26360 var subject = params.subject;
26361 if (!subject) {
26362 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
26363 var handler = function () {
26364 var innerArgs = [];
26365 for (var _i = 0; _i < arguments.length; _i++) {
26366 innerArgs[_i] = arguments[_i];
26367 }
26368 var err = innerArgs.shift();
26369 if (err) {
26370 _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
26371 }
26372 else {
26373 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
26374 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
26375 }
26376 };
26377 try {
26378 callbackFunc.apply(context, args.concat([handler]));
26379 }
26380 catch (err) {
26381 this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
26382 }
26383 }
26384 this.add(subject.subscribe(subscriber));
26385}
26386function dispatchNext(arg) {
26387 var value = arg.value, subject = arg.subject;
26388 subject.next(value);
26389 subject.complete();
26390}
26391function dispatchError(arg) {
26392 var err = arg.err, subject = arg.subject;
26393 subject.error(err);
26394}
26395//# sourceMappingURL=bindNodeCallback.js.map
26396
26397
26398/***/ }),
26399/* 208 */
26400/***/ (function(module, __webpack_exports__, __webpack_require__) {
26401
26402"use strict";
26403__webpack_require__.r(__webpack_exports__);
26404/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
26405/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestOperator", function() { return CombineLatestOperator; });
26406/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestSubscriber", function() { return CombineLatestSubscriber; });
26407/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
26408/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
26409/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(158);
26410/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
26411/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(210);
26412/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(186);
26413/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */
26414
26415
26416
26417
26418
26419
26420var NONE = {};
26421function combineLatest() {
26422 var observables = [];
26423 for (var _i = 0; _i < arguments.length; _i++) {
26424 observables[_i] = arguments[_i];
26425 }
26426 var resultSelector = null;
26427 var scheduler = null;
26428 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(observables[observables.length - 1])) {
26429 scheduler = observables.pop();
26430 }
26431 if (typeof observables[observables.length - 1] === 'function') {
26432 resultSelector = observables.pop();
26433 }
26434 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(observables[0])) {
26435 observables = observables[0];
26436 }
26437 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_5__["fromArray"])(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
26438}
26439var CombineLatestOperator = /*@__PURE__*/ (function () {
26440 function CombineLatestOperator(resultSelector) {
26441 this.resultSelector = resultSelector;
26442 }
26443 CombineLatestOperator.prototype.call = function (subscriber, source) {
26444 return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
26445 };
26446 return CombineLatestOperator;
26447}());
26448
26449var CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {
26450 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CombineLatestSubscriber, _super);
26451 function CombineLatestSubscriber(destination, resultSelector) {
26452 var _this = _super.call(this, destination) || this;
26453 _this.resultSelector = resultSelector;
26454 _this.active = 0;
26455 _this.values = [];
26456 _this.observables = [];
26457 return _this;
26458 }
26459 CombineLatestSubscriber.prototype._next = function (observable) {
26460 this.values.push(NONE);
26461 this.observables.push(observable);
26462 };
26463 CombineLatestSubscriber.prototype._complete = function () {
26464 var observables = this.observables;
26465 var len = observables.length;
26466 if (len === 0) {
26467 this.destination.complete();
26468 }
26469 else {
26470 this.active = len;
26471 this.toRespond = len;
26472 for (var i = 0; i < len; i++) {
26473 var observable = observables[i];
26474 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i));
26475 }
26476 }
26477 };
26478 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
26479 if ((this.active -= 1) === 0) {
26480 this.destination.complete();
26481 }
26482 };
26483 CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
26484 var values = this.values;
26485 var oldVal = values[outerIndex];
26486 var toRespond = !this.toRespond
26487 ? 0
26488 : oldVal === NONE ? --this.toRespond : this.toRespond;
26489 values[outerIndex] = innerValue;
26490 if (toRespond === 0) {
26491 if (this.resultSelector) {
26492 this._tryResultSelector(values);
26493 }
26494 else {
26495 this.destination.next(values.slice());
26496 }
26497 }
26498 };
26499 CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
26500 var result;
26501 try {
26502 result = this.resultSelector.apply(this, values);
26503 }
26504 catch (err) {
26505 this.destination.error(err);
26506 return;
26507 }
26508 this.destination.next(result);
26509 };
26510 return CombineLatestSubscriber;
26511}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
26512
26513//# sourceMappingURL=combineLatest.js.map
26514
26515
26516/***/ }),
26517/* 209 */
26518/***/ (function(module, __webpack_exports__, __webpack_require__) {
26519
26520"use strict";
26521__webpack_require__.r(__webpack_exports__);
26522/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OuterSubscriber", function() { return OuterSubscriber; });
26523/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
26524/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
26525/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
26526
26527
26528var OuterSubscriber = /*@__PURE__*/ (function (_super) {
26529 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OuterSubscriber, _super);
26530 function OuterSubscriber() {
26531 return _super !== null && _super.apply(this, arguments) || this;
26532 }
26533 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
26534 this.destination.next(innerValue);
26535 };
26536 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
26537 this.destination.error(error);
26538 };
26539 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
26540 this.destination.complete();
26541 };
26542 return OuterSubscriber;
26543}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
26544
26545//# sourceMappingURL=OuterSubscriber.js.map
26546
26547
26548/***/ }),
26549/* 210 */
26550/***/ (function(module, __webpack_exports__, __webpack_require__) {
26551
26552"use strict";
26553__webpack_require__.r(__webpack_exports__);
26554/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToResult", function() { return subscribeToResult; });
26555/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(211);
26556/* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
26557/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(149);
26558/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */
26559
26560
26561
26562function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, destination) {
26563 if (destination === void 0) {
26564 destination = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__["InnerSubscriber"](outerSubscriber, outerValue, outerIndex);
26565 }
26566 if (destination.closed) {
26567 return undefined;
26568 }
26569 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]) {
26570 return result.subscribe(destination);
26571 }
26572 return Object(_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(result)(destination);
26573}
26574//# sourceMappingURL=subscribeToResult.js.map
26575
26576
26577/***/ }),
26578/* 211 */
26579/***/ (function(module, __webpack_exports__, __webpack_require__) {
26580
26581"use strict";
26582__webpack_require__.r(__webpack_exports__);
26583/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InnerSubscriber", function() { return InnerSubscriber; });
26584/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
26585/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
26586/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
26587
26588
26589var InnerSubscriber = /*@__PURE__*/ (function (_super) {
26590 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerSubscriber, _super);
26591 function InnerSubscriber(parent, outerValue, outerIndex) {
26592 var _this = _super.call(this) || this;
26593 _this.parent = parent;
26594 _this.outerValue = outerValue;
26595 _this.outerIndex = outerIndex;
26596 _this.index = 0;
26597 return _this;
26598 }
26599 InnerSubscriber.prototype._next = function (value) {
26600 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
26601 };
26602 InnerSubscriber.prototype._error = function (error) {
26603 this.parent.notifyError(error, this);
26604 this.unsubscribe();
26605 };
26606 InnerSubscriber.prototype._complete = function () {
26607 this.parent.notifyComplete(this);
26608 this.unsubscribe();
26609 };
26610 return InnerSubscriber;
26611}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
26612
26613//# sourceMappingURL=InnerSubscriber.js.map
26614
26615
26616/***/ }),
26617/* 212 */
26618/***/ (function(module, __webpack_exports__, __webpack_require__) {
26619
26620"use strict";
26621__webpack_require__.r(__webpack_exports__);
26622/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeTo", function() { return subscribeTo; });
26623/* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(187);
26624/* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
26625/* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(214);
26626/* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(216);
26627/* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(217);
26628/* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(218);
26629/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(159);
26630/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(215);
26631/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(163);
26632/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */
26633
26634
26635
26636
26637
26638
26639
26640
26641
26642var subscribeTo = function (result) {
26643 if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__["observable"]] === 'function') {
26644 return Object(_subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__["subscribeToObservable"])(result);
26645 }
26646 else if (Object(_isArrayLike__WEBPACK_IMPORTED_MODULE_4__["isArrayLike"])(result)) {
26647 return Object(_subscribeToArray__WEBPACK_IMPORTED_MODULE_0__["subscribeToArray"])(result);
26648 }
26649 else if (Object(_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(result)) {
26650 return Object(_subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__["subscribeToPromise"])(result);
26651 }
26652 else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_7__["iterator"]] === 'function') {
26653 return Object(_subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__["subscribeToIterable"])(result);
26654 }
26655 else {
26656 var value = Object(_isObject__WEBPACK_IMPORTED_MODULE_6__["isObject"])(result) ? 'an invalid object' : "'" + result + "'";
26657 var msg = "You provided " + value + " where a stream was expected."
26658 + ' You can provide an Observable, Promise, Array, or Iterable.';
26659 throw new TypeError(msg);
26660 }
26661};
26662//# sourceMappingURL=subscribeTo.js.map
26663
26664
26665/***/ }),
26666/* 213 */
26667/***/ (function(module, __webpack_exports__, __webpack_require__) {
26668
26669"use strict";
26670__webpack_require__.r(__webpack_exports__);
26671/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToPromise", function() { return subscribeToPromise; });
26672/* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(156);
26673/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */
26674
26675var subscribeToPromise = function (promise) {
26676 return function (subscriber) {
26677 promise.then(function (value) {
26678 if (!subscriber.closed) {
26679 subscriber.next(value);
26680 subscriber.complete();
26681 }
26682 }, function (err) { return subscriber.error(err); })
26683 .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__["hostReportError"]);
26684 return subscriber;
26685 };
26686};
26687//# sourceMappingURL=subscribeToPromise.js.map
26688
26689
26690/***/ }),
26691/* 214 */
26692/***/ (function(module, __webpack_exports__, __webpack_require__) {
26693
26694"use strict";
26695__webpack_require__.r(__webpack_exports__);
26696/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToIterable", function() { return subscribeToIterable; });
26697/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(215);
26698/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
26699
26700var subscribeToIterable = function (iterable) {
26701 return function (subscriber) {
26702 var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]]();
26703 do {
26704 var item = iterator.next();
26705 if (item.done) {
26706 subscriber.complete();
26707 break;
26708 }
26709 subscriber.next(item.value);
26710 if (subscriber.closed) {
26711 break;
26712 }
26713 } while (true);
26714 if (typeof iterator.return === 'function') {
26715 subscriber.add(function () {
26716 if (iterator.return) {
26717 iterator.return();
26718 }
26719 });
26720 }
26721 return subscriber;
26722 };
26723};
26724//# sourceMappingURL=subscribeToIterable.js.map
26725
26726
26727/***/ }),
26728/* 215 */
26729/***/ (function(module, __webpack_exports__, __webpack_require__) {
26730
26731"use strict";
26732__webpack_require__.r(__webpack_exports__);
26733/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSymbolIterator", function() { return getSymbolIterator; });
26734/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iterator", function() { return iterator; });
26735/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$iterator", function() { return $$iterator; });
26736/** PURE_IMPORTS_START PURE_IMPORTS_END */
26737function getSymbolIterator() {
26738 if (typeof Symbol !== 'function' || !Symbol.iterator) {
26739 return '@@iterator';
26740 }
26741 return Symbol.iterator;
26742}
26743var iterator = /*@__PURE__*/ getSymbolIterator();
26744var $$iterator = iterator;
26745//# sourceMappingURL=iterator.js.map
26746
26747
26748/***/ }),
26749/* 216 */
26750/***/ (function(module, __webpack_exports__, __webpack_require__) {
26751
26752"use strict";
26753__webpack_require__.r(__webpack_exports__);
26754/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToObservable", function() { return subscribeToObservable; });
26755/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(163);
26756/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
26757
26758var subscribeToObservable = function (obj) {
26759 return function (subscriber) {
26760 var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]]();
26761 if (typeof obs.subscribe !== 'function') {
26762 throw new TypeError('Provided object does not correctly implement Symbol.observable');
26763 }
26764 else {
26765 return obs.subscribe(subscriber);
26766 }
26767 };
26768};
26769//# sourceMappingURL=subscribeToObservable.js.map
26770
26771
26772/***/ }),
26773/* 217 */
26774/***/ (function(module, __webpack_exports__, __webpack_require__) {
26775
26776"use strict";
26777__webpack_require__.r(__webpack_exports__);
26778/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { return isArrayLike; });
26779/** PURE_IMPORTS_START PURE_IMPORTS_END */
26780var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
26781//# sourceMappingURL=isArrayLike.js.map
26782
26783
26784/***/ }),
26785/* 218 */
26786/***/ (function(module, __webpack_exports__, __webpack_require__) {
26787
26788"use strict";
26789__webpack_require__.r(__webpack_exports__);
26790/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPromise", function() { return isPromise; });
26791/** PURE_IMPORTS_START PURE_IMPORTS_END */
26792function isPromise(value) {
26793 return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
26794}
26795//# sourceMappingURL=isPromise.js.map
26796
26797
26798/***/ }),
26799/* 219 */
26800/***/ (function(module, __webpack_exports__, __webpack_require__) {
26801
26802"use strict";
26803__webpack_require__.r(__webpack_exports__);
26804/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
26805/* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(184);
26806/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(220);
26807/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */
26808
26809
26810function concat() {
26811 var observables = [];
26812 for (var _i = 0; _i < arguments.length; _i++) {
26813 observables[_i] = arguments[_i];
26814 }
26815 return Object(_operators_concatAll__WEBPACK_IMPORTED_MODULE_1__["concatAll"])()(_of__WEBPACK_IMPORTED_MODULE_0__["of"].apply(void 0, observables));
26816}
26817//# sourceMappingURL=concat.js.map
26818
26819
26820/***/ }),
26821/* 220 */
26822/***/ (function(module, __webpack_exports__, __webpack_require__) {
26823
26824"use strict";
26825__webpack_require__.r(__webpack_exports__);
26826/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return concatAll; });
26827/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
26828/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */
26829
26830function concatAll() {
26831 return Object(_mergeAll__WEBPACK_IMPORTED_MODULE_0__["mergeAll"])(1);
26832}
26833//# sourceMappingURL=concatAll.js.map
26834
26835
26836/***/ }),
26837/* 221 */
26838/***/ (function(module, __webpack_exports__, __webpack_require__) {
26839
26840"use strict";
26841__webpack_require__.r(__webpack_exports__);
26842/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return mergeAll; });
26843/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(222);
26844/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(200);
26845/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */
26846
26847
26848function mergeAll(concurrent) {
26849 if (concurrent === void 0) {
26850 concurrent = Number.POSITIVE_INFINITY;
26851 }
26852 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"], concurrent);
26853}
26854//# sourceMappingURL=mergeAll.js.map
26855
26856
26857/***/ }),
26858/* 222 */
26859/***/ (function(module, __webpack_exports__, __webpack_require__) {
26860
26861"use strict";
26862__webpack_require__.r(__webpack_exports__);
26863/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return mergeMap; });
26864/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapOperator", function() { return MergeMapOperator; });
26865/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapSubscriber", function() { return MergeMapSubscriber; });
26866/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
26867/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(210);
26868/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
26869/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211);
26870/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(206);
26871/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(223);
26872/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */
26873
26874
26875
26876
26877
26878
26879function mergeMap(project, resultSelector, concurrent) {
26880 if (concurrent === void 0) {
26881 concurrent = Number.POSITIVE_INFINITY;
26882 }
26883 if (typeof resultSelector === 'function') {
26884 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)); };
26885 }
26886 else if (typeof resultSelector === 'number') {
26887 concurrent = resultSelector;
26888 }
26889 return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
26890}
26891var MergeMapOperator = /*@__PURE__*/ (function () {
26892 function MergeMapOperator(project, concurrent) {
26893 if (concurrent === void 0) {
26894 concurrent = Number.POSITIVE_INFINITY;
26895 }
26896 this.project = project;
26897 this.concurrent = concurrent;
26898 }
26899 MergeMapOperator.prototype.call = function (observer, source) {
26900 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
26901 };
26902 return MergeMapOperator;
26903}());
26904
26905var MergeMapSubscriber = /*@__PURE__*/ (function (_super) {
26906 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeMapSubscriber, _super);
26907 function MergeMapSubscriber(destination, project, concurrent) {
26908 if (concurrent === void 0) {
26909 concurrent = Number.POSITIVE_INFINITY;
26910 }
26911 var _this = _super.call(this, destination) || this;
26912 _this.project = project;
26913 _this.concurrent = concurrent;
26914 _this.hasCompleted = false;
26915 _this.buffer = [];
26916 _this.active = 0;
26917 _this.index = 0;
26918 return _this;
26919 }
26920 MergeMapSubscriber.prototype._next = function (value) {
26921 if (this.active < this.concurrent) {
26922 this._tryNext(value);
26923 }
26924 else {
26925 this.buffer.push(value);
26926 }
26927 };
26928 MergeMapSubscriber.prototype._tryNext = function (value) {
26929 var result;
26930 var index = this.index++;
26931 try {
26932 result = this.project(value, index);
26933 }
26934 catch (err) {
26935 this.destination.error(err);
26936 return;
26937 }
26938 this.active++;
26939 this._innerSub(result, value, index);
26940 };
26941 MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
26942 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, undefined, undefined);
26943 var destination = this.destination;
26944 destination.add(innerSubscriber);
26945 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, value, index, innerSubscriber);
26946 };
26947 MergeMapSubscriber.prototype._complete = function () {
26948 this.hasCompleted = true;
26949 if (this.active === 0 && this.buffer.length === 0) {
26950 this.destination.complete();
26951 }
26952 this.unsubscribe();
26953 };
26954 MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
26955 this.destination.next(innerValue);
26956 };
26957 MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
26958 var buffer = this.buffer;
26959 this.remove(innerSub);
26960 this.active--;
26961 if (buffer.length > 0) {
26962 this._next(buffer.shift());
26963 }
26964 else if (this.active === 0 && this.hasCompleted) {
26965 this.destination.complete();
26966 }
26967 };
26968 return MergeMapSubscriber;
26969}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
26970
26971//# sourceMappingURL=mergeMap.js.map
26972
26973
26974/***/ }),
26975/* 223 */
26976/***/ (function(module, __webpack_exports__, __webpack_require__) {
26977
26978"use strict";
26979__webpack_require__.r(__webpack_exports__);
26980/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "from", function() { return from; });
26981/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
26982/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
26983/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
26984/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */
26985
26986
26987
26988function from(input, scheduler) {
26989 if (!scheduler) {
26990 if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
26991 return input;
26992 }
26993 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(input));
26994 }
26995 else {
26996 return Object(_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__["scheduled"])(input, scheduler);
26997 }
26998}
26999//# sourceMappingURL=from.js.map
27000
27001
27002/***/ }),
27003/* 224 */
27004/***/ (function(module, __webpack_exports__, __webpack_require__) {
27005
27006"use strict";
27007__webpack_require__.r(__webpack_exports__);
27008/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return scheduled; });
27009/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(225);
27010/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
27011/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(188);
27012/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
27013/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
27014/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(218);
27015/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(217);
27016/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(229);
27017/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */
27018
27019
27020
27021
27022
27023
27024
27025
27026function scheduled(input, scheduler) {
27027 if (input != null) {
27028 if (Object(_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__["isInteropObservable"])(input)) {
27029 return Object(_scheduleObservable__WEBPACK_IMPORTED_MODULE_0__["scheduleObservable"])(input, scheduler);
27030 }
27031 else if (Object(_util_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(input)) {
27032 return Object(_schedulePromise__WEBPACK_IMPORTED_MODULE_1__["schedulePromise"])(input, scheduler);
27033 }
27034 else if (Object(_util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__["isArrayLike"])(input)) {
27035 return Object(_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
27036 }
27037 else if (Object(_util_isIterable__WEBPACK_IMPORTED_MODULE_7__["isIterable"])(input) || typeof input === 'string') {
27038 return Object(_scheduleIterable__WEBPACK_IMPORTED_MODULE_3__["scheduleIterable"])(input, scheduler);
27039 }
27040 }
27041 throw new TypeError((input !== null && typeof input || input) + ' is not observable');
27042}
27043//# sourceMappingURL=scheduled.js.map
27044
27045
27046/***/ }),
27047/* 225 */
27048/***/ (function(module, __webpack_exports__, __webpack_require__) {
27049
27050"use strict";
27051__webpack_require__.r(__webpack_exports__);
27052/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleObservable", function() { return scheduleObservable; });
27053/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27054/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
27055/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(163);
27056/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */
27057
27058
27059
27060function scheduleObservable(input, scheduler) {
27061 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27062 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
27063 sub.add(scheduler.schedule(function () {
27064 var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]();
27065 sub.add(observable.subscribe({
27066 next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
27067 error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
27068 complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
27069 }));
27070 }));
27071 return sub;
27072 });
27073}
27074//# sourceMappingURL=scheduleObservable.js.map
27075
27076
27077/***/ }),
27078/* 226 */
27079/***/ (function(module, __webpack_exports__, __webpack_require__) {
27080
27081"use strict";
27082__webpack_require__.r(__webpack_exports__);
27083/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "schedulePromise", function() { return schedulePromise; });
27084/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27085/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
27086/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
27087
27088
27089function schedulePromise(input, scheduler) {
27090 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27091 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
27092 sub.add(scheduler.schedule(function () {
27093 return input.then(function (value) {
27094 sub.add(scheduler.schedule(function () {
27095 subscriber.next(value);
27096 sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
27097 }));
27098 }, function (err) {
27099 sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
27100 });
27101 }));
27102 return sub;
27103 });
27104}
27105//# sourceMappingURL=schedulePromise.js.map
27106
27107
27108/***/ }),
27109/* 227 */
27110/***/ (function(module, __webpack_exports__, __webpack_require__) {
27111
27112"use strict";
27113__webpack_require__.r(__webpack_exports__);
27114/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleIterable", function() { return scheduleIterable; });
27115/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27116/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
27117/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(215);
27118/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */
27119
27120
27121
27122function scheduleIterable(input, scheduler) {
27123 if (!input) {
27124 throw new Error('Iterable cannot be null');
27125 }
27126 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27127 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
27128 var iterator;
27129 sub.add(function () {
27130 if (iterator && typeof iterator.return === 'function') {
27131 iterator.return();
27132 }
27133 });
27134 sub.add(scheduler.schedule(function () {
27135 iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__["iterator"]]();
27136 sub.add(scheduler.schedule(function () {
27137 if (subscriber.closed) {
27138 return;
27139 }
27140 var value;
27141 var done;
27142 try {
27143 var result = iterator.next();
27144 value = result.value;
27145 done = result.done;
27146 }
27147 catch (err) {
27148 subscriber.error(err);
27149 return;
27150 }
27151 if (done) {
27152 subscriber.complete();
27153 }
27154 else {
27155 subscriber.next(value);
27156 this.schedule();
27157 }
27158 }));
27159 }));
27160 return sub;
27161 });
27162}
27163//# sourceMappingURL=scheduleIterable.js.map
27164
27165
27166/***/ }),
27167/* 228 */
27168/***/ (function(module, __webpack_exports__, __webpack_require__) {
27169
27170"use strict";
27171__webpack_require__.r(__webpack_exports__);
27172/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteropObservable", function() { return isInteropObservable; });
27173/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(163);
27174/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
27175
27176function isInteropObservable(input) {
27177 return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]] === 'function';
27178}
27179//# sourceMappingURL=isInteropObservable.js.map
27180
27181
27182/***/ }),
27183/* 229 */
27184/***/ (function(module, __webpack_exports__, __webpack_require__) {
27185
27186"use strict";
27187__webpack_require__.r(__webpack_exports__);
27188/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIterable", function() { return isIterable; });
27189/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(215);
27190/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
27191
27192function isIterable(input) {
27193 return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]] === 'function';
27194}
27195//# sourceMappingURL=isIterable.js.map
27196
27197
27198/***/ }),
27199/* 230 */
27200/***/ (function(module, __webpack_exports__, __webpack_require__) {
27201
27202"use strict";
27203__webpack_require__.r(__webpack_exports__);
27204/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return defer; });
27205/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27206/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
27207/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(183);
27208/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
27209
27210
27211
27212function defer(observableFactory) {
27213 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27214 var input;
27215 try {
27216 input = observableFactory();
27217 }
27218 catch (err) {
27219 subscriber.error(err);
27220 return undefined;
27221 }
27222 var source = input ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(input) : Object(_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
27223 return source.subscribe(subscriber);
27224 });
27225}
27226//# sourceMappingURL=defer.js.map
27227
27228
27229/***/ }),
27230/* 231 */
27231/***/ (function(module, __webpack_exports__, __webpack_require__) {
27232
27233"use strict";
27234__webpack_require__.r(__webpack_exports__);
27235/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return forkJoin; });
27236/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27237/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(158);
27238/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
27239/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(159);
27240/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(223);
27241/** PURE_IMPORTS_START _Observable,_util_isArray,_operators_map,_util_isObject,_from PURE_IMPORTS_END */
27242
27243
27244
27245
27246
27247function forkJoin() {
27248 var sources = [];
27249 for (var _i = 0; _i < arguments.length; _i++) {
27250 sources[_i] = arguments[_i];
27251 }
27252 if (sources.length === 1) {
27253 var first_1 = sources[0];
27254 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(first_1)) {
27255 return forkJoinInternal(first_1, null);
27256 }
27257 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_3__["isObject"])(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
27258 var keys = Object.keys(first_1);
27259 return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
27260 }
27261 }
27262 if (typeof sources[sources.length - 1] === 'function') {
27263 var resultSelector_1 = sources.pop();
27264 sources = (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(sources[0])) ? sources[0] : sources;
27265 return forkJoinInternal(sources, null).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) { return resultSelector_1.apply(void 0, args); }));
27266 }
27267 return forkJoinInternal(sources, null);
27268}
27269function forkJoinInternal(sources, keys) {
27270 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27271 var len = sources.length;
27272 if (len === 0) {
27273 subscriber.complete();
27274 return;
27275 }
27276 var values = new Array(len);
27277 var completed = 0;
27278 var emitted = 0;
27279 var _loop_1 = function (i) {
27280 var source = Object(_from__WEBPACK_IMPORTED_MODULE_4__["from"])(sources[i]);
27281 var hasValue = false;
27282 subscriber.add(source.subscribe({
27283 next: function (value) {
27284 if (!hasValue) {
27285 hasValue = true;
27286 emitted++;
27287 }
27288 values[i] = value;
27289 },
27290 error: function (err) { return subscriber.error(err); },
27291 complete: function () {
27292 completed++;
27293 if (completed === len || !hasValue) {
27294 if (emitted === len) {
27295 subscriber.next(keys ?
27296 keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
27297 values);
27298 }
27299 subscriber.complete();
27300 }
27301 }
27302 }));
27303 };
27304 for (var i = 0; i < len; i++) {
27305 _loop_1(i);
27306 }
27307 });
27308}
27309//# sourceMappingURL=forkJoin.js.map
27310
27311
27312/***/ }),
27313/* 232 */
27314/***/ (function(module, __webpack_exports__, __webpack_require__) {
27315
27316"use strict";
27317__webpack_require__.r(__webpack_exports__);
27318/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return fromEvent; });
27319/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27320/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(158);
27321/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(153);
27322/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(206);
27323/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
27324
27325
27326
27327
27328var toString = Object.prototype.toString;
27329function fromEvent(target, eventName, options, resultSelector) {
27330 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(options)) {
27331 resultSelector = options;
27332 options = undefined;
27333 }
27334 if (resultSelector) {
27335 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); }));
27336 }
27337 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27338 function handler(e) {
27339 if (arguments.length > 1) {
27340 subscriber.next(Array.prototype.slice.call(arguments));
27341 }
27342 else {
27343 subscriber.next(e);
27344 }
27345 }
27346 setupSubscription(target, eventName, handler, subscriber, options);
27347 });
27348}
27349function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
27350 var unsubscribe;
27351 if (isEventTarget(sourceObj)) {
27352 var source_1 = sourceObj;
27353 sourceObj.addEventListener(eventName, handler, options);
27354 unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
27355 }
27356 else if (isJQueryStyleEventEmitter(sourceObj)) {
27357 var source_2 = sourceObj;
27358 sourceObj.on(eventName, handler);
27359 unsubscribe = function () { return source_2.off(eventName, handler); };
27360 }
27361 else if (isNodeStyleEventEmitter(sourceObj)) {
27362 var source_3 = sourceObj;
27363 sourceObj.addListener(eventName, handler);
27364 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
27365 }
27366 else if (sourceObj && sourceObj.length) {
27367 for (var i = 0, len = sourceObj.length; i < len; i++) {
27368 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
27369 }
27370 }
27371 else {
27372 throw new TypeError('Invalid event target');
27373 }
27374 subscriber.add(unsubscribe);
27375}
27376function isNodeStyleEventEmitter(sourceObj) {
27377 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
27378}
27379function isJQueryStyleEventEmitter(sourceObj) {
27380 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
27381}
27382function isEventTarget(sourceObj) {
27383 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
27384}
27385//# sourceMappingURL=fromEvent.js.map
27386
27387
27388/***/ }),
27389/* 233 */
27390/***/ (function(module, __webpack_exports__, __webpack_require__) {
27391
27392"use strict";
27393__webpack_require__.r(__webpack_exports__);
27394/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return fromEventPattern; });
27395/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27396/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(158);
27397/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(153);
27398/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(206);
27399/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
27400
27401
27402
27403
27404function fromEventPattern(addHandler, removeHandler, resultSelector) {
27405 if (resultSelector) {
27406 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); }));
27407 }
27408 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27409 var handler = function () {
27410 var e = [];
27411 for (var _i = 0; _i < arguments.length; _i++) {
27412 e[_i] = arguments[_i];
27413 }
27414 return subscriber.next(e.length === 1 ? e[0] : e);
27415 };
27416 var retValue;
27417 try {
27418 retValue = addHandler(handler);
27419 }
27420 catch (err) {
27421 subscriber.error(err);
27422 return undefined;
27423 }
27424 if (!Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(removeHandler)) {
27425 return undefined;
27426 }
27427 return function () { return removeHandler(handler, retValue); };
27428 });
27429}
27430//# sourceMappingURL=fromEventPattern.js.map
27431
27432
27433/***/ }),
27434/* 234 */
27435/***/ (function(module, __webpack_exports__, __webpack_require__) {
27436
27437"use strict";
27438__webpack_require__.r(__webpack_exports__);
27439/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });
27440/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27441/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(200);
27442/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
27443/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
27444
27445
27446
27447function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
27448 var resultSelector;
27449 var initialState;
27450 if (arguments.length == 1) {
27451 var options = initialStateOrOptions;
27452 initialState = options.initialState;
27453 condition = options.condition;
27454 iterate = options.iterate;
27455 resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
27456 scheduler = options.scheduler;
27457 }
27458 else if (resultSelectorOrObservable === undefined || Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(resultSelectorOrObservable)) {
27459 initialState = initialStateOrOptions;
27460 resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
27461 scheduler = resultSelectorOrObservable;
27462 }
27463 else {
27464 initialState = initialStateOrOptions;
27465 resultSelector = resultSelectorOrObservable;
27466 }
27467 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27468 var state = initialState;
27469 if (scheduler) {
27470 return scheduler.schedule(dispatch, 0, {
27471 subscriber: subscriber,
27472 iterate: iterate,
27473 condition: condition,
27474 resultSelector: resultSelector,
27475 state: state
27476 });
27477 }
27478 do {
27479 if (condition) {
27480 var conditionResult = void 0;
27481 try {
27482 conditionResult = condition(state);
27483 }
27484 catch (err) {
27485 subscriber.error(err);
27486 return undefined;
27487 }
27488 if (!conditionResult) {
27489 subscriber.complete();
27490 break;
27491 }
27492 }
27493 var value = void 0;
27494 try {
27495 value = resultSelector(state);
27496 }
27497 catch (err) {
27498 subscriber.error(err);
27499 return undefined;
27500 }
27501 subscriber.next(value);
27502 if (subscriber.closed) {
27503 break;
27504 }
27505 try {
27506 state = iterate(state);
27507 }
27508 catch (err) {
27509 subscriber.error(err);
27510 return undefined;
27511 }
27512 } while (true);
27513 return undefined;
27514 });
27515}
27516function dispatch(state) {
27517 var subscriber = state.subscriber, condition = state.condition;
27518 if (subscriber.closed) {
27519 return undefined;
27520 }
27521 if (state.needIterate) {
27522 try {
27523 state.state = state.iterate(state.state);
27524 }
27525 catch (err) {
27526 subscriber.error(err);
27527 return undefined;
27528 }
27529 }
27530 else {
27531 state.needIterate = true;
27532 }
27533 if (condition) {
27534 var conditionResult = void 0;
27535 try {
27536 conditionResult = condition(state.state);
27537 }
27538 catch (err) {
27539 subscriber.error(err);
27540 return undefined;
27541 }
27542 if (!conditionResult) {
27543 subscriber.complete();
27544 return undefined;
27545 }
27546 if (subscriber.closed) {
27547 return undefined;
27548 }
27549 }
27550 var value;
27551 try {
27552 value = state.resultSelector(state.state);
27553 }
27554 catch (err) {
27555 subscriber.error(err);
27556 return undefined;
27557 }
27558 if (subscriber.closed) {
27559 return undefined;
27560 }
27561 subscriber.next(value);
27562 if (subscriber.closed) {
27563 return undefined;
27564 }
27565 return this.schedule(state);
27566}
27567//# sourceMappingURL=generate.js.map
27568
27569
27570/***/ }),
27571/* 235 */
27572/***/ (function(module, __webpack_exports__, __webpack_require__) {
27573
27574"use strict";
27575__webpack_require__.r(__webpack_exports__);
27576/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return iif; });
27577/* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(230);
27578/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
27579/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */
27580
27581
27582function iif(condition, trueResult, falseResult) {
27583 if (trueResult === void 0) {
27584 trueResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
27585 }
27586 if (falseResult === void 0) {
27587 falseResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
27588 }
27589 return Object(_defer__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { return condition() ? trueResult : falseResult; });
27590}
27591//# sourceMappingURL=iif.js.map
27592
27593
27594/***/ }),
27595/* 236 */
27596/***/ (function(module, __webpack_exports__, __webpack_require__) {
27597
27598"use strict";
27599__webpack_require__.r(__webpack_exports__);
27600/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return interval; });
27601/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27602/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
27603/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(237);
27604/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */
27605
27606
27607
27608function interval(period, scheduler) {
27609 if (period === void 0) {
27610 period = 0;
27611 }
27612 if (scheduler === void 0) {
27613 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
27614 }
27615 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(period) || period < 0) {
27616 period = 0;
27617 }
27618 if (!scheduler || typeof scheduler.schedule !== 'function') {
27619 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
27620 }
27621 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27622 subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));
27623 return subscriber;
27624 });
27625}
27626function dispatch(state) {
27627 var subscriber = state.subscriber, counter = state.counter, period = state.period;
27628 subscriber.next(counter);
27629 this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
27630}
27631//# sourceMappingURL=interval.js.map
27632
27633
27634/***/ }),
27635/* 237 */
27636/***/ (function(module, __webpack_exports__, __webpack_require__) {
27637
27638"use strict";
27639__webpack_require__.r(__webpack_exports__);
27640/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNumeric", function() { return isNumeric; });
27641/* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(158);
27642/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */
27643
27644function isNumeric(val) {
27645 return !Object(_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) && (val - parseFloat(val) + 1) >= 0;
27646}
27647//# sourceMappingURL=isNumeric.js.map
27648
27649
27650/***/ }),
27651/* 238 */
27652/***/ (function(module, __webpack_exports__, __webpack_require__) {
27653
27654"use strict";
27655__webpack_require__.r(__webpack_exports__);
27656/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
27657/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27658/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
27659/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(221);
27660/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(186);
27661/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */
27662
27663
27664
27665
27666function merge() {
27667 var observables = [];
27668 for (var _i = 0; _i < arguments.length; _i++) {
27669 observables[_i] = arguments[_i];
27670 }
27671 var concurrent = Number.POSITIVE_INFINITY;
27672 var scheduler = null;
27673 var last = observables[observables.length - 1];
27674 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(last)) {
27675 scheduler = observables.pop();
27676 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
27677 concurrent = observables.pop();
27678 }
27679 }
27680 else if (typeof last === 'number') {
27681 concurrent = observables.pop();
27682 }
27683 if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
27684 return observables[0];
27685 }
27686 return Object(_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__["mergeAll"])(concurrent)(Object(_fromArray__WEBPACK_IMPORTED_MODULE_3__["fromArray"])(observables, scheduler));
27687}
27688//# sourceMappingURL=merge.js.map
27689
27690
27691/***/ }),
27692/* 239 */
27693/***/ (function(module, __webpack_exports__, __webpack_require__) {
27694
27695"use strict";
27696__webpack_require__.r(__webpack_exports__);
27697/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return NEVER; });
27698/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "never", function() { return never; });
27699/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27700/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(165);
27701/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */
27702
27703
27704var NEVER = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](_util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"]);
27705function never() {
27706 return NEVER;
27707}
27708//# sourceMappingURL=never.js.map
27709
27710
27711/***/ }),
27712/* 240 */
27713/***/ (function(module, __webpack_exports__, __webpack_require__) {
27714
27715"use strict";
27716__webpack_require__.r(__webpack_exports__);
27717/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
27718/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27719/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
27720/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(158);
27721/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(183);
27722/** PURE_IMPORTS_START _Observable,_from,_util_isArray,_empty PURE_IMPORTS_END */
27723
27724
27725
27726
27727function onErrorResumeNext() {
27728 var sources = [];
27729 for (var _i = 0; _i < arguments.length; _i++) {
27730 sources[_i] = arguments[_i];
27731 }
27732 if (sources.length === 0) {
27733 return _empty__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
27734 }
27735 var first = sources[0], remainder = sources.slice(1);
27736 if (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(first)) {
27737 return onErrorResumeNext.apply(void 0, first);
27738 }
27739 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27740 var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
27741 return Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(first).subscribe({
27742 next: function (value) { subscriber.next(value); },
27743 error: subNext,
27744 complete: subNext,
27745 });
27746 });
27747}
27748//# sourceMappingURL=onErrorResumeNext.js.map
27749
27750
27751/***/ }),
27752/* 241 */
27753/***/ (function(module, __webpack_exports__, __webpack_require__) {
27754
27755"use strict";
27756__webpack_require__.r(__webpack_exports__);
27757/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return pairs; });
27758/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
27759/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
27760/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
27761/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
27762
27763
27764function pairs(obj, scheduler) {
27765 if (!scheduler) {
27766 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27767 var keys = Object.keys(obj);
27768 for (var i = 0; i < keys.length && !subscriber.closed; i++) {
27769 var key = keys[i];
27770 if (obj.hasOwnProperty(key)) {
27771 subscriber.next([key, obj[key]]);
27772 }
27773 }
27774 subscriber.complete();
27775 });
27776 }
27777 else {
27778 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
27779 var keys = Object.keys(obj);
27780 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
27781 subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
27782 return subscription;
27783 });
27784 }
27785}
27786function dispatch(state) {
27787 var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
27788 if (!subscriber.closed) {
27789 if (index < keys.length) {
27790 var key = keys[index];
27791 subscriber.next([key, obj[key]]);
27792 subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
27793 }
27794 else {
27795 subscriber.complete();
27796 }
27797 }
27798}
27799//# sourceMappingURL=pairs.js.map
27800
27801
27802/***/ }),
27803/* 242 */
27804/***/ (function(module, __webpack_exports__, __webpack_require__) {
27805
27806"use strict";
27807__webpack_require__.r(__webpack_exports__);
27808/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
27809/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
27810/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
27811/* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(244);
27812/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(149);
27813/** PURE_IMPORTS_START _util_not,_util_subscribeTo,_operators_filter,_Observable PURE_IMPORTS_END */
27814
27815
27816
27817
27818function partition(source, predicate, thisArg) {
27819 return [
27820 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))),
27821 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)))
27822 ];
27823}
27824//# sourceMappingURL=partition.js.map
27825
27826
27827/***/ }),
27828/* 243 */
27829/***/ (function(module, __webpack_exports__, __webpack_require__) {
27830
27831"use strict";
27832__webpack_require__.r(__webpack_exports__);
27833/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "not", function() { return not; });
27834/** PURE_IMPORTS_START PURE_IMPORTS_END */
27835function not(pred, thisArg) {
27836 function notPred() {
27837 return !(notPred.pred.apply(notPred.thisArg, arguments));
27838 }
27839 notPred.pred = pred;
27840 notPred.thisArg = thisArg;
27841 return notPred;
27842}
27843//# sourceMappingURL=not.js.map
27844
27845
27846/***/ }),
27847/* 244 */
27848/***/ (function(module, __webpack_exports__, __webpack_require__) {
27849
27850"use strict";
27851__webpack_require__.r(__webpack_exports__);
27852/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return filter; });
27853/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
27854/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
27855/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
27856
27857
27858function filter(predicate, thisArg) {
27859 return function filterOperatorFunction(source) {
27860 return source.lift(new FilterOperator(predicate, thisArg));
27861 };
27862}
27863var FilterOperator = /*@__PURE__*/ (function () {
27864 function FilterOperator(predicate, thisArg) {
27865 this.predicate = predicate;
27866 this.thisArg = thisArg;
27867 }
27868 FilterOperator.prototype.call = function (subscriber, source) {
27869 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
27870 };
27871 return FilterOperator;
27872}());
27873var FilterSubscriber = /*@__PURE__*/ (function (_super) {
27874 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FilterSubscriber, _super);
27875 function FilterSubscriber(destination, predicate, thisArg) {
27876 var _this = _super.call(this, destination) || this;
27877 _this.predicate = predicate;
27878 _this.thisArg = thisArg;
27879 _this.count = 0;
27880 return _this;
27881 }
27882 FilterSubscriber.prototype._next = function (value) {
27883 var result;
27884 try {
27885 result = this.predicate.call(this.thisArg, value, this.count++);
27886 }
27887 catch (err) {
27888 this.destination.error(err);
27889 return;
27890 }
27891 if (result) {
27892 this.destination.next(value);
27893 }
27894 };
27895 return FilterSubscriber;
27896}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
27897//# sourceMappingURL=filter.js.map
27898
27899
27900/***/ }),
27901/* 245 */
27902/***/ (function(module, __webpack_exports__, __webpack_require__) {
27903
27904"use strict";
27905__webpack_require__.r(__webpack_exports__);
27906/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
27907/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceOperator", function() { return RaceOperator; });
27908/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceSubscriber", function() { return RaceSubscriber; });
27909/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
27910/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(158);
27911/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
27912/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
27913/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(210);
27914/** PURE_IMPORTS_START tslib,_util_isArray,_fromArray,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
27915
27916
27917
27918
27919
27920function race() {
27921 var observables = [];
27922 for (var _i = 0; _i < arguments.length; _i++) {
27923 observables[_i] = arguments[_i];
27924 }
27925 if (observables.length === 1) {
27926 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(observables[0])) {
27927 observables = observables[0];
27928 }
27929 else {
27930 return observables[0];
27931 }
27932 }
27933 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_2__["fromArray"])(observables, undefined).lift(new RaceOperator());
27934}
27935var RaceOperator = /*@__PURE__*/ (function () {
27936 function RaceOperator() {
27937 }
27938 RaceOperator.prototype.call = function (subscriber, source) {
27939 return source.subscribe(new RaceSubscriber(subscriber));
27940 };
27941 return RaceOperator;
27942}());
27943
27944var RaceSubscriber = /*@__PURE__*/ (function (_super) {
27945 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RaceSubscriber, _super);
27946 function RaceSubscriber(destination) {
27947 var _this = _super.call(this, destination) || this;
27948 _this.hasFirst = false;
27949 _this.observables = [];
27950 _this.subscriptions = [];
27951 return _this;
27952 }
27953 RaceSubscriber.prototype._next = function (observable) {
27954 this.observables.push(observable);
27955 };
27956 RaceSubscriber.prototype._complete = function () {
27957 var observables = this.observables;
27958 var len = observables.length;
27959 if (len === 0) {
27960 this.destination.complete();
27961 }
27962 else {
27963 for (var i = 0; i < len && !this.hasFirst; i++) {
27964 var observable = observables[i];
27965 var subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i);
27966 if (this.subscriptions) {
27967 this.subscriptions.push(subscription);
27968 }
27969 this.add(subscription);
27970 }
27971 this.observables = null;
27972 }
27973 };
27974 RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
27975 if (!this.hasFirst) {
27976 this.hasFirst = true;
27977 for (var i = 0; i < this.subscriptions.length; i++) {
27978 if (i !== outerIndex) {
27979 var subscription = this.subscriptions[i];
27980 subscription.unsubscribe();
27981 this.remove(subscription);
27982 }
27983 }
27984 this.subscriptions = null;
27985 }
27986 this.destination.next(innerValue);
27987 };
27988 return RaceSubscriber;
27989}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
27990
27991//# sourceMappingURL=race.js.map
27992
27993
27994/***/ }),
27995/* 246 */
27996/***/ (function(module, __webpack_exports__, __webpack_require__) {
27997
27998"use strict";
27999__webpack_require__.r(__webpack_exports__);
28000/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "range", function() { return range; });
28001/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
28002/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
28003/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
28004
28005function range(start, count, scheduler) {
28006 if (start === void 0) {
28007 start = 0;
28008 }
28009 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
28010 if (count === undefined) {
28011 count = start;
28012 start = 0;
28013 }
28014 var index = 0;
28015 var current = start;
28016 if (scheduler) {
28017 return scheduler.schedule(dispatch, 0, {
28018 index: index, count: count, start: start, subscriber: subscriber
28019 });
28020 }
28021 else {
28022 do {
28023 if (index++ >= count) {
28024 subscriber.complete();
28025 break;
28026 }
28027 subscriber.next(current++);
28028 if (subscriber.closed) {
28029 break;
28030 }
28031 } while (true);
28032 }
28033 return undefined;
28034 });
28035}
28036function dispatch(state) {
28037 var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
28038 if (index >= count) {
28039 subscriber.complete();
28040 return;
28041 }
28042 subscriber.next(start);
28043 if (subscriber.closed) {
28044 return;
28045 }
28046 state.index = index + 1;
28047 state.start = start + 1;
28048 this.schedule(state);
28049}
28050//# sourceMappingURL=range.js.map
28051
28052
28053/***/ }),
28054/* 247 */
28055/***/ (function(module, __webpack_exports__, __webpack_require__) {
28056
28057"use strict";
28058__webpack_require__.r(__webpack_exports__);
28059/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; });
28060/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
28061/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
28062/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(237);
28063/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(185);
28064/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
28065
28066
28067
28068
28069function timer(dueTime, periodOrScheduler, scheduler) {
28070 if (dueTime === void 0) {
28071 dueTime = 0;
28072 }
28073 var period = -1;
28074 if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(periodOrScheduler)) {
28075 period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
28076 }
28077 else if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(periodOrScheduler)) {
28078 scheduler = periodOrScheduler;
28079 }
28080 if (!Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(scheduler)) {
28081 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
28082 }
28083 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
28084 var due = Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(dueTime)
28085 ? dueTime
28086 : (+dueTime - scheduler.now());
28087 return scheduler.schedule(dispatch, due, {
28088 index: 0, period: period, subscriber: subscriber
28089 });
28090 });
28091}
28092function dispatch(state) {
28093 var index = state.index, period = state.period, subscriber = state.subscriber;
28094 subscriber.next(index);
28095 if (subscriber.closed) {
28096 return;
28097 }
28098 else if (period === -1) {
28099 return subscriber.complete();
28100 }
28101 state.index = index + 1;
28102 this.schedule(state, period);
28103}
28104//# sourceMappingURL=timer.js.map
28105
28106
28107/***/ }),
28108/* 248 */
28109/***/ (function(module, __webpack_exports__, __webpack_require__) {
28110
28111"use strict";
28112__webpack_require__.r(__webpack_exports__);
28113/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "using", function() { return using; });
28114/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(149);
28115/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
28116/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(183);
28117/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
28118
28119
28120
28121function using(resourceFactory, observableFactory) {
28122 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
28123 var resource;
28124 try {
28125 resource = resourceFactory();
28126 }
28127 catch (err) {
28128 subscriber.error(err);
28129 return undefined;
28130 }
28131 var result;
28132 try {
28133 result = observableFactory(resource);
28134 }
28135 catch (err) {
28136 subscriber.error(err);
28137 return undefined;
28138 }
28139 var source = result ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(result) : _empty__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
28140 var subscription = source.subscribe(subscriber);
28141 return function () {
28142 subscription.unsubscribe();
28143 if (resource) {
28144 resource.unsubscribe();
28145 }
28146 };
28147 });
28148}
28149//# sourceMappingURL=using.js.map
28150
28151
28152/***/ }),
28153/* 249 */
28154/***/ (function(module, __webpack_exports__, __webpack_require__) {
28155
28156"use strict";
28157__webpack_require__.r(__webpack_exports__);
28158/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
28159/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipOperator", function() { return ZipOperator; });
28160/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipSubscriber", function() { return ZipSubscriber; });
28161/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
28162/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(186);
28163/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(158);
28164/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(151);
28165/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(209);
28166/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(210);
28167/* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(215);
28168/** PURE_IMPORTS_START tslib,_fromArray,_util_isArray,_Subscriber,_OuterSubscriber,_util_subscribeToResult,_.._internal_symbol_iterator PURE_IMPORTS_END */
28169
28170
28171
28172
28173
28174
28175
28176function zip() {
28177 var observables = [];
28178 for (var _i = 0; _i < arguments.length; _i++) {
28179 observables[_i] = arguments[_i];
28180 }
28181 var resultSelector = observables[observables.length - 1];
28182 if (typeof resultSelector === 'function') {
28183 observables.pop();
28184 }
28185 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(observables, undefined).lift(new ZipOperator(resultSelector));
28186}
28187var ZipOperator = /*@__PURE__*/ (function () {
28188 function ZipOperator(resultSelector) {
28189 this.resultSelector = resultSelector;
28190 }
28191 ZipOperator.prototype.call = function (subscriber, source) {
28192 return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
28193 };
28194 return ZipOperator;
28195}());
28196
28197var ZipSubscriber = /*@__PURE__*/ (function (_super) {
28198 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipSubscriber, _super);
28199 function ZipSubscriber(destination, resultSelector, values) {
28200 if (values === void 0) {
28201 values = Object.create(null);
28202 }
28203 var _this = _super.call(this, destination) || this;
28204 _this.iterators = [];
28205 _this.active = 0;
28206 _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
28207 _this.values = values;
28208 return _this;
28209 }
28210 ZipSubscriber.prototype._next = function (value) {
28211 var iterators = this.iterators;
28212 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(value)) {
28213 iterators.push(new StaticArrayIterator(value));
28214 }
28215 else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] === 'function') {
28216 iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]]()));
28217 }
28218 else {
28219 iterators.push(new ZipBufferIterator(this.destination, this, value));
28220 }
28221 };
28222 ZipSubscriber.prototype._complete = function () {
28223 var iterators = this.iterators;
28224 var len = iterators.length;
28225 this.unsubscribe();
28226 if (len === 0) {
28227 this.destination.complete();
28228 return;
28229 }
28230 this.active = len;
28231 for (var i = 0; i < len; i++) {
28232 var iterator = iterators[i];
28233 if (iterator.stillUnsubscribed) {
28234 var destination = this.destination;
28235 destination.add(iterator.subscribe(iterator, i));
28236 }
28237 else {
28238 this.active--;
28239 }
28240 }
28241 };
28242 ZipSubscriber.prototype.notifyInactive = function () {
28243 this.active--;
28244 if (this.active === 0) {
28245 this.destination.complete();
28246 }
28247 };
28248 ZipSubscriber.prototype.checkIterators = function () {
28249 var iterators = this.iterators;
28250 var len = iterators.length;
28251 var destination = this.destination;
28252 for (var i = 0; i < len; i++) {
28253 var iterator = iterators[i];
28254 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
28255 return;
28256 }
28257 }
28258 var shouldComplete = false;
28259 var args = [];
28260 for (var i = 0; i < len; i++) {
28261 var iterator = iterators[i];
28262 var result = iterator.next();
28263 if (iterator.hasCompleted()) {
28264 shouldComplete = true;
28265 }
28266 if (result.done) {
28267 destination.complete();
28268 return;
28269 }
28270 args.push(result.value);
28271 }
28272 if (this.resultSelector) {
28273 this._tryresultSelector(args);
28274 }
28275 else {
28276 destination.next(args);
28277 }
28278 if (shouldComplete) {
28279 destination.complete();
28280 }
28281 };
28282 ZipSubscriber.prototype._tryresultSelector = function (args) {
28283 var result;
28284 try {
28285 result = this.resultSelector.apply(this, args);
28286 }
28287 catch (err) {
28288 this.destination.error(err);
28289 return;
28290 }
28291 this.destination.next(result);
28292 };
28293 return ZipSubscriber;
28294}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
28295
28296var StaticIterator = /*@__PURE__*/ (function () {
28297 function StaticIterator(iterator) {
28298 this.iterator = iterator;
28299 this.nextResult = iterator.next();
28300 }
28301 StaticIterator.prototype.hasValue = function () {
28302 return true;
28303 };
28304 StaticIterator.prototype.next = function () {
28305 var result = this.nextResult;
28306 this.nextResult = this.iterator.next();
28307 return result;
28308 };
28309 StaticIterator.prototype.hasCompleted = function () {
28310 var nextResult = this.nextResult;
28311 return nextResult && nextResult.done;
28312 };
28313 return StaticIterator;
28314}());
28315var StaticArrayIterator = /*@__PURE__*/ (function () {
28316 function StaticArrayIterator(array) {
28317 this.array = array;
28318 this.index = 0;
28319 this.length = 0;
28320 this.length = array.length;
28321 }
28322 StaticArrayIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
28323 return this;
28324 };
28325 StaticArrayIterator.prototype.next = function (value) {
28326 var i = this.index++;
28327 var array = this.array;
28328 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
28329 };
28330 StaticArrayIterator.prototype.hasValue = function () {
28331 return this.array.length > this.index;
28332 };
28333 StaticArrayIterator.prototype.hasCompleted = function () {
28334 return this.array.length === this.index;
28335 };
28336 return StaticArrayIterator;
28337}());
28338var ZipBufferIterator = /*@__PURE__*/ (function (_super) {
28339 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipBufferIterator, _super);
28340 function ZipBufferIterator(destination, parent, observable) {
28341 var _this = _super.call(this, destination) || this;
28342 _this.parent = parent;
28343 _this.observable = observable;
28344 _this.stillUnsubscribed = true;
28345 _this.buffer = [];
28346 _this.isComplete = false;
28347 return _this;
28348 }
28349 ZipBufferIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
28350 return this;
28351 };
28352 ZipBufferIterator.prototype.next = function () {
28353 var buffer = this.buffer;
28354 if (buffer.length === 0 && this.isComplete) {
28355 return { value: null, done: true };
28356 }
28357 else {
28358 return { value: buffer.shift(), done: false };
28359 }
28360 };
28361 ZipBufferIterator.prototype.hasValue = function () {
28362 return this.buffer.length > 0;
28363 };
28364 ZipBufferIterator.prototype.hasCompleted = function () {
28365 return this.buffer.length === 0 && this.isComplete;
28366 };
28367 ZipBufferIterator.prototype.notifyComplete = function () {
28368 if (this.buffer.length > 0) {
28369 this.isComplete = true;
28370 this.parent.notifyInactive();
28371 }
28372 else {
28373 this.destination.complete();
28374 }
28375 };
28376 ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
28377 this.buffer.push(innerValue);
28378 this.parent.checkIterators();
28379 };
28380 ZipBufferIterator.prototype.subscribe = function (value, index) {
28381 return Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, this.observable, this, index);
28382 };
28383 return ZipBufferIterator;
28384}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__["OuterSubscriber"]));
28385//# sourceMappingURL=zip.js.map
28386
28387
28388/***/ }),
28389/* 250 */
28390/***/ (function(module, exports, __webpack_require__) {
28391
28392"use strict";
28393
28394Object.defineProperty(exports, "__esModule", { value: true });
28395var rxjs_1 = __webpack_require__(148);
28396/**
28397 *
28398 * only keep the lastest source observable value until the inner observable complete,
28399 * then trigger the lastest source observable value
28400 *
28401 * @param isAbandon - is abandon inner observable value when there is newer source observable value
28402 *
28403 */
28404function waitMap(fn, isAbandon) {
28405 if (isAbandon === void 0) { isAbandon = true; }
28406 return function (preObs) {
28407 return rxjs_1.Observable.create(function (observer) {
28408 var closed = false;
28409 var latestRes;
28410 var resultSubp;
28411 var subp;
28412 var run = function (res) {
28413 var obs = fn(res);
28414 return obs.subscribe({
28415 next: function (res) {
28416 if (latestRes !== undefined && isAbandon) {
28417 return;
28418 }
28419 observer.next(res);
28420 },
28421 error: function (err) {
28422 closed = true;
28423 observer.error(err);
28424 resultSubp.unsubscribe();
28425 },
28426 complete: function () {
28427 if (latestRes && !closed) {
28428 var res_1 = latestRes;
28429 latestRes = undefined;
28430 run(res_1);
28431 }
28432 }
28433 });
28434 };
28435 resultSubp = preObs.subscribe({
28436 next: function (res) {
28437 latestRes = res;
28438 if (!subp || subp.closed) {
28439 latestRes = undefined;
28440 subp = run(res);
28441 }
28442 },
28443 error: function (err) {
28444 closed = true;
28445 observer.error(err);
28446 },
28447 complete: function () {
28448 closed = true;
28449 observer.complete();
28450 }
28451 });
28452 return resultSubp;
28453 });
28454 };
28455}
28456exports.waitMap = waitMap;
28457
28458
28459/***/ }),
28460/* 251 */
28461/***/ (function(module, __webpack_exports__, __webpack_require__) {
28462
28463"use strict";
28464__webpack_require__.r(__webpack_exports__);
28465/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(252);
28466/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; });
28467
28468/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(253);
28469/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; });
28470
28471/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(254);
28472/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; });
28473
28474/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(255);
28475/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; });
28476
28477/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(256);
28478/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; });
28479
28480/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(257);
28481/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; });
28482
28483/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(258);
28484/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; });
28485
28486/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(259);
28487/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; });
28488
28489/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(260);
28490/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; });
28491
28492/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(261);
28493/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; });
28494
28495/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(262);
28496/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; });
28497
28498/* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(220);
28499/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; });
28500
28501/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(263);
28502/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; });
28503
28504/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(264);
28505/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; });
28506
28507/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(265);
28508/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; });
28509
28510/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(266);
28511/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; });
28512
28513/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(267);
28514/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; });
28515
28516/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(268);
28517/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; });
28518
28519/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(269);
28520/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; });
28521
28522/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(271);
28523/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; });
28524
28525/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(272);
28526/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; });
28527
28528/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(273);
28529/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; });
28530
28531/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(274);
28532/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; });
28533
28534/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(275);
28535/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; });
28536
28537/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(276);
28538/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; });
28539
28540/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(279);
28541/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; });
28542
28543/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(280);
28544/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; });
28545
28546/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(281);
28547/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; });
28548
28549/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(282);
28550/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; });
28551
28552/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(283);
28553/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; });
28554
28555/* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(244);
28556/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; });
28557
28558/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(284);
28559/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; });
28560
28561/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(285);
28562/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; });
28563
28564/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(286);
28565/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; });
28566
28567/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(287);
28568/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; });
28569
28570/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(171);
28571/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; });
28572
28573/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(288);
28574/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; });
28575
28576/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(289);
28577/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; });
28578
28579/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(290);
28580/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; });
28581
28582/* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(206);
28583/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; });
28584
28585/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(292);
28586/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; });
28587
28588/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(293);
28589/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; });
28590
28591/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(294);
28592/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; });
28593
28594/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(297);
28595/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; });
28596
28597/* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(221);
28598/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__["mergeAll"]; });
28599
28600/* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(222);
28601/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
28602
28603/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
28604
28605/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(298);
28606/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; });
28607
28608/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(299);
28609/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; });
28610
28611/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(300);
28612/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; });
28613
28614/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(301);
28615/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; });
28616
28617/* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(181);
28618/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; });
28619
28620/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(302);
28621/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; });
28622
28623/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(303);
28624/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; });
28625
28626/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(304);
28627/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; });
28628
28629/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(305);
28630/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; });
28631
28632/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(306);
28633/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; });
28634
28635/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(307);
28636/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; });
28637
28638/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(308);
28639/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; });
28640
28641/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(309);
28642/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; });
28643
28644/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(310);
28645/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; });
28646
28647/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(295);
28648/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; });
28649
28650/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(311);
28651/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; });
28652
28653/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(312);
28654/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; });
28655
28656/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(313);
28657/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; });
28658
28659/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(314);
28660/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; });
28661
28662/* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(170);
28663/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; });
28664
28665/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(315);
28666/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; });
28667
28668/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(316);
28669/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; });
28670
28671/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(296);
28672/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; });
28673
28674/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(317);
28675/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; });
28676
28677/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(318);
28678/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; });
28679
28680/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(319);
28681/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; });
28682
28683/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(320);
28684/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; });
28685
28686/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(321);
28687/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; });
28688
28689/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(322);
28690/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; });
28691
28692/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(323);
28693/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; });
28694
28695/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(324);
28696/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; });
28697
28698/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(325);
28699/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; });
28700
28701/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(326);
28702/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; });
28703
28704/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(328);
28705/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; });
28706
28707/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(329);
28708/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; });
28709
28710/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(330);
28711/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; });
28712
28713/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(278);
28714/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; });
28715
28716/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(291);
28717/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; });
28718
28719/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(331);
28720/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; });
28721
28722/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(332);
28723/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; });
28724
28725/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(333);
28726/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; });
28727
28728/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(334);
28729/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; });
28730
28731/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(335);
28732/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; });
28733
28734/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(277);
28735/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; });
28736
28737/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(336);
28738/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; });
28739
28740/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(337);
28741/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; });
28742
28743/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(338);
28744/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; });
28745
28746/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(339);
28747/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; });
28748
28749/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(340);
28750/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; });
28751
28752/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(341);
28753/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; });
28754
28755/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(342);
28756/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; });
28757
28758/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(343);
28759/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; });
28760
28761/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(344);
28762/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; });
28763
28764/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(345);
28765/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; });
28766
28767/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(346);
28768/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; });
28769
28770/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(347);
28771/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; });
28772
28773/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(348);
28774/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; });
28775
28776/** PURE_IMPORTS_START PURE_IMPORTS_END */
28777
28778
28779
28780
28781
28782
28783
28784
28785
28786
28787
28788
28789
28790
28791
28792
28793
28794
28795
28796
28797
28798
28799
28800
28801
28802
28803
28804
28805
28806
28807
28808
28809
28810
28811
28812
28813
28814
28815
28816
28817
28818
28819
28820
28821
28822
28823
28824
28825
28826
28827
28828
28829
28830
28831
28832
28833
28834
28835
28836
28837
28838
28839
28840
28841
28842
28843
28844
28845
28846
28847
28848
28849
28850
28851
28852
28853
28854
28855
28856
28857
28858
28859
28860
28861
28862
28863
28864
28865
28866
28867
28868
28869
28870
28871
28872
28873
28874
28875
28876
28877
28878
28879
28880
28881//# sourceMappingURL=index.js.map
28882
28883
28884/***/ }),
28885/* 252 */
28886/***/ (function(module, __webpack_exports__, __webpack_require__) {
28887
28888"use strict";
28889__webpack_require__.r(__webpack_exports__);
28890/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return audit; });
28891/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
28892/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
28893/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
28894/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
28895
28896
28897
28898function audit(durationSelector) {
28899 return function auditOperatorFunction(source) {
28900 return source.lift(new AuditOperator(durationSelector));
28901 };
28902}
28903var AuditOperator = /*@__PURE__*/ (function () {
28904 function AuditOperator(durationSelector) {
28905 this.durationSelector = durationSelector;
28906 }
28907 AuditOperator.prototype.call = function (subscriber, source) {
28908 return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
28909 };
28910 return AuditOperator;
28911}());
28912var AuditSubscriber = /*@__PURE__*/ (function (_super) {
28913 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AuditSubscriber, _super);
28914 function AuditSubscriber(destination, durationSelector) {
28915 var _this = _super.call(this, destination) || this;
28916 _this.durationSelector = durationSelector;
28917 _this.hasValue = false;
28918 return _this;
28919 }
28920 AuditSubscriber.prototype._next = function (value) {
28921 this.value = value;
28922 this.hasValue = true;
28923 if (!this.throttled) {
28924 var duration = void 0;
28925 try {
28926 var durationSelector = this.durationSelector;
28927 duration = durationSelector(value);
28928 }
28929 catch (err) {
28930 return this.destination.error(err);
28931 }
28932 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
28933 if (!innerSubscription || innerSubscription.closed) {
28934 this.clearThrottle();
28935 }
28936 else {
28937 this.add(this.throttled = innerSubscription);
28938 }
28939 }
28940 };
28941 AuditSubscriber.prototype.clearThrottle = function () {
28942 var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
28943 if (throttled) {
28944 this.remove(throttled);
28945 this.throttled = null;
28946 throttled.unsubscribe();
28947 }
28948 if (hasValue) {
28949 this.value = null;
28950 this.hasValue = false;
28951 this.destination.next(value);
28952 }
28953 };
28954 AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
28955 this.clearThrottle();
28956 };
28957 AuditSubscriber.prototype.notifyComplete = function () {
28958 this.clearThrottle();
28959 };
28960 return AuditSubscriber;
28961}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
28962//# sourceMappingURL=audit.js.map
28963
28964
28965/***/ }),
28966/* 253 */
28967/***/ (function(module, __webpack_exports__, __webpack_require__) {
28968
28969"use strict";
28970__webpack_require__.r(__webpack_exports__);
28971/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; });
28972/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
28973/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(252);
28974/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(247);
28975/** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */
28976
28977
28978
28979function auditTime(duration, scheduler) {
28980 if (scheduler === void 0) {
28981 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
28982 }
28983 return Object(_audit__WEBPACK_IMPORTED_MODULE_1__["audit"])(function () { return Object(_observable_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(duration, scheduler); });
28984}
28985//# sourceMappingURL=auditTime.js.map
28986
28987
28988/***/ }),
28989/* 254 */
28990/***/ (function(module, __webpack_exports__, __webpack_require__) {
28991
28992"use strict";
28993__webpack_require__.r(__webpack_exports__);
28994/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return buffer; });
28995/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
28996/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
28997/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
28998/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
28999
29000
29001
29002function buffer(closingNotifier) {
29003 return function bufferOperatorFunction(source) {
29004 return source.lift(new BufferOperator(closingNotifier));
29005 };
29006}
29007var BufferOperator = /*@__PURE__*/ (function () {
29008 function BufferOperator(closingNotifier) {
29009 this.closingNotifier = closingNotifier;
29010 }
29011 BufferOperator.prototype.call = function (subscriber, source) {
29012 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
29013 };
29014 return BufferOperator;
29015}());
29016var BufferSubscriber = /*@__PURE__*/ (function (_super) {
29017 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSubscriber, _super);
29018 function BufferSubscriber(destination, closingNotifier) {
29019 var _this = _super.call(this, destination) || this;
29020 _this.buffer = [];
29021 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, closingNotifier));
29022 return _this;
29023 }
29024 BufferSubscriber.prototype._next = function (value) {
29025 this.buffer.push(value);
29026 };
29027 BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
29028 var buffer = this.buffer;
29029 this.buffer = [];
29030 this.destination.next(buffer);
29031 };
29032 return BufferSubscriber;
29033}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
29034//# sourceMappingURL=buffer.js.map
29035
29036
29037/***/ }),
29038/* 255 */
29039/***/ (function(module, __webpack_exports__, __webpack_require__) {
29040
29041"use strict";
29042__webpack_require__.r(__webpack_exports__);
29043/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return bufferCount; });
29044/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29045/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
29046/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29047
29048
29049function bufferCount(bufferSize, startBufferEvery) {
29050 if (startBufferEvery === void 0) {
29051 startBufferEvery = null;
29052 }
29053 return function bufferCountOperatorFunction(source) {
29054 return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
29055 };
29056}
29057var BufferCountOperator = /*@__PURE__*/ (function () {
29058 function BufferCountOperator(bufferSize, startBufferEvery) {
29059 this.bufferSize = bufferSize;
29060 this.startBufferEvery = startBufferEvery;
29061 if (!startBufferEvery || bufferSize === startBufferEvery) {
29062 this.subscriberClass = BufferCountSubscriber;
29063 }
29064 else {
29065 this.subscriberClass = BufferSkipCountSubscriber;
29066 }
29067 }
29068 BufferCountOperator.prototype.call = function (subscriber, source) {
29069 return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
29070 };
29071 return BufferCountOperator;
29072}());
29073var BufferCountSubscriber = /*@__PURE__*/ (function (_super) {
29074 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferCountSubscriber, _super);
29075 function BufferCountSubscriber(destination, bufferSize) {
29076 var _this = _super.call(this, destination) || this;
29077 _this.bufferSize = bufferSize;
29078 _this.buffer = [];
29079 return _this;
29080 }
29081 BufferCountSubscriber.prototype._next = function (value) {
29082 var buffer = this.buffer;
29083 buffer.push(value);
29084 if (buffer.length == this.bufferSize) {
29085 this.destination.next(buffer);
29086 this.buffer = [];
29087 }
29088 };
29089 BufferCountSubscriber.prototype._complete = function () {
29090 var buffer = this.buffer;
29091 if (buffer.length > 0) {
29092 this.destination.next(buffer);
29093 }
29094 _super.prototype._complete.call(this);
29095 };
29096 return BufferCountSubscriber;
29097}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29098var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {
29099 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSkipCountSubscriber, _super);
29100 function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
29101 var _this = _super.call(this, destination) || this;
29102 _this.bufferSize = bufferSize;
29103 _this.startBufferEvery = startBufferEvery;
29104 _this.buffers = [];
29105 _this.count = 0;
29106 return _this;
29107 }
29108 BufferSkipCountSubscriber.prototype._next = function (value) {
29109 var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
29110 this.count++;
29111 if (count % startBufferEvery === 0) {
29112 buffers.push([]);
29113 }
29114 for (var i = buffers.length; i--;) {
29115 var buffer = buffers[i];
29116 buffer.push(value);
29117 if (buffer.length === bufferSize) {
29118 buffers.splice(i, 1);
29119 this.destination.next(buffer);
29120 }
29121 }
29122 };
29123 BufferSkipCountSubscriber.prototype._complete = function () {
29124 var _a = this, buffers = _a.buffers, destination = _a.destination;
29125 while (buffers.length > 0) {
29126 var buffer = buffers.shift();
29127 if (buffer.length > 0) {
29128 destination.next(buffer);
29129 }
29130 }
29131 _super.prototype._complete.call(this);
29132 };
29133 return BufferSkipCountSubscriber;
29134}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29135//# sourceMappingURL=bufferCount.js.map
29136
29137
29138/***/ }),
29139/* 256 */
29140/***/ (function(module, __webpack_exports__, __webpack_require__) {
29141
29142"use strict";
29143__webpack_require__.r(__webpack_exports__);
29144/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return bufferTime; });
29145/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29146/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
29147/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(151);
29148/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(185);
29149/** PURE_IMPORTS_START tslib,_scheduler_async,_Subscriber,_util_isScheduler PURE_IMPORTS_END */
29150
29151
29152
29153
29154function bufferTime(bufferTimeSpan) {
29155 var length = arguments.length;
29156 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
29157 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(arguments[arguments.length - 1])) {
29158 scheduler = arguments[arguments.length - 1];
29159 length--;
29160 }
29161 var bufferCreationInterval = null;
29162 if (length >= 2) {
29163 bufferCreationInterval = arguments[1];
29164 }
29165 var maxBufferSize = Number.POSITIVE_INFINITY;
29166 if (length >= 3) {
29167 maxBufferSize = arguments[2];
29168 }
29169 return function bufferTimeOperatorFunction(source) {
29170 return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
29171 };
29172}
29173var BufferTimeOperator = /*@__PURE__*/ (function () {
29174 function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
29175 this.bufferTimeSpan = bufferTimeSpan;
29176 this.bufferCreationInterval = bufferCreationInterval;
29177 this.maxBufferSize = maxBufferSize;
29178 this.scheduler = scheduler;
29179 }
29180 BufferTimeOperator.prototype.call = function (subscriber, source) {
29181 return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
29182 };
29183 return BufferTimeOperator;
29184}());
29185var Context = /*@__PURE__*/ (function () {
29186 function Context() {
29187 this.buffer = [];
29188 }
29189 return Context;
29190}());
29191var BufferTimeSubscriber = /*@__PURE__*/ (function (_super) {
29192 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferTimeSubscriber, _super);
29193 function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
29194 var _this = _super.call(this, destination) || this;
29195 _this.bufferTimeSpan = bufferTimeSpan;
29196 _this.bufferCreationInterval = bufferCreationInterval;
29197 _this.maxBufferSize = maxBufferSize;
29198 _this.scheduler = scheduler;
29199 _this.contexts = [];
29200 var context = _this.openContext();
29201 _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
29202 if (_this.timespanOnly) {
29203 var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
29204 _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
29205 }
29206 else {
29207 var closeState = { subscriber: _this, context: context };
29208 var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
29209 _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
29210 _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
29211 }
29212 return _this;
29213 }
29214 BufferTimeSubscriber.prototype._next = function (value) {
29215 var contexts = this.contexts;
29216 var len = contexts.length;
29217 var filledBufferContext;
29218 for (var i = 0; i < len; i++) {
29219 var context_1 = contexts[i];
29220 var buffer = context_1.buffer;
29221 buffer.push(value);
29222 if (buffer.length == this.maxBufferSize) {
29223 filledBufferContext = context_1;
29224 }
29225 }
29226 if (filledBufferContext) {
29227 this.onBufferFull(filledBufferContext);
29228 }
29229 };
29230 BufferTimeSubscriber.prototype._error = function (err) {
29231 this.contexts.length = 0;
29232 _super.prototype._error.call(this, err);
29233 };
29234 BufferTimeSubscriber.prototype._complete = function () {
29235 var _a = this, contexts = _a.contexts, destination = _a.destination;
29236 while (contexts.length > 0) {
29237 var context_2 = contexts.shift();
29238 destination.next(context_2.buffer);
29239 }
29240 _super.prototype._complete.call(this);
29241 };
29242 BufferTimeSubscriber.prototype._unsubscribe = function () {
29243 this.contexts = null;
29244 };
29245 BufferTimeSubscriber.prototype.onBufferFull = function (context) {
29246 this.closeContext(context);
29247 var closeAction = context.closeAction;
29248 closeAction.unsubscribe();
29249 this.remove(closeAction);
29250 if (!this.closed && this.timespanOnly) {
29251 context = this.openContext();
29252 var bufferTimeSpan = this.bufferTimeSpan;
29253 var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
29254 this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
29255 }
29256 };
29257 BufferTimeSubscriber.prototype.openContext = function () {
29258 var context = new Context();
29259 this.contexts.push(context);
29260 return context;
29261 };
29262 BufferTimeSubscriber.prototype.closeContext = function (context) {
29263 this.destination.next(context.buffer);
29264 var contexts = this.contexts;
29265 var spliceIndex = contexts ? contexts.indexOf(context) : -1;
29266 if (spliceIndex >= 0) {
29267 contexts.splice(contexts.indexOf(context), 1);
29268 }
29269 };
29270 return BufferTimeSubscriber;
29271}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
29272function dispatchBufferTimeSpanOnly(state) {
29273 var subscriber = state.subscriber;
29274 var prevContext = state.context;
29275 if (prevContext) {
29276 subscriber.closeContext(prevContext);
29277 }
29278 if (!subscriber.closed) {
29279 state.context = subscriber.openContext();
29280 state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
29281 }
29282}
29283function dispatchBufferCreation(state) {
29284 var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
29285 var context = subscriber.openContext();
29286 var action = this;
29287 if (!subscriber.closed) {
29288 subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
29289 action.schedule(state, bufferCreationInterval);
29290 }
29291}
29292function dispatchBufferClose(arg) {
29293 var subscriber = arg.subscriber, context = arg.context;
29294 subscriber.closeContext(context);
29295}
29296//# sourceMappingURL=bufferTime.js.map
29297
29298
29299/***/ }),
29300/* 257 */
29301/***/ (function(module, __webpack_exports__, __webpack_require__) {
29302
29303"use strict";
29304__webpack_require__.r(__webpack_exports__);
29305/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return bufferToggle; });
29306/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29307/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
29308/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
29309/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
29310/** PURE_IMPORTS_START tslib,_Subscription,_util_subscribeToResult,_OuterSubscriber PURE_IMPORTS_END */
29311
29312
29313
29314
29315function bufferToggle(openings, closingSelector) {
29316 return function bufferToggleOperatorFunction(source) {
29317 return source.lift(new BufferToggleOperator(openings, closingSelector));
29318 };
29319}
29320var BufferToggleOperator = /*@__PURE__*/ (function () {
29321 function BufferToggleOperator(openings, closingSelector) {
29322 this.openings = openings;
29323 this.closingSelector = closingSelector;
29324 }
29325 BufferToggleOperator.prototype.call = function (subscriber, source) {
29326 return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
29327 };
29328 return BufferToggleOperator;
29329}());
29330var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) {
29331 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferToggleSubscriber, _super);
29332 function BufferToggleSubscriber(destination, openings, closingSelector) {
29333 var _this = _super.call(this, destination) || this;
29334 _this.openings = openings;
29335 _this.closingSelector = closingSelector;
29336 _this.contexts = [];
29337 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, openings));
29338 return _this;
29339 }
29340 BufferToggleSubscriber.prototype._next = function (value) {
29341 var contexts = this.contexts;
29342 var len = contexts.length;
29343 for (var i = 0; i < len; i++) {
29344 contexts[i].buffer.push(value);
29345 }
29346 };
29347 BufferToggleSubscriber.prototype._error = function (err) {
29348 var contexts = this.contexts;
29349 while (contexts.length > 0) {
29350 var context_1 = contexts.shift();
29351 context_1.subscription.unsubscribe();
29352 context_1.buffer = null;
29353 context_1.subscription = null;
29354 }
29355 this.contexts = null;
29356 _super.prototype._error.call(this, err);
29357 };
29358 BufferToggleSubscriber.prototype._complete = function () {
29359 var contexts = this.contexts;
29360 while (contexts.length > 0) {
29361 var context_2 = contexts.shift();
29362 this.destination.next(context_2.buffer);
29363 context_2.subscription.unsubscribe();
29364 context_2.buffer = null;
29365 context_2.subscription = null;
29366 }
29367 this.contexts = null;
29368 _super.prototype._complete.call(this);
29369 };
29370 BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
29371 outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
29372 };
29373 BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
29374 this.closeBuffer(innerSub.context);
29375 };
29376 BufferToggleSubscriber.prototype.openBuffer = function (value) {
29377 try {
29378 var closingSelector = this.closingSelector;
29379 var closingNotifier = closingSelector.call(this, value);
29380 if (closingNotifier) {
29381 this.trySubscribe(closingNotifier);
29382 }
29383 }
29384 catch (err) {
29385 this._error(err);
29386 }
29387 };
29388 BufferToggleSubscriber.prototype.closeBuffer = function (context) {
29389 var contexts = this.contexts;
29390 if (contexts && context) {
29391 var buffer = context.buffer, subscription = context.subscription;
29392 this.destination.next(buffer);
29393 contexts.splice(contexts.indexOf(context), 1);
29394 this.remove(subscription);
29395 subscription.unsubscribe();
29396 }
29397 };
29398 BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
29399 var contexts = this.contexts;
29400 var buffer = [];
29401 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
29402 var context = { buffer: buffer, subscription: subscription };
29403 contexts.push(context);
29404 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier, context);
29405 if (!innerSubscription || innerSubscription.closed) {
29406 this.closeBuffer(context);
29407 }
29408 else {
29409 innerSubscription.context = context;
29410 this.add(innerSubscription);
29411 subscription.add(innerSubscription);
29412 }
29413 };
29414 return BufferToggleSubscriber;
29415}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
29416//# sourceMappingURL=bufferToggle.js.map
29417
29418
29419/***/ }),
29420/* 258 */
29421/***/ (function(module, __webpack_exports__, __webpack_require__) {
29422
29423"use strict";
29424__webpack_require__.r(__webpack_exports__);
29425/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return bufferWhen; });
29426/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29427/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(157);
29428/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
29429/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
29430/** PURE_IMPORTS_START tslib,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
29431
29432
29433
29434
29435function bufferWhen(closingSelector) {
29436 return function (source) {
29437 return source.lift(new BufferWhenOperator(closingSelector));
29438 };
29439}
29440var BufferWhenOperator = /*@__PURE__*/ (function () {
29441 function BufferWhenOperator(closingSelector) {
29442 this.closingSelector = closingSelector;
29443 }
29444 BufferWhenOperator.prototype.call = function (subscriber, source) {
29445 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
29446 };
29447 return BufferWhenOperator;
29448}());
29449var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) {
29450 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferWhenSubscriber, _super);
29451 function BufferWhenSubscriber(destination, closingSelector) {
29452 var _this = _super.call(this, destination) || this;
29453 _this.closingSelector = closingSelector;
29454 _this.subscribing = false;
29455 _this.openBuffer();
29456 return _this;
29457 }
29458 BufferWhenSubscriber.prototype._next = function (value) {
29459 this.buffer.push(value);
29460 };
29461 BufferWhenSubscriber.prototype._complete = function () {
29462 var buffer = this.buffer;
29463 if (buffer) {
29464 this.destination.next(buffer);
29465 }
29466 _super.prototype._complete.call(this);
29467 };
29468 BufferWhenSubscriber.prototype._unsubscribe = function () {
29469 this.buffer = null;
29470 this.subscribing = false;
29471 };
29472 BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
29473 this.openBuffer();
29474 };
29475 BufferWhenSubscriber.prototype.notifyComplete = function () {
29476 if (this.subscribing) {
29477 this.complete();
29478 }
29479 else {
29480 this.openBuffer();
29481 }
29482 };
29483 BufferWhenSubscriber.prototype.openBuffer = function () {
29484 var closingSubscription = this.closingSubscription;
29485 if (closingSubscription) {
29486 this.remove(closingSubscription);
29487 closingSubscription.unsubscribe();
29488 }
29489 var buffer = this.buffer;
29490 if (this.buffer) {
29491 this.destination.next(buffer);
29492 }
29493 this.buffer = [];
29494 var closingNotifier;
29495 try {
29496 var closingSelector = this.closingSelector;
29497 closingNotifier = closingSelector();
29498 }
29499 catch (err) {
29500 return this.error(err);
29501 }
29502 closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
29503 this.closingSubscription = closingSubscription;
29504 this.add(closingSubscription);
29505 this.subscribing = true;
29506 closingSubscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
29507 this.subscribing = false;
29508 };
29509 return BufferWhenSubscriber;
29510}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
29511//# sourceMappingURL=bufferWhen.js.map
29512
29513
29514/***/ }),
29515/* 259 */
29516/***/ (function(module, __webpack_exports__, __webpack_require__) {
29517
29518"use strict";
29519__webpack_require__.r(__webpack_exports__);
29520/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return catchError; });
29521/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29522/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
29523/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(211);
29524/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
29525/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
29526
29527
29528
29529
29530function catchError(selector) {
29531 return function catchErrorOperatorFunction(source) {
29532 var operator = new CatchOperator(selector);
29533 var caught = source.lift(operator);
29534 return (operator.caught = caught);
29535 };
29536}
29537var CatchOperator = /*@__PURE__*/ (function () {
29538 function CatchOperator(selector) {
29539 this.selector = selector;
29540 }
29541 CatchOperator.prototype.call = function (subscriber, source) {
29542 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
29543 };
29544 return CatchOperator;
29545}());
29546var CatchSubscriber = /*@__PURE__*/ (function (_super) {
29547 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CatchSubscriber, _super);
29548 function CatchSubscriber(destination, selector, caught) {
29549 var _this = _super.call(this, destination) || this;
29550 _this.selector = selector;
29551 _this.caught = caught;
29552 return _this;
29553 }
29554 CatchSubscriber.prototype.error = function (err) {
29555 if (!this.isStopped) {
29556 var result = void 0;
29557 try {
29558 result = this.selector(err, this.caught);
29559 }
29560 catch (err2) {
29561 _super.prototype.error.call(this, err2);
29562 return;
29563 }
29564 this._unsubscribeAndRecycle();
29565 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, undefined, undefined);
29566 this.add(innerSubscriber);
29567 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
29568 }
29569 };
29570 return CatchSubscriber;
29571}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
29572//# sourceMappingURL=catchError.js.map
29573
29574
29575/***/ }),
29576/* 260 */
29577/***/ (function(module, __webpack_exports__, __webpack_require__) {
29578
29579"use strict";
29580__webpack_require__.r(__webpack_exports__);
29581/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return combineAll; });
29582/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(208);
29583/** PURE_IMPORTS_START _observable_combineLatest PURE_IMPORTS_END */
29584
29585function combineAll(project) {
29586 return function (source) { return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__["CombineLatestOperator"](project)); };
29587}
29588//# sourceMappingURL=combineAll.js.map
29589
29590
29591/***/ }),
29592/* 261 */
29593/***/ (function(module, __webpack_exports__, __webpack_require__) {
29594
29595"use strict";
29596__webpack_require__.r(__webpack_exports__);
29597/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
29598/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(158);
29599/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
29600/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(223);
29601/** PURE_IMPORTS_START _util_isArray,_observable_combineLatest,_observable_from PURE_IMPORTS_END */
29602
29603
29604
29605var none = {};
29606function combineLatest() {
29607 var observables = [];
29608 for (var _i = 0; _i < arguments.length; _i++) {
29609 observables[_i] = arguments[_i];
29610 }
29611 var project = null;
29612 if (typeof observables[observables.length - 1] === 'function') {
29613 project = observables.pop();
29614 }
29615 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
29616 observables = observables[0].slice();
29617 }
29618 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)); };
29619}
29620//# sourceMappingURL=combineLatest.js.map
29621
29622
29623/***/ }),
29624/* 262 */
29625/***/ (function(module, __webpack_exports__, __webpack_require__) {
29626
29627"use strict";
29628__webpack_require__.r(__webpack_exports__);
29629/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
29630/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
29631/** PURE_IMPORTS_START _observable_concat PURE_IMPORTS_END */
29632
29633function concat() {
29634 var observables = [];
29635 for (var _i = 0; _i < arguments.length; _i++) {
29636 observables[_i] = arguments[_i];
29637 }
29638 return function (source) { return source.lift.call(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"].apply(void 0, [source].concat(observables))); };
29639}
29640//# sourceMappingURL=concat.js.map
29641
29642
29643/***/ }),
29644/* 263 */
29645/***/ (function(module, __webpack_exports__, __webpack_require__) {
29646
29647"use strict";
29648__webpack_require__.r(__webpack_exports__);
29649/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return concatMap; });
29650/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(222);
29651/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
29652
29653function concatMap(project, resultSelector) {
29654 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(project, resultSelector, 1);
29655}
29656//# sourceMappingURL=concatMap.js.map
29657
29658
29659/***/ }),
29660/* 264 */
29661/***/ (function(module, __webpack_exports__, __webpack_require__) {
29662
29663"use strict";
29664__webpack_require__.r(__webpack_exports__);
29665/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; });
29666/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(263);
29667/** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */
29668
29669function concatMapTo(innerObservable, resultSelector) {
29670 return Object(_concatMap__WEBPACK_IMPORTED_MODULE_0__["concatMap"])(function () { return innerObservable; }, resultSelector);
29671}
29672//# sourceMappingURL=concatMapTo.js.map
29673
29674
29675/***/ }),
29676/* 265 */
29677/***/ (function(module, __webpack_exports__, __webpack_require__) {
29678
29679"use strict";
29680__webpack_require__.r(__webpack_exports__);
29681/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "count", function() { return count; });
29682/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29683/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
29684/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29685
29686
29687function count(predicate) {
29688 return function (source) { return source.lift(new CountOperator(predicate, source)); };
29689}
29690var CountOperator = /*@__PURE__*/ (function () {
29691 function CountOperator(predicate, source) {
29692 this.predicate = predicate;
29693 this.source = source;
29694 }
29695 CountOperator.prototype.call = function (subscriber, source) {
29696 return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
29697 };
29698 return CountOperator;
29699}());
29700var CountSubscriber = /*@__PURE__*/ (function (_super) {
29701 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountSubscriber, _super);
29702 function CountSubscriber(destination, predicate, source) {
29703 var _this = _super.call(this, destination) || this;
29704 _this.predicate = predicate;
29705 _this.source = source;
29706 _this.count = 0;
29707 _this.index = 0;
29708 return _this;
29709 }
29710 CountSubscriber.prototype._next = function (value) {
29711 if (this.predicate) {
29712 this._tryPredicate(value);
29713 }
29714 else {
29715 this.count++;
29716 }
29717 };
29718 CountSubscriber.prototype._tryPredicate = function (value) {
29719 var result;
29720 try {
29721 result = this.predicate(value, this.index++, this.source);
29722 }
29723 catch (err) {
29724 this.destination.error(err);
29725 return;
29726 }
29727 if (result) {
29728 this.count++;
29729 }
29730 };
29731 CountSubscriber.prototype._complete = function () {
29732 this.destination.next(this.count);
29733 this.destination.complete();
29734 };
29735 return CountSubscriber;
29736}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29737//# sourceMappingURL=count.js.map
29738
29739
29740/***/ }),
29741/* 266 */
29742/***/ (function(module, __webpack_exports__, __webpack_require__) {
29743
29744"use strict";
29745__webpack_require__.r(__webpack_exports__);
29746/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
29747/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29748/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
29749/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
29750/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
29751
29752
29753
29754function debounce(durationSelector) {
29755 return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
29756}
29757var DebounceOperator = /*@__PURE__*/ (function () {
29758 function DebounceOperator(durationSelector) {
29759 this.durationSelector = durationSelector;
29760 }
29761 DebounceOperator.prototype.call = function (subscriber, source) {
29762 return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
29763 };
29764 return DebounceOperator;
29765}());
29766var DebounceSubscriber = /*@__PURE__*/ (function (_super) {
29767 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceSubscriber, _super);
29768 function DebounceSubscriber(destination, durationSelector) {
29769 var _this = _super.call(this, destination) || this;
29770 _this.durationSelector = durationSelector;
29771 _this.hasValue = false;
29772 _this.durationSubscription = null;
29773 return _this;
29774 }
29775 DebounceSubscriber.prototype._next = function (value) {
29776 try {
29777 var result = this.durationSelector.call(this, value);
29778 if (result) {
29779 this._tryNext(value, result);
29780 }
29781 }
29782 catch (err) {
29783 this.destination.error(err);
29784 }
29785 };
29786 DebounceSubscriber.prototype._complete = function () {
29787 this.emitValue();
29788 this.destination.complete();
29789 };
29790 DebounceSubscriber.prototype._tryNext = function (value, duration) {
29791 var subscription = this.durationSubscription;
29792 this.value = value;
29793 this.hasValue = true;
29794 if (subscription) {
29795 subscription.unsubscribe();
29796 this.remove(subscription);
29797 }
29798 subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
29799 if (subscription && !subscription.closed) {
29800 this.add(this.durationSubscription = subscription);
29801 }
29802 };
29803 DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
29804 this.emitValue();
29805 };
29806 DebounceSubscriber.prototype.notifyComplete = function () {
29807 this.emitValue();
29808 };
29809 DebounceSubscriber.prototype.emitValue = function () {
29810 if (this.hasValue) {
29811 var value = this.value;
29812 var subscription = this.durationSubscription;
29813 if (subscription) {
29814 this.durationSubscription = null;
29815 subscription.unsubscribe();
29816 this.remove(subscription);
29817 }
29818 this.value = null;
29819 this.hasValue = false;
29820 _super.prototype._next.call(this, value);
29821 }
29822 };
29823 return DebounceSubscriber;
29824}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
29825//# sourceMappingURL=debounce.js.map
29826
29827
29828/***/ }),
29829/* 267 */
29830/***/ (function(module, __webpack_exports__, __webpack_require__) {
29831
29832"use strict";
29833__webpack_require__.r(__webpack_exports__);
29834/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return debounceTime; });
29835/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29836/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
29837/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
29838/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
29839
29840
29841
29842function debounceTime(dueTime, scheduler) {
29843 if (scheduler === void 0) {
29844 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
29845 }
29846 return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
29847}
29848var DebounceTimeOperator = /*@__PURE__*/ (function () {
29849 function DebounceTimeOperator(dueTime, scheduler) {
29850 this.dueTime = dueTime;
29851 this.scheduler = scheduler;
29852 }
29853 DebounceTimeOperator.prototype.call = function (subscriber, source) {
29854 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
29855 };
29856 return DebounceTimeOperator;
29857}());
29858var DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {
29859 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceTimeSubscriber, _super);
29860 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
29861 var _this = _super.call(this, destination) || this;
29862 _this.dueTime = dueTime;
29863 _this.scheduler = scheduler;
29864 _this.debouncedSubscription = null;
29865 _this.lastValue = null;
29866 _this.hasValue = false;
29867 return _this;
29868 }
29869 DebounceTimeSubscriber.prototype._next = function (value) {
29870 this.clearDebounce();
29871 this.lastValue = value;
29872 this.hasValue = true;
29873 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
29874 };
29875 DebounceTimeSubscriber.prototype._complete = function () {
29876 this.debouncedNext();
29877 this.destination.complete();
29878 };
29879 DebounceTimeSubscriber.prototype.debouncedNext = function () {
29880 this.clearDebounce();
29881 if (this.hasValue) {
29882 var lastValue = this.lastValue;
29883 this.lastValue = null;
29884 this.hasValue = false;
29885 this.destination.next(lastValue);
29886 }
29887 };
29888 DebounceTimeSubscriber.prototype.clearDebounce = function () {
29889 var debouncedSubscription = this.debouncedSubscription;
29890 if (debouncedSubscription !== null) {
29891 this.remove(debouncedSubscription);
29892 debouncedSubscription.unsubscribe();
29893 this.debouncedSubscription = null;
29894 }
29895 };
29896 return DebounceTimeSubscriber;
29897}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29898function dispatchNext(subscriber) {
29899 subscriber.debouncedNext();
29900}
29901//# sourceMappingURL=debounceTime.js.map
29902
29903
29904/***/ }),
29905/* 268 */
29906/***/ (function(module, __webpack_exports__, __webpack_require__) {
29907
29908"use strict";
29909__webpack_require__.r(__webpack_exports__);
29910/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return defaultIfEmpty; });
29911/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29912/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
29913/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29914
29915
29916function defaultIfEmpty(defaultValue) {
29917 if (defaultValue === void 0) {
29918 defaultValue = null;
29919 }
29920 return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
29921}
29922var DefaultIfEmptyOperator = /*@__PURE__*/ (function () {
29923 function DefaultIfEmptyOperator(defaultValue) {
29924 this.defaultValue = defaultValue;
29925 }
29926 DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
29927 return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
29928 };
29929 return DefaultIfEmptyOperator;
29930}());
29931var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
29932 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DefaultIfEmptySubscriber, _super);
29933 function DefaultIfEmptySubscriber(destination, defaultValue) {
29934 var _this = _super.call(this, destination) || this;
29935 _this.defaultValue = defaultValue;
29936 _this.isEmpty = true;
29937 return _this;
29938 }
29939 DefaultIfEmptySubscriber.prototype._next = function (value) {
29940 this.isEmpty = false;
29941 this.destination.next(value);
29942 };
29943 DefaultIfEmptySubscriber.prototype._complete = function () {
29944 if (this.isEmpty) {
29945 this.destination.next(this.defaultValue);
29946 }
29947 this.destination.complete();
29948 };
29949 return DefaultIfEmptySubscriber;
29950}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29951//# sourceMappingURL=defaultIfEmpty.js.map
29952
29953
29954/***/ }),
29955/* 269 */
29956/***/ (function(module, __webpack_exports__, __webpack_require__) {
29957
29958"use strict";
29959__webpack_require__.r(__webpack_exports__);
29960/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; });
29961/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
29962/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
29963/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(270);
29964/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(151);
29965/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(182);
29966/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */
29967
29968
29969
29970
29971
29972function delay(delay, scheduler) {
29973 if (scheduler === void 0) {
29974 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
29975 }
29976 var absoluteDelay = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(delay);
29977 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
29978 return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
29979}
29980var DelayOperator = /*@__PURE__*/ (function () {
29981 function DelayOperator(delay, scheduler) {
29982 this.delay = delay;
29983 this.scheduler = scheduler;
29984 }
29985 DelayOperator.prototype.call = function (subscriber, source) {
29986 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
29987 };
29988 return DelayOperator;
29989}());
29990var DelaySubscriber = /*@__PURE__*/ (function (_super) {
29991 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelaySubscriber, _super);
29992 function DelaySubscriber(destination, delay, scheduler) {
29993 var _this = _super.call(this, destination) || this;
29994 _this.delay = delay;
29995 _this.scheduler = scheduler;
29996 _this.queue = [];
29997 _this.active = false;
29998 _this.errored = false;
29999 return _this;
30000 }
30001 DelaySubscriber.dispatch = function (state) {
30002 var source = state.source;
30003 var queue = source.queue;
30004 var scheduler = state.scheduler;
30005 var destination = state.destination;
30006 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
30007 queue.shift().notification.observe(destination);
30008 }
30009 if (queue.length > 0) {
30010 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
30011 this.schedule(state, delay_1);
30012 }
30013 else {
30014 this.unsubscribe();
30015 source.active = false;
30016 }
30017 };
30018 DelaySubscriber.prototype._schedule = function (scheduler) {
30019 this.active = true;
30020 var destination = this.destination;
30021 destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
30022 source: this, destination: this.destination, scheduler: scheduler
30023 }));
30024 };
30025 DelaySubscriber.prototype.scheduleNotification = function (notification) {
30026 if (this.errored === true) {
30027 return;
30028 }
30029 var scheduler = this.scheduler;
30030 var message = new DelayMessage(scheduler.now() + this.delay, notification);
30031 this.queue.push(message);
30032 if (this.active === false) {
30033 this._schedule(scheduler);
30034 }
30035 };
30036 DelaySubscriber.prototype._next = function (value) {
30037 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createNext(value));
30038 };
30039 DelaySubscriber.prototype._error = function (err) {
30040 this.errored = true;
30041 this.queue = [];
30042 this.destination.error(err);
30043 this.unsubscribe();
30044 };
30045 DelaySubscriber.prototype._complete = function () {
30046 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createComplete());
30047 this.unsubscribe();
30048 };
30049 return DelaySubscriber;
30050}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
30051var DelayMessage = /*@__PURE__*/ (function () {
30052 function DelayMessage(time, notification) {
30053 this.time = time;
30054 this.notification = notification;
30055 }
30056 return DelayMessage;
30057}());
30058//# sourceMappingURL=delay.js.map
30059
30060
30061/***/ }),
30062/* 270 */
30063/***/ (function(module, __webpack_exports__, __webpack_require__) {
30064
30065"use strict";
30066__webpack_require__.r(__webpack_exports__);
30067/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDate", function() { return isDate; });
30068/** PURE_IMPORTS_START PURE_IMPORTS_END */
30069function isDate(value) {
30070 return value instanceof Date && !isNaN(+value);
30071}
30072//# sourceMappingURL=isDate.js.map
30073
30074
30075/***/ }),
30076/* 271 */
30077/***/ (function(module, __webpack_exports__, __webpack_require__) {
30078
30079"use strict";
30080__webpack_require__.r(__webpack_exports__);
30081/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return delayWhen; });
30082/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30083/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30084/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(149);
30085/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
30086/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(210);
30087/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
30088
30089
30090
30091
30092
30093function delayWhen(delayDurationSelector, subscriptionDelay) {
30094 if (subscriptionDelay) {
30095 return function (source) {
30096 return new SubscriptionDelayObservable(source, subscriptionDelay)
30097 .lift(new DelayWhenOperator(delayDurationSelector));
30098 };
30099 }
30100 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
30101}
30102var DelayWhenOperator = /*@__PURE__*/ (function () {
30103 function DelayWhenOperator(delayDurationSelector) {
30104 this.delayDurationSelector = delayDurationSelector;
30105 }
30106 DelayWhenOperator.prototype.call = function (subscriber, source) {
30107 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
30108 };
30109 return DelayWhenOperator;
30110}());
30111var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
30112 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelayWhenSubscriber, _super);
30113 function DelayWhenSubscriber(destination, delayDurationSelector) {
30114 var _this = _super.call(this, destination) || this;
30115 _this.delayDurationSelector = delayDurationSelector;
30116 _this.completed = false;
30117 _this.delayNotifierSubscriptions = [];
30118 _this.index = 0;
30119 return _this;
30120 }
30121 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30122 this.destination.next(outerValue);
30123 this.removeSubscription(innerSub);
30124 this.tryComplete();
30125 };
30126 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
30127 this._error(error);
30128 };
30129 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
30130 var value = this.removeSubscription(innerSub);
30131 if (value) {
30132 this.destination.next(value);
30133 }
30134 this.tryComplete();
30135 };
30136 DelayWhenSubscriber.prototype._next = function (value) {
30137 var index = this.index++;
30138 try {
30139 var delayNotifier = this.delayDurationSelector(value, index);
30140 if (delayNotifier) {
30141 this.tryDelay(delayNotifier, value);
30142 }
30143 }
30144 catch (err) {
30145 this.destination.error(err);
30146 }
30147 };
30148 DelayWhenSubscriber.prototype._complete = function () {
30149 this.completed = true;
30150 this.tryComplete();
30151 this.unsubscribe();
30152 };
30153 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
30154 subscription.unsubscribe();
30155 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
30156 if (subscriptionIdx !== -1) {
30157 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
30158 }
30159 return subscription.outerValue;
30160 };
30161 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
30162 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, delayNotifier, value);
30163 if (notifierSubscription && !notifierSubscription.closed) {
30164 var destination = this.destination;
30165 destination.add(notifierSubscription);
30166 this.delayNotifierSubscriptions.push(notifierSubscription);
30167 }
30168 };
30169 DelayWhenSubscriber.prototype.tryComplete = function () {
30170 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
30171 this.destination.complete();
30172 }
30173 };
30174 return DelayWhenSubscriber;
30175}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
30176var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
30177 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelayObservable, _super);
30178 function SubscriptionDelayObservable(source, subscriptionDelay) {
30179 var _this = _super.call(this) || this;
30180 _this.source = source;
30181 _this.subscriptionDelay = subscriptionDelay;
30182 return _this;
30183 }
30184 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
30185 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
30186 };
30187 return SubscriptionDelayObservable;
30188}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
30189var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
30190 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelaySubscriber, _super);
30191 function SubscriptionDelaySubscriber(parent, source) {
30192 var _this = _super.call(this) || this;
30193 _this.parent = parent;
30194 _this.source = source;
30195 _this.sourceSubscribed = false;
30196 return _this;
30197 }
30198 SubscriptionDelaySubscriber.prototype._next = function (unused) {
30199 this.subscribeToSource();
30200 };
30201 SubscriptionDelaySubscriber.prototype._error = function (err) {
30202 this.unsubscribe();
30203 this.parent.error(err);
30204 };
30205 SubscriptionDelaySubscriber.prototype._complete = function () {
30206 this.unsubscribe();
30207 this.subscribeToSource();
30208 };
30209 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
30210 if (!this.sourceSubscribed) {
30211 this.sourceSubscribed = true;
30212 this.unsubscribe();
30213 this.source.subscribe(this.parent);
30214 }
30215 };
30216 return SubscriptionDelaySubscriber;
30217}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30218//# sourceMappingURL=delayWhen.js.map
30219
30220
30221/***/ }),
30222/* 272 */
30223/***/ (function(module, __webpack_exports__, __webpack_require__) {
30224
30225"use strict";
30226__webpack_require__.r(__webpack_exports__);
30227/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return dematerialize; });
30228/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30229/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30230/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30231
30232
30233function dematerialize() {
30234 return function dematerializeOperatorFunction(source) {
30235 return source.lift(new DeMaterializeOperator());
30236 };
30237}
30238var DeMaterializeOperator = /*@__PURE__*/ (function () {
30239 function DeMaterializeOperator() {
30240 }
30241 DeMaterializeOperator.prototype.call = function (subscriber, source) {
30242 return source.subscribe(new DeMaterializeSubscriber(subscriber));
30243 };
30244 return DeMaterializeOperator;
30245}());
30246var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) {
30247 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DeMaterializeSubscriber, _super);
30248 function DeMaterializeSubscriber(destination) {
30249 return _super.call(this, destination) || this;
30250 }
30251 DeMaterializeSubscriber.prototype._next = function (value) {
30252 value.observe(this.destination);
30253 };
30254 return DeMaterializeSubscriber;
30255}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30256//# sourceMappingURL=dematerialize.js.map
30257
30258
30259/***/ }),
30260/* 273 */
30261/***/ (function(module, __webpack_exports__, __webpack_require__) {
30262
30263"use strict";
30264__webpack_require__.r(__webpack_exports__);
30265/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return distinct; });
30266/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DistinctSubscriber", function() { return DistinctSubscriber; });
30267/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30268/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
30269/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
30270/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
30271
30272
30273
30274function distinct(keySelector, flushes) {
30275 return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
30276}
30277var DistinctOperator = /*@__PURE__*/ (function () {
30278 function DistinctOperator(keySelector, flushes) {
30279 this.keySelector = keySelector;
30280 this.flushes = flushes;
30281 }
30282 DistinctOperator.prototype.call = function (subscriber, source) {
30283 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
30284 };
30285 return DistinctOperator;
30286}());
30287var DistinctSubscriber = /*@__PURE__*/ (function (_super) {
30288 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctSubscriber, _super);
30289 function DistinctSubscriber(destination, keySelector, flushes) {
30290 var _this = _super.call(this, destination) || this;
30291 _this.keySelector = keySelector;
30292 _this.values = new Set();
30293 if (flushes) {
30294 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, flushes));
30295 }
30296 return _this;
30297 }
30298 DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30299 this.values.clear();
30300 };
30301 DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
30302 this._error(error);
30303 };
30304 DistinctSubscriber.prototype._next = function (value) {
30305 if (this.keySelector) {
30306 this._useKeySelector(value);
30307 }
30308 else {
30309 this._finalizeNext(value, value);
30310 }
30311 };
30312 DistinctSubscriber.prototype._useKeySelector = function (value) {
30313 var key;
30314 var destination = this.destination;
30315 try {
30316 key = this.keySelector(value);
30317 }
30318 catch (err) {
30319 destination.error(err);
30320 return;
30321 }
30322 this._finalizeNext(key, value);
30323 };
30324 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
30325 var values = this.values;
30326 if (!values.has(key)) {
30327 values.add(key);
30328 this.destination.next(value);
30329 }
30330 };
30331 return DistinctSubscriber;
30332}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
30333
30334//# sourceMappingURL=distinct.js.map
30335
30336
30337/***/ }),
30338/* 274 */
30339/***/ (function(module, __webpack_exports__, __webpack_require__) {
30340
30341"use strict";
30342__webpack_require__.r(__webpack_exports__);
30343/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return distinctUntilChanged; });
30344/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30345/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30346/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30347
30348
30349function distinctUntilChanged(compare, keySelector) {
30350 return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
30351}
30352var DistinctUntilChangedOperator = /*@__PURE__*/ (function () {
30353 function DistinctUntilChangedOperator(compare, keySelector) {
30354 this.compare = compare;
30355 this.keySelector = keySelector;
30356 }
30357 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
30358 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
30359 };
30360 return DistinctUntilChangedOperator;
30361}());
30362var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {
30363 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctUntilChangedSubscriber, _super);
30364 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
30365 var _this = _super.call(this, destination) || this;
30366 _this.keySelector = keySelector;
30367 _this.hasKey = false;
30368 if (typeof compare === 'function') {
30369 _this.compare = compare;
30370 }
30371 return _this;
30372 }
30373 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
30374 return x === y;
30375 };
30376 DistinctUntilChangedSubscriber.prototype._next = function (value) {
30377 var key;
30378 try {
30379 var keySelector = this.keySelector;
30380 key = keySelector ? keySelector(value) : value;
30381 }
30382 catch (err) {
30383 return this.destination.error(err);
30384 }
30385 var result = false;
30386 if (this.hasKey) {
30387 try {
30388 var compare = this.compare;
30389 result = compare(this.key, key);
30390 }
30391 catch (err) {
30392 return this.destination.error(err);
30393 }
30394 }
30395 else {
30396 this.hasKey = true;
30397 }
30398 if (!result) {
30399 this.key = key;
30400 this.destination.next(value);
30401 }
30402 };
30403 return DistinctUntilChangedSubscriber;
30404}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30405//# sourceMappingURL=distinctUntilChanged.js.map
30406
30407
30408/***/ }),
30409/* 275 */
30410/***/ (function(module, __webpack_exports__, __webpack_require__) {
30411
30412"use strict";
30413__webpack_require__.r(__webpack_exports__);
30414/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; });
30415/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(274);
30416/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */
30417
30418function distinctUntilKeyChanged(key, compare) {
30419 return Object(_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
30420}
30421//# sourceMappingURL=distinctUntilKeyChanged.js.map
30422
30423
30424/***/ }),
30425/* 276 */
30426/***/ (function(module, __webpack_exports__, __webpack_require__) {
30427
30428"use strict";
30429__webpack_require__.r(__webpack_exports__);
30430/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; });
30431/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
30432/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
30433/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(277);
30434/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(268);
30435/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(278);
30436/** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */
30437
30438
30439
30440
30441
30442function elementAt(index, defaultValue) {
30443 if (index < 0) {
30444 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
30445 }
30446 var hasDefaultValue = arguments.length >= 2;
30447 return function (source) {
30448 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
30449 ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue)
30450 : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__["throwIfEmpty"])(function () { return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"](); }));
30451 };
30452}
30453//# sourceMappingURL=elementAt.js.map
30454
30455
30456/***/ }),
30457/* 277 */
30458/***/ (function(module, __webpack_exports__, __webpack_require__) {
30459
30460"use strict";
30461__webpack_require__.r(__webpack_exports__);
30462/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return throwIfEmpty; });
30463/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30464/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
30465/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(151);
30466/** PURE_IMPORTS_START tslib,_util_EmptyError,_Subscriber PURE_IMPORTS_END */
30467
30468
30469
30470function throwIfEmpty(errorFactory) {
30471 if (errorFactory === void 0) {
30472 errorFactory = defaultErrorFactory;
30473 }
30474 return function (source) {
30475 return source.lift(new ThrowIfEmptyOperator(errorFactory));
30476 };
30477}
30478var ThrowIfEmptyOperator = /*@__PURE__*/ (function () {
30479 function ThrowIfEmptyOperator(errorFactory) {
30480 this.errorFactory = errorFactory;
30481 }
30482 ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
30483 return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
30484 };
30485 return ThrowIfEmptyOperator;
30486}());
30487var ThrowIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
30488 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrowIfEmptySubscriber, _super);
30489 function ThrowIfEmptySubscriber(destination, errorFactory) {
30490 var _this = _super.call(this, destination) || this;
30491 _this.errorFactory = errorFactory;
30492 _this.hasValue = false;
30493 return _this;
30494 }
30495 ThrowIfEmptySubscriber.prototype._next = function (value) {
30496 this.hasValue = true;
30497 this.destination.next(value);
30498 };
30499 ThrowIfEmptySubscriber.prototype._complete = function () {
30500 if (!this.hasValue) {
30501 var err = void 0;
30502 try {
30503 err = this.errorFactory();
30504 }
30505 catch (e) {
30506 err = e;
30507 }
30508 this.destination.error(err);
30509 }
30510 else {
30511 return this.destination.complete();
30512 }
30513 };
30514 return ThrowIfEmptySubscriber;
30515}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
30516function defaultErrorFactory() {
30517 return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__["EmptyError"]();
30518}
30519//# sourceMappingURL=throwIfEmpty.js.map
30520
30521
30522/***/ }),
30523/* 278 */
30524/***/ (function(module, __webpack_exports__, __webpack_require__) {
30525
30526"use strict";
30527__webpack_require__.r(__webpack_exports__);
30528/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "take", function() { return take; });
30529/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30530/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30531/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(202);
30532/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(183);
30533/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
30534
30535
30536
30537
30538function take(count) {
30539 return function (source) {
30540 if (count === 0) {
30541 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
30542 }
30543 else {
30544 return source.lift(new TakeOperator(count));
30545 }
30546 };
30547}
30548var TakeOperator = /*@__PURE__*/ (function () {
30549 function TakeOperator(total) {
30550 this.total = total;
30551 if (this.total < 0) {
30552 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
30553 }
30554 }
30555 TakeOperator.prototype.call = function (subscriber, source) {
30556 return source.subscribe(new TakeSubscriber(subscriber, this.total));
30557 };
30558 return TakeOperator;
30559}());
30560var TakeSubscriber = /*@__PURE__*/ (function (_super) {
30561 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeSubscriber, _super);
30562 function TakeSubscriber(destination, total) {
30563 var _this = _super.call(this, destination) || this;
30564 _this.total = total;
30565 _this.count = 0;
30566 return _this;
30567 }
30568 TakeSubscriber.prototype._next = function (value) {
30569 var total = this.total;
30570 var count = ++this.count;
30571 if (count <= total) {
30572 this.destination.next(value);
30573 if (count === total) {
30574 this.destination.complete();
30575 this.unsubscribe();
30576 }
30577 }
30578 };
30579 return TakeSubscriber;
30580}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30581//# sourceMappingURL=take.js.map
30582
30583
30584/***/ }),
30585/* 279 */
30586/***/ (function(module, __webpack_exports__, __webpack_require__) {
30587
30588"use strict";
30589__webpack_require__.r(__webpack_exports__);
30590/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return endWith; });
30591/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
30592/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(184);
30593/** PURE_IMPORTS_START _observable_concat,_observable_of PURE_IMPORTS_END */
30594
30595
30596function endWith() {
30597 var array = [];
30598 for (var _i = 0; _i < arguments.length; _i++) {
30599 array[_i] = arguments[_i];
30600 }
30601 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, _observable_of__WEBPACK_IMPORTED_MODULE_1__["of"].apply(void 0, array)); };
30602}
30603//# sourceMappingURL=endWith.js.map
30604
30605
30606/***/ }),
30607/* 280 */
30608/***/ (function(module, __webpack_exports__, __webpack_require__) {
30609
30610"use strict";
30611__webpack_require__.r(__webpack_exports__);
30612/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "every", function() { return every; });
30613/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30614/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30615/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30616
30617
30618function every(predicate, thisArg) {
30619 return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
30620}
30621var EveryOperator = /*@__PURE__*/ (function () {
30622 function EveryOperator(predicate, thisArg, source) {
30623 this.predicate = predicate;
30624 this.thisArg = thisArg;
30625 this.source = source;
30626 }
30627 EveryOperator.prototype.call = function (observer, source) {
30628 return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
30629 };
30630 return EveryOperator;
30631}());
30632var EverySubscriber = /*@__PURE__*/ (function (_super) {
30633 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](EverySubscriber, _super);
30634 function EverySubscriber(destination, predicate, thisArg, source) {
30635 var _this = _super.call(this, destination) || this;
30636 _this.predicate = predicate;
30637 _this.thisArg = thisArg;
30638 _this.source = source;
30639 _this.index = 0;
30640 _this.thisArg = thisArg || _this;
30641 return _this;
30642 }
30643 EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
30644 this.destination.next(everyValueMatch);
30645 this.destination.complete();
30646 };
30647 EverySubscriber.prototype._next = function (value) {
30648 var result = false;
30649 try {
30650 result = this.predicate.call(this.thisArg, value, this.index++, this.source);
30651 }
30652 catch (err) {
30653 this.destination.error(err);
30654 return;
30655 }
30656 if (!result) {
30657 this.notifyComplete(false);
30658 }
30659 };
30660 EverySubscriber.prototype._complete = function () {
30661 this.notifyComplete(true);
30662 };
30663 return EverySubscriber;
30664}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30665//# sourceMappingURL=every.js.map
30666
30667
30668/***/ }),
30669/* 281 */
30670/***/ (function(module, __webpack_exports__, __webpack_require__) {
30671
30672"use strict";
30673__webpack_require__.r(__webpack_exports__);
30674/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return exhaust; });
30675/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30676/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
30677/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
30678/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
30679
30680
30681
30682function exhaust() {
30683 return function (source) { return source.lift(new SwitchFirstOperator()); };
30684}
30685var SwitchFirstOperator = /*@__PURE__*/ (function () {
30686 function SwitchFirstOperator() {
30687 }
30688 SwitchFirstOperator.prototype.call = function (subscriber, source) {
30689 return source.subscribe(new SwitchFirstSubscriber(subscriber));
30690 };
30691 return SwitchFirstOperator;
30692}());
30693var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) {
30694 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchFirstSubscriber, _super);
30695 function SwitchFirstSubscriber(destination) {
30696 var _this = _super.call(this, destination) || this;
30697 _this.hasCompleted = false;
30698 _this.hasSubscription = false;
30699 return _this;
30700 }
30701 SwitchFirstSubscriber.prototype._next = function (value) {
30702 if (!this.hasSubscription) {
30703 this.hasSubscription = true;
30704 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, value));
30705 }
30706 };
30707 SwitchFirstSubscriber.prototype._complete = function () {
30708 this.hasCompleted = true;
30709 if (!this.hasSubscription) {
30710 this.destination.complete();
30711 }
30712 };
30713 SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
30714 this.remove(innerSub);
30715 this.hasSubscription = false;
30716 if (this.hasCompleted) {
30717 this.destination.complete();
30718 }
30719 };
30720 return SwitchFirstSubscriber;
30721}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
30722//# sourceMappingURL=exhaust.js.map
30723
30724
30725/***/ }),
30726/* 282 */
30727/***/ (function(module, __webpack_exports__, __webpack_require__) {
30728
30729"use strict";
30730__webpack_require__.r(__webpack_exports__);
30731/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return exhaustMap; });
30732/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30733/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
30734/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(211);
30735/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
30736/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(206);
30737/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(223);
30738/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
30739
30740
30741
30742
30743
30744
30745function exhaustMap(project, resultSelector) {
30746 if (resultSelector) {
30747 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); })); })); };
30748 }
30749 return function (source) {
30750 return source.lift(new ExhaustMapOperator(project));
30751 };
30752}
30753var ExhaustMapOperator = /*@__PURE__*/ (function () {
30754 function ExhaustMapOperator(project) {
30755 this.project = project;
30756 }
30757 ExhaustMapOperator.prototype.call = function (subscriber, source) {
30758 return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
30759 };
30760 return ExhaustMapOperator;
30761}());
30762var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) {
30763 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExhaustMapSubscriber, _super);
30764 function ExhaustMapSubscriber(destination, project) {
30765 var _this = _super.call(this, destination) || this;
30766 _this.project = project;
30767 _this.hasSubscription = false;
30768 _this.hasCompleted = false;
30769 _this.index = 0;
30770 return _this;
30771 }
30772 ExhaustMapSubscriber.prototype._next = function (value) {
30773 if (!this.hasSubscription) {
30774 this.tryNext(value);
30775 }
30776 };
30777 ExhaustMapSubscriber.prototype.tryNext = function (value) {
30778 var result;
30779 var index = this.index++;
30780 try {
30781 result = this.project(value, index);
30782 }
30783 catch (err) {
30784 this.destination.error(err);
30785 return;
30786 }
30787 this.hasSubscription = true;
30788 this._innerSub(result, value, index);
30789 };
30790 ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) {
30791 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, undefined, undefined);
30792 var destination = this.destination;
30793 destination.add(innerSubscriber);
30794 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, value, index, innerSubscriber);
30795 };
30796 ExhaustMapSubscriber.prototype._complete = function () {
30797 this.hasCompleted = true;
30798 if (!this.hasSubscription) {
30799 this.destination.complete();
30800 }
30801 this.unsubscribe();
30802 };
30803 ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30804 this.destination.next(innerValue);
30805 };
30806 ExhaustMapSubscriber.prototype.notifyError = function (err) {
30807 this.destination.error(err);
30808 };
30809 ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) {
30810 var destination = this.destination;
30811 destination.remove(innerSub);
30812 this.hasSubscription = false;
30813 if (this.hasCompleted) {
30814 this.destination.complete();
30815 }
30816 };
30817 return ExhaustMapSubscriber;
30818}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
30819//# sourceMappingURL=exhaustMap.js.map
30820
30821
30822/***/ }),
30823/* 283 */
30824/***/ (function(module, __webpack_exports__, __webpack_require__) {
30825
30826"use strict";
30827__webpack_require__.r(__webpack_exports__);
30828/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return expand; });
30829/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandOperator", function() { return ExpandOperator; });
30830/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandSubscriber", function() { return ExpandSubscriber; });
30831/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30832/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
30833/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
30834/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
30835
30836
30837
30838function expand(project, concurrent, scheduler) {
30839 if (concurrent === void 0) {
30840 concurrent = Number.POSITIVE_INFINITY;
30841 }
30842 if (scheduler === void 0) {
30843 scheduler = undefined;
30844 }
30845 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
30846 return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
30847}
30848var ExpandOperator = /*@__PURE__*/ (function () {
30849 function ExpandOperator(project, concurrent, scheduler) {
30850 this.project = project;
30851 this.concurrent = concurrent;
30852 this.scheduler = scheduler;
30853 }
30854 ExpandOperator.prototype.call = function (subscriber, source) {
30855 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
30856 };
30857 return ExpandOperator;
30858}());
30859
30860var ExpandSubscriber = /*@__PURE__*/ (function (_super) {
30861 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExpandSubscriber, _super);
30862 function ExpandSubscriber(destination, project, concurrent, scheduler) {
30863 var _this = _super.call(this, destination) || this;
30864 _this.project = project;
30865 _this.concurrent = concurrent;
30866 _this.scheduler = scheduler;
30867 _this.index = 0;
30868 _this.active = 0;
30869 _this.hasCompleted = false;
30870 if (concurrent < Number.POSITIVE_INFINITY) {
30871 _this.buffer = [];
30872 }
30873 return _this;
30874 }
30875 ExpandSubscriber.dispatch = function (arg) {
30876 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
30877 subscriber.subscribeToProjection(result, value, index);
30878 };
30879 ExpandSubscriber.prototype._next = function (value) {
30880 var destination = this.destination;
30881 if (destination.closed) {
30882 this._complete();
30883 return;
30884 }
30885 var index = this.index++;
30886 if (this.active < this.concurrent) {
30887 destination.next(value);
30888 try {
30889 var project = this.project;
30890 var result = project(value, index);
30891 if (!this.scheduler) {
30892 this.subscribeToProjection(result, value, index);
30893 }
30894 else {
30895 var state = { subscriber: this, result: result, value: value, index: index };
30896 var destination_1 = this.destination;
30897 destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
30898 }
30899 }
30900 catch (e) {
30901 destination.error(e);
30902 }
30903 }
30904 else {
30905 this.buffer.push(value);
30906 }
30907 };
30908 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
30909 this.active++;
30910 var destination = this.destination;
30911 destination.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, value, index));
30912 };
30913 ExpandSubscriber.prototype._complete = function () {
30914 this.hasCompleted = true;
30915 if (this.hasCompleted && this.active === 0) {
30916 this.destination.complete();
30917 }
30918 this.unsubscribe();
30919 };
30920 ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30921 this._next(innerValue);
30922 };
30923 ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
30924 var buffer = this.buffer;
30925 var destination = this.destination;
30926 destination.remove(innerSub);
30927 this.active--;
30928 if (buffer && buffer.length > 0) {
30929 this._next(buffer.shift());
30930 }
30931 if (this.hasCompleted && this.active === 0) {
30932 this.destination.complete();
30933 }
30934 };
30935 return ExpandSubscriber;
30936}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
30937
30938//# sourceMappingURL=expand.js.map
30939
30940
30941/***/ }),
30942/* 284 */
30943/***/ (function(module, __webpack_exports__, __webpack_require__) {
30944
30945"use strict";
30946__webpack_require__.r(__webpack_exports__);
30947/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return finalize; });
30948/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30949/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30950/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(157);
30951/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */
30952
30953
30954
30955function finalize(callback) {
30956 return function (source) { return source.lift(new FinallyOperator(callback)); };
30957}
30958var FinallyOperator = /*@__PURE__*/ (function () {
30959 function FinallyOperator(callback) {
30960 this.callback = callback;
30961 }
30962 FinallyOperator.prototype.call = function (subscriber, source) {
30963 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
30964 };
30965 return FinallyOperator;
30966}());
30967var FinallySubscriber = /*@__PURE__*/ (function (_super) {
30968 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FinallySubscriber, _super);
30969 function FinallySubscriber(destination, callback) {
30970 var _this = _super.call(this, destination) || this;
30971 _this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"](callback));
30972 return _this;
30973 }
30974 return FinallySubscriber;
30975}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30976//# sourceMappingURL=finalize.js.map
30977
30978
30979/***/ }),
30980/* 285 */
30981/***/ (function(module, __webpack_exports__, __webpack_require__) {
30982
30983"use strict";
30984__webpack_require__.r(__webpack_exports__);
30985/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return find; });
30986/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueOperator", function() { return FindValueOperator; });
30987/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueSubscriber", function() { return FindValueSubscriber; });
30988/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
30989/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
30990/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30991
30992
30993function find(predicate, thisArg) {
30994 if (typeof predicate !== 'function') {
30995 throw new TypeError('predicate is not a function');
30996 }
30997 return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
30998}
30999var FindValueOperator = /*@__PURE__*/ (function () {
31000 function FindValueOperator(predicate, source, yieldIndex, thisArg) {
31001 this.predicate = predicate;
31002 this.source = source;
31003 this.yieldIndex = yieldIndex;
31004 this.thisArg = thisArg;
31005 }
31006 FindValueOperator.prototype.call = function (observer, source) {
31007 return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
31008 };
31009 return FindValueOperator;
31010}());
31011
31012var FindValueSubscriber = /*@__PURE__*/ (function (_super) {
31013 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FindValueSubscriber, _super);
31014 function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
31015 var _this = _super.call(this, destination) || this;
31016 _this.predicate = predicate;
31017 _this.source = source;
31018 _this.yieldIndex = yieldIndex;
31019 _this.thisArg = thisArg;
31020 _this.index = 0;
31021 return _this;
31022 }
31023 FindValueSubscriber.prototype.notifyComplete = function (value) {
31024 var destination = this.destination;
31025 destination.next(value);
31026 destination.complete();
31027 this.unsubscribe();
31028 };
31029 FindValueSubscriber.prototype._next = function (value) {
31030 var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
31031 var index = this.index++;
31032 try {
31033 var result = predicate.call(thisArg || this, value, index, this.source);
31034 if (result) {
31035 this.notifyComplete(this.yieldIndex ? index : value);
31036 }
31037 }
31038 catch (err) {
31039 this.destination.error(err);
31040 }
31041 };
31042 FindValueSubscriber.prototype._complete = function () {
31043 this.notifyComplete(this.yieldIndex ? -1 : undefined);
31044 };
31045 return FindValueSubscriber;
31046}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31047
31048//# sourceMappingURL=find.js.map
31049
31050
31051/***/ }),
31052/* 286 */
31053/***/ (function(module, __webpack_exports__, __webpack_require__) {
31054
31055"use strict";
31056__webpack_require__.r(__webpack_exports__);
31057/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; });
31058/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(285);
31059/** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */
31060
31061function findIndex(predicate, thisArg) {
31062 return function (source) { return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__["FindValueOperator"](predicate, source, true, thisArg)); };
31063}
31064//# sourceMappingURL=findIndex.js.map
31065
31066
31067/***/ }),
31068/* 287 */
31069/***/ (function(module, __webpack_exports__, __webpack_require__) {
31070
31071"use strict";
31072__webpack_require__.r(__webpack_exports__);
31073/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; });
31074/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(203);
31075/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
31076/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(278);
31077/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(268);
31078/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(277);
31079/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(200);
31080/** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */
31081
31082
31083
31084
31085
31086
31087function first(predicate, defaultValue) {
31088 var hasDefaultValue = arguments.length >= 2;
31089 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"](); })); };
31090}
31091//# sourceMappingURL=first.js.map
31092
31093
31094/***/ }),
31095/* 288 */
31096/***/ (function(module, __webpack_exports__, __webpack_require__) {
31097
31098"use strict";
31099__webpack_require__.r(__webpack_exports__);
31100/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return ignoreElements; });
31101/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31102/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31103/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31104
31105
31106function ignoreElements() {
31107 return function ignoreElementsOperatorFunction(source) {
31108 return source.lift(new IgnoreElementsOperator());
31109 };
31110}
31111var IgnoreElementsOperator = /*@__PURE__*/ (function () {
31112 function IgnoreElementsOperator() {
31113 }
31114 IgnoreElementsOperator.prototype.call = function (subscriber, source) {
31115 return source.subscribe(new IgnoreElementsSubscriber(subscriber));
31116 };
31117 return IgnoreElementsOperator;
31118}());
31119var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) {
31120 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IgnoreElementsSubscriber, _super);
31121 function IgnoreElementsSubscriber() {
31122 return _super !== null && _super.apply(this, arguments) || this;
31123 }
31124 IgnoreElementsSubscriber.prototype._next = function (unused) {
31125 };
31126 return IgnoreElementsSubscriber;
31127}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31128//# sourceMappingURL=ignoreElements.js.map
31129
31130
31131/***/ }),
31132/* 289 */
31133/***/ (function(module, __webpack_exports__, __webpack_require__) {
31134
31135"use strict";
31136__webpack_require__.r(__webpack_exports__);
31137/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
31138/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31139/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31140/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31141
31142
31143function isEmpty() {
31144 return function (source) { return source.lift(new IsEmptyOperator()); };
31145}
31146var IsEmptyOperator = /*@__PURE__*/ (function () {
31147 function IsEmptyOperator() {
31148 }
31149 IsEmptyOperator.prototype.call = function (observer, source) {
31150 return source.subscribe(new IsEmptySubscriber(observer));
31151 };
31152 return IsEmptyOperator;
31153}());
31154var IsEmptySubscriber = /*@__PURE__*/ (function (_super) {
31155 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IsEmptySubscriber, _super);
31156 function IsEmptySubscriber(destination) {
31157 return _super.call(this, destination) || this;
31158 }
31159 IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
31160 var destination = this.destination;
31161 destination.next(isEmpty);
31162 destination.complete();
31163 };
31164 IsEmptySubscriber.prototype._next = function (value) {
31165 this.notifyComplete(false);
31166 };
31167 IsEmptySubscriber.prototype._complete = function () {
31168 this.notifyComplete(true);
31169 };
31170 return IsEmptySubscriber;
31171}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31172//# sourceMappingURL=isEmpty.js.map
31173
31174
31175/***/ }),
31176/* 290 */
31177/***/ (function(module, __webpack_exports__, __webpack_require__) {
31178
31179"use strict";
31180__webpack_require__.r(__webpack_exports__);
31181/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; });
31182/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(203);
31183/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
31184/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(291);
31185/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(277);
31186/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(268);
31187/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(200);
31188/** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */
31189
31190
31191
31192
31193
31194
31195function last(predicate, defaultValue) {
31196 var hasDefaultValue = arguments.length >= 2;
31197 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"](); })); };
31198}
31199//# sourceMappingURL=last.js.map
31200
31201
31202/***/ }),
31203/* 291 */
31204/***/ (function(module, __webpack_exports__, __webpack_require__) {
31205
31206"use strict";
31207__webpack_require__.r(__webpack_exports__);
31208/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return takeLast; });
31209/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31210/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31211/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(202);
31212/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(183);
31213/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
31214
31215
31216
31217
31218function takeLast(count) {
31219 return function takeLastOperatorFunction(source) {
31220 if (count === 0) {
31221 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
31222 }
31223 else {
31224 return source.lift(new TakeLastOperator(count));
31225 }
31226 };
31227}
31228var TakeLastOperator = /*@__PURE__*/ (function () {
31229 function TakeLastOperator(total) {
31230 this.total = total;
31231 if (this.total < 0) {
31232 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
31233 }
31234 }
31235 TakeLastOperator.prototype.call = function (subscriber, source) {
31236 return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
31237 };
31238 return TakeLastOperator;
31239}());
31240var TakeLastSubscriber = /*@__PURE__*/ (function (_super) {
31241 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeLastSubscriber, _super);
31242 function TakeLastSubscriber(destination, total) {
31243 var _this = _super.call(this, destination) || this;
31244 _this.total = total;
31245 _this.ring = new Array();
31246 _this.count = 0;
31247 return _this;
31248 }
31249 TakeLastSubscriber.prototype._next = function (value) {
31250 var ring = this.ring;
31251 var total = this.total;
31252 var count = this.count++;
31253 if (ring.length < total) {
31254 ring.push(value);
31255 }
31256 else {
31257 var index = count % total;
31258 ring[index] = value;
31259 }
31260 };
31261 TakeLastSubscriber.prototype._complete = function () {
31262 var destination = this.destination;
31263 var count = this.count;
31264 if (count > 0) {
31265 var total = this.count >= this.total ? this.total : this.count;
31266 var ring = this.ring;
31267 for (var i = 0; i < total; i++) {
31268 var idx = (count++) % total;
31269 destination.next(ring[idx]);
31270 }
31271 }
31272 destination.complete();
31273 };
31274 return TakeLastSubscriber;
31275}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31276//# sourceMappingURL=takeLast.js.map
31277
31278
31279/***/ }),
31280/* 292 */
31281/***/ (function(module, __webpack_exports__, __webpack_require__) {
31282
31283"use strict";
31284__webpack_require__.r(__webpack_exports__);
31285/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return mapTo; });
31286/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31287/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31288/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31289
31290
31291function mapTo(value) {
31292 return function (source) { return source.lift(new MapToOperator(value)); };
31293}
31294var MapToOperator = /*@__PURE__*/ (function () {
31295 function MapToOperator(value) {
31296 this.value = value;
31297 }
31298 MapToOperator.prototype.call = function (subscriber, source) {
31299 return source.subscribe(new MapToSubscriber(subscriber, this.value));
31300 };
31301 return MapToOperator;
31302}());
31303var MapToSubscriber = /*@__PURE__*/ (function (_super) {
31304 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapToSubscriber, _super);
31305 function MapToSubscriber(destination, value) {
31306 var _this = _super.call(this, destination) || this;
31307 _this.value = value;
31308 return _this;
31309 }
31310 MapToSubscriber.prototype._next = function (x) {
31311 this.destination.next(this.value);
31312 };
31313 return MapToSubscriber;
31314}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31315//# sourceMappingURL=mapTo.js.map
31316
31317
31318/***/ }),
31319/* 293 */
31320/***/ (function(module, __webpack_exports__, __webpack_require__) {
31321
31322"use strict";
31323__webpack_require__.r(__webpack_exports__);
31324/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return materialize; });
31325/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31326/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31327/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(182);
31328/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
31329
31330
31331
31332function materialize() {
31333 return function materializeOperatorFunction(source) {
31334 return source.lift(new MaterializeOperator());
31335 };
31336}
31337var MaterializeOperator = /*@__PURE__*/ (function () {
31338 function MaterializeOperator() {
31339 }
31340 MaterializeOperator.prototype.call = function (subscriber, source) {
31341 return source.subscribe(new MaterializeSubscriber(subscriber));
31342 };
31343 return MaterializeOperator;
31344}());
31345var MaterializeSubscriber = /*@__PURE__*/ (function (_super) {
31346 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MaterializeSubscriber, _super);
31347 function MaterializeSubscriber(destination) {
31348 return _super.call(this, destination) || this;
31349 }
31350 MaterializeSubscriber.prototype._next = function (value) {
31351 this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
31352 };
31353 MaterializeSubscriber.prototype._error = function (err) {
31354 var destination = this.destination;
31355 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
31356 destination.complete();
31357 };
31358 MaterializeSubscriber.prototype._complete = function () {
31359 var destination = this.destination;
31360 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
31361 destination.complete();
31362 };
31363 return MaterializeSubscriber;
31364}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31365//# sourceMappingURL=materialize.js.map
31366
31367
31368/***/ }),
31369/* 294 */
31370/***/ (function(module, __webpack_exports__, __webpack_require__) {
31371
31372"use strict";
31373__webpack_require__.r(__webpack_exports__);
31374/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; });
31375/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(295);
31376/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
31377
31378function max(comparer) {
31379 var max = (typeof comparer === 'function')
31380 ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
31381 : function (x, y) { return x > y ? x : y; };
31382 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(max);
31383}
31384//# sourceMappingURL=max.js.map
31385
31386
31387/***/ }),
31388/* 295 */
31389/***/ (function(module, __webpack_exports__, __webpack_require__) {
31390
31391"use strict";
31392__webpack_require__.r(__webpack_exports__);
31393/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; });
31394/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(296);
31395/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(291);
31396/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(268);
31397/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(164);
31398/** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */
31399
31400
31401
31402
31403function reduce(accumulator, seed) {
31404 if (arguments.length >= 2) {
31405 return function reduceOperatorFunctionWithSeed(source) {
31406 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);
31407 };
31408 }
31409 return function reduceOperatorFunction(source) {
31410 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);
31411 };
31412}
31413//# sourceMappingURL=reduce.js.map
31414
31415
31416/***/ }),
31417/* 296 */
31418/***/ (function(module, __webpack_exports__, __webpack_require__) {
31419
31420"use strict";
31421__webpack_require__.r(__webpack_exports__);
31422/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return scan; });
31423/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31424/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31425/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31426
31427
31428function scan(accumulator, seed) {
31429 var hasSeed = false;
31430 if (arguments.length >= 2) {
31431 hasSeed = true;
31432 }
31433 return function scanOperatorFunction(source) {
31434 return source.lift(new ScanOperator(accumulator, seed, hasSeed));
31435 };
31436}
31437var ScanOperator = /*@__PURE__*/ (function () {
31438 function ScanOperator(accumulator, seed, hasSeed) {
31439 if (hasSeed === void 0) {
31440 hasSeed = false;
31441 }
31442 this.accumulator = accumulator;
31443 this.seed = seed;
31444 this.hasSeed = hasSeed;
31445 }
31446 ScanOperator.prototype.call = function (subscriber, source) {
31447 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
31448 };
31449 return ScanOperator;
31450}());
31451var ScanSubscriber = /*@__PURE__*/ (function (_super) {
31452 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ScanSubscriber, _super);
31453 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
31454 var _this = _super.call(this, destination) || this;
31455 _this.accumulator = accumulator;
31456 _this._seed = _seed;
31457 _this.hasSeed = hasSeed;
31458 _this.index = 0;
31459 return _this;
31460 }
31461 Object.defineProperty(ScanSubscriber.prototype, "seed", {
31462 get: function () {
31463 return this._seed;
31464 },
31465 set: function (value) {
31466 this.hasSeed = true;
31467 this._seed = value;
31468 },
31469 enumerable: true,
31470 configurable: true
31471 });
31472 ScanSubscriber.prototype._next = function (value) {
31473 if (!this.hasSeed) {
31474 this.seed = value;
31475 this.destination.next(value);
31476 }
31477 else {
31478 return this._tryNext(value);
31479 }
31480 };
31481 ScanSubscriber.prototype._tryNext = function (value) {
31482 var index = this.index++;
31483 var result;
31484 try {
31485 result = this.accumulator(this.seed, value, index);
31486 }
31487 catch (err) {
31488 this.destination.error(err);
31489 }
31490 this.seed = result;
31491 this.destination.next(result);
31492 };
31493 return ScanSubscriber;
31494}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31495//# sourceMappingURL=scan.js.map
31496
31497
31498/***/ }),
31499/* 297 */
31500/***/ (function(module, __webpack_exports__, __webpack_require__) {
31501
31502"use strict";
31503__webpack_require__.r(__webpack_exports__);
31504/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
31505/* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(238);
31506/** PURE_IMPORTS_START _observable_merge PURE_IMPORTS_END */
31507
31508function merge() {
31509 var observables = [];
31510 for (var _i = 0; _i < arguments.length; _i++) {
31511 observables[_i] = arguments[_i];
31512 }
31513 return function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"].apply(void 0, [source].concat(observables))); };
31514}
31515//# sourceMappingURL=merge.js.map
31516
31517
31518/***/ }),
31519/* 298 */
31520/***/ (function(module, __webpack_exports__, __webpack_require__) {
31521
31522"use strict";
31523__webpack_require__.r(__webpack_exports__);
31524/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return mergeMapTo; });
31525/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(222);
31526/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
31527
31528function mergeMapTo(innerObservable, resultSelector, concurrent) {
31529 if (concurrent === void 0) {
31530 concurrent = Number.POSITIVE_INFINITY;
31531 }
31532 if (typeof resultSelector === 'function') {
31533 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, resultSelector, concurrent);
31534 }
31535 if (typeof resultSelector === 'number') {
31536 concurrent = resultSelector;
31537 }
31538 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, concurrent);
31539}
31540//# sourceMappingURL=mergeMapTo.js.map
31541
31542
31543/***/ }),
31544/* 299 */
31545/***/ (function(module, __webpack_exports__, __webpack_require__) {
31546
31547"use strict";
31548__webpack_require__.r(__webpack_exports__);
31549/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return mergeScan; });
31550/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanOperator", function() { return MergeScanOperator; });
31551/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanSubscriber", function() { return MergeScanSubscriber; });
31552/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31553/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(210);
31554/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
31555/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(211);
31556/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber PURE_IMPORTS_END */
31557
31558
31559
31560
31561function mergeScan(accumulator, seed, concurrent) {
31562 if (concurrent === void 0) {
31563 concurrent = Number.POSITIVE_INFINITY;
31564 }
31565 return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
31566}
31567var MergeScanOperator = /*@__PURE__*/ (function () {
31568 function MergeScanOperator(accumulator, seed, concurrent) {
31569 this.accumulator = accumulator;
31570 this.seed = seed;
31571 this.concurrent = concurrent;
31572 }
31573 MergeScanOperator.prototype.call = function (subscriber, source) {
31574 return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
31575 };
31576 return MergeScanOperator;
31577}());
31578
31579var MergeScanSubscriber = /*@__PURE__*/ (function (_super) {
31580 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeScanSubscriber, _super);
31581 function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
31582 var _this = _super.call(this, destination) || this;
31583 _this.accumulator = accumulator;
31584 _this.acc = acc;
31585 _this.concurrent = concurrent;
31586 _this.hasValue = false;
31587 _this.hasCompleted = false;
31588 _this.buffer = [];
31589 _this.active = 0;
31590 _this.index = 0;
31591 return _this;
31592 }
31593 MergeScanSubscriber.prototype._next = function (value) {
31594 if (this.active < this.concurrent) {
31595 var index = this.index++;
31596 var destination = this.destination;
31597 var ish = void 0;
31598 try {
31599 var accumulator = this.accumulator;
31600 ish = accumulator(this.acc, value, index);
31601 }
31602 catch (e) {
31603 return destination.error(e);
31604 }
31605 this.active++;
31606 this._innerSub(ish, value, index);
31607 }
31608 else {
31609 this.buffer.push(value);
31610 }
31611 };
31612 MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
31613 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, undefined, undefined);
31614 var destination = this.destination;
31615 destination.add(innerSubscriber);
31616 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, value, index, innerSubscriber);
31617 };
31618 MergeScanSubscriber.prototype._complete = function () {
31619 this.hasCompleted = true;
31620 if (this.active === 0 && this.buffer.length === 0) {
31621 if (this.hasValue === false) {
31622 this.destination.next(this.acc);
31623 }
31624 this.destination.complete();
31625 }
31626 this.unsubscribe();
31627 };
31628 MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31629 var destination = this.destination;
31630 this.acc = innerValue;
31631 this.hasValue = true;
31632 destination.next(innerValue);
31633 };
31634 MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
31635 var buffer = this.buffer;
31636 var destination = this.destination;
31637 destination.remove(innerSub);
31638 this.active--;
31639 if (buffer.length > 0) {
31640 this._next(buffer.shift());
31641 }
31642 else if (this.active === 0 && this.hasCompleted) {
31643 if (this.hasValue === false) {
31644 this.destination.next(this.acc);
31645 }
31646 this.destination.complete();
31647 }
31648 };
31649 return MergeScanSubscriber;
31650}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
31651
31652//# sourceMappingURL=mergeScan.js.map
31653
31654
31655/***/ }),
31656/* 300 */
31657/***/ (function(module, __webpack_exports__, __webpack_require__) {
31658
31659"use strict";
31660__webpack_require__.r(__webpack_exports__);
31661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; });
31662/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(295);
31663/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
31664
31665function min(comparer) {
31666 var min = (typeof comparer === 'function')
31667 ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
31668 : function (x, y) { return x < y ? x : y; };
31669 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(min);
31670}
31671//# sourceMappingURL=min.js.map
31672
31673
31674/***/ }),
31675/* 301 */
31676/***/ (function(module, __webpack_exports__, __webpack_require__) {
31677
31678"use strict";
31679__webpack_require__.r(__webpack_exports__);
31680/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return multicast; });
31681/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MulticastOperator", function() { return MulticastOperator; });
31682/* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(166);
31683/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */
31684
31685function multicast(subjectOrSubjectFactory, selector) {
31686 return function multicastOperatorFunction(source) {
31687 var subjectFactory;
31688 if (typeof subjectOrSubjectFactory === 'function') {
31689 subjectFactory = subjectOrSubjectFactory;
31690 }
31691 else {
31692 subjectFactory = function subjectFactory() {
31693 return subjectOrSubjectFactory;
31694 };
31695 }
31696 if (typeof selector === 'function') {
31697 return source.lift(new MulticastOperator(subjectFactory, selector));
31698 }
31699 var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__["connectableObservableDescriptor"]);
31700 connectable.source = source;
31701 connectable.subjectFactory = subjectFactory;
31702 return connectable;
31703 };
31704}
31705var MulticastOperator = /*@__PURE__*/ (function () {
31706 function MulticastOperator(subjectFactory, selector) {
31707 this.subjectFactory = subjectFactory;
31708 this.selector = selector;
31709 }
31710 MulticastOperator.prototype.call = function (subscriber, source) {
31711 var selector = this.selector;
31712 var subject = this.subjectFactory();
31713 var subscription = selector(subject).subscribe(subscriber);
31714 subscription.add(source.subscribe(subject));
31715 return subscription;
31716 };
31717 return MulticastOperator;
31718}());
31719
31720//# sourceMappingURL=multicast.js.map
31721
31722
31723/***/ }),
31724/* 302 */
31725/***/ (function(module, __webpack_exports__, __webpack_require__) {
31726
31727"use strict";
31728__webpack_require__.r(__webpack_exports__);
31729/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
31730/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNextStatic", function() { return onErrorResumeNextStatic; });
31731/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31732/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(223);
31733/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(158);
31734/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
31735/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(211);
31736/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(210);
31737/** PURE_IMPORTS_START tslib,_observable_from,_util_isArray,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
31738
31739
31740
31741
31742
31743
31744function onErrorResumeNext() {
31745 var nextSources = [];
31746 for (var _i = 0; _i < arguments.length; _i++) {
31747 nextSources[_i] = arguments[_i];
31748 }
31749 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
31750 nextSources = nextSources[0];
31751 }
31752 return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
31753}
31754function onErrorResumeNextStatic() {
31755 var nextSources = [];
31756 for (var _i = 0; _i < arguments.length; _i++) {
31757 nextSources[_i] = arguments[_i];
31758 }
31759 var source = null;
31760 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
31761 nextSources = nextSources[0];
31762 }
31763 source = nextSources.shift();
31764 return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(source, null).lift(new OnErrorResumeNextOperator(nextSources));
31765}
31766var OnErrorResumeNextOperator = /*@__PURE__*/ (function () {
31767 function OnErrorResumeNextOperator(nextSources) {
31768 this.nextSources = nextSources;
31769 }
31770 OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
31771 return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
31772 };
31773 return OnErrorResumeNextOperator;
31774}());
31775var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) {
31776 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OnErrorResumeNextSubscriber, _super);
31777 function OnErrorResumeNextSubscriber(destination, nextSources) {
31778 var _this = _super.call(this, destination) || this;
31779 _this.destination = destination;
31780 _this.nextSources = nextSources;
31781 return _this;
31782 }
31783 OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
31784 this.subscribeToNextSource();
31785 };
31786 OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
31787 this.subscribeToNextSource();
31788 };
31789 OnErrorResumeNextSubscriber.prototype._error = function (err) {
31790 this.subscribeToNextSource();
31791 this.unsubscribe();
31792 };
31793 OnErrorResumeNextSubscriber.prototype._complete = function () {
31794 this.subscribeToNextSource();
31795 this.unsubscribe();
31796 };
31797 OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
31798 var next = this.nextSources.shift();
31799 if (!!next) {
31800 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__["InnerSubscriber"](this, undefined, undefined);
31801 var destination = this.destination;
31802 destination.add(innerSubscriber);
31803 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, next, undefined, undefined, innerSubscriber);
31804 }
31805 else {
31806 this.destination.complete();
31807 }
31808 };
31809 return OnErrorResumeNextSubscriber;
31810}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
31811//# sourceMappingURL=onErrorResumeNext.js.map
31812
31813
31814/***/ }),
31815/* 303 */
31816/***/ (function(module, __webpack_exports__, __webpack_require__) {
31817
31818"use strict";
31819__webpack_require__.r(__webpack_exports__);
31820/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return pairwise; });
31821/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
31822/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
31823/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31824
31825
31826function pairwise() {
31827 return function (source) { return source.lift(new PairwiseOperator()); };
31828}
31829var PairwiseOperator = /*@__PURE__*/ (function () {
31830 function PairwiseOperator() {
31831 }
31832 PairwiseOperator.prototype.call = function (subscriber, source) {
31833 return source.subscribe(new PairwiseSubscriber(subscriber));
31834 };
31835 return PairwiseOperator;
31836}());
31837var PairwiseSubscriber = /*@__PURE__*/ (function (_super) {
31838 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](PairwiseSubscriber, _super);
31839 function PairwiseSubscriber(destination) {
31840 var _this = _super.call(this, destination) || this;
31841 _this.hasPrev = false;
31842 return _this;
31843 }
31844 PairwiseSubscriber.prototype._next = function (value) {
31845 var pair;
31846 if (this.hasPrev) {
31847 pair = [this.prev, value];
31848 }
31849 else {
31850 this.hasPrev = true;
31851 }
31852 this.prev = value;
31853 if (pair) {
31854 this.destination.next(pair);
31855 }
31856 };
31857 return PairwiseSubscriber;
31858}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31859//# sourceMappingURL=pairwise.js.map
31860
31861
31862/***/ }),
31863/* 304 */
31864/***/ (function(module, __webpack_exports__, __webpack_require__) {
31865
31866"use strict";
31867__webpack_require__.r(__webpack_exports__);
31868/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
31869/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
31870/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
31871/** PURE_IMPORTS_START _util_not,_filter PURE_IMPORTS_END */
31872
31873
31874function partition(predicate, thisArg) {
31875 return function (source) {
31876 return [
31877 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(predicate, thisArg)(source),
31878 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(source)
31879 ];
31880 };
31881}
31882//# sourceMappingURL=partition.js.map
31883
31884
31885/***/ }),
31886/* 305 */
31887/***/ (function(module, __webpack_exports__, __webpack_require__) {
31888
31889"use strict";
31890__webpack_require__.r(__webpack_exports__);
31891/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return pluck; });
31892/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(206);
31893/** PURE_IMPORTS_START _map PURE_IMPORTS_END */
31894
31895function pluck() {
31896 var properties = [];
31897 for (var _i = 0; _i < arguments.length; _i++) {
31898 properties[_i] = arguments[_i];
31899 }
31900 var length = properties.length;
31901 if (length === 0) {
31902 throw new Error('list of properties cannot be empty.');
31903 }
31904 return function (source) { return Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(plucker(properties, length))(source); };
31905}
31906function plucker(props, length) {
31907 var mapper = function (x) {
31908 var currentProp = x;
31909 for (var i = 0; i < length; i++) {
31910 var p = currentProp[props[i]];
31911 if (typeof p !== 'undefined') {
31912 currentProp = p;
31913 }
31914 else {
31915 return undefined;
31916 }
31917 }
31918 return currentProp;
31919 };
31920 return mapper;
31921}
31922//# sourceMappingURL=pluck.js.map
31923
31924
31925/***/ }),
31926/* 306 */
31927/***/ (function(module, __webpack_exports__, __webpack_require__) {
31928
31929"use strict";
31930__webpack_require__.r(__webpack_exports__);
31931/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; });
31932/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31933/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(301);
31934/** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */
31935
31936
31937function publish(selector) {
31938 return selector ?
31939 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"](); }, selector) :
31940 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]());
31941}
31942//# sourceMappingURL=publish.js.map
31943
31944
31945/***/ }),
31946/* 307 */
31947/***/ (function(module, __webpack_exports__, __webpack_require__) {
31948
31949"use strict";
31950__webpack_require__.r(__webpack_exports__);
31951/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; });
31952/* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(172);
31953/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(301);
31954/** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */
31955
31956
31957function publishBehavior(value) {
31958 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](value))(source); };
31959}
31960//# sourceMappingURL=publishBehavior.js.map
31961
31962
31963/***/ }),
31964/* 308 */
31965/***/ (function(module, __webpack_exports__, __webpack_require__) {
31966
31967"use strict";
31968__webpack_require__.r(__webpack_exports__);
31969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; });
31970/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(190);
31971/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(301);
31972/** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */
31973
31974
31975function publishLast() {
31976 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__["AsyncSubject"]())(source); };
31977}
31978//# sourceMappingURL=publishLast.js.map
31979
31980
31981/***/ }),
31982/* 309 */
31983/***/ (function(module, __webpack_exports__, __webpack_require__) {
31984
31985"use strict";
31986__webpack_require__.r(__webpack_exports__);
31987/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; });
31988/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(173);
31989/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(301);
31990/** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */
31991
31992
31993function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
31994 if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
31995 scheduler = selectorOrScheduler;
31996 }
31997 var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
31998 var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
31999 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return subject; }, selector)(source); };
32000}
32001//# sourceMappingURL=publishReplay.js.map
32002
32003
32004/***/ }),
32005/* 310 */
32006/***/ (function(module, __webpack_exports__, __webpack_require__) {
32007
32008"use strict";
32009__webpack_require__.r(__webpack_exports__);
32010/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
32011/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(158);
32012/* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(245);
32013/** PURE_IMPORTS_START _util_isArray,_observable_race PURE_IMPORTS_END */
32014
32015
32016function race() {
32017 var observables = [];
32018 for (var _i = 0; _i < arguments.length; _i++) {
32019 observables[_i] = arguments[_i];
32020 }
32021 return function raceOperatorFunction(source) {
32022 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
32023 observables = observables[0];
32024 }
32025 return source.lift.call(_observable_race__WEBPACK_IMPORTED_MODULE_1__["race"].apply(void 0, [source].concat(observables)));
32026 };
32027}
32028//# sourceMappingURL=race.js.map
32029
32030
32031/***/ }),
32032/* 311 */
32033/***/ (function(module, __webpack_exports__, __webpack_require__) {
32034
32035"use strict";
32036__webpack_require__.r(__webpack_exports__);
32037/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return repeat; });
32038/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32039/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32040/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(183);
32041/** PURE_IMPORTS_START tslib,_Subscriber,_observable_empty PURE_IMPORTS_END */
32042
32043
32044
32045function repeat(count) {
32046 if (count === void 0) {
32047 count = -1;
32048 }
32049 return function (source) {
32050 if (count === 0) {
32051 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
32052 }
32053 else if (count < 0) {
32054 return source.lift(new RepeatOperator(-1, source));
32055 }
32056 else {
32057 return source.lift(new RepeatOperator(count - 1, source));
32058 }
32059 };
32060}
32061var RepeatOperator = /*@__PURE__*/ (function () {
32062 function RepeatOperator(count, source) {
32063 this.count = count;
32064 this.source = source;
32065 }
32066 RepeatOperator.prototype.call = function (subscriber, source) {
32067 return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
32068 };
32069 return RepeatOperator;
32070}());
32071var RepeatSubscriber = /*@__PURE__*/ (function (_super) {
32072 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatSubscriber, _super);
32073 function RepeatSubscriber(destination, count, source) {
32074 var _this = _super.call(this, destination) || this;
32075 _this.count = count;
32076 _this.source = source;
32077 return _this;
32078 }
32079 RepeatSubscriber.prototype.complete = function () {
32080 if (!this.isStopped) {
32081 var _a = this, source = _a.source, count = _a.count;
32082 if (count === 0) {
32083 return _super.prototype.complete.call(this);
32084 }
32085 else if (count > -1) {
32086 this.count = count - 1;
32087 }
32088 source.subscribe(this._unsubscribeAndRecycle());
32089 }
32090 };
32091 return RepeatSubscriber;
32092}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32093//# sourceMappingURL=repeat.js.map
32094
32095
32096/***/ }),
32097/* 312 */
32098/***/ (function(module, __webpack_exports__, __webpack_require__) {
32099
32100"use strict";
32101__webpack_require__.r(__webpack_exports__);
32102/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return repeatWhen; });
32103/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32104/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
32105/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
32106/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
32107/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32108
32109
32110
32111
32112function repeatWhen(notifier) {
32113 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
32114}
32115var RepeatWhenOperator = /*@__PURE__*/ (function () {
32116 function RepeatWhenOperator(notifier) {
32117 this.notifier = notifier;
32118 }
32119 RepeatWhenOperator.prototype.call = function (subscriber, source) {
32120 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
32121 };
32122 return RepeatWhenOperator;
32123}());
32124var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
32125 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatWhenSubscriber, _super);
32126 function RepeatWhenSubscriber(destination, notifier, source) {
32127 var _this = _super.call(this, destination) || this;
32128 _this.notifier = notifier;
32129 _this.source = source;
32130 _this.sourceIsBeingSubscribedTo = true;
32131 return _this;
32132 }
32133 RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32134 this.sourceIsBeingSubscribedTo = true;
32135 this.source.subscribe(this);
32136 };
32137 RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
32138 if (this.sourceIsBeingSubscribedTo === false) {
32139 return _super.prototype.complete.call(this);
32140 }
32141 };
32142 RepeatWhenSubscriber.prototype.complete = function () {
32143 this.sourceIsBeingSubscribedTo = false;
32144 if (!this.isStopped) {
32145 if (!this.retries) {
32146 this.subscribeToRetries();
32147 }
32148 if (!this.retriesSubscription || this.retriesSubscription.closed) {
32149 return _super.prototype.complete.call(this);
32150 }
32151 this._unsubscribeAndRecycle();
32152 this.notifications.next();
32153 }
32154 };
32155 RepeatWhenSubscriber.prototype._unsubscribe = function () {
32156 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
32157 if (notifications) {
32158 notifications.unsubscribe();
32159 this.notifications = null;
32160 }
32161 if (retriesSubscription) {
32162 retriesSubscription.unsubscribe();
32163 this.retriesSubscription = null;
32164 }
32165 this.retries = null;
32166 };
32167 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
32168 var _unsubscribe = this._unsubscribe;
32169 this._unsubscribe = null;
32170 _super.prototype._unsubscribeAndRecycle.call(this);
32171 this._unsubscribe = _unsubscribe;
32172 return this;
32173 };
32174 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
32175 this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
32176 var retries;
32177 try {
32178 var notifier = this.notifier;
32179 retries = notifier(this.notifications);
32180 }
32181 catch (e) {
32182 return _super.prototype.complete.call(this);
32183 }
32184 this.retries = retries;
32185 this.retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
32186 };
32187 return RepeatWhenSubscriber;
32188}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
32189//# sourceMappingURL=repeatWhen.js.map
32190
32191
32192/***/ }),
32193/* 313 */
32194/***/ (function(module, __webpack_exports__, __webpack_require__) {
32195
32196"use strict";
32197__webpack_require__.r(__webpack_exports__);
32198/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return retry; });
32199/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32200/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32201/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32202
32203
32204function retry(count) {
32205 if (count === void 0) {
32206 count = -1;
32207 }
32208 return function (source) { return source.lift(new RetryOperator(count, source)); };
32209}
32210var RetryOperator = /*@__PURE__*/ (function () {
32211 function RetryOperator(count, source) {
32212 this.count = count;
32213 this.source = source;
32214 }
32215 RetryOperator.prototype.call = function (subscriber, source) {
32216 return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
32217 };
32218 return RetryOperator;
32219}());
32220var RetrySubscriber = /*@__PURE__*/ (function (_super) {
32221 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetrySubscriber, _super);
32222 function RetrySubscriber(destination, count, source) {
32223 var _this = _super.call(this, destination) || this;
32224 _this.count = count;
32225 _this.source = source;
32226 return _this;
32227 }
32228 RetrySubscriber.prototype.error = function (err) {
32229 if (!this.isStopped) {
32230 var _a = this, source = _a.source, count = _a.count;
32231 if (count === 0) {
32232 return _super.prototype.error.call(this, err);
32233 }
32234 else if (count > -1) {
32235 this.count = count - 1;
32236 }
32237 source.subscribe(this._unsubscribeAndRecycle());
32238 }
32239 };
32240 return RetrySubscriber;
32241}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32242//# sourceMappingURL=retry.js.map
32243
32244
32245/***/ }),
32246/* 314 */
32247/***/ (function(module, __webpack_exports__, __webpack_require__) {
32248
32249"use strict";
32250__webpack_require__.r(__webpack_exports__);
32251/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return retryWhen; });
32252/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32253/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
32254/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
32255/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
32256/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32257
32258
32259
32260
32261function retryWhen(notifier) {
32262 return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
32263}
32264var RetryWhenOperator = /*@__PURE__*/ (function () {
32265 function RetryWhenOperator(notifier, source) {
32266 this.notifier = notifier;
32267 this.source = source;
32268 }
32269 RetryWhenOperator.prototype.call = function (subscriber, source) {
32270 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
32271 };
32272 return RetryWhenOperator;
32273}());
32274var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) {
32275 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetryWhenSubscriber, _super);
32276 function RetryWhenSubscriber(destination, notifier, source) {
32277 var _this = _super.call(this, destination) || this;
32278 _this.notifier = notifier;
32279 _this.source = source;
32280 return _this;
32281 }
32282 RetryWhenSubscriber.prototype.error = function (err) {
32283 if (!this.isStopped) {
32284 var errors = this.errors;
32285 var retries = this.retries;
32286 var retriesSubscription = this.retriesSubscription;
32287 if (!retries) {
32288 errors = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
32289 try {
32290 var notifier = this.notifier;
32291 retries = notifier(errors);
32292 }
32293 catch (e) {
32294 return _super.prototype.error.call(this, e);
32295 }
32296 retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
32297 }
32298 else {
32299 this.errors = null;
32300 this.retriesSubscription = null;
32301 }
32302 this._unsubscribeAndRecycle();
32303 this.errors = errors;
32304 this.retries = retries;
32305 this.retriesSubscription = retriesSubscription;
32306 errors.next(err);
32307 }
32308 };
32309 RetryWhenSubscriber.prototype._unsubscribe = function () {
32310 var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
32311 if (errors) {
32312 errors.unsubscribe();
32313 this.errors = null;
32314 }
32315 if (retriesSubscription) {
32316 retriesSubscription.unsubscribe();
32317 this.retriesSubscription = null;
32318 }
32319 this.retries = null;
32320 };
32321 RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32322 var _unsubscribe = this._unsubscribe;
32323 this._unsubscribe = null;
32324 this._unsubscribeAndRecycle();
32325 this._unsubscribe = _unsubscribe;
32326 this.source.subscribe(this);
32327 };
32328 return RetryWhenSubscriber;
32329}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
32330//# sourceMappingURL=retryWhen.js.map
32331
32332
32333/***/ }),
32334/* 315 */
32335/***/ (function(module, __webpack_exports__, __webpack_require__) {
32336
32337"use strict";
32338__webpack_require__.r(__webpack_exports__);
32339/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return sample; });
32340/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32341/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
32342/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
32343/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32344
32345
32346
32347function sample(notifier) {
32348 return function (source) { return source.lift(new SampleOperator(notifier)); };
32349}
32350var SampleOperator = /*@__PURE__*/ (function () {
32351 function SampleOperator(notifier) {
32352 this.notifier = notifier;
32353 }
32354 SampleOperator.prototype.call = function (subscriber, source) {
32355 var sampleSubscriber = new SampleSubscriber(subscriber);
32356 var subscription = source.subscribe(sampleSubscriber);
32357 subscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(sampleSubscriber, this.notifier));
32358 return subscription;
32359 };
32360 return SampleOperator;
32361}());
32362var SampleSubscriber = /*@__PURE__*/ (function (_super) {
32363 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleSubscriber, _super);
32364 function SampleSubscriber() {
32365 var _this = _super !== null && _super.apply(this, arguments) || this;
32366 _this.hasValue = false;
32367 return _this;
32368 }
32369 SampleSubscriber.prototype._next = function (value) {
32370 this.value = value;
32371 this.hasValue = true;
32372 };
32373 SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32374 this.emitValue();
32375 };
32376 SampleSubscriber.prototype.notifyComplete = function () {
32377 this.emitValue();
32378 };
32379 SampleSubscriber.prototype.emitValue = function () {
32380 if (this.hasValue) {
32381 this.hasValue = false;
32382 this.destination.next(this.value);
32383 }
32384 };
32385 return SampleSubscriber;
32386}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32387//# sourceMappingURL=sample.js.map
32388
32389
32390/***/ }),
32391/* 316 */
32392/***/ (function(module, __webpack_exports__, __webpack_require__) {
32393
32394"use strict";
32395__webpack_require__.r(__webpack_exports__);
32396/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return sampleTime; });
32397/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32398/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32399/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
32400/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
32401
32402
32403
32404function sampleTime(period, scheduler) {
32405 if (scheduler === void 0) {
32406 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
32407 }
32408 return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
32409}
32410var SampleTimeOperator = /*@__PURE__*/ (function () {
32411 function SampleTimeOperator(period, scheduler) {
32412 this.period = period;
32413 this.scheduler = scheduler;
32414 }
32415 SampleTimeOperator.prototype.call = function (subscriber, source) {
32416 return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
32417 };
32418 return SampleTimeOperator;
32419}());
32420var SampleTimeSubscriber = /*@__PURE__*/ (function (_super) {
32421 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleTimeSubscriber, _super);
32422 function SampleTimeSubscriber(destination, period, scheduler) {
32423 var _this = _super.call(this, destination) || this;
32424 _this.period = period;
32425 _this.scheduler = scheduler;
32426 _this.hasValue = false;
32427 _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
32428 return _this;
32429 }
32430 SampleTimeSubscriber.prototype._next = function (value) {
32431 this.lastValue = value;
32432 this.hasValue = true;
32433 };
32434 SampleTimeSubscriber.prototype.notifyNext = function () {
32435 if (this.hasValue) {
32436 this.hasValue = false;
32437 this.destination.next(this.lastValue);
32438 }
32439 };
32440 return SampleTimeSubscriber;
32441}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32442function dispatchNotification(state) {
32443 var subscriber = state.subscriber, period = state.period;
32444 subscriber.notifyNext();
32445 this.schedule(state, period);
32446}
32447//# sourceMappingURL=sampleTime.js.map
32448
32449
32450/***/ }),
32451/* 317 */
32452/***/ (function(module, __webpack_exports__, __webpack_require__) {
32453
32454"use strict";
32455__webpack_require__.r(__webpack_exports__);
32456/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return sequenceEqual; });
32457/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualOperator", function() { return SequenceEqualOperator; });
32458/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualSubscriber", function() { return SequenceEqualSubscriber; });
32459/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32460/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32461/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32462
32463
32464function sequenceEqual(compareTo, comparator) {
32465 return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
32466}
32467var SequenceEqualOperator = /*@__PURE__*/ (function () {
32468 function SequenceEqualOperator(compareTo, comparator) {
32469 this.compareTo = compareTo;
32470 this.comparator = comparator;
32471 }
32472 SequenceEqualOperator.prototype.call = function (subscriber, source) {
32473 return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
32474 };
32475 return SequenceEqualOperator;
32476}());
32477
32478var SequenceEqualSubscriber = /*@__PURE__*/ (function (_super) {
32479 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualSubscriber, _super);
32480 function SequenceEqualSubscriber(destination, compareTo, comparator) {
32481 var _this = _super.call(this, destination) || this;
32482 _this.compareTo = compareTo;
32483 _this.comparator = comparator;
32484 _this._a = [];
32485 _this._b = [];
32486 _this._oneComplete = false;
32487 _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
32488 return _this;
32489 }
32490 SequenceEqualSubscriber.prototype._next = function (value) {
32491 if (this._oneComplete && this._b.length === 0) {
32492 this.emit(false);
32493 }
32494 else {
32495 this._a.push(value);
32496 this.checkValues();
32497 }
32498 };
32499 SequenceEqualSubscriber.prototype._complete = function () {
32500 if (this._oneComplete) {
32501 this.emit(this._a.length === 0 && this._b.length === 0);
32502 }
32503 else {
32504 this._oneComplete = true;
32505 }
32506 this.unsubscribe();
32507 };
32508 SequenceEqualSubscriber.prototype.checkValues = function () {
32509 var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
32510 while (_a.length > 0 && _b.length > 0) {
32511 var a = _a.shift();
32512 var b = _b.shift();
32513 var areEqual = false;
32514 try {
32515 areEqual = comparator ? comparator(a, b) : a === b;
32516 }
32517 catch (e) {
32518 this.destination.error(e);
32519 }
32520 if (!areEqual) {
32521 this.emit(false);
32522 }
32523 }
32524 };
32525 SequenceEqualSubscriber.prototype.emit = function (value) {
32526 var destination = this.destination;
32527 destination.next(value);
32528 destination.complete();
32529 };
32530 SequenceEqualSubscriber.prototype.nextB = function (value) {
32531 if (this._oneComplete && this._a.length === 0) {
32532 this.emit(false);
32533 }
32534 else {
32535 this._b.push(value);
32536 this.checkValues();
32537 }
32538 };
32539 SequenceEqualSubscriber.prototype.completeB = function () {
32540 if (this._oneComplete) {
32541 this.emit(this._a.length === 0 && this._b.length === 0);
32542 }
32543 else {
32544 this._oneComplete = true;
32545 }
32546 };
32547 return SequenceEqualSubscriber;
32548}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32549
32550var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) {
32551 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualCompareToSubscriber, _super);
32552 function SequenceEqualCompareToSubscriber(destination, parent) {
32553 var _this = _super.call(this, destination) || this;
32554 _this.parent = parent;
32555 return _this;
32556 }
32557 SequenceEqualCompareToSubscriber.prototype._next = function (value) {
32558 this.parent.nextB(value);
32559 };
32560 SequenceEqualCompareToSubscriber.prototype._error = function (err) {
32561 this.parent.error(err);
32562 this.unsubscribe();
32563 };
32564 SequenceEqualCompareToSubscriber.prototype._complete = function () {
32565 this.parent.completeB();
32566 this.unsubscribe();
32567 };
32568 return SequenceEqualCompareToSubscriber;
32569}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32570//# sourceMappingURL=sequenceEqual.js.map
32571
32572
32573/***/ }),
32574/* 318 */
32575/***/ (function(module, __webpack_exports__, __webpack_require__) {
32576
32577"use strict";
32578__webpack_require__.r(__webpack_exports__);
32579/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; });
32580/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(301);
32581/* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(170);
32582/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
32583/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */
32584
32585
32586
32587function shareSubjectFactory() {
32588 return new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
32589}
32590function share() {
32591 return function (source) { return Object(_refCount__WEBPACK_IMPORTED_MODULE_1__["refCount"])()(Object(_multicast__WEBPACK_IMPORTED_MODULE_0__["multicast"])(shareSubjectFactory)(source)); };
32592}
32593//# sourceMappingURL=share.js.map
32594
32595
32596/***/ }),
32597/* 319 */
32598/***/ (function(module, __webpack_exports__, __webpack_require__) {
32599
32600"use strict";
32601__webpack_require__.r(__webpack_exports__);
32602/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return shareReplay; });
32603/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(173);
32604/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */
32605
32606function shareReplay(configOrBufferSize, windowTime, scheduler) {
32607 var config;
32608 if (configOrBufferSize && typeof configOrBufferSize === 'object') {
32609 config = configOrBufferSize;
32610 }
32611 else {
32612 config = {
32613 bufferSize: configOrBufferSize,
32614 windowTime: windowTime,
32615 refCount: false,
32616 scheduler: scheduler
32617 };
32618 }
32619 return function (source) { return source.lift(shareReplayOperator(config)); };
32620}
32621function shareReplayOperator(_a) {
32622 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;
32623 var subject;
32624 var refCount = 0;
32625 var subscription;
32626 var hasError = false;
32627 var isComplete = false;
32628 return function shareReplayOperation(source) {
32629 refCount++;
32630 if (!subject || hasError) {
32631 hasError = false;
32632 subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
32633 subscription = source.subscribe({
32634 next: function (value) { subject.next(value); },
32635 error: function (err) {
32636 hasError = true;
32637 subject.error(err);
32638 },
32639 complete: function () {
32640 isComplete = true;
32641 subject.complete();
32642 },
32643 });
32644 }
32645 var innerSub = subject.subscribe(this);
32646 this.add(function () {
32647 refCount--;
32648 innerSub.unsubscribe();
32649 if (subscription && !isComplete && useRefCount && refCount === 0) {
32650 subscription.unsubscribe();
32651 subscription = undefined;
32652 subject = undefined;
32653 }
32654 });
32655 };
32656}
32657//# sourceMappingURL=shareReplay.js.map
32658
32659
32660/***/ }),
32661/* 320 */
32662/***/ (function(module, __webpack_exports__, __webpack_require__) {
32663
32664"use strict";
32665__webpack_require__.r(__webpack_exports__);
32666/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "single", function() { return single; });
32667/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32668/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32669/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(203);
32670/** PURE_IMPORTS_START tslib,_Subscriber,_util_EmptyError PURE_IMPORTS_END */
32671
32672
32673
32674function single(predicate) {
32675 return function (source) { return source.lift(new SingleOperator(predicate, source)); };
32676}
32677var SingleOperator = /*@__PURE__*/ (function () {
32678 function SingleOperator(predicate, source) {
32679 this.predicate = predicate;
32680 this.source = source;
32681 }
32682 SingleOperator.prototype.call = function (subscriber, source) {
32683 return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
32684 };
32685 return SingleOperator;
32686}());
32687var SingleSubscriber = /*@__PURE__*/ (function (_super) {
32688 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SingleSubscriber, _super);
32689 function SingleSubscriber(destination, predicate, source) {
32690 var _this = _super.call(this, destination) || this;
32691 _this.predicate = predicate;
32692 _this.source = source;
32693 _this.seenValue = false;
32694 _this.index = 0;
32695 return _this;
32696 }
32697 SingleSubscriber.prototype.applySingleValue = function (value) {
32698 if (this.seenValue) {
32699 this.destination.error('Sequence contains more than one element');
32700 }
32701 else {
32702 this.seenValue = true;
32703 this.singleValue = value;
32704 }
32705 };
32706 SingleSubscriber.prototype._next = function (value) {
32707 var index = this.index++;
32708 if (this.predicate) {
32709 this.tryNext(value, index);
32710 }
32711 else {
32712 this.applySingleValue(value);
32713 }
32714 };
32715 SingleSubscriber.prototype.tryNext = function (value, index) {
32716 try {
32717 if (this.predicate(value, index, this.source)) {
32718 this.applySingleValue(value);
32719 }
32720 }
32721 catch (err) {
32722 this.destination.error(err);
32723 }
32724 };
32725 SingleSubscriber.prototype._complete = function () {
32726 var destination = this.destination;
32727 if (this.index > 0) {
32728 destination.next(this.seenValue ? this.singleValue : undefined);
32729 destination.complete();
32730 }
32731 else {
32732 destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__["EmptyError"]);
32733 }
32734 };
32735 return SingleSubscriber;
32736}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32737//# sourceMappingURL=single.js.map
32738
32739
32740/***/ }),
32741/* 321 */
32742/***/ (function(module, __webpack_exports__, __webpack_require__) {
32743
32744"use strict";
32745__webpack_require__.r(__webpack_exports__);
32746/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return skip; });
32747/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32748/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32749/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32750
32751
32752function skip(count) {
32753 return function (source) { return source.lift(new SkipOperator(count)); };
32754}
32755var SkipOperator = /*@__PURE__*/ (function () {
32756 function SkipOperator(total) {
32757 this.total = total;
32758 }
32759 SkipOperator.prototype.call = function (subscriber, source) {
32760 return source.subscribe(new SkipSubscriber(subscriber, this.total));
32761 };
32762 return SkipOperator;
32763}());
32764var SkipSubscriber = /*@__PURE__*/ (function (_super) {
32765 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipSubscriber, _super);
32766 function SkipSubscriber(destination, total) {
32767 var _this = _super.call(this, destination) || this;
32768 _this.total = total;
32769 _this.count = 0;
32770 return _this;
32771 }
32772 SkipSubscriber.prototype._next = function (x) {
32773 if (++this.count > this.total) {
32774 this.destination.next(x);
32775 }
32776 };
32777 return SkipSubscriber;
32778}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32779//# sourceMappingURL=skip.js.map
32780
32781
32782/***/ }),
32783/* 322 */
32784/***/ (function(module, __webpack_exports__, __webpack_require__) {
32785
32786"use strict";
32787__webpack_require__.r(__webpack_exports__);
32788/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return skipLast; });
32789/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32790/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32791/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(202);
32792/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError PURE_IMPORTS_END */
32793
32794
32795
32796function skipLast(count) {
32797 return function (source) { return source.lift(new SkipLastOperator(count)); };
32798}
32799var SkipLastOperator = /*@__PURE__*/ (function () {
32800 function SkipLastOperator(_skipCount) {
32801 this._skipCount = _skipCount;
32802 if (this._skipCount < 0) {
32803 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
32804 }
32805 }
32806 SkipLastOperator.prototype.call = function (subscriber, source) {
32807 if (this._skipCount === 0) {
32808 return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"](subscriber));
32809 }
32810 else {
32811 return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
32812 }
32813 };
32814 return SkipLastOperator;
32815}());
32816var SkipLastSubscriber = /*@__PURE__*/ (function (_super) {
32817 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipLastSubscriber, _super);
32818 function SkipLastSubscriber(destination, _skipCount) {
32819 var _this = _super.call(this, destination) || this;
32820 _this._skipCount = _skipCount;
32821 _this._count = 0;
32822 _this._ring = new Array(_skipCount);
32823 return _this;
32824 }
32825 SkipLastSubscriber.prototype._next = function (value) {
32826 var skipCount = this._skipCount;
32827 var count = this._count++;
32828 if (count < skipCount) {
32829 this._ring[count] = value;
32830 }
32831 else {
32832 var currentIndex = count % skipCount;
32833 var ring = this._ring;
32834 var oldValue = ring[currentIndex];
32835 ring[currentIndex] = value;
32836 this.destination.next(oldValue);
32837 }
32838 };
32839 return SkipLastSubscriber;
32840}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32841//# sourceMappingURL=skipLast.js.map
32842
32843
32844/***/ }),
32845/* 323 */
32846/***/ (function(module, __webpack_exports__, __webpack_require__) {
32847
32848"use strict";
32849__webpack_require__.r(__webpack_exports__);
32850/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return skipUntil; });
32851/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32852/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
32853/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(211);
32854/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
32855/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32856
32857
32858
32859
32860function skipUntil(notifier) {
32861 return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
32862}
32863var SkipUntilOperator = /*@__PURE__*/ (function () {
32864 function SkipUntilOperator(notifier) {
32865 this.notifier = notifier;
32866 }
32867 SkipUntilOperator.prototype.call = function (destination, source) {
32868 return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
32869 };
32870 return SkipUntilOperator;
32871}());
32872var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) {
32873 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipUntilSubscriber, _super);
32874 function SkipUntilSubscriber(destination, notifier) {
32875 var _this = _super.call(this, destination) || this;
32876 _this.hasValue = false;
32877 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](_this, undefined, undefined);
32878 _this.add(innerSubscriber);
32879 _this.innerSubscription = innerSubscriber;
32880 Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(_this, notifier, undefined, undefined, innerSubscriber);
32881 return _this;
32882 }
32883 SkipUntilSubscriber.prototype._next = function (value) {
32884 if (this.hasValue) {
32885 _super.prototype._next.call(this, value);
32886 }
32887 };
32888 SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32889 this.hasValue = true;
32890 if (this.innerSubscription) {
32891 this.innerSubscription.unsubscribe();
32892 }
32893 };
32894 SkipUntilSubscriber.prototype.notifyComplete = function () {
32895 };
32896 return SkipUntilSubscriber;
32897}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32898//# sourceMappingURL=skipUntil.js.map
32899
32900
32901/***/ }),
32902/* 324 */
32903/***/ (function(module, __webpack_exports__, __webpack_require__) {
32904
32905"use strict";
32906__webpack_require__.r(__webpack_exports__);
32907/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return skipWhile; });
32908/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
32909/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
32910/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32911
32912
32913function skipWhile(predicate) {
32914 return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
32915}
32916var SkipWhileOperator = /*@__PURE__*/ (function () {
32917 function SkipWhileOperator(predicate) {
32918 this.predicate = predicate;
32919 }
32920 SkipWhileOperator.prototype.call = function (subscriber, source) {
32921 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
32922 };
32923 return SkipWhileOperator;
32924}());
32925var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) {
32926 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipWhileSubscriber, _super);
32927 function SkipWhileSubscriber(destination, predicate) {
32928 var _this = _super.call(this, destination) || this;
32929 _this.predicate = predicate;
32930 _this.skipping = true;
32931 _this.index = 0;
32932 return _this;
32933 }
32934 SkipWhileSubscriber.prototype._next = function (value) {
32935 var destination = this.destination;
32936 if (this.skipping) {
32937 this.tryCallPredicate(value);
32938 }
32939 if (!this.skipping) {
32940 destination.next(value);
32941 }
32942 };
32943 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
32944 try {
32945 var result = this.predicate(value, this.index++);
32946 this.skipping = Boolean(result);
32947 }
32948 catch (err) {
32949 this.destination.error(err);
32950 }
32951 };
32952 return SkipWhileSubscriber;
32953}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32954//# sourceMappingURL=skipWhile.js.map
32955
32956
32957/***/ }),
32958/* 325 */
32959/***/ (function(module, __webpack_exports__, __webpack_require__) {
32960
32961"use strict";
32962__webpack_require__.r(__webpack_exports__);
32963/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return startWith; });
32964/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(219);
32965/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
32966/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */
32967
32968
32969function startWith() {
32970 var array = [];
32971 for (var _i = 0; _i < arguments.length; _i++) {
32972 array[_i] = arguments[_i];
32973 }
32974 var scheduler = array[array.length - 1];
32975 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(scheduler)) {
32976 array.pop();
32977 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source, scheduler); };
32978 }
32979 else {
32980 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source); };
32981 }
32982}
32983//# sourceMappingURL=startWith.js.map
32984
32985
32986/***/ }),
32987/* 326 */
32988/***/ (function(module, __webpack_exports__, __webpack_require__) {
32989
32990"use strict";
32991__webpack_require__.r(__webpack_exports__);
32992/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; });
32993/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(327);
32994/** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */
32995
32996function subscribeOn(scheduler, delay) {
32997 if (delay === void 0) {
32998 delay = 0;
32999 }
33000 return function subscribeOnOperatorFunction(source) {
33001 return source.lift(new SubscribeOnOperator(scheduler, delay));
33002 };
33003}
33004var SubscribeOnOperator = /*@__PURE__*/ (function () {
33005 function SubscribeOnOperator(scheduler, delay) {
33006 this.scheduler = scheduler;
33007 this.delay = delay;
33008 }
33009 SubscribeOnOperator.prototype.call = function (subscriber, source) {
33010 return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__["SubscribeOnObservable"](source, this.delay, this.scheduler).subscribe(subscriber);
33011 };
33012 return SubscribeOnOperator;
33013}());
33014//# sourceMappingURL=subscribeOn.js.map
33015
33016
33017/***/ }),
33018/* 327 */
33019/***/ (function(module, __webpack_exports__, __webpack_require__) {
33020
33021"use strict";
33022__webpack_require__.r(__webpack_exports__);
33023/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubscribeOnObservable", function() { return SubscribeOnObservable; });
33024/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33025/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(149);
33026/* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(191);
33027/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(237);
33028/** PURE_IMPORTS_START tslib,_Observable,_scheduler_asap,_util_isNumeric PURE_IMPORTS_END */
33029
33030
33031
33032
33033var SubscribeOnObservable = /*@__PURE__*/ (function (_super) {
33034 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscribeOnObservable, _super);
33035 function SubscribeOnObservable(source, delayTime, scheduler) {
33036 if (delayTime === void 0) {
33037 delayTime = 0;
33038 }
33039 if (scheduler === void 0) {
33040 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
33041 }
33042 var _this = _super.call(this) || this;
33043 _this.source = source;
33044 _this.delayTime = delayTime;
33045 _this.scheduler = scheduler;
33046 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(delayTime) || delayTime < 0) {
33047 _this.delayTime = 0;
33048 }
33049 if (!scheduler || typeof scheduler.schedule !== 'function') {
33050 _this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
33051 }
33052 return _this;
33053 }
33054 SubscribeOnObservable.create = function (source, delay, scheduler) {
33055 if (delay === void 0) {
33056 delay = 0;
33057 }
33058 if (scheduler === void 0) {
33059 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
33060 }
33061 return new SubscribeOnObservable(source, delay, scheduler);
33062 };
33063 SubscribeOnObservable.dispatch = function (arg) {
33064 var source = arg.source, subscriber = arg.subscriber;
33065 return this.add(source.subscribe(subscriber));
33066 };
33067 SubscribeOnObservable.prototype._subscribe = function (subscriber) {
33068 var delay = this.delayTime;
33069 var source = this.source;
33070 var scheduler = this.scheduler;
33071 return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
33072 source: source, subscriber: subscriber
33073 });
33074 };
33075 return SubscribeOnObservable;
33076}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
33077
33078//# sourceMappingURL=SubscribeOnObservable.js.map
33079
33080
33081/***/ }),
33082/* 328 */
33083/***/ (function(module, __webpack_exports__, __webpack_require__) {
33084
33085"use strict";
33086__webpack_require__.r(__webpack_exports__);
33087/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; });
33088/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(329);
33089/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(200);
33090/** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */
33091
33092
33093function switchAll() {
33094 return Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"]);
33095}
33096//# sourceMappingURL=switchAll.js.map
33097
33098
33099/***/ }),
33100/* 329 */
33101/***/ (function(module, __webpack_exports__, __webpack_require__) {
33102
33103"use strict";
33104__webpack_require__.r(__webpack_exports__);
33105/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return switchMap; });
33106/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33107/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
33108/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(211);
33109/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
33110/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(206);
33111/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(223);
33112/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
33113
33114
33115
33116
33117
33118
33119function switchMap(project, resultSelector) {
33120 if (typeof resultSelector === 'function') {
33121 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); })); })); };
33122 }
33123 return function (source) { return source.lift(new SwitchMapOperator(project)); };
33124}
33125var SwitchMapOperator = /*@__PURE__*/ (function () {
33126 function SwitchMapOperator(project) {
33127 this.project = project;
33128 }
33129 SwitchMapOperator.prototype.call = function (subscriber, source) {
33130 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
33131 };
33132 return SwitchMapOperator;
33133}());
33134var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {
33135 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchMapSubscriber, _super);
33136 function SwitchMapSubscriber(destination, project) {
33137 var _this = _super.call(this, destination) || this;
33138 _this.project = project;
33139 _this.index = 0;
33140 return _this;
33141 }
33142 SwitchMapSubscriber.prototype._next = function (value) {
33143 var result;
33144 var index = this.index++;
33145 try {
33146 result = this.project(value, index);
33147 }
33148 catch (error) {
33149 this.destination.error(error);
33150 return;
33151 }
33152 this._innerSub(result, value, index);
33153 };
33154 SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
33155 var innerSubscription = this.innerSubscription;
33156 if (innerSubscription) {
33157 innerSubscription.unsubscribe();
33158 }
33159 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, undefined, undefined);
33160 var destination = this.destination;
33161 destination.add(innerSubscriber);
33162 this.innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, value, index, innerSubscriber);
33163 };
33164 SwitchMapSubscriber.prototype._complete = function () {
33165 var innerSubscription = this.innerSubscription;
33166 if (!innerSubscription || innerSubscription.closed) {
33167 _super.prototype._complete.call(this);
33168 }
33169 this.unsubscribe();
33170 };
33171 SwitchMapSubscriber.prototype._unsubscribe = function () {
33172 this.innerSubscription = null;
33173 };
33174 SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
33175 var destination = this.destination;
33176 destination.remove(innerSub);
33177 this.innerSubscription = null;
33178 if (this.isStopped) {
33179 _super.prototype._complete.call(this);
33180 }
33181 };
33182 SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33183 this.destination.next(innerValue);
33184 };
33185 return SwitchMapSubscriber;
33186}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33187//# sourceMappingURL=switchMap.js.map
33188
33189
33190/***/ }),
33191/* 330 */
33192/***/ (function(module, __webpack_exports__, __webpack_require__) {
33193
33194"use strict";
33195__webpack_require__.r(__webpack_exports__);
33196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; });
33197/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(329);
33198/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */
33199
33200function switchMapTo(innerObservable, resultSelector) {
33201 return resultSelector ? Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; }, resultSelector) : Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; });
33202}
33203//# sourceMappingURL=switchMapTo.js.map
33204
33205
33206/***/ }),
33207/* 331 */
33208/***/ (function(module, __webpack_exports__, __webpack_require__) {
33209
33210"use strict";
33211__webpack_require__.r(__webpack_exports__);
33212/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return takeUntil; });
33213/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33214/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
33215/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
33216/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33217
33218
33219
33220function takeUntil(notifier) {
33221 return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
33222}
33223var TakeUntilOperator = /*@__PURE__*/ (function () {
33224 function TakeUntilOperator(notifier) {
33225 this.notifier = notifier;
33226 }
33227 TakeUntilOperator.prototype.call = function (subscriber, source) {
33228 var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
33229 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(takeUntilSubscriber, this.notifier);
33230 if (notifierSubscription && !takeUntilSubscriber.seenValue) {
33231 takeUntilSubscriber.add(notifierSubscription);
33232 return source.subscribe(takeUntilSubscriber);
33233 }
33234 return takeUntilSubscriber;
33235 };
33236 return TakeUntilOperator;
33237}());
33238var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {
33239 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeUntilSubscriber, _super);
33240 function TakeUntilSubscriber(destination) {
33241 var _this = _super.call(this, destination) || this;
33242 _this.seenValue = false;
33243 return _this;
33244 }
33245 TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33246 this.seenValue = true;
33247 this.complete();
33248 };
33249 TakeUntilSubscriber.prototype.notifyComplete = function () {
33250 };
33251 return TakeUntilSubscriber;
33252}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33253//# sourceMappingURL=takeUntil.js.map
33254
33255
33256/***/ }),
33257/* 332 */
33258/***/ (function(module, __webpack_exports__, __webpack_require__) {
33259
33260"use strict";
33261__webpack_require__.r(__webpack_exports__);
33262/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return takeWhile; });
33263/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33264/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
33265/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33266
33267
33268function takeWhile(predicate, inclusive) {
33269 if (inclusive === void 0) {
33270 inclusive = false;
33271 }
33272 return function (source) {
33273 return source.lift(new TakeWhileOperator(predicate, inclusive));
33274 };
33275}
33276var TakeWhileOperator = /*@__PURE__*/ (function () {
33277 function TakeWhileOperator(predicate, inclusive) {
33278 this.predicate = predicate;
33279 this.inclusive = inclusive;
33280 }
33281 TakeWhileOperator.prototype.call = function (subscriber, source) {
33282 return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
33283 };
33284 return TakeWhileOperator;
33285}());
33286var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) {
33287 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeWhileSubscriber, _super);
33288 function TakeWhileSubscriber(destination, predicate, inclusive) {
33289 var _this = _super.call(this, destination) || this;
33290 _this.predicate = predicate;
33291 _this.inclusive = inclusive;
33292 _this.index = 0;
33293 return _this;
33294 }
33295 TakeWhileSubscriber.prototype._next = function (value) {
33296 var destination = this.destination;
33297 var result;
33298 try {
33299 result = this.predicate(value, this.index++);
33300 }
33301 catch (err) {
33302 destination.error(err);
33303 return;
33304 }
33305 this.nextOrComplete(value, result);
33306 };
33307 TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
33308 var destination = this.destination;
33309 if (Boolean(predicateResult)) {
33310 destination.next(value);
33311 }
33312 else {
33313 if (this.inclusive) {
33314 destination.next(value);
33315 }
33316 destination.complete();
33317 }
33318 };
33319 return TakeWhileSubscriber;
33320}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33321//# sourceMappingURL=takeWhile.js.map
33322
33323
33324/***/ }),
33325/* 333 */
33326/***/ (function(module, __webpack_exports__, __webpack_require__) {
33327
33328"use strict";
33329__webpack_require__.r(__webpack_exports__);
33330/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return tap; });
33331/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33332/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
33333/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(165);
33334/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(153);
33335/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */
33336
33337
33338
33339
33340function tap(nextOrObserver, error, complete) {
33341 return function tapOperatorFunction(source) {
33342 return source.lift(new DoOperator(nextOrObserver, error, complete));
33343 };
33344}
33345var DoOperator = /*@__PURE__*/ (function () {
33346 function DoOperator(nextOrObserver, error, complete) {
33347 this.nextOrObserver = nextOrObserver;
33348 this.error = error;
33349 this.complete = complete;
33350 }
33351 DoOperator.prototype.call = function (subscriber, source) {
33352 return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
33353 };
33354 return DoOperator;
33355}());
33356var TapSubscriber = /*@__PURE__*/ (function (_super) {
33357 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TapSubscriber, _super);
33358 function TapSubscriber(destination, observerOrNext, error, complete) {
33359 var _this = _super.call(this, destination) || this;
33360 _this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33361 _this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33362 _this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33363 _this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33364 _this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33365 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_3__["isFunction"])(observerOrNext)) {
33366 _this._context = _this;
33367 _this._tapNext = observerOrNext;
33368 }
33369 else if (observerOrNext) {
33370 _this._context = observerOrNext;
33371 _this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33372 _this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33373 _this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
33374 }
33375 return _this;
33376 }
33377 TapSubscriber.prototype._next = function (value) {
33378 try {
33379 this._tapNext.call(this._context, value);
33380 }
33381 catch (err) {
33382 this.destination.error(err);
33383 return;
33384 }
33385 this.destination.next(value);
33386 };
33387 TapSubscriber.prototype._error = function (err) {
33388 try {
33389 this._tapError.call(this._context, err);
33390 }
33391 catch (err) {
33392 this.destination.error(err);
33393 return;
33394 }
33395 this.destination.error(err);
33396 };
33397 TapSubscriber.prototype._complete = function () {
33398 try {
33399 this._tapComplete.call(this._context);
33400 }
33401 catch (err) {
33402 this.destination.error(err);
33403 return;
33404 }
33405 return this.destination.complete();
33406 };
33407 return TapSubscriber;
33408}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33409//# sourceMappingURL=tap.js.map
33410
33411
33412/***/ }),
33413/* 334 */
33414/***/ (function(module, __webpack_exports__, __webpack_require__) {
33415
33416"use strict";
33417__webpack_require__.r(__webpack_exports__);
33418/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultThrottleConfig", function() { return defaultThrottleConfig; });
33419/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return throttle; });
33420/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33421/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
33422/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
33423/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33424
33425
33426
33427var defaultThrottleConfig = {
33428 leading: true,
33429 trailing: false
33430};
33431function throttle(durationSelector, config) {
33432 if (config === void 0) {
33433 config = defaultThrottleConfig;
33434 }
33435 return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
33436}
33437var ThrottleOperator = /*@__PURE__*/ (function () {
33438 function ThrottleOperator(durationSelector, leading, trailing) {
33439 this.durationSelector = durationSelector;
33440 this.leading = leading;
33441 this.trailing = trailing;
33442 }
33443 ThrottleOperator.prototype.call = function (subscriber, source) {
33444 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
33445 };
33446 return ThrottleOperator;
33447}());
33448var ThrottleSubscriber = /*@__PURE__*/ (function (_super) {
33449 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleSubscriber, _super);
33450 function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
33451 var _this = _super.call(this, destination) || this;
33452 _this.destination = destination;
33453 _this.durationSelector = durationSelector;
33454 _this._leading = _leading;
33455 _this._trailing = _trailing;
33456 _this._hasValue = false;
33457 return _this;
33458 }
33459 ThrottleSubscriber.prototype._next = function (value) {
33460 this._hasValue = true;
33461 this._sendValue = value;
33462 if (!this._throttled) {
33463 if (this._leading) {
33464 this.send();
33465 }
33466 else {
33467 this.throttle(value);
33468 }
33469 }
33470 };
33471 ThrottleSubscriber.prototype.send = function () {
33472 var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
33473 if (_hasValue) {
33474 this.destination.next(_sendValue);
33475 this.throttle(_sendValue);
33476 }
33477 this._hasValue = false;
33478 this._sendValue = null;
33479 };
33480 ThrottleSubscriber.prototype.throttle = function (value) {
33481 var duration = this.tryDurationSelector(value);
33482 if (!!duration) {
33483 this.add(this._throttled = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration));
33484 }
33485 };
33486 ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
33487 try {
33488 return this.durationSelector(value);
33489 }
33490 catch (err) {
33491 this.destination.error(err);
33492 return null;
33493 }
33494 };
33495 ThrottleSubscriber.prototype.throttlingDone = function () {
33496 var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
33497 if (_throttled) {
33498 _throttled.unsubscribe();
33499 }
33500 this._throttled = null;
33501 if (_trailing) {
33502 this.send();
33503 }
33504 };
33505 ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33506 this.throttlingDone();
33507 };
33508 ThrottleSubscriber.prototype.notifyComplete = function () {
33509 this.throttlingDone();
33510 };
33511 return ThrottleSubscriber;
33512}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33513//# sourceMappingURL=throttle.js.map
33514
33515
33516/***/ }),
33517/* 335 */
33518/***/ (function(module, __webpack_exports__, __webpack_require__) {
33519
33520"use strict";
33521__webpack_require__.r(__webpack_exports__);
33522/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return throttleTime; });
33523/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33524/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
33525/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
33526/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(334);
33527/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
33528
33529
33530
33531
33532function throttleTime(duration, scheduler, config) {
33533 if (scheduler === void 0) {
33534 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
33535 }
33536 if (config === void 0) {
33537 config = _throttle__WEBPACK_IMPORTED_MODULE_3__["defaultThrottleConfig"];
33538 }
33539 return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
33540}
33541var ThrottleTimeOperator = /*@__PURE__*/ (function () {
33542 function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
33543 this.duration = duration;
33544 this.scheduler = scheduler;
33545 this.leading = leading;
33546 this.trailing = trailing;
33547 }
33548 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
33549 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
33550 };
33551 return ThrottleTimeOperator;
33552}());
33553var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
33554 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleTimeSubscriber, _super);
33555 function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
33556 var _this = _super.call(this, destination) || this;
33557 _this.duration = duration;
33558 _this.scheduler = scheduler;
33559 _this.leading = leading;
33560 _this.trailing = trailing;
33561 _this._hasTrailingValue = false;
33562 _this._trailingValue = null;
33563 return _this;
33564 }
33565 ThrottleTimeSubscriber.prototype._next = function (value) {
33566 if (this.throttled) {
33567 if (this.trailing) {
33568 this._trailingValue = value;
33569 this._hasTrailingValue = true;
33570 }
33571 }
33572 else {
33573 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
33574 if (this.leading) {
33575 this.destination.next(value);
33576 }
33577 else if (this.trailing) {
33578 this._trailingValue = value;
33579 this._hasTrailingValue = true;
33580 }
33581 }
33582 };
33583 ThrottleTimeSubscriber.prototype._complete = function () {
33584 if (this._hasTrailingValue) {
33585 this.destination.next(this._trailingValue);
33586 this.destination.complete();
33587 }
33588 else {
33589 this.destination.complete();
33590 }
33591 };
33592 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
33593 var throttled = this.throttled;
33594 if (throttled) {
33595 if (this.trailing && this._hasTrailingValue) {
33596 this.destination.next(this._trailingValue);
33597 this._trailingValue = null;
33598 this._hasTrailingValue = false;
33599 }
33600 throttled.unsubscribe();
33601 this.remove(throttled);
33602 this.throttled = null;
33603 }
33604 };
33605 return ThrottleTimeSubscriber;
33606}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33607function dispatchNext(arg) {
33608 var subscriber = arg.subscriber;
33609 subscriber.clearThrottle();
33610}
33611//# sourceMappingURL=throttleTime.js.map
33612
33613
33614/***/ }),
33615/* 336 */
33616/***/ (function(module, __webpack_exports__, __webpack_require__) {
33617
33618"use strict";
33619__webpack_require__.r(__webpack_exports__);
33620/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; });
33621/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; });
33622/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
33623/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(296);
33624/* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(230);
33625/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(206);
33626/** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */
33627
33628
33629
33630
33631function timeInterval(scheduler) {
33632 if (scheduler === void 0) {
33633 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
33634 }
33635 return function (source) {
33636 return Object(_observable_defer__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
33637 return source.pipe(Object(_scan__WEBPACK_IMPORTED_MODULE_1__["scan"])(function (_a, value) {
33638 var current = _a.current;
33639 return ({ value: value, current: scheduler.now(), last: current });
33640 }, { current: scheduler.now(), value: undefined, last: undefined }), Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) {
33641 var current = _a.current, last = _a.last, value = _a.value;
33642 return new TimeInterval(value, current - last);
33643 }));
33644 });
33645 };
33646}
33647var TimeInterval = /*@__PURE__*/ (function () {
33648 function TimeInterval(value, interval) {
33649 this.value = value;
33650 this.interval = interval;
33651 }
33652 return TimeInterval;
33653}());
33654
33655//# sourceMappingURL=timeInterval.js.map
33656
33657
33658/***/ }),
33659/* 337 */
33660/***/ (function(module, __webpack_exports__, __webpack_require__) {
33661
33662"use strict";
33663__webpack_require__.r(__webpack_exports__);
33664/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; });
33665/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
33666/* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
33667/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(338);
33668/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(189);
33669/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */
33670
33671
33672
33673
33674function timeout(due, scheduler) {
33675 if (scheduler === void 0) {
33676 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
33677 }
33678 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);
33679}
33680//# sourceMappingURL=timeout.js.map
33681
33682
33683/***/ }),
33684/* 338 */
33685/***/ (function(module, __webpack_exports__, __webpack_require__) {
33686
33687"use strict";
33688__webpack_require__.r(__webpack_exports__);
33689/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; });
33690/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33691/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
33692/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(270);
33693/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
33694/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(210);
33695/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33696
33697
33698
33699
33700
33701function timeoutWith(due, withObservable, scheduler) {
33702 if (scheduler === void 0) {
33703 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
33704 }
33705 return function (source) {
33706 var absoluteTimeout = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(due);
33707 var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
33708 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
33709 };
33710}
33711var TimeoutWithOperator = /*@__PURE__*/ (function () {
33712 function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
33713 this.waitFor = waitFor;
33714 this.absoluteTimeout = absoluteTimeout;
33715 this.withObservable = withObservable;
33716 this.scheduler = scheduler;
33717 }
33718 TimeoutWithOperator.prototype.call = function (subscriber, source) {
33719 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
33720 };
33721 return TimeoutWithOperator;
33722}());
33723var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) {
33724 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TimeoutWithSubscriber, _super);
33725 function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
33726 var _this = _super.call(this, destination) || this;
33727 _this.absoluteTimeout = absoluteTimeout;
33728 _this.waitFor = waitFor;
33729 _this.withObservable = withObservable;
33730 _this.scheduler = scheduler;
33731 _this.action = null;
33732 _this.scheduleTimeout();
33733 return _this;
33734 }
33735 TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
33736 var withObservable = subscriber.withObservable;
33737 subscriber._unsubscribeAndRecycle();
33738 subscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(subscriber, withObservable));
33739 };
33740 TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
33741 var action = this.action;
33742 if (action) {
33743 this.action = action.schedule(this, this.waitFor);
33744 }
33745 else {
33746 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
33747 }
33748 };
33749 TimeoutWithSubscriber.prototype._next = function (value) {
33750 if (!this.absoluteTimeout) {
33751 this.scheduleTimeout();
33752 }
33753 _super.prototype._next.call(this, value);
33754 };
33755 TimeoutWithSubscriber.prototype._unsubscribe = function () {
33756 this.action = null;
33757 this.scheduler = null;
33758 this.withObservable = null;
33759 };
33760 return TimeoutWithSubscriber;
33761}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
33762//# sourceMappingURL=timeoutWith.js.map
33763
33764
33765/***/ }),
33766/* 339 */
33767/***/ (function(module, __webpack_exports__, __webpack_require__) {
33768
33769"use strict";
33770__webpack_require__.r(__webpack_exports__);
33771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; });
33772/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timestamp", function() { return Timestamp; });
33773/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(195);
33774/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(206);
33775/** PURE_IMPORTS_START _scheduler_async,_map PURE_IMPORTS_END */
33776
33777
33778function timestamp(scheduler) {
33779 if (scheduler === void 0) {
33780 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
33781 }
33782 return Object(_map__WEBPACK_IMPORTED_MODULE_1__["map"])(function (value) { return new Timestamp(value, scheduler.now()); });
33783}
33784var Timestamp = /*@__PURE__*/ (function () {
33785 function Timestamp(value, timestamp) {
33786 this.value = value;
33787 this.timestamp = timestamp;
33788 }
33789 return Timestamp;
33790}());
33791
33792//# sourceMappingURL=timestamp.js.map
33793
33794
33795/***/ }),
33796/* 340 */
33797/***/ (function(module, __webpack_exports__, __webpack_require__) {
33798
33799"use strict";
33800__webpack_require__.r(__webpack_exports__);
33801/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; });
33802/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(295);
33803/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
33804
33805function toArrayReducer(arr, item, index) {
33806 if (index === 0) {
33807 return [item];
33808 }
33809 arr.push(item);
33810 return arr;
33811}
33812function toArray() {
33813 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(toArrayReducer, []);
33814}
33815//# sourceMappingURL=toArray.js.map
33816
33817
33818/***/ }),
33819/* 341 */
33820/***/ (function(module, __webpack_exports__, __webpack_require__) {
33821
33822"use strict";
33823__webpack_require__.r(__webpack_exports__);
33824/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return window; });
33825/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33826/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
33827/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
33828/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
33829/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33830
33831
33832
33833
33834function window(windowBoundaries) {
33835 return function windowOperatorFunction(source) {
33836 return source.lift(new WindowOperator(windowBoundaries));
33837 };
33838}
33839var WindowOperator = /*@__PURE__*/ (function () {
33840 function WindowOperator(windowBoundaries) {
33841 this.windowBoundaries = windowBoundaries;
33842 }
33843 WindowOperator.prototype.call = function (subscriber, source) {
33844 var windowSubscriber = new WindowSubscriber(subscriber);
33845 var sourceSubscription = source.subscribe(windowSubscriber);
33846 if (!sourceSubscription.closed) {
33847 windowSubscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(windowSubscriber, this.windowBoundaries));
33848 }
33849 return sourceSubscription;
33850 };
33851 return WindowOperator;
33852}());
33853var WindowSubscriber = /*@__PURE__*/ (function (_super) {
33854 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
33855 function WindowSubscriber(destination) {
33856 var _this = _super.call(this, destination) || this;
33857 _this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
33858 destination.next(_this.window);
33859 return _this;
33860 }
33861 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33862 this.openWindow();
33863 };
33864 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
33865 this._error(error);
33866 };
33867 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
33868 this._complete();
33869 };
33870 WindowSubscriber.prototype._next = function (value) {
33871 this.window.next(value);
33872 };
33873 WindowSubscriber.prototype._error = function (err) {
33874 this.window.error(err);
33875 this.destination.error(err);
33876 };
33877 WindowSubscriber.prototype._complete = function () {
33878 this.window.complete();
33879 this.destination.complete();
33880 };
33881 WindowSubscriber.prototype._unsubscribe = function () {
33882 this.window = null;
33883 };
33884 WindowSubscriber.prototype.openWindow = function () {
33885 var prevWindow = this.window;
33886 if (prevWindow) {
33887 prevWindow.complete();
33888 }
33889 var destination = this.destination;
33890 var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
33891 destination.next(newWindow);
33892 };
33893 return WindowSubscriber;
33894}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
33895//# sourceMappingURL=window.js.map
33896
33897
33898/***/ }),
33899/* 342 */
33900/***/ (function(module, __webpack_exports__, __webpack_require__) {
33901
33902"use strict";
33903__webpack_require__.r(__webpack_exports__);
33904/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return windowCount; });
33905/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33906/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(151);
33907/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
33908/** PURE_IMPORTS_START tslib,_Subscriber,_Subject PURE_IMPORTS_END */
33909
33910
33911
33912function windowCount(windowSize, startWindowEvery) {
33913 if (startWindowEvery === void 0) {
33914 startWindowEvery = 0;
33915 }
33916 return function windowCountOperatorFunction(source) {
33917 return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
33918 };
33919}
33920var WindowCountOperator = /*@__PURE__*/ (function () {
33921 function WindowCountOperator(windowSize, startWindowEvery) {
33922 this.windowSize = windowSize;
33923 this.startWindowEvery = startWindowEvery;
33924 }
33925 WindowCountOperator.prototype.call = function (subscriber, source) {
33926 return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
33927 };
33928 return WindowCountOperator;
33929}());
33930var WindowCountSubscriber = /*@__PURE__*/ (function (_super) {
33931 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowCountSubscriber, _super);
33932 function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
33933 var _this = _super.call(this, destination) || this;
33934 _this.destination = destination;
33935 _this.windowSize = windowSize;
33936 _this.startWindowEvery = startWindowEvery;
33937 _this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]()];
33938 _this.count = 0;
33939 destination.next(_this.windows[0]);
33940 return _this;
33941 }
33942 WindowCountSubscriber.prototype._next = function (value) {
33943 var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
33944 var destination = this.destination;
33945 var windowSize = this.windowSize;
33946 var windows = this.windows;
33947 var len = windows.length;
33948 for (var i = 0; i < len && !this.closed; i++) {
33949 windows[i].next(value);
33950 }
33951 var c = this.count - windowSize + 1;
33952 if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
33953 windows.shift().complete();
33954 }
33955 if (++this.count % startWindowEvery === 0 && !this.closed) {
33956 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
33957 windows.push(window_1);
33958 destination.next(window_1);
33959 }
33960 };
33961 WindowCountSubscriber.prototype._error = function (err) {
33962 var windows = this.windows;
33963 if (windows) {
33964 while (windows.length > 0 && !this.closed) {
33965 windows.shift().error(err);
33966 }
33967 }
33968 this.destination.error(err);
33969 };
33970 WindowCountSubscriber.prototype._complete = function () {
33971 var windows = this.windows;
33972 if (windows) {
33973 while (windows.length > 0 && !this.closed) {
33974 windows.shift().complete();
33975 }
33976 }
33977 this.destination.complete();
33978 };
33979 WindowCountSubscriber.prototype._unsubscribe = function () {
33980 this.count = 0;
33981 this.windows = null;
33982 };
33983 return WindowCountSubscriber;
33984}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33985//# sourceMappingURL=windowCount.js.map
33986
33987
33988/***/ }),
33989/* 343 */
33990/***/ (function(module, __webpack_exports__, __webpack_require__) {
33991
33992"use strict";
33993__webpack_require__.r(__webpack_exports__);
33994/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return windowTime; });
33995/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
33996/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
33997/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(195);
33998/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(151);
33999/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(237);
34000/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(185);
34001/** PURE_IMPORTS_START tslib,_Subject,_scheduler_async,_Subscriber,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
34002
34003
34004
34005
34006
34007
34008function windowTime(windowTimeSpan) {
34009 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
34010 var windowCreationInterval = null;
34011 var maxWindowSize = Number.POSITIVE_INFINITY;
34012 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[3])) {
34013 scheduler = arguments[3];
34014 }
34015 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[2])) {
34016 scheduler = arguments[2];
34017 }
34018 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[2])) {
34019 maxWindowSize = arguments[2];
34020 }
34021 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[1])) {
34022 scheduler = arguments[1];
34023 }
34024 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[1])) {
34025 windowCreationInterval = arguments[1];
34026 }
34027 return function windowTimeOperatorFunction(source) {
34028 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
34029 };
34030}
34031var WindowTimeOperator = /*@__PURE__*/ (function () {
34032 function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
34033 this.windowTimeSpan = windowTimeSpan;
34034 this.windowCreationInterval = windowCreationInterval;
34035 this.maxWindowSize = maxWindowSize;
34036 this.scheduler = scheduler;
34037 }
34038 WindowTimeOperator.prototype.call = function (subscriber, source) {
34039 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
34040 };
34041 return WindowTimeOperator;
34042}());
34043var CountedSubject = /*@__PURE__*/ (function (_super) {
34044 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountedSubject, _super);
34045 function CountedSubject() {
34046 var _this = _super !== null && _super.apply(this, arguments) || this;
34047 _this._numberOfNextedValues = 0;
34048 return _this;
34049 }
34050 CountedSubject.prototype.next = function (value) {
34051 this._numberOfNextedValues++;
34052 _super.prototype.next.call(this, value);
34053 };
34054 Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
34055 get: function () {
34056 return this._numberOfNextedValues;
34057 },
34058 enumerable: true,
34059 configurable: true
34060 });
34061 return CountedSubject;
34062}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
34063var WindowTimeSubscriber = /*@__PURE__*/ (function (_super) {
34064 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowTimeSubscriber, _super);
34065 function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
34066 var _this = _super.call(this, destination) || this;
34067 _this.destination = destination;
34068 _this.windowTimeSpan = windowTimeSpan;
34069 _this.windowCreationInterval = windowCreationInterval;
34070 _this.maxWindowSize = maxWindowSize;
34071 _this.scheduler = scheduler;
34072 _this.windows = [];
34073 var window = _this.openWindow();
34074 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
34075 var closeState = { subscriber: _this, window: window, context: null };
34076 var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
34077 _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
34078 _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
34079 }
34080 else {
34081 var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
34082 _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
34083 }
34084 return _this;
34085 }
34086 WindowTimeSubscriber.prototype._next = function (value) {
34087 var windows = this.windows;
34088 var len = windows.length;
34089 for (var i = 0; i < len; i++) {
34090 var window_1 = windows[i];
34091 if (!window_1.closed) {
34092 window_1.next(value);
34093 if (window_1.numberOfNextedValues >= this.maxWindowSize) {
34094 this.closeWindow(window_1);
34095 }
34096 }
34097 }
34098 };
34099 WindowTimeSubscriber.prototype._error = function (err) {
34100 var windows = this.windows;
34101 while (windows.length > 0) {
34102 windows.shift().error(err);
34103 }
34104 this.destination.error(err);
34105 };
34106 WindowTimeSubscriber.prototype._complete = function () {
34107 var windows = this.windows;
34108 while (windows.length > 0) {
34109 var window_2 = windows.shift();
34110 if (!window_2.closed) {
34111 window_2.complete();
34112 }
34113 }
34114 this.destination.complete();
34115 };
34116 WindowTimeSubscriber.prototype.openWindow = function () {
34117 var window = new CountedSubject();
34118 this.windows.push(window);
34119 var destination = this.destination;
34120 destination.next(window);
34121 return window;
34122 };
34123 WindowTimeSubscriber.prototype.closeWindow = function (window) {
34124 window.complete();
34125 var windows = this.windows;
34126 windows.splice(windows.indexOf(window), 1);
34127 };
34128 return WindowTimeSubscriber;
34129}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
34130function dispatchWindowTimeSpanOnly(state) {
34131 var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
34132 if (window) {
34133 subscriber.closeWindow(window);
34134 }
34135 state.window = subscriber.openWindow();
34136 this.schedule(state, windowTimeSpan);
34137}
34138function dispatchWindowCreation(state) {
34139 var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
34140 var window = subscriber.openWindow();
34141 var action = this;
34142 var context = { action: action, subscription: null };
34143 var timeSpanState = { subscriber: subscriber, window: window, context: context };
34144 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
34145 action.add(context.subscription);
34146 action.schedule(state, windowCreationInterval);
34147}
34148function dispatchWindowClose(state) {
34149 var subscriber = state.subscriber, window = state.window, context = state.context;
34150 if (context && context.action && context.subscription) {
34151 context.action.remove(context.subscription);
34152 }
34153 subscriber.closeWindow(window);
34154}
34155//# sourceMappingURL=windowTime.js.map
34156
34157
34158/***/ }),
34159/* 344 */
34160/***/ (function(module, __webpack_exports__, __webpack_require__) {
34161
34162"use strict";
34163__webpack_require__.r(__webpack_exports__);
34164/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return windowToggle; });
34165/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
34166/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
34167/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(157);
34168/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(209);
34169/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(210);
34170/** PURE_IMPORTS_START tslib,_Subject,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34171
34172
34173
34174
34175
34176function windowToggle(openings, closingSelector) {
34177 return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
34178}
34179var WindowToggleOperator = /*@__PURE__*/ (function () {
34180 function WindowToggleOperator(openings, closingSelector) {
34181 this.openings = openings;
34182 this.closingSelector = closingSelector;
34183 }
34184 WindowToggleOperator.prototype.call = function (subscriber, source) {
34185 return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
34186 };
34187 return WindowToggleOperator;
34188}());
34189var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) {
34190 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowToggleSubscriber, _super);
34191 function WindowToggleSubscriber(destination, openings, closingSelector) {
34192 var _this = _super.call(this, destination) || this;
34193 _this.openings = openings;
34194 _this.closingSelector = closingSelector;
34195 _this.contexts = [];
34196 _this.add(_this.openSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(_this, openings, openings));
34197 return _this;
34198 }
34199 WindowToggleSubscriber.prototype._next = function (value) {
34200 var contexts = this.contexts;
34201 if (contexts) {
34202 var len = contexts.length;
34203 for (var i = 0; i < len; i++) {
34204 contexts[i].window.next(value);
34205 }
34206 }
34207 };
34208 WindowToggleSubscriber.prototype._error = function (err) {
34209 var contexts = this.contexts;
34210 this.contexts = null;
34211 if (contexts) {
34212 var len = contexts.length;
34213 var index = -1;
34214 while (++index < len) {
34215 var context_1 = contexts[index];
34216 context_1.window.error(err);
34217 context_1.subscription.unsubscribe();
34218 }
34219 }
34220 _super.prototype._error.call(this, err);
34221 };
34222 WindowToggleSubscriber.prototype._complete = function () {
34223 var contexts = this.contexts;
34224 this.contexts = null;
34225 if (contexts) {
34226 var len = contexts.length;
34227 var index = -1;
34228 while (++index < len) {
34229 var context_2 = contexts[index];
34230 context_2.window.complete();
34231 context_2.subscription.unsubscribe();
34232 }
34233 }
34234 _super.prototype._complete.call(this);
34235 };
34236 WindowToggleSubscriber.prototype._unsubscribe = function () {
34237 var contexts = this.contexts;
34238 this.contexts = null;
34239 if (contexts) {
34240 var len = contexts.length;
34241 var index = -1;
34242 while (++index < len) {
34243 var context_3 = contexts[index];
34244 context_3.window.unsubscribe();
34245 context_3.subscription.unsubscribe();
34246 }
34247 }
34248 };
34249 WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34250 if (outerValue === this.openings) {
34251 var closingNotifier = void 0;
34252 try {
34253 var closingSelector = this.closingSelector;
34254 closingNotifier = closingSelector(innerValue);
34255 }
34256 catch (e) {
34257 return this.error(e);
34258 }
34259 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
34260 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
34261 var context_4 = { window: window_1, subscription: subscription };
34262 this.contexts.push(context_4);
34263 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, closingNotifier, context_4);
34264 if (innerSubscription.closed) {
34265 this.closeWindow(this.contexts.length - 1);
34266 }
34267 else {
34268 innerSubscription.context = context_4;
34269 subscription.add(innerSubscription);
34270 }
34271 this.destination.next(window_1);
34272 }
34273 else {
34274 this.closeWindow(this.contexts.indexOf(outerValue));
34275 }
34276 };
34277 WindowToggleSubscriber.prototype.notifyError = function (err) {
34278 this.error(err);
34279 };
34280 WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
34281 if (inner !== this.openSubscription) {
34282 this.closeWindow(this.contexts.indexOf(inner.context));
34283 }
34284 };
34285 WindowToggleSubscriber.prototype.closeWindow = function (index) {
34286 if (index === -1) {
34287 return;
34288 }
34289 var contexts = this.contexts;
34290 var context = contexts[index];
34291 var window = context.window, subscription = context.subscription;
34292 contexts.splice(index, 1);
34293 window.complete();
34294 subscription.unsubscribe();
34295 };
34296 return WindowToggleSubscriber;
34297}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
34298//# sourceMappingURL=windowToggle.js.map
34299
34300
34301/***/ }),
34302/* 345 */
34303/***/ (function(module, __webpack_exports__, __webpack_require__) {
34304
34305"use strict";
34306__webpack_require__.r(__webpack_exports__);
34307/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return windowWhen; });
34308/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
34309/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
34310/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
34311/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(210);
34312/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34313
34314
34315
34316
34317function windowWhen(closingSelector) {
34318 return function windowWhenOperatorFunction(source) {
34319 return source.lift(new WindowOperator(closingSelector));
34320 };
34321}
34322var WindowOperator = /*@__PURE__*/ (function () {
34323 function WindowOperator(closingSelector) {
34324 this.closingSelector = closingSelector;
34325 }
34326 WindowOperator.prototype.call = function (subscriber, source) {
34327 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
34328 };
34329 return WindowOperator;
34330}());
34331var WindowSubscriber = /*@__PURE__*/ (function (_super) {
34332 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
34333 function WindowSubscriber(destination, closingSelector) {
34334 var _this = _super.call(this, destination) || this;
34335 _this.destination = destination;
34336 _this.closingSelector = closingSelector;
34337 _this.openWindow();
34338 return _this;
34339 }
34340 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34341 this.openWindow(innerSub);
34342 };
34343 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
34344 this._error(error);
34345 };
34346 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
34347 this.openWindow(innerSub);
34348 };
34349 WindowSubscriber.prototype._next = function (value) {
34350 this.window.next(value);
34351 };
34352 WindowSubscriber.prototype._error = function (err) {
34353 this.window.error(err);
34354 this.destination.error(err);
34355 this.unsubscribeClosingNotification();
34356 };
34357 WindowSubscriber.prototype._complete = function () {
34358 this.window.complete();
34359 this.destination.complete();
34360 this.unsubscribeClosingNotification();
34361 };
34362 WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
34363 if (this.closingNotification) {
34364 this.closingNotification.unsubscribe();
34365 }
34366 };
34367 WindowSubscriber.prototype.openWindow = function (innerSub) {
34368 if (innerSub === void 0) {
34369 innerSub = null;
34370 }
34371 if (innerSub) {
34372 this.remove(innerSub);
34373 innerSub.unsubscribe();
34374 }
34375 var prevWindow = this.window;
34376 if (prevWindow) {
34377 prevWindow.complete();
34378 }
34379 var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
34380 this.destination.next(window);
34381 var closingNotifier;
34382 try {
34383 var closingSelector = this.closingSelector;
34384 closingNotifier = closingSelector();
34385 }
34386 catch (e) {
34387 this.destination.error(e);
34388 this.window.error(e);
34389 return;
34390 }
34391 this.add(this.closingNotification = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
34392 };
34393 return WindowSubscriber;
34394}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
34395//# sourceMappingURL=windowWhen.js.map
34396
34397
34398/***/ }),
34399/* 346 */
34400/***/ (function(module, __webpack_exports__, __webpack_require__) {
34401
34402"use strict";
34403__webpack_require__.r(__webpack_exports__);
34404/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return withLatestFrom; });
34405/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(152);
34406/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(209);
34407/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(210);
34408/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34409
34410
34411
34412function withLatestFrom() {
34413 var args = [];
34414 for (var _i = 0; _i < arguments.length; _i++) {
34415 args[_i] = arguments[_i];
34416 }
34417 return function (source) {
34418 var project;
34419 if (typeof args[args.length - 1] === 'function') {
34420 project = args.pop();
34421 }
34422 var observables = args;
34423 return source.lift(new WithLatestFromOperator(observables, project));
34424 };
34425}
34426var WithLatestFromOperator = /*@__PURE__*/ (function () {
34427 function WithLatestFromOperator(observables, project) {
34428 this.observables = observables;
34429 this.project = project;
34430 }
34431 WithLatestFromOperator.prototype.call = function (subscriber, source) {
34432 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
34433 };
34434 return WithLatestFromOperator;
34435}());
34436var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {
34437 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WithLatestFromSubscriber, _super);
34438 function WithLatestFromSubscriber(destination, observables, project) {
34439 var _this = _super.call(this, destination) || this;
34440 _this.observables = observables;
34441 _this.project = project;
34442 _this.toRespond = [];
34443 var len = observables.length;
34444 _this.values = new Array(len);
34445 for (var i = 0; i < len; i++) {
34446 _this.toRespond.push(i);
34447 }
34448 for (var i = 0; i < len; i++) {
34449 var observable = observables[i];
34450 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, observable, observable, i));
34451 }
34452 return _this;
34453 }
34454 WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34455 this.values[outerIndex] = innerValue;
34456 var toRespond = this.toRespond;
34457 if (toRespond.length > 0) {
34458 var found = toRespond.indexOf(outerIndex);
34459 if (found !== -1) {
34460 toRespond.splice(found, 1);
34461 }
34462 }
34463 };
34464 WithLatestFromSubscriber.prototype.notifyComplete = function () {
34465 };
34466 WithLatestFromSubscriber.prototype._next = function (value) {
34467 if (this.toRespond.length === 0) {
34468 var args = [value].concat(this.values);
34469 if (this.project) {
34470 this._tryProject(args);
34471 }
34472 else {
34473 this.destination.next(args);
34474 }
34475 }
34476 };
34477 WithLatestFromSubscriber.prototype._tryProject = function (args) {
34478 var result;
34479 try {
34480 result = this.project.apply(this, args);
34481 }
34482 catch (err) {
34483 this.destination.error(err);
34484 return;
34485 }
34486 this.destination.next(result);
34487 };
34488 return WithLatestFromSubscriber;
34489}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34490//# sourceMappingURL=withLatestFrom.js.map
34491
34492
34493/***/ }),
34494/* 347 */
34495/***/ (function(module, __webpack_exports__, __webpack_require__) {
34496
34497"use strict";
34498__webpack_require__.r(__webpack_exports__);
34499/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
34500/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(249);
34501/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
34502
34503function zip() {
34504 var observables = [];
34505 for (var _i = 0; _i < arguments.length; _i++) {
34506 observables[_i] = arguments[_i];
34507 }
34508 return function zipOperatorFunction(source) {
34509 return source.lift.call(_observable_zip__WEBPACK_IMPORTED_MODULE_0__["zip"].apply(void 0, [source].concat(observables)));
34510 };
34511}
34512//# sourceMappingURL=zip.js.map
34513
34514
34515/***/ }),
34516/* 348 */
34517/***/ (function(module, __webpack_exports__, __webpack_require__) {
34518
34519"use strict";
34520__webpack_require__.r(__webpack_exports__);
34521/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return zipAll; });
34522/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(249);
34523/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
34524
34525function zipAll(project) {
34526 return function (source) { return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__["ZipOperator"](project)); };
34527}
34528//# sourceMappingURL=zipAll.js.map
34529
34530
34531/***/ }),
34532/* 349 */
34533/***/ (function(module, exports, __webpack_require__) {
34534
34535"use strict";
34536
34537var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
34538 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
34539 return new (P || (P = Promise))(function (resolve, reject) {
34540 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
34541 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
34542 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
34543 step((generator = generator.apply(thisArg, _arguments || [])).next());
34544 });
34545};
34546var __generator = (this && this.__generator) || function (thisArg, body) {
34547 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
34548 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
34549 function verb(n) { return function (v) { return step([n, v]); }; }
34550 function step(op) {
34551 if (f) throw new TypeError("Generator is already executing.");
34552 while (_) try {
34553 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;
34554 if (y = 0, t) op = [op[0] & 2, t.value];
34555 switch (op[0]) {
34556 case 0: case 1: t = op; break;
34557 case 4: _.label++; return { value: op[1], done: false };
34558 case 5: _.label++; y = op[1]; op = [0]; continue;
34559 case 7: op = _.ops.pop(); _.trys.pop(); continue;
34560 default:
34561 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
34562 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
34563 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
34564 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
34565 if (t[2]) _.ops.pop();
34566 _.trys.pop(); continue;
34567 }
34568 op = body.call(thisArg, _);
34569 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
34570 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
34571 }
34572};
34573Object.defineProperty(exports, "__esModule", { value: true });
34574var vscode_languageserver_1 = __webpack_require__(4);
34575var patterns_1 = __webpack_require__(48);
34576var connection_1 = __webpack_require__(122);
34577var fixNegativeNum = function (num) {
34578 if (num < 0) {
34579 return 0;
34580 }
34581 return num;
34582};
34583function handleDiagnostic(textDoc, error) {
34584 return __awaiter(this, void 0, void 0, function () {
34585 var m, lines, line, col;
34586 return __generator(this, function (_a) {
34587 m = (error || "").match(patterns_1.errorLinePattern);
34588 if (m) {
34589 lines = textDoc.lineCount;
34590 line = fixNegativeNum(parseFloat(m[2]) - 1);
34591 col = fixNegativeNum(parseFloat(m[3]) - 1);
34592 return [2 /*return*/, connection_1.connection.sendDiagnostics({
34593 uri: textDoc.uri,
34594 diagnostics: [{
34595 source: "vimlsp",
34596 message: m[1],
34597 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)),
34598 severity: vscode_languageserver_1.DiagnosticSeverity.Error,
34599 }],
34600 })];
34601 }
34602 // clear diagnostics
34603 connection_1.connection.sendDiagnostics({
34604 uri: textDoc.uri,
34605 diagnostics: [],
34606 });
34607 return [2 /*return*/];
34608 });
34609 });
34610}
34611exports.handleDiagnostic = handleDiagnostic;
34612
34613
34614/***/ })
34615/******/ ])));
\No newline at end of file