UNPKG

2.63 MBJavaScriptView Raw
1(function(e, a) { for(var i in a) e[i] = a[i]; }(exports, /******/ (function(modules) { // webpackBootstrap
2/******/ // The module cache
3/******/ var installedModules = {};
4/******/
5/******/ // The require function
6/******/ function __webpack_require__(moduleId) {
7/******/
8/******/ // Check if module is in cache
9/******/ if(installedModules[moduleId]) {
10/******/ return installedModules[moduleId].exports;
11/******/ }
12/******/ // Create a new module (and put it into the cache)
13/******/ var module = installedModules[moduleId] = {
14/******/ i: moduleId,
15/******/ l: false,
16/******/ exports: {}
17/******/ };
18/******/
19/******/ // Execute the module function
20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ // Flag the module as loaded
23/******/ module.l = true;
24/******/
25/******/ // Return the exports of the module
26/******/ return module.exports;
27/******/ }
28/******/
29/******/
30/******/ // expose the modules object (__webpack_modules__)
31/******/ __webpack_require__.m = modules;
32/******/
33/******/ // expose the module cache
34/******/ __webpack_require__.c = installedModules;
35/******/
36/******/ // define getter function for harmony exports
37/******/ __webpack_require__.d = function(exports, name, getter) {
38/******/ if(!__webpack_require__.o(exports, name)) {
39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40/******/ }
41/******/ };
42/******/
43/******/ // define __esModule on exports
44/******/ __webpack_require__.r = function(exports) {
45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47/******/ }
48/******/ Object.defineProperty(exports, '__esModule', { value: true });
49/******/ };
50/******/
51/******/ // create a fake namespace object
52/******/ // mode & 1: value is a module id, require it
53/******/ // mode & 2: merge all properties of value into the ns
54/******/ // mode & 4: return value when already ns object
55/******/ // mode & 8|1: behave like require
56/******/ __webpack_require__.t = function(value, mode) {
57/******/ if(mode & 1) value = __webpack_require__(value);
58/******/ if(mode & 8) return value;
59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60/******/ var ns = Object.create(null);
61/******/ __webpack_require__.r(ns);
62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64/******/ return ns;
65/******/ };
66/******/
67/******/ // getDefaultExport function for compatibility with non-harmony modules
68/******/ __webpack_require__.n = function(module) {
69/******/ var getter = module && module.__esModule ?
70/******/ function getDefault() { return module['default']; } :
71/******/ function getModuleExports() { return module; };
72/******/ __webpack_require__.d(getter, 'a', getter);
73/******/ return getter;
74/******/ };
75/******/
76/******/ // Object.prototype.hasOwnProperty.call
77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78/******/
79/******/ // __webpack_public_path__
80/******/ __webpack_require__.p = "";
81/******/
82/******/
83/******/ // Load entry module and return exports
84/******/ return __webpack_require__(__webpack_require__.s = 0);
85/******/ })
86/************************************************************************/
87/******/ ([
88/* 0 */
89/***/ (function(module, exports, __webpack_require__) {
90
91"use strict";
92
93var __assign = (this && this.__assign) || function () {
94 __assign = Object.assign || function(t) {
95 for (var s, i = 1, n = arguments.length; i < n; i++) {
96 s = arguments[i];
97 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
98 t[p] = s[p];
99 }
100 return t;
101 };
102 return __assign.apply(this, arguments);
103};
104var __importStar = (this && this.__importStar) || function (mod) {
105 if (mod && mod.__esModule) return mod;
106 var result = {};
107 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
108 result["default"] = mod;
109 return result;
110};
111var __importDefault = (this && this.__importDefault) || function (mod) {
112 return (mod && mod.__esModule) ? mod : { "default": mod };
113};
114Object.defineProperty(exports, "__esModule", { value: true });
115var shvl = __importStar(__webpack_require__(1));
116var vscode_languageserver_1 = __webpack_require__(2);
117var constant_1 = __webpack_require__(44);
118var completion_1 = __webpack_require__(45);
119var completionResolve_1 = __webpack_require__(157);
120var definition_1 = __webpack_require__(158);
121var documentHighlight_1 = __webpack_require__(159);
122var foldingRange_1 = __webpack_require__(160);
123var hover_1 = __webpack_require__(161);
124var references_1 = __webpack_require__(162);
125var rename_1 = __webpack_require__(163);
126var signatureHelp_1 = __webpack_require__(164);
127var builtin_1 = __webpack_require__(59);
128var config_1 = __importDefault(__webpack_require__(55));
129var connection_1 = __webpack_require__(138);
130var documents_1 = __webpack_require__(56);
131var parser_1 = __webpack_require__(165);
132var selectionRange_1 = __webpack_require__(368);
133var documentSymbol_1 = __webpack_require__(369);
134// lsp initialize
135connection_1.connection.onInitialize(function (param) {
136 var _a = param.initializationOptions, initializationOptions = _a === void 0 ? {} : _a;
137 var iskeyword = initializationOptions.iskeyword, runtimepath = initializationOptions.runtimepath, vimruntime = initializationOptions.vimruntime, diagnostic = initializationOptions.diagnostic, suggest = initializationOptions.suggest, indexes = initializationOptions.indexes;
138 var runtimepaths = runtimepath ? runtimepath.split(",") : [];
139 // config by user's initializationOptions
140 var conf = {
141 iskeyword: iskeyword || "",
142 runtimepath: runtimepaths,
143 vimruntime: (vimruntime || "").trim(),
144 diagnostic: __assign({ enable: true }, (diagnostic || {})),
145 snippetSupport: shvl.get(param, "capabilities.textDocument.completion.completionItem.snippetSupport"),
146 suggest: __assign({ fromRuntimepath: false, fromVimruntime: true }, (suggest || {})),
147 indexes: __assign({ runtimepath: true, gap: 100, count: 1, projectRootPatterns: constant_1.projectRootPatterns }, (indexes || {})),
148 };
149 // init config
150 config_1.default.init(conf);
151 // init builtin docs
152 builtin_1.builtinDocs.init();
153 return {
154 capabilities: {
155 textDocumentSync: vscode_languageserver_1.TextDocumentSyncKind.Incremental,
156 documentHighlightProvider: true,
157 foldingRangeProvider: true,
158 selectionRangeProvider: true,
159 documentSymbolProvider: true,
160 hoverProvider: true,
161 completionProvider: {
162 triggerCharacters: [".", ":", "#", "[", "&", "$", "<", '"', "'"],
163 resolveProvider: true,
164 },
165 signatureHelpProvider: {
166 triggerCharacters: ["(", ","],
167 },
168 definitionProvider: true,
169 referencesProvider: true,
170 renameProvider: {
171 prepareProvider: true,
172 },
173 },
174 };
175});
176// document change or open
177documents_1.documents.onDidChangeContent(function (change) {
178 parser_1.next(change.document);
179});
180documents_1.documents.onDidClose(function (evt) {
181 parser_1.unsubscribe(evt.document);
182});
183// listen for document's open/close/change
184documents_1.documents.listen(connection_1.connection);
185// handle completion
186connection_1.connection.onCompletion(completion_1.completionProvider);
187// handle completion resolve
188connection_1.connection.onCompletionResolve(completionResolve_1.completionResolveProvider);
189// handle signature help
190connection_1.connection.onSignatureHelp(signatureHelp_1.signatureHelpProvider);
191// handle hover
192connection_1.connection.onHover(hover_1.hoverProvider);
193// handle definition request
194connection_1.connection.onDefinition(definition_1.definitionProvider);
195// handle references
196connection_1.connection.onReferences(references_1.referencesProvider);
197// handle rename
198connection_1.connection.onPrepareRename(rename_1.prepareProvider);
199connection_1.connection.onRenameRequest(rename_1.renameProvider);
200// document highlight
201connection_1.connection.onDocumentHighlight(documentHighlight_1.documentHighlightProvider);
202// folding range
203connection_1.connection.onFoldingRanges(foldingRange_1.foldingRangeProvider);
204// select range
205connection_1.connection.onSelectionRanges(selectionRange_1.selectionRangeProvider);
206// document symbols
207connection_1.connection.onDocumentSymbol(documentSymbol_1.documentSymbolProvider);
208// lsp start
209connection_1.connection.listen();
210
211
212/***/ }),
213/* 1 */
214/***/ (function(__webpack_module__, __webpack_exports__, __webpack_require__) {
215
216"use strict";
217__webpack_require__.r(__webpack_exports__);
218/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "get", function() { return t; });
219/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "set", function() { return n; });
220function 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}
221//# sourceMappingURL=shvl.mjs.map
222
223
224/***/ }),
225/* 2 */
226/***/ (function(module, exports, __webpack_require__) {
227
228"use strict";
229/* --------------------------------------------------------------------------------------------
230 * Copyright (c) Microsoft Corporation. All rights reserved.
231 * Licensed under the MIT License. See License.txt in the project root for license information.
232 * ------------------------------------------------------------------------------------------ */
233/// <reference path="../typings/thenable.d.ts" />
234
235function __export(m) {
236 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
237}
238Object.defineProperty(exports, "__esModule", { value: true });
239const vscode_languageserver_protocol_1 = __webpack_require__(3);
240exports.Event = vscode_languageserver_protocol_1.Event;
241const configuration_1 = __webpack_require__(33);
242const workspaceFolders_1 = __webpack_require__(35);
243const progress_1 = __webpack_require__(36);
244const Is = __webpack_require__(34);
245const UUID = __webpack_require__(37);
246// ------------- Reexport the API surface of the language worker API ----------------------
247__export(__webpack_require__(3));
248const fm = __webpack_require__(38);
249var Files;
250(function (Files) {
251 Files.uriToFilePath = fm.uriToFilePath;
252 Files.resolveGlobalNodePath = fm.resolveGlobalNodePath;
253 Files.resolveGlobalYarnPath = fm.resolveGlobalYarnPath;
254 Files.resolve = fm.resolve;
255 Files.resolveModulePath = fm.resolveModulePath;
256})(Files = exports.Files || (exports.Files = {}));
257let shutdownReceived = false;
258let exitTimer = undefined;
259function setupExitTimer() {
260 const argName = '--clientProcessId';
261 function runTimer(value) {
262 try {
263 let processId = parseInt(value);
264 if (!isNaN(processId)) {
265 exitTimer = setInterval(() => {
266 try {
267 process.kill(processId, 0);
268 }
269 catch (ex) {
270 // Parent process doesn't exist anymore. Exit the server.
271 process.exit(shutdownReceived ? 0 : 1);
272 }
273 }, 3000);
274 }
275 }
276 catch (e) {
277 // Ignore errors;
278 }
279 }
280 for (let i = 2; i < process.argv.length; i++) {
281 let arg = process.argv[i];
282 if (arg === argName && i + 1 < process.argv.length) {
283 runTimer(process.argv[i + 1]);
284 return;
285 }
286 else {
287 let args = arg.split('=');
288 if (args[0] === argName) {
289 runTimer(args[1]);
290 }
291 }
292 }
293}
294setupExitTimer();
295function null2Undefined(value) {
296 if (value === null) {
297 return void 0;
298 }
299 return value;
300}
301/**
302 * A manager for simple text documents
303 */
304class TextDocuments {
305 /**
306 * Create a new text document manager.
307 */
308 constructor(configuration) {
309 this._documents = Object.create(null);
310 this._configuration = configuration;
311 this._onDidChangeContent = new vscode_languageserver_protocol_1.Emitter();
312 this._onDidOpen = new vscode_languageserver_protocol_1.Emitter();
313 this._onDidClose = new vscode_languageserver_protocol_1.Emitter();
314 this._onDidSave = new vscode_languageserver_protocol_1.Emitter();
315 this._onWillSave = new vscode_languageserver_protocol_1.Emitter();
316 }
317 /**
318 * An event that fires when a text document managed by this manager
319 * has been opened or the content changes.
320 */
321 get onDidChangeContent() {
322 return this._onDidChangeContent.event;
323 }
324 /**
325 * An event that fires when a text document managed by this manager
326 * has been opened.
327 */
328 get onDidOpen() {
329 return this._onDidOpen.event;
330 }
331 /**
332 * An event that fires when a text document managed by this manager
333 * will be saved.
334 */
335 get onWillSave() {
336 return this._onWillSave.event;
337 }
338 /**
339 * Sets a handler that will be called if a participant wants to provide
340 * edits during a text document save.
341 */
342 onWillSaveWaitUntil(handler) {
343 this._willSaveWaitUntil = handler;
344 }
345 /**
346 * An event that fires when a text document managed by this manager
347 * has been saved.
348 */
349 get onDidSave() {
350 return this._onDidSave.event;
351 }
352 /**
353 * An event that fires when a text document managed by this manager
354 * has been closed.
355 */
356 get onDidClose() {
357 return this._onDidClose.event;
358 }
359 /**
360 * Returns the document for the given URI. Returns undefined if
361 * the document is not mananged by this instance.
362 *
363 * @param uri The text document's URI to retrieve.
364 * @return the text document or `undefined`.
365 */
366 get(uri) {
367 return this._documents[uri];
368 }
369 /**
370 * Returns all text documents managed by this instance.
371 *
372 * @return all text documents.
373 */
374 all() {
375 return Object.keys(this._documents).map(key => this._documents[key]);
376 }
377 /**
378 * Returns the URIs of all text documents managed by this instance.
379 *
380 * @return the URI's of all text documents.
381 */
382 keys() {
383 return Object.keys(this._documents);
384 }
385 /**
386 * Listens for `low level` notification on the given connection to
387 * update the text documents managed by this instance.
388 *
389 * @param connection The connection to listen on.
390 */
391 listen(connection) {
392 connection.__textDocumentSync = vscode_languageserver_protocol_1.TextDocumentSyncKind.Full;
393 connection.onDidOpenTextDocument((event) => {
394 let td = event.textDocument;
395 let document = this._configuration.create(td.uri, td.languageId, td.version, td.text);
396 this._documents[td.uri] = document;
397 let toFire = Object.freeze({ document });
398 this._onDidOpen.fire(toFire);
399 this._onDidChangeContent.fire(toFire);
400 });
401 connection.onDidChangeTextDocument((event) => {
402 let td = event.textDocument;
403 let changes = event.contentChanges;
404 if (changes.length === 0) {
405 return;
406 }
407 let document = this._documents[td.uri];
408 const { version } = td;
409 if (version === null || version === void 0) {
410 throw new Error(`Received document change event for ${td.uri} without valid version identifier`);
411 }
412 document = this._configuration.update(document, changes, version);
413 this._documents[td.uri] = document;
414 this._onDidChangeContent.fire(Object.freeze({ document }));
415 });
416 connection.onDidCloseTextDocument((event) => {
417 let document = this._documents[event.textDocument.uri];
418 if (document) {
419 delete this._documents[event.textDocument.uri];
420 this._onDidClose.fire(Object.freeze({ document }));
421 }
422 });
423 connection.onWillSaveTextDocument((event) => {
424 let document = this._documents[event.textDocument.uri];
425 if (document) {
426 this._onWillSave.fire(Object.freeze({ document, reason: event.reason }));
427 }
428 });
429 connection.onWillSaveTextDocumentWaitUntil((event, token) => {
430 let document = this._documents[event.textDocument.uri];
431 if (document && this._willSaveWaitUntil) {
432 return this._willSaveWaitUntil(Object.freeze({ document, reason: event.reason }), token);
433 }
434 else {
435 return [];
436 }
437 });
438 connection.onDidSaveTextDocument((event) => {
439 let document = this._documents[event.textDocument.uri];
440 if (document) {
441 this._onDidSave.fire(Object.freeze({ document }));
442 }
443 });
444 }
445}
446exports.TextDocuments = TextDocuments;
447/**
448 * Helps tracking error message. Equal occurences of the same
449 * message are only stored once. This class is for example
450 * useful if text documents are validated in a loop and equal
451 * error message should be folded into one.
452 */
453class ErrorMessageTracker {
454 constructor() {
455 this._messages = Object.create(null);
456 }
457 /**
458 * Add a message to the tracker.
459 *
460 * @param message The message to add.
461 */
462 add(message) {
463 let count = this._messages[message];
464 if (!count) {
465 count = 0;
466 }
467 count++;
468 this._messages[message] = count;
469 }
470 /**
471 * Send all tracked messages to the connection's window.
472 *
473 * @param connection The connection established between client and server.
474 */
475 sendErrors(connection) {
476 Object.keys(this._messages).forEach(message => {
477 connection.window.showErrorMessage(message);
478 });
479 }
480}
481exports.ErrorMessageTracker = ErrorMessageTracker;
482class RemoteConsoleImpl {
483 constructor() {
484 }
485 rawAttach(connection) {
486 this._rawConnection = connection;
487 }
488 attach(connection) {
489 this._connection = connection;
490 }
491 get connection() {
492 if (!this._connection) {
493 throw new Error('Remote is not attached to a connection yet.');
494 }
495 return this._connection;
496 }
497 fillServerCapabilities(_capabilities) {
498 }
499 initialize(_capabilities) {
500 }
501 error(message) {
502 this.send(vscode_languageserver_protocol_1.MessageType.Error, message);
503 }
504 warn(message) {
505 this.send(vscode_languageserver_protocol_1.MessageType.Warning, message);
506 }
507 info(message) {
508 this.send(vscode_languageserver_protocol_1.MessageType.Info, message);
509 }
510 log(message) {
511 this.send(vscode_languageserver_protocol_1.MessageType.Log, message);
512 }
513 send(type, message) {
514 if (this._rawConnection) {
515 this._rawConnection.sendNotification(vscode_languageserver_protocol_1.LogMessageNotification.type, { type, message });
516 }
517 }
518}
519class _RemoteWindowImpl {
520 constructor() {
521 }
522 attach(connection) {
523 this._connection = connection;
524 }
525 get connection() {
526 if (!this._connection) {
527 throw new Error('Remote is not attached to a connection yet.');
528 }
529 return this._connection;
530 }
531 initialize(_capabilities) {
532 }
533 fillServerCapabilities(_capabilities) {
534 }
535 showErrorMessage(message, ...actions) {
536 let params = { type: vscode_languageserver_protocol_1.MessageType.Error, message, actions };
537 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
538 }
539 showWarningMessage(message, ...actions) {
540 let params = { type: vscode_languageserver_protocol_1.MessageType.Warning, message, actions };
541 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
542 }
543 showInformationMessage(message, ...actions) {
544 let params = { type: vscode_languageserver_protocol_1.MessageType.Info, message, actions };
545 return this._connection.sendRequest(vscode_languageserver_protocol_1.ShowMessageRequest.type, params).then(null2Undefined);
546 }
547}
548const RemoteWindowImpl = progress_1.ProgressFeature(_RemoteWindowImpl);
549var BulkRegistration;
550(function (BulkRegistration) {
551 /**
552 * Creates a new bulk registration.
553 * @return an empty bulk registration.
554 */
555 function create() {
556 return new BulkRegistrationImpl();
557 }
558 BulkRegistration.create = create;
559})(BulkRegistration = exports.BulkRegistration || (exports.BulkRegistration = {}));
560class BulkRegistrationImpl {
561 constructor() {
562 this._registrations = [];
563 this._registered = new Set();
564 }
565 add(type, registerOptions) {
566 const method = Is.string(type) ? type : type.method;
567 if (this._registered.has(method)) {
568 throw new Error(`${method} is already added to this registration`);
569 }
570 const id = UUID.generateUuid();
571 this._registrations.push({
572 id: id,
573 method: method,
574 registerOptions: registerOptions || {}
575 });
576 this._registered.add(method);
577 }
578 asRegistrationParams() {
579 return {
580 registrations: this._registrations
581 };
582 }
583}
584var BulkUnregistration;
585(function (BulkUnregistration) {
586 function create() {
587 return new BulkUnregistrationImpl(undefined, []);
588 }
589 BulkUnregistration.create = create;
590})(BulkUnregistration = exports.BulkUnregistration || (exports.BulkUnregistration = {}));
591class BulkUnregistrationImpl {
592 constructor(_connection, unregistrations) {
593 this._connection = _connection;
594 this._unregistrations = new Map();
595 unregistrations.forEach(unregistration => {
596 this._unregistrations.set(unregistration.method, unregistration);
597 });
598 }
599 get isAttached() {
600 return !!this._connection;
601 }
602 attach(connection) {
603 this._connection = connection;
604 }
605 add(unregistration) {
606 this._unregistrations.set(unregistration.method, unregistration);
607 }
608 dispose() {
609 let unregistrations = [];
610 for (let unregistration of this._unregistrations.values()) {
611 unregistrations.push(unregistration);
612 }
613 let params = {
614 unregisterations: unregistrations
615 };
616 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
617 this._connection.console.info(`Bulk unregistration failed.`);
618 });
619 }
620 disposeSingle(arg) {
621 const method = Is.string(arg) ? arg : arg.method;
622 const unregistration = this._unregistrations.get(method);
623 if (!unregistration) {
624 return false;
625 }
626 let params = {
627 unregisterations: [unregistration]
628 };
629 this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(() => {
630 this._unregistrations.delete(method);
631 }, (_error) => {
632 this._connection.console.info(`Unregistering request handler for ${unregistration.id} failed.`);
633 });
634 return true;
635 }
636}
637class RemoteClientImpl {
638 attach(connection) {
639 this._connection = connection;
640 }
641 get connection() {
642 if (!this._connection) {
643 throw new Error('Remote is not attached to a connection yet.');
644 }
645 return this._connection;
646 }
647 initialize(_capabilities) {
648 }
649 fillServerCapabilities(_capabilities) {
650 }
651 register(typeOrRegistrations, registerOptionsOrType, registerOptions) {
652 if (typeOrRegistrations instanceof BulkRegistrationImpl) {
653 return this.registerMany(typeOrRegistrations);
654 }
655 else if (typeOrRegistrations instanceof BulkUnregistrationImpl) {
656 return this.registerSingle1(typeOrRegistrations, registerOptionsOrType, registerOptions);
657 }
658 else {
659 return this.registerSingle2(typeOrRegistrations, registerOptionsOrType);
660 }
661 }
662 registerSingle1(unregistration, type, registerOptions) {
663 const method = Is.string(type) ? type : type.method;
664 const id = UUID.generateUuid();
665 let params = {
666 registrations: [{ id, method, registerOptions: registerOptions || {} }]
667 };
668 if (!unregistration.isAttached) {
669 unregistration.attach(this._connection);
670 }
671 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
672 unregistration.add({ id: id, method: method });
673 return unregistration;
674 }, (_error) => {
675 this.connection.console.info(`Registering request handler for ${method} failed.`);
676 return Promise.reject(_error);
677 });
678 }
679 registerSingle2(type, registerOptions) {
680 const method = Is.string(type) ? type : type.method;
681 const id = UUID.generateUuid();
682 let params = {
683 registrations: [{ id, method, registerOptions: registerOptions || {} }]
684 };
685 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then((_result) => {
686 return vscode_languageserver_protocol_1.Disposable.create(() => {
687 this.unregisterSingle(id, method);
688 });
689 }, (_error) => {
690 this.connection.console.info(`Registering request handler for ${method} failed.`);
691 return Promise.reject(_error);
692 });
693 }
694 unregisterSingle(id, method) {
695 let params = {
696 unregisterations: [{ id, method }]
697 };
698 return this._connection.sendRequest(vscode_languageserver_protocol_1.UnregistrationRequest.type, params).then(undefined, (_error) => {
699 this.connection.console.info(`Unregistering request handler for ${id} failed.`);
700 });
701 }
702 registerMany(registrations) {
703 let params = registrations.asRegistrationParams();
704 return this._connection.sendRequest(vscode_languageserver_protocol_1.RegistrationRequest.type, params).then(() => {
705 return new BulkUnregistrationImpl(this._connection, params.registrations.map(registration => { return { id: registration.id, method: registration.method }; }));
706 }, (_error) => {
707 this.connection.console.info(`Bulk registration failed.`);
708 return Promise.reject(_error);
709 });
710 }
711}
712class _RemoteWorkspaceImpl {
713 constructor() {
714 }
715 attach(connection) {
716 this._connection = connection;
717 }
718 get connection() {
719 if (!this._connection) {
720 throw new Error('Remote is not attached to a connection yet.');
721 }
722 return this._connection;
723 }
724 initialize(_capabilities) {
725 }
726 fillServerCapabilities(_capabilities) {
727 }
728 applyEdit(paramOrEdit) {
729 function isApplyWorkspaceEditParams(value) {
730 return value && !!value.edit;
731 }
732 let params = isApplyWorkspaceEditParams(paramOrEdit) ? paramOrEdit : { edit: paramOrEdit };
733 return this._connection.sendRequest(vscode_languageserver_protocol_1.ApplyWorkspaceEditRequest.type, params);
734 }
735}
736const RemoteWorkspaceImpl = workspaceFolders_1.WorkspaceFoldersFeature(configuration_1.ConfigurationFeature(_RemoteWorkspaceImpl));
737class TelemetryImpl {
738 constructor() {
739 }
740 attach(connection) {
741 this._connection = connection;
742 }
743 get connection() {
744 if (!this._connection) {
745 throw new Error('Remote is not attached to a connection yet.');
746 }
747 return this._connection;
748 }
749 initialize(_capabilities) {
750 }
751 fillServerCapabilities(_capabilities) {
752 }
753 logEvent(data) {
754 this._connection.sendNotification(vscode_languageserver_protocol_1.TelemetryEventNotification.type, data);
755 }
756}
757class TracerImpl {
758 constructor() {
759 this._trace = vscode_languageserver_protocol_1.Trace.Off;
760 }
761 attach(connection) {
762 this._connection = connection;
763 }
764 get connection() {
765 if (!this._connection) {
766 throw new Error('Remote is not attached to a connection yet.');
767 }
768 return this._connection;
769 }
770 initialize(_capabilities) {
771 }
772 fillServerCapabilities(_capabilities) {
773 }
774 set trace(value) {
775 this._trace = value;
776 }
777 log(message, verbose) {
778 if (this._trace === vscode_languageserver_protocol_1.Trace.Off) {
779 return;
780 }
781 this._connection.sendNotification(vscode_languageserver_protocol_1.LogTraceNotification.type, {
782 message: message,
783 verbose: this._trace === vscode_languageserver_protocol_1.Trace.Verbose ? verbose : undefined
784 });
785 }
786}
787class LanguagesImpl {
788 constructor() {
789 }
790 attach(connection) {
791 this._connection = connection;
792 }
793 get connection() {
794 if (!this._connection) {
795 throw new Error('Remote is not attached to a connection yet.');
796 }
797 return this._connection;
798 }
799 initialize(_capabilities) {
800 }
801 fillServerCapabilities(_capabilities) {
802 }
803 attachWorkDoneProgress(params) {
804 return progress_1.attachWorkDone(this.connection, params);
805 }
806 attachPartialResultProgress(_type, params) {
807 return progress_1.attachPartialResult(this.connection, params);
808 }
809}
810exports.LanguagesImpl = LanguagesImpl;
811function combineConsoleFeatures(one, two) {
812 return function (Base) {
813 return two(one(Base));
814 };
815}
816exports.combineConsoleFeatures = combineConsoleFeatures;
817function combineTelemetryFeatures(one, two) {
818 return function (Base) {
819 return two(one(Base));
820 };
821}
822exports.combineTelemetryFeatures = combineTelemetryFeatures;
823function combineTracerFeatures(one, two) {
824 return function (Base) {
825 return two(one(Base));
826 };
827}
828exports.combineTracerFeatures = combineTracerFeatures;
829function combineClientFeatures(one, two) {
830 return function (Base) {
831 return two(one(Base));
832 };
833}
834exports.combineClientFeatures = combineClientFeatures;
835function combineWindowFeatures(one, two) {
836 return function (Base) {
837 return two(one(Base));
838 };
839}
840exports.combineWindowFeatures = combineWindowFeatures;
841function combineWorkspaceFeatures(one, two) {
842 return function (Base) {
843 return two(one(Base));
844 };
845}
846exports.combineWorkspaceFeatures = combineWorkspaceFeatures;
847function combineLanguagesFeatures(one, two) {
848 return function (Base) {
849 return two(one(Base));
850 };
851}
852exports.combineLanguagesFeatures = combineLanguagesFeatures;
853function combineFeatures(one, two) {
854 function combine(one, two, func) {
855 if (one && two) {
856 return func(one, two);
857 }
858 else if (one) {
859 return one;
860 }
861 else {
862 return two;
863 }
864 }
865 let result = {
866 __brand: 'features',
867 console: combine(one.console, two.console, combineConsoleFeatures),
868 tracer: combine(one.tracer, two.tracer, combineTracerFeatures),
869 telemetry: combine(one.telemetry, two.telemetry, combineTelemetryFeatures),
870 client: combine(one.client, two.client, combineClientFeatures),
871 window: combine(one.window, two.window, combineWindowFeatures),
872 workspace: combine(one.workspace, two.workspace, combineWorkspaceFeatures)
873 };
874 return result;
875}
876exports.combineFeatures = combineFeatures;
877function createConnection(arg1, arg2, arg3, arg4) {
878 let factories;
879 let input;
880 let output;
881 let strategy;
882 if (arg1 !== void 0 && arg1.__brand === 'features') {
883 factories = arg1;
884 arg1 = arg2;
885 arg2 = arg3;
886 arg3 = arg4;
887 }
888 if (vscode_languageserver_protocol_1.ConnectionStrategy.is(arg1)) {
889 strategy = arg1;
890 }
891 else {
892 input = arg1;
893 output = arg2;
894 strategy = arg3;
895 }
896 return _createConnection(input, output, strategy, factories);
897}
898exports.createConnection = createConnection;
899function _createConnection(input, output, strategy, factories) {
900 if (!input && !output && process.argv.length > 2) {
901 let port = void 0;
902 let pipeName = void 0;
903 let argv = process.argv.slice(2);
904 for (let i = 0; i < argv.length; i++) {
905 let arg = argv[i];
906 if (arg === '--node-ipc') {
907 input = new vscode_languageserver_protocol_1.IPCMessageReader(process);
908 output = new vscode_languageserver_protocol_1.IPCMessageWriter(process);
909 break;
910 }
911 else if (arg === '--stdio') {
912 input = process.stdin;
913 output = process.stdout;
914 break;
915 }
916 else if (arg === '--socket') {
917 port = parseInt(argv[i + 1]);
918 break;
919 }
920 else if (arg === '--pipe') {
921 pipeName = argv[i + 1];
922 break;
923 }
924 else {
925 var args = arg.split('=');
926 if (args[0] === '--socket') {
927 port = parseInt(args[1]);
928 break;
929 }
930 else if (args[0] === '--pipe') {
931 pipeName = args[1];
932 break;
933 }
934 }
935 }
936 if (port) {
937 let transport = vscode_languageserver_protocol_1.createServerSocketTransport(port);
938 input = transport[0];
939 output = transport[1];
940 }
941 else if (pipeName) {
942 let transport = vscode_languageserver_protocol_1.createServerPipeTransport(pipeName);
943 input = transport[0];
944 output = transport[1];
945 }
946 }
947 var commandLineMessage = 'Use arguments of createConnection or set command line parameters: \'--node-ipc\', \'--stdio\' or \'--socket={number}\'';
948 if (!input) {
949 throw new Error('Connection input stream is not set. ' + commandLineMessage);
950 }
951 if (!output) {
952 throw new Error('Connection output stream is not set. ' + commandLineMessage);
953 }
954 // Backwards compatibility
955 if (Is.func(input.read) && Is.func(input.on)) {
956 let inputStream = input;
957 inputStream.on('end', () => {
958 process.exit(shutdownReceived ? 0 : 1);
959 });
960 inputStream.on('close', () => {
961 process.exit(shutdownReceived ? 0 : 1);
962 });
963 }
964 const logger = (factories && factories.console ? new (factories.console(RemoteConsoleImpl))() : new RemoteConsoleImpl());
965 const connection = vscode_languageserver_protocol_1.createProtocolConnection(input, output, logger, strategy);
966 logger.rawAttach(connection);
967 const tracer = (factories && factories.tracer ? new (factories.tracer(TracerImpl))() : new TracerImpl());
968 const telemetry = (factories && factories.telemetry ? new (factories.telemetry(TelemetryImpl))() : new TelemetryImpl());
969 const client = (factories && factories.client ? new (factories.client(RemoteClientImpl))() : new RemoteClientImpl());
970 const remoteWindow = (factories && factories.window ? new (factories.window(RemoteWindowImpl))() : new RemoteWindowImpl());
971 const workspace = (factories && factories.workspace ? new (factories.workspace(RemoteWorkspaceImpl))() : new RemoteWorkspaceImpl());
972 const languages = (factories && factories.languages ? new (factories.languages(LanguagesImpl))() : new LanguagesImpl());
973 const allRemotes = [logger, tracer, telemetry, client, remoteWindow, workspace, languages];
974 function asPromise(value) {
975 if (value instanceof Promise) {
976 return value;
977 }
978 else if (Is.thenable(value)) {
979 return new Promise((resolve, reject) => {
980 value.then((resolved) => resolve(resolved), (error) => reject(error));
981 });
982 }
983 else {
984 return Promise.resolve(value);
985 }
986 }
987 let shutdownHandler = undefined;
988 let initializeHandler = undefined;
989 let exitHandler = undefined;
990 let protocolConnection = {
991 listen: () => connection.listen(),
992 sendRequest: (type, ...params) => connection.sendRequest(Is.string(type) ? type : type.method, ...params),
993 onRequest: (type, handler) => connection.onRequest(type, handler),
994 sendNotification: (type, param) => {
995 const method = Is.string(type) ? type : type.method;
996 if (arguments.length === 1) {
997 connection.sendNotification(method);
998 }
999 else {
1000 connection.sendNotification(method, param);
1001 }
1002 },
1003 onNotification: (type, handler) => connection.onNotification(type, handler),
1004 onProgress: connection.onProgress,
1005 sendProgress: connection.sendProgress,
1006 onInitialize: (handler) => initializeHandler = handler,
1007 onInitialized: (handler) => connection.onNotification(vscode_languageserver_protocol_1.InitializedNotification.type, handler),
1008 onShutdown: (handler) => shutdownHandler = handler,
1009 onExit: (handler) => exitHandler = handler,
1010 get console() { return logger; },
1011 get telemetry() { return telemetry; },
1012 get tracer() { return tracer; },
1013 get client() { return client; },
1014 get window() { return remoteWindow; },
1015 get workspace() { return workspace; },
1016 get languages() { return languages; },
1017 onDidChangeConfiguration: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeConfigurationNotification.type, handler),
1018 onDidChangeWatchedFiles: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeWatchedFilesNotification.type, handler),
1019 __textDocumentSync: undefined,
1020 onDidOpenTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidOpenTextDocumentNotification.type, handler),
1021 onDidChangeTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidChangeTextDocumentNotification.type, handler),
1022 onDidCloseTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidCloseTextDocumentNotification.type, handler),
1023 onWillSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.WillSaveTextDocumentNotification.type, handler),
1024 onWillSaveTextDocumentWaitUntil: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WillSaveTextDocumentWaitUntilRequest.type, handler),
1025 onDidSaveTextDocument: (handler) => connection.onNotification(vscode_languageserver_protocol_1.DidSaveTextDocumentNotification.type, handler),
1026 sendDiagnostics: (params) => connection.sendNotification(vscode_languageserver_protocol_1.PublishDiagnosticsNotification.type, params),
1027 onHover: (handler) => connection.onRequest(vscode_languageserver_protocol_1.HoverRequest.type, (params, cancel) => {
1028 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1029 }),
1030 onCompletion: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionRequest.type, (params, cancel) => {
1031 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1032 }),
1033 onCompletionResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CompletionResolveRequest.type, handler),
1034 onSignatureHelp: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SignatureHelpRequest.type, (params, cancel) => {
1035 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1036 }),
1037 onDeclaration: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DeclarationRequest.type, (params, cancel) => {
1038 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1039 }),
1040 onDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DefinitionRequest.type, (params, cancel) => {
1041 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1042 }),
1043 onTypeDefinition: (handler) => connection.onRequest(vscode_languageserver_protocol_1.TypeDefinitionRequest.type, (params, cancel) => {
1044 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1045 }),
1046 onImplementation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ImplementationRequest.type, (params, cancel) => {
1047 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1048 }),
1049 onReferences: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ReferencesRequest.type, (params, cancel) => {
1050 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1051 }),
1052 onDocumentHighlight: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentHighlightRequest.type, (params, cancel) => {
1053 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1054 }),
1055 onDocumentSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentSymbolRequest.type, (params, cancel) => {
1056 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1057 }),
1058 onWorkspaceSymbol: (handler) => connection.onRequest(vscode_languageserver_protocol_1.WorkspaceSymbolRequest.type, (params, cancel) => {
1059 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1060 }),
1061 onCodeAction: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeActionRequest.type, (params, cancel) => {
1062 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1063 }),
1064 onCodeLens: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensRequest.type, (params, cancel) => {
1065 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1066 }),
1067 onCodeLensResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.CodeLensResolveRequest.type, (params, cancel) => {
1068 return handler(params, cancel);
1069 }),
1070 onDocumentFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentFormattingRequest.type, (params, cancel) => {
1071 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1072 }),
1073 onDocumentRangeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentRangeFormattingRequest.type, (params, cancel) => {
1074 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1075 }),
1076 onDocumentOnTypeFormatting: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentOnTypeFormattingRequest.type, (params, cancel) => {
1077 return handler(params, cancel);
1078 }),
1079 onRenameRequest: (handler) => connection.onRequest(vscode_languageserver_protocol_1.RenameRequest.type, (params, cancel) => {
1080 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1081 }),
1082 onPrepareRename: (handler) => connection.onRequest(vscode_languageserver_protocol_1.PrepareRenameRequest.type, (params, cancel) => {
1083 return handler(params, cancel);
1084 }),
1085 onDocumentLinks: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkRequest.type, (params, cancel) => {
1086 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1087 }),
1088 onDocumentLinkResolve: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentLinkResolveRequest.type, (params, cancel) => {
1089 return handler(params, cancel);
1090 }),
1091 onDocumentColor: (handler) => connection.onRequest(vscode_languageserver_protocol_1.DocumentColorRequest.type, (params, cancel) => {
1092 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1093 }),
1094 onColorPresentation: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ColorPresentationRequest.type, (params, cancel) => {
1095 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1096 }),
1097 onFoldingRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.FoldingRangeRequest.type, (params, cancel) => {
1098 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1099 }),
1100 onSelectionRanges: (handler) => connection.onRequest(vscode_languageserver_protocol_1.SelectionRangeRequest.type, (params, cancel) => {
1101 return handler(params, cancel, progress_1.attachWorkDone(connection, params), progress_1.attachPartialResult(connection, params));
1102 }),
1103 onExecuteCommand: (handler) => connection.onRequest(vscode_languageserver_protocol_1.ExecuteCommandRequest.type, (params, cancel) => {
1104 return handler(params, cancel, progress_1.attachWorkDone(connection, params), undefined);
1105 }),
1106 dispose: () => connection.dispose()
1107 };
1108 for (let remote of allRemotes) {
1109 remote.attach(protocolConnection);
1110 }
1111 connection.onRequest(vscode_languageserver_protocol_1.InitializeRequest.type, (params) => {
1112 const processId = params.processId;
1113 if (Is.number(processId) && exitTimer === void 0) {
1114 // We received a parent process id. Set up a timer to periodically check
1115 // if the parent is still alive.
1116 setInterval(() => {
1117 try {
1118 process.kill(processId, 0);
1119 }
1120 catch (ex) {
1121 // Parent process doesn't exist anymore. Exit the server.
1122 process.exit(shutdownReceived ? 0 : 1);
1123 }
1124 }, 3000);
1125 }
1126 if (Is.string(params.trace)) {
1127 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.trace);
1128 }
1129 for (let remote of allRemotes) {
1130 remote.initialize(params.capabilities);
1131 }
1132 if (initializeHandler) {
1133 let result = initializeHandler(params, new vscode_languageserver_protocol_1.CancellationTokenSource().token, progress_1.attachWorkDone(connection, params), undefined);
1134 return asPromise(result).then((value) => {
1135 if (value instanceof vscode_languageserver_protocol_1.ResponseError) {
1136 return value;
1137 }
1138 let result = value;
1139 if (!result) {
1140 result = { capabilities: {} };
1141 }
1142 let capabilities = result.capabilities;
1143 if (!capabilities) {
1144 capabilities = {};
1145 result.capabilities = capabilities;
1146 }
1147 if (capabilities.textDocumentSync === void 0 || capabilities.textDocumentSync === null) {
1148 capabilities.textDocumentSync = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1149 }
1150 else if (!Is.number(capabilities.textDocumentSync) && !Is.number(capabilities.textDocumentSync.change)) {
1151 capabilities.textDocumentSync.change = Is.number(protocolConnection.__textDocumentSync) ? protocolConnection.__textDocumentSync : vscode_languageserver_protocol_1.TextDocumentSyncKind.None;
1152 }
1153 for (let remote of allRemotes) {
1154 remote.fillServerCapabilities(capabilities);
1155 }
1156 return result;
1157 });
1158 }
1159 else {
1160 let result = { capabilities: { textDocumentSync: vscode_languageserver_protocol_1.TextDocumentSyncKind.None } };
1161 for (let remote of allRemotes) {
1162 remote.fillServerCapabilities(result.capabilities);
1163 }
1164 return result;
1165 }
1166 });
1167 connection.onRequest(vscode_languageserver_protocol_1.ShutdownRequest.type, () => {
1168 shutdownReceived = true;
1169 if (shutdownHandler) {
1170 return shutdownHandler(new vscode_languageserver_protocol_1.CancellationTokenSource().token);
1171 }
1172 else {
1173 return undefined;
1174 }
1175 });
1176 connection.onNotification(vscode_languageserver_protocol_1.ExitNotification.type, () => {
1177 try {
1178 if (exitHandler) {
1179 exitHandler();
1180 }
1181 }
1182 finally {
1183 if (shutdownReceived) {
1184 process.exit(0);
1185 }
1186 else {
1187 process.exit(1);
1188 }
1189 }
1190 });
1191 connection.onNotification(vscode_languageserver_protocol_1.SetTraceNotification.type, (params) => {
1192 tracer.trace = vscode_languageserver_protocol_1.Trace.fromString(params.value);
1193 });
1194 return protocolConnection;
1195}
1196// Export the protocol currently in proposed state.
1197const callHierarchy_proposed_1 = __webpack_require__(42);
1198const st = __webpack_require__(43);
1199var ProposedFeatures;
1200(function (ProposedFeatures) {
1201 ProposedFeatures.all = {
1202 __brand: 'features',
1203 languages: combineLanguagesFeatures(callHierarchy_proposed_1.CallHierarchyFeature, st.SemanticTokensFeature)
1204 };
1205 ProposedFeatures.SemanticTokensBuilder = st.SemanticTokensBuilder;
1206})(ProposedFeatures = exports.ProposedFeatures || (exports.ProposedFeatures = {}));
1207//# sourceMappingURL=main.js.map
1208
1209/***/ }),
1210/* 3 */
1211/***/ (function(module, exports, __webpack_require__) {
1212
1213"use strict";
1214/* --------------------------------------------------------------------------------------------
1215 * Copyright (c) Microsoft Corporation. All rights reserved.
1216 * Licensed under the MIT License. See License.txt in the project root for license information.
1217 * ------------------------------------------------------------------------------------------ */
1218
1219function __export(m) {
1220 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1221}
1222Object.defineProperty(exports, "__esModule", { value: true });
1223const vscode_jsonrpc_1 = __webpack_require__(4);
1224exports.ErrorCodes = vscode_jsonrpc_1.ErrorCodes;
1225exports.ResponseError = vscode_jsonrpc_1.ResponseError;
1226exports.CancellationToken = vscode_jsonrpc_1.CancellationToken;
1227exports.CancellationTokenSource = vscode_jsonrpc_1.CancellationTokenSource;
1228exports.Disposable = vscode_jsonrpc_1.Disposable;
1229exports.Event = vscode_jsonrpc_1.Event;
1230exports.Emitter = vscode_jsonrpc_1.Emitter;
1231exports.Trace = vscode_jsonrpc_1.Trace;
1232exports.TraceFormat = vscode_jsonrpc_1.TraceFormat;
1233exports.SetTraceNotification = vscode_jsonrpc_1.SetTraceNotification;
1234exports.LogTraceNotification = vscode_jsonrpc_1.LogTraceNotification;
1235exports.RequestType = vscode_jsonrpc_1.RequestType;
1236exports.RequestType0 = vscode_jsonrpc_1.RequestType0;
1237exports.NotificationType = vscode_jsonrpc_1.NotificationType;
1238exports.NotificationType0 = vscode_jsonrpc_1.NotificationType0;
1239exports.MessageReader = vscode_jsonrpc_1.MessageReader;
1240exports.MessageWriter = vscode_jsonrpc_1.MessageWriter;
1241exports.ConnectionStrategy = vscode_jsonrpc_1.ConnectionStrategy;
1242exports.StreamMessageReader = vscode_jsonrpc_1.StreamMessageReader;
1243exports.StreamMessageWriter = vscode_jsonrpc_1.StreamMessageWriter;
1244exports.IPCMessageReader = vscode_jsonrpc_1.IPCMessageReader;
1245exports.IPCMessageWriter = vscode_jsonrpc_1.IPCMessageWriter;
1246exports.createClientPipeTransport = vscode_jsonrpc_1.createClientPipeTransport;
1247exports.createServerPipeTransport = vscode_jsonrpc_1.createServerPipeTransport;
1248exports.generateRandomPipeName = vscode_jsonrpc_1.generateRandomPipeName;
1249exports.createClientSocketTransport = vscode_jsonrpc_1.createClientSocketTransport;
1250exports.createServerSocketTransport = vscode_jsonrpc_1.createServerSocketTransport;
1251exports.ProgressType = vscode_jsonrpc_1.ProgressType;
1252__export(__webpack_require__(18));
1253__export(__webpack_require__(19));
1254const callHierarchy = __webpack_require__(31);
1255const st = __webpack_require__(32);
1256var Proposed;
1257(function (Proposed) {
1258 let CallHierarchyPrepareRequest;
1259 (function (CallHierarchyPrepareRequest) {
1260 CallHierarchyPrepareRequest.method = callHierarchy.CallHierarchyPrepareRequest.method;
1261 CallHierarchyPrepareRequest.type = callHierarchy.CallHierarchyPrepareRequest.type;
1262 })(CallHierarchyPrepareRequest = Proposed.CallHierarchyPrepareRequest || (Proposed.CallHierarchyPrepareRequest = {}));
1263 let CallHierarchyIncomingCallsRequest;
1264 (function (CallHierarchyIncomingCallsRequest) {
1265 CallHierarchyIncomingCallsRequest.method = callHierarchy.CallHierarchyIncomingCallsRequest.method;
1266 CallHierarchyIncomingCallsRequest.type = callHierarchy.CallHierarchyIncomingCallsRequest.type;
1267 })(CallHierarchyIncomingCallsRequest = Proposed.CallHierarchyIncomingCallsRequest || (Proposed.CallHierarchyIncomingCallsRequest = {}));
1268 let CallHierarchyOutgoingCallsRequest;
1269 (function (CallHierarchyOutgoingCallsRequest) {
1270 CallHierarchyOutgoingCallsRequest.method = callHierarchy.CallHierarchyOutgoingCallsRequest.method;
1271 CallHierarchyOutgoingCallsRequest.type = callHierarchy.CallHierarchyOutgoingCallsRequest.type;
1272 })(CallHierarchyOutgoingCallsRequest = Proposed.CallHierarchyOutgoingCallsRequest || (Proposed.CallHierarchyOutgoingCallsRequest = {}));
1273 Proposed.SemanticTokenTypes = st.SemanticTokenTypes;
1274 Proposed.SemanticTokenModifiers = st.SemanticTokenModifiers;
1275 Proposed.SemanticTokens = st.SemanticTokens;
1276 let SemanticTokensRequest;
1277 (function (SemanticTokensRequest) {
1278 SemanticTokensRequest.method = st.SemanticTokensRequest.method;
1279 SemanticTokensRequest.type = st.SemanticTokensRequest.type;
1280 })(SemanticTokensRequest = Proposed.SemanticTokensRequest || (Proposed.SemanticTokensRequest = {}));
1281 let SemanticTokensEditsRequest;
1282 (function (SemanticTokensEditsRequest) {
1283 SemanticTokensEditsRequest.method = st.SemanticTokensEditsRequest.method;
1284 SemanticTokensEditsRequest.type = st.SemanticTokensEditsRequest.type;
1285 })(SemanticTokensEditsRequest = Proposed.SemanticTokensEditsRequest || (Proposed.SemanticTokensEditsRequest = {}));
1286 let SemanticTokensRangeRequest;
1287 (function (SemanticTokensRangeRequest) {
1288 SemanticTokensRangeRequest.method = st.SemanticTokensRangeRequest.method;
1289 SemanticTokensRangeRequest.type = st.SemanticTokensRangeRequest.type;
1290 })(SemanticTokensRangeRequest = Proposed.SemanticTokensRangeRequest || (Proposed.SemanticTokensRangeRequest = {}));
1291})(Proposed = exports.Proposed || (exports.Proposed = {}));
1292function createProtocolConnection(reader, writer, logger, strategy) {
1293 return vscode_jsonrpc_1.createMessageConnection(reader, writer, logger, strategy);
1294}
1295exports.createProtocolConnection = createProtocolConnection;
1296
1297
1298/***/ }),
1299/* 4 */
1300/***/ (function(module, exports, __webpack_require__) {
1301
1302"use strict";
1303/* --------------------------------------------------------------------------------------------
1304 * Copyright (c) Microsoft Corporation. All rights reserved.
1305 * Licensed under the MIT License. See License.txt in the project root for license information.
1306 * ------------------------------------------------------------------------------------------ */
1307/// <reference path="../typings/thenable.d.ts" />
1308
1309function __export(m) {
1310 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
1311}
1312Object.defineProperty(exports, "__esModule", { value: true });
1313const Is = __webpack_require__(5);
1314const messages_1 = __webpack_require__(6);
1315exports.RequestType = messages_1.RequestType;
1316exports.RequestType0 = messages_1.RequestType0;
1317exports.RequestType1 = messages_1.RequestType1;
1318exports.RequestType2 = messages_1.RequestType2;
1319exports.RequestType3 = messages_1.RequestType3;
1320exports.RequestType4 = messages_1.RequestType4;
1321exports.RequestType5 = messages_1.RequestType5;
1322exports.RequestType6 = messages_1.RequestType6;
1323exports.RequestType7 = messages_1.RequestType7;
1324exports.RequestType8 = messages_1.RequestType8;
1325exports.RequestType9 = messages_1.RequestType9;
1326exports.ResponseError = messages_1.ResponseError;
1327exports.ErrorCodes = messages_1.ErrorCodes;
1328exports.NotificationType = messages_1.NotificationType;
1329exports.NotificationType0 = messages_1.NotificationType0;
1330exports.NotificationType1 = messages_1.NotificationType1;
1331exports.NotificationType2 = messages_1.NotificationType2;
1332exports.NotificationType3 = messages_1.NotificationType3;
1333exports.NotificationType4 = messages_1.NotificationType4;
1334exports.NotificationType5 = messages_1.NotificationType5;
1335exports.NotificationType6 = messages_1.NotificationType6;
1336exports.NotificationType7 = messages_1.NotificationType7;
1337exports.NotificationType8 = messages_1.NotificationType8;
1338exports.NotificationType9 = messages_1.NotificationType9;
1339const messageReader_1 = __webpack_require__(7);
1340exports.MessageReader = messageReader_1.MessageReader;
1341exports.StreamMessageReader = messageReader_1.StreamMessageReader;
1342exports.IPCMessageReader = messageReader_1.IPCMessageReader;
1343exports.SocketMessageReader = messageReader_1.SocketMessageReader;
1344const messageWriter_1 = __webpack_require__(9);
1345exports.MessageWriter = messageWriter_1.MessageWriter;
1346exports.StreamMessageWriter = messageWriter_1.StreamMessageWriter;
1347exports.IPCMessageWriter = messageWriter_1.IPCMessageWriter;
1348exports.SocketMessageWriter = messageWriter_1.SocketMessageWriter;
1349const events_1 = __webpack_require__(8);
1350exports.Disposable = events_1.Disposable;
1351exports.Event = events_1.Event;
1352exports.Emitter = events_1.Emitter;
1353const cancellation_1 = __webpack_require__(10);
1354exports.CancellationTokenSource = cancellation_1.CancellationTokenSource;
1355exports.CancellationToken = cancellation_1.CancellationToken;
1356const linkedMap_1 = __webpack_require__(11);
1357__export(__webpack_require__(12));
1358__export(__webpack_require__(17));
1359var CancelNotification;
1360(function (CancelNotification) {
1361 CancelNotification.type = new messages_1.NotificationType('$/cancelRequest');
1362})(CancelNotification || (CancelNotification = {}));
1363var ProgressNotification;
1364(function (ProgressNotification) {
1365 ProgressNotification.type = new messages_1.NotificationType('$/progress');
1366})(ProgressNotification || (ProgressNotification = {}));
1367class ProgressType {
1368 constructor() {
1369 }
1370}
1371exports.ProgressType = ProgressType;
1372exports.NullLogger = Object.freeze({
1373 error: () => { },
1374 warn: () => { },
1375 info: () => { },
1376 log: () => { }
1377});
1378var Trace;
1379(function (Trace) {
1380 Trace[Trace["Off"] = 0] = "Off";
1381 Trace[Trace["Messages"] = 1] = "Messages";
1382 Trace[Trace["Verbose"] = 2] = "Verbose";
1383})(Trace = exports.Trace || (exports.Trace = {}));
1384(function (Trace) {
1385 function fromString(value) {
1386 if (!Is.string(value)) {
1387 return Trace.Off;
1388 }
1389 value = value.toLowerCase();
1390 switch (value) {
1391 case 'off':
1392 return Trace.Off;
1393 case 'messages':
1394 return Trace.Messages;
1395 case 'verbose':
1396 return Trace.Verbose;
1397 default:
1398 return Trace.Off;
1399 }
1400 }
1401 Trace.fromString = fromString;
1402 function toString(value) {
1403 switch (value) {
1404 case Trace.Off:
1405 return 'off';
1406 case Trace.Messages:
1407 return 'messages';
1408 case Trace.Verbose:
1409 return 'verbose';
1410 default:
1411 return 'off';
1412 }
1413 }
1414 Trace.toString = toString;
1415})(Trace = exports.Trace || (exports.Trace = {}));
1416var TraceFormat;
1417(function (TraceFormat) {
1418 TraceFormat["Text"] = "text";
1419 TraceFormat["JSON"] = "json";
1420})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1421(function (TraceFormat) {
1422 function fromString(value) {
1423 value = value.toLowerCase();
1424 if (value === 'json') {
1425 return TraceFormat.JSON;
1426 }
1427 else {
1428 return TraceFormat.Text;
1429 }
1430 }
1431 TraceFormat.fromString = fromString;
1432})(TraceFormat = exports.TraceFormat || (exports.TraceFormat = {}));
1433var SetTraceNotification;
1434(function (SetTraceNotification) {
1435 SetTraceNotification.type = new messages_1.NotificationType('$/setTraceNotification');
1436})(SetTraceNotification = exports.SetTraceNotification || (exports.SetTraceNotification = {}));
1437var LogTraceNotification;
1438(function (LogTraceNotification) {
1439 LogTraceNotification.type = new messages_1.NotificationType('$/logTraceNotification');
1440})(LogTraceNotification = exports.LogTraceNotification || (exports.LogTraceNotification = {}));
1441var ConnectionErrors;
1442(function (ConnectionErrors) {
1443 /**
1444 * The connection is closed.
1445 */
1446 ConnectionErrors[ConnectionErrors["Closed"] = 1] = "Closed";
1447 /**
1448 * The connection got disposed.
1449 */
1450 ConnectionErrors[ConnectionErrors["Disposed"] = 2] = "Disposed";
1451 /**
1452 * The connection is already in listening mode.
1453 */
1454 ConnectionErrors[ConnectionErrors["AlreadyListening"] = 3] = "AlreadyListening";
1455})(ConnectionErrors = exports.ConnectionErrors || (exports.ConnectionErrors = {}));
1456class ConnectionError extends Error {
1457 constructor(code, message) {
1458 super(message);
1459 this.code = code;
1460 Object.setPrototypeOf(this, ConnectionError.prototype);
1461 }
1462}
1463exports.ConnectionError = ConnectionError;
1464var ConnectionStrategy;
1465(function (ConnectionStrategy) {
1466 function is(value) {
1467 let candidate = value;
1468 return candidate && Is.func(candidate.cancelUndispatched);
1469 }
1470 ConnectionStrategy.is = is;
1471})(ConnectionStrategy = exports.ConnectionStrategy || (exports.ConnectionStrategy = {}));
1472var ConnectionState;
1473(function (ConnectionState) {
1474 ConnectionState[ConnectionState["New"] = 1] = "New";
1475 ConnectionState[ConnectionState["Listening"] = 2] = "Listening";
1476 ConnectionState[ConnectionState["Closed"] = 3] = "Closed";
1477 ConnectionState[ConnectionState["Disposed"] = 4] = "Disposed";
1478})(ConnectionState || (ConnectionState = {}));
1479function _createMessageConnection(messageReader, messageWriter, logger, strategy) {
1480 let sequenceNumber = 0;
1481 let notificationSquenceNumber = 0;
1482 let unknownResponseSquenceNumber = 0;
1483 const version = '2.0';
1484 let starRequestHandler = undefined;
1485 let requestHandlers = Object.create(null);
1486 let starNotificationHandler = undefined;
1487 let notificationHandlers = Object.create(null);
1488 let progressHandlers = new Map();
1489 let timer;
1490 let messageQueue = new linkedMap_1.LinkedMap();
1491 let responsePromises = Object.create(null);
1492 let requestTokens = Object.create(null);
1493 let trace = Trace.Off;
1494 let traceFormat = TraceFormat.Text;
1495 let tracer;
1496 let state = ConnectionState.New;
1497 let errorEmitter = new events_1.Emitter();
1498 let closeEmitter = new events_1.Emitter();
1499 let unhandledNotificationEmitter = new events_1.Emitter();
1500 let unhandledProgressEmitter = new events_1.Emitter();
1501 let disposeEmitter = new events_1.Emitter();
1502 function createRequestQueueKey(id) {
1503 return 'req-' + id.toString();
1504 }
1505 function createResponseQueueKey(id) {
1506 if (id === null) {
1507 return 'res-unknown-' + (++unknownResponseSquenceNumber).toString();
1508 }
1509 else {
1510 return 'res-' + id.toString();
1511 }
1512 }
1513 function createNotificationQueueKey() {
1514 return 'not-' + (++notificationSquenceNumber).toString();
1515 }
1516 function addMessageToQueue(queue, message) {
1517 if (messages_1.isRequestMessage(message)) {
1518 queue.set(createRequestQueueKey(message.id), message);
1519 }
1520 else if (messages_1.isResponseMessage(message)) {
1521 queue.set(createResponseQueueKey(message.id), message);
1522 }
1523 else {
1524 queue.set(createNotificationQueueKey(), message);
1525 }
1526 }
1527 function cancelUndispatched(_message) {
1528 return undefined;
1529 }
1530 function isListening() {
1531 return state === ConnectionState.Listening;
1532 }
1533 function isClosed() {
1534 return state === ConnectionState.Closed;
1535 }
1536 function isDisposed() {
1537 return state === ConnectionState.Disposed;
1538 }
1539 function closeHandler() {
1540 if (state === ConnectionState.New || state === ConnectionState.Listening) {
1541 state = ConnectionState.Closed;
1542 closeEmitter.fire(undefined);
1543 }
1544 // If the connection is disposed don't sent close events.
1545 }
1546 function readErrorHandler(error) {
1547 errorEmitter.fire([error, undefined, undefined]);
1548 }
1549 function writeErrorHandler(data) {
1550 errorEmitter.fire(data);
1551 }
1552 messageReader.onClose(closeHandler);
1553 messageReader.onError(readErrorHandler);
1554 messageWriter.onClose(closeHandler);
1555 messageWriter.onError(writeErrorHandler);
1556 function triggerMessageQueue() {
1557 if (timer || messageQueue.size === 0) {
1558 return;
1559 }
1560 timer = setImmediate(() => {
1561 timer = undefined;
1562 processMessageQueue();
1563 });
1564 }
1565 function processMessageQueue() {
1566 if (messageQueue.size === 0) {
1567 return;
1568 }
1569 let message = messageQueue.shift();
1570 try {
1571 if (messages_1.isRequestMessage(message)) {
1572 handleRequest(message);
1573 }
1574 else if (messages_1.isNotificationMessage(message)) {
1575 handleNotification(message);
1576 }
1577 else if (messages_1.isResponseMessage(message)) {
1578 handleResponse(message);
1579 }
1580 else {
1581 handleInvalidMessage(message);
1582 }
1583 }
1584 finally {
1585 triggerMessageQueue();
1586 }
1587 }
1588 let callback = (message) => {
1589 try {
1590 // We have received a cancellation message. Check if the message is still in the queue
1591 // and cancel it if allowed to do so.
1592 if (messages_1.isNotificationMessage(message) && message.method === CancelNotification.type.method) {
1593 let key = createRequestQueueKey(message.params.id);
1594 let toCancel = messageQueue.get(key);
1595 if (messages_1.isRequestMessage(toCancel)) {
1596 let response = strategy && strategy.cancelUndispatched ? strategy.cancelUndispatched(toCancel, cancelUndispatched) : cancelUndispatched(toCancel);
1597 if (response && (response.error !== void 0 || response.result !== void 0)) {
1598 messageQueue.delete(key);
1599 response.id = toCancel.id;
1600 traceSendingResponse(response, message.method, Date.now());
1601 messageWriter.write(response);
1602 return;
1603 }
1604 }
1605 }
1606 addMessageToQueue(messageQueue, message);
1607 }
1608 finally {
1609 triggerMessageQueue();
1610 }
1611 };
1612 function handleRequest(requestMessage) {
1613 if (isDisposed()) {
1614 // we return here silently since we fired an event when the
1615 // connection got disposed.
1616 return;
1617 }
1618 function reply(resultOrError, method, startTime) {
1619 let message = {
1620 jsonrpc: version,
1621 id: requestMessage.id
1622 };
1623 if (resultOrError instanceof messages_1.ResponseError) {
1624 message.error = resultOrError.toJson();
1625 }
1626 else {
1627 message.result = resultOrError === void 0 ? null : resultOrError;
1628 }
1629 traceSendingResponse(message, method, startTime);
1630 messageWriter.write(message);
1631 }
1632 function replyError(error, method, startTime) {
1633 let message = {
1634 jsonrpc: version,
1635 id: requestMessage.id,
1636 error: error.toJson()
1637 };
1638 traceSendingResponse(message, method, startTime);
1639 messageWriter.write(message);
1640 }
1641 function replySuccess(result, method, startTime) {
1642 // The JSON RPC defines that a response must either have a result or an error
1643 // So we can't treat undefined as a valid response result.
1644 if (result === void 0) {
1645 result = null;
1646 }
1647 let message = {
1648 jsonrpc: version,
1649 id: requestMessage.id,
1650 result: result
1651 };
1652 traceSendingResponse(message, method, startTime);
1653 messageWriter.write(message);
1654 }
1655 traceReceivedRequest(requestMessage);
1656 let element = requestHandlers[requestMessage.method];
1657 let type;
1658 let requestHandler;
1659 if (element) {
1660 type = element.type;
1661 requestHandler = element.handler;
1662 }
1663 let startTime = Date.now();
1664 if (requestHandler || starRequestHandler) {
1665 let cancellationSource = new cancellation_1.CancellationTokenSource();
1666 let tokenKey = String(requestMessage.id);
1667 requestTokens[tokenKey] = cancellationSource;
1668 try {
1669 let handlerResult;
1670 if (requestMessage.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1671 handlerResult = requestHandler
1672 ? requestHandler(cancellationSource.token)
1673 : starRequestHandler(requestMessage.method, cancellationSource.token);
1674 }
1675 else if (Is.array(requestMessage.params) && (type === void 0 || type.numberOfParams > 1)) {
1676 handlerResult = requestHandler
1677 ? requestHandler(...requestMessage.params, cancellationSource.token)
1678 : starRequestHandler(requestMessage.method, ...requestMessage.params, cancellationSource.token);
1679 }
1680 else {
1681 handlerResult = requestHandler
1682 ? requestHandler(requestMessage.params, cancellationSource.token)
1683 : starRequestHandler(requestMessage.method, requestMessage.params, cancellationSource.token);
1684 }
1685 let promise = handlerResult;
1686 if (!handlerResult) {
1687 delete requestTokens[tokenKey];
1688 replySuccess(handlerResult, requestMessage.method, startTime);
1689 }
1690 else if (promise.then) {
1691 promise.then((resultOrError) => {
1692 delete requestTokens[tokenKey];
1693 reply(resultOrError, requestMessage.method, startTime);
1694 }, error => {
1695 delete requestTokens[tokenKey];
1696 if (error instanceof messages_1.ResponseError) {
1697 replyError(error, requestMessage.method, startTime);
1698 }
1699 else if (error && Is.string(error.message)) {
1700 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1701 }
1702 else {
1703 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1704 }
1705 });
1706 }
1707 else {
1708 delete requestTokens[tokenKey];
1709 reply(handlerResult, requestMessage.method, startTime);
1710 }
1711 }
1712 catch (error) {
1713 delete requestTokens[tokenKey];
1714 if (error instanceof messages_1.ResponseError) {
1715 reply(error, requestMessage.method, startTime);
1716 }
1717 else if (error && Is.string(error.message)) {
1718 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed with message: ${error.message}`), requestMessage.method, startTime);
1719 }
1720 else {
1721 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.InternalError, `Request ${requestMessage.method} failed unexpectedly without providing any details.`), requestMessage.method, startTime);
1722 }
1723 }
1724 }
1725 else {
1726 replyError(new messages_1.ResponseError(messages_1.ErrorCodes.MethodNotFound, `Unhandled method ${requestMessage.method}`), requestMessage.method, startTime);
1727 }
1728 }
1729 function handleResponse(responseMessage) {
1730 if (isDisposed()) {
1731 // See handle request.
1732 return;
1733 }
1734 if (responseMessage.id === null) {
1735 if (responseMessage.error) {
1736 logger.error(`Received response message without id: Error is: \n${JSON.stringify(responseMessage.error, undefined, 4)}`);
1737 }
1738 else {
1739 logger.error(`Received response message without id. No further error information provided.`);
1740 }
1741 }
1742 else {
1743 let key = String(responseMessage.id);
1744 let responsePromise = responsePromises[key];
1745 traceReceivedResponse(responseMessage, responsePromise);
1746 if (responsePromise) {
1747 delete responsePromises[key];
1748 try {
1749 if (responseMessage.error) {
1750 let error = responseMessage.error;
1751 responsePromise.reject(new messages_1.ResponseError(error.code, error.message, error.data));
1752 }
1753 else if (responseMessage.result !== void 0) {
1754 responsePromise.resolve(responseMessage.result);
1755 }
1756 else {
1757 throw new Error('Should never happen.');
1758 }
1759 }
1760 catch (error) {
1761 if (error.message) {
1762 logger.error(`Response handler '${responsePromise.method}' failed with message: ${error.message}`);
1763 }
1764 else {
1765 logger.error(`Response handler '${responsePromise.method}' failed unexpectedly.`);
1766 }
1767 }
1768 }
1769 }
1770 }
1771 function handleNotification(message) {
1772 if (isDisposed()) {
1773 // See handle request.
1774 return;
1775 }
1776 let type = undefined;
1777 let notificationHandler;
1778 if (message.method === CancelNotification.type.method) {
1779 notificationHandler = (params) => {
1780 let id = params.id;
1781 let source = requestTokens[String(id)];
1782 if (source) {
1783 source.cancel();
1784 }
1785 };
1786 }
1787 else {
1788 let element = notificationHandlers[message.method];
1789 if (element) {
1790 notificationHandler = element.handler;
1791 type = element.type;
1792 }
1793 }
1794 if (notificationHandler || starNotificationHandler) {
1795 try {
1796 traceReceivedNotification(message);
1797 if (message.params === void 0 || (type !== void 0 && type.numberOfParams === 0)) {
1798 notificationHandler ? notificationHandler() : starNotificationHandler(message.method);
1799 }
1800 else if (Is.array(message.params) && (type === void 0 || type.numberOfParams > 1)) {
1801 notificationHandler ? notificationHandler(...message.params) : starNotificationHandler(message.method, ...message.params);
1802 }
1803 else {
1804 notificationHandler ? notificationHandler(message.params) : starNotificationHandler(message.method, message.params);
1805 }
1806 }
1807 catch (error) {
1808 if (error.message) {
1809 logger.error(`Notification handler '${message.method}' failed with message: ${error.message}`);
1810 }
1811 else {
1812 logger.error(`Notification handler '${message.method}' failed unexpectedly.`);
1813 }
1814 }
1815 }
1816 else {
1817 unhandledNotificationEmitter.fire(message);
1818 }
1819 }
1820 function handleInvalidMessage(message) {
1821 if (!message) {
1822 logger.error('Received empty message.');
1823 return;
1824 }
1825 logger.error(`Received message which is neither a response nor a notification message:\n${JSON.stringify(message, null, 4)}`);
1826 // Test whether we find an id to reject the promise
1827 let responseMessage = message;
1828 if (Is.string(responseMessage.id) || Is.number(responseMessage.id)) {
1829 let key = String(responseMessage.id);
1830 let responseHandler = responsePromises[key];
1831 if (responseHandler) {
1832 responseHandler.reject(new Error('The received response has neither a result nor an error property.'));
1833 }
1834 }
1835 }
1836 function traceSendingRequest(message) {
1837 if (trace === Trace.Off || !tracer) {
1838 return;
1839 }
1840 if (traceFormat === TraceFormat.Text) {
1841 let data = undefined;
1842 if (trace === Trace.Verbose && message.params) {
1843 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1844 }
1845 tracer.log(`Sending request '${message.method} - (${message.id})'.`, data);
1846 }
1847 else {
1848 logLSPMessage('send-request', message);
1849 }
1850 }
1851 function traceSendingNotification(message) {
1852 if (trace === Trace.Off || !tracer) {
1853 return;
1854 }
1855 if (traceFormat === TraceFormat.Text) {
1856 let data = undefined;
1857 if (trace === Trace.Verbose) {
1858 if (message.params) {
1859 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1860 }
1861 else {
1862 data = 'No parameters provided.\n\n';
1863 }
1864 }
1865 tracer.log(`Sending notification '${message.method}'.`, data);
1866 }
1867 else {
1868 logLSPMessage('send-notification', message);
1869 }
1870 }
1871 function traceSendingResponse(message, method, startTime) {
1872 if (trace === Trace.Off || !tracer) {
1873 return;
1874 }
1875 if (traceFormat === TraceFormat.Text) {
1876 let data = undefined;
1877 if (trace === Trace.Verbose) {
1878 if (message.error && message.error.data) {
1879 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1880 }
1881 else {
1882 if (message.result) {
1883 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1884 }
1885 else if (message.error === void 0) {
1886 data = 'No result returned.\n\n';
1887 }
1888 }
1889 }
1890 tracer.log(`Sending response '${method} - (${message.id})'. Processing request took ${Date.now() - startTime}ms`, data);
1891 }
1892 else {
1893 logLSPMessage('send-response', message);
1894 }
1895 }
1896 function traceReceivedRequest(message) {
1897 if (trace === Trace.Off || !tracer) {
1898 return;
1899 }
1900 if (traceFormat === TraceFormat.Text) {
1901 let data = undefined;
1902 if (trace === Trace.Verbose && message.params) {
1903 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1904 }
1905 tracer.log(`Received request '${message.method} - (${message.id})'.`, data);
1906 }
1907 else {
1908 logLSPMessage('receive-request', message);
1909 }
1910 }
1911 function traceReceivedNotification(message) {
1912 if (trace === Trace.Off || !tracer || message.method === LogTraceNotification.type.method) {
1913 return;
1914 }
1915 if (traceFormat === TraceFormat.Text) {
1916 let data = undefined;
1917 if (trace === Trace.Verbose) {
1918 if (message.params) {
1919 data = `Params: ${JSON.stringify(message.params, null, 4)}\n\n`;
1920 }
1921 else {
1922 data = 'No parameters provided.\n\n';
1923 }
1924 }
1925 tracer.log(`Received notification '${message.method}'.`, data);
1926 }
1927 else {
1928 logLSPMessage('receive-notification', message);
1929 }
1930 }
1931 function traceReceivedResponse(message, responsePromise) {
1932 if (trace === Trace.Off || !tracer) {
1933 return;
1934 }
1935 if (traceFormat === TraceFormat.Text) {
1936 let data = undefined;
1937 if (trace === Trace.Verbose) {
1938 if (message.error && message.error.data) {
1939 data = `Error data: ${JSON.stringify(message.error.data, null, 4)}\n\n`;
1940 }
1941 else {
1942 if (message.result) {
1943 data = `Result: ${JSON.stringify(message.result, null, 4)}\n\n`;
1944 }
1945 else if (message.error === void 0) {
1946 data = 'No result returned.\n\n';
1947 }
1948 }
1949 }
1950 if (responsePromise) {
1951 let error = message.error ? ` Request failed: ${message.error.message} (${message.error.code}).` : '';
1952 tracer.log(`Received response '${responsePromise.method} - (${message.id})' in ${Date.now() - responsePromise.timerStart}ms.${error}`, data);
1953 }
1954 else {
1955 tracer.log(`Received response ${message.id} without active response promise.`, data);
1956 }
1957 }
1958 else {
1959 logLSPMessage('receive-response', message);
1960 }
1961 }
1962 function logLSPMessage(type, message) {
1963 if (!tracer || trace === Trace.Off) {
1964 return;
1965 }
1966 const lspMessage = {
1967 isLSPMessage: true,
1968 type,
1969 message,
1970 timestamp: Date.now()
1971 };
1972 tracer.log(lspMessage);
1973 }
1974 function throwIfClosedOrDisposed() {
1975 if (isClosed()) {
1976 throw new ConnectionError(ConnectionErrors.Closed, 'Connection is closed.');
1977 }
1978 if (isDisposed()) {
1979 throw new ConnectionError(ConnectionErrors.Disposed, 'Connection is disposed.');
1980 }
1981 }
1982 function throwIfListening() {
1983 if (isListening()) {
1984 throw new ConnectionError(ConnectionErrors.AlreadyListening, 'Connection is already listening');
1985 }
1986 }
1987 function throwIfNotListening() {
1988 if (!isListening()) {
1989 throw new Error('Call listen() first.');
1990 }
1991 }
1992 function undefinedToNull(param) {
1993 if (param === void 0) {
1994 return null;
1995 }
1996 else {
1997 return param;
1998 }
1999 }
2000 function computeMessageParams(type, params) {
2001 let result;
2002 let numberOfParams = type.numberOfParams;
2003 switch (numberOfParams) {
2004 case 0:
2005 result = null;
2006 break;
2007 case 1:
2008 result = undefinedToNull(params[0]);
2009 break;
2010 default:
2011 result = [];
2012 for (let i = 0; i < params.length && i < numberOfParams; i++) {
2013 result.push(undefinedToNull(params[i]));
2014 }
2015 if (params.length < numberOfParams) {
2016 for (let i = params.length; i < numberOfParams; i++) {
2017 result.push(null);
2018 }
2019 }
2020 break;
2021 }
2022 return result;
2023 }
2024 let connection = {
2025 sendNotification: (type, ...params) => {
2026 throwIfClosedOrDisposed();
2027 let method;
2028 let messageParams;
2029 if (Is.string(type)) {
2030 method = type;
2031 switch (params.length) {
2032 case 0:
2033 messageParams = null;
2034 break;
2035 case 1:
2036 messageParams = params[0];
2037 break;
2038 default:
2039 messageParams = params;
2040 break;
2041 }
2042 }
2043 else {
2044 method = type.method;
2045 messageParams = computeMessageParams(type, params);
2046 }
2047 let notificationMessage = {
2048 jsonrpc: version,
2049 method: method,
2050 params: messageParams
2051 };
2052 traceSendingNotification(notificationMessage);
2053 messageWriter.write(notificationMessage);
2054 },
2055 onNotification: (type, handler) => {
2056 throwIfClosedOrDisposed();
2057 if (Is.func(type)) {
2058 starNotificationHandler = type;
2059 }
2060 else if (handler) {
2061 if (Is.string(type)) {
2062 notificationHandlers[type] = { type: undefined, handler };
2063 }
2064 else {
2065 notificationHandlers[type.method] = { type, handler };
2066 }
2067 }
2068 },
2069 onProgress: (_type, token, handler) => {
2070 if (progressHandlers.has(token)) {
2071 throw new Error(`Progress handler for token ${token} already registered`);
2072 }
2073 progressHandlers.set(token, handler);
2074 return {
2075 dispose: () => {
2076 progressHandlers.delete(token);
2077 }
2078 };
2079 },
2080 sendProgress: (_type, token, value) => {
2081 connection.sendNotification(ProgressNotification.type, { token, value });
2082 },
2083 onUnhandledProgress: unhandledProgressEmitter.event,
2084 sendRequest: (type, ...params) => {
2085 throwIfClosedOrDisposed();
2086 throwIfNotListening();
2087 let method;
2088 let messageParams;
2089 let token = undefined;
2090 if (Is.string(type)) {
2091 method = type;
2092 switch (params.length) {
2093 case 0:
2094 messageParams = null;
2095 break;
2096 case 1:
2097 // The cancellation token is optional so it can also be undefined.
2098 if (cancellation_1.CancellationToken.is(params[0])) {
2099 messageParams = null;
2100 token = params[0];
2101 }
2102 else {
2103 messageParams = undefinedToNull(params[0]);
2104 }
2105 break;
2106 default:
2107 const last = params.length - 1;
2108 if (cancellation_1.CancellationToken.is(params[last])) {
2109 token = params[last];
2110 if (params.length === 2) {
2111 messageParams = undefinedToNull(params[0]);
2112 }
2113 else {
2114 messageParams = params.slice(0, last).map(value => undefinedToNull(value));
2115 }
2116 }
2117 else {
2118 messageParams = params.map(value => undefinedToNull(value));
2119 }
2120 break;
2121 }
2122 }
2123 else {
2124 method = type.method;
2125 messageParams = computeMessageParams(type, params);
2126 let numberOfParams = type.numberOfParams;
2127 token = cancellation_1.CancellationToken.is(params[numberOfParams]) ? params[numberOfParams] : undefined;
2128 }
2129 let id = sequenceNumber++;
2130 let result = new Promise((resolve, reject) => {
2131 let requestMessage = {
2132 jsonrpc: version,
2133 id: id,
2134 method: method,
2135 params: messageParams
2136 };
2137 let responsePromise = { method: method, timerStart: Date.now(), resolve, reject };
2138 traceSendingRequest(requestMessage);
2139 try {
2140 messageWriter.write(requestMessage);
2141 }
2142 catch (e) {
2143 // Writing the message failed. So we need to reject the promise.
2144 responsePromise.reject(new messages_1.ResponseError(messages_1.ErrorCodes.MessageWriteError, e.message ? e.message : 'Unknown reason'));
2145 responsePromise = null;
2146 }
2147 if (responsePromise) {
2148 responsePromises[String(id)] = responsePromise;
2149 }
2150 });
2151 if (token) {
2152 token.onCancellationRequested(() => {
2153 connection.sendNotification(CancelNotification.type, { id });
2154 });
2155 }
2156 return result;
2157 },
2158 onRequest: (type, handler) => {
2159 throwIfClosedOrDisposed();
2160 if (Is.func(type)) {
2161 starRequestHandler = type;
2162 }
2163 else if (handler) {
2164 if (Is.string(type)) {
2165 requestHandlers[type] = { type: undefined, handler };
2166 }
2167 else {
2168 requestHandlers[type.method] = { type, handler };
2169 }
2170 }
2171 },
2172 trace: (_value, _tracer, sendNotificationOrTraceOptions) => {
2173 let _sendNotification = false;
2174 let _traceFormat = TraceFormat.Text;
2175 if (sendNotificationOrTraceOptions !== void 0) {
2176 if (Is.boolean(sendNotificationOrTraceOptions)) {
2177 _sendNotification = sendNotificationOrTraceOptions;
2178 }
2179 else {
2180 _sendNotification = sendNotificationOrTraceOptions.sendNotification || false;
2181 _traceFormat = sendNotificationOrTraceOptions.traceFormat || TraceFormat.Text;
2182 }
2183 }
2184 trace = _value;
2185 traceFormat = _traceFormat;
2186 if (trace === Trace.Off) {
2187 tracer = undefined;
2188 }
2189 else {
2190 tracer = _tracer;
2191 }
2192 if (_sendNotification && !isClosed() && !isDisposed()) {
2193 connection.sendNotification(SetTraceNotification.type, { value: Trace.toString(_value) });
2194 }
2195 },
2196 onError: errorEmitter.event,
2197 onClose: closeEmitter.event,
2198 onUnhandledNotification: unhandledNotificationEmitter.event,
2199 onDispose: disposeEmitter.event,
2200 dispose: () => {
2201 if (isDisposed()) {
2202 return;
2203 }
2204 state = ConnectionState.Disposed;
2205 disposeEmitter.fire(undefined);
2206 let error = new Error('Connection got disposed.');
2207 Object.keys(responsePromises).forEach((key) => {
2208 responsePromises[key].reject(error);
2209 });
2210 responsePromises = Object.create(null);
2211 requestTokens = Object.create(null);
2212 messageQueue = new linkedMap_1.LinkedMap();
2213 // Test for backwards compatibility
2214 if (Is.func(messageWriter.dispose)) {
2215 messageWriter.dispose();
2216 }
2217 if (Is.func(messageReader.dispose)) {
2218 messageReader.dispose();
2219 }
2220 },
2221 listen: () => {
2222 throwIfClosedOrDisposed();
2223 throwIfListening();
2224 state = ConnectionState.Listening;
2225 messageReader.listen(callback);
2226 },
2227 inspect: () => {
2228 // eslint-disable-next-line no-console
2229 console.log('inspect');
2230 }
2231 };
2232 connection.onNotification(LogTraceNotification.type, (params) => {
2233 if (trace === Trace.Off || !tracer) {
2234 return;
2235 }
2236 tracer.log(params.message, trace === Trace.Verbose ? params.verbose : undefined);
2237 });
2238 connection.onNotification(ProgressNotification.type, (params) => {
2239 const handler = progressHandlers.get(params.token);
2240 if (handler) {
2241 handler(params.value);
2242 }
2243 else {
2244 unhandledProgressEmitter.fire(params);
2245 }
2246 });
2247 return connection;
2248}
2249function isMessageReader(value) {
2250 return value.listen !== void 0 && value.read === void 0;
2251}
2252function isMessageWriter(value) {
2253 return value.write !== void 0 && value.end === void 0;
2254}
2255function createMessageConnection(input, output, logger, strategy) {
2256 if (!logger) {
2257 logger = exports.NullLogger;
2258 }
2259 let reader = isMessageReader(input) ? input : new messageReader_1.StreamMessageReader(input);
2260 let writer = isMessageWriter(output) ? output : new messageWriter_1.StreamMessageWriter(output);
2261 return _createMessageConnection(reader, writer, logger, strategy);
2262}
2263exports.createMessageConnection = createMessageConnection;
2264
2265
2266/***/ }),
2267/* 5 */
2268/***/ (function(module, exports, __webpack_require__) {
2269
2270"use strict";
2271/* --------------------------------------------------------------------------------------------
2272 * Copyright (c) Microsoft Corporation. All rights reserved.
2273 * Licensed under the MIT License. See License.txt in the project root for license information.
2274 * ------------------------------------------------------------------------------------------ */
2275
2276Object.defineProperty(exports, "__esModule", { value: true });
2277function boolean(value) {
2278 return value === true || value === false;
2279}
2280exports.boolean = boolean;
2281function string(value) {
2282 return typeof value === 'string' || value instanceof String;
2283}
2284exports.string = string;
2285function number(value) {
2286 return typeof value === 'number' || value instanceof Number;
2287}
2288exports.number = number;
2289function error(value) {
2290 return value instanceof Error;
2291}
2292exports.error = error;
2293function func(value) {
2294 return typeof value === 'function';
2295}
2296exports.func = func;
2297function array(value) {
2298 return Array.isArray(value);
2299}
2300exports.array = array;
2301function stringArray(value) {
2302 return array(value) && value.every(elem => string(elem));
2303}
2304exports.stringArray = stringArray;
2305
2306
2307/***/ }),
2308/* 6 */
2309/***/ (function(module, exports, __webpack_require__) {
2310
2311"use strict";
2312/* --------------------------------------------------------------------------------------------
2313 * Copyright (c) Microsoft Corporation. All rights reserved.
2314 * Licensed under the MIT License. See License.txt in the project root for license information.
2315 * ------------------------------------------------------------------------------------------ */
2316
2317Object.defineProperty(exports, "__esModule", { value: true });
2318const is = __webpack_require__(5);
2319/**
2320 * Predefined error codes.
2321 */
2322var ErrorCodes;
2323(function (ErrorCodes) {
2324 // Defined by JSON RPC
2325 ErrorCodes.ParseError = -32700;
2326 ErrorCodes.InvalidRequest = -32600;
2327 ErrorCodes.MethodNotFound = -32601;
2328 ErrorCodes.InvalidParams = -32602;
2329 ErrorCodes.InternalError = -32603;
2330 ErrorCodes.serverErrorStart = -32099;
2331 ErrorCodes.serverErrorEnd = -32000;
2332 ErrorCodes.ServerNotInitialized = -32002;
2333 ErrorCodes.UnknownErrorCode = -32001;
2334 // Defined by the protocol.
2335 ErrorCodes.RequestCancelled = -32800;
2336 ErrorCodes.ContentModified = -32801;
2337 // Defined by VSCode library.
2338 ErrorCodes.MessageWriteError = 1;
2339 ErrorCodes.MessageReadError = 2;
2340})(ErrorCodes = exports.ErrorCodes || (exports.ErrorCodes = {}));
2341/**
2342 * An error object return in a response in case a request
2343 * has failed.
2344 */
2345class ResponseError extends Error {
2346 constructor(code, message, data) {
2347 super(message);
2348 this.code = is.number(code) ? code : ErrorCodes.UnknownErrorCode;
2349 this.data = data;
2350 Object.setPrototypeOf(this, ResponseError.prototype);
2351 }
2352 toJson() {
2353 return {
2354 code: this.code,
2355 message: this.message,
2356 data: this.data,
2357 };
2358 }
2359}
2360exports.ResponseError = ResponseError;
2361/**
2362 * An abstract implementation of a MessageType.
2363 */
2364class AbstractMessageType {
2365 constructor(_method, _numberOfParams) {
2366 this._method = _method;
2367 this._numberOfParams = _numberOfParams;
2368 }
2369 get method() {
2370 return this._method;
2371 }
2372 get numberOfParams() {
2373 return this._numberOfParams;
2374 }
2375}
2376exports.AbstractMessageType = AbstractMessageType;
2377/**
2378 * Classes to type request response pairs
2379 *
2380 * The type parameter RO will be removed in the next major version
2381 * of the JSON RPC library since it is a LSP concept and doesn't
2382 * belong here. For now it is tagged as default never.
2383 */
2384class RequestType0 extends AbstractMessageType {
2385 constructor(method) {
2386 super(method, 0);
2387 }
2388}
2389exports.RequestType0 = RequestType0;
2390class RequestType extends AbstractMessageType {
2391 constructor(method) {
2392 super(method, 1);
2393 }
2394}
2395exports.RequestType = RequestType;
2396class RequestType1 extends AbstractMessageType {
2397 constructor(method) {
2398 super(method, 1);
2399 }
2400}
2401exports.RequestType1 = RequestType1;
2402class RequestType2 extends AbstractMessageType {
2403 constructor(method) {
2404 super(method, 2);
2405 }
2406}
2407exports.RequestType2 = RequestType2;
2408class RequestType3 extends AbstractMessageType {
2409 constructor(method) {
2410 super(method, 3);
2411 }
2412}
2413exports.RequestType3 = RequestType3;
2414class RequestType4 extends AbstractMessageType {
2415 constructor(method) {
2416 super(method, 4);
2417 }
2418}
2419exports.RequestType4 = RequestType4;
2420class RequestType5 extends AbstractMessageType {
2421 constructor(method) {
2422 super(method, 5);
2423 }
2424}
2425exports.RequestType5 = RequestType5;
2426class RequestType6 extends AbstractMessageType {
2427 constructor(method) {
2428 super(method, 6);
2429 }
2430}
2431exports.RequestType6 = RequestType6;
2432class RequestType7 extends AbstractMessageType {
2433 constructor(method) {
2434 super(method, 7);
2435 }
2436}
2437exports.RequestType7 = RequestType7;
2438class RequestType8 extends AbstractMessageType {
2439 constructor(method) {
2440 super(method, 8);
2441 }
2442}
2443exports.RequestType8 = RequestType8;
2444class RequestType9 extends AbstractMessageType {
2445 constructor(method) {
2446 super(method, 9);
2447 }
2448}
2449exports.RequestType9 = RequestType9;
2450/**
2451 * The type parameter RO will be removed in the next major version
2452 * of the JSON RPC library since it is a LSP concept and doesn't
2453 * belong here. For now it is tagged as default never.
2454 */
2455class NotificationType extends AbstractMessageType {
2456 constructor(method) {
2457 super(method, 1);
2458 this._ = undefined;
2459 }
2460}
2461exports.NotificationType = NotificationType;
2462class NotificationType0 extends AbstractMessageType {
2463 constructor(method) {
2464 super(method, 0);
2465 }
2466}
2467exports.NotificationType0 = NotificationType0;
2468class NotificationType1 extends AbstractMessageType {
2469 constructor(method) {
2470 super(method, 1);
2471 }
2472}
2473exports.NotificationType1 = NotificationType1;
2474class NotificationType2 extends AbstractMessageType {
2475 constructor(method) {
2476 super(method, 2);
2477 }
2478}
2479exports.NotificationType2 = NotificationType2;
2480class NotificationType3 extends AbstractMessageType {
2481 constructor(method) {
2482 super(method, 3);
2483 }
2484}
2485exports.NotificationType3 = NotificationType3;
2486class NotificationType4 extends AbstractMessageType {
2487 constructor(method) {
2488 super(method, 4);
2489 }
2490}
2491exports.NotificationType4 = NotificationType4;
2492class NotificationType5 extends AbstractMessageType {
2493 constructor(method) {
2494 super(method, 5);
2495 }
2496}
2497exports.NotificationType5 = NotificationType5;
2498class NotificationType6 extends AbstractMessageType {
2499 constructor(method) {
2500 super(method, 6);
2501 }
2502}
2503exports.NotificationType6 = NotificationType6;
2504class NotificationType7 extends AbstractMessageType {
2505 constructor(method) {
2506 super(method, 7);
2507 }
2508}
2509exports.NotificationType7 = NotificationType7;
2510class NotificationType8 extends AbstractMessageType {
2511 constructor(method) {
2512 super(method, 8);
2513 }
2514}
2515exports.NotificationType8 = NotificationType8;
2516class NotificationType9 extends AbstractMessageType {
2517 constructor(method) {
2518 super(method, 9);
2519 }
2520}
2521exports.NotificationType9 = NotificationType9;
2522/**
2523 * Tests if the given message is a request message
2524 */
2525function isRequestMessage(message) {
2526 let candidate = message;
2527 return candidate && is.string(candidate.method) && (is.string(candidate.id) || is.number(candidate.id));
2528}
2529exports.isRequestMessage = isRequestMessage;
2530/**
2531 * Tests if the given message is a notification message
2532 */
2533function isNotificationMessage(message) {
2534 let candidate = message;
2535 return candidate && is.string(candidate.method) && message.id === void 0;
2536}
2537exports.isNotificationMessage = isNotificationMessage;
2538/**
2539 * Tests if the given message is a response message
2540 */
2541function isResponseMessage(message) {
2542 let candidate = message;
2543 return candidate && (candidate.result !== void 0 || !!candidate.error) && (is.string(candidate.id) || is.number(candidate.id) || candidate.id === null);
2544}
2545exports.isResponseMessage = isResponseMessage;
2546
2547
2548/***/ }),
2549/* 7 */
2550/***/ (function(module, exports, __webpack_require__) {
2551
2552"use strict";
2553/* --------------------------------------------------------------------------------------------
2554 * Copyright (c) Microsoft Corporation. All rights reserved.
2555 * Licensed under the MIT License. See License.txt in the project root for license information.
2556 * ------------------------------------------------------------------------------------------ */
2557
2558Object.defineProperty(exports, "__esModule", { value: true });
2559const events_1 = __webpack_require__(8);
2560const Is = __webpack_require__(5);
2561let DefaultSize = 8192;
2562let CR = Buffer.from('\r', 'ascii')[0];
2563let LF = Buffer.from('\n', 'ascii')[0];
2564let CRLF = '\r\n';
2565class MessageBuffer {
2566 constructor(encoding = 'utf8') {
2567 this.encoding = encoding;
2568 this.index = 0;
2569 this.buffer = Buffer.allocUnsafe(DefaultSize);
2570 }
2571 append(chunk) {
2572 var toAppend = chunk;
2573 if (typeof (chunk) === 'string') {
2574 var str = chunk;
2575 var bufferLen = Buffer.byteLength(str, this.encoding);
2576 toAppend = Buffer.allocUnsafe(bufferLen);
2577 toAppend.write(str, 0, bufferLen, this.encoding);
2578 }
2579 if (this.buffer.length - this.index >= toAppend.length) {
2580 toAppend.copy(this.buffer, this.index, 0, toAppend.length);
2581 }
2582 else {
2583 var newSize = (Math.ceil((this.index + toAppend.length) / DefaultSize) + 1) * DefaultSize;
2584 if (this.index === 0) {
2585 this.buffer = Buffer.allocUnsafe(newSize);
2586 toAppend.copy(this.buffer, 0, 0, toAppend.length);
2587 }
2588 else {
2589 this.buffer = Buffer.concat([this.buffer.slice(0, this.index), toAppend], newSize);
2590 }
2591 }
2592 this.index += toAppend.length;
2593 }
2594 tryReadHeaders() {
2595 let result = undefined;
2596 let current = 0;
2597 while (current + 3 < this.index && (this.buffer[current] !== CR || this.buffer[current + 1] !== LF || this.buffer[current + 2] !== CR || this.buffer[current + 3] !== LF)) {
2598 current++;
2599 }
2600 // No header / body separator found (e.g CRLFCRLF)
2601 if (current + 3 >= this.index) {
2602 return result;
2603 }
2604 result = Object.create(null);
2605 let headers = this.buffer.toString('ascii', 0, current).split(CRLF);
2606 headers.forEach((header) => {
2607 let index = header.indexOf(':');
2608 if (index === -1) {
2609 throw new Error('Message header must separate key and value using :');
2610 }
2611 let key = header.substr(0, index);
2612 let value = header.substr(index + 1).trim();
2613 result[key] = value;
2614 });
2615 let nextStart = current + 4;
2616 this.buffer = this.buffer.slice(nextStart);
2617 this.index = this.index - nextStart;
2618 return result;
2619 }
2620 tryReadContent(length) {
2621 if (this.index < length) {
2622 return null;
2623 }
2624 let result = this.buffer.toString(this.encoding, 0, length);
2625 let nextStart = length;
2626 this.buffer.copy(this.buffer, 0, nextStart);
2627 this.index = this.index - nextStart;
2628 return result;
2629 }
2630 get numberOfBytes() {
2631 return this.index;
2632 }
2633}
2634var MessageReader;
2635(function (MessageReader) {
2636 function is(value) {
2637 let candidate = value;
2638 return candidate && Is.func(candidate.listen) && Is.func(candidate.dispose) &&
2639 Is.func(candidate.onError) && Is.func(candidate.onClose) && Is.func(candidate.onPartialMessage);
2640 }
2641 MessageReader.is = is;
2642})(MessageReader = exports.MessageReader || (exports.MessageReader = {}));
2643class AbstractMessageReader {
2644 constructor() {
2645 this.errorEmitter = new events_1.Emitter();
2646 this.closeEmitter = new events_1.Emitter();
2647 this.partialMessageEmitter = new events_1.Emitter();
2648 }
2649 dispose() {
2650 this.errorEmitter.dispose();
2651 this.closeEmitter.dispose();
2652 }
2653 get onError() {
2654 return this.errorEmitter.event;
2655 }
2656 fireError(error) {
2657 this.errorEmitter.fire(this.asError(error));
2658 }
2659 get onClose() {
2660 return this.closeEmitter.event;
2661 }
2662 fireClose() {
2663 this.closeEmitter.fire(undefined);
2664 }
2665 get onPartialMessage() {
2666 return this.partialMessageEmitter.event;
2667 }
2668 firePartialMessage(info) {
2669 this.partialMessageEmitter.fire(info);
2670 }
2671 asError(error) {
2672 if (error instanceof Error) {
2673 return error;
2674 }
2675 else {
2676 return new Error(`Reader received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2677 }
2678 }
2679}
2680exports.AbstractMessageReader = AbstractMessageReader;
2681class StreamMessageReader extends AbstractMessageReader {
2682 constructor(readable, encoding = 'utf8') {
2683 super();
2684 this.readable = readable;
2685 this.buffer = new MessageBuffer(encoding);
2686 this._partialMessageTimeout = 10000;
2687 }
2688 set partialMessageTimeout(timeout) {
2689 this._partialMessageTimeout = timeout;
2690 }
2691 get partialMessageTimeout() {
2692 return this._partialMessageTimeout;
2693 }
2694 listen(callback) {
2695 this.nextMessageLength = -1;
2696 this.messageToken = 0;
2697 this.partialMessageTimer = undefined;
2698 this.callback = callback;
2699 this.readable.on('data', (data) => {
2700 this.onData(data);
2701 });
2702 this.readable.on('error', (error) => this.fireError(error));
2703 this.readable.on('close', () => this.fireClose());
2704 }
2705 onData(data) {
2706 this.buffer.append(data);
2707 while (true) {
2708 if (this.nextMessageLength === -1) {
2709 let headers = this.buffer.tryReadHeaders();
2710 if (!headers) {
2711 return;
2712 }
2713 let contentLength = headers['Content-Length'];
2714 if (!contentLength) {
2715 throw new Error('Header must provide a Content-Length property.');
2716 }
2717 let length = parseInt(contentLength);
2718 if (isNaN(length)) {
2719 throw new Error('Content-Length value must be a number.');
2720 }
2721 this.nextMessageLength = length;
2722 // Take the encoding form the header. For compatibility
2723 // treat both utf-8 and utf8 as node utf8
2724 }
2725 var msg = this.buffer.tryReadContent(this.nextMessageLength);
2726 if (msg === null) {
2727 /** We haven't received the full message yet. */
2728 this.setPartialMessageTimer();
2729 return;
2730 }
2731 this.clearPartialMessageTimer();
2732 this.nextMessageLength = -1;
2733 this.messageToken++;
2734 var json = JSON.parse(msg);
2735 this.callback(json);
2736 }
2737 }
2738 clearPartialMessageTimer() {
2739 if (this.partialMessageTimer) {
2740 clearTimeout(this.partialMessageTimer);
2741 this.partialMessageTimer = undefined;
2742 }
2743 }
2744 setPartialMessageTimer() {
2745 this.clearPartialMessageTimer();
2746 if (this._partialMessageTimeout <= 0) {
2747 return;
2748 }
2749 this.partialMessageTimer = setTimeout((token, timeout) => {
2750 this.partialMessageTimer = undefined;
2751 if (token === this.messageToken) {
2752 this.firePartialMessage({ messageToken: token, waitingTime: timeout });
2753 this.setPartialMessageTimer();
2754 }
2755 }, this._partialMessageTimeout, this.messageToken, this._partialMessageTimeout);
2756 }
2757}
2758exports.StreamMessageReader = StreamMessageReader;
2759class IPCMessageReader extends AbstractMessageReader {
2760 constructor(process) {
2761 super();
2762 this.process = process;
2763 let eventEmitter = this.process;
2764 eventEmitter.on('error', (error) => this.fireError(error));
2765 eventEmitter.on('close', () => this.fireClose());
2766 }
2767 listen(callback) {
2768 this.process.on('message', callback);
2769 }
2770}
2771exports.IPCMessageReader = IPCMessageReader;
2772class SocketMessageReader extends StreamMessageReader {
2773 constructor(socket, encoding = 'utf-8') {
2774 super(socket, encoding);
2775 }
2776}
2777exports.SocketMessageReader = SocketMessageReader;
2778
2779
2780/***/ }),
2781/* 8 */
2782/***/ (function(module, exports, __webpack_require__) {
2783
2784"use strict";
2785/* --------------------------------------------------------------------------------------------
2786 * Copyright (c) Microsoft Corporation. All rights reserved.
2787 * Licensed under the MIT License. See License.txt in the project root for license information.
2788 * ------------------------------------------------------------------------------------------ */
2789
2790Object.defineProperty(exports, "__esModule", { value: true });
2791var Disposable;
2792(function (Disposable) {
2793 function create(func) {
2794 return {
2795 dispose: func
2796 };
2797 }
2798 Disposable.create = create;
2799})(Disposable = exports.Disposable || (exports.Disposable = {}));
2800var Event;
2801(function (Event) {
2802 const _disposable = { dispose() { } };
2803 Event.None = function () { return _disposable; };
2804})(Event = exports.Event || (exports.Event = {}));
2805class CallbackList {
2806 add(callback, context = null, bucket) {
2807 if (!this._callbacks) {
2808 this._callbacks = [];
2809 this._contexts = [];
2810 }
2811 this._callbacks.push(callback);
2812 this._contexts.push(context);
2813 if (Array.isArray(bucket)) {
2814 bucket.push({ dispose: () => this.remove(callback, context) });
2815 }
2816 }
2817 remove(callback, context = null) {
2818 if (!this._callbacks) {
2819 return;
2820 }
2821 var foundCallbackWithDifferentContext = false;
2822 for (var i = 0, len = this._callbacks.length; i < len; i++) {
2823 if (this._callbacks[i] === callback) {
2824 if (this._contexts[i] === context) {
2825 // callback & context match => remove it
2826 this._callbacks.splice(i, 1);
2827 this._contexts.splice(i, 1);
2828 return;
2829 }
2830 else {
2831 foundCallbackWithDifferentContext = true;
2832 }
2833 }
2834 }
2835 if (foundCallbackWithDifferentContext) {
2836 throw new Error('When adding a listener with a context, you should remove it with the same context');
2837 }
2838 }
2839 invoke(...args) {
2840 if (!this._callbacks) {
2841 return [];
2842 }
2843 var ret = [], callbacks = this._callbacks.slice(0), contexts = this._contexts.slice(0);
2844 for (var i = 0, len = callbacks.length; i < len; i++) {
2845 try {
2846 ret.push(callbacks[i].apply(contexts[i], args));
2847 }
2848 catch (e) {
2849 // eslint-disable-next-line no-console
2850 console.error(e);
2851 }
2852 }
2853 return ret;
2854 }
2855 isEmpty() {
2856 return !this._callbacks || this._callbacks.length === 0;
2857 }
2858 dispose() {
2859 this._callbacks = undefined;
2860 this._contexts = undefined;
2861 }
2862}
2863class Emitter {
2864 constructor(_options) {
2865 this._options = _options;
2866 }
2867 /**
2868 * For the public to allow to subscribe
2869 * to events from this Emitter
2870 */
2871 get event() {
2872 if (!this._event) {
2873 this._event = (listener, thisArgs, disposables) => {
2874 if (!this._callbacks) {
2875 this._callbacks = new CallbackList();
2876 }
2877 if (this._options && this._options.onFirstListenerAdd && this._callbacks.isEmpty()) {
2878 this._options.onFirstListenerAdd(this);
2879 }
2880 this._callbacks.add(listener, thisArgs);
2881 let result;
2882 result = {
2883 dispose: () => {
2884 this._callbacks.remove(listener, thisArgs);
2885 result.dispose = Emitter._noop;
2886 if (this._options && this._options.onLastListenerRemove && this._callbacks.isEmpty()) {
2887 this._options.onLastListenerRemove(this);
2888 }
2889 }
2890 };
2891 if (Array.isArray(disposables)) {
2892 disposables.push(result);
2893 }
2894 return result;
2895 };
2896 }
2897 return this._event;
2898 }
2899 /**
2900 * To be kept private to fire an event to
2901 * subscribers
2902 */
2903 fire(event) {
2904 if (this._callbacks) {
2905 this._callbacks.invoke.call(this._callbacks, event);
2906 }
2907 }
2908 dispose() {
2909 if (this._callbacks) {
2910 this._callbacks.dispose();
2911 this._callbacks = undefined;
2912 }
2913 }
2914}
2915exports.Emitter = Emitter;
2916Emitter._noop = function () { };
2917
2918
2919/***/ }),
2920/* 9 */
2921/***/ (function(module, exports, __webpack_require__) {
2922
2923"use strict";
2924/* --------------------------------------------------------------------------------------------
2925 * Copyright (c) Microsoft Corporation. All rights reserved.
2926 * Licensed under the MIT License. See License.txt in the project root for license information.
2927 * ------------------------------------------------------------------------------------------ */
2928
2929Object.defineProperty(exports, "__esModule", { value: true });
2930const events_1 = __webpack_require__(8);
2931const Is = __webpack_require__(5);
2932let ContentLength = 'Content-Length: ';
2933let CRLF = '\r\n';
2934var MessageWriter;
2935(function (MessageWriter) {
2936 function is(value) {
2937 let candidate = value;
2938 return candidate && Is.func(candidate.dispose) && Is.func(candidate.onClose) &&
2939 Is.func(candidate.onError) && Is.func(candidate.write);
2940 }
2941 MessageWriter.is = is;
2942})(MessageWriter = exports.MessageWriter || (exports.MessageWriter = {}));
2943class AbstractMessageWriter {
2944 constructor() {
2945 this.errorEmitter = new events_1.Emitter();
2946 this.closeEmitter = new events_1.Emitter();
2947 }
2948 dispose() {
2949 this.errorEmitter.dispose();
2950 this.closeEmitter.dispose();
2951 }
2952 get onError() {
2953 return this.errorEmitter.event;
2954 }
2955 fireError(error, message, count) {
2956 this.errorEmitter.fire([this.asError(error), message, count]);
2957 }
2958 get onClose() {
2959 return this.closeEmitter.event;
2960 }
2961 fireClose() {
2962 this.closeEmitter.fire(undefined);
2963 }
2964 asError(error) {
2965 if (error instanceof Error) {
2966 return error;
2967 }
2968 else {
2969 return new Error(`Writer received error. Reason: ${Is.string(error.message) ? error.message : 'unknown'}`);
2970 }
2971 }
2972}
2973exports.AbstractMessageWriter = AbstractMessageWriter;
2974class StreamMessageWriter extends AbstractMessageWriter {
2975 constructor(writable, encoding = 'utf8') {
2976 super();
2977 this.writable = writable;
2978 this.encoding = encoding;
2979 this.errorCount = 0;
2980 this.writable.on('error', (error) => this.fireError(error));
2981 this.writable.on('close', () => this.fireClose());
2982 }
2983 write(msg) {
2984 let json = JSON.stringify(msg);
2985 let contentLength = Buffer.byteLength(json, this.encoding);
2986 let headers = [
2987 ContentLength, contentLength.toString(), CRLF,
2988 CRLF
2989 ];
2990 try {
2991 // Header must be written in ASCII encoding
2992 this.writable.write(headers.join(''), 'ascii');
2993 // Now write the content. This can be written in any encoding
2994 this.writable.write(json, this.encoding);
2995 this.errorCount = 0;
2996 }
2997 catch (error) {
2998 this.errorCount++;
2999 this.fireError(error, msg, this.errorCount);
3000 }
3001 }
3002}
3003exports.StreamMessageWriter = StreamMessageWriter;
3004class IPCMessageWriter extends AbstractMessageWriter {
3005 constructor(process) {
3006 super();
3007 this.process = process;
3008 this.errorCount = 0;
3009 this.queue = [];
3010 this.sending = false;
3011 let eventEmitter = this.process;
3012 eventEmitter.on('error', (error) => this.fireError(error));
3013 eventEmitter.on('close', () => this.fireClose);
3014 }
3015 write(msg) {
3016 if (!this.sending && this.queue.length === 0) {
3017 // See https://github.com/nodejs/node/issues/7657
3018 this.doWriteMessage(msg);
3019 }
3020 else {
3021 this.queue.push(msg);
3022 }
3023 }
3024 doWriteMessage(msg) {
3025 try {
3026 if (this.process.send) {
3027 this.sending = true;
3028 this.process.send(msg, undefined, undefined, (error) => {
3029 this.sending = false;
3030 if (error) {
3031 this.errorCount++;
3032 this.fireError(error, msg, this.errorCount);
3033 }
3034 else {
3035 this.errorCount = 0;
3036 }
3037 if (this.queue.length > 0) {
3038 this.doWriteMessage(this.queue.shift());
3039 }
3040 });
3041 }
3042 }
3043 catch (error) {
3044 this.errorCount++;
3045 this.fireError(error, msg, this.errorCount);
3046 }
3047 }
3048}
3049exports.IPCMessageWriter = IPCMessageWriter;
3050class SocketMessageWriter extends AbstractMessageWriter {
3051 constructor(socket, encoding = 'utf8') {
3052 super();
3053 this.socket = socket;
3054 this.queue = [];
3055 this.sending = false;
3056 this.encoding = encoding;
3057 this.errorCount = 0;
3058 this.socket.on('error', (error) => this.fireError(error));
3059 this.socket.on('close', () => this.fireClose());
3060 }
3061 dispose() {
3062 super.dispose();
3063 this.socket.destroy();
3064 }
3065 write(msg) {
3066 if (!this.sending && this.queue.length === 0) {
3067 // See https://github.com/nodejs/node/issues/7657
3068 this.doWriteMessage(msg);
3069 }
3070 else {
3071 this.queue.push(msg);
3072 }
3073 }
3074 doWriteMessage(msg) {
3075 let json = JSON.stringify(msg);
3076 let contentLength = Buffer.byteLength(json, this.encoding);
3077 let headers = [
3078 ContentLength, contentLength.toString(), CRLF,
3079 CRLF
3080 ];
3081 try {
3082 // Header must be written in ASCII encoding
3083 this.sending = true;
3084 this.socket.write(headers.join(''), 'ascii', (error) => {
3085 if (error) {
3086 this.handleError(error, msg);
3087 }
3088 try {
3089 // Now write the content. This can be written in any encoding
3090 this.socket.write(json, this.encoding, (error) => {
3091 this.sending = false;
3092 if (error) {
3093 this.handleError(error, msg);
3094 }
3095 else {
3096 this.errorCount = 0;
3097 }
3098 if (this.queue.length > 0) {
3099 this.doWriteMessage(this.queue.shift());
3100 }
3101 });
3102 }
3103 catch (error) {
3104 this.handleError(error, msg);
3105 }
3106 });
3107 }
3108 catch (error) {
3109 this.handleError(error, msg);
3110 }
3111 }
3112 handleError(error, msg) {
3113 this.errorCount++;
3114 this.fireError(error, msg, this.errorCount);
3115 }
3116}
3117exports.SocketMessageWriter = SocketMessageWriter;
3118
3119
3120/***/ }),
3121/* 10 */
3122/***/ (function(module, exports, __webpack_require__) {
3123
3124"use strict";
3125/*---------------------------------------------------------------------------------------------
3126 * Copyright (c) Microsoft Corporation. All rights reserved.
3127 * Licensed under the MIT License. See License.txt in the project root for license information.
3128 *--------------------------------------------------------------------------------------------*/
3129
3130Object.defineProperty(exports, "__esModule", { value: true });
3131const events_1 = __webpack_require__(8);
3132const Is = __webpack_require__(5);
3133var CancellationToken;
3134(function (CancellationToken) {
3135 CancellationToken.None = Object.freeze({
3136 isCancellationRequested: false,
3137 onCancellationRequested: events_1.Event.None
3138 });
3139 CancellationToken.Cancelled = Object.freeze({
3140 isCancellationRequested: true,
3141 onCancellationRequested: events_1.Event.None
3142 });
3143 function is(value) {
3144 let candidate = value;
3145 return candidate && (candidate === CancellationToken.None
3146 || candidate === CancellationToken.Cancelled
3147 || (Is.boolean(candidate.isCancellationRequested) && !!candidate.onCancellationRequested));
3148 }
3149 CancellationToken.is = is;
3150})(CancellationToken = exports.CancellationToken || (exports.CancellationToken = {}));
3151const shortcutEvent = Object.freeze(function (callback, context) {
3152 let handle = setTimeout(callback.bind(context), 0);
3153 return { dispose() { clearTimeout(handle); } };
3154});
3155class MutableToken {
3156 constructor() {
3157 this._isCancelled = false;
3158 }
3159 cancel() {
3160 if (!this._isCancelled) {
3161 this._isCancelled = true;
3162 if (this._emitter) {
3163 this._emitter.fire(undefined);
3164 this.dispose();
3165 }
3166 }
3167 }
3168 get isCancellationRequested() {
3169 return this._isCancelled;
3170 }
3171 get onCancellationRequested() {
3172 if (this._isCancelled) {
3173 return shortcutEvent;
3174 }
3175 if (!this._emitter) {
3176 this._emitter = new events_1.Emitter();
3177 }
3178 return this._emitter.event;
3179 }
3180 dispose() {
3181 if (this._emitter) {
3182 this._emitter.dispose();
3183 this._emitter = undefined;
3184 }
3185 }
3186}
3187class CancellationTokenSource {
3188 get token() {
3189 if (!this._token) {
3190 // be lazy and create the token only when
3191 // actually needed
3192 this._token = new MutableToken();
3193 }
3194 return this._token;
3195 }
3196 cancel() {
3197 if (!this._token) {
3198 // save an object by returning the default
3199 // cancelled token when cancellation happens
3200 // before someone asks for the token
3201 this._token = CancellationToken.Cancelled;
3202 }
3203 else {
3204 this._token.cancel();
3205 }
3206 }
3207 dispose() {
3208 if (!this._token) {
3209 // ensure to initialize with an empty token if we had none
3210 this._token = CancellationToken.None;
3211 }
3212 else if (this._token instanceof MutableToken) {
3213 // actually dispose
3214 this._token.dispose();
3215 }
3216 }
3217}
3218exports.CancellationTokenSource = CancellationTokenSource;
3219
3220
3221/***/ }),
3222/* 11 */
3223/***/ (function(module, exports, __webpack_require__) {
3224
3225"use strict";
3226
3227/*---------------------------------------------------------------------------------------------
3228 * Copyright (c) Microsoft Corporation. All rights reserved.
3229 * Licensed under the MIT License. See License.txt in the project root for license information.
3230 *--------------------------------------------------------------------------------------------*/
3231Object.defineProperty(exports, "__esModule", { value: true });
3232var Touch;
3233(function (Touch) {
3234 Touch.None = 0;
3235 Touch.First = 1;
3236 Touch.Last = 2;
3237})(Touch = exports.Touch || (exports.Touch = {}));
3238class LinkedMap {
3239 constructor() {
3240 this._map = new Map();
3241 this._head = undefined;
3242 this._tail = undefined;
3243 this._size = 0;
3244 }
3245 clear() {
3246 this._map.clear();
3247 this._head = undefined;
3248 this._tail = undefined;
3249 this._size = 0;
3250 }
3251 isEmpty() {
3252 return !this._head && !this._tail;
3253 }
3254 get size() {
3255 return this._size;
3256 }
3257 has(key) {
3258 return this._map.has(key);
3259 }
3260 get(key) {
3261 const item = this._map.get(key);
3262 if (!item) {
3263 return undefined;
3264 }
3265 return item.value;
3266 }
3267 set(key, value, touch = Touch.None) {
3268 let item = this._map.get(key);
3269 if (item) {
3270 item.value = value;
3271 if (touch !== Touch.None) {
3272 this.touch(item, touch);
3273 }
3274 }
3275 else {
3276 item = { key, value, next: undefined, previous: undefined };
3277 switch (touch) {
3278 case Touch.None:
3279 this.addItemLast(item);
3280 break;
3281 case Touch.First:
3282 this.addItemFirst(item);
3283 break;
3284 case Touch.Last:
3285 this.addItemLast(item);
3286 break;
3287 default:
3288 this.addItemLast(item);
3289 break;
3290 }
3291 this._map.set(key, item);
3292 this._size++;
3293 }
3294 }
3295 delete(key) {
3296 const item = this._map.get(key);
3297 if (!item) {
3298 return false;
3299 }
3300 this._map.delete(key);
3301 this.removeItem(item);
3302 this._size--;
3303 return true;
3304 }
3305 shift() {
3306 if (!this._head && !this._tail) {
3307 return undefined;
3308 }
3309 if (!this._head || !this._tail) {
3310 throw new Error('Invalid list');
3311 }
3312 const item = this._head;
3313 this._map.delete(item.key);
3314 this.removeItem(item);
3315 this._size--;
3316 return item.value;
3317 }
3318 forEach(callbackfn, thisArg) {
3319 let current = this._head;
3320 while (current) {
3321 if (thisArg) {
3322 callbackfn.bind(thisArg)(current.value, current.key, this);
3323 }
3324 else {
3325 callbackfn(current.value, current.key, this);
3326 }
3327 current = current.next;
3328 }
3329 }
3330 forEachReverse(callbackfn, thisArg) {
3331 let current = this._tail;
3332 while (current) {
3333 if (thisArg) {
3334 callbackfn.bind(thisArg)(current.value, current.key, this);
3335 }
3336 else {
3337 callbackfn(current.value, current.key, this);
3338 }
3339 current = current.previous;
3340 }
3341 }
3342 values() {
3343 let result = [];
3344 let current = this._head;
3345 while (current) {
3346 result.push(current.value);
3347 current = current.next;
3348 }
3349 return result;
3350 }
3351 keys() {
3352 let result = [];
3353 let current = this._head;
3354 while (current) {
3355 result.push(current.key);
3356 current = current.next;
3357 }
3358 return result;
3359 }
3360 /* JSON RPC run on es5 which has no Symbol.iterator
3361 public keys(): IterableIterator<K> {
3362 let current = this._head;
3363 let iterator: IterableIterator<K> = {
3364 [Symbol.iterator]() {
3365 return iterator;
3366 },
3367 next():IteratorResult<K> {
3368 if (current) {
3369 let result = { value: current.key, done: false };
3370 current = current.next;
3371 return result;
3372 } else {
3373 return { value: undefined, done: true };
3374 }
3375 }
3376 };
3377 return iterator;
3378 }
3379
3380 public values(): IterableIterator<V> {
3381 let current = this._head;
3382 let iterator: IterableIterator<V> = {
3383 [Symbol.iterator]() {
3384 return iterator;
3385 },
3386 next():IteratorResult<V> {
3387 if (current) {
3388 let result = { value: current.value, done: false };
3389 current = current.next;
3390 return result;
3391 } else {
3392 return { value: undefined, done: true };
3393 }
3394 }
3395 };
3396 return iterator;
3397 }
3398 */
3399 addItemFirst(item) {
3400 // First time Insert
3401 if (!this._head && !this._tail) {
3402 this._tail = item;
3403 }
3404 else if (!this._head) {
3405 throw new Error('Invalid list');
3406 }
3407 else {
3408 item.next = this._head;
3409 this._head.previous = item;
3410 }
3411 this._head = item;
3412 }
3413 addItemLast(item) {
3414 // First time Insert
3415 if (!this._head && !this._tail) {
3416 this._head = item;
3417 }
3418 else if (!this._tail) {
3419 throw new Error('Invalid list');
3420 }
3421 else {
3422 item.previous = this._tail;
3423 this._tail.next = item;
3424 }
3425 this._tail = item;
3426 }
3427 removeItem(item) {
3428 if (item === this._head && item === this._tail) {
3429 this._head = undefined;
3430 this._tail = undefined;
3431 }
3432 else if (item === this._head) {
3433 this._head = item.next;
3434 }
3435 else if (item === this._tail) {
3436 this._tail = item.previous;
3437 }
3438 else {
3439 const next = item.next;
3440 const previous = item.previous;
3441 if (!next || !previous) {
3442 throw new Error('Invalid list');
3443 }
3444 next.previous = previous;
3445 previous.next = next;
3446 }
3447 }
3448 touch(item, touch) {
3449 if (!this._head || !this._tail) {
3450 throw new Error('Invalid list');
3451 }
3452 if ((touch !== Touch.First && touch !== Touch.Last)) {
3453 return;
3454 }
3455 if (touch === Touch.First) {
3456 if (item === this._head) {
3457 return;
3458 }
3459 const next = item.next;
3460 const previous = item.previous;
3461 // Unlink the item
3462 if (item === this._tail) {
3463 // previous must be defined since item was not head but is tail
3464 // So there are more than on item in the map
3465 previous.next = undefined;
3466 this._tail = previous;
3467 }
3468 else {
3469 // Both next and previous are not undefined since item was neither head nor tail.
3470 next.previous = previous;
3471 previous.next = next;
3472 }
3473 // Insert the node at head
3474 item.previous = undefined;
3475 item.next = this._head;
3476 this._head.previous = item;
3477 this._head = item;
3478 }
3479 else if (touch === Touch.Last) {
3480 if (item === this._tail) {
3481 return;
3482 }
3483 const next = item.next;
3484 const previous = item.previous;
3485 // Unlink the item.
3486 if (item === this._head) {
3487 // next must be defined since item was not tail but is head
3488 // So there are more than on item in the map
3489 next.previous = undefined;
3490 this._head = next;
3491 }
3492 else {
3493 // Both next and previous are not undefined since item was neither head nor tail.
3494 next.previous = previous;
3495 previous.next = next;
3496 }
3497 item.next = undefined;
3498 item.previous = this._tail;
3499 this._tail.next = item;
3500 this._tail = item;
3501 }
3502 }
3503}
3504exports.LinkedMap = LinkedMap;
3505
3506
3507/***/ }),
3508/* 12 */
3509/***/ (function(module, exports, __webpack_require__) {
3510
3511"use strict";
3512/* --------------------------------------------------------------------------------------------
3513 * Copyright (c) Microsoft Corporation. All rights reserved.
3514 * Licensed under the MIT License. See License.txt in the project root for license information.
3515 * ------------------------------------------------------------------------------------------ */
3516
3517Object.defineProperty(exports, "__esModule", { value: true });
3518const path_1 = __webpack_require__(13);
3519const os_1 = __webpack_require__(14);
3520const crypto_1 = __webpack_require__(15);
3521const net_1 = __webpack_require__(16);
3522const messageReader_1 = __webpack_require__(7);
3523const messageWriter_1 = __webpack_require__(9);
3524function generateRandomPipeName() {
3525 const randomSuffix = crypto_1.randomBytes(21).toString('hex');
3526 if (process.platform === 'win32') {
3527 return `\\\\.\\pipe\\vscode-jsonrpc-${randomSuffix}-sock`;
3528 }
3529 else {
3530 // Mac/Unix: use socket file
3531 return path_1.join(os_1.tmpdir(), `vscode-${randomSuffix}.sock`);
3532 }
3533}
3534exports.generateRandomPipeName = generateRandomPipeName;
3535function createClientPipeTransport(pipeName, encoding = 'utf-8') {
3536 let connectResolve;
3537 let connected = new Promise((resolve, _reject) => {
3538 connectResolve = resolve;
3539 });
3540 return new Promise((resolve, reject) => {
3541 let server = net_1.createServer((socket) => {
3542 server.close();
3543 connectResolve([
3544 new messageReader_1.SocketMessageReader(socket, encoding),
3545 new messageWriter_1.SocketMessageWriter(socket, encoding)
3546 ]);
3547 });
3548 server.on('error', reject);
3549 server.listen(pipeName, () => {
3550 server.removeListener('error', reject);
3551 resolve({
3552 onConnected: () => { return connected; }
3553 });
3554 });
3555 });
3556}
3557exports.createClientPipeTransport = createClientPipeTransport;
3558function createServerPipeTransport(pipeName, encoding = 'utf-8') {
3559 const socket = net_1.createConnection(pipeName);
3560 return [
3561 new messageReader_1.SocketMessageReader(socket, encoding),
3562 new messageWriter_1.SocketMessageWriter(socket, encoding)
3563 ];
3564}
3565exports.createServerPipeTransport = createServerPipeTransport;
3566
3567
3568/***/ }),
3569/* 13 */
3570/***/ (function(module, exports) {
3571
3572module.exports = require("path");
3573
3574/***/ }),
3575/* 14 */
3576/***/ (function(module, exports) {
3577
3578module.exports = require("os");
3579
3580/***/ }),
3581/* 15 */
3582/***/ (function(module, exports) {
3583
3584module.exports = require("crypto");
3585
3586/***/ }),
3587/* 16 */
3588/***/ (function(module, exports) {
3589
3590module.exports = require("net");
3591
3592/***/ }),
3593/* 17 */
3594/***/ (function(module, exports, __webpack_require__) {
3595
3596"use strict";
3597/* --------------------------------------------------------------------------------------------
3598 * Copyright (c) Microsoft Corporation. All rights reserved.
3599 * Licensed under the MIT License. See License.txt in the project root for license information.
3600 * ------------------------------------------------------------------------------------------ */
3601
3602Object.defineProperty(exports, "__esModule", { value: true });
3603const net_1 = __webpack_require__(16);
3604const messageReader_1 = __webpack_require__(7);
3605const messageWriter_1 = __webpack_require__(9);
3606function createClientSocketTransport(port, encoding = 'utf-8') {
3607 let connectResolve;
3608 let connected = new Promise((resolve, _reject) => {
3609 connectResolve = resolve;
3610 });
3611 return new Promise((resolve, reject) => {
3612 let server = net_1.createServer((socket) => {
3613 server.close();
3614 connectResolve([
3615 new messageReader_1.SocketMessageReader(socket, encoding),
3616 new messageWriter_1.SocketMessageWriter(socket, encoding)
3617 ]);
3618 });
3619 server.on('error', reject);
3620 server.listen(port, '127.0.0.1', () => {
3621 server.removeListener('error', reject);
3622 resolve({
3623 onConnected: () => { return connected; }
3624 });
3625 });
3626 });
3627}
3628exports.createClientSocketTransport = createClientSocketTransport;
3629function createServerSocketTransport(port, encoding = 'utf-8') {
3630 const socket = net_1.createConnection(port, '127.0.0.1');
3631 return [
3632 new messageReader_1.SocketMessageReader(socket, encoding),
3633 new messageWriter_1.SocketMessageWriter(socket, encoding)
3634 ];
3635}
3636exports.createServerSocketTransport = createServerSocketTransport;
3637
3638
3639/***/ }),
3640/* 18 */
3641/***/ (function(module, __webpack_exports__, __webpack_require__) {
3642
3643"use strict";
3644__webpack_require__.r(__webpack_exports__);
3645/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Position", function() { return Position; });
3646/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Range", function() { return Range; });
3647/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Location", function() { return Location; });
3648/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocationLink", function() { return LocationLink; });
3649/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Color", function() { return Color; });
3650/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorInformation", function() { return ColorInformation; });
3651/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ColorPresentation", function() { return ColorPresentation; });
3652/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRangeKind", function() { return FoldingRangeKind; });
3653/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FoldingRange", function() { return FoldingRange; });
3654/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticRelatedInformation", function() { return DiagnosticRelatedInformation; });
3655/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticSeverity", function() { return DiagnosticSeverity; });
3656/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DiagnosticTag", function() { return DiagnosticTag; });
3657/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Diagnostic", function() { return Diagnostic; });
3658/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Command", function() { return Command; });
3659/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextEdit", function() { return TextEdit; });
3660/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentEdit", function() { return TextDocumentEdit; });
3661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CreateFile", function() { return CreateFile; });
3662/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenameFile", function() { return RenameFile; });
3663/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DeleteFile", function() { return DeleteFile; });
3664/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceEdit", function() { return WorkspaceEdit; });
3665/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WorkspaceChange", function() { return WorkspaceChange; });
3666/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentIdentifier", function() { return TextDocumentIdentifier; });
3667/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VersionedTextDocumentIdentifier", function() { return VersionedTextDocumentIdentifier; });
3668/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocumentItem", function() { return TextDocumentItem; });
3669/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupKind", function() { return MarkupKind; });
3670/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkupContent", function() { return MarkupContent; });
3671/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemKind", function() { return CompletionItemKind; });
3672/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InsertTextFormat", function() { return InsertTextFormat; });
3673/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItemTag", function() { return CompletionItemTag; });
3674/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionItem", function() { return CompletionItem; });
3675/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CompletionList", function() { return CompletionList; });
3676/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MarkedString", function() { return MarkedString; });
3677/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Hover", function() { return Hover; });
3678/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ParameterInformation", function() { return ParameterInformation; });
3679/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SignatureInformation", function() { return SignatureInformation; });
3680/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlightKind", function() { return DocumentHighlightKind; });
3681/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentHighlight", function() { return DocumentHighlight; });
3682/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolKind", function() { return SymbolKind; });
3683/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolTag", function() { return SymbolTag; });
3684/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SymbolInformation", function() { return SymbolInformation; });
3685/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentSymbol", function() { return DocumentSymbol; });
3686/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionKind", function() { return CodeActionKind; });
3687/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeActionContext", function() { return CodeActionContext; });
3688/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeAction", function() { return CodeAction; });
3689/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CodeLens", function() { return CodeLens; });
3690/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FormattingOptions", function() { return FormattingOptions; });
3691/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DocumentLink", function() { return DocumentLink; });
3692/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SelectionRange", function() { return SelectionRange; });
3693/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EOL", function() { return EOL; });
3694/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
3695/* --------------------------------------------------------------------------------------------
3696 * Copyright (c) Microsoft Corporation. All rights reserved.
3697 * Licensed under the MIT License. See License.txt in the project root for license information.
3698 * ------------------------------------------------------------------------------------------ */
3699
3700/**
3701 * The Position namespace provides helper functions to work with
3702 * [Position](#Position) literals.
3703 */
3704var Position;
3705(function (Position) {
3706 /**
3707 * Creates a new Position literal from the given line and character.
3708 * @param line The position's line.
3709 * @param character The position's character.
3710 */
3711 function create(line, character) {
3712 return { line: line, character: character };
3713 }
3714 Position.create = create;
3715 /**
3716 * Checks whether the given liternal conforms to the [Position](#Position) interface.
3717 */
3718 function is(value) {
3719 var candidate = value;
3720 return Is.objectLiteral(candidate) && Is.number(candidate.line) && Is.number(candidate.character);
3721 }
3722 Position.is = is;
3723})(Position || (Position = {}));
3724/**
3725 * The Range namespace provides helper functions to work with
3726 * [Range](#Range) literals.
3727 */
3728var Range;
3729(function (Range) {
3730 function create(one, two, three, four) {
3731 if (Is.number(one) && Is.number(two) && Is.number(three) && Is.number(four)) {
3732 return { start: Position.create(one, two), end: Position.create(three, four) };
3733 }
3734 else if (Position.is(one) && Position.is(two)) {
3735 return { start: one, end: two };
3736 }
3737 else {
3738 throw new Error("Range#create called with invalid arguments[" + one + ", " + two + ", " + three + ", " + four + "]");
3739 }
3740 }
3741 Range.create = create;
3742 /**
3743 * Checks whether the given literal conforms to the [Range](#Range) interface.
3744 */
3745 function is(value) {
3746 var candidate = value;
3747 return Is.objectLiteral(candidate) && Position.is(candidate.start) && Position.is(candidate.end);
3748 }
3749 Range.is = is;
3750})(Range || (Range = {}));
3751/**
3752 * The Location namespace provides helper functions to work with
3753 * [Location](#Location) literals.
3754 */
3755var Location;
3756(function (Location) {
3757 /**
3758 * Creates a Location literal.
3759 * @param uri The location's uri.
3760 * @param range The location's range.
3761 */
3762 function create(uri, range) {
3763 return { uri: uri, range: range };
3764 }
3765 Location.create = create;
3766 /**
3767 * Checks whether the given literal conforms to the [Location](#Location) interface.
3768 */
3769 function is(value) {
3770 var candidate = value;
3771 return Is.defined(candidate) && Range.is(candidate.range) && (Is.string(candidate.uri) || Is.undefined(candidate.uri));
3772 }
3773 Location.is = is;
3774})(Location || (Location = {}));
3775/**
3776 * The LocationLink namespace provides helper functions to work with
3777 * [LocationLink](#LocationLink) literals.
3778 */
3779var LocationLink;
3780(function (LocationLink) {
3781 /**
3782 * Creates a LocationLink literal.
3783 * @param targetUri The definition's uri.
3784 * @param targetRange The full range of the definition.
3785 * @param targetSelectionRange The span of the symbol definition at the target.
3786 * @param originSelectionRange The span of the symbol being defined in the originating source file.
3787 */
3788 function create(targetUri, targetRange, targetSelectionRange, originSelectionRange) {
3789 return { targetUri: targetUri, targetRange: targetRange, targetSelectionRange: targetSelectionRange, originSelectionRange: originSelectionRange };
3790 }
3791 LocationLink.create = create;
3792 /**
3793 * Checks whether the given literal conforms to the [LocationLink](#LocationLink) interface.
3794 */
3795 function is(value) {
3796 var candidate = value;
3797 return Is.defined(candidate) && Range.is(candidate.targetRange) && Is.string(candidate.targetUri)
3798 && (Range.is(candidate.targetSelectionRange) || Is.undefined(candidate.targetSelectionRange))
3799 && (Range.is(candidate.originSelectionRange) || Is.undefined(candidate.originSelectionRange));
3800 }
3801 LocationLink.is = is;
3802})(LocationLink || (LocationLink = {}));
3803/**
3804 * The Color namespace provides helper functions to work with
3805 * [Color](#Color) literals.
3806 */
3807var Color;
3808(function (Color) {
3809 /**
3810 * Creates a new Color literal.
3811 */
3812 function create(red, green, blue, alpha) {
3813 return {
3814 red: red,
3815 green: green,
3816 blue: blue,
3817 alpha: alpha,
3818 };
3819 }
3820 Color.create = create;
3821 /**
3822 * Checks whether the given literal conforms to the [Color](#Color) interface.
3823 */
3824 function is(value) {
3825 var candidate = value;
3826 return Is.number(candidate.red)
3827 && Is.number(candidate.green)
3828 && Is.number(candidate.blue)
3829 && Is.number(candidate.alpha);
3830 }
3831 Color.is = is;
3832})(Color || (Color = {}));
3833/**
3834 * The ColorInformation namespace provides helper functions to work with
3835 * [ColorInformation](#ColorInformation) literals.
3836 */
3837var ColorInformation;
3838(function (ColorInformation) {
3839 /**
3840 * Creates a new ColorInformation literal.
3841 */
3842 function create(range, color) {
3843 return {
3844 range: range,
3845 color: color,
3846 };
3847 }
3848 ColorInformation.create = create;
3849 /**
3850 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3851 */
3852 function is(value) {
3853 var candidate = value;
3854 return Range.is(candidate.range) && Color.is(candidate.color);
3855 }
3856 ColorInformation.is = is;
3857})(ColorInformation || (ColorInformation = {}));
3858/**
3859 * The Color namespace provides helper functions to work with
3860 * [ColorPresentation](#ColorPresentation) literals.
3861 */
3862var ColorPresentation;
3863(function (ColorPresentation) {
3864 /**
3865 * Creates a new ColorInformation literal.
3866 */
3867 function create(label, textEdit, additionalTextEdits) {
3868 return {
3869 label: label,
3870 textEdit: textEdit,
3871 additionalTextEdits: additionalTextEdits,
3872 };
3873 }
3874 ColorPresentation.create = create;
3875 /**
3876 * Checks whether the given literal conforms to the [ColorInformation](#ColorInformation) interface.
3877 */
3878 function is(value) {
3879 var candidate = value;
3880 return Is.string(candidate.label)
3881 && (Is.undefined(candidate.textEdit) || TextEdit.is(candidate))
3882 && (Is.undefined(candidate.additionalTextEdits) || Is.typedArray(candidate.additionalTextEdits, TextEdit.is));
3883 }
3884 ColorPresentation.is = is;
3885})(ColorPresentation || (ColorPresentation = {}));
3886/**
3887 * Enum of known range kinds
3888 */
3889var FoldingRangeKind;
3890(function (FoldingRangeKind) {
3891 /**
3892 * Folding range for a comment
3893 */
3894 FoldingRangeKind["Comment"] = "comment";
3895 /**
3896 * Folding range for a imports or includes
3897 */
3898 FoldingRangeKind["Imports"] = "imports";
3899 /**
3900 * Folding range for a region (e.g. `#region`)
3901 */
3902 FoldingRangeKind["Region"] = "region";
3903})(FoldingRangeKind || (FoldingRangeKind = {}));
3904/**
3905 * The folding range namespace provides helper functions to work with
3906 * [FoldingRange](#FoldingRange) literals.
3907 */
3908var FoldingRange;
3909(function (FoldingRange) {
3910 /**
3911 * Creates a new FoldingRange literal.
3912 */
3913 function create(startLine, endLine, startCharacter, endCharacter, kind) {
3914 var result = {
3915 startLine: startLine,
3916 endLine: endLine
3917 };
3918 if (Is.defined(startCharacter)) {
3919 result.startCharacter = startCharacter;
3920 }
3921 if (Is.defined(endCharacter)) {
3922 result.endCharacter = endCharacter;
3923 }
3924 if (Is.defined(kind)) {
3925 result.kind = kind;
3926 }
3927 return result;
3928 }
3929 FoldingRange.create = create;
3930 /**
3931 * Checks whether the given literal conforms to the [FoldingRange](#FoldingRange) interface.
3932 */
3933 function is(value) {
3934 var candidate = value;
3935 return Is.number(candidate.startLine) && Is.number(candidate.startLine)
3936 && (Is.undefined(candidate.startCharacter) || Is.number(candidate.startCharacter))
3937 && (Is.undefined(candidate.endCharacter) || Is.number(candidate.endCharacter))
3938 && (Is.undefined(candidate.kind) || Is.string(candidate.kind));
3939 }
3940 FoldingRange.is = is;
3941})(FoldingRange || (FoldingRange = {}));
3942/**
3943 * The DiagnosticRelatedInformation namespace provides helper functions to work with
3944 * [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) literals.
3945 */
3946var DiagnosticRelatedInformation;
3947(function (DiagnosticRelatedInformation) {
3948 /**
3949 * Creates a new DiagnosticRelatedInformation literal.
3950 */
3951 function create(location, message) {
3952 return {
3953 location: location,
3954 message: message
3955 };
3956 }
3957 DiagnosticRelatedInformation.create = create;
3958 /**
3959 * Checks whether the given literal conforms to the [DiagnosticRelatedInformation](#DiagnosticRelatedInformation) interface.
3960 */
3961 function is(value) {
3962 var candidate = value;
3963 return Is.defined(candidate) && Location.is(candidate.location) && Is.string(candidate.message);
3964 }
3965 DiagnosticRelatedInformation.is = is;
3966})(DiagnosticRelatedInformation || (DiagnosticRelatedInformation = {}));
3967/**
3968 * The diagnostic's severity.
3969 */
3970var DiagnosticSeverity;
3971(function (DiagnosticSeverity) {
3972 /**
3973 * Reports an error.
3974 */
3975 DiagnosticSeverity.Error = 1;
3976 /**
3977 * Reports a warning.
3978 */
3979 DiagnosticSeverity.Warning = 2;
3980 /**
3981 * Reports an information.
3982 */
3983 DiagnosticSeverity.Information = 3;
3984 /**
3985 * Reports a hint.
3986 */
3987 DiagnosticSeverity.Hint = 4;
3988})(DiagnosticSeverity || (DiagnosticSeverity = {}));
3989/**
3990 * The diagnostic tags.
3991 *
3992 * @since 3.15.0
3993 */
3994var DiagnosticTag;
3995(function (DiagnosticTag) {
3996 /**
3997 * Unused or unnecessary code.
3998 *
3999 * Clients are allowed to render diagnostics with this tag faded out instead of having
4000 * an error squiggle.
4001 */
4002 DiagnosticTag.Unnecessary = 1;
4003 /**
4004 * Deprecated or obsolete code.
4005 *
4006 * Clients are allowed to rendered diagnostics with this tag strike through.
4007 */
4008 DiagnosticTag.Deprecated = 2;
4009})(DiagnosticTag || (DiagnosticTag = {}));
4010/**
4011 * The Diagnostic namespace provides helper functions to work with
4012 * [Diagnostic](#Diagnostic) literals.
4013 */
4014var Diagnostic;
4015(function (Diagnostic) {
4016 /**
4017 * Creates a new Diagnostic literal.
4018 */
4019 function create(range, message, severity, code, source, relatedInformation) {
4020 var result = { range: range, message: message };
4021 if (Is.defined(severity)) {
4022 result.severity = severity;
4023 }
4024 if (Is.defined(code)) {
4025 result.code = code;
4026 }
4027 if (Is.defined(source)) {
4028 result.source = source;
4029 }
4030 if (Is.defined(relatedInformation)) {
4031 result.relatedInformation = relatedInformation;
4032 }
4033 return result;
4034 }
4035 Diagnostic.create = create;
4036 /**
4037 * Checks whether the given literal conforms to the [Diagnostic](#Diagnostic) interface.
4038 */
4039 function is(value) {
4040 var candidate = value;
4041 return Is.defined(candidate)
4042 && Range.is(candidate.range)
4043 && Is.string(candidate.message)
4044 && (Is.number(candidate.severity) || Is.undefined(candidate.severity))
4045 && (Is.number(candidate.code) || Is.string(candidate.code) || Is.undefined(candidate.code))
4046 && (Is.string(candidate.source) || Is.undefined(candidate.source))
4047 && (Is.undefined(candidate.relatedInformation) || Is.typedArray(candidate.relatedInformation, DiagnosticRelatedInformation.is));
4048 }
4049 Diagnostic.is = is;
4050})(Diagnostic || (Diagnostic = {}));
4051/**
4052 * The Command namespace provides helper functions to work with
4053 * [Command](#Command) literals.
4054 */
4055var Command;
4056(function (Command) {
4057 /**
4058 * Creates a new Command literal.
4059 */
4060 function create(title, command) {
4061 var args = [];
4062 for (var _i = 2; _i < arguments.length; _i++) {
4063 args[_i - 2] = arguments[_i];
4064 }
4065 var result = { title: title, command: command };
4066 if (Is.defined(args) && args.length > 0) {
4067 result.arguments = args;
4068 }
4069 return result;
4070 }
4071 Command.create = create;
4072 /**
4073 * Checks whether the given literal conforms to the [Command](#Command) interface.
4074 */
4075 function is(value) {
4076 var candidate = value;
4077 return Is.defined(candidate) && Is.string(candidate.title) && Is.string(candidate.command);
4078 }
4079 Command.is = is;
4080})(Command || (Command = {}));
4081/**
4082 * The TextEdit namespace provides helper function to create replace,
4083 * insert and delete edits more easily.
4084 */
4085var TextEdit;
4086(function (TextEdit) {
4087 /**
4088 * Creates a replace text edit.
4089 * @param range The range of text to be replaced.
4090 * @param newText The new text.
4091 */
4092 function replace(range, newText) {
4093 return { range: range, newText: newText };
4094 }
4095 TextEdit.replace = replace;
4096 /**
4097 * Creates a insert text edit.
4098 * @param position The position to insert the text at.
4099 * @param newText The text to be inserted.
4100 */
4101 function insert(position, newText) {
4102 return { range: { start: position, end: position }, newText: newText };
4103 }
4104 TextEdit.insert = insert;
4105 /**
4106 * Creates a delete text edit.
4107 * @param range The range of text to be deleted.
4108 */
4109 function del(range) {
4110 return { range: range, newText: '' };
4111 }
4112 TextEdit.del = del;
4113 function is(value) {
4114 var candidate = value;
4115 return Is.objectLiteral(candidate)
4116 && Is.string(candidate.newText)
4117 && Range.is(candidate.range);
4118 }
4119 TextEdit.is = is;
4120})(TextEdit || (TextEdit = {}));
4121/**
4122 * The TextDocumentEdit namespace provides helper function to create
4123 * an edit that manipulates a text document.
4124 */
4125var TextDocumentEdit;
4126(function (TextDocumentEdit) {
4127 /**
4128 * Creates a new `TextDocumentEdit`
4129 */
4130 function create(textDocument, edits) {
4131 return { textDocument: textDocument, edits: edits };
4132 }
4133 TextDocumentEdit.create = create;
4134 function is(value) {
4135 var candidate = value;
4136 return Is.defined(candidate)
4137 && VersionedTextDocumentIdentifier.is(candidate.textDocument)
4138 && Array.isArray(candidate.edits);
4139 }
4140 TextDocumentEdit.is = is;
4141})(TextDocumentEdit || (TextDocumentEdit = {}));
4142var CreateFile;
4143(function (CreateFile) {
4144 function create(uri, options) {
4145 var result = {
4146 kind: 'create',
4147 uri: uri
4148 };
4149 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4150 result.options = options;
4151 }
4152 return result;
4153 }
4154 CreateFile.create = create;
4155 function is(value) {
4156 var candidate = value;
4157 return candidate && candidate.kind === 'create' && Is.string(candidate.uri) &&
4158 (candidate.options === void 0 ||
4159 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4160 }
4161 CreateFile.is = is;
4162})(CreateFile || (CreateFile = {}));
4163var RenameFile;
4164(function (RenameFile) {
4165 function create(oldUri, newUri, options) {
4166 var result = {
4167 kind: 'rename',
4168 oldUri: oldUri,
4169 newUri: newUri
4170 };
4171 if (options !== void 0 && (options.overwrite !== void 0 || options.ignoreIfExists !== void 0)) {
4172 result.options = options;
4173 }
4174 return result;
4175 }
4176 RenameFile.create = create;
4177 function is(value) {
4178 var candidate = value;
4179 return candidate && candidate.kind === 'rename' && Is.string(candidate.oldUri) && Is.string(candidate.newUri) &&
4180 (candidate.options === void 0 ||
4181 ((candidate.options.overwrite === void 0 || Is.boolean(candidate.options.overwrite)) && (candidate.options.ignoreIfExists === void 0 || Is.boolean(candidate.options.ignoreIfExists))));
4182 }
4183 RenameFile.is = is;
4184})(RenameFile || (RenameFile = {}));
4185var DeleteFile;
4186(function (DeleteFile) {
4187 function create(uri, options) {
4188 var result = {
4189 kind: 'delete',
4190 uri: uri
4191 };
4192 if (options !== void 0 && (options.recursive !== void 0 || options.ignoreIfNotExists !== void 0)) {
4193 result.options = options;
4194 }
4195 return result;
4196 }
4197 DeleteFile.create = create;
4198 function is(value) {
4199 var candidate = value;
4200 return candidate && candidate.kind === 'delete' && Is.string(candidate.uri) &&
4201 (candidate.options === void 0 ||
4202 ((candidate.options.recursive === void 0 || Is.boolean(candidate.options.recursive)) && (candidate.options.ignoreIfNotExists === void 0 || Is.boolean(candidate.options.ignoreIfNotExists))));
4203 }
4204 DeleteFile.is = is;
4205})(DeleteFile || (DeleteFile = {}));
4206var WorkspaceEdit;
4207(function (WorkspaceEdit) {
4208 function is(value) {
4209 var candidate = value;
4210 return candidate &&
4211 (candidate.changes !== void 0 || candidate.documentChanges !== void 0) &&
4212 (candidate.documentChanges === void 0 || candidate.documentChanges.every(function (change) {
4213 if (Is.string(change.kind)) {
4214 return CreateFile.is(change) || RenameFile.is(change) || DeleteFile.is(change);
4215 }
4216 else {
4217 return TextDocumentEdit.is(change);
4218 }
4219 }));
4220 }
4221 WorkspaceEdit.is = is;
4222})(WorkspaceEdit || (WorkspaceEdit = {}));
4223var TextEditChangeImpl = /** @class */ (function () {
4224 function TextEditChangeImpl(edits) {
4225 this.edits = edits;
4226 }
4227 TextEditChangeImpl.prototype.insert = function (position, newText) {
4228 this.edits.push(TextEdit.insert(position, newText));
4229 };
4230 TextEditChangeImpl.prototype.replace = function (range, newText) {
4231 this.edits.push(TextEdit.replace(range, newText));
4232 };
4233 TextEditChangeImpl.prototype.delete = function (range) {
4234 this.edits.push(TextEdit.del(range));
4235 };
4236 TextEditChangeImpl.prototype.add = function (edit) {
4237 this.edits.push(edit);
4238 };
4239 TextEditChangeImpl.prototype.all = function () {
4240 return this.edits;
4241 };
4242 TextEditChangeImpl.prototype.clear = function () {
4243 this.edits.splice(0, this.edits.length);
4244 };
4245 return TextEditChangeImpl;
4246}());
4247/**
4248 * A workspace change helps constructing changes to a workspace.
4249 */
4250var WorkspaceChange = /** @class */ (function () {
4251 function WorkspaceChange(workspaceEdit) {
4252 var _this = this;
4253 this._textEditChanges = Object.create(null);
4254 if (workspaceEdit) {
4255 this._workspaceEdit = workspaceEdit;
4256 if (workspaceEdit.documentChanges) {
4257 workspaceEdit.documentChanges.forEach(function (change) {
4258 if (TextDocumentEdit.is(change)) {
4259 var textEditChange = new TextEditChangeImpl(change.edits);
4260 _this._textEditChanges[change.textDocument.uri] = textEditChange;
4261 }
4262 });
4263 }
4264 else if (workspaceEdit.changes) {
4265 Object.keys(workspaceEdit.changes).forEach(function (key) {
4266 var textEditChange = new TextEditChangeImpl(workspaceEdit.changes[key]);
4267 _this._textEditChanges[key] = textEditChange;
4268 });
4269 }
4270 }
4271 }
4272 Object.defineProperty(WorkspaceChange.prototype, "edit", {
4273 /**
4274 * Returns the underlying [WorkspaceEdit](#WorkspaceEdit) literal
4275 * use to be returned from a workspace edit operation like rename.
4276 */
4277 get: function () {
4278 return this._workspaceEdit;
4279 },
4280 enumerable: true,
4281 configurable: true
4282 });
4283 WorkspaceChange.prototype.getTextEditChange = function (key) {
4284 if (VersionedTextDocumentIdentifier.is(key)) {
4285 if (!this._workspaceEdit) {
4286 this._workspaceEdit = {
4287 documentChanges: []
4288 };
4289 }
4290 if (!this._workspaceEdit.documentChanges) {
4291 throw new Error('Workspace edit is not configured for document changes.');
4292 }
4293 var textDocument = key;
4294 var result = this._textEditChanges[textDocument.uri];
4295 if (!result) {
4296 var edits = [];
4297 var textDocumentEdit = {
4298 textDocument: textDocument,
4299 edits: edits
4300 };
4301 this._workspaceEdit.documentChanges.push(textDocumentEdit);
4302 result = new TextEditChangeImpl(edits);
4303 this._textEditChanges[textDocument.uri] = result;
4304 }
4305 return result;
4306 }
4307 else {
4308 if (!this._workspaceEdit) {
4309 this._workspaceEdit = {
4310 changes: Object.create(null)
4311 };
4312 }
4313 if (!this._workspaceEdit.changes) {
4314 throw new Error('Workspace edit is not configured for normal text edit changes.');
4315 }
4316 var result = this._textEditChanges[key];
4317 if (!result) {
4318 var edits = [];
4319 this._workspaceEdit.changes[key] = edits;
4320 result = new TextEditChangeImpl(edits);
4321 this._textEditChanges[key] = result;
4322 }
4323 return result;
4324 }
4325 };
4326 WorkspaceChange.prototype.createFile = function (uri, options) {
4327 this.checkDocumentChanges();
4328 this._workspaceEdit.documentChanges.push(CreateFile.create(uri, options));
4329 };
4330 WorkspaceChange.prototype.renameFile = function (oldUri, newUri, options) {
4331 this.checkDocumentChanges();
4332 this._workspaceEdit.documentChanges.push(RenameFile.create(oldUri, newUri, options));
4333 };
4334 WorkspaceChange.prototype.deleteFile = function (uri, options) {
4335 this.checkDocumentChanges();
4336 this._workspaceEdit.documentChanges.push(DeleteFile.create(uri, options));
4337 };
4338 WorkspaceChange.prototype.checkDocumentChanges = function () {
4339 if (!this._workspaceEdit || !this._workspaceEdit.documentChanges) {
4340 throw new Error('Workspace edit is not configured for document changes.');
4341 }
4342 };
4343 return WorkspaceChange;
4344}());
4345
4346/**
4347 * The TextDocumentIdentifier namespace provides helper functions to work with
4348 * [TextDocumentIdentifier](#TextDocumentIdentifier) literals.
4349 */
4350var TextDocumentIdentifier;
4351(function (TextDocumentIdentifier) {
4352 /**
4353 * Creates a new TextDocumentIdentifier literal.
4354 * @param uri The document's uri.
4355 */
4356 function create(uri) {
4357 return { uri: uri };
4358 }
4359 TextDocumentIdentifier.create = create;
4360 /**
4361 * Checks whether the given literal conforms to the [TextDocumentIdentifier](#TextDocumentIdentifier) interface.
4362 */
4363 function is(value) {
4364 var candidate = value;
4365 return Is.defined(candidate) && Is.string(candidate.uri);
4366 }
4367 TextDocumentIdentifier.is = is;
4368})(TextDocumentIdentifier || (TextDocumentIdentifier = {}));
4369/**
4370 * The VersionedTextDocumentIdentifier namespace provides helper functions to work with
4371 * [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) literals.
4372 */
4373var VersionedTextDocumentIdentifier;
4374(function (VersionedTextDocumentIdentifier) {
4375 /**
4376 * Creates a new VersionedTextDocumentIdentifier literal.
4377 * @param uri The document's uri.
4378 * @param uri The document's text.
4379 */
4380 function create(uri, version) {
4381 return { uri: uri, version: version };
4382 }
4383 VersionedTextDocumentIdentifier.create = create;
4384 /**
4385 * Checks whether the given literal conforms to the [VersionedTextDocumentIdentifier](#VersionedTextDocumentIdentifier) interface.
4386 */
4387 function is(value) {
4388 var candidate = value;
4389 return Is.defined(candidate) && Is.string(candidate.uri) && (candidate.version === null || Is.number(candidate.version));
4390 }
4391 VersionedTextDocumentIdentifier.is = is;
4392})(VersionedTextDocumentIdentifier || (VersionedTextDocumentIdentifier = {}));
4393/**
4394 * The TextDocumentItem namespace provides helper functions to work with
4395 * [TextDocumentItem](#TextDocumentItem) literals.
4396 */
4397var TextDocumentItem;
4398(function (TextDocumentItem) {
4399 /**
4400 * Creates a new TextDocumentItem literal.
4401 * @param uri The document's uri.
4402 * @param languageId The document's language identifier.
4403 * @param version The document's version number.
4404 * @param text The document's text.
4405 */
4406 function create(uri, languageId, version, text) {
4407 return { uri: uri, languageId: languageId, version: version, text: text };
4408 }
4409 TextDocumentItem.create = create;
4410 /**
4411 * Checks whether the given literal conforms to the [TextDocumentItem](#TextDocumentItem) interface.
4412 */
4413 function is(value) {
4414 var candidate = value;
4415 return Is.defined(candidate) && Is.string(candidate.uri) && Is.string(candidate.languageId) && Is.number(candidate.version) && Is.string(candidate.text);
4416 }
4417 TextDocumentItem.is = is;
4418})(TextDocumentItem || (TextDocumentItem = {}));
4419/**
4420 * Describes the content type that a client supports in various
4421 * result literals like `Hover`, `ParameterInfo` or `CompletionItem`.
4422 *
4423 * Please note that `MarkupKinds` must not start with a `$`. This kinds
4424 * are reserved for internal usage.
4425 */
4426var MarkupKind;
4427(function (MarkupKind) {
4428 /**
4429 * Plain text is supported as a content format
4430 */
4431 MarkupKind.PlainText = 'plaintext';
4432 /**
4433 * Markdown is supported as a content format
4434 */
4435 MarkupKind.Markdown = 'markdown';
4436})(MarkupKind || (MarkupKind = {}));
4437(function (MarkupKind) {
4438 /**
4439 * Checks whether the given value is a value of the [MarkupKind](#MarkupKind) type.
4440 */
4441 function is(value) {
4442 var candidate = value;
4443 return candidate === MarkupKind.PlainText || candidate === MarkupKind.Markdown;
4444 }
4445 MarkupKind.is = is;
4446})(MarkupKind || (MarkupKind = {}));
4447var MarkupContent;
4448(function (MarkupContent) {
4449 /**
4450 * Checks whether the given value conforms to the [MarkupContent](#MarkupContent) interface.
4451 */
4452 function is(value) {
4453 var candidate = value;
4454 return Is.objectLiteral(value) && MarkupKind.is(candidate.kind) && Is.string(candidate.value);
4455 }
4456 MarkupContent.is = is;
4457})(MarkupContent || (MarkupContent = {}));
4458/**
4459 * The kind of a completion entry.
4460 */
4461var CompletionItemKind;
4462(function (CompletionItemKind) {
4463 CompletionItemKind.Text = 1;
4464 CompletionItemKind.Method = 2;
4465 CompletionItemKind.Function = 3;
4466 CompletionItemKind.Constructor = 4;
4467 CompletionItemKind.Field = 5;
4468 CompletionItemKind.Variable = 6;
4469 CompletionItemKind.Class = 7;
4470 CompletionItemKind.Interface = 8;
4471 CompletionItemKind.Module = 9;
4472 CompletionItemKind.Property = 10;
4473 CompletionItemKind.Unit = 11;
4474 CompletionItemKind.Value = 12;
4475 CompletionItemKind.Enum = 13;
4476 CompletionItemKind.Keyword = 14;
4477 CompletionItemKind.Snippet = 15;
4478 CompletionItemKind.Color = 16;
4479 CompletionItemKind.File = 17;
4480 CompletionItemKind.Reference = 18;
4481 CompletionItemKind.Folder = 19;
4482 CompletionItemKind.EnumMember = 20;
4483 CompletionItemKind.Constant = 21;
4484 CompletionItemKind.Struct = 22;
4485 CompletionItemKind.Event = 23;
4486 CompletionItemKind.Operator = 24;
4487 CompletionItemKind.TypeParameter = 25;
4488})(CompletionItemKind || (CompletionItemKind = {}));
4489/**
4490 * Defines whether the insert text in a completion item should be interpreted as
4491 * plain text or a snippet.
4492 */
4493var InsertTextFormat;
4494(function (InsertTextFormat) {
4495 /**
4496 * The primary text to be inserted is treated as a plain string.
4497 */
4498 InsertTextFormat.PlainText = 1;
4499 /**
4500 * The primary text to be inserted is treated as a snippet.
4501 *
4502 * A snippet can define tab stops and placeholders with `$1`, `$2`
4503 * and `${3:foo}`. `$0` defines the final tab stop, it defaults to
4504 * the end of the snippet. Placeholders with equal identifiers are linked,
4505 * that is typing in one will update others too.
4506 *
4507 * See also: https://github.com/Microsoft/vscode/blob/master/src/vs/editor/contrib/snippet/common/snippet.md
4508 */
4509 InsertTextFormat.Snippet = 2;
4510})(InsertTextFormat || (InsertTextFormat = {}));
4511/**
4512 * Completion item tags are extra annotations that tweak the rendering of a completion
4513 * item.
4514 *
4515 * @since 3.15.0
4516 */
4517var CompletionItemTag;
4518(function (CompletionItemTag) {
4519 /**
4520 * Render a completion as obsolete, usually using a strike-out.
4521 */
4522 CompletionItemTag.Deprecated = 1;
4523})(CompletionItemTag || (CompletionItemTag = {}));
4524/**
4525 * The CompletionItem namespace provides functions to deal with
4526 * completion items.
4527 */
4528var CompletionItem;
4529(function (CompletionItem) {
4530 /**
4531 * Create a completion item and seed it with a label.
4532 * @param label The completion item's label
4533 */
4534 function create(label) {
4535 return { label: label };
4536 }
4537 CompletionItem.create = create;
4538})(CompletionItem || (CompletionItem = {}));
4539/**
4540 * The CompletionList namespace provides functions to deal with
4541 * completion lists.
4542 */
4543var CompletionList;
4544(function (CompletionList) {
4545 /**
4546 * Creates a new completion list.
4547 *
4548 * @param items The completion items.
4549 * @param isIncomplete The list is not complete.
4550 */
4551 function create(items, isIncomplete) {
4552 return { items: items ? items : [], isIncomplete: !!isIncomplete };
4553 }
4554 CompletionList.create = create;
4555})(CompletionList || (CompletionList = {}));
4556var MarkedString;
4557(function (MarkedString) {
4558 /**
4559 * Creates a marked string from plain text.
4560 *
4561 * @param plainText The plain text.
4562 */
4563 function fromPlainText(plainText) {
4564 return plainText.replace(/[\\`*_{}[\]()#+\-.!]/g, '\\$&'); // escape markdown syntax tokens: http://daringfireball.net/projects/markdown/syntax#backslash
4565 }
4566 MarkedString.fromPlainText = fromPlainText;
4567 /**
4568 * Checks whether the given value conforms to the [MarkedString](#MarkedString) type.
4569 */
4570 function is(value) {
4571 var candidate = value;
4572 return Is.string(candidate) || (Is.objectLiteral(candidate) && Is.string(candidate.language) && Is.string(candidate.value));
4573 }
4574 MarkedString.is = is;
4575})(MarkedString || (MarkedString = {}));
4576var Hover;
4577(function (Hover) {
4578 /**
4579 * Checks whether the given value conforms to the [Hover](#Hover) interface.
4580 */
4581 function is(value) {
4582 var candidate = value;
4583 return !!candidate && Is.objectLiteral(candidate) && (MarkupContent.is(candidate.contents) ||
4584 MarkedString.is(candidate.contents) ||
4585 Is.typedArray(candidate.contents, MarkedString.is)) && (value.range === void 0 || Range.is(value.range));
4586 }
4587 Hover.is = is;
4588})(Hover || (Hover = {}));
4589/**
4590 * The ParameterInformation namespace provides helper functions to work with
4591 * [ParameterInformation](#ParameterInformation) literals.
4592 */
4593var ParameterInformation;
4594(function (ParameterInformation) {
4595 /**
4596 * Creates a new parameter information literal.
4597 *
4598 * @param label A label string.
4599 * @param documentation A doc string.
4600 */
4601 function create(label, documentation) {
4602 return documentation ? { label: label, documentation: documentation } : { label: label };
4603 }
4604 ParameterInformation.create = create;
4605})(ParameterInformation || (ParameterInformation = {}));
4606/**
4607 * The SignatureInformation namespace provides helper functions to work with
4608 * [SignatureInformation](#SignatureInformation) literals.
4609 */
4610var SignatureInformation;
4611(function (SignatureInformation) {
4612 function create(label, documentation) {
4613 var parameters = [];
4614 for (var _i = 2; _i < arguments.length; _i++) {
4615 parameters[_i - 2] = arguments[_i];
4616 }
4617 var result = { label: label };
4618 if (Is.defined(documentation)) {
4619 result.documentation = documentation;
4620 }
4621 if (Is.defined(parameters)) {
4622 result.parameters = parameters;
4623 }
4624 else {
4625 result.parameters = [];
4626 }
4627 return result;
4628 }
4629 SignatureInformation.create = create;
4630})(SignatureInformation || (SignatureInformation = {}));
4631/**
4632 * A document highlight kind.
4633 */
4634var DocumentHighlightKind;
4635(function (DocumentHighlightKind) {
4636 /**
4637 * A textual occurrence.
4638 */
4639 DocumentHighlightKind.Text = 1;
4640 /**
4641 * Read-access of a symbol, like reading a variable.
4642 */
4643 DocumentHighlightKind.Read = 2;
4644 /**
4645 * Write-access of a symbol, like writing to a variable.
4646 */
4647 DocumentHighlightKind.Write = 3;
4648})(DocumentHighlightKind || (DocumentHighlightKind = {}));
4649/**
4650 * DocumentHighlight namespace to provide helper functions to work with
4651 * [DocumentHighlight](#DocumentHighlight) literals.
4652 */
4653var DocumentHighlight;
4654(function (DocumentHighlight) {
4655 /**
4656 * Create a DocumentHighlight object.
4657 * @param range The range the highlight applies to.
4658 */
4659 function create(range, kind) {
4660 var result = { range: range };
4661 if (Is.number(kind)) {
4662 result.kind = kind;
4663 }
4664 return result;
4665 }
4666 DocumentHighlight.create = create;
4667})(DocumentHighlight || (DocumentHighlight = {}));
4668/**
4669 * A symbol kind.
4670 */
4671var SymbolKind;
4672(function (SymbolKind) {
4673 SymbolKind.File = 1;
4674 SymbolKind.Module = 2;
4675 SymbolKind.Namespace = 3;
4676 SymbolKind.Package = 4;
4677 SymbolKind.Class = 5;
4678 SymbolKind.Method = 6;
4679 SymbolKind.Property = 7;
4680 SymbolKind.Field = 8;
4681 SymbolKind.Constructor = 9;
4682 SymbolKind.Enum = 10;
4683 SymbolKind.Interface = 11;
4684 SymbolKind.Function = 12;
4685 SymbolKind.Variable = 13;
4686 SymbolKind.Constant = 14;
4687 SymbolKind.String = 15;
4688 SymbolKind.Number = 16;
4689 SymbolKind.Boolean = 17;
4690 SymbolKind.Array = 18;
4691 SymbolKind.Object = 19;
4692 SymbolKind.Key = 20;
4693 SymbolKind.Null = 21;
4694 SymbolKind.EnumMember = 22;
4695 SymbolKind.Struct = 23;
4696 SymbolKind.Event = 24;
4697 SymbolKind.Operator = 25;
4698 SymbolKind.TypeParameter = 26;
4699})(SymbolKind || (SymbolKind = {}));
4700/**
4701 * Symbol tags are extra annotations that tweak the rendering of a symbol.
4702 * @since 3.15
4703 */
4704var SymbolTag;
4705(function (SymbolTag) {
4706 /**
4707 * Render a symbol as obsolete, usually using a strike-out.
4708 */
4709 SymbolTag.Deprecated = 1;
4710})(SymbolTag || (SymbolTag = {}));
4711var SymbolInformation;
4712(function (SymbolInformation) {
4713 /**
4714 * Creates a new symbol information literal.
4715 *
4716 * @param name The name of the symbol.
4717 * @param kind The kind of the symbol.
4718 * @param range The range of the location of the symbol.
4719 * @param uri The resource of the location of symbol, defaults to the current document.
4720 * @param containerName The name of the symbol containing the symbol.
4721 */
4722 function create(name, kind, range, uri, containerName) {
4723 var result = {
4724 name: name,
4725 kind: kind,
4726 location: { uri: uri, range: range }
4727 };
4728 if (containerName) {
4729 result.containerName = containerName;
4730 }
4731 return result;
4732 }
4733 SymbolInformation.create = create;
4734})(SymbolInformation || (SymbolInformation = {}));
4735var DocumentSymbol;
4736(function (DocumentSymbol) {
4737 /**
4738 * Creates a new symbol information literal.
4739 *
4740 * @param name The name of the symbol.
4741 * @param detail The detail of the symbol.
4742 * @param kind The kind of the symbol.
4743 * @param range The range of the symbol.
4744 * @param selectionRange The selectionRange of the symbol.
4745 * @param children Children of the symbol.
4746 */
4747 function create(name, detail, kind, range, selectionRange, children) {
4748 var result = {
4749 name: name,
4750 detail: detail,
4751 kind: kind,
4752 range: range,
4753 selectionRange: selectionRange
4754 };
4755 if (children !== void 0) {
4756 result.children = children;
4757 }
4758 return result;
4759 }
4760 DocumentSymbol.create = create;
4761 /**
4762 * Checks whether the given literal conforms to the [DocumentSymbol](#DocumentSymbol) interface.
4763 */
4764 function is(value) {
4765 var candidate = value;
4766 return candidate &&
4767 Is.string(candidate.name) && Is.number(candidate.kind) &&
4768 Range.is(candidate.range) && Range.is(candidate.selectionRange) &&
4769 (candidate.detail === void 0 || Is.string(candidate.detail)) &&
4770 (candidate.deprecated === void 0 || Is.boolean(candidate.deprecated)) &&
4771 (candidate.children === void 0 || Array.isArray(candidate.children));
4772 }
4773 DocumentSymbol.is = is;
4774})(DocumentSymbol || (DocumentSymbol = {}));
4775/**
4776 * A set of predefined code action kinds
4777 */
4778var CodeActionKind;
4779(function (CodeActionKind) {
4780 /**
4781 * Empty kind.
4782 */
4783 CodeActionKind.Empty = '';
4784 /**
4785 * Base kind for quickfix actions: 'quickfix'
4786 */
4787 CodeActionKind.QuickFix = 'quickfix';
4788 /**
4789 * Base kind for refactoring actions: 'refactor'
4790 */
4791 CodeActionKind.Refactor = 'refactor';
4792 /**
4793 * Base kind for refactoring extraction actions: 'refactor.extract'
4794 *
4795 * Example extract actions:
4796 *
4797 * - Extract method
4798 * - Extract function
4799 * - Extract variable
4800 * - Extract interface from class
4801 * - ...
4802 */
4803 CodeActionKind.RefactorExtract = 'refactor.extract';
4804 /**
4805 * Base kind for refactoring inline actions: 'refactor.inline'
4806 *
4807 * Example inline actions:
4808 *
4809 * - Inline function
4810 * - Inline variable
4811 * - Inline constant
4812 * - ...
4813 */
4814 CodeActionKind.RefactorInline = 'refactor.inline';
4815 /**
4816 * Base kind for refactoring rewrite actions: 'refactor.rewrite'
4817 *
4818 * Example rewrite actions:
4819 *
4820 * - Convert JavaScript function to class
4821 * - Add or remove parameter
4822 * - Encapsulate field
4823 * - Make method static
4824 * - Move method to base class
4825 * - ...
4826 */
4827 CodeActionKind.RefactorRewrite = 'refactor.rewrite';
4828 /**
4829 * Base kind for source actions: `source`
4830 *
4831 * Source code actions apply to the entire file.
4832 */
4833 CodeActionKind.Source = 'source';
4834 /**
4835 * Base kind for an organize imports source action: `source.organizeImports`
4836 */
4837 CodeActionKind.SourceOrganizeImports = 'source.organizeImports';
4838 /**
4839 * Base kind for auto-fix source actions: `source.fixAll`.
4840 *
4841 * Fix all actions automatically fix errors that have a clear fix that do not require user input.
4842 * They should not suppress errors or perform unsafe fixes such as generating new types or classes.
4843 *
4844 * @since 3.15.0
4845 */
4846 CodeActionKind.SourceFixAll = 'source.fixAll';
4847})(CodeActionKind || (CodeActionKind = {}));
4848/**
4849 * The CodeActionContext namespace provides helper functions to work with
4850 * [CodeActionContext](#CodeActionContext) literals.
4851 */
4852var CodeActionContext;
4853(function (CodeActionContext) {
4854 /**
4855 * Creates a new CodeActionContext literal.
4856 */
4857 function create(diagnostics, only) {
4858 var result = { diagnostics: diagnostics };
4859 if (only !== void 0 && only !== null) {
4860 result.only = only;
4861 }
4862 return result;
4863 }
4864 CodeActionContext.create = create;
4865 /**
4866 * Checks whether the given literal conforms to the [CodeActionContext](#CodeActionContext) interface.
4867 */
4868 function is(value) {
4869 var candidate = value;
4870 return Is.defined(candidate) && Is.typedArray(candidate.diagnostics, Diagnostic.is) && (candidate.only === void 0 || Is.typedArray(candidate.only, Is.string));
4871 }
4872 CodeActionContext.is = is;
4873})(CodeActionContext || (CodeActionContext = {}));
4874var CodeAction;
4875(function (CodeAction) {
4876 function create(title, commandOrEdit, kind) {
4877 var result = { title: title };
4878 if (Command.is(commandOrEdit)) {
4879 result.command = commandOrEdit;
4880 }
4881 else {
4882 result.edit = commandOrEdit;
4883 }
4884 if (kind !== void 0) {
4885 result.kind = kind;
4886 }
4887 return result;
4888 }
4889 CodeAction.create = create;
4890 function is(value) {
4891 var candidate = value;
4892 return candidate && Is.string(candidate.title) &&
4893 (candidate.diagnostics === void 0 || Is.typedArray(candidate.diagnostics, Diagnostic.is)) &&
4894 (candidate.kind === void 0 || Is.string(candidate.kind)) &&
4895 (candidate.edit !== void 0 || candidate.command !== void 0) &&
4896 (candidate.command === void 0 || Command.is(candidate.command)) &&
4897 (candidate.isPreferred === void 0 || Is.boolean(candidate.isPreferred)) &&
4898 (candidate.edit === void 0 || WorkspaceEdit.is(candidate.edit));
4899 }
4900 CodeAction.is = is;
4901})(CodeAction || (CodeAction = {}));
4902/**
4903 * The CodeLens namespace provides helper functions to work with
4904 * [CodeLens](#CodeLens) literals.
4905 */
4906var CodeLens;
4907(function (CodeLens) {
4908 /**
4909 * Creates a new CodeLens literal.
4910 */
4911 function create(range, data) {
4912 var result = { range: range };
4913 if (Is.defined(data)) {
4914 result.data = data;
4915 }
4916 return result;
4917 }
4918 CodeLens.create = create;
4919 /**
4920 * Checks whether the given literal conforms to the [CodeLens](#CodeLens) interface.
4921 */
4922 function is(value) {
4923 var candidate = value;
4924 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.command) || Command.is(candidate.command));
4925 }
4926 CodeLens.is = is;
4927})(CodeLens || (CodeLens = {}));
4928/**
4929 * The FormattingOptions namespace provides helper functions to work with
4930 * [FormattingOptions](#FormattingOptions) literals.
4931 */
4932var FormattingOptions;
4933(function (FormattingOptions) {
4934 /**
4935 * Creates a new FormattingOptions literal.
4936 */
4937 function create(tabSize, insertSpaces) {
4938 return { tabSize: tabSize, insertSpaces: insertSpaces };
4939 }
4940 FormattingOptions.create = create;
4941 /**
4942 * Checks whether the given literal conforms to the [FormattingOptions](#FormattingOptions) interface.
4943 */
4944 function is(value) {
4945 var candidate = value;
4946 return Is.defined(candidate) && Is.number(candidate.tabSize) && Is.boolean(candidate.insertSpaces);
4947 }
4948 FormattingOptions.is = is;
4949})(FormattingOptions || (FormattingOptions = {}));
4950/**
4951 * The DocumentLink namespace provides helper functions to work with
4952 * [DocumentLink](#DocumentLink) literals.
4953 */
4954var DocumentLink;
4955(function (DocumentLink) {
4956 /**
4957 * Creates a new DocumentLink literal.
4958 */
4959 function create(range, target, data) {
4960 return { range: range, target: target, data: data };
4961 }
4962 DocumentLink.create = create;
4963 /**
4964 * Checks whether the given literal conforms to the [DocumentLink](#DocumentLink) interface.
4965 */
4966 function is(value) {
4967 var candidate = value;
4968 return Is.defined(candidate) && Range.is(candidate.range) && (Is.undefined(candidate.target) || Is.string(candidate.target));
4969 }
4970 DocumentLink.is = is;
4971})(DocumentLink || (DocumentLink = {}));
4972/**
4973 * The SelectionRange namespace provides helper function to work with
4974 * SelectionRange literals.
4975 */
4976var SelectionRange;
4977(function (SelectionRange) {
4978 /**
4979 * Creates a new SelectionRange
4980 * @param range the range.
4981 * @param parent an optional parent.
4982 */
4983 function create(range, parent) {
4984 return { range: range, parent: parent };
4985 }
4986 SelectionRange.create = create;
4987 function is(value) {
4988 var candidate = value;
4989 return candidate !== undefined && Range.is(candidate.range) && (candidate.parent === undefined || SelectionRange.is(candidate.parent));
4990 }
4991 SelectionRange.is = is;
4992})(SelectionRange || (SelectionRange = {}));
4993var EOL = ['\n', '\r\n', '\r'];
4994/**
4995 * @deprecated Use the text document from the new vscode-languageserver-textdocument package.
4996 */
4997var TextDocument;
4998(function (TextDocument) {
4999 /**
5000 * Creates a new ITextDocument literal from the given uri and content.
5001 * @param uri The document's uri.
5002 * @param languageId The document's language Id.
5003 * @param content The document's content.
5004 */
5005 function create(uri, languageId, version, content) {
5006 return new FullTextDocument(uri, languageId, version, content);
5007 }
5008 TextDocument.create = create;
5009 /**
5010 * Checks whether the given literal conforms to the [ITextDocument](#ITextDocument) interface.
5011 */
5012 function is(value) {
5013 var candidate = value;
5014 return Is.defined(candidate) && Is.string(candidate.uri) && (Is.undefined(candidate.languageId) || Is.string(candidate.languageId)) && Is.number(candidate.lineCount)
5015 && Is.func(candidate.getText) && Is.func(candidate.positionAt) && Is.func(candidate.offsetAt) ? true : false;
5016 }
5017 TextDocument.is = is;
5018 function applyEdits(document, edits) {
5019 var text = document.getText();
5020 var sortedEdits = mergeSort(edits, function (a, b) {
5021 var diff = a.range.start.line - b.range.start.line;
5022 if (diff === 0) {
5023 return a.range.start.character - b.range.start.character;
5024 }
5025 return diff;
5026 });
5027 var lastModifiedOffset = text.length;
5028 for (var i = sortedEdits.length - 1; i >= 0; i--) {
5029 var e = sortedEdits[i];
5030 var startOffset = document.offsetAt(e.range.start);
5031 var endOffset = document.offsetAt(e.range.end);
5032 if (endOffset <= lastModifiedOffset) {
5033 text = text.substring(0, startOffset) + e.newText + text.substring(endOffset, text.length);
5034 }
5035 else {
5036 throw new Error('Overlapping edit');
5037 }
5038 lastModifiedOffset = startOffset;
5039 }
5040 return text;
5041 }
5042 TextDocument.applyEdits = applyEdits;
5043 function mergeSort(data, compare) {
5044 if (data.length <= 1) {
5045 // sorted
5046 return data;
5047 }
5048 var p = (data.length / 2) | 0;
5049 var left = data.slice(0, p);
5050 var right = data.slice(p);
5051 mergeSort(left, compare);
5052 mergeSort(right, compare);
5053 var leftIdx = 0;
5054 var rightIdx = 0;
5055 var i = 0;
5056 while (leftIdx < left.length && rightIdx < right.length) {
5057 var ret = compare(left[leftIdx], right[rightIdx]);
5058 if (ret <= 0) {
5059 // smaller_equal -> take left to preserve order
5060 data[i++] = left[leftIdx++];
5061 }
5062 else {
5063 // greater -> take right
5064 data[i++] = right[rightIdx++];
5065 }
5066 }
5067 while (leftIdx < left.length) {
5068 data[i++] = left[leftIdx++];
5069 }
5070 while (rightIdx < right.length) {
5071 data[i++] = right[rightIdx++];
5072 }
5073 return data;
5074 }
5075})(TextDocument || (TextDocument = {}));
5076var FullTextDocument = /** @class */ (function () {
5077 function FullTextDocument(uri, languageId, version, content) {
5078 this._uri = uri;
5079 this._languageId = languageId;
5080 this._version = version;
5081 this._content = content;
5082 this._lineOffsets = undefined;
5083 }
5084 Object.defineProperty(FullTextDocument.prototype, "uri", {
5085 get: function () {
5086 return this._uri;
5087 },
5088 enumerable: true,
5089 configurable: true
5090 });
5091 Object.defineProperty(FullTextDocument.prototype, "languageId", {
5092 get: function () {
5093 return this._languageId;
5094 },
5095 enumerable: true,
5096 configurable: true
5097 });
5098 Object.defineProperty(FullTextDocument.prototype, "version", {
5099 get: function () {
5100 return this._version;
5101 },
5102 enumerable: true,
5103 configurable: true
5104 });
5105 FullTextDocument.prototype.getText = function (range) {
5106 if (range) {
5107 var start = this.offsetAt(range.start);
5108 var end = this.offsetAt(range.end);
5109 return this._content.substring(start, end);
5110 }
5111 return this._content;
5112 };
5113 FullTextDocument.prototype.update = function (event, version) {
5114 this._content = event.text;
5115 this._version = version;
5116 this._lineOffsets = undefined;
5117 };
5118 FullTextDocument.prototype.getLineOffsets = function () {
5119 if (this._lineOffsets === undefined) {
5120 var lineOffsets = [];
5121 var text = this._content;
5122 var isLineStart = true;
5123 for (var i = 0; i < text.length; i++) {
5124 if (isLineStart) {
5125 lineOffsets.push(i);
5126 isLineStart = false;
5127 }
5128 var ch = text.charAt(i);
5129 isLineStart = (ch === '\r' || ch === '\n');
5130 if (ch === '\r' && i + 1 < text.length && text.charAt(i + 1) === '\n') {
5131 i++;
5132 }
5133 }
5134 if (isLineStart && text.length > 0) {
5135 lineOffsets.push(text.length);
5136 }
5137 this._lineOffsets = lineOffsets;
5138 }
5139 return this._lineOffsets;
5140 };
5141 FullTextDocument.prototype.positionAt = function (offset) {
5142 offset = Math.max(Math.min(offset, this._content.length), 0);
5143 var lineOffsets = this.getLineOffsets();
5144 var low = 0, high = lineOffsets.length;
5145 if (high === 0) {
5146 return Position.create(0, offset);
5147 }
5148 while (low < high) {
5149 var mid = Math.floor((low + high) / 2);
5150 if (lineOffsets[mid] > offset) {
5151 high = mid;
5152 }
5153 else {
5154 low = mid + 1;
5155 }
5156 }
5157 // low is the least x for which the line offset is larger than the current offset
5158 // or array.length if no line offset is larger than the current offset
5159 var line = low - 1;
5160 return Position.create(line, offset - lineOffsets[line]);
5161 };
5162 FullTextDocument.prototype.offsetAt = function (position) {
5163 var lineOffsets = this.getLineOffsets();
5164 if (position.line >= lineOffsets.length) {
5165 return this._content.length;
5166 }
5167 else if (position.line < 0) {
5168 return 0;
5169 }
5170 var lineOffset = lineOffsets[position.line];
5171 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
5172 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
5173 };
5174 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
5175 get: function () {
5176 return this.getLineOffsets().length;
5177 },
5178 enumerable: true,
5179 configurable: true
5180 });
5181 return FullTextDocument;
5182}());
5183var Is;
5184(function (Is) {
5185 var toString = Object.prototype.toString;
5186 function defined(value) {
5187 return typeof value !== 'undefined';
5188 }
5189 Is.defined = defined;
5190 function undefined(value) {
5191 return typeof value === 'undefined';
5192 }
5193 Is.undefined = undefined;
5194 function boolean(value) {
5195 return value === true || value === false;
5196 }
5197 Is.boolean = boolean;
5198 function string(value) {
5199 return toString.call(value) === '[object String]';
5200 }
5201 Is.string = string;
5202 function number(value) {
5203 return toString.call(value) === '[object Number]';
5204 }
5205 Is.number = number;
5206 function func(value) {
5207 return toString.call(value) === '[object Function]';
5208 }
5209 Is.func = func;
5210 function objectLiteral(value) {
5211 // Strictly speaking class instances pass this check as well. Since the LSP
5212 // doesn't use classes we ignore this for now. If we do we need to add something
5213 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5214 return value !== null && typeof value === 'object';
5215 }
5216 Is.objectLiteral = objectLiteral;
5217 function typedArray(value, check) {
5218 return Array.isArray(value) && value.every(check);
5219 }
5220 Is.typedArray = typedArray;
5221})(Is || (Is = {}));
5222
5223
5224/***/ }),
5225/* 19 */
5226/***/ (function(module, exports, __webpack_require__) {
5227
5228"use strict";
5229/* --------------------------------------------------------------------------------------------
5230 * Copyright (c) Microsoft Corporation. All rights reserved.
5231 * Licensed under the MIT License. See License.txt in the project root for license information.
5232 * ------------------------------------------------------------------------------------------ */
5233
5234Object.defineProperty(exports, "__esModule", { value: true });
5235const Is = __webpack_require__(20);
5236const vscode_jsonrpc_1 = __webpack_require__(4);
5237const messages_1 = __webpack_require__(21);
5238const protocol_implementation_1 = __webpack_require__(22);
5239exports.ImplementationRequest = protocol_implementation_1.ImplementationRequest;
5240const protocol_typeDefinition_1 = __webpack_require__(23);
5241exports.TypeDefinitionRequest = protocol_typeDefinition_1.TypeDefinitionRequest;
5242const protocol_workspaceFolders_1 = __webpack_require__(24);
5243exports.WorkspaceFoldersRequest = protocol_workspaceFolders_1.WorkspaceFoldersRequest;
5244exports.DidChangeWorkspaceFoldersNotification = protocol_workspaceFolders_1.DidChangeWorkspaceFoldersNotification;
5245const protocol_configuration_1 = __webpack_require__(25);
5246exports.ConfigurationRequest = protocol_configuration_1.ConfigurationRequest;
5247const protocol_colorProvider_1 = __webpack_require__(26);
5248exports.DocumentColorRequest = protocol_colorProvider_1.DocumentColorRequest;
5249exports.ColorPresentationRequest = protocol_colorProvider_1.ColorPresentationRequest;
5250const protocol_foldingRange_1 = __webpack_require__(27);
5251exports.FoldingRangeRequest = protocol_foldingRange_1.FoldingRangeRequest;
5252const protocol_declaration_1 = __webpack_require__(28);
5253exports.DeclarationRequest = protocol_declaration_1.DeclarationRequest;
5254const protocol_selectionRange_1 = __webpack_require__(29);
5255exports.SelectionRangeRequest = protocol_selectionRange_1.SelectionRangeRequest;
5256const protocol_progress_1 = __webpack_require__(30);
5257exports.WorkDoneProgress = protocol_progress_1.WorkDoneProgress;
5258exports.WorkDoneProgressCreateRequest = protocol_progress_1.WorkDoneProgressCreateRequest;
5259exports.WorkDoneProgressCancelNotification = protocol_progress_1.WorkDoneProgressCancelNotification;
5260// @ts-ignore: to avoid inlining LocatioLink as dynamic import
5261let __noDynamicImport;
5262/**
5263 * The DocumentFilter namespace provides helper functions to work with
5264 * [DocumentFilter](#DocumentFilter) literals.
5265 */
5266var DocumentFilter;
5267(function (DocumentFilter) {
5268 function is(value) {
5269 const candidate = value;
5270 return Is.string(candidate.language) || Is.string(candidate.scheme) || Is.string(candidate.pattern);
5271 }
5272 DocumentFilter.is = is;
5273})(DocumentFilter = exports.DocumentFilter || (exports.DocumentFilter = {}));
5274/**
5275 * The DocumentSelector namespace provides helper functions to work with
5276 * [DocumentSelector](#DocumentSelector)s.
5277 */
5278var DocumentSelector;
5279(function (DocumentSelector) {
5280 function is(value) {
5281 if (!Array.isArray(value)) {
5282 return false;
5283 }
5284 for (let elem of value) {
5285 if (!Is.string(elem) && !DocumentFilter.is(elem)) {
5286 return false;
5287 }
5288 }
5289 return true;
5290 }
5291 DocumentSelector.is = is;
5292})(DocumentSelector = exports.DocumentSelector || (exports.DocumentSelector = {}));
5293/**
5294 * The `client/registerCapability` request is sent from the server to the client to register a new capability
5295 * handler on the client side.
5296 */
5297var RegistrationRequest;
5298(function (RegistrationRequest) {
5299 RegistrationRequest.type = new messages_1.ProtocolRequestType('client/registerCapability');
5300})(RegistrationRequest = exports.RegistrationRequest || (exports.RegistrationRequest = {}));
5301/**
5302 * The `client/unregisterCapability` request is sent from the server to the client to unregister a previously registered capability
5303 * handler on the client side.
5304 */
5305var UnregistrationRequest;
5306(function (UnregistrationRequest) {
5307 UnregistrationRequest.type = new messages_1.ProtocolRequestType('client/unregisterCapability');
5308})(UnregistrationRequest = exports.UnregistrationRequest || (exports.UnregistrationRequest = {}));
5309var ResourceOperationKind;
5310(function (ResourceOperationKind) {
5311 /**
5312 * Supports creating new files and folders.
5313 */
5314 ResourceOperationKind.Create = 'create';
5315 /**
5316 * Supports renaming existing files and folders.
5317 */
5318 ResourceOperationKind.Rename = 'rename';
5319 /**
5320 * Supports deleting existing files and folders.
5321 */
5322 ResourceOperationKind.Delete = 'delete';
5323})(ResourceOperationKind = exports.ResourceOperationKind || (exports.ResourceOperationKind = {}));
5324var FailureHandlingKind;
5325(function (FailureHandlingKind) {
5326 /**
5327 * Applying the workspace change is simply aborted if one of the changes provided
5328 * fails. All operations executed before the failing operation stay executed.
5329 */
5330 FailureHandlingKind.Abort = 'abort';
5331 /**
5332 * All operations are executed transactional. That means they either all
5333 * succeed or no changes at all are applied to the workspace.
5334 */
5335 FailureHandlingKind.Transactional = 'transactional';
5336 /**
5337 * If the workspace edit contains only textual file changes they are executed transactional.
5338 * If resource changes (create, rename or delete file) are part of the change the failure
5339 * handling startegy is abort.
5340 */
5341 FailureHandlingKind.TextOnlyTransactional = 'textOnlyTransactional';
5342 /**
5343 * The client tries to undo the operations already executed. But there is no
5344 * guarantee that this is succeeding.
5345 */
5346 FailureHandlingKind.Undo = 'undo';
5347})(FailureHandlingKind = exports.FailureHandlingKind || (exports.FailureHandlingKind = {}));
5348/**
5349 * The StaticRegistrationOptions namespace provides helper functions to work with
5350 * [StaticRegistrationOptions](#StaticRegistrationOptions) literals.
5351 */
5352var StaticRegistrationOptions;
5353(function (StaticRegistrationOptions) {
5354 function hasId(value) {
5355 const candidate = value;
5356 return candidate && Is.string(candidate.id) && candidate.id.length > 0;
5357 }
5358 StaticRegistrationOptions.hasId = hasId;
5359})(StaticRegistrationOptions = exports.StaticRegistrationOptions || (exports.StaticRegistrationOptions = {}));
5360/**
5361 * The TextDocumentRegistrationOptions namespace provides helper functions to work with
5362 * [TextDocumentRegistrationOptions](#TextDocumentRegistrationOptions) literals.
5363 */
5364var TextDocumentRegistrationOptions;
5365(function (TextDocumentRegistrationOptions) {
5366 function is(value) {
5367 const candidate = value;
5368 return candidate && (candidate.documentSelector === null || DocumentSelector.is(candidate.documentSelector));
5369 }
5370 TextDocumentRegistrationOptions.is = is;
5371})(TextDocumentRegistrationOptions = exports.TextDocumentRegistrationOptions || (exports.TextDocumentRegistrationOptions = {}));
5372/**
5373 * The WorkDoneProgressOptions namespace provides helper functions to work with
5374 * [WorkDoneProgressOptions](#WorkDoneProgressOptions) literals.
5375 */
5376var WorkDoneProgressOptions;
5377(function (WorkDoneProgressOptions) {
5378 function is(value) {
5379 const candidate = value;
5380 return Is.objectLiteral(candidate) && (candidate.workDoneProgress === undefined || Is.boolean(candidate.workDoneProgress));
5381 }
5382 WorkDoneProgressOptions.is = is;
5383 function hasWorkDoneProgress(value) {
5384 const candidate = value;
5385 return candidate && Is.boolean(candidate.workDoneProgress);
5386 }
5387 WorkDoneProgressOptions.hasWorkDoneProgress = hasWorkDoneProgress;
5388})(WorkDoneProgressOptions = exports.WorkDoneProgressOptions || (exports.WorkDoneProgressOptions = {}));
5389/**
5390 * The initialize request is sent from the client to the server.
5391 * It is sent once as the request after starting up the server.
5392 * The requests parameter is of type [InitializeParams](#InitializeParams)
5393 * the response if of type [InitializeResult](#InitializeResult) of a Thenable that
5394 * resolves to such.
5395 */
5396var InitializeRequest;
5397(function (InitializeRequest) {
5398 InitializeRequest.type = new messages_1.ProtocolRequestType('initialize');
5399})(InitializeRequest = exports.InitializeRequest || (exports.InitializeRequest = {}));
5400/**
5401 * Known error codes for an `InitializeError`;
5402 */
5403var InitializeError;
5404(function (InitializeError) {
5405 /**
5406 * If the protocol version provided by the client can't be handled by the server.
5407 * @deprecated This initialize error got replaced by client capabilities. There is
5408 * no version handshake in version 3.0x
5409 */
5410 InitializeError.unknownProtocolVersion = 1;
5411})(InitializeError = exports.InitializeError || (exports.InitializeError = {}));
5412/**
5413 * The intialized notification is sent from the client to the
5414 * server after the client is fully initialized and the server
5415 * is allowed to send requests from the server to the client.
5416 */
5417var InitializedNotification;
5418(function (InitializedNotification) {
5419 InitializedNotification.type = new messages_1.ProtocolNotificationType('initialized');
5420})(InitializedNotification = exports.InitializedNotification || (exports.InitializedNotification = {}));
5421//---- Shutdown Method ----
5422/**
5423 * A shutdown request is sent from the client to the server.
5424 * It is sent once when the client decides to shutdown the
5425 * server. The only notification that is sent after a shutdown request
5426 * is the exit event.
5427 */
5428var ShutdownRequest;
5429(function (ShutdownRequest) {
5430 ShutdownRequest.type = new messages_1.ProtocolRequestType0('shutdown');
5431})(ShutdownRequest = exports.ShutdownRequest || (exports.ShutdownRequest = {}));
5432//---- Exit Notification ----
5433/**
5434 * The exit event is sent from the client to the server to
5435 * ask the server to exit its process.
5436 */
5437var ExitNotification;
5438(function (ExitNotification) {
5439 ExitNotification.type = new messages_1.ProtocolNotificationType0('exit');
5440})(ExitNotification = exports.ExitNotification || (exports.ExitNotification = {}));
5441/**
5442 * The configuration change notification is sent from the client to the server
5443 * when the client's configuration has changed. The notification contains
5444 * the changed configuration as defined by the language client.
5445 */
5446var DidChangeConfigurationNotification;
5447(function (DidChangeConfigurationNotification) {
5448 DidChangeConfigurationNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeConfiguration');
5449})(DidChangeConfigurationNotification = exports.DidChangeConfigurationNotification || (exports.DidChangeConfigurationNotification = {}));
5450//---- Message show and log notifications ----
5451/**
5452 * The message type
5453 */
5454var MessageType;
5455(function (MessageType) {
5456 /**
5457 * An error message.
5458 */
5459 MessageType.Error = 1;
5460 /**
5461 * A warning message.
5462 */
5463 MessageType.Warning = 2;
5464 /**
5465 * An information message.
5466 */
5467 MessageType.Info = 3;
5468 /**
5469 * A log message.
5470 */
5471 MessageType.Log = 4;
5472})(MessageType = exports.MessageType || (exports.MessageType = {}));
5473/**
5474 * The show message notification is sent from a server to a client to ask
5475 * the client to display a particular message in the user interface.
5476 */
5477var ShowMessageNotification;
5478(function (ShowMessageNotification) {
5479 ShowMessageNotification.type = new messages_1.ProtocolNotificationType('window/showMessage');
5480})(ShowMessageNotification = exports.ShowMessageNotification || (exports.ShowMessageNotification = {}));
5481/**
5482 * The show message request is sent from the server to the client to show a message
5483 * and a set of options actions to the user.
5484 */
5485var ShowMessageRequest;
5486(function (ShowMessageRequest) {
5487 ShowMessageRequest.type = new messages_1.ProtocolRequestType('window/showMessageRequest');
5488})(ShowMessageRequest = exports.ShowMessageRequest || (exports.ShowMessageRequest = {}));
5489/**
5490 * The log message notification is sent from the server to the client to ask
5491 * the client to log a particular message.
5492 */
5493var LogMessageNotification;
5494(function (LogMessageNotification) {
5495 LogMessageNotification.type = new messages_1.ProtocolNotificationType('window/logMessage');
5496})(LogMessageNotification = exports.LogMessageNotification || (exports.LogMessageNotification = {}));
5497//---- Telemetry notification
5498/**
5499 * The telemetry event notification is sent from the server to the client to ask
5500 * the client to log telemetry data.
5501 */
5502var TelemetryEventNotification;
5503(function (TelemetryEventNotification) {
5504 TelemetryEventNotification.type = new messages_1.ProtocolNotificationType('telemetry/event');
5505})(TelemetryEventNotification = exports.TelemetryEventNotification || (exports.TelemetryEventNotification = {}));
5506/**
5507 * Defines how the host (editor) should sync
5508 * document changes to the language server.
5509 */
5510var TextDocumentSyncKind;
5511(function (TextDocumentSyncKind) {
5512 /**
5513 * Documents should not be synced at all.
5514 */
5515 TextDocumentSyncKind.None = 0;
5516 /**
5517 * Documents are synced by always sending the full content
5518 * of the document.
5519 */
5520 TextDocumentSyncKind.Full = 1;
5521 /**
5522 * Documents are synced by sending the full content on open.
5523 * After that only incremental updates to the document are
5524 * send.
5525 */
5526 TextDocumentSyncKind.Incremental = 2;
5527})(TextDocumentSyncKind = exports.TextDocumentSyncKind || (exports.TextDocumentSyncKind = {}));
5528/**
5529 * The document open notification is sent from the client to the server to signal
5530 * newly opened text documents. The document's truth is now managed by the client
5531 * and the server must not try to read the document's truth using the document's
5532 * uri. Open in this sense means it is managed by the client. It doesn't necessarily
5533 * mean that its content is presented in an editor. An open notification must not
5534 * be sent more than once without a corresponding close notification send before.
5535 * This means open and close notification must be balanced and the max open count
5536 * is one.
5537 */
5538var DidOpenTextDocumentNotification;
5539(function (DidOpenTextDocumentNotification) {
5540 DidOpenTextDocumentNotification.method = 'textDocument/didOpen';
5541 DidOpenTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidOpenTextDocumentNotification.method);
5542})(DidOpenTextDocumentNotification = exports.DidOpenTextDocumentNotification || (exports.DidOpenTextDocumentNotification = {}));
5543/**
5544 * The document change notification is sent from the client to the server to signal
5545 * changes to a text document.
5546 */
5547var DidChangeTextDocumentNotification;
5548(function (DidChangeTextDocumentNotification) {
5549 DidChangeTextDocumentNotification.method = 'textDocument/didChange';
5550 DidChangeTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidChangeTextDocumentNotification.method);
5551})(DidChangeTextDocumentNotification = exports.DidChangeTextDocumentNotification || (exports.DidChangeTextDocumentNotification = {}));
5552/**
5553 * The document close notification is sent from the client to the server when
5554 * the document got closed in the client. The document's truth now exists where
5555 * the document's uri points to (e.g. if the document's uri is a file uri the
5556 * truth now exists on disk). As with the open notification the close notification
5557 * is about managing the document's content. Receiving a close notification
5558 * doesn't mean that the document was open in an editor before. A close
5559 * notification requires a previous open notification to be sent.
5560 */
5561var DidCloseTextDocumentNotification;
5562(function (DidCloseTextDocumentNotification) {
5563 DidCloseTextDocumentNotification.method = 'textDocument/didClose';
5564 DidCloseTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidCloseTextDocumentNotification.method);
5565})(DidCloseTextDocumentNotification = exports.DidCloseTextDocumentNotification || (exports.DidCloseTextDocumentNotification = {}));
5566/**
5567 * The document save notification is sent from the client to the server when
5568 * the document got saved in the client.
5569 */
5570var DidSaveTextDocumentNotification;
5571(function (DidSaveTextDocumentNotification) {
5572 DidSaveTextDocumentNotification.method = 'textDocument/didSave';
5573 DidSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(DidSaveTextDocumentNotification.method);
5574})(DidSaveTextDocumentNotification = exports.DidSaveTextDocumentNotification || (exports.DidSaveTextDocumentNotification = {}));
5575/**
5576 * Represents reasons why a text document is saved.
5577 */
5578var TextDocumentSaveReason;
5579(function (TextDocumentSaveReason) {
5580 /**
5581 * Manually triggered, e.g. by the user pressing save, by starting debugging,
5582 * or by an API call.
5583 */
5584 TextDocumentSaveReason.Manual = 1;
5585 /**
5586 * Automatic after a delay.
5587 */
5588 TextDocumentSaveReason.AfterDelay = 2;
5589 /**
5590 * When the editor lost focus.
5591 */
5592 TextDocumentSaveReason.FocusOut = 3;
5593})(TextDocumentSaveReason = exports.TextDocumentSaveReason || (exports.TextDocumentSaveReason = {}));
5594/**
5595 * A document will save notification is sent from the client to the server before
5596 * the document is actually saved.
5597 */
5598var WillSaveTextDocumentNotification;
5599(function (WillSaveTextDocumentNotification) {
5600 WillSaveTextDocumentNotification.method = 'textDocument/willSave';
5601 WillSaveTextDocumentNotification.type = new messages_1.ProtocolNotificationType(WillSaveTextDocumentNotification.method);
5602})(WillSaveTextDocumentNotification = exports.WillSaveTextDocumentNotification || (exports.WillSaveTextDocumentNotification = {}));
5603/**
5604 * A document will save request is sent from the client to the server before
5605 * the document is actually saved. The request can return an array of TextEdits
5606 * which will be applied to the text document before it is saved. Please note that
5607 * clients might drop results if computing the text edits took too long or if a
5608 * server constantly fails on this request. This is done to keep the save fast and
5609 * reliable.
5610 */
5611var WillSaveTextDocumentWaitUntilRequest;
5612(function (WillSaveTextDocumentWaitUntilRequest) {
5613 WillSaveTextDocumentWaitUntilRequest.method = 'textDocument/willSaveWaitUntil';
5614 WillSaveTextDocumentWaitUntilRequest.type = new messages_1.ProtocolRequestType(WillSaveTextDocumentWaitUntilRequest.method);
5615})(WillSaveTextDocumentWaitUntilRequest = exports.WillSaveTextDocumentWaitUntilRequest || (exports.WillSaveTextDocumentWaitUntilRequest = {}));
5616/**
5617 * The watched files notification is sent from the client to the server when
5618 * the client detects changes to file watched by the language client.
5619 */
5620var DidChangeWatchedFilesNotification;
5621(function (DidChangeWatchedFilesNotification) {
5622 DidChangeWatchedFilesNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWatchedFiles');
5623})(DidChangeWatchedFilesNotification = exports.DidChangeWatchedFilesNotification || (exports.DidChangeWatchedFilesNotification = {}));
5624/**
5625 * The file event type
5626 */
5627var FileChangeType;
5628(function (FileChangeType) {
5629 /**
5630 * The file got created.
5631 */
5632 FileChangeType.Created = 1;
5633 /**
5634 * The file got changed.
5635 */
5636 FileChangeType.Changed = 2;
5637 /**
5638 * The file got deleted.
5639 */
5640 FileChangeType.Deleted = 3;
5641})(FileChangeType = exports.FileChangeType || (exports.FileChangeType = {}));
5642var WatchKind;
5643(function (WatchKind) {
5644 /**
5645 * Interested in create events.
5646 */
5647 WatchKind.Create = 1;
5648 /**
5649 * Interested in change events
5650 */
5651 WatchKind.Change = 2;
5652 /**
5653 * Interested in delete events
5654 */
5655 WatchKind.Delete = 4;
5656})(WatchKind = exports.WatchKind || (exports.WatchKind = {}));
5657/**
5658 * Diagnostics notification are sent from the server to the client to signal
5659 * results of validation runs.
5660 */
5661var PublishDiagnosticsNotification;
5662(function (PublishDiagnosticsNotification) {
5663 PublishDiagnosticsNotification.type = new messages_1.ProtocolNotificationType('textDocument/publishDiagnostics');
5664})(PublishDiagnosticsNotification = exports.PublishDiagnosticsNotification || (exports.PublishDiagnosticsNotification = {}));
5665/**
5666 * How a completion was triggered
5667 */
5668var CompletionTriggerKind;
5669(function (CompletionTriggerKind) {
5670 /**
5671 * Completion was triggered by typing an identifier (24x7 code
5672 * complete), manual invocation (e.g Ctrl+Space) or via API.
5673 */
5674 CompletionTriggerKind.Invoked = 1;
5675 /**
5676 * Completion was triggered by a trigger character specified by
5677 * the `triggerCharacters` properties of the `CompletionRegistrationOptions`.
5678 */
5679 CompletionTriggerKind.TriggerCharacter = 2;
5680 /**
5681 * Completion was re-triggered as current completion list is incomplete
5682 */
5683 CompletionTriggerKind.TriggerForIncompleteCompletions = 3;
5684})(CompletionTriggerKind = exports.CompletionTriggerKind || (exports.CompletionTriggerKind = {}));
5685/**
5686 * Request to request completion at a given text document position. The request's
5687 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response
5688 * is of type [CompletionItem[]](#CompletionItem) or [CompletionList](#CompletionList)
5689 * or a Thenable that resolves to such.
5690 *
5691 * The request can delay the computation of the [`detail`](#CompletionItem.detail)
5692 * and [`documentation`](#CompletionItem.documentation) properties to the `completionItem/resolve`
5693 * request. However, properties that are needed for the initial sorting and filtering, like `sortText`,
5694 * `filterText`, `insertText`, and `textEdit`, must not be changed during resolve.
5695 */
5696var CompletionRequest;
5697(function (CompletionRequest) {
5698 CompletionRequest.method = 'textDocument/completion';
5699 CompletionRequest.type = new messages_1.ProtocolRequestType(CompletionRequest.method);
5700 /** @deprecated Use CompletionRequest.type */
5701 CompletionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5702})(CompletionRequest = exports.CompletionRequest || (exports.CompletionRequest = {}));
5703/**
5704 * Request to resolve additional information for a given completion item.The request's
5705 * parameter is of type [CompletionItem](#CompletionItem) the response
5706 * is of type [CompletionItem](#CompletionItem) or a Thenable that resolves to such.
5707 */
5708var CompletionResolveRequest;
5709(function (CompletionResolveRequest) {
5710 CompletionResolveRequest.method = 'completionItem/resolve';
5711 CompletionResolveRequest.type = new messages_1.ProtocolRequestType(CompletionResolveRequest.method);
5712})(CompletionResolveRequest = exports.CompletionResolveRequest || (exports.CompletionResolveRequest = {}));
5713/**
5714 * Request to request hover information at a given text document position. The request's
5715 * parameter is of type [TextDocumentPosition](#TextDocumentPosition) the response is of
5716 * type [Hover](#Hover) or a Thenable that resolves to such.
5717 */
5718var HoverRequest;
5719(function (HoverRequest) {
5720 HoverRequest.method = 'textDocument/hover';
5721 HoverRequest.type = new messages_1.ProtocolRequestType(HoverRequest.method);
5722})(HoverRequest = exports.HoverRequest || (exports.HoverRequest = {}));
5723/**
5724 * How a signature help was triggered.
5725 *
5726 * @since 3.15.0
5727 */
5728var SignatureHelpTriggerKind;
5729(function (SignatureHelpTriggerKind) {
5730 /**
5731 * Signature help was invoked manually by the user or by a command.
5732 */
5733 SignatureHelpTriggerKind.Invoked = 1;
5734 /**
5735 * Signature help was triggered by a trigger character.
5736 */
5737 SignatureHelpTriggerKind.TriggerCharacter = 2;
5738 /**
5739 * Signature help was triggered by the cursor moving or by the document content changing.
5740 */
5741 SignatureHelpTriggerKind.ContentChange = 3;
5742})(SignatureHelpTriggerKind = exports.SignatureHelpTriggerKind || (exports.SignatureHelpTriggerKind = {}));
5743var SignatureHelpRequest;
5744(function (SignatureHelpRequest) {
5745 SignatureHelpRequest.method = 'textDocument/signatureHelp';
5746 SignatureHelpRequest.type = new messages_1.ProtocolRequestType(SignatureHelpRequest.method);
5747})(SignatureHelpRequest = exports.SignatureHelpRequest || (exports.SignatureHelpRequest = {}));
5748/**
5749 * A request to resolve the definition location of a symbol at a given text
5750 * document position. The request's parameter is of type [TextDocumentPosition]
5751 * (#TextDocumentPosition) the response is of either type [Definition](#Definition)
5752 * or a typed array of [DefinitionLink](#DefinitionLink) or a Thenable that resolves
5753 * to such.
5754 */
5755var DefinitionRequest;
5756(function (DefinitionRequest) {
5757 DefinitionRequest.method = 'textDocument/definition';
5758 DefinitionRequest.type = new messages_1.ProtocolRequestType(DefinitionRequest.method);
5759 /** @deprecated Use DefinitionRequest.type */
5760 DefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5761})(DefinitionRequest = exports.DefinitionRequest || (exports.DefinitionRequest = {}));
5762/**
5763 * A request to resolve project-wide references for the symbol denoted
5764 * by the given text document position. The request's parameter is of
5765 * type [ReferenceParams](#ReferenceParams) the response is of type
5766 * [Location[]](#Location) or a Thenable that resolves to such.
5767 */
5768var ReferencesRequest;
5769(function (ReferencesRequest) {
5770 ReferencesRequest.method = 'textDocument/references';
5771 ReferencesRequest.type = new messages_1.ProtocolRequestType(ReferencesRequest.method);
5772 /** @deprecated Use ReferencesRequest.type */
5773 ReferencesRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5774})(ReferencesRequest = exports.ReferencesRequest || (exports.ReferencesRequest = {}));
5775/**
5776 * Request to resolve a [DocumentHighlight](#DocumentHighlight) for a given
5777 * text document position. The request's parameter is of type [TextDocumentPosition]
5778 * (#TextDocumentPosition) the request response is of type [DocumentHighlight[]]
5779 * (#DocumentHighlight) or a Thenable that resolves to such.
5780 */
5781var DocumentHighlightRequest;
5782(function (DocumentHighlightRequest) {
5783 DocumentHighlightRequest.method = 'textDocument/documentHighlight';
5784 DocumentHighlightRequest.type = new messages_1.ProtocolRequestType(DocumentHighlightRequest.method);
5785 /** @deprecated Use DocumentHighlightRequest.type */
5786 DocumentHighlightRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5787})(DocumentHighlightRequest = exports.DocumentHighlightRequest || (exports.DocumentHighlightRequest = {}));
5788/**
5789 * A request to list all symbols found in a given text document. The request's
5790 * parameter is of type [TextDocumentIdentifier](#TextDocumentIdentifier) the
5791 * response is of type [SymbolInformation[]](#SymbolInformation) or a Thenable
5792 * that resolves to such.
5793 */
5794var DocumentSymbolRequest;
5795(function (DocumentSymbolRequest) {
5796 DocumentSymbolRequest.method = 'textDocument/documentSymbol';
5797 DocumentSymbolRequest.type = new messages_1.ProtocolRequestType(DocumentSymbolRequest.method);
5798 /** @deprecated Use DocumentSymbolRequest.type */
5799 DocumentSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5800})(DocumentSymbolRequest = exports.DocumentSymbolRequest || (exports.DocumentSymbolRequest = {}));
5801/**
5802 * A request to provide commands for the given text document and range.
5803 */
5804var CodeActionRequest;
5805(function (CodeActionRequest) {
5806 CodeActionRequest.method = 'textDocument/codeAction';
5807 CodeActionRequest.type = new messages_1.ProtocolRequestType(CodeActionRequest.method);
5808 /** @deprecated Use CodeActionRequest.type */
5809 CodeActionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5810})(CodeActionRequest = exports.CodeActionRequest || (exports.CodeActionRequest = {}));
5811/**
5812 * A request to list project-wide symbols matching the query string given
5813 * by the [WorkspaceSymbolParams](#WorkspaceSymbolParams). The response is
5814 * of type [SymbolInformation[]](#SymbolInformation) or a Thenable that
5815 * resolves to such.
5816 */
5817var WorkspaceSymbolRequest;
5818(function (WorkspaceSymbolRequest) {
5819 WorkspaceSymbolRequest.method = 'workspace/symbol';
5820 WorkspaceSymbolRequest.type = new messages_1.ProtocolRequestType(WorkspaceSymbolRequest.method);
5821 /** @deprecated Use WorkspaceSymbolRequest.type */
5822 WorkspaceSymbolRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5823})(WorkspaceSymbolRequest = exports.WorkspaceSymbolRequest || (exports.WorkspaceSymbolRequest = {}));
5824/**
5825 * A request to provide code lens for the given text document.
5826 */
5827var CodeLensRequest;
5828(function (CodeLensRequest) {
5829 CodeLensRequest.type = new messages_1.ProtocolRequestType('textDocument/codeLens');
5830 /** @deprecated Use CodeLensRequest.type */
5831 CodeLensRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5832})(CodeLensRequest = exports.CodeLensRequest || (exports.CodeLensRequest = {}));
5833/**
5834 * A request to resolve a command for a given code lens.
5835 */
5836var CodeLensResolveRequest;
5837(function (CodeLensResolveRequest) {
5838 CodeLensResolveRequest.type = new messages_1.ProtocolRequestType('codeLens/resolve');
5839})(CodeLensResolveRequest = exports.CodeLensResolveRequest || (exports.CodeLensResolveRequest = {}));
5840/**
5841 * A request to provide document links
5842 */
5843var DocumentLinkRequest;
5844(function (DocumentLinkRequest) {
5845 DocumentLinkRequest.method = 'textDocument/documentLink';
5846 DocumentLinkRequest.type = new messages_1.ProtocolRequestType(DocumentLinkRequest.method);
5847 /** @deprecated Use DocumentLinkRequest.type */
5848 DocumentLinkRequest.resultType = new vscode_jsonrpc_1.ProgressType();
5849})(DocumentLinkRequest = exports.DocumentLinkRequest || (exports.DocumentLinkRequest = {}));
5850/**
5851 * Request to resolve additional information for a given document link. The request's
5852 * parameter is of type [DocumentLink](#DocumentLink) the response
5853 * is of type [DocumentLink](#DocumentLink) or a Thenable that resolves to such.
5854 */
5855var DocumentLinkResolveRequest;
5856(function (DocumentLinkResolveRequest) {
5857 DocumentLinkResolveRequest.type = new messages_1.ProtocolRequestType('documentLink/resolve');
5858})(DocumentLinkResolveRequest = exports.DocumentLinkResolveRequest || (exports.DocumentLinkResolveRequest = {}));
5859/**
5860 * A request to to format a whole document.
5861 */
5862var DocumentFormattingRequest;
5863(function (DocumentFormattingRequest) {
5864 DocumentFormattingRequest.method = 'textDocument/formatting';
5865 DocumentFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentFormattingRequest.method);
5866})(DocumentFormattingRequest = exports.DocumentFormattingRequest || (exports.DocumentFormattingRequest = {}));
5867/**
5868 * A request to to format a range in a document.
5869 */
5870var DocumentRangeFormattingRequest;
5871(function (DocumentRangeFormattingRequest) {
5872 DocumentRangeFormattingRequest.method = 'textDocument/rangeFormatting';
5873 DocumentRangeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentRangeFormattingRequest.method);
5874})(DocumentRangeFormattingRequest = exports.DocumentRangeFormattingRequest || (exports.DocumentRangeFormattingRequest = {}));
5875/**
5876 * A request to format a document on type.
5877 */
5878var DocumentOnTypeFormattingRequest;
5879(function (DocumentOnTypeFormattingRequest) {
5880 DocumentOnTypeFormattingRequest.method = 'textDocument/onTypeFormatting';
5881 DocumentOnTypeFormattingRequest.type = new messages_1.ProtocolRequestType(DocumentOnTypeFormattingRequest.method);
5882})(DocumentOnTypeFormattingRequest = exports.DocumentOnTypeFormattingRequest || (exports.DocumentOnTypeFormattingRequest = {}));
5883/**
5884 * A request to rename a symbol.
5885 */
5886var RenameRequest;
5887(function (RenameRequest) {
5888 RenameRequest.method = 'textDocument/rename';
5889 RenameRequest.type = new messages_1.ProtocolRequestType(RenameRequest.method);
5890})(RenameRequest = exports.RenameRequest || (exports.RenameRequest = {}));
5891/**
5892 * A request to test and perform the setup necessary for a rename.
5893 */
5894var PrepareRenameRequest;
5895(function (PrepareRenameRequest) {
5896 PrepareRenameRequest.method = 'textDocument/prepareRename';
5897 PrepareRenameRequest.type = new messages_1.ProtocolRequestType(PrepareRenameRequest.method);
5898})(PrepareRenameRequest = exports.PrepareRenameRequest || (exports.PrepareRenameRequest = {}));
5899/**
5900 * A request send from the client to the server to execute a command. The request might return
5901 * a workspace edit which the client will apply to the workspace.
5902 */
5903var ExecuteCommandRequest;
5904(function (ExecuteCommandRequest) {
5905 ExecuteCommandRequest.type = new messages_1.ProtocolRequestType('workspace/executeCommand');
5906})(ExecuteCommandRequest = exports.ExecuteCommandRequest || (exports.ExecuteCommandRequest = {}));
5907/**
5908 * A request sent from the server to the client to modified certain resources.
5909 */
5910var ApplyWorkspaceEditRequest;
5911(function (ApplyWorkspaceEditRequest) {
5912 ApplyWorkspaceEditRequest.type = new messages_1.ProtocolRequestType('workspace/applyEdit');
5913})(ApplyWorkspaceEditRequest = exports.ApplyWorkspaceEditRequest || (exports.ApplyWorkspaceEditRequest = {}));
5914
5915
5916/***/ }),
5917/* 20 */
5918/***/ (function(module, exports, __webpack_require__) {
5919
5920"use strict";
5921/* --------------------------------------------------------------------------------------------
5922 * Copyright (c) Microsoft Corporation. All rights reserved.
5923 * Licensed under the MIT License. See License.txt in the project root for license information.
5924 * ------------------------------------------------------------------------------------------ */
5925
5926Object.defineProperty(exports, "__esModule", { value: true });
5927function boolean(value) {
5928 return value === true || value === false;
5929}
5930exports.boolean = boolean;
5931function string(value) {
5932 return typeof value === 'string' || value instanceof String;
5933}
5934exports.string = string;
5935function number(value) {
5936 return typeof value === 'number' || value instanceof Number;
5937}
5938exports.number = number;
5939function error(value) {
5940 return value instanceof Error;
5941}
5942exports.error = error;
5943function func(value) {
5944 return typeof value === 'function';
5945}
5946exports.func = func;
5947function array(value) {
5948 return Array.isArray(value);
5949}
5950exports.array = array;
5951function stringArray(value) {
5952 return array(value) && value.every(elem => string(elem));
5953}
5954exports.stringArray = stringArray;
5955function typedArray(value, check) {
5956 return Array.isArray(value) && value.every(check);
5957}
5958exports.typedArray = typedArray;
5959function objectLiteral(value) {
5960 // Strictly speaking class instances pass this check as well. Since the LSP
5961 // doesn't use classes we ignore this for now. If we do we need to add something
5962 // like this: `Object.getPrototypeOf(Object.getPrototypeOf(x)) === null`
5963 return value !== null && typeof value === 'object';
5964}
5965exports.objectLiteral = objectLiteral;
5966
5967
5968/***/ }),
5969/* 21 */
5970/***/ (function(module, exports, __webpack_require__) {
5971
5972"use strict";
5973/* --------------------------------------------------------------------------------------------
5974 * Copyright (c) Microsoft Corporation. All rights reserved.
5975 * Licensed under the MIT License. See License.txt in the project root for license information.
5976 * ------------------------------------------------------------------------------------------ */
5977
5978Object.defineProperty(exports, "__esModule", { value: true });
5979const vscode_jsonrpc_1 = __webpack_require__(4);
5980class ProtocolRequestType0 extends vscode_jsonrpc_1.RequestType0 {
5981 constructor(method) {
5982 super(method);
5983 }
5984}
5985exports.ProtocolRequestType0 = ProtocolRequestType0;
5986class ProtocolRequestType extends vscode_jsonrpc_1.RequestType {
5987 constructor(method) {
5988 super(method);
5989 }
5990}
5991exports.ProtocolRequestType = ProtocolRequestType;
5992class ProtocolNotificationType extends vscode_jsonrpc_1.NotificationType {
5993 constructor(method) {
5994 super(method);
5995 }
5996}
5997exports.ProtocolNotificationType = ProtocolNotificationType;
5998class ProtocolNotificationType0 extends vscode_jsonrpc_1.NotificationType0 {
5999 constructor(method) {
6000 super(method);
6001 }
6002}
6003exports.ProtocolNotificationType0 = ProtocolNotificationType0;
6004
6005
6006/***/ }),
6007/* 22 */
6008/***/ (function(module, exports, __webpack_require__) {
6009
6010"use strict";
6011/* --------------------------------------------------------------------------------------------
6012 * Copyright (c) Microsoft Corporation. All rights reserved.
6013 * Licensed under the MIT License. See License.txt in the project root for license information.
6014 * ------------------------------------------------------------------------------------------ */
6015
6016Object.defineProperty(exports, "__esModule", { value: true });
6017const vscode_jsonrpc_1 = __webpack_require__(4);
6018const messages_1 = __webpack_require__(21);
6019// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6020let __noDynamicImport;
6021/**
6022 * A request to resolve the implementation locations of a symbol at a given text
6023 * document position. The request's parameter is of type [TextDocumentPositioParams]
6024 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6025 * Thenable that resolves to such.
6026 */
6027var ImplementationRequest;
6028(function (ImplementationRequest) {
6029 ImplementationRequest.method = 'textDocument/implementation';
6030 ImplementationRequest.type = new messages_1.ProtocolRequestType(ImplementationRequest.method);
6031 /** @deprecated Use ImplementationRequest.type */
6032 ImplementationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6033})(ImplementationRequest = exports.ImplementationRequest || (exports.ImplementationRequest = {}));
6034
6035
6036/***/ }),
6037/* 23 */
6038/***/ (function(module, exports, __webpack_require__) {
6039
6040"use strict";
6041/* --------------------------------------------------------------------------------------------
6042 * Copyright (c) Microsoft Corporation. All rights reserved.
6043 * Licensed under the MIT License. See License.txt in the project root for license information.
6044 * ------------------------------------------------------------------------------------------ */
6045
6046Object.defineProperty(exports, "__esModule", { value: true });
6047const vscode_jsonrpc_1 = __webpack_require__(4);
6048const messages_1 = __webpack_require__(21);
6049// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6050let __noDynamicImport;
6051/**
6052 * A request to resolve the type definition locations of a symbol at a given text
6053 * document position. The request's parameter is of type [TextDocumentPositioParams]
6054 * (#TextDocumentPositionParams) the response is of type [Definition](#Definition) or a
6055 * Thenable that resolves to such.
6056 */
6057var TypeDefinitionRequest;
6058(function (TypeDefinitionRequest) {
6059 TypeDefinitionRequest.method = 'textDocument/typeDefinition';
6060 TypeDefinitionRequest.type = new messages_1.ProtocolRequestType(TypeDefinitionRequest.method);
6061 /** @deprecated Use TypeDefinitionRequest.type */
6062 TypeDefinitionRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6063})(TypeDefinitionRequest = exports.TypeDefinitionRequest || (exports.TypeDefinitionRequest = {}));
6064
6065
6066/***/ }),
6067/* 24 */
6068/***/ (function(module, exports, __webpack_require__) {
6069
6070"use strict";
6071/* --------------------------------------------------------------------------------------------
6072 * Copyright (c) Microsoft Corporation. All rights reserved.
6073 * Licensed under the MIT License. See License.txt in the project root for license information.
6074 * ------------------------------------------------------------------------------------------ */
6075
6076Object.defineProperty(exports, "__esModule", { value: true });
6077const messages_1 = __webpack_require__(21);
6078/**
6079 * The `workspace/workspaceFolders` is sent from the server to the client to fetch the open workspace folders.
6080 */
6081var WorkspaceFoldersRequest;
6082(function (WorkspaceFoldersRequest) {
6083 WorkspaceFoldersRequest.type = new messages_1.ProtocolRequestType0('workspace/workspaceFolders');
6084})(WorkspaceFoldersRequest = exports.WorkspaceFoldersRequest || (exports.WorkspaceFoldersRequest = {}));
6085/**
6086 * The `workspace/didChangeWorkspaceFolders` notification is sent from the client to the server when the workspace
6087 * folder configuration changes.
6088 */
6089var DidChangeWorkspaceFoldersNotification;
6090(function (DidChangeWorkspaceFoldersNotification) {
6091 DidChangeWorkspaceFoldersNotification.type = new messages_1.ProtocolNotificationType('workspace/didChangeWorkspaceFolders');
6092})(DidChangeWorkspaceFoldersNotification = exports.DidChangeWorkspaceFoldersNotification || (exports.DidChangeWorkspaceFoldersNotification = {}));
6093
6094
6095/***/ }),
6096/* 25 */
6097/***/ (function(module, exports, __webpack_require__) {
6098
6099"use strict";
6100/* --------------------------------------------------------------------------------------------
6101 * Copyright (c) Microsoft Corporation. All rights reserved.
6102 * Licensed under the MIT License. See License.txt in the project root for license information.
6103 * ------------------------------------------------------------------------------------------ */
6104
6105Object.defineProperty(exports, "__esModule", { value: true });
6106const messages_1 = __webpack_require__(21);
6107/**
6108 * The 'workspace/configuration' request is sent from the server to the client to fetch a certain
6109 * configuration setting.
6110 *
6111 * This pull model replaces the old push model were the client signaled configuration change via an
6112 * event. If the server still needs to react to configuration changes (since the server caches the
6113 * result of `workspace/configuration` requests) the server should register for an empty configuration
6114 * change event and empty the cache if such an event is received.
6115 */
6116var ConfigurationRequest;
6117(function (ConfigurationRequest) {
6118 ConfigurationRequest.type = new messages_1.ProtocolRequestType('workspace/configuration');
6119})(ConfigurationRequest = exports.ConfigurationRequest || (exports.ConfigurationRequest = {}));
6120
6121
6122/***/ }),
6123/* 26 */
6124/***/ (function(module, exports, __webpack_require__) {
6125
6126"use strict";
6127/* --------------------------------------------------------------------------------------------
6128 * Copyright (c) Microsoft Corporation. All rights reserved.
6129 * Licensed under the MIT License. See License.txt in the project root for license information.
6130 * ------------------------------------------------------------------------------------------ */
6131
6132Object.defineProperty(exports, "__esModule", { value: true });
6133const vscode_jsonrpc_1 = __webpack_require__(4);
6134const messages_1 = __webpack_require__(21);
6135/**
6136 * A request to list all color symbols found in a given text document. The request's
6137 * parameter is of type [DocumentColorParams](#DocumentColorParams) the
6138 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6139 * that resolves to such.
6140 */
6141var DocumentColorRequest;
6142(function (DocumentColorRequest) {
6143 DocumentColorRequest.method = 'textDocument/documentColor';
6144 DocumentColorRequest.type = new messages_1.ProtocolRequestType(DocumentColorRequest.method);
6145 /** @deprecated Use DocumentColorRequest.type */
6146 DocumentColorRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6147})(DocumentColorRequest = exports.DocumentColorRequest || (exports.DocumentColorRequest = {}));
6148/**
6149 * A request to list all presentation for a color. The request's
6150 * parameter is of type [ColorPresentationParams](#ColorPresentationParams) the
6151 * response is of type [ColorInformation[]](#ColorInformation) or a Thenable
6152 * that resolves to such.
6153 */
6154var ColorPresentationRequest;
6155(function (ColorPresentationRequest) {
6156 ColorPresentationRequest.type = new messages_1.ProtocolRequestType('textDocument/colorPresentation');
6157})(ColorPresentationRequest = exports.ColorPresentationRequest || (exports.ColorPresentationRequest = {}));
6158
6159
6160/***/ }),
6161/* 27 */
6162/***/ (function(module, exports, __webpack_require__) {
6163
6164"use strict";
6165
6166/*---------------------------------------------------------------------------------------------
6167 * Copyright (c) Microsoft Corporation. All rights reserved.
6168 * Licensed under the MIT License. See License.txt in the project root for license information.
6169 *--------------------------------------------------------------------------------------------*/
6170Object.defineProperty(exports, "__esModule", { value: true });
6171const vscode_jsonrpc_1 = __webpack_require__(4);
6172const messages_1 = __webpack_require__(21);
6173/**
6174 * Enum of known range kinds
6175 */
6176var FoldingRangeKind;
6177(function (FoldingRangeKind) {
6178 /**
6179 * Folding range for a comment
6180 */
6181 FoldingRangeKind["Comment"] = "comment";
6182 /**
6183 * Folding range for a imports or includes
6184 */
6185 FoldingRangeKind["Imports"] = "imports";
6186 /**
6187 * Folding range for a region (e.g. `#region`)
6188 */
6189 FoldingRangeKind["Region"] = "region";
6190})(FoldingRangeKind = exports.FoldingRangeKind || (exports.FoldingRangeKind = {}));
6191/**
6192 * A request to provide folding ranges in a document. The request's
6193 * parameter is of type [FoldingRangeParams](#FoldingRangeParams), the
6194 * response is of type [FoldingRangeList](#FoldingRangeList) or a Thenable
6195 * that resolves to such.
6196 */
6197var FoldingRangeRequest;
6198(function (FoldingRangeRequest) {
6199 FoldingRangeRequest.method = 'textDocument/foldingRange';
6200 FoldingRangeRequest.type = new messages_1.ProtocolRequestType(FoldingRangeRequest.method);
6201 /** @deprecated Use FoldingRangeRequest.type */
6202 FoldingRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6203})(FoldingRangeRequest = exports.FoldingRangeRequest || (exports.FoldingRangeRequest = {}));
6204
6205
6206/***/ }),
6207/* 28 */
6208/***/ (function(module, exports, __webpack_require__) {
6209
6210"use strict";
6211/* --------------------------------------------------------------------------------------------
6212 * Copyright (c) Microsoft Corporation. All rights reserved.
6213 * Licensed under the MIT License. See License.txt in the project root for license information.
6214 * ------------------------------------------------------------------------------------------ */
6215
6216Object.defineProperty(exports, "__esModule", { value: true });
6217const vscode_jsonrpc_1 = __webpack_require__(4);
6218const messages_1 = __webpack_require__(21);
6219// @ts-ignore: to avoid inlining LocatioLink as dynamic import
6220let __noDynamicImport;
6221/**
6222 * A request to resolve the type definition locations of a symbol at a given text
6223 * document position. The request's parameter is of type [TextDocumentPositioParams]
6224 * (#TextDocumentPositionParams) the response is of type [Declaration](#Declaration)
6225 * or a typed array of [DeclarationLink](#DeclarationLink) or a Thenable that resolves
6226 * to such.
6227 */
6228var DeclarationRequest;
6229(function (DeclarationRequest) {
6230 DeclarationRequest.method = 'textDocument/declaration';
6231 DeclarationRequest.type = new messages_1.ProtocolRequestType(DeclarationRequest.method);
6232 /** @deprecated Use DeclarationRequest.type */
6233 DeclarationRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6234})(DeclarationRequest = exports.DeclarationRequest || (exports.DeclarationRequest = {}));
6235
6236
6237/***/ }),
6238/* 29 */
6239/***/ (function(module, exports, __webpack_require__) {
6240
6241"use strict";
6242
6243/*---------------------------------------------------------------------------------------------
6244 * Copyright (c) Microsoft Corporation. All rights reserved.
6245 * Licensed under the MIT License. See License.txt in the project root for license information.
6246 *--------------------------------------------------------------------------------------------*/
6247Object.defineProperty(exports, "__esModule", { value: true });
6248const vscode_jsonrpc_1 = __webpack_require__(4);
6249const messages_1 = __webpack_require__(21);
6250/**
6251 * A request to provide selection ranges in a document. The request's
6252 * parameter is of type [SelectionRangeParams](#SelectionRangeParams), the
6253 * response is of type [SelectionRange[]](#SelectionRange[]) or a Thenable
6254 * that resolves to such.
6255 */
6256var SelectionRangeRequest;
6257(function (SelectionRangeRequest) {
6258 SelectionRangeRequest.method = 'textDocument/selectionRange';
6259 SelectionRangeRequest.type = new messages_1.ProtocolRequestType(SelectionRangeRequest.method);
6260 /** @deprecated Use SelectionRangeRequest.type */
6261 SelectionRangeRequest.resultType = new vscode_jsonrpc_1.ProgressType();
6262})(SelectionRangeRequest = exports.SelectionRangeRequest || (exports.SelectionRangeRequest = {}));
6263
6264
6265/***/ }),
6266/* 30 */
6267/***/ (function(module, exports, __webpack_require__) {
6268
6269"use strict";
6270/* --------------------------------------------------------------------------------------------
6271 * Copyright (c) Microsoft Corporation. All rights reserved.
6272 * Licensed under the MIT License. See License.txt in the project root for license information.
6273 * ------------------------------------------------------------------------------------------ */
6274
6275Object.defineProperty(exports, "__esModule", { value: true });
6276const vscode_jsonrpc_1 = __webpack_require__(4);
6277const messages_1 = __webpack_require__(21);
6278var WorkDoneProgress;
6279(function (WorkDoneProgress) {
6280 WorkDoneProgress.type = new vscode_jsonrpc_1.ProgressType();
6281})(WorkDoneProgress = exports.WorkDoneProgress || (exports.WorkDoneProgress = {}));
6282/**
6283 * The `window/workDoneProgress/create` request is sent from the server to the client to initiate progress
6284 * reporting from the server.
6285 */
6286var WorkDoneProgressCreateRequest;
6287(function (WorkDoneProgressCreateRequest) {
6288 WorkDoneProgressCreateRequest.type = new messages_1.ProtocolRequestType('window/workDoneProgress/create');
6289})(WorkDoneProgressCreateRequest = exports.WorkDoneProgressCreateRequest || (exports.WorkDoneProgressCreateRequest = {}));
6290/**
6291 * The `window/workDoneProgress/cancel` notification is sent from the client to the server to cancel a progress
6292 * initiated on the server side.
6293 */
6294var WorkDoneProgressCancelNotification;
6295(function (WorkDoneProgressCancelNotification) {
6296 WorkDoneProgressCancelNotification.type = new messages_1.ProtocolNotificationType('window/workDoneProgress/cancel');
6297})(WorkDoneProgressCancelNotification = exports.WorkDoneProgressCancelNotification || (exports.WorkDoneProgressCancelNotification = {}));
6298
6299
6300/***/ }),
6301/* 31 */
6302/***/ (function(module, exports, __webpack_require__) {
6303
6304"use strict";
6305/* --------------------------------------------------------------------------------------------
6306 * Copyright (c) TypeFox and others. All rights reserved.
6307 * Licensed under the MIT License. See License.txt in the project root for license information.
6308 * ------------------------------------------------------------------------------------------ */
6309
6310Object.defineProperty(exports, "__esModule", { value: true });
6311const messages_1 = __webpack_require__(21);
6312/**
6313 * A request to result a `CallHierarchyItem` in a document at a given position.
6314 * Can be used as an input to a incoming or outgoing call hierarchy.
6315 *
6316 * @since 3.16.0 - Proposed state
6317 */
6318var CallHierarchyPrepareRequest;
6319(function (CallHierarchyPrepareRequest) {
6320 CallHierarchyPrepareRequest.method = 'textDocument/prepareCallHierarchy';
6321 CallHierarchyPrepareRequest.type = new messages_1.ProtocolRequestType(CallHierarchyPrepareRequest.method);
6322})(CallHierarchyPrepareRequest = exports.CallHierarchyPrepareRequest || (exports.CallHierarchyPrepareRequest = {}));
6323/**
6324 * A request to resolve the incoming calls for a given `CallHierarchyItem`.
6325 *
6326 * @since 3.16.0 - Proposed state
6327 */
6328var CallHierarchyIncomingCallsRequest;
6329(function (CallHierarchyIncomingCallsRequest) {
6330 CallHierarchyIncomingCallsRequest.method = 'callHierarchy/incomingCalls';
6331 CallHierarchyIncomingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyIncomingCallsRequest.method);
6332})(CallHierarchyIncomingCallsRequest = exports.CallHierarchyIncomingCallsRequest || (exports.CallHierarchyIncomingCallsRequest = {}));
6333/**
6334 * A request to resolve the outgoing calls for a given `CallHierarchyItem`.
6335 *
6336 * @since 3.16.0 - Proposed state
6337 */
6338var CallHierarchyOutgoingCallsRequest;
6339(function (CallHierarchyOutgoingCallsRequest) {
6340 CallHierarchyOutgoingCallsRequest.method = 'callHierarchy/outgoingCalls';
6341 CallHierarchyOutgoingCallsRequest.type = new messages_1.ProtocolRequestType(CallHierarchyOutgoingCallsRequest.method);
6342})(CallHierarchyOutgoingCallsRequest = exports.CallHierarchyOutgoingCallsRequest || (exports.CallHierarchyOutgoingCallsRequest = {}));
6343
6344
6345/***/ }),
6346/* 32 */
6347/***/ (function(module, exports, __webpack_require__) {
6348
6349"use strict";
6350/* --------------------------------------------------------------------------------------------
6351 * Copyright (c) Microsoft Corporation. All rights reserved.
6352 * Licensed under the MIT License. See License.txt in the project root for license information.
6353 * ------------------------------------------------------------------------------------------ */
6354
6355Object.defineProperty(exports, "__esModule", { value: true });
6356const messages_1 = __webpack_require__(21);
6357/**
6358 * A set of predefined token types. This set is not fixed
6359 * an clients can specify additional token types via the
6360 * corresponding client capabilities.
6361 *
6362 * @since 3.16.0 - Proposed state
6363 */
6364var SemanticTokenTypes;
6365(function (SemanticTokenTypes) {
6366 SemanticTokenTypes["comment"] = "comment";
6367 SemanticTokenTypes["keyword"] = "keyword";
6368 SemanticTokenTypes["string"] = "string";
6369 SemanticTokenTypes["number"] = "number";
6370 SemanticTokenTypes["regexp"] = "regexp";
6371 SemanticTokenTypes["operator"] = "operator";
6372 SemanticTokenTypes["namespace"] = "namespace";
6373 SemanticTokenTypes["type"] = "type";
6374 SemanticTokenTypes["struct"] = "struct";
6375 SemanticTokenTypes["class"] = "class";
6376 SemanticTokenTypes["interface"] = "interface";
6377 SemanticTokenTypes["enum"] = "enum";
6378 SemanticTokenTypes["typeParameter"] = "typeParameter";
6379 SemanticTokenTypes["function"] = "function";
6380 SemanticTokenTypes["member"] = "member";
6381 SemanticTokenTypes["property"] = "property";
6382 SemanticTokenTypes["macro"] = "macro";
6383 SemanticTokenTypes["variable"] = "variable";
6384 SemanticTokenTypes["parameter"] = "parameter";
6385 SemanticTokenTypes["label"] = "label";
6386})(SemanticTokenTypes = exports.SemanticTokenTypes || (exports.SemanticTokenTypes = {}));
6387/**
6388 * A set of predefined token modifiers. This set is not fixed
6389 * an clients can specify additional token types via the
6390 * corresponding client capabilities.
6391 *
6392 * @since 3.16.0 - Proposed state
6393 */
6394var SemanticTokenModifiers;
6395(function (SemanticTokenModifiers) {
6396 SemanticTokenModifiers["documentation"] = "documentation";
6397 SemanticTokenModifiers["declaration"] = "declaration";
6398 SemanticTokenModifiers["definition"] = "definition";
6399 SemanticTokenModifiers["reference"] = "reference";
6400 SemanticTokenModifiers["static"] = "static";
6401 SemanticTokenModifiers["abstract"] = "abstract";
6402 SemanticTokenModifiers["deprecated"] = "deprecated";
6403 SemanticTokenModifiers["async"] = "async";
6404 SemanticTokenModifiers["volatile"] = "volatile";
6405 SemanticTokenModifiers["readonly"] = "readonly";
6406})(SemanticTokenModifiers = exports.SemanticTokenModifiers || (exports.SemanticTokenModifiers = {}));
6407/**
6408 * @since 3.16.0 - Proposed state
6409 */
6410var SemanticTokens;
6411(function (SemanticTokens) {
6412 function is(value) {
6413 const candidate = value;
6414 return candidate !== undefined && (candidate.resultId === undefined || typeof candidate.resultId === 'string') &&
6415 Array.isArray(candidate.data) && (candidate.data.length === 0 || typeof candidate.data[0] === 'number');
6416 }
6417 SemanticTokens.is = is;
6418})(SemanticTokens = exports.SemanticTokens || (exports.SemanticTokens = {}));
6419/**
6420 * @since 3.16.0 - Proposed state
6421 */
6422var SemanticTokensRequest;
6423(function (SemanticTokensRequest) {
6424 SemanticTokensRequest.method = 'textDocument/semanticTokens';
6425 SemanticTokensRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRequest.method);
6426})(SemanticTokensRequest = exports.SemanticTokensRequest || (exports.SemanticTokensRequest = {}));
6427/**
6428 * @since 3.16.0 - Proposed state
6429 */
6430var SemanticTokensEditsRequest;
6431(function (SemanticTokensEditsRequest) {
6432 SemanticTokensEditsRequest.method = 'textDocument/semanticTokens/edits';
6433 SemanticTokensEditsRequest.type = new messages_1.ProtocolRequestType(SemanticTokensEditsRequest.method);
6434})(SemanticTokensEditsRequest = exports.SemanticTokensEditsRequest || (exports.SemanticTokensEditsRequest = {}));
6435/**
6436 * @since 3.16.0 - Proposed state
6437 */
6438var SemanticTokensRangeRequest;
6439(function (SemanticTokensRangeRequest) {
6440 SemanticTokensRangeRequest.method = 'textDocument/semanticTokens/range';
6441 SemanticTokensRangeRequest.type = new messages_1.ProtocolRequestType(SemanticTokensRangeRequest.method);
6442})(SemanticTokensRangeRequest = exports.SemanticTokensRangeRequest || (exports.SemanticTokensRangeRequest = {}));
6443
6444
6445/***/ }),
6446/* 33 */
6447/***/ (function(module, exports, __webpack_require__) {
6448
6449"use strict";
6450/* --------------------------------------------------------------------------------------------
6451 * Copyright (c) Microsoft Corporation. All rights reserved.
6452 * Licensed under the MIT License. See License.txt in the project root for license information.
6453 * ------------------------------------------------------------------------------------------ */
6454
6455Object.defineProperty(exports, "__esModule", { value: true });
6456const vscode_languageserver_protocol_1 = __webpack_require__(3);
6457const Is = __webpack_require__(34);
6458exports.ConfigurationFeature = (Base) => {
6459 return class extends Base {
6460 getConfiguration(arg) {
6461 if (!arg) {
6462 return this._getConfiguration({});
6463 }
6464 else if (Is.string(arg)) {
6465 return this._getConfiguration({ section: arg });
6466 }
6467 else {
6468 return this._getConfiguration(arg);
6469 }
6470 }
6471 _getConfiguration(arg) {
6472 let params = {
6473 items: Array.isArray(arg) ? arg : [arg]
6474 };
6475 return this.connection.sendRequest(vscode_languageserver_protocol_1.ConfigurationRequest.type, params).then((result) => {
6476 return Array.isArray(arg) ? result : result[0];
6477 });
6478 }
6479 };
6480};
6481//# sourceMappingURL=configuration.js.map
6482
6483/***/ }),
6484/* 34 */
6485/***/ (function(module, exports, __webpack_require__) {
6486
6487"use strict";
6488/* --------------------------------------------------------------------------------------------
6489 * Copyright (c) Microsoft Corporation. All rights reserved.
6490 * Licensed under the MIT License. See License.txt in the project root for license information.
6491 * ------------------------------------------------------------------------------------------ */
6492
6493Object.defineProperty(exports, "__esModule", { value: true });
6494function boolean(value) {
6495 return value === true || value === false;
6496}
6497exports.boolean = boolean;
6498function string(value) {
6499 return typeof value === 'string' || value instanceof String;
6500}
6501exports.string = string;
6502function number(value) {
6503 return typeof value === 'number' || value instanceof Number;
6504}
6505exports.number = number;
6506function error(value) {
6507 return value instanceof Error;
6508}
6509exports.error = error;
6510function func(value) {
6511 return typeof value === 'function';
6512}
6513exports.func = func;
6514function array(value) {
6515 return Array.isArray(value);
6516}
6517exports.array = array;
6518function stringArray(value) {
6519 return array(value) && value.every(elem => string(elem));
6520}
6521exports.stringArray = stringArray;
6522function typedArray(value, check) {
6523 return Array.isArray(value) && value.every(check);
6524}
6525exports.typedArray = typedArray;
6526function thenable(value) {
6527 return value && func(value.then);
6528}
6529exports.thenable = thenable;
6530//# sourceMappingURL=is.js.map
6531
6532/***/ }),
6533/* 35 */
6534/***/ (function(module, exports, __webpack_require__) {
6535
6536"use strict";
6537/* --------------------------------------------------------------------------------------------
6538 * Copyright (c) Microsoft Corporation. All rights reserved.
6539 * Licensed under the MIT License. See License.txt in the project root for license information.
6540 * ------------------------------------------------------------------------------------------ */
6541
6542Object.defineProperty(exports, "__esModule", { value: true });
6543const vscode_languageserver_protocol_1 = __webpack_require__(3);
6544exports.WorkspaceFoldersFeature = (Base) => {
6545 return class extends Base {
6546 initialize(capabilities) {
6547 let workspaceCapabilities = capabilities.workspace;
6548 if (workspaceCapabilities && workspaceCapabilities.workspaceFolders) {
6549 this._onDidChangeWorkspaceFolders = new vscode_languageserver_protocol_1.Emitter();
6550 this.connection.onNotification(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type, (params) => {
6551 this._onDidChangeWorkspaceFolders.fire(params.event);
6552 });
6553 }
6554 }
6555 getWorkspaceFolders() {
6556 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkspaceFoldersRequest.type);
6557 }
6558 get onDidChangeWorkspaceFolders() {
6559 if (!this._onDidChangeWorkspaceFolders) {
6560 throw new Error('Client doesn\'t support sending workspace folder change events.');
6561 }
6562 if (!this._unregistration) {
6563 this._unregistration = this.connection.client.register(vscode_languageserver_protocol_1.DidChangeWorkspaceFoldersNotification.type);
6564 }
6565 return this._onDidChangeWorkspaceFolders.event;
6566 }
6567 };
6568};
6569//# sourceMappingURL=workspaceFolders.js.map
6570
6571/***/ }),
6572/* 36 */
6573/***/ (function(module, exports, __webpack_require__) {
6574
6575"use strict";
6576/* --------------------------------------------------------------------------------------------
6577 * Copyright (c) Microsoft Corporation. All rights reserved.
6578 * Licensed under the MIT License. See License.txt in the project root for license information.
6579 * ------------------------------------------------------------------------------------------ */
6580
6581Object.defineProperty(exports, "__esModule", { value: true });
6582const vscode_languageserver_protocol_1 = __webpack_require__(3);
6583const uuid_1 = __webpack_require__(37);
6584class WorkDoneProgressImpl {
6585 constructor(_connection, _token) {
6586 this._connection = _connection;
6587 this._token = _token;
6588 WorkDoneProgressImpl.Instances.set(this._token, this);
6589 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6590 }
6591 get token() {
6592 return this._source.token;
6593 }
6594 begin(title, percentage, message, cancellable) {
6595 let param = {
6596 kind: 'begin',
6597 title,
6598 percentage,
6599 message,
6600 cancellable
6601 };
6602 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6603 }
6604 report(arg0, arg1) {
6605 let param = {
6606 kind: 'report'
6607 };
6608 if (typeof arg0 === 'number') {
6609 param.percentage = arg0;
6610 if (arg1 !== undefined) {
6611 param.message = arg1;
6612 }
6613 }
6614 else {
6615 param.message = arg0;
6616 }
6617 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, param);
6618 }
6619 done() {
6620 WorkDoneProgressImpl.Instances.delete(this._token);
6621 this._source.dispose();
6622 this._connection.sendProgress(vscode_languageserver_protocol_1.WorkDoneProgress.type, this._token, { kind: 'end' });
6623 }
6624 cancel() {
6625 this._source.cancel();
6626 }
6627}
6628WorkDoneProgressImpl.Instances = new Map();
6629class NullProgress {
6630 constructor() {
6631 this._source = new vscode_languageserver_protocol_1.CancellationTokenSource();
6632 }
6633 get token() {
6634 return this._source.token;
6635 }
6636 begin() {
6637 }
6638 report() {
6639 }
6640 done() {
6641 }
6642}
6643function attachWorkDone(connection, params) {
6644 if (params === undefined || params.workDoneToken === undefined) {
6645 return new NullProgress();
6646 }
6647 const token = params.workDoneToken;
6648 delete params.workDoneToken;
6649 return new WorkDoneProgressImpl(connection, token);
6650}
6651exports.attachWorkDone = attachWorkDone;
6652exports.ProgressFeature = (Base) => {
6653 return class extends Base {
6654 initialize(capabilities) {
6655 var _a;
6656 if (((_a = capabilities === null || capabilities === void 0 ? void 0 : capabilities.window) === null || _a === void 0 ? void 0 : _a.workDoneProgress) === true) {
6657 this._progressSupported = true;
6658 this.connection.onNotification(vscode_languageserver_protocol_1.WorkDoneProgressCancelNotification.type, (params) => {
6659 let progress = WorkDoneProgressImpl.Instances.get(params.token);
6660 if (progress !== undefined) {
6661 progress.cancel();
6662 }
6663 });
6664 }
6665 }
6666 attachWorkDoneProgress(token) {
6667 if (token === undefined) {
6668 return new NullProgress();
6669 }
6670 else {
6671 return new WorkDoneProgressImpl(this.connection, token);
6672 }
6673 }
6674 createWorkDoneProgress() {
6675 if (this._progressSupported) {
6676 const token = uuid_1.generateUuid();
6677 return this.connection.sendRequest(vscode_languageserver_protocol_1.WorkDoneProgressCreateRequest.type, { token }).then(() => {
6678 const result = new WorkDoneProgressImpl(this.connection, token);
6679 return result;
6680 });
6681 }
6682 else {
6683 return Promise.resolve(new NullProgress());
6684 }
6685 }
6686 };
6687};
6688var ResultProgress;
6689(function (ResultProgress) {
6690 ResultProgress.type = new vscode_languageserver_protocol_1.ProgressType();
6691})(ResultProgress || (ResultProgress = {}));
6692class ResultProgressImpl {
6693 constructor(_connection, _token) {
6694 this._connection = _connection;
6695 this._token = _token;
6696 }
6697 report(data) {
6698 this._connection.sendProgress(ResultProgress.type, this._token, data);
6699 }
6700}
6701function attachPartialResult(connection, params) {
6702 if (params === undefined || params.partialResultToken === undefined) {
6703 return undefined;
6704 }
6705 const token = params.partialResultToken;
6706 delete params.partialResultToken;
6707 return new ResultProgressImpl(connection, token);
6708}
6709exports.attachPartialResult = attachPartialResult;
6710//# sourceMappingURL=progress.js.map
6711
6712/***/ }),
6713/* 37 */
6714/***/ (function(module, exports, __webpack_require__) {
6715
6716"use strict";
6717/*---------------------------------------------------------------------------------------------
6718 * Copyright (c) Microsoft Corporation. All rights reserved.
6719 * Licensed under the MIT License. See License.txt in the project root for license information.
6720 *--------------------------------------------------------------------------------------------*/
6721
6722Object.defineProperty(exports, "__esModule", { value: true });
6723class ValueUUID {
6724 constructor(_value) {
6725 this._value = _value;
6726 // empty
6727 }
6728 asHex() {
6729 return this._value;
6730 }
6731 equals(other) {
6732 return this.asHex() === other.asHex();
6733 }
6734}
6735class V4UUID extends ValueUUID {
6736 constructor() {
6737 super([
6738 V4UUID._randomHex(),
6739 V4UUID._randomHex(),
6740 V4UUID._randomHex(),
6741 V4UUID._randomHex(),
6742 V4UUID._randomHex(),
6743 V4UUID._randomHex(),
6744 V4UUID._randomHex(),
6745 V4UUID._randomHex(),
6746 '-',
6747 V4UUID._randomHex(),
6748 V4UUID._randomHex(),
6749 V4UUID._randomHex(),
6750 V4UUID._randomHex(),
6751 '-',
6752 '4',
6753 V4UUID._randomHex(),
6754 V4UUID._randomHex(),
6755 V4UUID._randomHex(),
6756 '-',
6757 V4UUID._oneOf(V4UUID._timeHighBits),
6758 V4UUID._randomHex(),
6759 V4UUID._randomHex(),
6760 V4UUID._randomHex(),
6761 '-',
6762 V4UUID._randomHex(),
6763 V4UUID._randomHex(),
6764 V4UUID._randomHex(),
6765 V4UUID._randomHex(),
6766 V4UUID._randomHex(),
6767 V4UUID._randomHex(),
6768 V4UUID._randomHex(),
6769 V4UUID._randomHex(),
6770 V4UUID._randomHex(),
6771 V4UUID._randomHex(),
6772 V4UUID._randomHex(),
6773 V4UUID._randomHex(),
6774 ].join(''));
6775 }
6776 static _oneOf(array) {
6777 return array[Math.floor(array.length * Math.random())];
6778 }
6779 static _randomHex() {
6780 return V4UUID._oneOf(V4UUID._chars);
6781 }
6782}
6783V4UUID._chars = ['0', '1', '2', '3', '4', '5', '6', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'];
6784V4UUID._timeHighBits = ['8', '9', 'a', 'b'];
6785/**
6786 * An empty UUID that contains only zeros.
6787 */
6788exports.empty = new ValueUUID('00000000-0000-0000-0000-000000000000');
6789function v4() {
6790 return new V4UUID();
6791}
6792exports.v4 = v4;
6793const _UUIDPattern = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6794function isUUID(value) {
6795 return _UUIDPattern.test(value);
6796}
6797exports.isUUID = isUUID;
6798/**
6799 * Parses a UUID that is of the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
6800 * @param value A uuid string.
6801 */
6802function parse(value) {
6803 if (!isUUID(value)) {
6804 throw new Error('invalid uuid');
6805 }
6806 return new ValueUUID(value);
6807}
6808exports.parse = parse;
6809function generateUuid() {
6810 return v4().asHex();
6811}
6812exports.generateUuid = generateUuid;
6813//# sourceMappingURL=uuid.js.map
6814
6815/***/ }),
6816/* 38 */
6817/***/ (function(module, exports, __webpack_require__) {
6818
6819"use strict";
6820/* --------------------------------------------------------------------------------------------
6821 * Copyright (c) Microsoft Corporation. All rights reserved.
6822 * Licensed under the MIT License. See License.txt in the project root for license information.
6823 * ------------------------------------------------------------------------------------------ */
6824
6825Object.defineProperty(exports, "__esModule", { value: true });
6826const url = __webpack_require__(39);
6827const path = __webpack_require__(13);
6828const fs = __webpack_require__(40);
6829const child_process_1 = __webpack_require__(41);
6830/**
6831 * @deprecated Use the `vscode-uri` npm module which provides a more
6832 * complete implementation of handling VS Code URIs.
6833 */
6834function uriToFilePath(uri) {
6835 let parsed = url.parse(uri);
6836 if (parsed.protocol !== 'file:' || !parsed.path) {
6837 return undefined;
6838 }
6839 let segments = parsed.path.split('/');
6840 for (var i = 0, len = segments.length; i < len; i++) {
6841 segments[i] = decodeURIComponent(segments[i]);
6842 }
6843 if (process.platform === 'win32' && segments.length > 1) {
6844 let first = segments[0];
6845 let second = segments[1];
6846 // Do we have a drive letter and we started with a / which is the
6847 // case if the first segement is empty (see split above)
6848 if (first.length === 0 && second.length > 1 && second[1] === ':') {
6849 // Remove first slash
6850 segments.shift();
6851 }
6852 }
6853 return path.normalize(segments.join('/'));
6854}
6855exports.uriToFilePath = uriToFilePath;
6856function isWindows() {
6857 return process.platform === 'win32';
6858}
6859function resolve(moduleName, nodePath, cwd, tracer) {
6860 const nodePathKey = 'NODE_PATH';
6861 const app = [
6862 'var p = process;',
6863 'p.on(\'message\',function(m){',
6864 'if(m.c===\'e\'){',
6865 'p.exit(0);',
6866 '}',
6867 'else if(m.c===\'rs\'){',
6868 'try{',
6869 'var r=require.resolve(m.a);',
6870 'p.send({c:\'r\',s:true,r:r});',
6871 '}',
6872 'catch(err){',
6873 'p.send({c:\'r\',s:false});',
6874 '}',
6875 '}',
6876 '});'
6877 ].join('');
6878 return new Promise((resolve, reject) => {
6879 let env = process.env;
6880 let newEnv = Object.create(null);
6881 Object.keys(env).forEach(key => newEnv[key] = env[key]);
6882 if (nodePath && fs.existsSync(nodePath) /* see issue 545 */) {
6883 if (newEnv[nodePathKey]) {
6884 newEnv[nodePathKey] = nodePath + path.delimiter + newEnv[nodePathKey];
6885 }
6886 else {
6887 newEnv[nodePathKey] = nodePath;
6888 }
6889 if (tracer) {
6890 tracer(`NODE_PATH value is: ${newEnv[nodePathKey]}`);
6891 }
6892 }
6893 newEnv['ELECTRON_RUN_AS_NODE'] = '1';
6894 try {
6895 let cp = child_process_1.fork('', [], {
6896 cwd: cwd,
6897 env: newEnv,
6898 execArgv: ['-e', app]
6899 });
6900 if (cp.pid === void 0) {
6901 reject(new Error(`Starting process to resolve node module ${moduleName} failed`));
6902 return;
6903 }
6904 cp.on('error', (error) => {
6905 reject(error);
6906 });
6907 cp.on('message', (message) => {
6908 if (message.c === 'r') {
6909 cp.send({ c: 'e' });
6910 if (message.s) {
6911 resolve(message.r);
6912 }
6913 else {
6914 reject(new Error(`Failed to resolve module: ${moduleName}`));
6915 }
6916 }
6917 });
6918 let message = {
6919 c: 'rs',
6920 a: moduleName
6921 };
6922 cp.send(message);
6923 }
6924 catch (error) {
6925 reject(error);
6926 }
6927 });
6928}
6929exports.resolve = resolve;
6930/**
6931 * Resolve the global npm package path.
6932 * @deprecated Since this depends on the used package manager and their version the best is that servers
6933 * implement this themselves since they know best what kind of package managers to support.
6934 * @param tracer the tracer to use
6935 */
6936function resolveGlobalNodePath(tracer) {
6937 let npmCommand = 'npm';
6938 const env = Object.create(null);
6939 Object.keys(process.env).forEach(key => env[key] = process.env[key]);
6940 env['NO_UPDATE_NOTIFIER'] = 'true';
6941 const options = {
6942 encoding: 'utf8',
6943 env
6944 };
6945 if (isWindows()) {
6946 npmCommand = 'npm.cmd';
6947 options.shell = true;
6948 }
6949 let handler = () => { };
6950 try {
6951 process.on('SIGPIPE', handler);
6952 let stdout = child_process_1.spawnSync(npmCommand, ['config', 'get', 'prefix'], options).stdout;
6953 if (!stdout) {
6954 if (tracer) {
6955 tracer(`'npm config get prefix' didn't return a value.`);
6956 }
6957 return undefined;
6958 }
6959 let prefix = stdout.trim();
6960 if (tracer) {
6961 tracer(`'npm config get prefix' value is: ${prefix}`);
6962 }
6963 if (prefix.length > 0) {
6964 if (isWindows()) {
6965 return path.join(prefix, 'node_modules');
6966 }
6967 else {
6968 return path.join(prefix, 'lib', 'node_modules');
6969 }
6970 }
6971 return undefined;
6972 }
6973 catch (err) {
6974 return undefined;
6975 }
6976 finally {
6977 process.removeListener('SIGPIPE', handler);
6978 }
6979}
6980exports.resolveGlobalNodePath = resolveGlobalNodePath;
6981/*
6982 * Resolve the global yarn pakage path.
6983 * @deprecated Since this depends on the used package manager and their version the best is that servers
6984 * implement this themselves since they know best what kind of package managers to support.
6985 * @param tracer the tracer to use
6986 */
6987function resolveGlobalYarnPath(tracer) {
6988 let yarnCommand = 'yarn';
6989 let options = {
6990 encoding: 'utf8'
6991 };
6992 if (isWindows()) {
6993 yarnCommand = 'yarn.cmd';
6994 options.shell = true;
6995 }
6996 let handler = () => { };
6997 try {
6998 process.on('SIGPIPE', handler);
6999 let results = child_process_1.spawnSync(yarnCommand, ['global', 'dir', '--json'], options);
7000 let stdout = results.stdout;
7001 if (!stdout) {
7002 if (tracer) {
7003 tracer(`'yarn global dir' didn't return a value.`);
7004 if (results.stderr) {
7005 tracer(results.stderr);
7006 }
7007 }
7008 return undefined;
7009 }
7010 let lines = stdout.trim().split(/\r?\n/);
7011 for (let line of lines) {
7012 try {
7013 let yarn = JSON.parse(line);
7014 if (yarn.type === 'log') {
7015 return path.join(yarn.data, 'node_modules');
7016 }
7017 }
7018 catch (e) {
7019 // Do nothing. Ignore the line
7020 }
7021 }
7022 return undefined;
7023 }
7024 catch (err) {
7025 return undefined;
7026 }
7027 finally {
7028 process.removeListener('SIGPIPE', handler);
7029 }
7030}
7031exports.resolveGlobalYarnPath = resolveGlobalYarnPath;
7032var FileSystem;
7033(function (FileSystem) {
7034 let _isCaseSensitive = undefined;
7035 function isCaseSensitive() {
7036 if (_isCaseSensitive !== void 0) {
7037 return _isCaseSensitive;
7038 }
7039 if (process.platform === 'win32') {
7040 _isCaseSensitive = false;
7041 }
7042 else {
7043 // convert current file name to upper case / lower case and check if file exists
7044 // (guards against cases when name is already all uppercase or lowercase)
7045 _isCaseSensitive = !fs.existsSync(__filename.toUpperCase()) || !fs.existsSync(__filename.toLowerCase());
7046 }
7047 return _isCaseSensitive;
7048 }
7049 FileSystem.isCaseSensitive = isCaseSensitive;
7050 function isParent(parent, child) {
7051 if (isCaseSensitive()) {
7052 return path.normalize(child).indexOf(path.normalize(parent)) === 0;
7053 }
7054 else {
7055 return path.normalize(child).toLowerCase().indexOf(path.normalize(parent).toLowerCase()) === 0;
7056 }
7057 }
7058 FileSystem.isParent = isParent;
7059})(FileSystem = exports.FileSystem || (exports.FileSystem = {}));
7060function resolveModulePath(workspaceRoot, moduleName, nodePath, tracer) {
7061 if (nodePath) {
7062 if (!path.isAbsolute(nodePath)) {
7063 nodePath = path.join(workspaceRoot, nodePath);
7064 }
7065 return resolve(moduleName, nodePath, nodePath, tracer).then((value) => {
7066 if (FileSystem.isParent(nodePath, value)) {
7067 return value;
7068 }
7069 else {
7070 return Promise.reject(new Error(`Failed to load ${moduleName} from node path location.`));
7071 }
7072 }).then(undefined, (_error) => {
7073 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7074 });
7075 }
7076 else {
7077 return resolve(moduleName, resolveGlobalNodePath(tracer), workspaceRoot, tracer);
7078 }
7079}
7080exports.resolveModulePath = resolveModulePath;
7081//# sourceMappingURL=files.js.map
7082
7083/***/ }),
7084/* 39 */
7085/***/ (function(module, exports) {
7086
7087module.exports = require("url");
7088
7089/***/ }),
7090/* 40 */
7091/***/ (function(module, exports) {
7092
7093module.exports = require("fs");
7094
7095/***/ }),
7096/* 41 */
7097/***/ (function(module, exports) {
7098
7099module.exports = require("child_process");
7100
7101/***/ }),
7102/* 42 */
7103/***/ (function(module, exports, __webpack_require__) {
7104
7105"use strict";
7106/* --------------------------------------------------------------------------------------------
7107 * Copyright (c) Microsoft Corporation. All rights reserved.
7108 * Licensed under the MIT License. See License.txt in the project root for license information.
7109 * ------------------------------------------------------------------------------------------ */
7110
7111Object.defineProperty(exports, "__esModule", { value: true });
7112const vscode_languageserver_protocol_1 = __webpack_require__(3);
7113exports.CallHierarchyFeature = (Base) => {
7114 return class extends Base {
7115 get callHierarchy() {
7116 return {
7117 onPrepare: (handler) => {
7118 this.connection.onRequest(vscode_languageserver_protocol_1.Proposed.CallHierarchyPrepareRequest.type, (params, cancel) => {
7119 return handler(params, cancel, this.attachWorkDoneProgress(params), undefined);
7120 });
7121 },
7122 onIncomingCalls: (handler) => {
7123 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyIncomingCallsRequest.type;
7124 this.connection.onRequest(type, (params, cancel) => {
7125 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7126 });
7127 },
7128 onOutgoingCalls: (handler) => {
7129 const type = vscode_languageserver_protocol_1.Proposed.CallHierarchyOutgoingCallsRequest.type;
7130 this.connection.onRequest(type, (params, cancel) => {
7131 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7132 });
7133 }
7134 };
7135 }
7136 };
7137};
7138//# sourceMappingURL=callHierarchy.proposed.js.map
7139
7140/***/ }),
7141/* 43 */
7142/***/ (function(module, exports, __webpack_require__) {
7143
7144"use strict";
7145/* --------------------------------------------------------------------------------------------
7146 * Copyright (c) Microsoft Corporation. All rights reserved.
7147 * Licensed under the MIT License. See License.txt in the project root for license information.
7148 * ------------------------------------------------------------------------------------------ */
7149
7150Object.defineProperty(exports, "__esModule", { value: true });
7151const vscode_languageserver_protocol_1 = __webpack_require__(3);
7152exports.SemanticTokensFeature = (Base) => {
7153 return class extends Base {
7154 get semanticTokens() {
7155 return {
7156 on: (handler) => {
7157 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRequest.type;
7158 this.connection.onRequest(type, (params, cancel) => {
7159 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7160 });
7161 },
7162 onEdits: (handler) => {
7163 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensEditsRequest.type;
7164 this.connection.onRequest(type, (params, cancel) => {
7165 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7166 });
7167 },
7168 onRange: (handler) => {
7169 const type = vscode_languageserver_protocol_1.Proposed.SemanticTokensRangeRequest.type;
7170 this.connection.onRequest(type, (params, cancel) => {
7171 return handler(params, cancel, this.attachWorkDoneProgress(params), this.attachPartialResultProgress(type, params));
7172 });
7173 }
7174 };
7175 }
7176 };
7177};
7178class SemanticTokensBuilder {
7179 constructor() {
7180 this._prevData = undefined;
7181 this.initialize();
7182 }
7183 initialize() {
7184 this._id = Date.now();
7185 this._prevLine = 0;
7186 this._prevChar = 0;
7187 this._data = [];
7188 this._dataLen = 0;
7189 }
7190 push(line, char, length, tokenType, tokenModifiers) {
7191 let pushLine = line;
7192 let pushChar = char;
7193 if (this._dataLen > 0) {
7194 pushLine -= this._prevLine;
7195 if (pushLine === 0) {
7196 pushChar -= this._prevChar;
7197 }
7198 }
7199 this._data[this._dataLen++] = pushLine;
7200 this._data[this._dataLen++] = pushChar;
7201 this._data[this._dataLen++] = length;
7202 this._data[this._dataLen++] = tokenType;
7203 this._data[this._dataLen++] = tokenModifiers;
7204 this._prevLine = line;
7205 this._prevChar = char;
7206 }
7207 get id() {
7208 return this._id.toString();
7209 }
7210 previousResult(id) {
7211 if (this.id === id) {
7212 this._prevData = this._data;
7213 }
7214 this.initialize();
7215 }
7216 build() {
7217 this._prevData = undefined;
7218 return {
7219 resultId: this.id,
7220 data: this._data
7221 };
7222 }
7223 canBuildEdits() {
7224 return this._prevData !== undefined;
7225 }
7226 buildEdits() {
7227 if (this._prevData !== undefined) {
7228 const prevDataLength = this._prevData.length;
7229 const dataLength = this._data.length;
7230 let startIndex = 0;
7231 while (startIndex < dataLength && startIndex < prevDataLength && this._prevData[startIndex] === this._data[startIndex]) {
7232 startIndex++;
7233 }
7234 if (startIndex < dataLength && startIndex < prevDataLength) {
7235 // Find end index
7236 let endIndex = 0;
7237 while (endIndex < dataLength && endIndex < prevDataLength && this._prevData[prevDataLength - 1 - endIndex] === this._data[dataLength - 1 - endIndex]) {
7238 endIndex++;
7239 }
7240 const newData = this._data.slice(startIndex, dataLength - endIndex);
7241 const result = {
7242 resultId: this.id,
7243 edits: [
7244 { start: startIndex, deleteCount: prevDataLength - endIndex - startIndex, data: newData }
7245 ]
7246 };
7247 return result;
7248 }
7249 else if (startIndex < dataLength) {
7250 return { resultId: this.id, edits: [
7251 { start: startIndex, deleteCount: 0, data: this._data.slice(startIndex) }
7252 ] };
7253 }
7254 else if (startIndex < prevDataLength) {
7255 return { resultId: this.id, edits: [
7256 { start: startIndex, deleteCount: prevDataLength - startIndex }
7257 ] };
7258 }
7259 else {
7260 return { resultId: this.id, edits: [] };
7261 }
7262 }
7263 else {
7264 return this.build();
7265 }
7266 }
7267}
7268exports.SemanticTokensBuilder = SemanticTokensBuilder;
7269//# sourceMappingURL=sematicTokens.proposed.js.map
7270
7271/***/ }),
7272/* 44 */
7273/***/ (function(module, exports, __webpack_require__) {
7274
7275"use strict";
7276
7277Object.defineProperty(exports, "__esModule", { value: true });
7278exports.sortTexts = {
7279 one: "00001",
7280 two: "00002",
7281 three: "00003",
7282 four: "00004",
7283};
7284exports.projectRootPatterns = [".git", "autoload", "plugin"];
7285
7286
7287/***/ }),
7288/* 45 */
7289/***/ (function(module, exports, __webpack_require__) {
7290
7291"use strict";
7292
7293var __importDefault = (this && this.__importDefault) || function (mod) {
7294 return (mod && mod.__esModule) ? mod : { "default": mod };
7295};
7296Object.defineProperty(exports, "__esModule", { value: true });
7297var vscode_languageserver_1 = __webpack_require__(2);
7298var util_1 = __webpack_require__(46);
7299var config_1 = __importDefault(__webpack_require__(55));
7300var documents_1 = __webpack_require__(56);
7301__webpack_require__(58);
7302__webpack_require__(142);
7303__webpack_require__(143);
7304__webpack_require__(144);
7305__webpack_require__(146);
7306__webpack_require__(147);
7307__webpack_require__(151);
7308__webpack_require__(152);
7309__webpack_require__(153);
7310__webpack_require__(154);
7311__webpack_require__(155);
7312__webpack_require__(156);
7313var provider_1 = __webpack_require__(140);
7314var provider = provider_1.getProvider();
7315exports.completionProvider = function (params) {
7316 var textDocument = params.textDocument, position = params.position;
7317 var textDoc = documents_1.documents.get(textDocument.uri);
7318 if (textDoc) {
7319 var line = textDoc.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(position.line, 0), position));
7320 var words = util_1.getWordFromPosition(textDoc, { line: position.line, character: position.character - 1 });
7321 var word = words && words.word || "";
7322 if (word === "" && words && words.wordRight.trim() === ":") {
7323 word = ":";
7324 }
7325 // options items start with &
7326 var invalidLength = word.replace(/^&/, "").length;
7327 var completionItems = provider(line, textDoc.uri, position, word, invalidLength, []);
7328 if (!config_1.default.snippetSupport) {
7329 return {
7330 isIncomplete: true,
7331 items: util_1.removeSnippets(completionItems)
7332 };
7333 }
7334 return {
7335 isIncomplete: true,
7336 items: completionItems
7337 };
7338 }
7339 return [];
7340};
7341
7342
7343/***/ }),
7344/* 46 */
7345/***/ (function(module, exports, __webpack_require__) {
7346
7347"use strict";
7348
7349var __assign = (this && this.__assign) || function () {
7350 __assign = Object.assign || function(t) {
7351 for (var s, i = 1, n = arguments.length; i < n; i++) {
7352 s = arguments[i];
7353 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7354 t[p] = s[p];
7355 }
7356 return t;
7357 };
7358 return __assign.apply(this, arguments);
7359};
7360var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
7361 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
7362 return new (P || (P = Promise))(function (resolve, reject) {
7363 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7364 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7365 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7366 step((generator = generator.apply(thisArg, _arguments || [])).next());
7367 });
7368};
7369var __generator = (this && this.__generator) || function (thisArg, body) {
7370 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
7371 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
7372 function verb(n) { return function (v) { return step([n, v]); }; }
7373 function step(op) {
7374 if (f) throw new TypeError("Generator is already executing.");
7375 while (_) try {
7376 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;
7377 if (y = 0, t) op = [op[0] & 2, t.value];
7378 switch (op[0]) {
7379 case 0: case 1: t = op; break;
7380 case 4: _.label++; return { value: op[1], done: false };
7381 case 5: _.label++; y = op[1]; op = [0]; continue;
7382 case 7: op = _.ops.pop(); _.trys.pop(); continue;
7383 default:
7384 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
7385 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
7386 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
7387 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
7388 if (t[2]) _.ops.pop();
7389 _.trys.pop(); continue;
7390 }
7391 op = body.call(thisArg, _);
7392 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
7393 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
7394 }
7395};
7396var __spreadArrays = (this && this.__spreadArrays) || function () {
7397 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
7398 for (var r = Array(s), k = 0, i = 0; i < il; i++)
7399 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
7400 r[k] = a[j];
7401 return r;
7402};
7403var __importDefault = (this && this.__importDefault) || function (mod) {
7404 return (mod && mod.__esModule) ? mod : { "default": mod };
7405};
7406Object.defineProperty(exports, "__esModule", { value: true });
7407var child_process_1 = __webpack_require__(41);
7408var findup_1 = __importDefault(__webpack_require__(47));
7409var fs_1 = __importDefault(__webpack_require__(40));
7410var path_1 = __importDefault(__webpack_require__(13));
7411var vscode_languageserver_1 = __webpack_require__(2);
7412var vimparser_1 = __webpack_require__(52);
7413var patterns_1 = __webpack_require__(54);
7414function isSomeMatchPattern(patterns, line) {
7415 return patterns.some(function (p) { return p.test(line); });
7416}
7417exports.isSomeMatchPattern = isSomeMatchPattern;
7418function executeFile(input, command, args, option) {
7419 return new Promise(function (resolve, reject) {
7420 var stdout = "";
7421 var stderr = "";
7422 var error;
7423 var isPassAsText = false;
7424 args = (args || []).map(function (arg) {
7425 if (/%text/.test(arg)) {
7426 isPassAsText = true;
7427 return arg.replace(/%text/g, input.toString());
7428 }
7429 return arg;
7430 });
7431 var cp = child_process_1.spawn(command, args, option);
7432 cp.stdout.on("data", function (data) {
7433 stdout += data;
7434 });
7435 cp.stderr.on("data", function (data) {
7436 stderr += data;
7437 });
7438 cp.on("error", function (err) {
7439 error = err;
7440 reject(error);
7441 });
7442 cp.on("close", function (code) {
7443 if (!error) {
7444 resolve({ code: code, stdout: stdout, stderr: stderr });
7445 }
7446 });
7447 // error will occur when cp get error
7448 if (!isPassAsText) {
7449 input.pipe(cp.stdin).on("error", function () { return; });
7450 }
7451 });
7452}
7453exports.executeFile = executeFile;
7454// cover cb type async function to promise
7455function pcb(cb) {
7456 return function () {
7457 var args = [];
7458 for (var _i = 0; _i < arguments.length; _i++) {
7459 args[_i] = arguments[_i];
7460 }
7461 return new Promise(function (resolve) {
7462 cb.apply(void 0, __spreadArrays(args, [function () {
7463 var params = [];
7464 for (var _i = 0; _i < arguments.length; _i++) {
7465 params[_i] = arguments[_i];
7466 }
7467 resolve(params);
7468 }]));
7469 });
7470 };
7471}
7472exports.pcb = pcb;
7473// find work dirname by root patterns
7474function findProjectRoot(filePath, rootPatterns) {
7475 return __awaiter(this, void 0, void 0, function () {
7476 var dirname, patterns, dirCandidate, _i, patterns_2, pattern, _a, err, dir;
7477 return __generator(this, function (_b) {
7478 switch (_b.label) {
7479 case 0:
7480 dirname = path_1.default.dirname(filePath);
7481 patterns = [].concat(rootPatterns);
7482 dirCandidate = "";
7483 _i = 0, patterns_2 = patterns;
7484 _b.label = 1;
7485 case 1:
7486 if (!(_i < patterns_2.length)) return [3 /*break*/, 4];
7487 pattern = patterns_2[_i];
7488 return [4 /*yield*/, pcb(findup_1.default)(dirname, pattern)];
7489 case 2:
7490 _a = _b.sent(), err = _a[0], dir = _a[1];
7491 if (!err && dir && dir !== "/" && dir.length > dirCandidate.length) {
7492 dirCandidate = dir;
7493 }
7494 _b.label = 3;
7495 case 3:
7496 _i++;
7497 return [3 /*break*/, 1];
7498 case 4:
7499 if (dirCandidate.length) {
7500 return [2 /*return*/, dirCandidate];
7501 }
7502 return [2 /*return*/, dirname];
7503 }
7504 });
7505 });
7506}
7507exports.findProjectRoot = findProjectRoot;
7508function markupSnippets(snippets) {
7509 return [
7510 "```vim",
7511 snippets.replace(/\$\{[0-9]+(:([^}]+))?\}/g, "$2"),
7512 "```",
7513 ].join("\n");
7514}
7515exports.markupSnippets = markupSnippets;
7516function getWordFromPosition(doc, position) {
7517 if (!doc) {
7518 return;
7519 }
7520 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)));
7521 // not keyword position
7522 if (!character || !patterns_1.keywordPattern.test(character)) {
7523 return;
7524 }
7525 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)));
7526 // comment line
7527 if (patterns_1.commentPattern.test(currentLine)) {
7528 return;
7529 }
7530 var preSegment = currentLine.slice(0, position.character);
7531 var nextSegment = currentLine.slice(position.character);
7532 var wordLeft = preSegment.match(patterns_1.wordPrePattern);
7533 var wordRight = nextSegment.match(patterns_1.wordNextPattern);
7534 var word = "" + (wordLeft && wordLeft[1] || "") + (wordRight && wordRight[1] || "");
7535 return {
7536 word: word,
7537 left: wordLeft && wordLeft[1] || "",
7538 right: wordRight && wordRight[1] || "",
7539 wordLeft: wordLeft && wordLeft[1]
7540 ? preSegment.replace(new RegExp(wordLeft[1] + "$"), word)
7541 : "" + preSegment + word,
7542 wordRight: wordRight && wordRight[1]
7543 ? nextSegment.replace(new RegExp("^" + wordRight[1]), word)
7544 : "" + word + nextSegment,
7545 };
7546}
7547exports.getWordFromPosition = getWordFromPosition;
7548// parse vim buffer
7549function handleParse(textDoc) {
7550 return __awaiter(this, void 0, void 0, function () {
7551 var text, tokens, node;
7552 return __generator(this, function (_a) {
7553 text = textDoc instanceof Object ? textDoc.getText() : textDoc;
7554 tokens = new vimparser_1.StringReader(text.split(/\r\n|\r|\n/));
7555 try {
7556 node = new vimparser_1.VimLParser(true).parse(tokens);
7557 return [2 /*return*/, [node, ""]];
7558 }
7559 catch (error) {
7560 return [2 /*return*/, [null, error]];
7561 }
7562 return [2 /*return*/];
7563 });
7564 });
7565}
7566exports.handleParse = handleParse;
7567// remove snippets of completionItem
7568function removeSnippets(completionItems) {
7569 if (completionItems === void 0) { completionItems = []; }
7570 return completionItems.map(function (item) {
7571 if (item.insertTextFormat === vscode_languageserver_1.InsertTextFormat.Snippet) {
7572 return __assign(__assign({}, item), { insertText: item.label, insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText });
7573 }
7574 return item;
7575 });
7576}
7577exports.removeSnippets = removeSnippets;
7578exports.isSymbolLink = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7579 return __generator(this, function (_a) {
7580 return [2 /*return*/, new Promise(function (resolve) {
7581 fs_1.default.lstat(filePath, function (err, stats) {
7582 resolve({
7583 err: err,
7584 stats: stats && stats.isSymbolicLink(),
7585 });
7586 });
7587 })];
7588 });
7589}); };
7590exports.getRealPath = function (filePath) { return __awaiter(void 0, void 0, void 0, function () {
7591 var _a, err, stats;
7592 return __generator(this, function (_b) {
7593 switch (_b.label) {
7594 case 0: return [4 /*yield*/, exports.isSymbolLink(filePath)];
7595 case 1:
7596 _a = _b.sent(), err = _a.err, stats = _a.stats;
7597 if (!err && stats) {
7598 return [2 /*return*/, new Promise(function (resolve) {
7599 fs_1.default.realpath(filePath, function (error, realPath) {
7600 if (error) {
7601 return resolve(filePath);
7602 }
7603 resolve(realPath);
7604 });
7605 })];
7606 }
7607 return [2 /*return*/, filePath];
7608 }
7609 });
7610}); };
7611
7612
7613/***/ }),
7614/* 47 */
7615/***/ (function(module, exports, __webpack_require__) {
7616
7617var fs = __webpack_require__(40),
7618 Path = __webpack_require__(13),
7619 util = __webpack_require__(48),
7620 colors = __webpack_require__(49),
7621 EE = __webpack_require__(51).EventEmitter,
7622 fsExists = fs.exists ? fs.exists : Path.exists,
7623 fsExistsSync = fs.existsSync ? fs.existsSync : Path.existsSync;
7624
7625module.exports = function(dir, iterator, options, callback){
7626 return FindUp(dir, iterator, options, callback);
7627};
7628
7629function FindUp(dir, iterator, options, callback){
7630 if (!(this instanceof FindUp)) {
7631 return new FindUp(dir, iterator, options, callback);
7632 }
7633 if(typeof options === 'function'){
7634 callback = options;
7635 options = {};
7636 }
7637 options = options || {};
7638
7639 EE.call(this);
7640 this.found = false;
7641 this.stopPlease = false;
7642 var self = this;
7643
7644 if(typeof iterator === 'string'){
7645 var file = iterator;
7646 iterator = function(dir, cb){
7647 return fsExists(Path.join(dir, file), cb);
7648 };
7649 }
7650
7651 if(callback) {
7652 this.on('found', function(dir){
7653 if(options.verbose) console.log(('found '+ dir ).green);
7654 callback(null, dir);
7655 self.stop();
7656 });
7657
7658 this.on('end', function(){
7659 if(options.verbose) console.log('end'.grey);
7660 if(!self.found) callback(new Error('not found'));
7661 });
7662
7663 this.on('error', function(err){
7664 if(options.verbose) console.log('error'.red, err);
7665 callback(err);
7666 });
7667 }
7668
7669 this._find(dir, iterator, options, callback);
7670}
7671util.inherits(FindUp, EE);
7672
7673FindUp.prototype._find = function(dir, iterator, options, callback){
7674 var self = this;
7675
7676 iterator(dir, function(exists){
7677 if(options.verbose) console.log(('traverse '+ dir).grey);
7678 if(exists) {
7679 self.found = true;
7680 self.emit('found', dir);
7681 }
7682
7683 var parentDir = Path.join(dir, '..');
7684 if (self.stopPlease) return self.emit('end');
7685 if (dir === parentDir) return self.emit('end');
7686 if(dir.indexOf('../../') !== -1 ) return self.emit('error', new Error(dir + ' is not correct.'));
7687 self._find(parentDir, iterator, options, callback);
7688 });
7689};
7690
7691FindUp.prototype.stop = function(){
7692 this.stopPlease = true;
7693};
7694
7695module.exports.FindUp = FindUp;
7696
7697module.exports.sync = function(dir, iteratorSync){
7698 if(typeof iteratorSync === 'string'){
7699 var file = iteratorSync;
7700 iteratorSync = function(dir){
7701 return fsExistsSync(Path.join(dir, file));
7702 };
7703 }
7704 var initialDir = dir;
7705 while(dir !== Path.join(dir, '..')){
7706 if(dir.indexOf('../../') !== -1 ) throw new Error(initialDir + ' is not correct.');
7707 if(iteratorSync(dir)) return dir;
7708 dir = Path.join(dir, '..');
7709 }
7710 throw new Error('not found');
7711};
7712
7713
7714/***/ }),
7715/* 48 */
7716/***/ (function(module, exports) {
7717
7718module.exports = require("util");
7719
7720/***/ }),
7721/* 49 */
7722/***/ (function(module, exports, __webpack_require__) {
7723
7724/*
7725colors.js
7726
7727Copyright (c) 2010
7728
7729Marak Squires
7730Alexis Sellier (cloudhead)
7731
7732Permission is hereby granted, free of charge, to any person obtaining a copy
7733of this software and associated documentation files (the "Software"), to deal
7734in the Software without restriction, including without limitation the rights
7735to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7736copies of the Software, and to permit persons to whom the Software is
7737furnished to do so, subject to the following conditions:
7738
7739The above copyright notice and this permission notice shall be included in
7740all copies or substantial portions of the Software.
7741
7742THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7743IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7744FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7745AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
7746LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
7747OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
7748THE SOFTWARE.
7749
7750*/
7751
7752var isHeadless = false;
7753
7754if (typeof module !== 'undefined') {
7755 isHeadless = true;
7756}
7757
7758if (!isHeadless) {
7759 var exports = {};
7760 var module = {};
7761 var colors = exports;
7762 exports.mode = "browser";
7763} else {
7764 exports.mode = "console";
7765}
7766
7767//
7768// Prototypes the string object to have additional method calls that add terminal colors
7769//
7770var addProperty = function (color, func) {
7771 exports[color] = function (str) {
7772 return func.apply(str);
7773 };
7774 String.prototype.__defineGetter__(color, func);
7775};
7776
7777function stylize(str, style) {
7778
7779 var styles;
7780
7781 if (exports.mode === 'console') {
7782 styles = {
7783 //styles
7784 'bold' : ['\x1B[1m', '\x1B[22m'],
7785 'italic' : ['\x1B[3m', '\x1B[23m'],
7786 'underline' : ['\x1B[4m', '\x1B[24m'],
7787 'inverse' : ['\x1B[7m', '\x1B[27m'],
7788 'strikethrough' : ['\x1B[9m', '\x1B[29m'],
7789 //text colors
7790 //grayscale
7791 'white' : ['\x1B[37m', '\x1B[39m'],
7792 'grey' : ['\x1B[90m', '\x1B[39m'],
7793 'black' : ['\x1B[30m', '\x1B[39m'],
7794 //colors
7795 'blue' : ['\x1B[34m', '\x1B[39m'],
7796 'cyan' : ['\x1B[36m', '\x1B[39m'],
7797 'green' : ['\x1B[32m', '\x1B[39m'],
7798 'magenta' : ['\x1B[35m', '\x1B[39m'],
7799 'red' : ['\x1B[31m', '\x1B[39m'],
7800 'yellow' : ['\x1B[33m', '\x1B[39m'],
7801 //background colors
7802 //grayscale
7803 'whiteBG' : ['\x1B[47m', '\x1B[49m'],
7804 'greyBG' : ['\x1B[49;5;8m', '\x1B[49m'],
7805 'blackBG' : ['\x1B[40m', '\x1B[49m'],
7806 //colors
7807 'blueBG' : ['\x1B[44m', '\x1B[49m'],
7808 'cyanBG' : ['\x1B[46m', '\x1B[49m'],
7809 'greenBG' : ['\x1B[42m', '\x1B[49m'],
7810 'magentaBG' : ['\x1B[45m', '\x1B[49m'],
7811 'redBG' : ['\x1B[41m', '\x1B[49m'],
7812 'yellowBG' : ['\x1B[43m', '\x1B[49m']
7813 };
7814 } else if (exports.mode === 'browser') {
7815 styles = {
7816 //styles
7817 'bold' : ['<b>', '</b>'],
7818 'italic' : ['<i>', '</i>'],
7819 'underline' : ['<u>', '</u>'],
7820 'inverse' : ['<span style="background-color:black;color:white;">', '</span>'],
7821 'strikethrough' : ['<del>', '</del>'],
7822 //text colors
7823 //grayscale
7824 'white' : ['<span style="color:white;">', '</span>'],
7825 'grey' : ['<span style="color:gray;">', '</span>'],
7826 'black' : ['<span style="color:black;">', '</span>'],
7827 //colors
7828 'blue' : ['<span style="color:blue;">', '</span>'],
7829 'cyan' : ['<span style="color:cyan;">', '</span>'],
7830 'green' : ['<span style="color:green;">', '</span>'],
7831 'magenta' : ['<span style="color:magenta;">', '</span>'],
7832 'red' : ['<span style="color:red;">', '</span>'],
7833 'yellow' : ['<span style="color:yellow;">', '</span>'],
7834 //background colors
7835 //grayscale
7836 'whiteBG' : ['<span style="background-color:white;">', '</span>'],
7837 'greyBG' : ['<span style="background-color:gray;">', '</span>'],
7838 'blackBG' : ['<span style="background-color:black;">', '</span>'],
7839 //colors
7840 'blueBG' : ['<span style="background-color:blue;">', '</span>'],
7841 'cyanBG' : ['<span style="background-color:cyan;">', '</span>'],
7842 'greenBG' : ['<span style="background-color:green;">', '</span>'],
7843 'magentaBG' : ['<span style="background-color:magenta;">', '</span>'],
7844 'redBG' : ['<span style="background-color:red;">', '</span>'],
7845 'yellowBG' : ['<span style="background-color:yellow;">', '</span>']
7846 };
7847 } else if (exports.mode === 'none') {
7848 return str + '';
7849 } else {
7850 console.log('unsupported mode, try "browser", "console" or "none"');
7851 }
7852 return styles[style][0] + str + styles[style][1];
7853}
7854
7855function applyTheme(theme) {
7856
7857 //
7858 // Remark: This is a list of methods that exist
7859 // on String that you should not overwrite.
7860 //
7861 var stringPrototypeBlacklist = [
7862 '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor',
7863 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt',
7864 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring',
7865 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight'
7866 ];
7867
7868 Object.keys(theme).forEach(function (prop) {
7869 if (stringPrototypeBlacklist.indexOf(prop) !== -1) {
7870 console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name');
7871 }
7872 else {
7873 if (typeof(theme[prop]) === 'string') {
7874 addProperty(prop, function () {
7875 return exports[theme[prop]](this);
7876 });
7877 }
7878 else {
7879 addProperty(prop, function () {
7880 var ret = this;
7881 for (var t = 0; t < theme[prop].length; t++) {
7882 ret = exports[theme[prop][t]](ret);
7883 }
7884 return ret;
7885 });
7886 }
7887 }
7888 });
7889}
7890
7891
7892//
7893// Iterate through all default styles and colors
7894//
7895var x = ['bold', 'underline', 'strikethrough', 'italic', 'inverse', 'grey', 'black', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta', 'greyBG', 'blackBG', 'yellowBG', 'redBG', 'greenBG', 'blueBG', 'whiteBG', 'cyanBG', 'magentaBG'];
7896x.forEach(function (style) {
7897
7898 // __defineGetter__ at the least works in more browsers
7899 // http://robertnyman.com/javascript/javascript-getters-setters.html
7900 // Object.defineProperty only works in Chrome
7901 addProperty(style, function () {
7902 return stylize(this, style);
7903 });
7904});
7905
7906function sequencer(map) {
7907 return function () {
7908 if (!isHeadless) {
7909 return this.replace(/( )/, '$1');
7910 }
7911 var exploded = this.split(""), i = 0;
7912 exploded = exploded.map(map);
7913 return exploded.join("");
7914 };
7915}
7916
7917var rainbowMap = (function () {
7918 var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV
7919 return function (letter, i, exploded) {
7920 if (letter === " ") {
7921 return letter;
7922 } else {
7923 return stylize(letter, rainbowColors[i++ % rainbowColors.length]);
7924 }
7925 };
7926})();
7927
7928exports.themes = {};
7929
7930exports.addSequencer = function (name, map) {
7931 addProperty(name, sequencer(map));
7932};
7933
7934exports.addSequencer('rainbow', rainbowMap);
7935exports.addSequencer('zebra', function (letter, i, exploded) {
7936 return i % 2 === 0 ? letter : letter.inverse;
7937});
7938
7939exports.setTheme = function (theme) {
7940 if (typeof theme === 'string') {
7941 try {
7942 exports.themes[theme] = __webpack_require__(50)(theme);
7943 applyTheme(exports.themes[theme]);
7944 return exports.themes[theme];
7945 } catch (err) {
7946 console.log(err);
7947 return err;
7948 }
7949 } else {
7950 applyTheme(theme);
7951 }
7952};
7953
7954
7955addProperty('stripColors', function () {
7956 return ("" + this).replace(/\x1B\[\d+m/g, '');
7957});
7958
7959// please no
7960function zalgo(text, options) {
7961 var soul = {
7962 "up" : [
7963 '̍', '̎', '̄', '̅',
7964 '̿', '̑', '̆', '̐',
7965 '͒', '͗', '͑', '̇',
7966 '̈', '̊', '͂', '̓',
7967 '̈', '͊', '͋', '͌',
7968 '̃', '̂', '̌', '͐',
7969 '̀', '́', '̋', '̏',
7970 '̒', '̓', '̔', '̽',
7971 '̉', 'ͣ', 'ͤ', 'ͥ',
7972 'ͦ', 'ͧ', 'ͨ', 'ͩ',
7973 'ͪ', 'ͫ', 'ͬ', 'ͭ',
7974 'ͮ', 'ͯ', '̾', '͛',
7975 '͆', '̚'
7976 ],
7977 "down" : [
7978 '̖', '̗', '̘', '̙',
7979 '̜', '̝', '̞', '̟',
7980 '̠', '̤', '̥', '̦',
7981 '̩', '̪', '̫', '̬',
7982 '̭', '̮', '̯', '̰',
7983 '̱', '̲', '̳', '̹',
7984 '̺', '̻', '̼', 'ͅ',
7985 '͇', '͈', '͉', '͍',
7986 '͎', '͓', '͔', '͕',
7987 '͖', '͙', '͚', '̣'
7988 ],
7989 "mid" : [
7990 '̕', '̛', '̀', '́',
7991 '͘', '̡', '̢', '̧',
7992 '̨', '̴', '̵', '̶',
7993 '͜', '͝', '͞',
7994 '͟', '͠', '͢', '̸',
7995 '̷', '͡', ' ҉'
7996 ]
7997 },
7998 all = [].concat(soul.up, soul.down, soul.mid),
7999 zalgo = {};
8000
8001 function randomNumber(range) {
8002 var r = Math.floor(Math.random() * range);
8003 return r;
8004 }
8005
8006 function is_char(character) {
8007 var bool = false;
8008 all.filter(function (i) {
8009 bool = (i === character);
8010 });
8011 return bool;
8012 }
8013
8014 function heComes(text, options) {
8015 var result = '', counts, l;
8016 options = options || {};
8017 options["up"] = options["up"] || true;
8018 options["mid"] = options["mid"] || true;
8019 options["down"] = options["down"] || true;
8020 options["size"] = options["size"] || "maxi";
8021 text = text.split('');
8022 for (l in text) {
8023 if (is_char(l)) {
8024 continue;
8025 }
8026 result = result + text[l];
8027 counts = {"up" : 0, "down" : 0, "mid" : 0};
8028 switch (options.size) {
8029 case 'mini':
8030 counts.up = randomNumber(8);
8031 counts.min = randomNumber(2);
8032 counts.down = randomNumber(8);
8033 break;
8034 case 'maxi':
8035 counts.up = randomNumber(16) + 3;
8036 counts.min = randomNumber(4) + 1;
8037 counts.down = randomNumber(64) + 3;
8038 break;
8039 default:
8040 counts.up = randomNumber(8) + 1;
8041 counts.mid = randomNumber(6) / 2;
8042 counts.down = randomNumber(8) + 1;
8043 break;
8044 }
8045
8046 var arr = ["up", "mid", "down"];
8047 for (var d in arr) {
8048 var index = arr[d];
8049 for (var i = 0 ; i <= counts[index]; i++) {
8050 if (options[index]) {
8051 result = result + soul[index][randomNumber(soul[index].length)];
8052 }
8053 }
8054 }
8055 }
8056 return result;
8057 }
8058 return heComes(text);
8059}
8060
8061
8062// don't summon zalgo
8063addProperty('zalgo', function () {
8064 return zalgo(this);
8065});
8066
8067
8068/***/ }),
8069/* 50 */
8070/***/ (function(module, exports) {
8071
8072function webpackEmptyContext(req) {
8073 var e = new Error("Cannot find module '" + req + "'");
8074 e.code = 'MODULE_NOT_FOUND';
8075 throw e;
8076}
8077webpackEmptyContext.keys = function() { return []; };
8078webpackEmptyContext.resolve = webpackEmptyContext;
8079module.exports = webpackEmptyContext;
8080webpackEmptyContext.id = 50;
8081
8082/***/ }),
8083/* 51 */
8084/***/ (function(module, exports) {
8085
8086module.exports = require("events");
8087
8088/***/ }),
8089/* 52 */
8090/***/ (function(module, exports, __webpack_require__) {
8091
8092/* WEBPACK VAR INJECTION */(function(module) {//!/usr/bin/env nodejs
8093// usage: nodejs vimlparser.js [--neovim] foo.vim
8094
8095var fs = __webpack_require__(40);
8096var util = __webpack_require__(48);
8097
8098function main() {
8099 var neovim = false;
8100 var fpath = ''
8101 var args = process.argv;
8102 if (args.length == 4) {
8103 if (args[2] == '--neovim') {
8104 neovim = true;
8105 }
8106 fpath = args[3];
8107 } else if (args.length == 3) {
8108 neovim = false;
8109 fpath = args[2]
8110 }
8111 var r = new StringReader(viml_readfile(fpath));
8112 var p = new VimLParser(neovim);
8113 var c = new Compiler();
8114 try {
8115 var lines = c.compile(p.parse(r));
8116 for (var i in lines) {
8117 process.stdout.write(lines[i] + "\n");
8118 }
8119 } catch (e) {
8120 process.stdout.write(e + '\n');
8121 }
8122}
8123
8124var pat_vim2js = {
8125 "[0-9a-zA-Z]" : "[0-9a-zA-Z]",
8126 "[@*!=><&~#]" : "[@*!=><&~#]",
8127 "\\<ARGOPT\\>" : "\\bARGOPT\\b",
8128 "\\<BANG\\>" : "\\bBANG\\b",
8129 "\\<EDITCMD\\>" : "\\bEDITCMD\\b",
8130 "\\<NOTRLCOM\\>" : "\\bNOTRLCOM\\b",
8131 "\\<TRLBAR\\>" : "\\bTRLBAR\\b",
8132 "\\<USECTRLV\\>" : "\\bUSECTRLV\\b",
8133 "\\<USERCMD\\>" : "\\bUSERCMD\\b",
8134 "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>" : "\\b(XFILE|FILES|FILE1)\\b",
8135 "\\S" : "\\S",
8136 "\\a" : "[A-Za-z]",
8137 "\\d" : "\\d",
8138 "\\h" : "[A-Za-z_]",
8139 "\\s" : "\\s",
8140 "\\v^d%[elete][lp]$" : "^d(elete|elet|ele|el|e)[lp]$",
8141 "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])" : "^s(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])",
8142 "\\w" : "[0-9A-Za-z_]",
8143 "\\w\\|[:#]" : "[0-9A-Za-z_]|[:#]",
8144 "\\x" : "[0-9A-Fa-f]",
8145 "^++" : "^\+\+",
8146 "^++bad=\\(keep\\|drop\\|.\\)\\>" : "^\\+\\+bad=(keep|drop|.)\\b",
8147 "^++bad=drop" : "^\\+\\+bad=drop",
8148 "^++bad=keep" : "^\\+\\+bad=keep",
8149 "^++bin\\>" : "^\\+\\+bin\\b",
8150 "^++edit\\>" : "^\\+\\+edit\\b",
8151 "^++enc=\\S" : "^\\+\\+enc=\\S",
8152 "^++encoding=\\S" : "^\\+\\+encoding=\\S",
8153 "^++ff=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+ff=(dos|unix|mac)\\b",
8154 "^++fileformat=\\(dos\\|unix\\|mac\\)\\>" : "^\\+\\+fileformat=(dos|unix|mac)\\b",
8155 "^++nobin\\>" : "^\\+\\+nobin\\b",
8156 "^[A-Z]" : "^[A-Z]",
8157 "^\\$\\w\\+" : "^\\$[0-9A-Za-z_]+",
8158 "^\\(!\\|global\\|vglobal\\)$" : "^(!|global|vglobal)$",
8159 "^\\(WHILE\\|FOR\\)$" : "^(WHILE|FOR)$",
8160 "^\\(vimgrep\\|vimgrepadd\\|lvimgrep\\|lvimgrepadd\\)$" : "^(vimgrep|vimgrepadd|lvimgrep|lvimgrepadd)$",
8161 "^\\d" : "^\\d",
8162 "^\\h" : "^[A-Za-z_]",
8163 "^\\s" : "^\\s",
8164 "^\\s*\\\\" : "^\\s*\\\\",
8165 "^[ \\t]$" : "^[ \\t]$",
8166 "^[A-Za-z]$" : "^[A-Za-z]$",
8167 "^[0-9A-Za-z]$" : "^[0-9A-Za-z]$",
8168 "^[0-9]$" : "^[0-9]$",
8169 "^[0-9A-Fa-f]$" : "^[0-9A-Fa-f]$",
8170 "^[0-9A-Za-z_]$" : "^[0-9A-Za-z_]$",
8171 "^[A-Za-z_]$" : "^[A-Za-z_]$",
8172 "^[0-9A-Za-z_:#]$" : "^[0-9A-Za-z_:#]$",
8173 "^[A-Za-z_][0-9A-Za-z_]*$" : "^[A-Za-z_][0-9A-Za-z_]*$",
8174 "^[A-Z]$" : "^[A-Z]$",
8175 "^[a-z]$" : "^[a-z]$",
8176 "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$" : "^[vgslabwt]:$|^([vgslabwt]:)?[A-Za-z_][0-9A-Za-z_#]*$",
8177 "^[0-7]$" : "^[0-7]$",
8178 "^[0-9A-Fa-f][0-9A-Fa-f]$" : "^[0-9A-Fa-f][0-9A-Fa-f]$",
8179 "^\\.[0-9A-Fa-f]$" : "^\\.[0-9A-Fa-f]$",
8180 "^[0-9A-Fa-f][^0-9A-Fa-f]$" : "^[0-9A-Fa-f][^0-9A-Fa-f]$",
8181}
8182
8183function viml_add(lst, item) {
8184 lst.push(item);
8185}
8186
8187function viml_call(func, args) {
8188 return func.apply(null, args);
8189}
8190
8191function viml_char2nr(c) {
8192 return c.charCodeAt(0);
8193}
8194
8195function viml_empty(obj) {
8196 return obj.length == 0;
8197}
8198
8199function viml_equalci(a, b) {
8200 return a.toLowerCase() == b.toLowerCase();
8201}
8202
8203function viml_eqreg(s, reg) {
8204 var mx = new RegExp(pat_vim2js[reg]);
8205 return mx.exec(s) != null;
8206}
8207
8208function viml_eqregh(s, reg) {
8209 var mx = new RegExp(pat_vim2js[reg]);
8210 return mx.exec(s) != null;
8211}
8212
8213function viml_eqregq(s, reg) {
8214 var mx = new RegExp(pat_vim2js[reg], "i");
8215 return mx.exec(s) != null;
8216}
8217
8218function viml_escape(s, chars) {
8219 var r = '';
8220 for (var i = 0; i < s.length; ++i) {
8221 if (chars.indexOf(s.charAt(i)) != -1) {
8222 r = r + "\\" + s.charAt(i);
8223 } else {
8224 r = r + s.charAt(i);
8225 }
8226 }
8227 return r;
8228}
8229
8230function viml_extend(obj, item) {
8231 obj.push.apply(obj, item);
8232}
8233
8234function viml_insert(lst, item) {
8235 var idx = arguments.length >= 3 ? arguments[2] : 0;
8236 lst.splice(0, 0, item);
8237}
8238
8239function viml_join(lst, sep) {
8240 return lst.join(sep);
8241}
8242
8243function viml_keys(obj) {
8244 return Object.keys(obj);
8245}
8246
8247function viml_len(obj) {
8248 if (typeof obj === 'string') {
8249 var len = 0;
8250 for (var i = 0; i < obj.length; i++) {
8251 var c = obj.charCodeAt(i);
8252 len += c < 128 ? 1 : ((c > 127) && (c < 2048)) ? 2 : 3;
8253 }
8254 return len;
8255 }
8256 return obj.length;
8257}
8258
8259function viml_printf() {
8260 var a000 = Array.prototype.slice.call(arguments, 0);
8261 if (a000.length == 1) {
8262 return a000[0];
8263 } else {
8264 return util.format.apply(null, a000);
8265 }
8266}
8267
8268function viml_range(start) {
8269 var end = arguments.length >= 2 ? arguments[1] : null;
8270 if (end == null) {
8271 var x = [];
8272 for (var i = 0; i < start; ++i) {
8273 x.push(i);
8274 }
8275 return x;
8276 } else {
8277 var x = []
8278 for (var i = start; i <= end; ++i) {
8279 x.push(i);
8280 }
8281 return x;
8282 }
8283}
8284
8285function viml_readfile(path) {
8286 // FIXME: newline?
8287 return fs.readFileSync(path, 'utf-8').split(/\r\n|\r|\n/);
8288}
8289
8290function viml_remove(lst, idx) {
8291 lst.splice(idx, 1);
8292}
8293
8294function viml_split(s, sep) {
8295 if (sep == "\\zs") {
8296 return s.split("");
8297 }
8298 throw "NotImplemented";
8299}
8300
8301function viml_str2nr(s) {
8302 var base = arguments.length >= 2 ? arguments[1] : 10;
8303 return parseInt(s, base);
8304}
8305
8306function viml_string(obj) {
8307 return obj.toString();
8308}
8309
8310function viml_has_key(obj, key) {
8311 return obj[key] !== undefined;
8312}
8313
8314function viml_stridx(a, b) {
8315 return a.indexOf(b);
8316}
8317
8318var NIL = [];
8319var TRUE = 1;
8320var FALSE = 0;
8321var NODE_TOPLEVEL = 1;
8322var NODE_COMMENT = 2;
8323var NODE_EXCMD = 3;
8324var NODE_FUNCTION = 4;
8325var NODE_ENDFUNCTION = 5;
8326var NODE_DELFUNCTION = 6;
8327var NODE_RETURN = 7;
8328var NODE_EXCALL = 8;
8329var NODE_LET = 9;
8330var NODE_UNLET = 10;
8331var NODE_LOCKVAR = 11;
8332var NODE_UNLOCKVAR = 12;
8333var NODE_IF = 13;
8334var NODE_ELSEIF = 14;
8335var NODE_ELSE = 15;
8336var NODE_ENDIF = 16;
8337var NODE_WHILE = 17;
8338var NODE_ENDWHILE = 18;
8339var NODE_FOR = 19;
8340var NODE_ENDFOR = 20;
8341var NODE_CONTINUE = 21;
8342var NODE_BREAK = 22;
8343var NODE_TRY = 23;
8344var NODE_CATCH = 24;
8345var NODE_FINALLY = 25;
8346var NODE_ENDTRY = 26;
8347var NODE_THROW = 27;
8348var NODE_ECHO = 28;
8349var NODE_ECHON = 29;
8350var NODE_ECHOHL = 30;
8351var NODE_ECHOMSG = 31;
8352var NODE_ECHOERR = 32;
8353var NODE_EXECUTE = 33;
8354var NODE_TERNARY = 34;
8355var NODE_OR = 35;
8356var NODE_AND = 36;
8357var NODE_EQUAL = 37;
8358var NODE_EQUALCI = 38;
8359var NODE_EQUALCS = 39;
8360var NODE_NEQUAL = 40;
8361var NODE_NEQUALCI = 41;
8362var NODE_NEQUALCS = 42;
8363var NODE_GREATER = 43;
8364var NODE_GREATERCI = 44;
8365var NODE_GREATERCS = 45;
8366var NODE_GEQUAL = 46;
8367var NODE_GEQUALCI = 47;
8368var NODE_GEQUALCS = 48;
8369var NODE_SMALLER = 49;
8370var NODE_SMALLERCI = 50;
8371var NODE_SMALLERCS = 51;
8372var NODE_SEQUAL = 52;
8373var NODE_SEQUALCI = 53;
8374var NODE_SEQUALCS = 54;
8375var NODE_MATCH = 55;
8376var NODE_MATCHCI = 56;
8377var NODE_MATCHCS = 57;
8378var NODE_NOMATCH = 58;
8379var NODE_NOMATCHCI = 59;
8380var NODE_NOMATCHCS = 60;
8381var NODE_IS = 61;
8382var NODE_ISCI = 62;
8383var NODE_ISCS = 63;
8384var NODE_ISNOT = 64;
8385var NODE_ISNOTCI = 65;
8386var NODE_ISNOTCS = 66;
8387var NODE_ADD = 67;
8388var NODE_SUBTRACT = 68;
8389var NODE_CONCAT = 69;
8390var NODE_MULTIPLY = 70;
8391var NODE_DIVIDE = 71;
8392var NODE_REMAINDER = 72;
8393var NODE_NOT = 73;
8394var NODE_MINUS = 74;
8395var NODE_PLUS = 75;
8396var NODE_SUBSCRIPT = 76;
8397var NODE_SLICE = 77;
8398var NODE_CALL = 78;
8399var NODE_DOT = 79;
8400var NODE_NUMBER = 80;
8401var NODE_STRING = 81;
8402var NODE_LIST = 82;
8403var NODE_DICT = 83;
8404var NODE_OPTION = 85;
8405var NODE_IDENTIFIER = 86;
8406var NODE_CURLYNAME = 87;
8407var NODE_ENV = 88;
8408var NODE_REG = 89;
8409var NODE_CURLYNAMEPART = 90;
8410var NODE_CURLYNAMEEXPR = 91;
8411var NODE_LAMBDA = 92;
8412var NODE_BLOB = 93;
8413var NODE_CONST = 94;
8414var NODE_EVAL = 95;
8415var NODE_HEREDOC = 96;
8416var NODE_METHOD = 97;
8417var TOKEN_EOF = 1;
8418var TOKEN_EOL = 2;
8419var TOKEN_SPACE = 3;
8420var TOKEN_OROR = 4;
8421var TOKEN_ANDAND = 5;
8422var TOKEN_EQEQ = 6;
8423var TOKEN_EQEQCI = 7;
8424var TOKEN_EQEQCS = 8;
8425var TOKEN_NEQ = 9;
8426var TOKEN_NEQCI = 10;
8427var TOKEN_NEQCS = 11;
8428var TOKEN_GT = 12;
8429var TOKEN_GTCI = 13;
8430var TOKEN_GTCS = 14;
8431var TOKEN_GTEQ = 15;
8432var TOKEN_GTEQCI = 16;
8433var TOKEN_GTEQCS = 17;
8434var TOKEN_LT = 18;
8435var TOKEN_LTCI = 19;
8436var TOKEN_LTCS = 20;
8437var TOKEN_LTEQ = 21;
8438var TOKEN_LTEQCI = 22;
8439var TOKEN_LTEQCS = 23;
8440var TOKEN_MATCH = 24;
8441var TOKEN_MATCHCI = 25;
8442var TOKEN_MATCHCS = 26;
8443var TOKEN_NOMATCH = 27;
8444var TOKEN_NOMATCHCI = 28;
8445var TOKEN_NOMATCHCS = 29;
8446var TOKEN_IS = 30;
8447var TOKEN_ISCI = 31;
8448var TOKEN_ISCS = 32;
8449var TOKEN_ISNOT = 33;
8450var TOKEN_ISNOTCI = 34;
8451var TOKEN_ISNOTCS = 35;
8452var TOKEN_PLUS = 36;
8453var TOKEN_MINUS = 37;
8454var TOKEN_DOT = 38;
8455var TOKEN_STAR = 39;
8456var TOKEN_SLASH = 40;
8457var TOKEN_PERCENT = 41;
8458var TOKEN_NOT = 42;
8459var TOKEN_QUESTION = 43;
8460var TOKEN_COLON = 44;
8461var TOKEN_POPEN = 45;
8462var TOKEN_PCLOSE = 46;
8463var TOKEN_SQOPEN = 47;
8464var TOKEN_SQCLOSE = 48;
8465var TOKEN_COPEN = 49;
8466var TOKEN_CCLOSE = 50;
8467var TOKEN_COMMA = 51;
8468var TOKEN_NUMBER = 52;
8469var TOKEN_SQUOTE = 53;
8470var TOKEN_DQUOTE = 54;
8471var TOKEN_OPTION = 55;
8472var TOKEN_IDENTIFIER = 56;
8473var TOKEN_ENV = 57;
8474var TOKEN_REG = 58;
8475var TOKEN_EQ = 59;
8476var TOKEN_OR = 60;
8477var TOKEN_SEMICOLON = 61;
8478var TOKEN_BACKTICK = 62;
8479var TOKEN_DOTDOTDOT = 63;
8480var TOKEN_SHARP = 64;
8481var TOKEN_ARROW = 65;
8482var TOKEN_BLOB = 66;
8483var TOKEN_LITCOPEN = 67;
8484var TOKEN_DOTDOT = 68;
8485var TOKEN_HEREDOC = 69;
8486var MAX_FUNC_ARGS = 20;
8487function isalpha(c) {
8488 return viml_eqregh(c, "^[A-Za-z]$");
8489}
8490
8491function isalnum(c) {
8492 return viml_eqregh(c, "^[0-9A-Za-z]$");
8493}
8494
8495function isdigit(c) {
8496 return viml_eqregh(c, "^[0-9]$");
8497}
8498
8499function isodigit(c) {
8500 return viml_eqregh(c, "^[0-7]$");
8501}
8502
8503function isxdigit(c) {
8504 return viml_eqregh(c, "^[0-9A-Fa-f]$");
8505}
8506
8507function iswordc(c) {
8508 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8509}
8510
8511function iswordc1(c) {
8512 return viml_eqregh(c, "^[A-Za-z_]$");
8513}
8514
8515function iswhite(c) {
8516 return viml_eqregh(c, "^[ \\t]$");
8517}
8518
8519function isnamec(c) {
8520 return viml_eqregh(c, "^[0-9A-Za-z_:#]$");
8521}
8522
8523function isnamec1(c) {
8524 return viml_eqregh(c, "^[A-Za-z_]$");
8525}
8526
8527function isargname(s) {
8528 return viml_eqregh(s, "^[A-Za-z_][0-9A-Za-z_]*$");
8529}
8530
8531function isvarname(s) {
8532 return viml_eqregh(s, "^[vgslabwt]:$\\|^\\([vgslabwt]:\\)\\?[A-Za-z_][0-9A-Za-z_#]*$");
8533}
8534
8535// FIXME:
8536function isidc(c) {
8537 return viml_eqregh(c, "^[0-9A-Za-z_]$");
8538}
8539
8540function isupper(c) {
8541 return viml_eqregh(c, "^[A-Z]$");
8542}
8543
8544function islower(c) {
8545 return viml_eqregh(c, "^[a-z]$");
8546}
8547
8548function ExArg() {
8549 var ea = {};
8550 ea.forceit = FALSE;
8551 ea.addr_count = 0;
8552 ea.line1 = 0;
8553 ea.line2 = 0;
8554 ea.flags = 0;
8555 ea.do_ecmd_cmd = "";
8556 ea.do_ecmd_lnum = 0;
8557 ea.append = 0;
8558 ea.usefilter = FALSE;
8559 ea.amount = 0;
8560 ea.regname = 0;
8561 ea.force_bin = 0;
8562 ea.read_edit = 0;
8563 ea.force_ff = 0;
8564 ea.force_enc = 0;
8565 ea.bad_char = 0;
8566 ea.linepos = {};
8567 ea.cmdpos = [];
8568 ea.argpos = [];
8569 ea.cmd = {};
8570 ea.modifiers = [];
8571 ea.range = [];
8572 ea.argopt = {};
8573 ea.argcmd = {};
8574 return ea;
8575}
8576
8577// struct node {
8578// int type
8579// pos pos
8580// node left
8581// node right
8582// node cond
8583// node rest
8584// node[] list
8585// node[] rlist
8586// node[] default_args
8587// node[] body
8588// string op
8589// string str
8590// int depth
8591// variant value
8592// }
8593// TOPLEVEL .body
8594// COMMENT .str
8595// EXCMD .ea .str
8596// FUNCTION .ea .body .left .rlist .default_args .attr .endfunction
8597// ENDFUNCTION .ea
8598// DELFUNCTION .ea .left
8599// RETURN .ea .left
8600// EXCALL .ea .left
8601// LET .ea .op .left .list .rest .right
8602// CONST .ea .op .left .list .rest .right
8603// UNLET .ea .list
8604// LOCKVAR .ea .depth .list
8605// UNLOCKVAR .ea .depth .list
8606// IF .ea .body .cond .elseif .else .endif
8607// ELSEIF .ea .body .cond
8608// ELSE .ea .body
8609// ENDIF .ea
8610// WHILE .ea .body .cond .endwhile
8611// ENDWHILE .ea
8612// FOR .ea .body .left .list .rest .right .endfor
8613// ENDFOR .ea
8614// CONTINUE .ea
8615// BREAK .ea
8616// TRY .ea .body .catch .finally .endtry
8617// CATCH .ea .body .pattern
8618// FINALLY .ea .body
8619// ENDTRY .ea
8620// THROW .ea .left
8621// EVAL .ea .left
8622// ECHO .ea .list
8623// ECHON .ea .list
8624// ECHOHL .ea .str
8625// ECHOMSG .ea .list
8626// ECHOERR .ea .list
8627// EXECUTE .ea .list
8628// TERNARY .cond .left .right
8629// OR .left .right
8630// AND .left .right
8631// EQUAL .left .right
8632// EQUALCI .left .right
8633// EQUALCS .left .right
8634// NEQUAL .left .right
8635// NEQUALCI .left .right
8636// NEQUALCS .left .right
8637// GREATER .left .right
8638// GREATERCI .left .right
8639// GREATERCS .left .right
8640// GEQUAL .left .right
8641// GEQUALCI .left .right
8642// GEQUALCS .left .right
8643// SMALLER .left .right
8644// SMALLERCI .left .right
8645// SMALLERCS .left .right
8646// SEQUAL .left .right
8647// SEQUALCI .left .right
8648// SEQUALCS .left .right
8649// MATCH .left .right
8650// MATCHCI .left .right
8651// MATCHCS .left .right
8652// NOMATCH .left .right
8653// NOMATCHCI .left .right
8654// NOMATCHCS .left .right
8655// IS .left .right
8656// ISCI .left .right
8657// ISCS .left .right
8658// ISNOT .left .right
8659// ISNOTCI .left .right
8660// ISNOTCS .left .right
8661// ADD .left .right
8662// SUBTRACT .left .right
8663// CONCAT .left .right
8664// MULTIPLY .left .right
8665// DIVIDE .left .right
8666// REMAINDER .left .right
8667// NOT .left
8668// MINUS .left
8669// PLUS .left
8670// SUBSCRIPT .left .right
8671// SLICE .left .rlist
8672// METHOD .left .right
8673// CALL .left .rlist
8674// DOT .left .right
8675// NUMBER .value
8676// STRING .value
8677// LIST .value
8678// DICT .value
8679// BLOB .value
8680// NESTING .left
8681// OPTION .value
8682// IDENTIFIER .value
8683// CURLYNAME .value
8684// ENV .value
8685// REG .value
8686// CURLYNAMEPART .value
8687// CURLYNAMEEXPR .value
8688// LAMBDA .rlist .left
8689// HEREDOC .rlist .op .body
8690function Node(type) {
8691 return {"type":type};
8692}
8693
8694function Err(msg, pos) {
8695 return viml_printf("vimlparser: %s: line %d col %d", msg, pos.lnum, pos.col);
8696}
8697
8698function VimLParser() { this.__init__.apply(this, arguments); }
8699VimLParser.prototype.__init__ = function() {
8700 var a000 = Array.prototype.slice.call(arguments, 0);
8701 if (viml_len(a000) > 0) {
8702 this.neovim = a000[0];
8703 }
8704 else {
8705 this.neovim = 0;
8706 }
8707 this.find_command_cache = {};
8708}
8709
8710VimLParser.prototype.push_context = function(node) {
8711 viml_insert(this.context, node);
8712}
8713
8714VimLParser.prototype.pop_context = function() {
8715 viml_remove(this.context, 0);
8716}
8717
8718VimLParser.prototype.find_context = function(type) {
8719 var i = 0;
8720 var __c3 = this.context;
8721 for (var __i3 = 0; __i3 < __c3.length; ++__i3) {
8722 var node = __c3[__i3];
8723 if (node.type == type) {
8724 return i;
8725 }
8726 i += 1;
8727 }
8728 return -1;
8729}
8730
8731VimLParser.prototype.add_node = function(node) {
8732 viml_add(this.context[0].body, node);
8733}
8734
8735VimLParser.prototype.check_missing_endfunction = function(ends, pos) {
8736 if (this.context[0].type == NODE_FUNCTION) {
8737 throw Err(viml_printf("E126: Missing :endfunction: %s", ends), pos);
8738 }
8739}
8740
8741VimLParser.prototype.check_missing_endif = function(ends, pos) {
8742 if (this.context[0].type == NODE_IF || this.context[0].type == NODE_ELSEIF || this.context[0].type == NODE_ELSE) {
8743 throw Err(viml_printf("E171: Missing :endif: %s", ends), pos);
8744 }
8745}
8746
8747VimLParser.prototype.check_missing_endtry = function(ends, pos) {
8748 if (this.context[0].type == NODE_TRY || this.context[0].type == NODE_CATCH || this.context[0].type == NODE_FINALLY) {
8749 throw Err(viml_printf("E600: Missing :endtry: %s", ends), pos);
8750 }
8751}
8752
8753VimLParser.prototype.check_missing_endwhile = function(ends, pos) {
8754 if (this.context[0].type == NODE_WHILE) {
8755 throw Err(viml_printf("E170: Missing :endwhile: %s", ends), pos);
8756 }
8757}
8758
8759VimLParser.prototype.check_missing_endfor = function(ends, pos) {
8760 if (this.context[0].type == NODE_FOR) {
8761 throw Err(viml_printf("E170: Missing :endfor: %s", ends), pos);
8762 }
8763}
8764
8765VimLParser.prototype.parse = function(reader) {
8766 this.reader = reader;
8767 this.context = [];
8768 var toplevel = Node(NODE_TOPLEVEL);
8769 toplevel.pos = this.reader.getpos();
8770 toplevel.body = [];
8771 this.push_context(toplevel);
8772 while (this.reader.peek() != "<EOF>") {
8773 this.parse_one_cmd();
8774 }
8775 this.check_missing_endfunction("TOPLEVEL", this.reader.getpos());
8776 this.check_missing_endif("TOPLEVEL", this.reader.getpos());
8777 this.check_missing_endtry("TOPLEVEL", this.reader.getpos());
8778 this.check_missing_endwhile("TOPLEVEL", this.reader.getpos());
8779 this.check_missing_endfor("TOPLEVEL", this.reader.getpos());
8780 this.pop_context();
8781 return toplevel;
8782}
8783
8784VimLParser.prototype.parse_one_cmd = function() {
8785 this.ea = ExArg();
8786 if (this.reader.peekn(2) == "#!") {
8787 this.parse_hashbang();
8788 this.reader.get();
8789 return;
8790 }
8791 this.reader.skip_white_and_colon();
8792 if (this.reader.peekn(1) == "") {
8793 this.reader.get();
8794 return;
8795 }
8796 if (this.reader.peekn(1) == "\"") {
8797 this.parse_comment();
8798 this.reader.get();
8799 return;
8800 }
8801 this.ea.linepos = this.reader.getpos();
8802 this.parse_command_modifiers();
8803 this.parse_range();
8804 this.parse_command();
8805 this.parse_trail();
8806}
8807
8808// FIXME:
8809VimLParser.prototype.parse_command_modifiers = function() {
8810 var modifiers = [];
8811 while (TRUE) {
8812 var pos = this.reader.tell();
8813 var d = "";
8814 if (isdigit(this.reader.peekn(1))) {
8815 var d = this.reader.read_digit();
8816 this.reader.skip_white();
8817 }
8818 var k = this.reader.read_alpha();
8819 var c = this.reader.peekn(1);
8820 this.reader.skip_white();
8821 if (viml_stridx("aboveleft", k) == 0 && viml_len(k) >= 3) {
8822 // abo\%[veleft]
8823 viml_add(modifiers, {"name":"aboveleft"});
8824 }
8825 else if (viml_stridx("belowright", k) == 0 && viml_len(k) >= 3) {
8826 // bel\%[owright]
8827 viml_add(modifiers, {"name":"belowright"});
8828 }
8829 else if (viml_stridx("browse", k) == 0 && viml_len(k) >= 3) {
8830 // bro\%[wse]
8831 viml_add(modifiers, {"name":"browse"});
8832 }
8833 else if (viml_stridx("botright", k) == 0 && viml_len(k) >= 2) {
8834 // bo\%[tright]
8835 viml_add(modifiers, {"name":"botright"});
8836 }
8837 else if (viml_stridx("confirm", k) == 0 && viml_len(k) >= 4) {
8838 // conf\%[irm]
8839 viml_add(modifiers, {"name":"confirm"});
8840 }
8841 else if (viml_stridx("keepmarks", k) == 0 && viml_len(k) >= 3) {
8842 // kee\%[pmarks]
8843 viml_add(modifiers, {"name":"keepmarks"});
8844 }
8845 else if (viml_stridx("keepalt", k) == 0 && viml_len(k) >= 5) {
8846 // keepa\%[lt]
8847 viml_add(modifiers, {"name":"keepalt"});
8848 }
8849 else if (viml_stridx("keepjumps", k) == 0 && viml_len(k) >= 5) {
8850 // keepj\%[umps]
8851 viml_add(modifiers, {"name":"keepjumps"});
8852 }
8853 else if (viml_stridx("keeppatterns", k) == 0 && viml_len(k) >= 5) {
8854 // keepp\%[atterns]
8855 viml_add(modifiers, {"name":"keeppatterns"});
8856 }
8857 else if (viml_stridx("hide", k) == 0 && viml_len(k) >= 3) {
8858 // hid\%[e]
8859 if (this.ends_excmds(c)) {
8860 break;
8861 }
8862 viml_add(modifiers, {"name":"hide"});
8863 }
8864 else if (viml_stridx("lockmarks", k) == 0 && viml_len(k) >= 3) {
8865 // loc\%[kmarks]
8866 viml_add(modifiers, {"name":"lockmarks"});
8867 }
8868 else if (viml_stridx("leftabove", k) == 0 && viml_len(k) >= 5) {
8869 // lefta\%[bove]
8870 viml_add(modifiers, {"name":"leftabove"});
8871 }
8872 else if (viml_stridx("noautocmd", k) == 0 && viml_len(k) >= 3) {
8873 // noa\%[utocmd]
8874 viml_add(modifiers, {"name":"noautocmd"});
8875 }
8876 else if (viml_stridx("noswapfile", k) == 0 && viml_len(k) >= 3) {
8877 // :nos\%[wapfile]
8878 viml_add(modifiers, {"name":"noswapfile"});
8879 }
8880 else if (viml_stridx("rightbelow", k) == 0 && viml_len(k) >= 6) {
8881 // rightb\%[elow]
8882 viml_add(modifiers, {"name":"rightbelow"});
8883 }
8884 else if (viml_stridx("sandbox", k) == 0 && viml_len(k) >= 3) {
8885 // san\%[dbox]
8886 viml_add(modifiers, {"name":"sandbox"});
8887 }
8888 else if (viml_stridx("silent", k) == 0 && viml_len(k) >= 3) {
8889 // sil\%[ent]
8890 if (c == "!") {
8891 this.reader.get();
8892 viml_add(modifiers, {"name":"silent", "bang":1});
8893 }
8894 else {
8895 viml_add(modifiers, {"name":"silent", "bang":0});
8896 }
8897 }
8898 else if (k == "tab") {
8899 // tab
8900 if (d != "") {
8901 viml_add(modifiers, {"name":"tab", "count":viml_str2nr(d, 10)});
8902 }
8903 else {
8904 viml_add(modifiers, {"name":"tab"});
8905 }
8906 }
8907 else if (viml_stridx("topleft", k) == 0 && viml_len(k) >= 2) {
8908 // to\%[pleft]
8909 viml_add(modifiers, {"name":"topleft"});
8910 }
8911 else if (viml_stridx("unsilent", k) == 0 && viml_len(k) >= 3) {
8912 // uns\%[ilent]
8913 viml_add(modifiers, {"name":"unsilent"});
8914 }
8915 else if (viml_stridx("vertical", k) == 0 && viml_len(k) >= 4) {
8916 // vert\%[ical]
8917 viml_add(modifiers, {"name":"vertical"});
8918 }
8919 else if (viml_stridx("verbose", k) == 0 && viml_len(k) >= 4) {
8920 // verb\%[ose]
8921 if (d != "") {
8922 viml_add(modifiers, {"name":"verbose", "count":viml_str2nr(d, 10)});
8923 }
8924 else {
8925 viml_add(modifiers, {"name":"verbose", "count":1});
8926 }
8927 }
8928 else {
8929 this.reader.seek_set(pos);
8930 break;
8931 }
8932 }
8933 this.ea.modifiers = modifiers;
8934}
8935
8936// FIXME:
8937VimLParser.prototype.parse_range = function() {
8938 var tokens = [];
8939 while (TRUE) {
8940 while (TRUE) {
8941 this.reader.skip_white();
8942 var c = this.reader.peekn(1);
8943 if (c == "") {
8944 break;
8945 }
8946 if (c == ".") {
8947 viml_add(tokens, this.reader.getn(1));
8948 }
8949 else if (c == "$") {
8950 viml_add(tokens, this.reader.getn(1));
8951 }
8952 else if (c == "'") {
8953 this.reader.getn(1);
8954 var m = this.reader.getn(1);
8955 if (m == "") {
8956 break;
8957 }
8958 viml_add(tokens, "'" + m);
8959 }
8960 else if (c == "/") {
8961 this.reader.getn(1);
8962 var __tmp = this.parse_pattern(c);
8963 var pattern = __tmp[0];
8964 var _ = __tmp[1];
8965 viml_add(tokens, pattern);
8966 }
8967 else if (c == "?") {
8968 this.reader.getn(1);
8969 var __tmp = this.parse_pattern(c);
8970 var pattern = __tmp[0];
8971 var _ = __tmp[1];
8972 viml_add(tokens, pattern);
8973 }
8974 else if (c == "\\") {
8975 var m = this.reader.p(1);
8976 if (m == "&" || m == "?" || m == "/") {
8977 this.reader.seek_cur(2);
8978 viml_add(tokens, "\\" + m);
8979 }
8980 else {
8981 throw Err("E10: \\\\ should be followed by /, ? or &", this.reader.getpos());
8982 }
8983 }
8984 else if (isdigit(c)) {
8985 viml_add(tokens, this.reader.read_digit());
8986 }
8987 while (TRUE) {
8988 this.reader.skip_white();
8989 if (this.reader.peekn(1) == "") {
8990 break;
8991 }
8992 var n = this.reader.read_integer();
8993 if (n == "") {
8994 break;
8995 }
8996 viml_add(tokens, n);
8997 }
8998 if (this.reader.p(0) != "/" && this.reader.p(0) != "?") {
8999 break;
9000 }
9001 }
9002 if (this.reader.peekn(1) == "%") {
9003 viml_add(tokens, this.reader.getn(1));
9004 }
9005 else if (this.reader.peekn(1) == "*") {
9006 // && &cpoptions !~ '\*'
9007 viml_add(tokens, this.reader.getn(1));
9008 }
9009 if (this.reader.peekn(1) == ";") {
9010 viml_add(tokens, this.reader.getn(1));
9011 continue;
9012 }
9013 else if (this.reader.peekn(1) == ",") {
9014 viml_add(tokens, this.reader.getn(1));
9015 continue;
9016 }
9017 break;
9018 }
9019 this.ea.range = tokens;
9020}
9021
9022// FIXME:
9023VimLParser.prototype.parse_pattern = function(delimiter) {
9024 var pattern = "";
9025 var endc = "";
9026 var inbracket = 0;
9027 while (TRUE) {
9028 var c = this.reader.getn(1);
9029 if (c == "") {
9030 break;
9031 }
9032 if (c == delimiter && inbracket == 0) {
9033 var endc = c;
9034 break;
9035 }
9036 pattern += c;
9037 if (c == "\\") {
9038 var c = this.reader.peekn(1);
9039 if (c == "") {
9040 throw Err("E682: Invalid search pattern or delimiter", this.reader.getpos());
9041 }
9042 this.reader.getn(1);
9043 pattern += c;
9044 }
9045 else if (c == "[") {
9046 inbracket += 1;
9047 }
9048 else if (c == "]") {
9049 inbracket -= 1;
9050 }
9051 }
9052 return [pattern, endc];
9053}
9054
9055VimLParser.prototype.parse_command = function() {
9056 this.reader.skip_white_and_colon();
9057 this.ea.cmdpos = this.reader.getpos();
9058 if (this.reader.peekn(1) == "" || this.reader.peekn(1) == "\"") {
9059 if (!viml_empty(this.ea.modifiers) || !viml_empty(this.ea.range)) {
9060 this.parse_cmd_modifier_range();
9061 }
9062 return;
9063 }
9064 this.ea.cmd = this.find_command();
9065 if (this.ea.cmd === NIL) {
9066 this.reader.setpos(this.ea.cmdpos);
9067 throw Err(viml_printf("E492: Not an editor command: %s", this.reader.peekline()), this.ea.cmdpos);
9068 }
9069 if (this.reader.peekn(1) == "!" && this.ea.cmd.name != "substitute" && this.ea.cmd.name != "smagic" && this.ea.cmd.name != "snomagic") {
9070 this.reader.getn(1);
9071 this.ea.forceit = TRUE;
9072 }
9073 else {
9074 this.ea.forceit = FALSE;
9075 }
9076 if (!viml_eqregh(this.ea.cmd.flags, "\\<BANG\\>") && this.ea.forceit && !viml_eqregh(this.ea.cmd.flags, "\\<USERCMD\\>")) {
9077 throw Err("E477: No ! allowed", this.ea.cmdpos);
9078 }
9079 if (this.ea.cmd.name != "!") {
9080 this.reader.skip_white();
9081 }
9082 this.ea.argpos = this.reader.getpos();
9083 if (viml_eqregh(this.ea.cmd.flags, "\\<ARGOPT\\>")) {
9084 this.parse_argopt();
9085 }
9086 if (this.ea.cmd.name == "write" || this.ea.cmd.name == "update") {
9087 if (this.reader.p(0) == ">") {
9088 if (this.reader.p(1) != ">") {
9089 throw Err("E494: Use w or w>>", this.ea.cmdpos);
9090 }
9091 this.reader.seek_cur(2);
9092 this.reader.skip_white();
9093 this.ea.append = 1;
9094 }
9095 else if (this.reader.peekn(1) == "!" && this.ea.cmd.name == "write") {
9096 this.reader.getn(1);
9097 this.ea.usefilter = TRUE;
9098 }
9099 }
9100 if (this.ea.cmd.name == "read") {
9101 if (this.ea.forceit) {
9102 this.ea.usefilter = TRUE;
9103 this.ea.forceit = FALSE;
9104 }
9105 else if (this.reader.peekn(1) == "!") {
9106 this.reader.getn(1);
9107 this.ea.usefilter = TRUE;
9108 }
9109 }
9110 if (this.ea.cmd.name == "<" || this.ea.cmd.name == ">") {
9111 this.ea.amount = 1;
9112 while (this.reader.peekn(1) == this.ea.cmd.name) {
9113 this.reader.getn(1);
9114 this.ea.amount += 1;
9115 }
9116 this.reader.skip_white();
9117 }
9118 if (viml_eqregh(this.ea.cmd.flags, "\\<EDITCMD\\>") && !this.ea.usefilter) {
9119 this.parse_argcmd();
9120 }
9121 this._parse_command(this.ea.cmd.parser);
9122}
9123
9124// TODO: self[a:parser]
9125VimLParser.prototype._parse_command = function(parser) {
9126 if (parser == "parse_cmd_append") {
9127 this.parse_cmd_append();
9128 }
9129 else if (parser == "parse_cmd_break") {
9130 this.parse_cmd_break();
9131 }
9132 else if (parser == "parse_cmd_call") {
9133 this.parse_cmd_call();
9134 }
9135 else if (parser == "parse_cmd_catch") {
9136 this.parse_cmd_catch();
9137 }
9138 else if (parser == "parse_cmd_common") {
9139 this.parse_cmd_common();
9140 }
9141 else if (parser == "parse_cmd_continue") {
9142 this.parse_cmd_continue();
9143 }
9144 else if (parser == "parse_cmd_delfunction") {
9145 this.parse_cmd_delfunction();
9146 }
9147 else if (parser == "parse_cmd_echo") {
9148 this.parse_cmd_echo();
9149 }
9150 else if (parser == "parse_cmd_echoerr") {
9151 this.parse_cmd_echoerr();
9152 }
9153 else if (parser == "parse_cmd_echohl") {
9154 this.parse_cmd_echohl();
9155 }
9156 else if (parser == "parse_cmd_echomsg") {
9157 this.parse_cmd_echomsg();
9158 }
9159 else if (parser == "parse_cmd_echon") {
9160 this.parse_cmd_echon();
9161 }
9162 else if (parser == "parse_cmd_else") {
9163 this.parse_cmd_else();
9164 }
9165 else if (parser == "parse_cmd_elseif") {
9166 this.parse_cmd_elseif();
9167 }
9168 else if (parser == "parse_cmd_endfor") {
9169 this.parse_cmd_endfor();
9170 }
9171 else if (parser == "parse_cmd_endfunction") {
9172 this.parse_cmd_endfunction();
9173 }
9174 else if (parser == "parse_cmd_endif") {
9175 this.parse_cmd_endif();
9176 }
9177 else if (parser == "parse_cmd_endtry") {
9178 this.parse_cmd_endtry();
9179 }
9180 else if (parser == "parse_cmd_endwhile") {
9181 this.parse_cmd_endwhile();
9182 }
9183 else if (parser == "parse_cmd_execute") {
9184 this.parse_cmd_execute();
9185 }
9186 else if (parser == "parse_cmd_finally") {
9187 this.parse_cmd_finally();
9188 }
9189 else if (parser == "parse_cmd_finish") {
9190 this.parse_cmd_finish();
9191 }
9192 else if (parser == "parse_cmd_for") {
9193 this.parse_cmd_for();
9194 }
9195 else if (parser == "parse_cmd_function") {
9196 this.parse_cmd_function();
9197 }
9198 else if (parser == "parse_cmd_if") {
9199 this.parse_cmd_if();
9200 }
9201 else if (parser == "parse_cmd_insert") {
9202 this.parse_cmd_insert();
9203 }
9204 else if (parser == "parse_cmd_let") {
9205 this.parse_cmd_let();
9206 }
9207 else if (parser == "parse_cmd_const") {
9208 this.parse_cmd_const();
9209 }
9210 else if (parser == "parse_cmd_loadkeymap") {
9211 this.parse_cmd_loadkeymap();
9212 }
9213 else if (parser == "parse_cmd_lockvar") {
9214 this.parse_cmd_lockvar();
9215 }
9216 else if (parser == "parse_cmd_lua") {
9217 this.parse_cmd_lua();
9218 }
9219 else if (parser == "parse_cmd_modifier_range") {
9220 this.parse_cmd_modifier_range();
9221 }
9222 else if (parser == "parse_cmd_mzscheme") {
9223 this.parse_cmd_mzscheme();
9224 }
9225 else if (parser == "parse_cmd_perl") {
9226 this.parse_cmd_perl();
9227 }
9228 else if (parser == "parse_cmd_python") {
9229 this.parse_cmd_python();
9230 }
9231 else if (parser == "parse_cmd_python3") {
9232 this.parse_cmd_python3();
9233 }
9234 else if (parser == "parse_cmd_return") {
9235 this.parse_cmd_return();
9236 }
9237 else if (parser == "parse_cmd_ruby") {
9238 this.parse_cmd_ruby();
9239 }
9240 else if (parser == "parse_cmd_tcl") {
9241 this.parse_cmd_tcl();
9242 }
9243 else if (parser == "parse_cmd_throw") {
9244 this.parse_cmd_throw();
9245 }
9246 else if (parser == "parse_cmd_eval") {
9247 this.parse_cmd_eval();
9248 }
9249 else if (parser == "parse_cmd_try") {
9250 this.parse_cmd_try();
9251 }
9252 else if (parser == "parse_cmd_unlet") {
9253 this.parse_cmd_unlet();
9254 }
9255 else if (parser == "parse_cmd_unlockvar") {
9256 this.parse_cmd_unlockvar();
9257 }
9258 else if (parser == "parse_cmd_usercmd") {
9259 this.parse_cmd_usercmd();
9260 }
9261 else if (parser == "parse_cmd_while") {
9262 this.parse_cmd_while();
9263 }
9264 else if (parser == "parse_wincmd") {
9265 this.parse_wincmd();
9266 }
9267 else if (parser == "parse_cmd_syntax") {
9268 this.parse_cmd_syntax();
9269 }
9270 else {
9271 throw viml_printf("unknown parser: %s", viml_string(parser));
9272 }
9273}
9274
9275VimLParser.prototype.find_command = function() {
9276 var c = this.reader.peekn(1);
9277 var name = "";
9278 if (c == "k") {
9279 this.reader.getn(1);
9280 var name = "k";
9281 }
9282 else if (c == "s" && viml_eqregh(this.reader.peekn(5), "\\v^s%(c[^sr][^i][^p]|g|i[^mlg]|I|r[^e])")) {
9283 this.reader.getn(1);
9284 var name = "substitute";
9285 }
9286 else if (viml_eqregh(c, "[@*!=><&~#]")) {
9287 this.reader.getn(1);
9288 var name = c;
9289 }
9290 else if (this.reader.peekn(2) == "py") {
9291 var name = this.reader.read_alnum();
9292 }
9293 else {
9294 var pos = this.reader.tell();
9295 var name = this.reader.read_alpha();
9296 if (name != "del" && viml_eqregh(name, "\\v^d%[elete][lp]$")) {
9297 this.reader.seek_set(pos);
9298 var name = this.reader.getn(viml_len(name) - 1);
9299 }
9300 }
9301 if (name == "") {
9302 return NIL;
9303 }
9304 if (viml_has_key(this.find_command_cache, name)) {
9305 return this.find_command_cache[name];
9306 }
9307 var cmd = NIL;
9308 var __c4 = this.builtin_commands;
9309 for (var __i4 = 0; __i4 < __c4.length; ++__i4) {
9310 var x = __c4[__i4];
9311 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9312 delete cmd;
9313 var cmd = x;
9314 break;
9315 }
9316 }
9317 if (this.neovim) {
9318 var __c5 = this.neovim_additional_commands;
9319 for (var __i5 = 0; __i5 < __c5.length; ++__i5) {
9320 var x = __c5[__i5];
9321 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9322 delete cmd;
9323 var cmd = x;
9324 break;
9325 }
9326 }
9327 var __c6 = this.neovim_removed_commands;
9328 for (var __i6 = 0; __i6 < __c6.length; ++__i6) {
9329 var x = __c6[__i6];
9330 if (viml_stridx(x.name, name) == 0 && viml_len(name) >= x.minlen) {
9331 delete cmd;
9332 var cmd = NIL;
9333 break;
9334 }
9335 }
9336 }
9337 // FIXME: user defined command
9338 if ((cmd === NIL || cmd.name == "Print") && viml_eqregh(name, "^[A-Z]")) {
9339 name += this.reader.read_alnum();
9340 delete cmd;
9341 var cmd = {"name":name, "flags":"USERCMD", "parser":"parse_cmd_usercmd"};
9342 }
9343 this.find_command_cache[name] = cmd;
9344 return cmd;
9345}
9346
9347// TODO:
9348VimLParser.prototype.parse_hashbang = function() {
9349 this.reader.getn(-1);
9350}
9351
9352// TODO:
9353// ++opt=val
9354VimLParser.prototype.parse_argopt = function() {
9355 while (this.reader.p(0) == "+" && this.reader.p(1) == "+") {
9356 var s = this.reader.peekn(20);
9357 if (viml_eqregh(s, "^++bin\\>")) {
9358 this.reader.getn(5);
9359 this.ea.force_bin = 1;
9360 }
9361 else if (viml_eqregh(s, "^++nobin\\>")) {
9362 this.reader.getn(7);
9363 this.ea.force_bin = 2;
9364 }
9365 else if (viml_eqregh(s, "^++edit\\>")) {
9366 this.reader.getn(6);
9367 this.ea.read_edit = 1;
9368 }
9369 else if (viml_eqregh(s, "^++ff=\\(dos\\|unix\\|mac\\)\\>")) {
9370 this.reader.getn(5);
9371 this.ea.force_ff = this.reader.read_alpha();
9372 }
9373 else if (viml_eqregh(s, "^++fileformat=\\(dos\\|unix\\|mac\\)\\>")) {
9374 this.reader.getn(13);
9375 this.ea.force_ff = this.reader.read_alpha();
9376 }
9377 else if (viml_eqregh(s, "^++enc=\\S")) {
9378 this.reader.getn(6);
9379 this.ea.force_enc = this.reader.read_nonwhite();
9380 }
9381 else if (viml_eqregh(s, "^++encoding=\\S")) {
9382 this.reader.getn(11);
9383 this.ea.force_enc = this.reader.read_nonwhite();
9384 }
9385 else if (viml_eqregh(s, "^++bad=\\(keep\\|drop\\|.\\)\\>")) {
9386 this.reader.getn(6);
9387 if (viml_eqregh(s, "^++bad=keep")) {
9388 this.ea.bad_char = this.reader.getn(4);
9389 }
9390 else if (viml_eqregh(s, "^++bad=drop")) {
9391 this.ea.bad_char = this.reader.getn(4);
9392 }
9393 else {
9394 this.ea.bad_char = this.reader.getn(1);
9395 }
9396 }
9397 else if (viml_eqregh(s, "^++")) {
9398 throw Err("E474: Invalid Argument", this.reader.getpos());
9399 }
9400 else {
9401 break;
9402 }
9403 this.reader.skip_white();
9404 }
9405}
9406
9407// TODO:
9408// +command
9409VimLParser.prototype.parse_argcmd = function() {
9410 if (this.reader.peekn(1) == "+") {
9411 this.reader.getn(1);
9412 if (this.reader.peekn(1) == " ") {
9413 this.ea.do_ecmd_cmd = "$";
9414 }
9415 else {
9416 this.ea.do_ecmd_cmd = this.read_cmdarg();
9417 }
9418 }
9419}
9420
9421VimLParser.prototype.read_cmdarg = function() {
9422 var r = "";
9423 while (TRUE) {
9424 var c = this.reader.peekn(1);
9425 if (c == "" || iswhite(c)) {
9426 break;
9427 }
9428 this.reader.getn(1);
9429 if (c == "\\") {
9430 var c = this.reader.getn(1);
9431 }
9432 r += c;
9433 }
9434 return r;
9435}
9436
9437VimLParser.prototype.parse_comment = function() {
9438 var npos = this.reader.getpos();
9439 var c = this.reader.get();
9440 if (c != "\"") {
9441 throw Err(viml_printf("unexpected character: %s", c), npos);
9442 }
9443 var node = Node(NODE_COMMENT);
9444 node.pos = npos;
9445 node.str = this.reader.getn(-1);
9446 this.add_node(node);
9447}
9448
9449VimLParser.prototype.parse_trail = function() {
9450 this.reader.skip_white();
9451 var c = this.reader.peek();
9452 if (c == "<EOF>") {
9453 // pass
9454 }
9455 else if (c == "<EOL>") {
9456 this.reader.get();
9457 }
9458 else if (c == "|") {
9459 this.reader.get();
9460 }
9461 else if (c == "\"") {
9462 this.parse_comment();
9463 this.reader.get();
9464 }
9465 else {
9466 throw Err(viml_printf("E488: Trailing characters: %s", c), this.reader.getpos());
9467 }
9468}
9469
9470// modifier or range only command line
9471VimLParser.prototype.parse_cmd_modifier_range = function() {
9472 var node = Node(NODE_EXCMD);
9473 node.pos = this.ea.cmdpos;
9474 node.ea = this.ea;
9475 node.str = this.reader.getstr(this.ea.linepos, this.reader.getpos());
9476 this.add_node(node);
9477}
9478
9479// TODO:
9480VimLParser.prototype.parse_cmd_common = function() {
9481 var end = this.reader.getpos();
9482 if (viml_eqregh(this.ea.cmd.flags, "\\<TRLBAR\\>") && !this.ea.usefilter) {
9483 var end = this.separate_nextcmd();
9484 }
9485 else if (this.ea.cmd.name == "!" || this.ea.cmd.name == "global" || this.ea.cmd.name == "vglobal" || this.ea.usefilter) {
9486 while (TRUE) {
9487 var end = this.reader.getpos();
9488 if (this.reader.getn(1) == "") {
9489 break;
9490 }
9491 }
9492 }
9493 else {
9494 while (TRUE) {
9495 var end = this.reader.getpos();
9496 if (this.reader.getn(1) == "") {
9497 break;
9498 }
9499 }
9500 }
9501 var node = Node(NODE_EXCMD);
9502 node.pos = this.ea.cmdpos;
9503 node.ea = this.ea;
9504 node.str = this.reader.getstr(this.ea.linepos, end);
9505 this.add_node(node);
9506}
9507
9508VimLParser.prototype.separate_nextcmd = function() {
9509 if (this.ea.cmd.name == "vimgrep" || this.ea.cmd.name == "vimgrepadd" || this.ea.cmd.name == "lvimgrep" || this.ea.cmd.name == "lvimgrepadd") {
9510 this.skip_vimgrep_pat();
9511 }
9512 var pc = "";
9513 var end = this.reader.getpos();
9514 var nospend = end;
9515 while (TRUE) {
9516 var end = this.reader.getpos();
9517 if (!iswhite(pc)) {
9518 var nospend = end;
9519 }
9520 var c = this.reader.peek();
9521 if (c == "<EOF>" || c == "<EOL>") {
9522 break;
9523 }
9524 else if (c == "\x16") {
9525 // <C-V>
9526 this.reader.get();
9527 var end = this.reader.getpos();
9528 var nospend = this.reader.getpos();
9529 var c = this.reader.peek();
9530 if (c == "<EOF>" || c == "<EOL>") {
9531 break;
9532 }
9533 this.reader.get();
9534 }
9535 else if (this.reader.peekn(2) == "`=" && viml_eqregh(this.ea.cmd.flags, "\\<\\(XFILE\\|FILES\\|FILE1\\)\\>")) {
9536 this.reader.getn(2);
9537 this.parse_expr();
9538 var c = this.reader.peekn(1);
9539 if (c != "`") {
9540 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
9541 }
9542 this.reader.getn(1);
9543 }
9544 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 != "@")) {
9545 var has_cpo_bar = FALSE;
9546 // &cpoptions =~ 'b'
9547 if ((!has_cpo_bar || !viml_eqregh(this.ea.cmd.flags, "\\<USECTRLV\\>")) && pc == "\\") {
9548 this.reader.get();
9549 }
9550 else {
9551 break;
9552 }
9553 }
9554 else {
9555 this.reader.get();
9556 }
9557 var pc = c;
9558 }
9559 if (!viml_eqregh(this.ea.cmd.flags, "\\<NOTRLCOM\\>")) {
9560 var end = nospend;
9561 }
9562 return end;
9563}
9564
9565// FIXME
9566VimLParser.prototype.skip_vimgrep_pat = function() {
9567 if (this.reader.peekn(1) == "") {
9568 // pass
9569 }
9570 else if (isidc(this.reader.peekn(1))) {
9571 // :vimgrep pattern fname
9572 this.reader.read_nonwhite();
9573 }
9574 else {
9575 // :vimgrep /pattern/[g][j] fname
9576 var c = this.reader.getn(1);
9577 var __tmp = this.parse_pattern(c);
9578 var _ = __tmp[0];
9579 var endc = __tmp[1];
9580 if (c != endc) {
9581 return;
9582 }
9583 while (this.reader.p(0) == "g" || this.reader.p(0) == "j") {
9584 this.reader.getn(1);
9585 }
9586 }
9587}
9588
9589VimLParser.prototype.parse_cmd_append = function() {
9590 this.reader.setpos(this.ea.linepos);
9591 var cmdline = this.reader.readline();
9592 var lines = [cmdline];
9593 var m = ".";
9594 while (TRUE) {
9595 if (this.reader.peek() == "<EOF>") {
9596 break;
9597 }
9598 var line = this.reader.getn(-1);
9599 viml_add(lines, line);
9600 if (line == m) {
9601 break;
9602 }
9603 this.reader.get();
9604 }
9605 var node = Node(NODE_EXCMD);
9606 node.pos = this.ea.cmdpos;
9607 node.ea = this.ea;
9608 node.str = viml_join(lines, "\n");
9609 this.add_node(node);
9610}
9611
9612VimLParser.prototype.parse_cmd_insert = function() {
9613 this.parse_cmd_append();
9614}
9615
9616VimLParser.prototype.parse_cmd_loadkeymap = function() {
9617 this.reader.setpos(this.ea.linepos);
9618 var cmdline = this.reader.readline();
9619 var lines = [cmdline];
9620 while (TRUE) {
9621 if (this.reader.peek() == "<EOF>") {
9622 break;
9623 }
9624 var line = this.reader.readline();
9625 viml_add(lines, line);
9626 }
9627 var node = Node(NODE_EXCMD);
9628 node.pos = this.ea.cmdpos;
9629 node.ea = this.ea;
9630 node.str = viml_join(lines, "\n");
9631 this.add_node(node);
9632}
9633
9634VimLParser.prototype.parse_cmd_lua = function() {
9635 var lines = [];
9636 this.reader.skip_white();
9637 if (this.reader.peekn(2) == "<<") {
9638 this.reader.getn(2);
9639 this.reader.skip_white();
9640 var m = this.reader.readline();
9641 if (m == "") {
9642 var m = ".";
9643 }
9644 this.reader.setpos(this.ea.linepos);
9645 var cmdline = this.reader.getn(-1);
9646 var lines = [cmdline];
9647 this.reader.get();
9648 while (TRUE) {
9649 if (this.reader.peek() == "<EOF>") {
9650 break;
9651 }
9652 var line = this.reader.getn(-1);
9653 viml_add(lines, line);
9654 if (line == m) {
9655 break;
9656 }
9657 this.reader.get();
9658 }
9659 }
9660 else {
9661 this.reader.setpos(this.ea.linepos);
9662 var cmdline = this.reader.getn(-1);
9663 var lines = [cmdline];
9664 }
9665 var node = Node(NODE_EXCMD);
9666 node.pos = this.ea.cmdpos;
9667 node.ea = this.ea;
9668 node.str = viml_join(lines, "\n");
9669 this.add_node(node);
9670}
9671
9672VimLParser.prototype.parse_cmd_mzscheme = function() {
9673 this.parse_cmd_lua();
9674}
9675
9676VimLParser.prototype.parse_cmd_perl = function() {
9677 this.parse_cmd_lua();
9678}
9679
9680VimLParser.prototype.parse_cmd_python = function() {
9681 this.parse_cmd_lua();
9682}
9683
9684VimLParser.prototype.parse_cmd_python3 = function() {
9685 this.parse_cmd_lua();
9686}
9687
9688VimLParser.prototype.parse_cmd_ruby = function() {
9689 this.parse_cmd_lua();
9690}
9691
9692VimLParser.prototype.parse_cmd_tcl = function() {
9693 this.parse_cmd_lua();
9694}
9695
9696VimLParser.prototype.parse_cmd_finish = function() {
9697 this.parse_cmd_common();
9698 if (this.context[0].type == NODE_TOPLEVEL) {
9699 this.reader.seek_end(0);
9700 }
9701}
9702
9703// FIXME
9704VimLParser.prototype.parse_cmd_usercmd = function() {
9705 this.parse_cmd_common();
9706}
9707
9708VimLParser.prototype.parse_cmd_function = function() {
9709 var pos = this.reader.tell();
9710 this.reader.skip_white();
9711 // :function
9712 if (this.ends_excmds(this.reader.peek())) {
9713 this.reader.seek_set(pos);
9714 this.parse_cmd_common();
9715 return;
9716 }
9717 // :function /pattern
9718 if (this.reader.peekn(1) == "/") {
9719 this.reader.seek_set(pos);
9720 this.parse_cmd_common();
9721 return;
9722 }
9723 var left = this.parse_lvalue_func();
9724 this.reader.skip_white();
9725 if (left.type == NODE_IDENTIFIER) {
9726 var s = left.value;
9727 var ss = viml_split(s, "\\zs");
9728 if (ss[0] != "<" && ss[0] != "_" && !isupper(ss[0]) && viml_stridx(s, ":") == -1 && viml_stridx(s, "#") == -1) {
9729 throw Err(viml_printf("E128: Function name must start with a capital or contain a colon: %s", s), left.pos);
9730 }
9731 }
9732 // :function {name}
9733 if (this.reader.peekn(1) != "(") {
9734 this.reader.seek_set(pos);
9735 this.parse_cmd_common();
9736 return;
9737 }
9738 // :function[!] {name}([arguments]) [range] [abort] [dict] [closure]
9739 var node = Node(NODE_FUNCTION);
9740 node.pos = this.ea.cmdpos;
9741 node.body = [];
9742 node.ea = this.ea;
9743 node.left = left;
9744 node.rlist = [];
9745 node.default_args = [];
9746 node.attr = {"range":0, "abort":0, "dict":0, "closure":0};
9747 node.endfunction = NIL;
9748 this.reader.getn(1);
9749 var tokenizer = new ExprTokenizer(this.reader);
9750 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9751 tokenizer.get();
9752 }
9753 else {
9754 var named = {};
9755 while (TRUE) {
9756 var varnode = Node(NODE_IDENTIFIER);
9757 var token = tokenizer.get();
9758 if (token.type == TOKEN_IDENTIFIER) {
9759 if (!isargname(token.value) || token.value == "firstline" || token.value == "lastline") {
9760 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
9761 }
9762 else if (viml_has_key(named, token.value)) {
9763 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
9764 }
9765 named[token.value] = 1;
9766 varnode.pos = token.pos;
9767 varnode.value = token.value;
9768 viml_add(node.rlist, varnode);
9769 if (tokenizer.peek().type == TOKEN_EQ) {
9770 tokenizer.get();
9771 viml_add(node.default_args, this.parse_expr());
9772 }
9773 else if (viml_len(node.default_args) > 0) {
9774 throw Err("E989: Non-default argument follows default argument", varnode.pos);
9775 }
9776 // XXX: Vim doesn't skip white space before comma. F(a ,b) => E475
9777 if (iswhite(this.reader.p(0)) && tokenizer.peek().type == TOKEN_COMMA) {
9778 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
9779 }
9780 var token = tokenizer.get();
9781 if (token.type == TOKEN_COMMA) {
9782 // XXX: Vim allows last comma. F(a, b, ) => OK
9783 if (tokenizer.peek().type == TOKEN_PCLOSE) {
9784 tokenizer.get();
9785 break;
9786 }
9787 }
9788 else if (token.type == TOKEN_PCLOSE) {
9789 break;
9790 }
9791 else {
9792 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9793 }
9794 }
9795 else if (token.type == TOKEN_DOTDOTDOT) {
9796 varnode.pos = token.pos;
9797 varnode.value = token.value;
9798 viml_add(node.rlist, varnode);
9799 var token = tokenizer.get();
9800 if (token.type == TOKEN_PCLOSE) {
9801 break;
9802 }
9803 else {
9804 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9805 }
9806 }
9807 else {
9808 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
9809 }
9810 }
9811 }
9812 while (TRUE) {
9813 this.reader.skip_white();
9814 var epos = this.reader.getpos();
9815 var key = this.reader.read_alpha();
9816 if (key == "") {
9817 break;
9818 }
9819 else if (key == "range") {
9820 node.attr.range = TRUE;
9821 }
9822 else if (key == "abort") {
9823 node.attr.abort = TRUE;
9824 }
9825 else if (key == "dict") {
9826 node.attr.dict = TRUE;
9827 }
9828 else if (key == "closure") {
9829 node.attr.closure = TRUE;
9830 }
9831 else {
9832 throw Err(viml_printf("unexpected token: %s", key), epos);
9833 }
9834 }
9835 this.add_node(node);
9836 this.push_context(node);
9837}
9838
9839VimLParser.prototype.parse_cmd_endfunction = function() {
9840 this.check_missing_endif("ENDFUNCTION", this.ea.cmdpos);
9841 this.check_missing_endtry("ENDFUNCTION", this.ea.cmdpos);
9842 this.check_missing_endwhile("ENDFUNCTION", this.ea.cmdpos);
9843 this.check_missing_endfor("ENDFUNCTION", this.ea.cmdpos);
9844 if (this.context[0].type != NODE_FUNCTION) {
9845 throw Err("E193: :endfunction not inside a function", this.ea.cmdpos);
9846 }
9847 this.reader.getn(-1);
9848 var node = Node(NODE_ENDFUNCTION);
9849 node.pos = this.ea.cmdpos;
9850 node.ea = this.ea;
9851 this.context[0].endfunction = node;
9852 this.pop_context();
9853}
9854
9855VimLParser.prototype.parse_cmd_delfunction = function() {
9856 var node = Node(NODE_DELFUNCTION);
9857 node.pos = this.ea.cmdpos;
9858 node.ea = this.ea;
9859 node.left = this.parse_lvalue_func();
9860 this.add_node(node);
9861}
9862
9863VimLParser.prototype.parse_cmd_return = function() {
9864 if (this.find_context(NODE_FUNCTION) == -1) {
9865 throw Err("E133: :return not inside a function", this.ea.cmdpos);
9866 }
9867 var node = Node(NODE_RETURN);
9868 node.pos = this.ea.cmdpos;
9869 node.ea = this.ea;
9870 node.left = NIL;
9871 this.reader.skip_white();
9872 var c = this.reader.peek();
9873 if (c == "\"" || !this.ends_excmds(c)) {
9874 node.left = this.parse_expr();
9875 }
9876 this.add_node(node);
9877}
9878
9879VimLParser.prototype.parse_cmd_call = function() {
9880 var node = Node(NODE_EXCALL);
9881 node.pos = this.ea.cmdpos;
9882 node.ea = this.ea;
9883 this.reader.skip_white();
9884 var c = this.reader.peek();
9885 if (this.ends_excmds(c)) {
9886 throw Err("E471: Argument required", this.reader.getpos());
9887 }
9888 node.left = this.parse_expr();
9889 if (node.left.type != NODE_CALL) {
9890 throw Err("Not a function call", node.left.pos);
9891 }
9892 this.add_node(node);
9893}
9894
9895VimLParser.prototype.parse_heredoc = function() {
9896 var node = Node(NODE_HEREDOC);
9897 node.pos = this.ea.cmdpos;
9898 node.op = "";
9899 node.rlist = [];
9900 node.body = [];
9901 while (TRUE) {
9902 this.reader.skip_white();
9903 var key = this.reader.read_word();
9904 if (key == "") {
9905 break;
9906 }
9907 if (!islower(key[0])) {
9908 node.op = key;
9909 break;
9910 }
9911 else {
9912 viml_add(node.rlist, key);
9913 }
9914 }
9915 if (node.op == "") {
9916 throw Err("E172: Missing marker", this.reader.getpos());
9917 }
9918 this.parse_trail();
9919 while (TRUE) {
9920 if (this.reader.peek() == "<EOF>") {
9921 break;
9922 }
9923 var line = this.reader.getn(-1);
9924 if (line == node.op) {
9925 return node;
9926 }
9927 viml_add(node.body, line);
9928 this.reader.get();
9929 }
9930 throw Err(viml_printf("E990: Missing end marker '%s'", node.op), this.reader.getpos());
9931}
9932
9933VimLParser.prototype.parse_cmd_let = function() {
9934 var pos = this.reader.tell();
9935 this.reader.skip_white();
9936 // :let
9937 if (this.ends_excmds(this.reader.peek())) {
9938 this.reader.seek_set(pos);
9939 this.parse_cmd_common();
9940 return;
9941 }
9942 var lhs = this.parse_letlhs();
9943 this.reader.skip_white();
9944 var s1 = this.reader.peekn(1);
9945 var s2 = this.reader.peekn(2);
9946 // TODO check scriptversion?
9947 if (s2 == "..") {
9948 var s2 = this.reader.peekn(3);
9949 }
9950 else if (s2 == "=<") {
9951 var s2 = this.reader.peekn(3);
9952 }
9953 // :let {var-name} ..
9954 if (this.ends_excmds(s1) || s2 != "+=" && s2 != "-=" && s2 != ".=" && s2 != "..=" && s2 != "*=" && s2 != "/=" && s2 != "%=" && s2 != "=<<" && s1 != "=") {
9955 this.reader.seek_set(pos);
9956 this.parse_cmd_common();
9957 return;
9958 }
9959 // :let left op right
9960 var node = Node(NODE_LET);
9961 node.pos = this.ea.cmdpos;
9962 node.ea = this.ea;
9963 node.op = "";
9964 node.left = lhs.left;
9965 node.list = lhs.list;
9966 node.rest = lhs.rest;
9967 node.right = NIL;
9968 if (s2 == "+=" || s2 == "-=" || s2 == ".=" || s2 == "..=" || s2 == "*=" || s2 == "/=" || s2 == "%=") {
9969 this.reader.getn(viml_len(s2));
9970 node.op = s2;
9971 }
9972 else if (s2 == "=<<") {
9973 this.reader.getn(viml_len(s2));
9974 this.reader.skip_white();
9975 node.op = s2;
9976 node.right = this.parse_heredoc();
9977 this.add_node(node);
9978 return;
9979 }
9980 else if (s1 == "=") {
9981 this.reader.getn(1);
9982 node.op = s1;
9983 }
9984 else {
9985 throw "NOT REACHED";
9986 }
9987 node.right = this.parse_expr();
9988 this.add_node(node);
9989}
9990
9991VimLParser.prototype.parse_cmd_const = function() {
9992 var pos = this.reader.tell();
9993 this.reader.skip_white();
9994 // :const
9995 if (this.ends_excmds(this.reader.peek())) {
9996 this.reader.seek_set(pos);
9997 this.parse_cmd_common();
9998 return;
9999 }
10000 var lhs = this.parse_constlhs();
10001 this.reader.skip_white();
10002 var s1 = this.reader.peekn(1);
10003 // :const {var-name}
10004 if (this.ends_excmds(s1) || s1 != "=") {
10005 this.reader.seek_set(pos);
10006 this.parse_cmd_common();
10007 return;
10008 }
10009 // :const left op right
10010 var node = Node(NODE_CONST);
10011 node.pos = this.ea.cmdpos;
10012 node.ea = this.ea;
10013 this.reader.getn(1);
10014 node.op = s1;
10015 node.left = lhs.left;
10016 node.list = lhs.list;
10017 node.rest = lhs.rest;
10018 node.right = this.parse_expr();
10019 this.add_node(node);
10020}
10021
10022VimLParser.prototype.parse_cmd_unlet = function() {
10023 var node = Node(NODE_UNLET);
10024 node.pos = this.ea.cmdpos;
10025 node.ea = this.ea;
10026 node.list = this.parse_lvaluelist();
10027 this.add_node(node);
10028}
10029
10030VimLParser.prototype.parse_cmd_lockvar = function() {
10031 var node = Node(NODE_LOCKVAR);
10032 node.pos = this.ea.cmdpos;
10033 node.ea = this.ea;
10034 node.depth = NIL;
10035 node.list = [];
10036 this.reader.skip_white();
10037 if (isdigit(this.reader.peekn(1))) {
10038 node.depth = viml_str2nr(this.reader.read_digit(), 10);
10039 }
10040 node.list = this.parse_lvaluelist();
10041 this.add_node(node);
10042}
10043
10044VimLParser.prototype.parse_cmd_unlockvar = function() {
10045 var node = Node(NODE_UNLOCKVAR);
10046 node.pos = this.ea.cmdpos;
10047 node.ea = this.ea;
10048 node.depth = NIL;
10049 node.list = [];
10050 this.reader.skip_white();
10051 if (isdigit(this.reader.peekn(1))) {
10052 node.depth = viml_str2nr(this.reader.read_digit(), 10);
10053 }
10054 node.list = this.parse_lvaluelist();
10055 this.add_node(node);
10056}
10057
10058VimLParser.prototype.parse_cmd_if = function() {
10059 var node = Node(NODE_IF);
10060 node.pos = this.ea.cmdpos;
10061 node.body = [];
10062 node.ea = this.ea;
10063 node.cond = this.parse_expr();
10064 node.elseif = [];
10065 node._else = NIL;
10066 node.endif = NIL;
10067 this.add_node(node);
10068 this.push_context(node);
10069}
10070
10071VimLParser.prototype.parse_cmd_elseif = function() {
10072 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10073 throw Err("E582: :elseif without :if", this.ea.cmdpos);
10074 }
10075 if (this.context[0].type != NODE_IF) {
10076 this.pop_context();
10077 }
10078 var node = Node(NODE_ELSEIF);
10079 node.pos = this.ea.cmdpos;
10080 node.body = [];
10081 node.ea = this.ea;
10082 node.cond = this.parse_expr();
10083 viml_add(this.context[0].elseif, node);
10084 this.push_context(node);
10085}
10086
10087VimLParser.prototype.parse_cmd_else = function() {
10088 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF) {
10089 throw Err("E581: :else without :if", this.ea.cmdpos);
10090 }
10091 if (this.context[0].type != NODE_IF) {
10092 this.pop_context();
10093 }
10094 var node = Node(NODE_ELSE);
10095 node.pos = this.ea.cmdpos;
10096 node.body = [];
10097 node.ea = this.ea;
10098 this.context[0]._else = node;
10099 this.push_context(node);
10100}
10101
10102VimLParser.prototype.parse_cmd_endif = function() {
10103 if (this.context[0].type != NODE_IF && this.context[0].type != NODE_ELSEIF && this.context[0].type != NODE_ELSE) {
10104 throw Err("E580: :endif without :if", this.ea.cmdpos);
10105 }
10106 if (this.context[0].type != NODE_IF) {
10107 this.pop_context();
10108 }
10109 var node = Node(NODE_ENDIF);
10110 node.pos = this.ea.cmdpos;
10111 node.ea = this.ea;
10112 this.context[0].endif = node;
10113 this.pop_context();
10114}
10115
10116VimLParser.prototype.parse_cmd_while = function() {
10117 var node = Node(NODE_WHILE);
10118 node.pos = this.ea.cmdpos;
10119 node.body = [];
10120 node.ea = this.ea;
10121 node.cond = this.parse_expr();
10122 node.endwhile = NIL;
10123 this.add_node(node);
10124 this.push_context(node);
10125}
10126
10127VimLParser.prototype.parse_cmd_endwhile = function() {
10128 if (this.context[0].type != NODE_WHILE) {
10129 throw Err("E588: :endwhile without :while", this.ea.cmdpos);
10130 }
10131 var node = Node(NODE_ENDWHILE);
10132 node.pos = this.ea.cmdpos;
10133 node.ea = this.ea;
10134 this.context[0].endwhile = node;
10135 this.pop_context();
10136}
10137
10138VimLParser.prototype.parse_cmd_for = function() {
10139 var node = Node(NODE_FOR);
10140 node.pos = this.ea.cmdpos;
10141 node.body = [];
10142 node.ea = this.ea;
10143 node.left = NIL;
10144 node.right = NIL;
10145 node.endfor = NIL;
10146 var lhs = this.parse_letlhs();
10147 node.left = lhs.left;
10148 node.list = lhs.list;
10149 node.rest = lhs.rest;
10150 this.reader.skip_white();
10151 var epos = this.reader.getpos();
10152 if (this.reader.read_alpha() != "in") {
10153 throw Err("Missing \"in\" after :for", epos);
10154 }
10155 node.right = this.parse_expr();
10156 this.add_node(node);
10157 this.push_context(node);
10158}
10159
10160VimLParser.prototype.parse_cmd_endfor = function() {
10161 if (this.context[0].type != NODE_FOR) {
10162 throw Err("E588: :endfor without :for", this.ea.cmdpos);
10163 }
10164 var node = Node(NODE_ENDFOR);
10165 node.pos = this.ea.cmdpos;
10166 node.ea = this.ea;
10167 this.context[0].endfor = node;
10168 this.pop_context();
10169}
10170
10171VimLParser.prototype.parse_cmd_continue = function() {
10172 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10173 throw Err("E586: :continue without :while or :for", this.ea.cmdpos);
10174 }
10175 var node = Node(NODE_CONTINUE);
10176 node.pos = this.ea.cmdpos;
10177 node.ea = this.ea;
10178 this.add_node(node);
10179}
10180
10181VimLParser.prototype.parse_cmd_break = function() {
10182 if (this.find_context(NODE_WHILE) == -1 && this.find_context(NODE_FOR) == -1) {
10183 throw Err("E587: :break without :while or :for", this.ea.cmdpos);
10184 }
10185 var node = Node(NODE_BREAK);
10186 node.pos = this.ea.cmdpos;
10187 node.ea = this.ea;
10188 this.add_node(node);
10189}
10190
10191VimLParser.prototype.parse_cmd_try = function() {
10192 var node = Node(NODE_TRY);
10193 node.pos = this.ea.cmdpos;
10194 node.body = [];
10195 node.ea = this.ea;
10196 node.catch = [];
10197 node._finally = NIL;
10198 node.endtry = NIL;
10199 this.add_node(node);
10200 this.push_context(node);
10201}
10202
10203VimLParser.prototype.parse_cmd_catch = function() {
10204 if (this.context[0].type == NODE_FINALLY) {
10205 throw Err("E604: :catch after :finally", this.ea.cmdpos);
10206 }
10207 else if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10208 throw Err("E603: :catch without :try", this.ea.cmdpos);
10209 }
10210 if (this.context[0].type != NODE_TRY) {
10211 this.pop_context();
10212 }
10213 var node = Node(NODE_CATCH);
10214 node.pos = this.ea.cmdpos;
10215 node.body = [];
10216 node.ea = this.ea;
10217 node.pattern = NIL;
10218 this.reader.skip_white();
10219 if (!this.ends_excmds(this.reader.peek())) {
10220 var __tmp = this.parse_pattern(this.reader.get());
10221 node.pattern = __tmp[0];
10222 var _ = __tmp[1];
10223 }
10224 viml_add(this.context[0].catch, node);
10225 this.push_context(node);
10226}
10227
10228VimLParser.prototype.parse_cmd_finally = function() {
10229 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH) {
10230 throw Err("E606: :finally without :try", this.ea.cmdpos);
10231 }
10232 if (this.context[0].type != NODE_TRY) {
10233 this.pop_context();
10234 }
10235 var node = Node(NODE_FINALLY);
10236 node.pos = this.ea.cmdpos;
10237 node.body = [];
10238 node.ea = this.ea;
10239 this.context[0]._finally = node;
10240 this.push_context(node);
10241}
10242
10243VimLParser.prototype.parse_cmd_endtry = function() {
10244 if (this.context[0].type != NODE_TRY && this.context[0].type != NODE_CATCH && this.context[0].type != NODE_FINALLY) {
10245 throw Err("E602: :endtry without :try", this.ea.cmdpos);
10246 }
10247 if (this.context[0].type != NODE_TRY) {
10248 this.pop_context();
10249 }
10250 var node = Node(NODE_ENDTRY);
10251 node.pos = this.ea.cmdpos;
10252 node.ea = this.ea;
10253 this.context[0].endtry = node;
10254 this.pop_context();
10255}
10256
10257VimLParser.prototype.parse_cmd_throw = function() {
10258 var node = Node(NODE_THROW);
10259 node.pos = this.ea.cmdpos;
10260 node.ea = this.ea;
10261 node.left = this.parse_expr();
10262 this.add_node(node);
10263}
10264
10265VimLParser.prototype.parse_cmd_eval = function() {
10266 var node = Node(NODE_EVAL);
10267 node.pos = this.ea.cmdpos;
10268 node.ea = this.ea;
10269 node.left = this.parse_expr();
10270 this.add_node(node);
10271}
10272
10273VimLParser.prototype.parse_cmd_echo = function() {
10274 var node = Node(NODE_ECHO);
10275 node.pos = this.ea.cmdpos;
10276 node.ea = this.ea;
10277 node.list = this.parse_exprlist();
10278 this.add_node(node);
10279}
10280
10281VimLParser.prototype.parse_cmd_echon = function() {
10282 var node = Node(NODE_ECHON);
10283 node.pos = this.ea.cmdpos;
10284 node.ea = this.ea;
10285 node.list = this.parse_exprlist();
10286 this.add_node(node);
10287}
10288
10289VimLParser.prototype.parse_cmd_echohl = function() {
10290 var node = Node(NODE_ECHOHL);
10291 node.pos = this.ea.cmdpos;
10292 node.ea = this.ea;
10293 node.str = "";
10294 while (!this.ends_excmds(this.reader.peek())) {
10295 node.str += this.reader.get();
10296 }
10297 this.add_node(node);
10298}
10299
10300VimLParser.prototype.parse_cmd_echomsg = function() {
10301 var node = Node(NODE_ECHOMSG);
10302 node.pos = this.ea.cmdpos;
10303 node.ea = this.ea;
10304 node.list = this.parse_exprlist();
10305 this.add_node(node);
10306}
10307
10308VimLParser.prototype.parse_cmd_echoerr = function() {
10309 var node = Node(NODE_ECHOERR);
10310 node.pos = this.ea.cmdpos;
10311 node.ea = this.ea;
10312 node.list = this.parse_exprlist();
10313 this.add_node(node);
10314}
10315
10316VimLParser.prototype.parse_cmd_execute = function() {
10317 var node = Node(NODE_EXECUTE);
10318 node.pos = this.ea.cmdpos;
10319 node.ea = this.ea;
10320 node.list = this.parse_exprlist();
10321 this.add_node(node);
10322}
10323
10324VimLParser.prototype.parse_expr = function() {
10325 return new ExprParser(this.reader).parse();
10326}
10327
10328VimLParser.prototype.parse_exprlist = function() {
10329 var list = [];
10330 while (TRUE) {
10331 this.reader.skip_white();
10332 var c = this.reader.peek();
10333 if (c != "\"" && this.ends_excmds(c)) {
10334 break;
10335 }
10336 var node = this.parse_expr();
10337 viml_add(list, node);
10338 }
10339 return list;
10340}
10341
10342VimLParser.prototype.parse_lvalue_func = function() {
10343 var p = new LvalueParser(this.reader);
10344 var node = p.parse();
10345 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) {
10346 return node;
10347 }
10348 throw Err("Invalid Expression", node.pos);
10349}
10350
10351// FIXME:
10352VimLParser.prototype.parse_lvalue = function() {
10353 var p = new LvalueParser(this.reader);
10354 var node = p.parse();
10355 if (node.type == NODE_IDENTIFIER) {
10356 if (!isvarname(node.value)) {
10357 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10358 }
10359 }
10360 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) {
10361 return node;
10362 }
10363 throw Err("Invalid Expression", node.pos);
10364}
10365
10366// TODO: merge with s:VimLParser.parse_lvalue()
10367VimLParser.prototype.parse_constlvalue = function() {
10368 var p = new LvalueParser(this.reader);
10369 var node = p.parse();
10370 if (node.type == NODE_IDENTIFIER) {
10371 if (!isvarname(node.value)) {
10372 throw Err(viml_printf("E461: Illegal variable name: %s", node.value), node.pos);
10373 }
10374 }
10375 if (node.type == NODE_IDENTIFIER || node.type == NODE_CURLYNAME) {
10376 return node;
10377 }
10378 else if (node.type == NODE_SUBSCRIPT || node.type == NODE_SLICE || node.type == NODE_DOT) {
10379 throw Err("E996: Cannot lock a list or dict", node.pos);
10380 }
10381 else if (node.type == NODE_OPTION) {
10382 throw Err("E996: Cannot lock an option", node.pos);
10383 }
10384 else if (node.type == NODE_ENV) {
10385 throw Err("E996: Cannot lock an environment variable", node.pos);
10386 }
10387 else if (node.type == NODE_REG) {
10388 throw Err("E996: Cannot lock a register", node.pos);
10389 }
10390 throw Err("Invalid Expression", node.pos);
10391}
10392
10393VimLParser.prototype.parse_lvaluelist = function() {
10394 var list = [];
10395 var node = this.parse_expr();
10396 viml_add(list, node);
10397 while (TRUE) {
10398 this.reader.skip_white();
10399 if (this.ends_excmds(this.reader.peek())) {
10400 break;
10401 }
10402 var node = this.parse_lvalue();
10403 viml_add(list, node);
10404 }
10405 return list;
10406}
10407
10408// FIXME:
10409VimLParser.prototype.parse_letlhs = function() {
10410 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10411 var tokenizer = new ExprTokenizer(this.reader);
10412 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10413 tokenizer.get();
10414 lhs.list = [];
10415 while (TRUE) {
10416 var node = this.parse_lvalue();
10417 viml_add(lhs.list, node);
10418 var token = tokenizer.get();
10419 if (token.type == TOKEN_SQCLOSE) {
10420 break;
10421 }
10422 else if (token.type == TOKEN_COMMA) {
10423 continue;
10424 }
10425 else if (token.type == TOKEN_SEMICOLON) {
10426 var node = this.parse_lvalue();
10427 lhs.rest = node;
10428 var token = tokenizer.get();
10429 if (token.type == TOKEN_SQCLOSE) {
10430 break;
10431 }
10432 else {
10433 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10434 }
10435 }
10436 else {
10437 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10438 }
10439 }
10440 }
10441 else {
10442 lhs.left = this.parse_lvalue();
10443 }
10444 return lhs;
10445}
10446
10447// TODO: merge with s:VimLParser.parse_letlhs() ?
10448VimLParser.prototype.parse_constlhs = function() {
10449 var lhs = {"left":NIL, "list":NIL, "rest":NIL};
10450 var tokenizer = new ExprTokenizer(this.reader);
10451 if (tokenizer.peek().type == TOKEN_SQOPEN) {
10452 tokenizer.get();
10453 lhs.list = [];
10454 while (TRUE) {
10455 var node = this.parse_lvalue();
10456 viml_add(lhs.list, node);
10457 var token = tokenizer.get();
10458 if (token.type == TOKEN_SQCLOSE) {
10459 break;
10460 }
10461 else if (token.type == TOKEN_COMMA) {
10462 continue;
10463 }
10464 else if (token.type == TOKEN_SEMICOLON) {
10465 var node = this.parse_lvalue();
10466 lhs.rest = node;
10467 var token = tokenizer.get();
10468 if (token.type == TOKEN_SQCLOSE) {
10469 break;
10470 }
10471 else {
10472 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10473 }
10474 }
10475 else {
10476 throw Err(viml_printf("E475 Invalid argument: %s", token.value), token.pos);
10477 }
10478 }
10479 }
10480 else {
10481 lhs.left = this.parse_constlvalue();
10482 }
10483 return lhs;
10484}
10485
10486VimLParser.prototype.ends_excmds = function(c) {
10487 return c == "" || c == "|" || c == "\"" || c == "<EOF>" || c == "<EOL>";
10488}
10489
10490// FIXME: validate argument
10491VimLParser.prototype.parse_wincmd = function() {
10492 var c = this.reader.getn(1);
10493 if (c == "") {
10494 throw Err("E471: Argument required", this.reader.getpos());
10495 }
10496 else if (c == "g" || c == "\x07") {
10497 // <C-G>
10498 var c2 = this.reader.getn(1);
10499 if (c2 == "" || iswhite(c2)) {
10500 throw Err("E474: Invalid Argument", this.reader.getpos());
10501 }
10502 }
10503 var end = this.reader.getpos();
10504 this.reader.skip_white();
10505 if (!this.ends_excmds(this.reader.peek())) {
10506 throw Err("E474: Invalid Argument", this.reader.getpos());
10507 }
10508 var node = Node(NODE_EXCMD);
10509 node.pos = this.ea.cmdpos;
10510 node.ea = this.ea;
10511 node.str = this.reader.getstr(this.ea.linepos, end);
10512 this.add_node(node);
10513}
10514
10515// FIXME: validate argument
10516VimLParser.prototype.parse_cmd_syntax = function() {
10517 var end = this.reader.getpos();
10518 while (TRUE) {
10519 var end = this.reader.getpos();
10520 var c = this.reader.peek();
10521 if (c == "/" || c == "'" || c == "\"") {
10522 this.reader.getn(1);
10523 this.parse_pattern(c);
10524 }
10525 else if (c == "=") {
10526 this.reader.getn(1);
10527 this.parse_pattern(" ");
10528 }
10529 else if (this.ends_excmds(c)) {
10530 break;
10531 }
10532 this.reader.getn(1);
10533 }
10534 var node = Node(NODE_EXCMD);
10535 node.pos = this.ea.cmdpos;
10536 node.ea = this.ea;
10537 node.str = this.reader.getstr(this.ea.linepos, end);
10538 this.add_node(node);
10539}
10540
10541VimLParser.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"}];
10542VimLParser.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"}];
10543// To find new builtin_commands, run the below script.
10544// $ scripts/update_builtin_commands.sh /path/to/vim/src/ex_cmds.h
10545VimLParser.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"}];
10546// To find new builtin_functions, run the below script.
10547// $ scripts/update_builtin_functions.sh /path/to/vim/src/evalfunc.c
10548VimLParser.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"}];
10549function ExprTokenizer() { this.__init__.apply(this, arguments); }
10550ExprTokenizer.prototype.__init__ = function(reader) {
10551 this.reader = reader;
10552 this.cache = {};
10553}
10554
10555ExprTokenizer.prototype.token = function(type, value, pos) {
10556 return {"type":type, "value":value, "pos":pos};
10557}
10558
10559ExprTokenizer.prototype.peek = function() {
10560 var pos = this.reader.tell();
10561 var r = this.get();
10562 this.reader.seek_set(pos);
10563 return r;
10564}
10565
10566ExprTokenizer.prototype.get = function() {
10567 // FIXME: remove dirty hack
10568 if (viml_has_key(this.cache, this.reader.tell())) {
10569 var x = this.cache[this.reader.tell()];
10570 this.reader.seek_set(x[0]);
10571 return x[1];
10572 }
10573 var pos = this.reader.tell();
10574 this.reader.skip_white();
10575 var r = this.get2();
10576 this.cache[pos] = [this.reader.tell(), r];
10577 return r;
10578}
10579
10580ExprTokenizer.prototype.get2 = function() {
10581 var r = this.reader;
10582 var pos = r.getpos();
10583 var c = r.peek();
10584 if (c == "<EOF>") {
10585 return this.token(TOKEN_EOF, c, pos);
10586 }
10587 else if (c == "<EOL>") {
10588 r.seek_cur(1);
10589 return this.token(TOKEN_EOL, c, pos);
10590 }
10591 else if (iswhite(c)) {
10592 var s = r.read_white();
10593 return this.token(TOKEN_SPACE, s, pos);
10594 }
10595 else if (c == "0" && (r.p(1) == "X" || r.p(1) == "x") && isxdigit(r.p(2))) {
10596 var s = r.getn(3);
10597 s += r.read_xdigit();
10598 return this.token(TOKEN_NUMBER, s, pos);
10599 }
10600 else if (c == "0" && (r.p(1) == "B" || r.p(1) == "b") && (r.p(2) == "0" || r.p(2) == "1")) {
10601 var s = r.getn(3);
10602 s += r.read_bdigit();
10603 return this.token(TOKEN_NUMBER, s, pos);
10604 }
10605 else if (c == "0" && (r.p(1) == "Z" || r.p(1) == "z") && r.p(2) != ".") {
10606 var s = r.getn(2);
10607 s += r.read_blob();
10608 return this.token(TOKEN_BLOB, s, pos);
10609 }
10610 else if (isdigit(c)) {
10611 var s = r.read_digit();
10612 if (r.p(0) == "." && isdigit(r.p(1))) {
10613 s += r.getn(1);
10614 s += r.read_digit();
10615 if ((r.p(0) == "E" || r.p(0) == "e") && (isdigit(r.p(1)) || (r.p(1) == "-" || r.p(1) == "+") && isdigit(r.p(2)))) {
10616 s += r.getn(2);
10617 s += r.read_digit();
10618 }
10619 }
10620 return this.token(TOKEN_NUMBER, s, pos);
10621 }
10622 else if (c == "i" && r.p(1) == "s" && !isidc(r.p(2))) {
10623 if (r.p(2) == "?") {
10624 r.seek_cur(3);
10625 return this.token(TOKEN_ISCI, "is?", pos);
10626 }
10627 else if (r.p(2) == "#") {
10628 r.seek_cur(3);
10629 return this.token(TOKEN_ISCS, "is#", pos);
10630 }
10631 else {
10632 r.seek_cur(2);
10633 return this.token(TOKEN_IS, "is", pos);
10634 }
10635 }
10636 else if (c == "i" && r.p(1) == "s" && r.p(2) == "n" && r.p(3) == "o" && r.p(4) == "t" && !isidc(r.p(5))) {
10637 if (r.p(5) == "?") {
10638 r.seek_cur(6);
10639 return this.token(TOKEN_ISNOTCI, "isnot?", pos);
10640 }
10641 else if (r.p(5) == "#") {
10642 r.seek_cur(6);
10643 return this.token(TOKEN_ISNOTCS, "isnot#", pos);
10644 }
10645 else {
10646 r.seek_cur(5);
10647 return this.token(TOKEN_ISNOT, "isnot", pos);
10648 }
10649 }
10650 else if (isnamec1(c)) {
10651 var s = r.read_name();
10652 return this.token(TOKEN_IDENTIFIER, s, pos);
10653 }
10654 else if (c == "|" && r.p(1) == "|") {
10655 r.seek_cur(2);
10656 return this.token(TOKEN_OROR, "||", pos);
10657 }
10658 else if (c == "&" && r.p(1) == "&") {
10659 r.seek_cur(2);
10660 return this.token(TOKEN_ANDAND, "&&", pos);
10661 }
10662 else if (c == "=" && r.p(1) == "=") {
10663 if (r.p(2) == "?") {
10664 r.seek_cur(3);
10665 return this.token(TOKEN_EQEQCI, "==?", pos);
10666 }
10667 else if (r.p(2) == "#") {
10668 r.seek_cur(3);
10669 return this.token(TOKEN_EQEQCS, "==#", pos);
10670 }
10671 else {
10672 r.seek_cur(2);
10673 return this.token(TOKEN_EQEQ, "==", pos);
10674 }
10675 }
10676 else if (c == "!" && r.p(1) == "=") {
10677 if (r.p(2) == "?") {
10678 r.seek_cur(3);
10679 return this.token(TOKEN_NEQCI, "!=?", pos);
10680 }
10681 else if (r.p(2) == "#") {
10682 r.seek_cur(3);
10683 return this.token(TOKEN_NEQCS, "!=#", pos);
10684 }
10685 else {
10686 r.seek_cur(2);
10687 return this.token(TOKEN_NEQ, "!=", pos);
10688 }
10689 }
10690 else if (c == ">" && r.p(1) == "=") {
10691 if (r.p(2) == "?") {
10692 r.seek_cur(3);
10693 return this.token(TOKEN_GTEQCI, ">=?", pos);
10694 }
10695 else if (r.p(2) == "#") {
10696 r.seek_cur(3);
10697 return this.token(TOKEN_GTEQCS, ">=#", pos);
10698 }
10699 else {
10700 r.seek_cur(2);
10701 return this.token(TOKEN_GTEQ, ">=", pos);
10702 }
10703 }
10704 else if (c == "<" && r.p(1) == "=") {
10705 if (r.p(2) == "?") {
10706 r.seek_cur(3);
10707 return this.token(TOKEN_LTEQCI, "<=?", pos);
10708 }
10709 else if (r.p(2) == "#") {
10710 r.seek_cur(3);
10711 return this.token(TOKEN_LTEQCS, "<=#", pos);
10712 }
10713 else {
10714 r.seek_cur(2);
10715 return this.token(TOKEN_LTEQ, "<=", pos);
10716 }
10717 }
10718 else if (c == "=" && r.p(1) == "~") {
10719 if (r.p(2) == "?") {
10720 r.seek_cur(3);
10721 return this.token(TOKEN_MATCHCI, "=~?", pos);
10722 }
10723 else if (r.p(2) == "#") {
10724 r.seek_cur(3);
10725 return this.token(TOKEN_MATCHCS, "=~#", pos);
10726 }
10727 else {
10728 r.seek_cur(2);
10729 return this.token(TOKEN_MATCH, "=~", pos);
10730 }
10731 }
10732 else if (c == "!" && r.p(1) == "~") {
10733 if (r.p(2) == "?") {
10734 r.seek_cur(3);
10735 return this.token(TOKEN_NOMATCHCI, "!~?", pos);
10736 }
10737 else if (r.p(2) == "#") {
10738 r.seek_cur(3);
10739 return this.token(TOKEN_NOMATCHCS, "!~#", pos);
10740 }
10741 else {
10742 r.seek_cur(2);
10743 return this.token(TOKEN_NOMATCH, "!~", pos);
10744 }
10745 }
10746 else if (c == ">") {
10747 if (r.p(1) == "?") {
10748 r.seek_cur(2);
10749 return this.token(TOKEN_GTCI, ">?", pos);
10750 }
10751 else if (r.p(1) == "#") {
10752 r.seek_cur(2);
10753 return this.token(TOKEN_GTCS, ">#", pos);
10754 }
10755 else {
10756 r.seek_cur(1);
10757 return this.token(TOKEN_GT, ">", pos);
10758 }
10759 }
10760 else if (c == "<") {
10761 if (r.p(1) == "?") {
10762 r.seek_cur(2);
10763 return this.token(TOKEN_LTCI, "<?", pos);
10764 }
10765 else if (r.p(1) == "#") {
10766 r.seek_cur(2);
10767 return this.token(TOKEN_LTCS, "<#", pos);
10768 }
10769 else {
10770 r.seek_cur(1);
10771 return this.token(TOKEN_LT, "<", pos);
10772 }
10773 }
10774 else if (c == "+") {
10775 r.seek_cur(1);
10776 return this.token(TOKEN_PLUS, "+", pos);
10777 }
10778 else if (c == "-") {
10779 if (r.p(1) == ">") {
10780 r.seek_cur(2);
10781 return this.token(TOKEN_ARROW, "->", pos);
10782 }
10783 else {
10784 r.seek_cur(1);
10785 return this.token(TOKEN_MINUS, "-", pos);
10786 }
10787 }
10788 else if (c == ".") {
10789 if (r.p(1) == "." && r.p(2) == ".") {
10790 r.seek_cur(3);
10791 return this.token(TOKEN_DOTDOTDOT, "...", pos);
10792 }
10793 else if (r.p(1) == ".") {
10794 r.seek_cur(2);
10795 return this.token(TOKEN_DOTDOT, "..", pos);
10796 // TODO check scriptversion?
10797 }
10798 else {
10799 r.seek_cur(1);
10800 return this.token(TOKEN_DOT, ".", pos);
10801 // TODO check scriptversion?
10802 }
10803 }
10804 else if (c == "*") {
10805 r.seek_cur(1);
10806 return this.token(TOKEN_STAR, "*", pos);
10807 }
10808 else if (c == "/") {
10809 r.seek_cur(1);
10810 return this.token(TOKEN_SLASH, "/", pos);
10811 }
10812 else if (c == "%") {
10813 r.seek_cur(1);
10814 return this.token(TOKEN_PERCENT, "%", pos);
10815 }
10816 else if (c == "!") {
10817 r.seek_cur(1);
10818 return this.token(TOKEN_NOT, "!", pos);
10819 }
10820 else if (c == "?") {
10821 r.seek_cur(1);
10822 return this.token(TOKEN_QUESTION, "?", pos);
10823 }
10824 else if (c == ":") {
10825 r.seek_cur(1);
10826 return this.token(TOKEN_COLON, ":", pos);
10827 }
10828 else if (c == "#") {
10829 if (r.p(1) == "{") {
10830 r.seek_cur(2);
10831 return this.token(TOKEN_LITCOPEN, "#{", pos);
10832 }
10833 else {
10834 r.seek_cur(1);
10835 return this.token(TOKEN_SHARP, "#", pos);
10836 }
10837 }
10838 else if (c == "(") {
10839 r.seek_cur(1);
10840 return this.token(TOKEN_POPEN, "(", pos);
10841 }
10842 else if (c == ")") {
10843 r.seek_cur(1);
10844 return this.token(TOKEN_PCLOSE, ")", pos);
10845 }
10846 else if (c == "[") {
10847 r.seek_cur(1);
10848 return this.token(TOKEN_SQOPEN, "[", pos);
10849 }
10850 else if (c == "]") {
10851 r.seek_cur(1);
10852 return this.token(TOKEN_SQCLOSE, "]", pos);
10853 }
10854 else if (c == "{") {
10855 r.seek_cur(1);
10856 return this.token(TOKEN_COPEN, "{", pos);
10857 }
10858 else if (c == "}") {
10859 r.seek_cur(1);
10860 return this.token(TOKEN_CCLOSE, "}", pos);
10861 }
10862 else if (c == ",") {
10863 r.seek_cur(1);
10864 return this.token(TOKEN_COMMA, ",", pos);
10865 }
10866 else if (c == "'") {
10867 r.seek_cur(1);
10868 return this.token(TOKEN_SQUOTE, "'", pos);
10869 }
10870 else if (c == "\"") {
10871 r.seek_cur(1);
10872 return this.token(TOKEN_DQUOTE, "\"", pos);
10873 }
10874 else if (c == "$") {
10875 var s = r.getn(1);
10876 s += r.read_word();
10877 return this.token(TOKEN_ENV, s, pos);
10878 }
10879 else if (c == "@") {
10880 // @<EOL> is treated as @"
10881 return this.token(TOKEN_REG, r.getn(2), pos);
10882 }
10883 else if (c == "&") {
10884 var s = "";
10885 if ((r.p(1) == "g" || r.p(1) == "l") && r.p(2) == ":") {
10886 var s = r.getn(3) + r.read_word();
10887 }
10888 else {
10889 var s = r.getn(1) + r.read_word();
10890 }
10891 return this.token(TOKEN_OPTION, s, pos);
10892 }
10893 else if (c == "=") {
10894 r.seek_cur(1);
10895 return this.token(TOKEN_EQ, "=", pos);
10896 }
10897 else if (c == "|") {
10898 r.seek_cur(1);
10899 return this.token(TOKEN_OR, "|", pos);
10900 }
10901 else if (c == ";") {
10902 r.seek_cur(1);
10903 return this.token(TOKEN_SEMICOLON, ";", pos);
10904 }
10905 else if (c == "`") {
10906 r.seek_cur(1);
10907 return this.token(TOKEN_BACKTICK, "`", pos);
10908 }
10909 else {
10910 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10911 }
10912}
10913
10914ExprTokenizer.prototype.get_sstring = function() {
10915 this.reader.skip_white();
10916 var c = this.reader.p(0);
10917 if (c != "'") {
10918 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10919 }
10920 this.reader.seek_cur(1);
10921 var s = "";
10922 while (TRUE) {
10923 var c = this.reader.p(0);
10924 if (c == "<EOF>" || c == "<EOL>") {
10925 throw Err("unexpected EOL", this.reader.getpos());
10926 }
10927 else if (c == "'") {
10928 this.reader.seek_cur(1);
10929 if (this.reader.p(0) == "'") {
10930 this.reader.seek_cur(1);
10931 s += "''";
10932 }
10933 else {
10934 break;
10935 }
10936 }
10937 else {
10938 this.reader.seek_cur(1);
10939 s += c;
10940 }
10941 }
10942 return s;
10943}
10944
10945ExprTokenizer.prototype.get_dstring = function() {
10946 this.reader.skip_white();
10947 var c = this.reader.p(0);
10948 if (c != "\"") {
10949 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10950 }
10951 this.reader.seek_cur(1);
10952 var s = "";
10953 while (TRUE) {
10954 var c = this.reader.p(0);
10955 if (c == "<EOF>" || c == "<EOL>") {
10956 throw Err("unexpectd EOL", this.reader.getpos());
10957 }
10958 else if (c == "\"") {
10959 this.reader.seek_cur(1);
10960 break;
10961 }
10962 else if (c == "\\") {
10963 this.reader.seek_cur(1);
10964 s += c;
10965 var c = this.reader.p(0);
10966 if (c == "<EOF>" || c == "<EOL>") {
10967 throw Err("ExprTokenizer: unexpected EOL", this.reader.getpos());
10968 }
10969 this.reader.seek_cur(1);
10970 s += c;
10971 }
10972 else {
10973 this.reader.seek_cur(1);
10974 s += c;
10975 }
10976 }
10977 return s;
10978}
10979
10980ExprTokenizer.prototype.parse_dict_literal_key = function() {
10981 this.reader.skip_white();
10982 var c = this.reader.peek();
10983 if (!isalnum(c) && c != "_" && c != "-") {
10984 throw Err(viml_printf("unexpected character: %s", c), this.reader.getpos());
10985 }
10986 var node = Node(NODE_STRING);
10987 var s = c;
10988 this.reader.seek_cur(1);
10989 node.pos = this.reader.getpos();
10990 while (TRUE) {
10991 var c = this.reader.p(0);
10992 if (c == "<EOF>" || c == "<EOL>") {
10993 throw Err("unexpectd EOL", this.reader.getpos());
10994 }
10995 if (!isalnum(c) && c != "_" && c != "-") {
10996 break;
10997 }
10998 this.reader.seek_cur(1);
10999 s += c;
11000 }
11001 node.value = "'" + s + "'";
11002 return node;
11003}
11004
11005function ExprParser() { this.__init__.apply(this, arguments); }
11006ExprParser.prototype.__init__ = function(reader) {
11007 this.reader = reader;
11008 this.tokenizer = new ExprTokenizer(reader);
11009}
11010
11011ExprParser.prototype.parse = function() {
11012 return this.parse_expr1();
11013}
11014
11015// expr1: expr2 ? expr1 : expr1
11016ExprParser.prototype.parse_expr1 = function() {
11017 var left = this.parse_expr2();
11018 var pos = this.reader.tell();
11019 var token = this.tokenizer.get();
11020 if (token.type == TOKEN_QUESTION) {
11021 var node = Node(NODE_TERNARY);
11022 node.pos = token.pos;
11023 node.cond = left;
11024 node.left = this.parse_expr1();
11025 var token = this.tokenizer.get();
11026 if (token.type != TOKEN_COLON) {
11027 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11028 }
11029 node.right = this.parse_expr1();
11030 var left = node;
11031 }
11032 else {
11033 this.reader.seek_set(pos);
11034 }
11035 return left;
11036}
11037
11038// expr2: expr3 || expr3 ..
11039ExprParser.prototype.parse_expr2 = function() {
11040 var left = this.parse_expr3();
11041 while (TRUE) {
11042 var pos = this.reader.tell();
11043 var token = this.tokenizer.get();
11044 if (token.type == TOKEN_OROR) {
11045 var node = Node(NODE_OR);
11046 node.pos = token.pos;
11047 node.left = left;
11048 node.right = this.parse_expr3();
11049 var left = node;
11050 }
11051 else {
11052 this.reader.seek_set(pos);
11053 break;
11054 }
11055 }
11056 return left;
11057}
11058
11059// expr3: expr4 && expr4
11060ExprParser.prototype.parse_expr3 = function() {
11061 var left = this.parse_expr4();
11062 while (TRUE) {
11063 var pos = this.reader.tell();
11064 var token = this.tokenizer.get();
11065 if (token.type == TOKEN_ANDAND) {
11066 var node = Node(NODE_AND);
11067 node.pos = token.pos;
11068 node.left = left;
11069 node.right = this.parse_expr4();
11070 var left = node;
11071 }
11072 else {
11073 this.reader.seek_set(pos);
11074 break;
11075 }
11076 }
11077 return left;
11078}
11079
11080// expr4: expr5 == expr5
11081// expr5 != expr5
11082// expr5 > expr5
11083// expr5 >= expr5
11084// expr5 < expr5
11085// expr5 <= expr5
11086// expr5 =~ expr5
11087// expr5 !~ expr5
11088//
11089// expr5 ==? expr5
11090// expr5 ==# expr5
11091// etc.
11092//
11093// expr5 is expr5
11094// expr5 isnot expr5
11095ExprParser.prototype.parse_expr4 = function() {
11096 var left = this.parse_expr5();
11097 var pos = this.reader.tell();
11098 var token = this.tokenizer.get();
11099 if (token.type == TOKEN_EQEQ) {
11100 var node = Node(NODE_EQUAL);
11101 node.pos = token.pos;
11102 node.left = left;
11103 node.right = this.parse_expr5();
11104 var left = node;
11105 }
11106 else if (token.type == TOKEN_EQEQCI) {
11107 var node = Node(NODE_EQUALCI);
11108 node.pos = token.pos;
11109 node.left = left;
11110 node.right = this.parse_expr5();
11111 var left = node;
11112 }
11113 else if (token.type == TOKEN_EQEQCS) {
11114 var node = Node(NODE_EQUALCS);
11115 node.pos = token.pos;
11116 node.left = left;
11117 node.right = this.parse_expr5();
11118 var left = node;
11119 }
11120 else if (token.type == TOKEN_NEQ) {
11121 var node = Node(NODE_NEQUAL);
11122 node.pos = token.pos;
11123 node.left = left;
11124 node.right = this.parse_expr5();
11125 var left = node;
11126 }
11127 else if (token.type == TOKEN_NEQCI) {
11128 var node = Node(NODE_NEQUALCI);
11129 node.pos = token.pos;
11130 node.left = left;
11131 node.right = this.parse_expr5();
11132 var left = node;
11133 }
11134 else if (token.type == TOKEN_NEQCS) {
11135 var node = Node(NODE_NEQUALCS);
11136 node.pos = token.pos;
11137 node.left = left;
11138 node.right = this.parse_expr5();
11139 var left = node;
11140 }
11141 else if (token.type == TOKEN_GT) {
11142 var node = Node(NODE_GREATER);
11143 node.pos = token.pos;
11144 node.left = left;
11145 node.right = this.parse_expr5();
11146 var left = node;
11147 }
11148 else if (token.type == TOKEN_GTCI) {
11149 var node = Node(NODE_GREATERCI);
11150 node.pos = token.pos;
11151 node.left = left;
11152 node.right = this.parse_expr5();
11153 var left = node;
11154 }
11155 else if (token.type == TOKEN_GTCS) {
11156 var node = Node(NODE_GREATERCS);
11157 node.pos = token.pos;
11158 node.left = left;
11159 node.right = this.parse_expr5();
11160 var left = node;
11161 }
11162 else if (token.type == TOKEN_GTEQ) {
11163 var node = Node(NODE_GEQUAL);
11164 node.pos = token.pos;
11165 node.left = left;
11166 node.right = this.parse_expr5();
11167 var left = node;
11168 }
11169 else if (token.type == TOKEN_GTEQCI) {
11170 var node = Node(NODE_GEQUALCI);
11171 node.pos = token.pos;
11172 node.left = left;
11173 node.right = this.parse_expr5();
11174 var left = node;
11175 }
11176 else if (token.type == TOKEN_GTEQCS) {
11177 var node = Node(NODE_GEQUALCS);
11178 node.pos = token.pos;
11179 node.left = left;
11180 node.right = this.parse_expr5();
11181 var left = node;
11182 }
11183 else if (token.type == TOKEN_LT) {
11184 var node = Node(NODE_SMALLER);
11185 node.pos = token.pos;
11186 node.left = left;
11187 node.right = this.parse_expr5();
11188 var left = node;
11189 }
11190 else if (token.type == TOKEN_LTCI) {
11191 var node = Node(NODE_SMALLERCI);
11192 node.pos = token.pos;
11193 node.left = left;
11194 node.right = this.parse_expr5();
11195 var left = node;
11196 }
11197 else if (token.type == TOKEN_LTCS) {
11198 var node = Node(NODE_SMALLERCS);
11199 node.pos = token.pos;
11200 node.left = left;
11201 node.right = this.parse_expr5();
11202 var left = node;
11203 }
11204 else if (token.type == TOKEN_LTEQ) {
11205 var node = Node(NODE_SEQUAL);
11206 node.pos = token.pos;
11207 node.left = left;
11208 node.right = this.parse_expr5();
11209 var left = node;
11210 }
11211 else if (token.type == TOKEN_LTEQCI) {
11212 var node = Node(NODE_SEQUALCI);
11213 node.pos = token.pos;
11214 node.left = left;
11215 node.right = this.parse_expr5();
11216 var left = node;
11217 }
11218 else if (token.type == TOKEN_LTEQCS) {
11219 var node = Node(NODE_SEQUALCS);
11220 node.pos = token.pos;
11221 node.left = left;
11222 node.right = this.parse_expr5();
11223 var left = node;
11224 }
11225 else if (token.type == TOKEN_MATCH) {
11226 var node = Node(NODE_MATCH);
11227 node.pos = token.pos;
11228 node.left = left;
11229 node.right = this.parse_expr5();
11230 var left = node;
11231 }
11232 else if (token.type == TOKEN_MATCHCI) {
11233 var node = Node(NODE_MATCHCI);
11234 node.pos = token.pos;
11235 node.left = left;
11236 node.right = this.parse_expr5();
11237 var left = node;
11238 }
11239 else if (token.type == TOKEN_MATCHCS) {
11240 var node = Node(NODE_MATCHCS);
11241 node.pos = token.pos;
11242 node.left = left;
11243 node.right = this.parse_expr5();
11244 var left = node;
11245 }
11246 else if (token.type == TOKEN_NOMATCH) {
11247 var node = Node(NODE_NOMATCH);
11248 node.pos = token.pos;
11249 node.left = left;
11250 node.right = this.parse_expr5();
11251 var left = node;
11252 }
11253 else if (token.type == TOKEN_NOMATCHCI) {
11254 var node = Node(NODE_NOMATCHCI);
11255 node.pos = token.pos;
11256 node.left = left;
11257 node.right = this.parse_expr5();
11258 var left = node;
11259 }
11260 else if (token.type == TOKEN_NOMATCHCS) {
11261 var node = Node(NODE_NOMATCHCS);
11262 node.pos = token.pos;
11263 node.left = left;
11264 node.right = this.parse_expr5();
11265 var left = node;
11266 }
11267 else if (token.type == TOKEN_IS) {
11268 var node = Node(NODE_IS);
11269 node.pos = token.pos;
11270 node.left = left;
11271 node.right = this.parse_expr5();
11272 var left = node;
11273 }
11274 else if (token.type == TOKEN_ISCI) {
11275 var node = Node(NODE_ISCI);
11276 node.pos = token.pos;
11277 node.left = left;
11278 node.right = this.parse_expr5();
11279 var left = node;
11280 }
11281 else if (token.type == TOKEN_ISCS) {
11282 var node = Node(NODE_ISCS);
11283 node.pos = token.pos;
11284 node.left = left;
11285 node.right = this.parse_expr5();
11286 var left = node;
11287 }
11288 else if (token.type == TOKEN_ISNOT) {
11289 var node = Node(NODE_ISNOT);
11290 node.pos = token.pos;
11291 node.left = left;
11292 node.right = this.parse_expr5();
11293 var left = node;
11294 }
11295 else if (token.type == TOKEN_ISNOTCI) {
11296 var node = Node(NODE_ISNOTCI);
11297 node.pos = token.pos;
11298 node.left = left;
11299 node.right = this.parse_expr5();
11300 var left = node;
11301 }
11302 else if (token.type == TOKEN_ISNOTCS) {
11303 var node = Node(NODE_ISNOTCS);
11304 node.pos = token.pos;
11305 node.left = left;
11306 node.right = this.parse_expr5();
11307 var left = node;
11308 }
11309 else {
11310 this.reader.seek_set(pos);
11311 }
11312 return left;
11313}
11314
11315// expr5: expr6 + expr6 ..
11316// expr6 - expr6 ..
11317// expr6 . expr6 ..
11318// expr6 .. expr6 ..
11319ExprParser.prototype.parse_expr5 = function() {
11320 var left = this.parse_expr6();
11321 while (TRUE) {
11322 var pos = this.reader.tell();
11323 var token = this.tokenizer.get();
11324 if (token.type == TOKEN_PLUS) {
11325 var node = Node(NODE_ADD);
11326 node.pos = token.pos;
11327 node.left = left;
11328 node.right = this.parse_expr6();
11329 var left = node;
11330 }
11331 else if (token.type == TOKEN_MINUS) {
11332 var node = Node(NODE_SUBTRACT);
11333 node.pos = token.pos;
11334 node.left = left;
11335 node.right = this.parse_expr6();
11336 var left = node;
11337 }
11338 else if (token.type == TOKEN_DOTDOT) {
11339 // TODO check scriptversion?
11340 var node = Node(NODE_CONCAT);
11341 node.pos = token.pos;
11342 node.left = left;
11343 node.right = this.parse_expr6();
11344 var left = node;
11345 }
11346 else if (token.type == TOKEN_DOT) {
11347 // TODO check scriptversion?
11348 var node = Node(NODE_CONCAT);
11349 node.pos = token.pos;
11350 node.left = left;
11351 node.right = this.parse_expr6();
11352 var left = node;
11353 }
11354 else {
11355 this.reader.seek_set(pos);
11356 break;
11357 }
11358 }
11359 return left;
11360}
11361
11362// expr6: expr7 * expr7 ..
11363// expr7 / expr7 ..
11364// expr7 % expr7 ..
11365ExprParser.prototype.parse_expr6 = function() {
11366 var left = this.parse_expr7();
11367 while (TRUE) {
11368 var pos = this.reader.tell();
11369 var token = this.tokenizer.get();
11370 if (token.type == TOKEN_STAR) {
11371 var node = Node(NODE_MULTIPLY);
11372 node.pos = token.pos;
11373 node.left = left;
11374 node.right = this.parse_expr7();
11375 var left = node;
11376 }
11377 else if (token.type == TOKEN_SLASH) {
11378 var node = Node(NODE_DIVIDE);
11379 node.pos = token.pos;
11380 node.left = left;
11381 node.right = this.parse_expr7();
11382 var left = node;
11383 }
11384 else if (token.type == TOKEN_PERCENT) {
11385 var node = Node(NODE_REMAINDER);
11386 node.pos = token.pos;
11387 node.left = left;
11388 node.right = this.parse_expr7();
11389 var left = node;
11390 }
11391 else {
11392 this.reader.seek_set(pos);
11393 break;
11394 }
11395 }
11396 return left;
11397}
11398
11399// expr7: ! expr7
11400// - expr7
11401// + expr7
11402ExprParser.prototype.parse_expr7 = function() {
11403 var pos = this.reader.tell();
11404 var token = this.tokenizer.get();
11405 if (token.type == TOKEN_NOT) {
11406 var node = Node(NODE_NOT);
11407 node.pos = token.pos;
11408 node.left = this.parse_expr7();
11409 return node;
11410 }
11411 else if (token.type == TOKEN_MINUS) {
11412 var node = Node(NODE_MINUS);
11413 node.pos = token.pos;
11414 node.left = this.parse_expr7();
11415 return node;
11416 }
11417 else if (token.type == TOKEN_PLUS) {
11418 var node = Node(NODE_PLUS);
11419 node.pos = token.pos;
11420 node.left = this.parse_expr7();
11421 return node;
11422 }
11423 else {
11424 this.reader.seek_set(pos);
11425 var node = this.parse_expr8();
11426 return node;
11427 }
11428}
11429
11430// expr8: expr8[expr1]
11431// expr8[expr1 : expr1]
11432// expr8.name
11433// expr8->name(expr1, ...)
11434// expr8->s:user_func(expr1, ...)
11435// expr8->{lambda}(expr1, ...)
11436// expr8(expr1, ...)
11437ExprParser.prototype.parse_expr8 = function() {
11438 var left = this.parse_expr9();
11439 while (TRUE) {
11440 var pos = this.reader.tell();
11441 var c = this.reader.peek();
11442 var token = this.tokenizer.get();
11443 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11444 var npos = token.pos;
11445 if (this.tokenizer.peek().type == TOKEN_COLON) {
11446 this.tokenizer.get();
11447 var node = Node(NODE_SLICE);
11448 node.pos = npos;
11449 node.left = left;
11450 node.rlist = [NIL, NIL];
11451 var token = this.tokenizer.peek();
11452 if (token.type != TOKEN_SQCLOSE) {
11453 node.rlist[1] = this.parse_expr1();
11454 }
11455 var token = this.tokenizer.get();
11456 if (token.type != TOKEN_SQCLOSE) {
11457 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11458 }
11459 var left = node;
11460 }
11461 else {
11462 var right = this.parse_expr1();
11463 if (this.tokenizer.peek().type == TOKEN_COLON) {
11464 this.tokenizer.get();
11465 var node = Node(NODE_SLICE);
11466 node.pos = npos;
11467 node.left = left;
11468 node.rlist = [right, NIL];
11469 var token = this.tokenizer.peek();
11470 if (token.type != TOKEN_SQCLOSE) {
11471 node.rlist[1] = this.parse_expr1();
11472 }
11473 var token = this.tokenizer.get();
11474 if (token.type != TOKEN_SQCLOSE) {
11475 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11476 }
11477 var left = node;
11478 }
11479 else {
11480 var node = Node(NODE_SUBSCRIPT);
11481 node.pos = npos;
11482 node.left = left;
11483 node.right = right;
11484 var token = this.tokenizer.get();
11485 if (token.type != TOKEN_SQCLOSE) {
11486 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11487 }
11488 var left = node;
11489 }
11490 }
11491 delete node;
11492 }
11493 else if (token.type == TOKEN_ARROW) {
11494 var funcname_or_lambda = this.parse_expr9();
11495 var token = this.tokenizer.get();
11496 if (token.type != TOKEN_POPEN) {
11497 throw Err("E107: Missing parentheses: lambda", token.pos);
11498 }
11499 var right = Node(NODE_CALL);
11500 right.pos = token.pos;
11501 right.left = funcname_or_lambda;
11502 right.rlist = this.parse_rlist();
11503 var node = Node(NODE_METHOD);
11504 node.pos = token.pos;
11505 node.left = left;
11506 node.right = right;
11507 var left = node;
11508 delete node;
11509 }
11510 else if (token.type == TOKEN_POPEN) {
11511 var node = Node(NODE_CALL);
11512 node.pos = token.pos;
11513 node.left = left;
11514 node.rlist = this.parse_rlist();
11515 var left = node;
11516 delete node;
11517 }
11518 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11519 // TODO check scriptversion?
11520 var node = this.parse_dot(token, left);
11521 if (node === NIL) {
11522 this.reader.seek_set(pos);
11523 break;
11524 }
11525 var left = node;
11526 delete node;
11527 }
11528 else {
11529 this.reader.seek_set(pos);
11530 break;
11531 }
11532 }
11533 return left;
11534}
11535
11536ExprParser.prototype.parse_rlist = function() {
11537 var rlist = [];
11538 var token = this.tokenizer.peek();
11539 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11540 this.tokenizer.get();
11541 }
11542 else {
11543 while (TRUE) {
11544 viml_add(rlist, this.parse_expr1());
11545 var token = this.tokenizer.get();
11546 if (token.type == TOKEN_COMMA) {
11547 // XXX: Vim allows foo(a, b, ). Lint should warn it.
11548 if (this.tokenizer.peek().type == TOKEN_PCLOSE) {
11549 this.tokenizer.get();
11550 break;
11551 }
11552 }
11553 else if (token.type == TOKEN_PCLOSE) {
11554 break;
11555 }
11556 else {
11557 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11558 }
11559 }
11560 }
11561 if (viml_len(rlist) > MAX_FUNC_ARGS) {
11562 // TODO: funcname E740: Too many arguments for function: %s
11563 throw Err("E740: Too many arguments for function", token.pos);
11564 }
11565 return rlist;
11566}
11567
11568// expr9: number
11569// "string"
11570// 'string'
11571// [expr1, ...]
11572// {expr1: expr1, ...}
11573// #{literal_key1: expr1, ...}
11574// {args -> expr1}
11575// &option
11576// (expr1)
11577// variable
11578// var{ria}ble
11579// $VAR
11580// @r
11581// function(expr1, ...)
11582// func{ti}on(expr1, ...)
11583ExprParser.prototype.parse_expr9 = function() {
11584 var pos = this.reader.tell();
11585 var token = this.tokenizer.get();
11586 var node = Node(-1);
11587 if (token.type == TOKEN_NUMBER) {
11588 var node = Node(NODE_NUMBER);
11589 node.pos = token.pos;
11590 node.value = token.value;
11591 }
11592 else if (token.type == TOKEN_BLOB) {
11593 var node = Node(NODE_BLOB);
11594 node.pos = token.pos;
11595 node.value = token.value;
11596 }
11597 else if (token.type == TOKEN_DQUOTE) {
11598 this.reader.seek_set(pos);
11599 var node = Node(NODE_STRING);
11600 node.pos = token.pos;
11601 node.value = "\"" + this.tokenizer.get_dstring() + "\"";
11602 }
11603 else if (token.type == TOKEN_SQUOTE) {
11604 this.reader.seek_set(pos);
11605 var node = Node(NODE_STRING);
11606 node.pos = token.pos;
11607 node.value = "'" + this.tokenizer.get_sstring() + "'";
11608 }
11609 else if (token.type == TOKEN_SQOPEN) {
11610 var node = Node(NODE_LIST);
11611 node.pos = token.pos;
11612 node.value = [];
11613 var token = this.tokenizer.peek();
11614 if (token.type == TOKEN_SQCLOSE) {
11615 this.tokenizer.get();
11616 }
11617 else {
11618 while (TRUE) {
11619 viml_add(node.value, this.parse_expr1());
11620 var token = this.tokenizer.peek();
11621 if (token.type == TOKEN_COMMA) {
11622 this.tokenizer.get();
11623 if (this.tokenizer.peek().type == TOKEN_SQCLOSE) {
11624 this.tokenizer.get();
11625 break;
11626 }
11627 }
11628 else if (token.type == TOKEN_SQCLOSE) {
11629 this.tokenizer.get();
11630 break;
11631 }
11632 else {
11633 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11634 }
11635 }
11636 }
11637 }
11638 else if (token.type == TOKEN_COPEN || token.type == TOKEN_LITCOPEN) {
11639 var is_litdict = token.type == TOKEN_LITCOPEN;
11640 var savepos = this.reader.tell();
11641 var nodepos = token.pos;
11642 var token = this.tokenizer.get();
11643 var lambda = token.type == TOKEN_ARROW;
11644 if (!lambda && !(token.type == TOKEN_SQUOTE || token.type == TOKEN_DQUOTE)) {
11645 // if the token type is stirng, we cannot peek next token and we can
11646 // assume it's not lambda.
11647 var token2 = this.tokenizer.peek();
11648 var lambda = token2.type == TOKEN_ARROW || token2.type == TOKEN_COMMA;
11649 }
11650 // fallback to dict or {expr} if true
11651 var fallback = FALSE;
11652 if (lambda) {
11653 // lambda {token,...} {->...} {token->...}
11654 var node = Node(NODE_LAMBDA);
11655 node.pos = nodepos;
11656 node.rlist = [];
11657 var named = {};
11658 while (TRUE) {
11659 if (token.type == TOKEN_ARROW) {
11660 break;
11661 }
11662 else if (token.type == TOKEN_IDENTIFIER) {
11663 if (!isargname(token.value)) {
11664 throw Err(viml_printf("E125: Illegal argument: %s", token.value), token.pos);
11665 }
11666 else if (viml_has_key(named, token.value)) {
11667 throw Err(viml_printf("E853: Duplicate argument name: %s", token.value), token.pos);
11668 }
11669 named[token.value] = 1;
11670 var varnode = Node(NODE_IDENTIFIER);
11671 varnode.pos = token.pos;
11672 varnode.value = token.value;
11673 // XXX: Vim doesn't skip white space before comma. {a ,b -> ...} => E475
11674 if (iswhite(this.reader.p(0)) && this.tokenizer.peek().type == TOKEN_COMMA) {
11675 throw Err("E475: Invalid argument: White space is not allowed before comma", this.reader.getpos());
11676 }
11677 var token = this.tokenizer.get();
11678 viml_add(node.rlist, varnode);
11679 if (token.type == TOKEN_COMMA) {
11680 // XXX: Vim allows last comma. {a, b, -> ...} => OK
11681 var token = this.tokenizer.peek();
11682 if (token.type == TOKEN_ARROW) {
11683 this.tokenizer.get();
11684 break;
11685 }
11686 }
11687 else if (token.type == TOKEN_ARROW) {
11688 break;
11689 }
11690 else {
11691 throw Err(viml_printf("unexpected token: %s, type: %d", token.value, token.type), token.pos);
11692 }
11693 }
11694 else if (token.type == TOKEN_DOTDOTDOT) {
11695 var varnode = Node(NODE_IDENTIFIER);
11696 varnode.pos = token.pos;
11697 varnode.value = token.value;
11698 viml_add(node.rlist, varnode);
11699 var token = this.tokenizer.peek();
11700 if (token.type == TOKEN_ARROW) {
11701 this.tokenizer.get();
11702 break;
11703 }
11704 else {
11705 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11706 }
11707 }
11708 else {
11709 var fallback = TRUE;
11710 break;
11711 }
11712 var token = this.tokenizer.get();
11713 }
11714 if (!fallback) {
11715 node.left = this.parse_expr1();
11716 var token = this.tokenizer.get();
11717 if (token.type != TOKEN_CCLOSE) {
11718 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11719 }
11720 return node;
11721 }
11722 }
11723 // dict
11724 var node = Node(NODE_DICT);
11725 node.pos = nodepos;
11726 node.value = [];
11727 this.reader.seek_set(savepos);
11728 var token = this.tokenizer.peek();
11729 if (token.type == TOKEN_CCLOSE) {
11730 this.tokenizer.get();
11731 return node;
11732 }
11733 while (1) {
11734 var key = is_litdict ? this.tokenizer.parse_dict_literal_key() : this.parse_expr1();
11735 var token = this.tokenizer.get();
11736 if (token.type == TOKEN_CCLOSE) {
11737 if (!viml_empty(node.value)) {
11738 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11739 }
11740 this.reader.seek_set(pos);
11741 var node = this.parse_identifier();
11742 break;
11743 }
11744 if (token.type != TOKEN_COLON) {
11745 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11746 }
11747 var val = this.parse_expr1();
11748 viml_add(node.value, [key, val]);
11749 var token = this.tokenizer.get();
11750 if (token.type == TOKEN_COMMA) {
11751 if (this.tokenizer.peek().type == TOKEN_CCLOSE) {
11752 this.tokenizer.get();
11753 break;
11754 }
11755 }
11756 else if (token.type == TOKEN_CCLOSE) {
11757 break;
11758 }
11759 else {
11760 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11761 }
11762 }
11763 return node;
11764 }
11765 else if (token.type == TOKEN_POPEN) {
11766 var node = this.parse_expr1();
11767 var token = this.tokenizer.get();
11768 if (token.type != TOKEN_PCLOSE) {
11769 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11770 }
11771 }
11772 else if (token.type == TOKEN_OPTION) {
11773 var node = Node(NODE_OPTION);
11774 node.pos = token.pos;
11775 node.value = token.value;
11776 }
11777 else if (token.type == TOKEN_IDENTIFIER) {
11778 this.reader.seek_set(pos);
11779 var node = this.parse_identifier();
11780 }
11781 else if (FALSE && (token.type == TOKEN_COLON || token.type == TOKEN_SHARP)) {
11782 // XXX: no parse error but invalid expression
11783 this.reader.seek_set(pos);
11784 var node = this.parse_identifier();
11785 }
11786 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
11787 this.reader.seek_set(pos);
11788 var node = this.parse_identifier();
11789 }
11790 else if (token.type == TOKEN_IS || token.type == TOKEN_ISCS || token.type == TOKEN_ISNOT || token.type == TOKEN_ISNOTCS) {
11791 this.reader.seek_set(pos);
11792 var node = this.parse_identifier();
11793 }
11794 else if (token.type == TOKEN_ENV) {
11795 var node = Node(NODE_ENV);
11796 node.pos = token.pos;
11797 node.value = token.value;
11798 }
11799 else if (token.type == TOKEN_REG) {
11800 var node = Node(NODE_REG);
11801 node.pos = token.pos;
11802 node.value = token.value;
11803 }
11804 else {
11805 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11806 }
11807 return node;
11808}
11809
11810// SUBSCRIPT or CONCAT
11811// dict "." [0-9A-Za-z_]+ => (subscript dict key)
11812// str "." expr6 => (concat str expr6)
11813ExprParser.prototype.parse_dot = function(token, left) {
11814 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) {
11815 return NIL;
11816 }
11817 if (!iswordc(this.reader.p(0))) {
11818 return NIL;
11819 }
11820 var pos = this.reader.getpos();
11821 var name = this.reader.read_word();
11822 if (isnamec(this.reader.p(0))) {
11823 // XXX: foo is str => ok, foo is obj => invalid expression
11824 // foo.s:bar or foo.bar#baz
11825 return NIL;
11826 }
11827 var node = Node(NODE_DOT);
11828 node.pos = token.pos;
11829 node.left = left;
11830 node.right = Node(NODE_IDENTIFIER);
11831 node.right.pos = pos;
11832 node.right.value = name;
11833 return node;
11834}
11835
11836// CONCAT
11837// str ".." expr6 => (concat str expr6)
11838ExprParser.prototype.parse_concat = function(token, left) {
11839 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) {
11840 return NIL;
11841 }
11842 if (!iswordc(this.reader.p(0))) {
11843 return NIL;
11844 }
11845 var pos = this.reader.getpos();
11846 var name = this.reader.read_word();
11847 if (isnamec(this.reader.p(0))) {
11848 // XXX: foo is str => ok, foo is obj => invalid expression
11849 // foo.s:bar or foo.bar#baz
11850 return NIL;
11851 }
11852 var node = Node(NODE_CONCAT);
11853 node.pos = token.pos;
11854 node.left = left;
11855 node.right = Node(NODE_IDENTIFIER);
11856 node.right.pos = pos;
11857 node.right.value = name;
11858 return node;
11859}
11860
11861ExprParser.prototype.parse_identifier = function() {
11862 this.reader.skip_white();
11863 var npos = this.reader.getpos();
11864 var curly_parts = this.parse_curly_parts();
11865 if (viml_len(curly_parts) == 1 && curly_parts[0].type == NODE_CURLYNAMEPART) {
11866 var node = Node(NODE_IDENTIFIER);
11867 node.pos = npos;
11868 node.value = curly_parts[0].value;
11869 return node;
11870 }
11871 else {
11872 var node = Node(NODE_CURLYNAME);
11873 node.pos = npos;
11874 node.value = curly_parts;
11875 return node;
11876 }
11877}
11878
11879ExprParser.prototype.parse_curly_parts = function() {
11880 var curly_parts = [];
11881 var c = this.reader.peek();
11882 var pos = this.reader.getpos();
11883 if (c == "<" && viml_equalci(this.reader.peekn(5), "<SID>")) {
11884 var name = this.reader.getn(5);
11885 var node = Node(NODE_CURLYNAMEPART);
11886 node.curly = FALSE;
11887 // Keep backword compatibility for the curly attribute
11888 node.pos = pos;
11889 node.value = name;
11890 viml_add(curly_parts, node);
11891 }
11892 while (TRUE) {
11893 var c = this.reader.peek();
11894 if (isnamec(c)) {
11895 var pos = this.reader.getpos();
11896 var name = this.reader.read_name();
11897 var node = Node(NODE_CURLYNAMEPART);
11898 node.curly = FALSE;
11899 // Keep backword compatibility for the curly attribute
11900 node.pos = pos;
11901 node.value = name;
11902 viml_add(curly_parts, node);
11903 }
11904 else if (c == "{") {
11905 this.reader.get();
11906 var pos = this.reader.getpos();
11907 var node = Node(NODE_CURLYNAMEEXPR);
11908 node.curly = TRUE;
11909 // Keep backword compatibility for the curly attribute
11910 node.pos = pos;
11911 node.value = this.parse_expr1();
11912 viml_add(curly_parts, node);
11913 this.reader.skip_white();
11914 var c = this.reader.p(0);
11915 if (c != "}") {
11916 throw Err(viml_printf("unexpected token: %s", c), this.reader.getpos());
11917 }
11918 this.reader.seek_cur(1);
11919 }
11920 else {
11921 break;
11922 }
11923 }
11924 return curly_parts;
11925}
11926
11927function LvalueParser() { ExprParser.apply(this, arguments); this.__init__.apply(this, arguments); }
11928LvalueParser.prototype = Object.create(ExprParser.prototype);
11929LvalueParser.prototype.parse = function() {
11930 return this.parse_lv8();
11931}
11932
11933// expr8: expr8[expr1]
11934// expr8[expr1 : expr1]
11935// expr8.name
11936LvalueParser.prototype.parse_lv8 = function() {
11937 var left = this.parse_lv9();
11938 while (TRUE) {
11939 var pos = this.reader.tell();
11940 var c = this.reader.peek();
11941 var token = this.tokenizer.get();
11942 if (!iswhite(c) && token.type == TOKEN_SQOPEN) {
11943 var npos = token.pos;
11944 var node = Node(-1);
11945 if (this.tokenizer.peek().type == TOKEN_COLON) {
11946 this.tokenizer.get();
11947 var node = Node(NODE_SLICE);
11948 node.pos = npos;
11949 node.left = left;
11950 node.rlist = [NIL, NIL];
11951 var token = this.tokenizer.peek();
11952 if (token.type != TOKEN_SQCLOSE) {
11953 node.rlist[1] = this.parse_expr1();
11954 }
11955 var token = this.tokenizer.get();
11956 if (token.type != TOKEN_SQCLOSE) {
11957 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11958 }
11959 }
11960 else {
11961 var right = this.parse_expr1();
11962 if (this.tokenizer.peek().type == TOKEN_COLON) {
11963 this.tokenizer.get();
11964 var node = Node(NODE_SLICE);
11965 node.pos = npos;
11966 node.left = left;
11967 node.rlist = [right, NIL];
11968 var token = this.tokenizer.peek();
11969 if (token.type != TOKEN_SQCLOSE) {
11970 node.rlist[1] = this.parse_expr1();
11971 }
11972 var token = this.tokenizer.get();
11973 if (token.type != TOKEN_SQCLOSE) {
11974 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11975 }
11976 }
11977 else {
11978 var node = Node(NODE_SUBSCRIPT);
11979 node.pos = npos;
11980 node.left = left;
11981 node.right = right;
11982 var token = this.tokenizer.get();
11983 if (token.type != TOKEN_SQCLOSE) {
11984 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
11985 }
11986 }
11987 }
11988 var left = node;
11989 delete node;
11990 }
11991 else if (!iswhite(c) && token.type == TOKEN_DOT) {
11992 var node = this.parse_dot(token, left);
11993 if (node === NIL) {
11994 this.reader.seek_set(pos);
11995 break;
11996 }
11997 var left = node;
11998 delete node;
11999 }
12000 else {
12001 this.reader.seek_set(pos);
12002 break;
12003 }
12004 }
12005 return left;
12006}
12007
12008// expr9: &option
12009// variable
12010// var{ria}ble
12011// $VAR
12012// @r
12013LvalueParser.prototype.parse_lv9 = function() {
12014 var pos = this.reader.tell();
12015 var token = this.tokenizer.get();
12016 var node = Node(-1);
12017 if (token.type == TOKEN_COPEN) {
12018 this.reader.seek_set(pos);
12019 var node = this.parse_identifier();
12020 }
12021 else if (token.type == TOKEN_OPTION) {
12022 var node = Node(NODE_OPTION);
12023 node.pos = token.pos;
12024 node.value = token.value;
12025 }
12026 else if (token.type == TOKEN_IDENTIFIER) {
12027 this.reader.seek_set(pos);
12028 var node = this.parse_identifier();
12029 }
12030 else if (token.type == TOKEN_LT && viml_equalci(this.reader.peekn(4), "SID>")) {
12031 this.reader.seek_set(pos);
12032 var node = this.parse_identifier();
12033 }
12034 else if (token.type == TOKEN_ENV) {
12035 var node = Node(NODE_ENV);
12036 node.pos = token.pos;
12037 node.value = token.value;
12038 }
12039 else if (token.type == TOKEN_REG) {
12040 var node = Node(NODE_REG);
12041 node.pos = token.pos;
12042 node.pos = token.pos;
12043 node.value = token.value;
12044 }
12045 else {
12046 throw Err(viml_printf("unexpected token: %s", token.value), token.pos);
12047 }
12048 return node;
12049}
12050
12051function StringReader() { this.__init__.apply(this, arguments); }
12052StringReader.prototype.__init__ = function(lines) {
12053 this.buf = [];
12054 this.pos = [];
12055 var lnum = 0;
12056 var offset = 0;
12057 while (lnum < viml_len(lines)) {
12058 var col = 0;
12059 var __c7 = viml_split(lines[lnum], "\\zs");
12060 for (var __i7 = 0; __i7 < __c7.length; ++__i7) {
12061 var c = __c7[__i7];
12062 viml_add(this.buf, c);
12063 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12064 col += viml_len(c);
12065 offset += viml_len(c);
12066 }
12067 while (lnum + 1 < viml_len(lines) && viml_eqregh(lines[lnum + 1], "^\\s*\\\\")) {
12068 var skip = TRUE;
12069 var col = 0;
12070 var __c8 = viml_split(lines[lnum + 1], "\\zs");
12071 for (var __i8 = 0; __i8 < __c8.length; ++__i8) {
12072 var c = __c8[__i8];
12073 if (skip) {
12074 if (c == "\\") {
12075 var skip = FALSE;
12076 }
12077 }
12078 else {
12079 viml_add(this.buf, c);
12080 viml_add(this.pos, [lnum + 2, col + 1, offset]);
12081 }
12082 col += viml_len(c);
12083 offset += viml_len(c);
12084 }
12085 lnum += 1;
12086 offset += 1;
12087 }
12088 viml_add(this.buf, "<EOL>");
12089 viml_add(this.pos, [lnum + 1, col + 1, offset]);
12090 lnum += 1;
12091 offset += 1;
12092 }
12093 // for <EOF>
12094 viml_add(this.pos, [lnum + 1, 0, offset]);
12095 this.i = 0;
12096}
12097
12098StringReader.prototype.eof = function() {
12099 return this.i >= viml_len(this.buf);
12100}
12101
12102StringReader.prototype.tell = function() {
12103 return this.i;
12104}
12105
12106StringReader.prototype.seek_set = function(i) {
12107 this.i = i;
12108}
12109
12110StringReader.prototype.seek_cur = function(i) {
12111 this.i = this.i + i;
12112}
12113
12114StringReader.prototype.seek_end = function(i) {
12115 this.i = viml_len(this.buf) + i;
12116}
12117
12118StringReader.prototype.p = function(i) {
12119 if (this.i >= viml_len(this.buf)) {
12120 return "<EOF>";
12121 }
12122 return this.buf[this.i + i];
12123}
12124
12125StringReader.prototype.peek = function() {
12126 if (this.i >= viml_len(this.buf)) {
12127 return "<EOF>";
12128 }
12129 return this.buf[this.i];
12130}
12131
12132StringReader.prototype.get = function() {
12133 if (this.i >= viml_len(this.buf)) {
12134 return "<EOF>";
12135 }
12136 this.i += 1;
12137 return this.buf[this.i - 1];
12138}
12139
12140StringReader.prototype.peekn = function(n) {
12141 var pos = this.tell();
12142 var r = this.getn(n);
12143 this.seek_set(pos);
12144 return r;
12145}
12146
12147StringReader.prototype.getn = function(n) {
12148 var r = "";
12149 var j = 0;
12150 while (this.i < viml_len(this.buf) && (n < 0 || j < n)) {
12151 var c = this.buf[this.i];
12152 if (c == "<EOL>") {
12153 break;
12154 }
12155 r += c;
12156 this.i += 1;
12157 j += 1;
12158 }
12159 return r;
12160}
12161
12162StringReader.prototype.peekline = function() {
12163 return this.peekn(-1);
12164}
12165
12166StringReader.prototype.readline = function() {
12167 var r = this.getn(-1);
12168 this.get();
12169 return r;
12170}
12171
12172StringReader.prototype.getstr = function(begin, end) {
12173 var r = "";
12174 var __c9 = viml_range(begin.i, end.i - 1);
12175 for (var __i9 = 0; __i9 < __c9.length; ++__i9) {
12176 var i = __c9[__i9];
12177 if (i >= viml_len(this.buf)) {
12178 break;
12179 }
12180 var c = this.buf[i];
12181 if (c == "<EOL>") {
12182 var c = "\n";
12183 }
12184 r += c;
12185 }
12186 return r;
12187}
12188
12189StringReader.prototype.getpos = function() {
12190 var __tmp = this.pos[this.i];
12191 var lnum = __tmp[0];
12192 var col = __tmp[1];
12193 var offset = __tmp[2];
12194 return {"i":this.i, "lnum":lnum, "col":col, "offset":offset};
12195}
12196
12197StringReader.prototype.setpos = function(pos) {
12198 this.i = pos.i;
12199}
12200
12201StringReader.prototype.read_alpha = function() {
12202 var r = "";
12203 while (isalpha(this.peekn(1))) {
12204 r += this.getn(1);
12205 }
12206 return r;
12207}
12208
12209StringReader.prototype.read_alnum = function() {
12210 var r = "";
12211 while (isalnum(this.peekn(1))) {
12212 r += this.getn(1);
12213 }
12214 return r;
12215}
12216
12217StringReader.prototype.read_digit = function() {
12218 var r = "";
12219 while (isdigit(this.peekn(1))) {
12220 r += this.getn(1);
12221 }
12222 return r;
12223}
12224
12225StringReader.prototype.read_odigit = function() {
12226 var r = "";
12227 while (isodigit(this.peekn(1))) {
12228 r += this.getn(1);
12229 }
12230 return r;
12231}
12232
12233StringReader.prototype.read_blob = function() {
12234 var r = "";
12235 while (1) {
12236 var s = this.peekn(2);
12237 if (viml_eqregh(s, "^[0-9A-Fa-f][0-9A-Fa-f]$")) {
12238 r += this.getn(2);
12239 }
12240 else if (viml_eqregh(s, "^\\.[0-9A-Fa-f]$")) {
12241 r += this.getn(1);
12242 }
12243 else if (viml_eqregh(s, "^[0-9A-Fa-f][^0-9A-Fa-f]$")) {
12244 throw Err("E973: Blob literal should have an even number of hex characters:" + s, this.getpos());
12245 }
12246 else {
12247 break;
12248 }
12249 }
12250 return r;
12251}
12252
12253StringReader.prototype.read_xdigit = function() {
12254 var r = "";
12255 while (isxdigit(this.peekn(1))) {
12256 r += this.getn(1);
12257 }
12258 return r;
12259}
12260
12261StringReader.prototype.read_bdigit = function() {
12262 var r = "";
12263 while (this.peekn(1) == "0" || this.peekn(1) == "1") {
12264 r += this.getn(1);
12265 }
12266 return r;
12267}
12268
12269StringReader.prototype.read_integer = function() {
12270 var r = "";
12271 var c = this.peekn(1);
12272 if (c == "-" || c == "+") {
12273 var r = this.getn(1);
12274 }
12275 return r + this.read_digit();
12276}
12277
12278StringReader.prototype.read_word = function() {
12279 var r = "";
12280 while (iswordc(this.peekn(1))) {
12281 r += this.getn(1);
12282 }
12283 return r;
12284}
12285
12286StringReader.prototype.read_white = function() {
12287 var r = "";
12288 while (iswhite(this.peekn(1))) {
12289 r += this.getn(1);
12290 }
12291 return r;
12292}
12293
12294StringReader.prototype.read_nonwhite = function() {
12295 var r = "";
12296 var ch = this.peekn(1);
12297 while (!iswhite(ch) && ch != "") {
12298 r += this.getn(1);
12299 var ch = this.peekn(1);
12300 }
12301 return r;
12302}
12303
12304StringReader.prototype.read_name = function() {
12305 var r = "";
12306 while (isnamec(this.peekn(1))) {
12307 r += this.getn(1);
12308 }
12309 return r;
12310}
12311
12312StringReader.prototype.skip_white = function() {
12313 while (iswhite(this.peekn(1))) {
12314 this.seek_cur(1);
12315 }
12316}
12317
12318StringReader.prototype.skip_white_and_colon = function() {
12319 while (TRUE) {
12320 var c = this.peekn(1);
12321 if (!iswhite(c) && c != ":") {
12322 break;
12323 }
12324 this.seek_cur(1);
12325 }
12326}
12327
12328function Compiler() { this.__init__.apply(this, arguments); }
12329Compiler.prototype.__init__ = function() {
12330 this.indent = [""];
12331 this.lines = [];
12332}
12333
12334Compiler.prototype.out = function() {
12335 var a000 = Array.prototype.slice.call(arguments, 0);
12336 if (viml_len(a000) == 1) {
12337 if (a000[0][0] == ")") {
12338 this.lines[this.lines.length - 1] += a000[0];
12339 }
12340 else {
12341 viml_add(this.lines, this.indent[0] + a000[0]);
12342 }
12343 }
12344 else {
12345 viml_add(this.lines, this.indent[0] + viml_printf.apply(null, a000));
12346 }
12347}
12348
12349Compiler.prototype.incindent = function(s) {
12350 viml_insert(this.indent, this.indent[0] + s);
12351}
12352
12353Compiler.prototype.decindent = function() {
12354 viml_remove(this.indent, 0);
12355}
12356
12357Compiler.prototype.compile = function(node) {
12358 if (node.type == NODE_TOPLEVEL) {
12359 return this.compile_toplevel(node);
12360 }
12361 else if (node.type == NODE_COMMENT) {
12362 this.compile_comment(node);
12363 return NIL;
12364 }
12365 else if (node.type == NODE_EXCMD) {
12366 this.compile_excmd(node);
12367 return NIL;
12368 }
12369 else if (node.type == NODE_FUNCTION) {
12370 this.compile_function(node);
12371 return NIL;
12372 }
12373 else if (node.type == NODE_DELFUNCTION) {
12374 this.compile_delfunction(node);
12375 return NIL;
12376 }
12377 else if (node.type == NODE_RETURN) {
12378 this.compile_return(node);
12379 return NIL;
12380 }
12381 else if (node.type == NODE_EXCALL) {
12382 this.compile_excall(node);
12383 return NIL;
12384 }
12385 else if (node.type == NODE_EVAL) {
12386 this.compile_eval(node);
12387 return NIL;
12388 }
12389 else if (node.type == NODE_LET) {
12390 this.compile_let(node);
12391 return NIL;
12392 }
12393 else if (node.type == NODE_CONST) {
12394 this.compile_const(node);
12395 return NIL;
12396 }
12397 else if (node.type == NODE_UNLET) {
12398 this.compile_unlet(node);
12399 return NIL;
12400 }
12401 else if (node.type == NODE_LOCKVAR) {
12402 this.compile_lockvar(node);
12403 return NIL;
12404 }
12405 else if (node.type == NODE_UNLOCKVAR) {
12406 this.compile_unlockvar(node);
12407 return NIL;
12408 }
12409 else if (node.type == NODE_IF) {
12410 this.compile_if(node);
12411 return NIL;
12412 }
12413 else if (node.type == NODE_WHILE) {
12414 this.compile_while(node);
12415 return NIL;
12416 }
12417 else if (node.type == NODE_FOR) {
12418 this.compile_for(node);
12419 return NIL;
12420 }
12421 else if (node.type == NODE_CONTINUE) {
12422 this.compile_continue(node);
12423 return NIL;
12424 }
12425 else if (node.type == NODE_BREAK) {
12426 this.compile_break(node);
12427 return NIL;
12428 }
12429 else if (node.type == NODE_TRY) {
12430 this.compile_try(node);
12431 return NIL;
12432 }
12433 else if (node.type == NODE_THROW) {
12434 this.compile_throw(node);
12435 return NIL;
12436 }
12437 else if (node.type == NODE_ECHO) {
12438 this.compile_echo(node);
12439 return NIL;
12440 }
12441 else if (node.type == NODE_ECHON) {
12442 this.compile_echon(node);
12443 return NIL;
12444 }
12445 else if (node.type == NODE_ECHOHL) {
12446 this.compile_echohl(node);
12447 return NIL;
12448 }
12449 else if (node.type == NODE_ECHOMSG) {
12450 this.compile_echomsg(node);
12451 return NIL;
12452 }
12453 else if (node.type == NODE_ECHOERR) {
12454 this.compile_echoerr(node);
12455 return NIL;
12456 }
12457 else if (node.type == NODE_EXECUTE) {
12458 this.compile_execute(node);
12459 return NIL;
12460 }
12461 else if (node.type == NODE_TERNARY) {
12462 return this.compile_ternary(node);
12463 }
12464 else if (node.type == NODE_OR) {
12465 return this.compile_or(node);
12466 }
12467 else if (node.type == NODE_AND) {
12468 return this.compile_and(node);
12469 }
12470 else if (node.type == NODE_EQUAL) {
12471 return this.compile_equal(node);
12472 }
12473 else if (node.type == NODE_EQUALCI) {
12474 return this.compile_equalci(node);
12475 }
12476 else if (node.type == NODE_EQUALCS) {
12477 return this.compile_equalcs(node);
12478 }
12479 else if (node.type == NODE_NEQUAL) {
12480 return this.compile_nequal(node);
12481 }
12482 else if (node.type == NODE_NEQUALCI) {
12483 return this.compile_nequalci(node);
12484 }
12485 else if (node.type == NODE_NEQUALCS) {
12486 return this.compile_nequalcs(node);
12487 }
12488 else if (node.type == NODE_GREATER) {
12489 return this.compile_greater(node);
12490 }
12491 else if (node.type == NODE_GREATERCI) {
12492 return this.compile_greaterci(node);
12493 }
12494 else if (node.type == NODE_GREATERCS) {
12495 return this.compile_greatercs(node);
12496 }
12497 else if (node.type == NODE_GEQUAL) {
12498 return this.compile_gequal(node);
12499 }
12500 else if (node.type == NODE_GEQUALCI) {
12501 return this.compile_gequalci(node);
12502 }
12503 else if (node.type == NODE_GEQUALCS) {
12504 return this.compile_gequalcs(node);
12505 }
12506 else if (node.type == NODE_SMALLER) {
12507 return this.compile_smaller(node);
12508 }
12509 else if (node.type == NODE_SMALLERCI) {
12510 return this.compile_smallerci(node);
12511 }
12512 else if (node.type == NODE_SMALLERCS) {
12513 return this.compile_smallercs(node);
12514 }
12515 else if (node.type == NODE_SEQUAL) {
12516 return this.compile_sequal(node);
12517 }
12518 else if (node.type == NODE_SEQUALCI) {
12519 return this.compile_sequalci(node);
12520 }
12521 else if (node.type == NODE_SEQUALCS) {
12522 return this.compile_sequalcs(node);
12523 }
12524 else if (node.type == NODE_MATCH) {
12525 return this.compile_match(node);
12526 }
12527 else if (node.type == NODE_MATCHCI) {
12528 return this.compile_matchci(node);
12529 }
12530 else if (node.type == NODE_MATCHCS) {
12531 return this.compile_matchcs(node);
12532 }
12533 else if (node.type == NODE_NOMATCH) {
12534 return this.compile_nomatch(node);
12535 }
12536 else if (node.type == NODE_NOMATCHCI) {
12537 return this.compile_nomatchci(node);
12538 }
12539 else if (node.type == NODE_NOMATCHCS) {
12540 return this.compile_nomatchcs(node);
12541 }
12542 else if (node.type == NODE_IS) {
12543 return this.compile_is(node);
12544 }
12545 else if (node.type == NODE_ISCI) {
12546 return this.compile_isci(node);
12547 }
12548 else if (node.type == NODE_ISCS) {
12549 return this.compile_iscs(node);
12550 }
12551 else if (node.type == NODE_ISNOT) {
12552 return this.compile_isnot(node);
12553 }
12554 else if (node.type == NODE_ISNOTCI) {
12555 return this.compile_isnotci(node);
12556 }
12557 else if (node.type == NODE_ISNOTCS) {
12558 return this.compile_isnotcs(node);
12559 }
12560 else if (node.type == NODE_ADD) {
12561 return this.compile_add(node);
12562 }
12563 else if (node.type == NODE_SUBTRACT) {
12564 return this.compile_subtract(node);
12565 }
12566 else if (node.type == NODE_CONCAT) {
12567 return this.compile_concat(node);
12568 }
12569 else if (node.type == NODE_MULTIPLY) {
12570 return this.compile_multiply(node);
12571 }
12572 else if (node.type == NODE_DIVIDE) {
12573 return this.compile_divide(node);
12574 }
12575 else if (node.type == NODE_REMAINDER) {
12576 return this.compile_remainder(node);
12577 }
12578 else if (node.type == NODE_NOT) {
12579 return this.compile_not(node);
12580 }
12581 else if (node.type == NODE_PLUS) {
12582 return this.compile_plus(node);
12583 }
12584 else if (node.type == NODE_MINUS) {
12585 return this.compile_minus(node);
12586 }
12587 else if (node.type == NODE_SUBSCRIPT) {
12588 return this.compile_subscript(node);
12589 }
12590 else if (node.type == NODE_SLICE) {
12591 return this.compile_slice(node);
12592 }
12593 else if (node.type == NODE_DOT) {
12594 return this.compile_dot(node);
12595 }
12596 else if (node.type == NODE_METHOD) {
12597 return this.compile_method(node);
12598 }
12599 else if (node.type == NODE_CALL) {
12600 return this.compile_call(node);
12601 }
12602 else if (node.type == NODE_NUMBER) {
12603 return this.compile_number(node);
12604 }
12605 else if (node.type == NODE_BLOB) {
12606 return this.compile_blob(node);
12607 }
12608 else if (node.type == NODE_STRING) {
12609 return this.compile_string(node);
12610 }
12611 else if (node.type == NODE_LIST) {
12612 return this.compile_list(node);
12613 }
12614 else if (node.type == NODE_DICT) {
12615 return this.compile_dict(node);
12616 }
12617 else if (node.type == NODE_OPTION) {
12618 return this.compile_option(node);
12619 }
12620 else if (node.type == NODE_IDENTIFIER) {
12621 return this.compile_identifier(node);
12622 }
12623 else if (node.type == NODE_CURLYNAME) {
12624 return this.compile_curlyname(node);
12625 }
12626 else if (node.type == NODE_ENV) {
12627 return this.compile_env(node);
12628 }
12629 else if (node.type == NODE_REG) {
12630 return this.compile_reg(node);
12631 }
12632 else if (node.type == NODE_CURLYNAMEPART) {
12633 return this.compile_curlynamepart(node);
12634 }
12635 else if (node.type == NODE_CURLYNAMEEXPR) {
12636 return this.compile_curlynameexpr(node);
12637 }
12638 else if (node.type == NODE_LAMBDA) {
12639 return this.compile_lambda(node);
12640 }
12641 else if (node.type == NODE_HEREDOC) {
12642 return this.compile_heredoc(node);
12643 }
12644 else {
12645 throw viml_printf("Compiler: unknown node: %s", viml_string(node));
12646 }
12647 return NIL;
12648}
12649
12650Compiler.prototype.compile_body = function(body) {
12651 var __c10 = body;
12652 for (var __i10 = 0; __i10 < __c10.length; ++__i10) {
12653 var node = __c10[__i10];
12654 this.compile(node);
12655 }
12656}
12657
12658Compiler.prototype.compile_toplevel = function(node) {
12659 this.compile_body(node.body);
12660 return this.lines;
12661}
12662
12663Compiler.prototype.compile_comment = function(node) {
12664 this.out(";%s", node.str);
12665}
12666
12667Compiler.prototype.compile_excmd = function(node) {
12668 this.out("(excmd \"%s\")", viml_escape(node.str, "\\\""));
12669}
12670
12671Compiler.prototype.compile_function = function(node) {
12672 var left = this.compile(node.left);
12673 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
12674 var default_args = node.default_args.map((function(vval) { return this.compile(vval); }).bind(this));
12675 if (!viml_empty(rlist)) {
12676 var remaining = FALSE;
12677 if (rlist[rlist.length - 1] == "...") {
12678 viml_remove(rlist, -1);
12679 var remaining = TRUE;
12680 }
12681 var __c11 = viml_range(viml_len(rlist));
12682 for (var __i11 = 0; __i11 < __c11.length; ++__i11) {
12683 var i = __c11[__i11];
12684 if (i < viml_len(rlist) - viml_len(default_args)) {
12685 left += viml_printf(" %s", rlist[i]);
12686 }
12687 else {
12688 left += viml_printf(" (%s %s)", rlist[i], default_args[i + viml_len(default_args) - viml_len(rlist)]);
12689 }
12690 }
12691 if (remaining) {
12692 left += " . ...";
12693 }
12694 }
12695 this.out("(function (%s)", left);
12696 this.incindent(" ");
12697 this.compile_body(node.body);
12698 this.out(")");
12699 this.decindent();
12700}
12701
12702Compiler.prototype.compile_delfunction = function(node) {
12703 this.out("(delfunction %s)", this.compile(node.left));
12704}
12705
12706Compiler.prototype.compile_return = function(node) {
12707 if (node.left === NIL) {
12708 this.out("(return)");
12709 }
12710 else {
12711 this.out("(return %s)", this.compile(node.left));
12712 }
12713}
12714
12715Compiler.prototype.compile_excall = function(node) {
12716 this.out("(call %s)", this.compile(node.left));
12717}
12718
12719Compiler.prototype.compile_eval = function(node) {
12720 this.out("(eval %s)", this.compile(node.left));
12721}
12722
12723Compiler.prototype.compile_let = function(node) {
12724 var left = "";
12725 if (node.left !== NIL) {
12726 var left = this.compile(node.left);
12727 }
12728 else {
12729 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12730 if (node.rest !== NIL) {
12731 left += " . " + this.compile(node.rest);
12732 }
12733 var left = "(" + left + ")";
12734 }
12735 var right = this.compile(node.right);
12736 this.out("(let %s %s %s)", node.op, left, right);
12737}
12738
12739// TODO: merge with s:Compiler.compile_let() ?
12740Compiler.prototype.compile_const = function(node) {
12741 var left = "";
12742 if (node.left !== NIL) {
12743 var left = this.compile(node.left);
12744 }
12745 else {
12746 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12747 if (node.rest !== NIL) {
12748 left += " . " + this.compile(node.rest);
12749 }
12750 var left = "(" + left + ")";
12751 }
12752 var right = this.compile(node.right);
12753 this.out("(const %s %s %s)", node.op, left, right);
12754}
12755
12756Compiler.prototype.compile_unlet = function(node) {
12757 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12758 this.out("(unlet %s)", viml_join(list, " "));
12759}
12760
12761Compiler.prototype.compile_lockvar = function(node) {
12762 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12763 if (node.depth === NIL) {
12764 this.out("(lockvar %s)", viml_join(list, " "));
12765 }
12766 else {
12767 this.out("(lockvar %s %s)", node.depth, viml_join(list, " "));
12768 }
12769}
12770
12771Compiler.prototype.compile_unlockvar = function(node) {
12772 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12773 if (node.depth === NIL) {
12774 this.out("(unlockvar %s)", viml_join(list, " "));
12775 }
12776 else {
12777 this.out("(unlockvar %s %s)", node.depth, viml_join(list, " "));
12778 }
12779}
12780
12781Compiler.prototype.compile_if = function(node) {
12782 this.out("(if %s", this.compile(node.cond));
12783 this.incindent(" ");
12784 this.compile_body(node.body);
12785 this.decindent();
12786 var __c12 = node.elseif;
12787 for (var __i12 = 0; __i12 < __c12.length; ++__i12) {
12788 var enode = __c12[__i12];
12789 this.out(" elseif %s", this.compile(enode.cond));
12790 this.incindent(" ");
12791 this.compile_body(enode.body);
12792 this.decindent();
12793 }
12794 if (node._else !== NIL) {
12795 this.out(" else");
12796 this.incindent(" ");
12797 this.compile_body(node._else.body);
12798 this.decindent();
12799 }
12800 this.incindent(" ");
12801 this.out(")");
12802 this.decindent();
12803}
12804
12805Compiler.prototype.compile_while = function(node) {
12806 this.out("(while %s", this.compile(node.cond));
12807 this.incindent(" ");
12808 this.compile_body(node.body);
12809 this.out(")");
12810 this.decindent();
12811}
12812
12813Compiler.prototype.compile_for = function(node) {
12814 var left = "";
12815 if (node.left !== NIL) {
12816 var left = this.compile(node.left);
12817 }
12818 else {
12819 var left = viml_join(node.list.map((function(vval) { return this.compile(vval); }).bind(this)), " ");
12820 if (node.rest !== NIL) {
12821 left += " . " + this.compile(node.rest);
12822 }
12823 var left = "(" + left + ")";
12824 }
12825 var right = this.compile(node.right);
12826 this.out("(for %s %s", left, right);
12827 this.incindent(" ");
12828 this.compile_body(node.body);
12829 this.out(")");
12830 this.decindent();
12831}
12832
12833Compiler.prototype.compile_continue = function(node) {
12834 this.out("(continue)");
12835}
12836
12837Compiler.prototype.compile_break = function(node) {
12838 this.out("(break)");
12839}
12840
12841Compiler.prototype.compile_try = function(node) {
12842 this.out("(try");
12843 this.incindent(" ");
12844 this.compile_body(node.body);
12845 var __c13 = node.catch;
12846 for (var __i13 = 0; __i13 < __c13.length; ++__i13) {
12847 var cnode = __c13[__i13];
12848 if (cnode.pattern !== NIL) {
12849 this.decindent();
12850 this.out(" catch /%s/", cnode.pattern);
12851 this.incindent(" ");
12852 this.compile_body(cnode.body);
12853 }
12854 else {
12855 this.decindent();
12856 this.out(" catch");
12857 this.incindent(" ");
12858 this.compile_body(cnode.body);
12859 }
12860 }
12861 if (node._finally !== NIL) {
12862 this.decindent();
12863 this.out(" finally");
12864 this.incindent(" ");
12865 this.compile_body(node._finally.body);
12866 }
12867 this.out(")");
12868 this.decindent();
12869}
12870
12871Compiler.prototype.compile_throw = function(node) {
12872 this.out("(throw %s)", this.compile(node.left));
12873}
12874
12875Compiler.prototype.compile_echo = function(node) {
12876 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12877 this.out("(echo %s)", viml_join(list, " "));
12878}
12879
12880Compiler.prototype.compile_echon = function(node) {
12881 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12882 this.out("(echon %s)", viml_join(list, " "));
12883}
12884
12885Compiler.prototype.compile_echohl = function(node) {
12886 this.out("(echohl \"%s\")", viml_escape(node.str, "\\\""));
12887}
12888
12889Compiler.prototype.compile_echomsg = function(node) {
12890 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12891 this.out("(echomsg %s)", viml_join(list, " "));
12892}
12893
12894Compiler.prototype.compile_echoerr = function(node) {
12895 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12896 this.out("(echoerr %s)", viml_join(list, " "));
12897}
12898
12899Compiler.prototype.compile_execute = function(node) {
12900 var list = node.list.map((function(vval) { return this.compile(vval); }).bind(this));
12901 this.out("(execute %s)", viml_join(list, " "));
12902}
12903
12904Compiler.prototype.compile_ternary = function(node) {
12905 return viml_printf("(?: %s %s %s)", this.compile(node.cond), this.compile(node.left), this.compile(node.right));
12906}
12907
12908Compiler.prototype.compile_or = function(node) {
12909 return viml_printf("(|| %s %s)", this.compile(node.left), this.compile(node.right));
12910}
12911
12912Compiler.prototype.compile_and = function(node) {
12913 return viml_printf("(&& %s %s)", this.compile(node.left), this.compile(node.right));
12914}
12915
12916Compiler.prototype.compile_equal = function(node) {
12917 return viml_printf("(== %s %s)", this.compile(node.left), this.compile(node.right));
12918}
12919
12920Compiler.prototype.compile_equalci = function(node) {
12921 return viml_printf("(==? %s %s)", this.compile(node.left), this.compile(node.right));
12922}
12923
12924Compiler.prototype.compile_equalcs = function(node) {
12925 return viml_printf("(==# %s %s)", this.compile(node.left), this.compile(node.right));
12926}
12927
12928Compiler.prototype.compile_nequal = function(node) {
12929 return viml_printf("(!= %s %s)", this.compile(node.left), this.compile(node.right));
12930}
12931
12932Compiler.prototype.compile_nequalci = function(node) {
12933 return viml_printf("(!=? %s %s)", this.compile(node.left), this.compile(node.right));
12934}
12935
12936Compiler.prototype.compile_nequalcs = function(node) {
12937 return viml_printf("(!=# %s %s)", this.compile(node.left), this.compile(node.right));
12938}
12939
12940Compiler.prototype.compile_greater = function(node) {
12941 return viml_printf("(> %s %s)", this.compile(node.left), this.compile(node.right));
12942}
12943
12944Compiler.prototype.compile_greaterci = function(node) {
12945 return viml_printf("(>? %s %s)", this.compile(node.left), this.compile(node.right));
12946}
12947
12948Compiler.prototype.compile_greatercs = function(node) {
12949 return viml_printf("(># %s %s)", this.compile(node.left), this.compile(node.right));
12950}
12951
12952Compiler.prototype.compile_gequal = function(node) {
12953 return viml_printf("(>= %s %s)", this.compile(node.left), this.compile(node.right));
12954}
12955
12956Compiler.prototype.compile_gequalci = function(node) {
12957 return viml_printf("(>=? %s %s)", this.compile(node.left), this.compile(node.right));
12958}
12959
12960Compiler.prototype.compile_gequalcs = function(node) {
12961 return viml_printf("(>=# %s %s)", this.compile(node.left), this.compile(node.right));
12962}
12963
12964Compiler.prototype.compile_smaller = function(node) {
12965 return viml_printf("(< %s %s)", this.compile(node.left), this.compile(node.right));
12966}
12967
12968Compiler.prototype.compile_smallerci = function(node) {
12969 return viml_printf("(<? %s %s)", this.compile(node.left), this.compile(node.right));
12970}
12971
12972Compiler.prototype.compile_smallercs = function(node) {
12973 return viml_printf("(<# %s %s)", this.compile(node.left), this.compile(node.right));
12974}
12975
12976Compiler.prototype.compile_sequal = function(node) {
12977 return viml_printf("(<= %s %s)", this.compile(node.left), this.compile(node.right));
12978}
12979
12980Compiler.prototype.compile_sequalci = function(node) {
12981 return viml_printf("(<=? %s %s)", this.compile(node.left), this.compile(node.right));
12982}
12983
12984Compiler.prototype.compile_sequalcs = function(node) {
12985 return viml_printf("(<=# %s %s)", this.compile(node.left), this.compile(node.right));
12986}
12987
12988Compiler.prototype.compile_match = function(node) {
12989 return viml_printf("(=~ %s %s)", this.compile(node.left), this.compile(node.right));
12990}
12991
12992Compiler.prototype.compile_matchci = function(node) {
12993 return viml_printf("(=~? %s %s)", this.compile(node.left), this.compile(node.right));
12994}
12995
12996Compiler.prototype.compile_matchcs = function(node) {
12997 return viml_printf("(=~# %s %s)", this.compile(node.left), this.compile(node.right));
12998}
12999
13000Compiler.prototype.compile_nomatch = function(node) {
13001 return viml_printf("(!~ %s %s)", this.compile(node.left), this.compile(node.right));
13002}
13003
13004Compiler.prototype.compile_nomatchci = function(node) {
13005 return viml_printf("(!~? %s %s)", this.compile(node.left), this.compile(node.right));
13006}
13007
13008Compiler.prototype.compile_nomatchcs = function(node) {
13009 return viml_printf("(!~# %s %s)", this.compile(node.left), this.compile(node.right));
13010}
13011
13012Compiler.prototype.compile_is = function(node) {
13013 return viml_printf("(is %s %s)", this.compile(node.left), this.compile(node.right));
13014}
13015
13016Compiler.prototype.compile_isci = function(node) {
13017 return viml_printf("(is? %s %s)", this.compile(node.left), this.compile(node.right));
13018}
13019
13020Compiler.prototype.compile_iscs = function(node) {
13021 return viml_printf("(is# %s %s)", this.compile(node.left), this.compile(node.right));
13022}
13023
13024Compiler.prototype.compile_isnot = function(node) {
13025 return viml_printf("(isnot %s %s)", this.compile(node.left), this.compile(node.right));
13026}
13027
13028Compiler.prototype.compile_isnotci = function(node) {
13029 return viml_printf("(isnot? %s %s)", this.compile(node.left), this.compile(node.right));
13030}
13031
13032Compiler.prototype.compile_isnotcs = function(node) {
13033 return viml_printf("(isnot# %s %s)", this.compile(node.left), this.compile(node.right));
13034}
13035
13036Compiler.prototype.compile_add = function(node) {
13037 return viml_printf("(+ %s %s)", this.compile(node.left), this.compile(node.right));
13038}
13039
13040Compiler.prototype.compile_subtract = function(node) {
13041 return viml_printf("(- %s %s)", this.compile(node.left), this.compile(node.right));
13042}
13043
13044Compiler.prototype.compile_concat = function(node) {
13045 return viml_printf("(concat %s %s)", this.compile(node.left), this.compile(node.right));
13046}
13047
13048Compiler.prototype.compile_multiply = function(node) {
13049 return viml_printf("(* %s %s)", this.compile(node.left), this.compile(node.right));
13050}
13051
13052Compiler.prototype.compile_divide = function(node) {
13053 return viml_printf("(/ %s %s)", this.compile(node.left), this.compile(node.right));
13054}
13055
13056Compiler.prototype.compile_remainder = function(node) {
13057 return viml_printf("(%% %s %s)", this.compile(node.left), this.compile(node.right));
13058}
13059
13060Compiler.prototype.compile_not = function(node) {
13061 return viml_printf("(! %s)", this.compile(node.left));
13062}
13063
13064Compiler.prototype.compile_plus = function(node) {
13065 return viml_printf("(+ %s)", this.compile(node.left));
13066}
13067
13068Compiler.prototype.compile_minus = function(node) {
13069 return viml_printf("(- %s)", this.compile(node.left));
13070}
13071
13072Compiler.prototype.compile_subscript = function(node) {
13073 return viml_printf("(subscript %s %s)", this.compile(node.left), this.compile(node.right));
13074}
13075
13076Compiler.prototype.compile_slice = function(node) {
13077 var r0 = node.rlist[0] === NIL ? "nil" : this.compile(node.rlist[0]);
13078 var r1 = node.rlist[1] === NIL ? "nil" : this.compile(node.rlist[1]);
13079 return viml_printf("(slice %s %s %s)", this.compile(node.left), r0, r1);
13080}
13081
13082Compiler.prototype.compile_dot = function(node) {
13083 return viml_printf("(dot %s %s)", this.compile(node.left), this.compile(node.right));
13084}
13085
13086Compiler.prototype.compile_method = function(node) {
13087 return viml_printf("(method %s %s)", this.compile(node.left), this.compile(node.right));
13088}
13089
13090Compiler.prototype.compile_call = function(node) {
13091 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13092 if (viml_empty(rlist)) {
13093 return viml_printf("(%s)", this.compile(node.left));
13094 }
13095 else {
13096 return viml_printf("(%s %s)", this.compile(node.left), viml_join(rlist, " "));
13097 }
13098}
13099
13100Compiler.prototype.compile_number = function(node) {
13101 return node.value;
13102}
13103
13104Compiler.prototype.compile_blob = function(node) {
13105 return node.value;
13106}
13107
13108Compiler.prototype.compile_string = function(node) {
13109 return node.value;
13110}
13111
13112Compiler.prototype.compile_list = function(node) {
13113 var value = node.value.map((function(vval) { return this.compile(vval); }).bind(this));
13114 if (viml_empty(value)) {
13115 return "(list)";
13116 }
13117 else {
13118 return viml_printf("(list %s)", viml_join(value, " "));
13119 }
13120}
13121
13122Compiler.prototype.compile_dict = function(node) {
13123 var value = node.value.map((function(vval) { return "(" + this.compile(vval[0]) + " " + this.compile(vval[1]) + ")"; }).bind(this));
13124 if (viml_empty(value)) {
13125 return "(dict)";
13126 }
13127 else {
13128 return viml_printf("(dict %s)", viml_join(value, " "));
13129 }
13130}
13131
13132Compiler.prototype.compile_option = function(node) {
13133 return node.value;
13134}
13135
13136Compiler.prototype.compile_identifier = function(node) {
13137 return node.value;
13138}
13139
13140Compiler.prototype.compile_curlyname = function(node) {
13141 return viml_join(node.value.map((function(vval) { return this.compile(vval); }).bind(this)), "");
13142}
13143
13144Compiler.prototype.compile_env = function(node) {
13145 return node.value;
13146}
13147
13148Compiler.prototype.compile_reg = function(node) {
13149 return node.value;
13150}
13151
13152Compiler.prototype.compile_curlynamepart = function(node) {
13153 return node.value;
13154}
13155
13156Compiler.prototype.compile_curlynameexpr = function(node) {
13157 return "{" + this.compile(node.value) + "}";
13158}
13159
13160Compiler.prototype.escape_string = function(str) {
13161 var m = {"\n":"\\n", "\t":"\\t", "\r":"\\r"};
13162 var out = "\"";
13163 var __c14 = viml_range(viml_len(str));
13164 for (var __i14 = 0; __i14 < __c14.length; ++__i14) {
13165 var i = __c14[__i14];
13166 var c = str[i];
13167 if (viml_has_key(m, c)) {
13168 out += m[c];
13169 }
13170 else {
13171 out += c;
13172 }
13173 }
13174 out += "\"";
13175 return out;
13176}
13177
13178Compiler.prototype.compile_lambda = function(node) {
13179 var rlist = node.rlist.map((function(vval) { return this.compile(vval); }).bind(this));
13180 return viml_printf("(lambda (%s) %s)", viml_join(rlist, " "), this.compile(node.left));
13181}
13182
13183Compiler.prototype.compile_heredoc = function(node) {
13184 if (viml_empty(node.rlist)) {
13185 var rlist = "(list)";
13186 }
13187 else {
13188 var rlist = "(list " + viml_join(node.rlist.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13189 }
13190 if (viml_empty(node.body)) {
13191 var body = "(list)";
13192 }
13193 else {
13194 var body = "(list " + viml_join(node.body.map((function(vval) { return this.escape_string(vval); }).bind(this)), " ") + ")";
13195 }
13196 var op = this.escape_string(node.op);
13197 return viml_printf("(heredoc %s %s %s)", rlist, op, body);
13198}
13199
13200// TODO: under construction
13201function RegexpParser() { this.__init__.apply(this, arguments); }
13202RegexpParser.prototype.RE_VERY_NOMAGIC = 1;
13203RegexpParser.prototype.RE_NOMAGIC = 2;
13204RegexpParser.prototype.RE_MAGIC = 3;
13205RegexpParser.prototype.RE_VERY_MAGIC = 4;
13206RegexpParser.prototype.__init__ = function(reader, cmd, delim) {
13207 this.reader = reader;
13208 this.cmd = cmd;
13209 this.delim = delim;
13210 this.reg_magic = this.RE_MAGIC;
13211}
13212
13213RegexpParser.prototype.isend = function(c) {
13214 return c == "<EOF>" || c == "<EOL>" || c == this.delim;
13215}
13216
13217RegexpParser.prototype.parse_regexp = function() {
13218 var prevtoken = "";
13219 var ntoken = "";
13220 var ret = [];
13221 if (this.reader.peekn(4) == "\\%#=") {
13222 var epos = this.reader.getpos();
13223 var token = this.reader.getn(5);
13224 if (token != "\\%#=0" && token != "\\%#=1" && token != "\\%#=2") {
13225 throw Err("E864: \\%#= can only be followed by 0, 1, or 2", epos);
13226 }
13227 viml_add(ret, token);
13228 }
13229 while (!this.isend(this.reader.peek())) {
13230 var prevtoken = ntoken;
13231 var __tmp = this.get_token();
13232 var token = __tmp[0];
13233 var ntoken = __tmp[1];
13234 if (ntoken == "\\m") {
13235 this.reg_magic = this.RE_MAGIC;
13236 }
13237 else if (ntoken == "\\M") {
13238 this.reg_magic = this.RE_NOMAGIC;
13239 }
13240 else if (ntoken == "\\v") {
13241 this.reg_magic = this.RE_VERY_MAGIC;
13242 }
13243 else if (ntoken == "\\V") {
13244 this.reg_magic = this.RE_VERY_NOMAGIC;
13245 }
13246 else if (ntoken == "\\*") {
13247 // '*' is not magic as the very first character.
13248 if (prevtoken == "" || prevtoken == "\\^" || prevtoken == "\\&" || prevtoken == "\\|" || prevtoken == "\\(") {
13249 var ntoken = "*";
13250 }
13251 }
13252 else if (ntoken == "\\^") {
13253 // '^' is only magic as the very first character.
13254 if (this.reg_magic != this.RE_VERY_MAGIC && prevtoken != "" && prevtoken != "\\&" && prevtoken != "\\|" && prevtoken != "\\n" && prevtoken != "\\(" && prevtoken != "\\%(") {
13255 var ntoken = "^";
13256 }
13257 }
13258 else if (ntoken == "\\$") {
13259 // '$' is only magic as the very last character
13260 var pos = this.reader.tell();
13261 if (this.reg_magic != this.RE_VERY_MAGIC) {
13262 while (!this.isend(this.reader.peek())) {
13263 var __tmp = this.get_token();
13264 var t = __tmp[0];
13265 var n = __tmp[1];
13266 // XXX: Vim doesn't check \v and \V?
13267 if (n == "\\c" || n == "\\C" || n == "\\m" || n == "\\M" || n == "\\Z") {
13268 continue;
13269 }
13270 if (n != "\\|" && n != "\\&" && n != "\\n" && n != "\\)") {
13271 var ntoken = "$";
13272 }
13273 break;
13274 }
13275 }
13276 this.reader.seek_set(pos);
13277 }
13278 else if (ntoken == "\\?") {
13279 // '?' is literal in '?' command.
13280 if (this.cmd == "?") {
13281 var ntoken = "?";
13282 }
13283 }
13284 viml_add(ret, ntoken);
13285 }
13286 return ret;
13287}
13288
13289// @return [actual_token, normalized_token]
13290RegexpParser.prototype.get_token = function() {
13291 if (this.reg_magic == this.RE_VERY_MAGIC) {
13292 return this.get_token_very_magic();
13293 }
13294 else if (this.reg_magic == this.RE_MAGIC) {
13295 return this.get_token_magic();
13296 }
13297 else if (this.reg_magic == this.RE_NOMAGIC) {
13298 return this.get_token_nomagic();
13299 }
13300 else if (this.reg_magic == this.RE_VERY_NOMAGIC) {
13301 return this.get_token_very_nomagic();
13302 }
13303}
13304
13305RegexpParser.prototype.get_token_very_magic = function() {
13306 if (this.isend(this.reader.peek())) {
13307 return ["<END>", "<END>"];
13308 }
13309 var c = this.reader.get();
13310 if (c == "\\") {
13311 return this.get_token_backslash_common();
13312 }
13313 else if (c == "*") {
13314 return ["*", "\\*"];
13315 }
13316 else if (c == "+") {
13317 return ["+", "\\+"];
13318 }
13319 else if (c == "=") {
13320 return ["=", "\\="];
13321 }
13322 else if (c == "?") {
13323 return ["?", "\\?"];
13324 }
13325 else if (c == "{") {
13326 return this.get_token_brace("{");
13327 }
13328 else if (c == "@") {
13329 return this.get_token_at("@");
13330 }
13331 else if (c == "^") {
13332 return ["^", "\\^"];
13333 }
13334 else if (c == "$") {
13335 return ["$", "\\$"];
13336 }
13337 else if (c == ".") {
13338 return [".", "\\."];
13339 }
13340 else if (c == "<") {
13341 return ["<", "\\<"];
13342 }
13343 else if (c == ">") {
13344 return [">", "\\>"];
13345 }
13346 else if (c == "%") {
13347 return this.get_token_percent("%");
13348 }
13349 else if (c == "[") {
13350 return this.get_token_sq("[");
13351 }
13352 else if (c == "~") {
13353 return ["~", "\\~"];
13354 }
13355 else if (c == "|") {
13356 return ["|", "\\|"];
13357 }
13358 else if (c == "&") {
13359 return ["&", "\\&"];
13360 }
13361 else if (c == "(") {
13362 return ["(", "\\("];
13363 }
13364 else if (c == ")") {
13365 return [")", "\\)"];
13366 }
13367 return [c, c];
13368}
13369
13370RegexpParser.prototype.get_token_magic = function() {
13371 if (this.isend(this.reader.peek())) {
13372 return ["<END>", "<END>"];
13373 }
13374 var c = this.reader.get();
13375 if (c == "\\") {
13376 var pos = this.reader.tell();
13377 var c = this.reader.get();
13378 if (c == "+") {
13379 return ["\\+", "\\+"];
13380 }
13381 else if (c == "=") {
13382 return ["\\=", "\\="];
13383 }
13384 else if (c == "?") {
13385 return ["\\?", "\\?"];
13386 }
13387 else if (c == "{") {
13388 return this.get_token_brace("\\{");
13389 }
13390 else if (c == "@") {
13391 return this.get_token_at("\\@");
13392 }
13393 else if (c == "<") {
13394 return ["\\<", "\\<"];
13395 }
13396 else if (c == ">") {
13397 return ["\\>", "\\>"];
13398 }
13399 else if (c == "%") {
13400 return this.get_token_percent("\\%");
13401 }
13402 else if (c == "|") {
13403 return ["\\|", "\\|"];
13404 }
13405 else if (c == "&") {
13406 return ["\\&", "\\&"];
13407 }
13408 else if (c == "(") {
13409 return ["\\(", "\\("];
13410 }
13411 else if (c == ")") {
13412 return ["\\)", "\\)"];
13413 }
13414 this.reader.seek_set(pos);
13415 return this.get_token_backslash_common();
13416 }
13417 else if (c == "*") {
13418 return ["*", "\\*"];
13419 }
13420 else if (c == "^") {
13421 return ["^", "\\^"];
13422 }
13423 else if (c == "$") {
13424 return ["$", "\\$"];
13425 }
13426 else if (c == ".") {
13427 return [".", "\\."];
13428 }
13429 else if (c == "[") {
13430 return this.get_token_sq("[");
13431 }
13432 else if (c == "~") {
13433 return ["~", "\\~"];
13434 }
13435 return [c, c];
13436}
13437
13438RegexpParser.prototype.get_token_nomagic = function() {
13439 if (this.isend(this.reader.peek())) {
13440 return ["<END>", "<END>"];
13441 }
13442 var c = this.reader.get();
13443 if (c == "\\") {
13444 var pos = this.reader.tell();
13445 var c = this.reader.get();
13446 if (c == "*") {
13447 return ["\\*", "\\*"];
13448 }
13449 else if (c == "+") {
13450 return ["\\+", "\\+"];
13451 }
13452 else if (c == "=") {
13453 return ["\\=", "\\="];
13454 }
13455 else if (c == "?") {
13456 return ["\\?", "\\?"];
13457 }
13458 else if (c == "{") {
13459 return this.get_token_brace("\\{");
13460 }
13461 else if (c == "@") {
13462 return this.get_token_at("\\@");
13463 }
13464 else if (c == ".") {
13465 return ["\\.", "\\."];
13466 }
13467 else if (c == "<") {
13468 return ["\\<", "\\<"];
13469 }
13470 else if (c == ">") {
13471 return ["\\>", "\\>"];
13472 }
13473 else if (c == "%") {
13474 return this.get_token_percent("\\%");
13475 }
13476 else if (c == "~") {
13477 return ["\\~", "\\^"];
13478 }
13479 else if (c == "[") {
13480 return this.get_token_sq("\\[");
13481 }
13482 else if (c == "|") {
13483 return ["\\|", "\\|"];
13484 }
13485 else if (c == "&") {
13486 return ["\\&", "\\&"];
13487 }
13488 else if (c == "(") {
13489 return ["\\(", "\\("];
13490 }
13491 else if (c == ")") {
13492 return ["\\)", "\\)"];
13493 }
13494 this.reader.seek_set(pos);
13495 return this.get_token_backslash_common();
13496 }
13497 else if (c == "^") {
13498 return ["^", "\\^"];
13499 }
13500 else if (c == "$") {
13501 return ["$", "\\$"];
13502 }
13503 return [c, c];
13504}
13505
13506RegexpParser.prototype.get_token_very_nomagic = function() {
13507 if (this.isend(this.reader.peek())) {
13508 return ["<END>", "<END>"];
13509 }
13510 var c = this.reader.get();
13511 if (c == "\\") {
13512 var pos = this.reader.tell();
13513 var c = this.reader.get();
13514 if (c == "*") {
13515 return ["\\*", "\\*"];
13516 }
13517 else if (c == "+") {
13518 return ["\\+", "\\+"];
13519 }
13520 else if (c == "=") {
13521 return ["\\=", "\\="];
13522 }
13523 else if (c == "?") {
13524 return ["\\?", "\\?"];
13525 }
13526 else if (c == "{") {
13527 return this.get_token_brace("\\{");
13528 }
13529 else if (c == "@") {
13530 return this.get_token_at("\\@");
13531 }
13532 else if (c == "^") {
13533 return ["\\^", "\\^"];
13534 }
13535 else if (c == "$") {
13536 return ["\\$", "\\$"];
13537 }
13538 else if (c == "<") {
13539 return ["\\<", "\\<"];
13540 }
13541 else if (c == ">") {
13542 return ["\\>", "\\>"];
13543 }
13544 else if (c == "%") {
13545 return this.get_token_percent("\\%");
13546 }
13547 else if (c == "~") {
13548 return ["\\~", "\\~"];
13549 }
13550 else if (c == "[") {
13551 return this.get_token_sq("\\[");
13552 }
13553 else if (c == "|") {
13554 return ["\\|", "\\|"];
13555 }
13556 else if (c == "&") {
13557 return ["\\&", "\\&"];
13558 }
13559 else if (c == "(") {
13560 return ["\\(", "\\("];
13561 }
13562 else if (c == ")") {
13563 return ["\\)", "\\)"];
13564 }
13565 this.reader.seek_set(pos);
13566 return this.get_token_backslash_common();
13567 }
13568 return [c, c];
13569}
13570
13571RegexpParser.prototype.get_token_backslash_common = function() {
13572 var cclass = "iIkKfFpPsSdDxXoOwWhHaAlLuU";
13573 var c = this.reader.get();
13574 if (c == "\\") {
13575 return ["\\\\", "\\\\"];
13576 }
13577 else if (viml_stridx(cclass, c) != -1) {
13578 return ["\\" + c, "\\" + c];
13579 }
13580 else if (c == "_") {
13581 var epos = this.reader.getpos();
13582 var c = this.reader.get();
13583 if (viml_stridx(cclass, c) != -1) {
13584 return ["\\_" + c, "\\_ . c"];
13585 }
13586 else if (c == "^") {
13587 return ["\\_^", "\\_^"];
13588 }
13589 else if (c == "$") {
13590 return ["\\_$", "\\_$"];
13591 }
13592 else if (c == ".") {
13593 return ["\\_.", "\\_."];
13594 }
13595 else if (c == "[") {
13596 return this.get_token_sq("\\_[");
13597 }
13598 throw Err("E63: Invalid use of \\_", epos);
13599 }
13600 else if (viml_stridx("etrb", c) != -1) {
13601 return ["\\" + c, "\\" + c];
13602 }
13603 else if (viml_stridx("123456789", c) != -1) {
13604 return ["\\" + c, "\\" + c];
13605 }
13606 else if (c == "z") {
13607 var epos = this.reader.getpos();
13608 var c = this.reader.get();
13609 if (viml_stridx("123456789", c) != -1) {
13610 return ["\\z" + c, "\\z" + c];
13611 }
13612 else if (c == "s") {
13613 return ["\\zs", "\\zs"];
13614 }
13615 else if (c == "e") {
13616 return ["\\ze", "\\ze"];
13617 }
13618 else if (c == "(") {
13619 return ["\\z(", "\\z("];
13620 }
13621 throw Err("E68: Invalid character after \\z", epos);
13622 }
13623 else if (viml_stridx("cCmMvVZ", c) != -1) {
13624 return ["\\" + c, "\\" + c];
13625 }
13626 else if (c == "%") {
13627 var epos = this.reader.getpos();
13628 var c = this.reader.get();
13629 if (c == "d") {
13630 var r = this.getdecchrs();
13631 if (r != "") {
13632 return ["\\%d" + r, "\\%d" + r];
13633 }
13634 }
13635 else if (c == "o") {
13636 var r = this.getoctchrs();
13637 if (r != "") {
13638 return ["\\%o" + r, "\\%o" + r];
13639 }
13640 }
13641 else if (c == "x") {
13642 var r = this.gethexchrs(2);
13643 if (r != "") {
13644 return ["\\%x" + r, "\\%x" + r];
13645 }
13646 }
13647 else if (c == "u") {
13648 var r = this.gethexchrs(4);
13649 if (r != "") {
13650 return ["\\%u" + r, "\\%u" + r];
13651 }
13652 }
13653 else if (c == "U") {
13654 var r = this.gethexchrs(8);
13655 if (r != "") {
13656 return ["\\%U" + r, "\\%U" + r];
13657 }
13658 }
13659 throw Err("E678: Invalid character after \\%[dxouU]", epos);
13660 }
13661 return ["\\" + c, c];
13662}
13663
13664// \{}
13665RegexpParser.prototype.get_token_brace = function(pre) {
13666 var r = "";
13667 var minus = "";
13668 var comma = "";
13669 var n = "";
13670 var m = "";
13671 if (this.reader.p(0) == "-") {
13672 var minus = this.reader.get();
13673 r += minus;
13674 }
13675 if (isdigit(this.reader.p(0))) {
13676 var n = this.reader.read_digit();
13677 r += n;
13678 }
13679 if (this.reader.p(0) == ",") {
13680 var comma = this.rader.get();
13681 r += comma;
13682 }
13683 if (isdigit(this.reader.p(0))) {
13684 var m = this.reader.read_digit();
13685 r += m;
13686 }
13687 if (this.reader.p(0) == "\\") {
13688 r += this.reader.get();
13689 }
13690 if (this.reader.p(0) != "}") {
13691 throw Err("E554: Syntax error in \\{...}", this.reader.getpos());
13692 }
13693 this.reader.get();
13694 return [pre + r, "\\{" + minus + n + comma + m + "}"];
13695}
13696
13697// \[]
13698RegexpParser.prototype.get_token_sq = function(pre) {
13699 var start = this.reader.tell();
13700 var r = "";
13701 // Complement of range
13702 if (this.reader.p(0) == "^") {
13703 r += this.reader.get();
13704 }
13705 // At the start ']' and '-' mean the literal character.
13706 if (this.reader.p(0) == "]" || this.reader.p(0) == "-") {
13707 r += this.reader.get();
13708 }
13709 while (TRUE) {
13710 var startc = 0;
13711 var c = this.reader.p(0);
13712 if (this.isend(c)) {
13713 // If there is no matching ']', we assume the '[' is a normal character.
13714 this.reader.seek_set(start);
13715 return [pre, "["];
13716 }
13717 else if (c == "]") {
13718 this.reader.seek_cur(1);
13719 return [pre + r + "]", "\\[" + r + "]"];
13720 }
13721 else if (c == "[") {
13722 var e = this.get_token_sq_char_class();
13723 if (e == "") {
13724 var e = this.get_token_sq_equi_class();
13725 if (e == "") {
13726 var e = this.get_token_sq_coll_element();
13727 if (e == "") {
13728 var __tmp = this.get_token_sq_c();
13729 var e = __tmp[0];
13730 var startc = __tmp[1];
13731 }
13732 }
13733 }
13734 r += e;
13735 }
13736 else {
13737 var __tmp = this.get_token_sq_c();
13738 var e = __tmp[0];
13739 var startc = __tmp[1];
13740 r += e;
13741 }
13742 if (startc != 0 && this.reader.p(0) == "-" && !this.isend(this.reader.p(1)) && !(this.reader.p(1) == "\\" && this.reader.p(2) == "n")) {
13743 this.reader.seek_cur(1);
13744 r += "-";
13745 var c = this.reader.p(0);
13746 if (c == "[") {
13747 var e = this.get_token_sq_coll_element();
13748 if (e != "") {
13749 var endc = viml_char2nr(e[2]);
13750 }
13751 else {
13752 var __tmp = this.get_token_sq_c();
13753 var e = __tmp[0];
13754 var endc = __tmp[1];
13755 }
13756 r += e;
13757 }
13758 else {
13759 var __tmp = this.get_token_sq_c();
13760 var e = __tmp[0];
13761 var endc = __tmp[1];
13762 r += e;
13763 }
13764 if (startc > endc || endc > startc + 256) {
13765 throw Err("E16: Invalid range", this.reader.getpos());
13766 }
13767 }
13768 }
13769}
13770
13771// [c]
13772RegexpParser.prototype.get_token_sq_c = function() {
13773 var c = this.reader.p(0);
13774 if (c == "\\") {
13775 this.reader.seek_cur(1);
13776 var c = this.reader.p(0);
13777 if (c == "n") {
13778 this.reader.seek_cur(1);
13779 return ["\\n", 0];
13780 }
13781 else if (c == "r") {
13782 this.reader.seek_cur(1);
13783 return ["\\r", 13];
13784 }
13785 else if (c == "t") {
13786 this.reader.seek_cur(1);
13787 return ["\\t", 9];
13788 }
13789 else if (c == "e") {
13790 this.reader.seek_cur(1);
13791 return ["\\e", 27];
13792 }
13793 else if (c == "b") {
13794 this.reader.seek_cur(1);
13795 return ["\\b", 8];
13796 }
13797 else if (viml_stridx("]^-\\", c) != -1) {
13798 this.reader.seek_cur(1);
13799 return ["\\" + c, viml_char2nr(c)];
13800 }
13801 else if (viml_stridx("doxuU", c) != -1) {
13802 var __tmp = this.get_token_sq_coll_char();
13803 var c = __tmp[0];
13804 var n = __tmp[1];
13805 return [c, n];
13806 }
13807 else {
13808 return ["\\", viml_char2nr("\\")];
13809 }
13810 }
13811 else if (c == "-") {
13812 this.reader.seek_cur(1);
13813 return ["-", viml_char2nr("-")];
13814 }
13815 else {
13816 this.reader.seek_cur(1);
13817 return [c, viml_char2nr(c)];
13818 }
13819}
13820
13821// [\d123]
13822RegexpParser.prototype.get_token_sq_coll_char = function() {
13823 var pos = this.reader.tell();
13824 var c = this.reader.get();
13825 if (c == "d") {
13826 var r = this.getdecchrs();
13827 var n = viml_str2nr(r, 10);
13828 }
13829 else if (c == "o") {
13830 var r = this.getoctchrs();
13831 var n = viml_str2nr(r, 8);
13832 }
13833 else if (c == "x") {
13834 var r = this.gethexchrs(2);
13835 var n = viml_str2nr(r, 16);
13836 }
13837 else if (c == "u") {
13838 var r = this.gethexchrs(4);
13839 var n = viml_str2nr(r, 16);
13840 }
13841 else if (c == "U") {
13842 var r = this.gethexchrs(8);
13843 var n = viml_str2nr(r, 16);
13844 }
13845 else {
13846 var r = "";
13847 }
13848 if (r == "") {
13849 this.reader.seek_set(pos);
13850 return "\\";
13851 }
13852 return ["\\" + c + r, n];
13853}
13854
13855// [[.a.]]
13856RegexpParser.prototype.get_token_sq_coll_element = function() {
13857 if (this.reader.p(0) == "[" && this.reader.p(1) == "." && !this.isend(this.reader.p(2)) && this.reader.p(3) == "." && this.reader.p(4) == "]") {
13858 return this.reader.getn(5);
13859 }
13860 return "";
13861}
13862
13863// [[=a=]]
13864RegexpParser.prototype.get_token_sq_equi_class = function() {
13865 if (this.reader.p(0) == "[" && this.reader.p(1) == "=" && !this.isend(this.reader.p(2)) && this.reader.p(3) == "=" && this.reader.p(4) == "]") {
13866 return this.reader.getn(5);
13867 }
13868 return "";
13869}
13870
13871// [[:alpha:]]
13872RegexpParser.prototype.get_token_sq_char_class = function() {
13873 var class_names = ["alnum", "alpha", "blank", "cntrl", "digit", "graph", "lower", "print", "punct", "space", "upper", "xdigit", "tab", "return", "backspace", "escape"];
13874 var pos = this.reader.tell();
13875 if (this.reader.p(0) == "[" && this.reader.p(1) == ":") {
13876 this.reader.seek_cur(2);
13877 var r = this.reader.read_alpha();
13878 if (this.reader.p(0) == ":" && this.reader.p(1) == "]") {
13879 this.reader.seek_cur(2);
13880 var __c15 = class_names;
13881 for (var __i15 = 0; __i15 < __c15.length; ++__i15) {
13882 var name = __c15[__i15];
13883 if (r == name) {
13884 return "[:" + name + ":]";
13885 }
13886 }
13887 }
13888 }
13889 this.reader.seek_set(pos);
13890 return "";
13891}
13892
13893// \@...
13894RegexpParser.prototype.get_token_at = function(pre) {
13895 var epos = this.reader.getpos();
13896 var c = this.reader.get();
13897 if (c == ">") {
13898 return [pre + ">", "\\@>"];
13899 }
13900 else if (c == "=") {
13901 return [pre + "=", "\\@="];
13902 }
13903 else if (c == "!") {
13904 return [pre + "!", "\\@!"];
13905 }
13906 else if (c == "<") {
13907 var c = this.reader.get();
13908 if (c == "=") {
13909 return [pre + "<=", "\\@<="];
13910 }
13911 else if (c == "!") {
13912 return [pre + "<!", "\\@<!"];
13913 }
13914 }
13915 throw Err("E64: @ follows nothing", epos);
13916}
13917
13918// \%...
13919RegexpParser.prototype.get_token_percent = function(pre) {
13920 var c = this.reader.get();
13921 if (c == "^") {
13922 return [pre + "^", "\\%^"];
13923 }
13924 else if (c == "$") {
13925 return [pre + "$", "\\%$"];
13926 }
13927 else if (c == "V") {
13928 return [pre + "V", "\\%V"];
13929 }
13930 else if (c == "#") {
13931 return [pre + "#", "\\%#"];
13932 }
13933 else if (c == "[") {
13934 return this.get_token_percent_sq(pre + "[");
13935 }
13936 else if (c == "(") {
13937 return [pre + "(", "\\%("];
13938 }
13939 else {
13940 return this.get_token_mlcv(pre);
13941 }
13942}
13943
13944// \%[]
13945RegexpParser.prototype.get_token_percent_sq = function(pre) {
13946 var r = "";
13947 while (TRUE) {
13948 var c = this.reader.peek();
13949 if (this.isend(c)) {
13950 throw Err("E69: Missing ] after \\%[", this.reader.getpos());
13951 }
13952 else if (c == "]") {
13953 if (r == "") {
13954 throw Err("E70: Empty \\%[", this.reader.getpos());
13955 }
13956 this.reader.seek_cur(1);
13957 break;
13958 }
13959 this.reader.seek_cur(1);
13960 r += c;
13961 }
13962 return [pre + r + "]", "\\%[" + r + "]"];
13963}
13964
13965// \%'m \%l \%c \%v
13966RegexpParser.prototype.get_token_mlvc = function(pre) {
13967 var r = "";
13968 var cmp = "";
13969 if (this.reader.p(0) == "<" || this.reader.p(0) == ">") {
13970 var cmp = this.reader.get();
13971 r += cmp;
13972 }
13973 if (this.reader.p(0) == "'") {
13974 r += this.reader.get();
13975 var c = this.reader.p(0);
13976 if (this.isend(c)) {
13977 // FIXME: Should be error? Vim allow this.
13978 var c = "";
13979 }
13980 else {
13981 var c = this.reader.get();
13982 }
13983 return [pre + r + c, "\\%" + cmp + "'" + c];
13984 }
13985 else if (isdigit(this.reader.p(0))) {
13986 var d = this.reader.read_digit();
13987 r += d;
13988 var c = this.reader.p(0);
13989 if (c == "l") {
13990 this.reader.get();
13991 return [pre + r + "l", "\\%" + cmp + d + "l"];
13992 }
13993 else if (c == "c") {
13994 this.reader.get();
13995 return [pre + r + "c", "\\%" + cmp + d + "c"];
13996 }
13997 else if (c == "v") {
13998 this.reader.get();
13999 return [pre + r + "v", "\\%" + cmp + d + "v"];
14000 }
14001 }
14002 throw Err("E71: Invalid character after %", this.reader.getpos());
14003}
14004
14005RegexpParser.prototype.getdecchrs = function() {
14006 return this.reader.read_digit();
14007}
14008
14009RegexpParser.prototype.getoctchrs = function() {
14010 return this.reader.read_odigit();
14011}
14012
14013RegexpParser.prototype.gethexchrs = function(n) {
14014 var r = "";
14015 var __c16 = viml_range(n);
14016 for (var __i16 = 0; __i16 < __c16.length; ++__i16) {
14017 var i = __c16[__i16];
14018 var c = this.reader.peek();
14019 if (!isxdigit(c)) {
14020 break;
14021 }
14022 r += this.reader.get();
14023 }
14024 return r;
14025}
14026
14027if (__webpack_require__.c[__webpack_require__.s] === module) {
14028 main();
14029}
14030else {
14031 module.exports = {
14032 VimLParser: VimLParser,
14033 StringReader: StringReader,
14034 Compiler: Compiler
14035 };
14036}
14037
14038/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(53)(module)))
14039
14040/***/ }),
14041/* 53 */
14042/***/ (function(module, exports) {
14043
14044module.exports = function(module) {
14045 if (!module.webpackPolyfill) {
14046 module.deprecate = function() {};
14047 module.paths = [];
14048 // module.parent = undefined by default
14049 if (!module.children) module.children = [];
14050 Object.defineProperty(module, "loaded", {
14051 enumerable: true,
14052 get: function() {
14053 return module.l;
14054 }
14055 });
14056 Object.defineProperty(module, "id", {
14057 enumerable: true,
14058 get: function() {
14059 return module.i;
14060 }
14061 });
14062 module.webpackPolyfill = 1;
14063 }
14064 return module;
14065};
14066
14067
14068/***/ }),
14069/* 54 */
14070/***/ (function(module, exports, __webpack_require__) {
14071
14072"use strict";
14073
14074Object.defineProperty(exports, "__esModule", { value: true });
14075exports.errorLinePattern = /[^:]+:\s*(.+?):\s*line\s*([0-9]+)\s*col\s*([0-9]+)/;
14076exports.commentPattern = /^[ \t]*("|')/;
14077exports.keywordPattern = /[\w#&$<>.:]/;
14078exports.builtinFunctionPattern = /^((<SID>|\b(v|g|b|s|l|a):)?[\w#&]+)[ \t]*\([^)]*\)/;
14079exports.wordPrePattern = /^.*?(((<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+)|(<SID>|<SID|<SI|<S|<|\b(v|g|b|s|l|a):))$/;
14080exports.wordNextPattern = /^((SID>|ID>|D>|>|<SID>|\b(v|g|b|s|l|a):)?[\w#&$.]+|(:[\w#&$.]+)).*?(\r\n|\r|\n)?$/;
14081exports.colorschemePattern = /\bcolorscheme[ \t]+\w*$/;
14082exports.mapCommandPattern = /^([ \t]*(\[ \t]*)?)\w*map[ \t]+/;
14083exports.highlightLinkPattern = /^[ \t]*(hi|highlight)[ \t]+link([ \t]+[^ \t]+)*[ \t]*$/;
14084exports.highlightPattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]*$/;
14085exports.highlightValuePattern = /^[ \t]*(hi|highlight)([ \t]+[^ \t]+)*[ \t]+([^ \t=]+)=[^ \t=]*$/;
14086exports.autocmdPattern = /^[ \t]*(au|autocmd)!?[ \t]+([^ \t,]+,)*[^ \t,]*$/;
14087exports.builtinVariablePattern = [
14088 /\bv:\w*$/,
14089];
14090exports.optionPattern = [
14091 /(^|[ \t]+)&\w*$/,
14092 /(^|[ \t]+)set(l|local|g|global)?[ \t]+\w+$/,
14093];
14094exports.notFunctionPattern = [
14095 /^[ \t]*\\$/,
14096 /^[ \t]*\w+$/,
14097 /^[ \t]*"/,
14098 /(let|set|colorscheme)[ \t][^ \t]*$/,
14099 /[^([,\\ \t\w#>]\w*$/,
14100 /^[ \t]*(hi|highlight)([ \t]+link)?([ \t]+[^ \t]+)*[ \t]*$/,
14101 exports.autocmdPattern,
14102];
14103exports.commandPattern = [
14104 /(^|[ \t]):\w+$/,
14105 /^[ \t]*\w+$/,
14106 /:?silent!?[ \t]\w+/,
14107];
14108exports.featurePattern = [
14109 /\bhas\([ \t]*["']\w*/,
14110];
14111exports.expandPattern = [
14112 /\bexpand\(['"]<\w*$/,
14113 /\bexpand\([ \t]*['"]\w*$/,
14114];
14115exports.notIdentifierPattern = [
14116 exports.commentPattern,
14117 /("|'):\w*$/,
14118 /^[ \t]*\\$/,
14119 /^[ \t]*call[ \t]+[^ \t()]*$/,
14120 /('|"|#|&|\$|<)\w*$/,
14121];
14122
14123
14124/***/ }),
14125/* 55 */
14126/***/ (function(module, exports, __webpack_require__) {
14127
14128"use strict";
14129
14130Object.defineProperty(exports, "__esModule", { value: true });
14131var constant_1 = __webpack_require__(44);
14132var conf;
14133exports.default = {
14134 init: function (config) {
14135 conf = config;
14136 },
14137 get iskeyword() {
14138 return conf && conf.iskeyword || "";
14139 },
14140 get vimruntime() {
14141 return conf && conf.vimruntime || "";
14142 },
14143 get runtimepath() {
14144 return conf && conf.runtimepath || [];
14145 },
14146 get diagnostic() {
14147 return conf && conf.diagnostic || {
14148 enable: true,
14149 };
14150 },
14151 get snippetSupport() {
14152 return conf && conf.snippetSupport || false;
14153 },
14154 get suggest() {
14155 return conf && conf.suggest || {
14156 fromRuntimepath: false,
14157 fromVimruntime: true,
14158 };
14159 },
14160 get indexes() {
14161 var defaults = {
14162 runtimepath: true,
14163 gap: 100,
14164 count: 1,
14165 projectRootPatterns: constant_1.projectRootPatterns,
14166 };
14167 if (!conf || !conf.indexes) {
14168 return defaults;
14169 }
14170 if (conf.indexes.gap !== undefined) {
14171 defaults.gap = conf.indexes.gap;
14172 }
14173 if (conf.indexes.count !== undefined) {
14174 defaults.count = conf.indexes.count;
14175 }
14176 if (conf.indexes.projectRootPatterns !== undefined
14177 && Array.isArray(conf.indexes.projectRootPatterns)
14178 && conf.indexes.projectRootPatterns.length) {
14179 defaults.projectRootPatterns = conf.indexes.projectRootPatterns;
14180 }
14181 return defaults;
14182 },
14183};
14184
14185
14186/***/ }),
14187/* 56 */
14188/***/ (function(module, exports, __webpack_require__) {
14189
14190"use strict";
14191
14192Object.defineProperty(exports, "__esModule", { value: true });
14193var vscode_languageserver_1 = __webpack_require__(2);
14194var vscode_languageserver_textdocument_1 = __webpack_require__(57);
14195// text document manager
14196exports.documents = new vscode_languageserver_1.TextDocuments(vscode_languageserver_textdocument_1.TextDocument);
14197
14198
14199/***/ }),
14200/* 57 */
14201/***/ (function(module, __webpack_exports__, __webpack_require__) {
14202
14203"use strict";
14204__webpack_require__.r(__webpack_exports__);
14205/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TextDocument", function() { return TextDocument; });
14206/* --------------------------------------------------------------------------------------------
14207 * Copyright (c) Microsoft Corporation. All rights reserved.
14208 * Licensed under the MIT License. See License.txt in the project root for license information.
14209 * ------------------------------------------------------------------------------------------ */
14210
14211var FullTextDocument = /** @class */ (function () {
14212 function FullTextDocument(uri, languageId, version, content) {
14213 this._uri = uri;
14214 this._languageId = languageId;
14215 this._version = version;
14216 this._content = content;
14217 this._lineOffsets = undefined;
14218 }
14219 Object.defineProperty(FullTextDocument.prototype, "uri", {
14220 get: function () {
14221 return this._uri;
14222 },
14223 enumerable: true,
14224 configurable: true
14225 });
14226 Object.defineProperty(FullTextDocument.prototype, "languageId", {
14227 get: function () {
14228 return this._languageId;
14229 },
14230 enumerable: true,
14231 configurable: true
14232 });
14233 Object.defineProperty(FullTextDocument.prototype, "version", {
14234 get: function () {
14235 return this._version;
14236 },
14237 enumerable: true,
14238 configurable: true
14239 });
14240 FullTextDocument.prototype.getText = function (range) {
14241 if (range) {
14242 var start = this.offsetAt(range.start);
14243 var end = this.offsetAt(range.end);
14244 return this._content.substring(start, end);
14245 }
14246 return this._content;
14247 };
14248 FullTextDocument.prototype.update = function (changes, version) {
14249 for (var _i = 0, changes_1 = changes; _i < changes_1.length; _i++) {
14250 var change = changes_1[_i];
14251 if (FullTextDocument.isIncremental(change)) {
14252 // makes sure start is before end
14253 var range = getWellformedRange(change.range);
14254 // update content
14255 var startOffset = this.offsetAt(range.start);
14256 var endOffset = this.offsetAt(range.end);
14257 this._content = this._content.substring(0, startOffset) + change.text + this._content.substring(endOffset, this._content.length);
14258 // update the offsets
14259 var startLine = Math.max(range.start.line, 0);
14260 var endLine = Math.max(range.end.line, 0);
14261 var lineOffsets = this._lineOffsets;
14262 var addedLineOffsets = computeLineOffsets(change.text, false, startOffset);
14263 if (endLine - startLine === addedLineOffsets.length) {
14264 for (var i = 0, len = addedLineOffsets.length; i < len; i++) {
14265 lineOffsets[i + startLine + 1] = addedLineOffsets[i];
14266 }
14267 }
14268 else {
14269 if (addedLineOffsets.length < 10000) {
14270 lineOffsets.splice.apply(lineOffsets, [startLine + 1, endLine - startLine].concat(addedLineOffsets));
14271 }
14272 else { // avoid too many arguments for splice
14273 this._lineOffsets = lineOffsets = lineOffsets.slice(0, startLine + 1).concat(addedLineOffsets, lineOffsets.slice(endLine + 1));
14274 }
14275 }
14276 var diff = change.text.length - (endOffset - startOffset);
14277 if (diff !== 0) {
14278 for (var i = startLine + 1 + addedLineOffsets.length, len = lineOffsets.length; i < len; i++) {
14279 lineOffsets[i] = lineOffsets[i] + diff;
14280 }
14281 }
14282 }
14283 else if (FullTextDocument.isFull(change)) {
14284 this._content = change.text;
14285 this._lineOffsets = undefined;
14286 }
14287 else {
14288 throw new Error('Unknown change event received');
14289 }
14290 }
14291 this._version = version;
14292 };
14293 FullTextDocument.prototype.getLineOffsets = function () {
14294 if (this._lineOffsets === undefined) {
14295 this._lineOffsets = computeLineOffsets(this._content, true);
14296 }
14297 return this._lineOffsets;
14298 };
14299 FullTextDocument.prototype.positionAt = function (offset) {
14300 offset = Math.max(Math.min(offset, this._content.length), 0);
14301 var lineOffsets = this.getLineOffsets();
14302 var low = 0, high = lineOffsets.length;
14303 if (high === 0) {
14304 return { line: 0, character: offset };
14305 }
14306 while (low < high) {
14307 var mid = Math.floor((low + high) / 2);
14308 if (lineOffsets[mid] > offset) {
14309 high = mid;
14310 }
14311 else {
14312 low = mid + 1;
14313 }
14314 }
14315 // low is the least x for which the line offset is larger than the current offset
14316 // or array.length if no line offset is larger than the current offset
14317 var line = low - 1;
14318 return { line: line, character: offset - lineOffsets[line] };
14319 };
14320 FullTextDocument.prototype.offsetAt = function (position) {
14321 var lineOffsets = this.getLineOffsets();
14322 if (position.line >= lineOffsets.length) {
14323 return this._content.length;
14324 }
14325 else if (position.line < 0) {
14326 return 0;
14327 }
14328 var lineOffset = lineOffsets[position.line];
14329 var nextLineOffset = (position.line + 1 < lineOffsets.length) ? lineOffsets[position.line + 1] : this._content.length;
14330 return Math.max(Math.min(lineOffset + position.character, nextLineOffset), lineOffset);
14331 };
14332 Object.defineProperty(FullTextDocument.prototype, "lineCount", {
14333 get: function () {
14334 return this.getLineOffsets().length;
14335 },
14336 enumerable: true,
14337 configurable: true
14338 });
14339 FullTextDocument.isIncremental = function (event) {
14340 var candidate = event;
14341 return candidate !== undefined && candidate !== null &&
14342 typeof candidate.text === 'string' && candidate.range !== undefined &&
14343 (candidate.rangeLength === undefined || typeof candidate.rangeLength === 'number');
14344 };
14345 FullTextDocument.isFull = function (event) {
14346 var candidate = event;
14347 return candidate !== undefined && candidate !== null &&
14348 typeof candidate.text === 'string' && candidate.range === undefined && candidate.rangeLength === undefined;
14349 };
14350 return FullTextDocument;
14351}());
14352var TextDocument;
14353(function (TextDocument) {
14354 /**
14355 * Creates a new text document.
14356 *
14357 * @param uri The document's uri.
14358 * @param languageId The document's language Id.
14359 * @param version The document's initial version number.
14360 * @param content The document's content.
14361 */
14362 function create(uri, languageId, version, content) {
14363 return new FullTextDocument(uri, languageId, version, content);
14364 }
14365 TextDocument.create = create;
14366 /**
14367 * Updates a TextDocument by modifing its content.
14368 *
14369 * @param document the document to update. Only documents created by TextDocument.create are valid inputs.
14370 * @param changes the changes to apply to the document.
14371 * @returns The updated TextDocument. Note: That's the same document instance passed in as first parameter.
14372 *
14373 */
14374 function update(document, changes, version) {
14375 if (document instanceof FullTextDocument) {
14376 document.update(changes, version);
14377 return document;
14378 }
14379 else {
14380 throw new Error('TextDocument.update: document must be created by TextDocument.create');
14381 }
14382 }
14383 TextDocument.update = update;
14384 function applyEdits(document, edits) {
14385 var text = document.getText();
14386 var sortedEdits = mergeSort(edits.map(getWellformedEdit), function (a, b) {
14387 var diff = a.range.start.line - b.range.start.line;
14388 if (diff === 0) {
14389 return a.range.start.character - b.range.start.character;
14390 }
14391 return diff;
14392 });
14393 var lastModifiedOffset = 0;
14394 var spans = [];
14395 for (var _i = 0, sortedEdits_1 = sortedEdits; _i < sortedEdits_1.length; _i++) {
14396 var e = sortedEdits_1[_i];
14397 var startOffset = document.offsetAt(e.range.start);
14398 if (startOffset < lastModifiedOffset) {
14399 throw new Error('Overlapping edit');
14400 }
14401 else if (startOffset > lastModifiedOffset) {
14402 spans.push(text.substring(lastModifiedOffset, startOffset));
14403 }
14404 if (e.newText.length) {
14405 spans.push(e.newText);
14406 }
14407 lastModifiedOffset = document.offsetAt(e.range.end);
14408 }
14409 spans.push(text.substr(lastModifiedOffset));
14410 return spans.join('');
14411 }
14412 TextDocument.applyEdits = applyEdits;
14413})(TextDocument || (TextDocument = {}));
14414function mergeSort(data, compare) {
14415 if (data.length <= 1) {
14416 // sorted
14417 return data;
14418 }
14419 var p = (data.length / 2) | 0;
14420 var left = data.slice(0, p);
14421 var right = data.slice(p);
14422 mergeSort(left, compare);
14423 mergeSort(right, compare);
14424 var leftIdx = 0;
14425 var rightIdx = 0;
14426 var i = 0;
14427 while (leftIdx < left.length && rightIdx < right.length) {
14428 var ret = compare(left[leftIdx], right[rightIdx]);
14429 if (ret <= 0) {
14430 // smaller_equal -> take left to preserve order
14431 data[i++] = left[leftIdx++];
14432 }
14433 else {
14434 // greater -> take right
14435 data[i++] = right[rightIdx++];
14436 }
14437 }
14438 while (leftIdx < left.length) {
14439 data[i++] = left[leftIdx++];
14440 }
14441 while (rightIdx < right.length) {
14442 data[i++] = right[rightIdx++];
14443 }
14444 return data;
14445}
14446function computeLineOffsets(text, isAtLineStart, textOffset) {
14447 if (textOffset === void 0) { textOffset = 0; }
14448 var result = isAtLineStart ? [textOffset] : [];
14449 for (var i = 0; i < text.length; i++) {
14450 var ch = text.charCodeAt(i);
14451 if (ch === 13 /* CarriageReturn */ || ch === 10 /* LineFeed */) {
14452 if (ch === 13 /* CarriageReturn */ && i + 1 < text.length && text.charCodeAt(i + 1) === 10 /* LineFeed */) {
14453 i++;
14454 }
14455 result.push(textOffset + i + 1);
14456 }
14457 }
14458 return result;
14459}
14460function getWellformedRange(range) {
14461 var start = range.start;
14462 var end = range.end;
14463 if (start.line > end.line || (start.line === end.line && start.character > end.character)) {
14464 return { start: end, end: start };
14465 }
14466 return range;
14467}
14468function getWellformedEdit(textEdit) {
14469 var range = getWellformedRange(textEdit.range);
14470 if (range !== textEdit.range) {
14471 return { newText: textEdit.newText, range: range };
14472 }
14473 return textEdit;
14474}
14475
14476
14477/***/ }),
14478/* 58 */
14479/***/ (function(module, exports, __webpack_require__) {
14480
14481"use strict";
14482
14483Object.defineProperty(exports, "__esModule", { value: true });
14484var patterns_1 = __webpack_require__(54);
14485var builtin_1 = __webpack_require__(59);
14486var provider_1 = __webpack_require__(140);
14487function provider(line) {
14488 if (patterns_1.autocmdPattern.test(line)) {
14489 return builtin_1.builtinDocs.getVimAutocmds().filter(function (item) {
14490 return line.indexOf(item.label) === -1;
14491 });
14492 }
14493 return [];
14494}
14495provider_1.useProvider(provider);
14496
14497
14498/***/ }),
14499/* 59 */
14500/***/ (function(module, exports, __webpack_require__) {
14501
14502"use strict";
14503
14504var __assign = (this && this.__assign) || function () {
14505 __assign = Object.assign || function(t) {
14506 for (var s, i = 1, n = arguments.length; i < n; i++) {
14507 s = arguments[i];
14508 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
14509 t[p] = s[p];
14510 }
14511 return t;
14512 };
14513 return __assign.apply(this, arguments);
14514};
14515var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14516 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
14517 return new (P || (P = Promise))(function (resolve, reject) {
14518 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
14519 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
14520 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
14521 step((generator = generator.apply(thisArg, _arguments || [])).next());
14522 });
14523};
14524var __generator = (this && this.__generator) || function (thisArg, body) {
14525 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14526 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14527 function verb(n) { return function (v) { return step([n, v]); }; }
14528 function step(op) {
14529 if (f) throw new TypeError("Generator is already executing.");
14530 while (_) try {
14531 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;
14532 if (y = 0, t) op = [op[0] & 2, t.value];
14533 switch (op[0]) {
14534 case 0: case 1: t = op; break;
14535 case 4: _.label++; return { value: op[1], done: false };
14536 case 5: _.label++; y = op[1]; op = [0]; continue;
14537 case 7: op = _.ops.pop(); _.trys.pop(); continue;
14538 default:
14539 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
14540 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
14541 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
14542 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
14543 if (t[2]) _.ops.pop();
14544 _.trys.pop(); continue;
14545 }
14546 op = body.call(thisArg, _);
14547 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
14548 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
14549 }
14550};
14551var __spreadArrays = (this && this.__spreadArrays) || function () {
14552 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
14553 for (var r = Array(s), k = 0, i = 0; i < il; i++)
14554 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
14555 r[k] = a[j];
14556 return r;
14557};
14558var __importDefault = (this && this.__importDefault) || function (mod) {
14559 return (mod && mod.__esModule) ? mod : { "default": mod };
14560};
14561Object.defineProperty(exports, "__esModule", { value: true });
14562/*
14563 * vim builtin completion items
14564 *
14565 * 1. functions
14566 * 2. options
14567 * 3. variables
14568 * 4. commands
14569 * 5. has features
14570 * 6. expand Keyword
14571 * 7. map args
14572 */
14573var fast_glob_1 = __importDefault(__webpack_require__(60));
14574var path_1 = __importDefault(__webpack_require__(13));
14575var vscode_languageserver_1 = __webpack_require__(2);
14576var logger_1 = __importDefault(__webpack_require__(137));
14577var patterns_1 = __webpack_require__(54);
14578var util_1 = __webpack_require__(46);
14579var builtin_docs_json_1 = __importDefault(__webpack_require__(139));
14580var config_1 = __importDefault(__webpack_require__(55));
14581var log = logger_1.default("builtin");
14582var Builtin = /** @class */ (function () {
14583 function Builtin() {
14584 // completion items
14585 this.vimPredefinedVariablesItems = [];
14586 this.vimOptionItems = [];
14587 this.vimBuiltinFunctionItems = [];
14588 this.vimBuiltinFunctionMap = {};
14589 this.vimCommandItems = [];
14590 this.vimMapArgsItems = [];
14591 this.vimFeatureItems = [];
14592 this.vimAutocmdItems = [];
14593 this.expandKeywordItems = [];
14594 this.colorschemeItems = [];
14595 this.highlightArgKeys = [];
14596 this.highlightArgValues = {};
14597 // signature help
14598 this.vimBuiltFunctionSignatureHelp = {};
14599 // documents
14600 this.vimBuiltFunctionDocuments = {};
14601 this.vimOptionDocuments = {};
14602 this.vimPredefinedVariableDocuments = {};
14603 this.vimCommandDocuments = {};
14604 this.vimFeatureDocuments = {};
14605 this.expandKeywordDocuments = {};
14606 }
14607 Builtin.prototype.init = function () {
14608 this.start();
14609 };
14610 Builtin.prototype.getPredefinedVimVariables = function () {
14611 return this.vimPredefinedVariablesItems;
14612 };
14613 Builtin.prototype.getVimOptions = function () {
14614 return this.vimOptionItems;
14615 };
14616 Builtin.prototype.getBuiltinVimFunctions = function () {
14617 return this.vimBuiltinFunctionItems;
14618 };
14619 Builtin.prototype.isBuiltinFunction = function (label) {
14620 return this.vimBuiltinFunctionMap[label];
14621 };
14622 Builtin.prototype.getExpandKeywords = function () {
14623 return this.expandKeywordItems;
14624 };
14625 Builtin.prototype.getVimCommands = function () {
14626 return this.vimCommandItems;
14627 };
14628 Builtin.prototype.getVimMapArgs = function () {
14629 return this.vimMapArgsItems;
14630 };
14631 Builtin.prototype.getVimFeatures = function () {
14632 return this.vimFeatureItems;
14633 };
14634 Builtin.prototype.getVimAutocmds = function () {
14635 return this.vimAutocmdItems;
14636 };
14637 Builtin.prototype.getColorschemes = function () {
14638 return this.colorschemeItems;
14639 };
14640 Builtin.prototype.getHighlightArgKeys = function () {
14641 return this.highlightArgKeys;
14642 };
14643 Builtin.prototype.getHighlightArgValues = function () {
14644 return this.highlightArgValues;
14645 };
14646 Builtin.prototype.getSignatureHelpByName = function (name, idx) {
14647 var params = this.vimBuiltFunctionSignatureHelp[name];
14648 if (params) {
14649 return {
14650 signatures: [{
14651 label: name + "(" + params[0] + ")" + (params[1] ? ": " + params[1] : ""),
14652 documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14653 parameters: params[0].split("[")[0].split(",").map(function (param) {
14654 return {
14655 label: param.trim(),
14656 };
14657 }),
14658 }],
14659 activeSignature: 0,
14660 activeParameter: idx,
14661 };
14662 }
14663 return;
14664 };
14665 Builtin.prototype.getDocumentByCompletionItem = function (params) {
14666 var kind = params.kind;
14667 switch (kind) {
14668 case vscode_languageserver_1.CompletionItemKind.Variable:
14669 if (!this.vimPredefinedVariableDocuments[params.label]) {
14670 return params;
14671 }
14672 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimPredefinedVariableDocuments[params.label]) });
14673 case vscode_languageserver_1.CompletionItemKind.Property:
14674 if (!this.vimOptionDocuments[params.label]) {
14675 return params;
14676 }
14677 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimOptionDocuments[params.label]) });
14678 case vscode_languageserver_1.CompletionItemKind.Function:
14679 if (!this.vimBuiltFunctionDocuments[params.label]) {
14680 return params;
14681 }
14682 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimBuiltFunctionDocuments[params.label]) });
14683 case vscode_languageserver_1.CompletionItemKind.EnumMember:
14684 if (!this.vimFeatureDocuments[params.label]) {
14685 return params;
14686 }
14687 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimFeatureDocuments[params.label]) });
14688 case vscode_languageserver_1.CompletionItemKind.Operator:
14689 if (!this.vimCommandDocuments[params.label]) {
14690 return params;
14691 }
14692 return __assign(__assign({}, params), { documentation: this.formatVimDocument(this.vimCommandDocuments[params.label]) });
14693 default:
14694 return params;
14695 }
14696 };
14697 Builtin.prototype.getHoverDocument = function (name, pre, next) {
14698 // builtin variables
14699 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, pre) && this.vimPredefinedVariableDocuments[name]) {
14700 return {
14701 contents: this.formatVimDocument(this.vimPredefinedVariableDocuments[name]),
14702 };
14703 // options
14704 }
14705 else if (util_1.isSomeMatchPattern(patterns_1.optionPattern, pre)
14706 && (this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)])) {
14707 return {
14708 contents: this.formatVimDocument(this.vimOptionDocuments[name] || this.vimOptionDocuments[name.slice(1)]),
14709 };
14710 // builtin functions
14711 }
14712 else if (patterns_1.builtinFunctionPattern.test(next) && this.vimBuiltFunctionDocuments[name]) {
14713 return {
14714 contents: this.formatVimDocument(this.vimBuiltFunctionDocuments[name]),
14715 };
14716 // has features
14717 }
14718 else if (util_1.isSomeMatchPattern(patterns_1.featurePattern, pre) && this.vimFeatureDocuments[name]) {
14719 return {
14720 contents: this.formatVimDocument(this.vimFeatureDocuments[name]),
14721 };
14722 // expand Keywords
14723 }
14724 else if (util_1.isSomeMatchPattern(patterns_1.expandPattern, pre) && this.expandKeywordDocuments["<" + name + ">"]) {
14725 return {
14726 contents: this.formatVimDocument(this.expandKeywordDocuments["<" + name + ">"]),
14727 };
14728 // command
14729 }
14730 else if (util_1.isSomeMatchPattern(patterns_1.commandPattern, pre) && this.vimCommandDocuments[name]) {
14731 return {
14732 contents: this.formatVimDocument(this.vimCommandDocuments[name]),
14733 };
14734 }
14735 };
14736 Builtin.prototype.start = function () {
14737 return __awaiter(this, void 0, void 0, function () {
14738 var runtimepath, data;
14739 var _this = this;
14740 return __generator(this, function (_a) {
14741 runtimepath = config_1.default.runtimepath;
14742 // get colorschemes
14743 if (runtimepath) {
14744 this.resolveColorschemes(runtimepath);
14745 }
14746 // get map args
14747 this.resolveMapArgs();
14748 // get highlight arg keys
14749 this.resolveHighlightArgKeys();
14750 // get highlight arg values
14751 this.resolveHighlightArgValues();
14752 try {
14753 data = builtin_docs_json_1.default;
14754 this.vimBuiltinFunctionItems = data.completionItems.functions;
14755 this.vimBuiltinFunctionItems.forEach(function (item) {
14756 if (!_this.vimBuiltinFunctionMap[item.label]) {
14757 _this.vimBuiltinFunctionMap[item.label] = true;
14758 }
14759 });
14760 this.vimBuiltFunctionDocuments = data.documents.functions;
14761 this.vimCommandItems = data.completionItems.commands;
14762 this.vimCommandDocuments = data.documents.commands;
14763 this.vimPredefinedVariablesItems = data.completionItems.variables;
14764 this.vimPredefinedVariableDocuments = data.documents.variables;
14765 this.vimOptionItems = data.completionItems.options;
14766 this.vimOptionDocuments = data.documents.options;
14767 this.vimFeatureItems = data.completionItems.features;
14768 this.vimAutocmdItems = data.completionItems.autocmds;
14769 this.vimFeatureDocuments = data.documents.features;
14770 this.expandKeywordItems = data.completionItems.expandKeywords;
14771 this.expandKeywordDocuments = data.documents.expandKeywords;
14772 this.vimBuiltFunctionSignatureHelp = data.signatureHelp;
14773 }
14774 catch (error) {
14775 log.error("[vimls]: parse docs/builtin-doc.json fail => " + (error.message || error));
14776 }
14777 return [2 /*return*/];
14778 });
14779 });
14780 };
14781 // format vim document to markdown
14782 Builtin.prototype.formatVimDocument = function (document) {
14783 var indent = 0;
14784 return {
14785 kind: vscode_languageserver_1.MarkupKind.Markdown,
14786 value: __spreadArrays([
14787 "```help"
14788 ], document.map(function (line) {
14789 if (indent === 0) {
14790 var m = line.match(/^([ \t]+)/);
14791 if (m) {
14792 indent = m[1].length;
14793 }
14794 }
14795 return line.replace(new RegExp("^[ \\t]{" + indent + "}", "g"), "").replace(/\t/g, " ");
14796 }), [
14797 "```",
14798 ]).join("\n"),
14799 };
14800 };
14801 Builtin.prototype.resolveMapArgs = function () {
14802 this.vimMapArgsItems = ["<buffer>", "<nowait>", "<silent>", "<script>", "<expr>", "<unique>"]
14803 .map(function (item) {
14804 return {
14805 label: item,
14806 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14807 documentation: "",
14808 insertText: item,
14809 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14810 };
14811 });
14812 };
14813 Builtin.prototype.resolveColorschemes = function (runtimepath) {
14814 return __awaiter(this, void 0, void 0, function () {
14815 var list, glob, colorschemes, error_1;
14816 return __generator(this, function (_a) {
14817 switch (_a.label) {
14818 case 0:
14819 list = runtimepath;
14820 if (config_1.default.vimruntime) {
14821 list.push(config_1.default.vimruntime);
14822 }
14823 glob = runtimepath.map(function (p) { return path_1.default.join(p.trim(), "colors/*.vim"); });
14824 colorschemes = [];
14825 _a.label = 1;
14826 case 1:
14827 _a.trys.push([1, 3, , 4]);
14828 return [4 /*yield*/, fast_glob_1.default(glob, { onlyFiles: false, deep: 0 })];
14829 case 2:
14830 colorschemes = _a.sent();
14831 return [3 /*break*/, 4];
14832 case 3:
14833 error_1 = _a.sent();
14834 log.error([
14835 "Index Colorschemes Error: " + JSON.stringify(glob),
14836 "Error => " + (error_1.stack || error_1.message || error_1),
14837 ].join("\n"));
14838 return [3 /*break*/, 4];
14839 case 4:
14840 this.colorschemeItems = colorschemes.map(function (p) {
14841 var label = path_1.default.basename(p, ".vim");
14842 var item = {
14843 label: label,
14844 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14845 insertText: label,
14846 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14847 };
14848 return item;
14849 });
14850 return [2 /*return*/];
14851 }
14852 });
14853 });
14854 };
14855 Builtin.prototype.resolveHighlightArgKeys = function () {
14856 this.highlightArgKeys = [
14857 "cterm",
14858 "start",
14859 "stop",
14860 "ctermfg",
14861 "ctermbg",
14862 "gui",
14863 "font",
14864 "guifg",
14865 "guibg",
14866 "guisp",
14867 "blend",
14868 ]
14869 .map(function (item) {
14870 return {
14871 label: item,
14872 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14873 documentation: "",
14874 insertText: item + "=${0}",
14875 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
14876 };
14877 });
14878 };
14879 Builtin.prototype.resolveHighlightArgValues = function () {
14880 var values = {
14881 "cterm": ["bold", "underline", "undercurl", "reverse", "inverse", "italic", "standout", "NONE"],
14882 "ctermfg ctermbg": [
14883 "Black",
14884 "DarkBlue",
14885 "DarkGreen",
14886 "DarkCyan",
14887 "DarkRed",
14888 "DarkMagenta",
14889 "Brown", "DarkYellow",
14890 "LightGray", "LightGrey", "Gray", "Grey",
14891 "DarkGray", "DarkGrey",
14892 "Blue", "LightBlue",
14893 "Green", "LightGreen",
14894 "Cyan", "LightCyan",
14895 "Red", "LightRed",
14896 "Magenta", "LightMagenta",
14897 "Yellow", "LightYellow",
14898 "White",
14899 ],
14900 "guifg guibg guisp": [
14901 "NONE",
14902 "bg",
14903 "background",
14904 "fg",
14905 "foreground",
14906 "Red", "LightRed", "DarkRed",
14907 "Green", "LightGreen", "DarkGreen", "SeaGreen",
14908 "Blue", "LightBlue", "DarkBlue", "SlateBlue",
14909 "Cyan", "LightCyan", "DarkCyan",
14910 "Magenta", "LightMagenta", "DarkMagenta",
14911 "Yellow", "LightYellow", "Brown", "DarkYellow",
14912 "Gray", "LightGray", "DarkGray",
14913 "Black", "White",
14914 "Orange", "Purple", "Violet",
14915 ],
14916 };
14917 var argValues = {};
14918 Object.keys(values).forEach(function (key) {
14919 var items = values[key].map(function (val) { return ({
14920 label: val,
14921 kind: vscode_languageserver_1.CompletionItemKind.EnumMember,
14922 documentation: "",
14923 insertText: val,
14924 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
14925 }); });
14926 key.split(" ").forEach(function (name) {
14927 argValues[name] = items;
14928 });
14929 });
14930 this.highlightArgValues = argValues;
14931 };
14932 return Builtin;
14933}());
14934exports.builtinDocs = new Builtin();
14935
14936
14937/***/ }),
14938/* 60 */
14939/***/ (function(module, exports, __webpack_require__) {
14940
14941"use strict";
14942
14943const taskManager = __webpack_require__(61);
14944const async_1 = __webpack_require__(98);
14945const stream_1 = __webpack_require__(133);
14946const sync_1 = __webpack_require__(134);
14947const settings_1 = __webpack_require__(136);
14948const utils = __webpack_require__(62);
14949async function FastGlob(source, options) {
14950 assertPatternsInput(source);
14951 const works = getWorks(source, async_1.default, options);
14952 const result = await Promise.all(works);
14953 return utils.array.flatten(result);
14954}
14955// https://github.com/typescript-eslint/typescript-eslint/issues/60
14956// eslint-disable-next-line no-redeclare
14957(function (FastGlob) {
14958 function sync(source, options) {
14959 assertPatternsInput(source);
14960 const works = getWorks(source, sync_1.default, options);
14961 return utils.array.flatten(works);
14962 }
14963 FastGlob.sync = sync;
14964 function stream(source, options) {
14965 assertPatternsInput(source);
14966 const works = getWorks(source, stream_1.default, options);
14967 /**
14968 * The stream returned by the provider cannot work with an asynchronous iterator.
14969 * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.
14970 * This affects performance (+25%). I don't see best solution right now.
14971 */
14972 return utils.stream.merge(works);
14973 }
14974 FastGlob.stream = stream;
14975 function generateTasks(source, options) {
14976 assertPatternsInput(source);
14977 const patterns = [].concat(source);
14978 const settings = new settings_1.default(options);
14979 return taskManager.generate(patterns, settings);
14980 }
14981 FastGlob.generateTasks = generateTasks;
14982 function isDynamicPattern(source, options) {
14983 assertPatternsInput(source);
14984 const settings = new settings_1.default(options);
14985 return utils.pattern.isDynamicPattern(source, settings);
14986 }
14987 FastGlob.isDynamicPattern = isDynamicPattern;
14988 function escapePath(source) {
14989 assertPatternsInput(source);
14990 return utils.path.escape(source);
14991 }
14992 FastGlob.escapePath = escapePath;
14993})(FastGlob || (FastGlob = {}));
14994function getWorks(source, _Provider, options) {
14995 const patterns = [].concat(source);
14996 const settings = new settings_1.default(options);
14997 const tasks = taskManager.generate(patterns, settings);
14998 const provider = new _Provider(settings);
14999 return tasks.map(provider.read, provider);
15000}
15001function assertPatternsInput(input) {
15002 const source = [].concat(input);
15003 const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));
15004 if (!isValidSource) {
15005 throw new TypeError('Patterns must be a string (non empty) or an array of strings');
15006 }
15007}
15008module.exports = FastGlob;
15009
15010
15011/***/ }),
15012/* 61 */
15013/***/ (function(module, exports, __webpack_require__) {
15014
15015"use strict";
15016
15017Object.defineProperty(exports, "__esModule", { value: true });
15018const utils = __webpack_require__(62);
15019function generate(patterns, settings) {
15020 const positivePatterns = getPositivePatterns(patterns);
15021 const negativePatterns = getNegativePatternsAsPositive(patterns, settings.ignore);
15022 const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));
15023 const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));
15024 const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);
15025 const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);
15026 return staticTasks.concat(dynamicTasks);
15027}
15028exports.generate = generate;
15029function convertPatternsToTasks(positive, negative, dynamic) {
15030 const positivePatternsGroup = groupPatternsByBaseDirectory(positive);
15031 // When we have a global group – there is no reason to divide the patterns into independent tasks.
15032 // In this case, the global task covers the rest.
15033 if ('.' in positivePatternsGroup) {
15034 const task = convertPatternGroupToTask('.', positive, negative, dynamic);
15035 return [task];
15036 }
15037 return convertPatternGroupsToTasks(positivePatternsGroup, negative, dynamic);
15038}
15039exports.convertPatternsToTasks = convertPatternsToTasks;
15040function getPositivePatterns(patterns) {
15041 return utils.pattern.getPositivePatterns(patterns);
15042}
15043exports.getPositivePatterns = getPositivePatterns;
15044function getNegativePatternsAsPositive(patterns, ignore) {
15045 const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);
15046 const positive = negative.map(utils.pattern.convertToPositivePattern);
15047 return positive;
15048}
15049exports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;
15050function groupPatternsByBaseDirectory(patterns) {
15051 const group = {};
15052 return patterns.reduce((collection, pattern) => {
15053 const base = utils.pattern.getBaseDirectory(pattern);
15054 if (base in collection) {
15055 collection[base].push(pattern);
15056 }
15057 else {
15058 collection[base] = [pattern];
15059 }
15060 return collection;
15061 }, group);
15062}
15063exports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;
15064function convertPatternGroupsToTasks(positive, negative, dynamic) {
15065 return Object.keys(positive).map((base) => {
15066 return convertPatternGroupToTask(base, positive[base], negative, dynamic);
15067 });
15068}
15069exports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;
15070function convertPatternGroupToTask(base, positive, negative, dynamic) {
15071 return {
15072 dynamic,
15073 positive,
15074 negative,
15075 base,
15076 patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))
15077 };
15078}
15079exports.convertPatternGroupToTask = convertPatternGroupToTask;
15080
15081
15082/***/ }),
15083/* 62 */
15084/***/ (function(module, exports, __webpack_require__) {
15085
15086"use strict";
15087
15088Object.defineProperty(exports, "__esModule", { value: true });
15089const array = __webpack_require__(63);
15090exports.array = array;
15091const errno = __webpack_require__(64);
15092exports.errno = errno;
15093const fs = __webpack_require__(65);
15094exports.fs = fs;
15095const path = __webpack_require__(66);
15096exports.path = path;
15097const pattern = __webpack_require__(67);
15098exports.pattern = pattern;
15099const stream = __webpack_require__(94);
15100exports.stream = stream;
15101const string = __webpack_require__(97);
15102exports.string = string;
15103
15104
15105/***/ }),
15106/* 63 */
15107/***/ (function(module, exports, __webpack_require__) {
15108
15109"use strict";
15110
15111Object.defineProperty(exports, "__esModule", { value: true });
15112function flatten(items) {
15113 return items.reduce((collection, item) => [].concat(collection, item), []);
15114}
15115exports.flatten = flatten;
15116function splitWhen(items, predicate) {
15117 const result = [[]];
15118 let groupIndex = 0;
15119 for (const item of items) {
15120 if (predicate(item)) {
15121 groupIndex++;
15122 result[groupIndex] = [];
15123 }
15124 else {
15125 result[groupIndex].push(item);
15126 }
15127 }
15128 return result;
15129}
15130exports.splitWhen = splitWhen;
15131
15132
15133/***/ }),
15134/* 64 */
15135/***/ (function(module, exports, __webpack_require__) {
15136
15137"use strict";
15138
15139Object.defineProperty(exports, "__esModule", { value: true });
15140function isEnoentCodeError(error) {
15141 return error.code === 'ENOENT';
15142}
15143exports.isEnoentCodeError = isEnoentCodeError;
15144
15145
15146/***/ }),
15147/* 65 */
15148/***/ (function(module, exports, __webpack_require__) {
15149
15150"use strict";
15151
15152Object.defineProperty(exports, "__esModule", { value: true });
15153class DirentFromStats {
15154 constructor(name, stats) {
15155 this.name = name;
15156 this.isBlockDevice = stats.isBlockDevice.bind(stats);
15157 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
15158 this.isDirectory = stats.isDirectory.bind(stats);
15159 this.isFIFO = stats.isFIFO.bind(stats);
15160 this.isFile = stats.isFile.bind(stats);
15161 this.isSocket = stats.isSocket.bind(stats);
15162 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
15163 }
15164}
15165function createDirentFromStats(name, stats) {
15166 return new DirentFromStats(name, stats);
15167}
15168exports.createDirentFromStats = createDirentFromStats;
15169
15170
15171/***/ }),
15172/* 66 */
15173/***/ (function(module, exports, __webpack_require__) {
15174
15175"use strict";
15176
15177Object.defineProperty(exports, "__esModule", { value: true });
15178const path = __webpack_require__(13);
15179const LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\
15180const UNESCAPED_GLOB_SYMBOLS_RE = /(\\?)([()*?[\]{|}]|^!|[!+@](?=\())/g;
15181/**
15182 * Designed to work only with simple paths: `dir\\file`.
15183 */
15184function unixify(filepath) {
15185 return filepath.replace(/\\/g, '/');
15186}
15187exports.unixify = unixify;
15188function makeAbsolute(cwd, filepath) {
15189 return path.resolve(cwd, filepath);
15190}
15191exports.makeAbsolute = makeAbsolute;
15192function escape(pattern) {
15193 return pattern.replace(UNESCAPED_GLOB_SYMBOLS_RE, '\\$2');
15194}
15195exports.escape = escape;
15196function removeLeadingDotSegment(entry) {
15197 // We do not use `startsWith` because this is 10x slower than current implementation for some cases.
15198 // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with
15199 if (entry.charAt(0) === '.') {
15200 const secondCharactery = entry.charAt(1);
15201 if (secondCharactery === '/' || secondCharactery === '\\') {
15202 return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);
15203 }
15204 }
15205 return entry;
15206}
15207exports.removeLeadingDotSegment = removeLeadingDotSegment;
15208
15209
15210/***/ }),
15211/* 67 */
15212/***/ (function(module, exports, __webpack_require__) {
15213
15214"use strict";
15215
15216Object.defineProperty(exports, "__esModule", { value: true });
15217const path = __webpack_require__(13);
15218const globParent = __webpack_require__(68);
15219const micromatch = __webpack_require__(71);
15220const picomatch = __webpack_require__(88);
15221const GLOBSTAR = '**';
15222const ESCAPE_SYMBOL = '\\';
15223const COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;
15224const REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\[.*]/;
15225const REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\(.*\|.*\)/;
15226const GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\(.*\)/;
15227const BRACE_EXPANSIONS_SYMBOLS_RE = /{.*(?:,|\.\.).*}/;
15228function isStaticPattern(pattern, options = {}) {
15229 return !isDynamicPattern(pattern, options);
15230}
15231exports.isStaticPattern = isStaticPattern;
15232function isDynamicPattern(pattern, options = {}) {
15233 /**
15234 * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check
15235 * filepath directly (without read directory).
15236 */
15237 if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {
15238 return true;
15239 }
15240 if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {
15241 return true;
15242 }
15243 if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {
15244 return true;
15245 }
15246 if (options.braceExpansion !== false && BRACE_EXPANSIONS_SYMBOLS_RE.test(pattern)) {
15247 return true;
15248 }
15249 return false;
15250}
15251exports.isDynamicPattern = isDynamicPattern;
15252function convertToPositivePattern(pattern) {
15253 return isNegativePattern(pattern) ? pattern.slice(1) : pattern;
15254}
15255exports.convertToPositivePattern = convertToPositivePattern;
15256function convertToNegativePattern(pattern) {
15257 return '!' + pattern;
15258}
15259exports.convertToNegativePattern = convertToNegativePattern;
15260function isNegativePattern(pattern) {
15261 return pattern.startsWith('!') && pattern[1] !== '(';
15262}
15263exports.isNegativePattern = isNegativePattern;
15264function isPositivePattern(pattern) {
15265 return !isNegativePattern(pattern);
15266}
15267exports.isPositivePattern = isPositivePattern;
15268function getNegativePatterns(patterns) {
15269 return patterns.filter(isNegativePattern);
15270}
15271exports.getNegativePatterns = getNegativePatterns;
15272function getPositivePatterns(patterns) {
15273 return patterns.filter(isPositivePattern);
15274}
15275exports.getPositivePatterns = getPositivePatterns;
15276function getBaseDirectory(pattern) {
15277 return globParent(pattern, { flipBackslashes: false });
15278}
15279exports.getBaseDirectory = getBaseDirectory;
15280function hasGlobStar(pattern) {
15281 return pattern.includes(GLOBSTAR);
15282}
15283exports.hasGlobStar = hasGlobStar;
15284function endsWithSlashGlobStar(pattern) {
15285 return pattern.endsWith('/' + GLOBSTAR);
15286}
15287exports.endsWithSlashGlobStar = endsWithSlashGlobStar;
15288function isAffectDepthOfReadingPattern(pattern) {
15289 const basename = path.basename(pattern);
15290 return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);
15291}
15292exports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;
15293function expandPatternsWithBraceExpansion(patterns) {
15294 return patterns.reduce((collection, pattern) => {
15295 return collection.concat(expandBraceExpansion(pattern));
15296 }, []);
15297}
15298exports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;
15299function expandBraceExpansion(pattern) {
15300 return micromatch.braces(pattern, {
15301 expand: true,
15302 nodupes: true
15303 });
15304}
15305exports.expandBraceExpansion = expandBraceExpansion;
15306function getPatternParts(pattern, options) {
15307 const info = picomatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));
15308 // See micromatch/picomatch#58 for more details
15309 if (info.parts.length === 0) {
15310 return [pattern];
15311 }
15312 return info.parts;
15313}
15314exports.getPatternParts = getPatternParts;
15315function makeRe(pattern, options) {
15316 return micromatch.makeRe(pattern, options);
15317}
15318exports.makeRe = makeRe;
15319function convertPatternsToRe(patterns, options) {
15320 return patterns.map((pattern) => makeRe(pattern, options));
15321}
15322exports.convertPatternsToRe = convertPatternsToRe;
15323function matchAny(entry, patternsRe) {
15324 return patternsRe.some((patternRe) => patternRe.test(entry));
15325}
15326exports.matchAny = matchAny;
15327
15328
15329/***/ }),
15330/* 68 */
15331/***/ (function(module, exports, __webpack_require__) {
15332
15333"use strict";
15334
15335
15336var isGlob = __webpack_require__(69);
15337var pathPosixDirname = __webpack_require__(13).posix.dirname;
15338var isWin32 = __webpack_require__(14).platform() === 'win32';
15339
15340var slash = '/';
15341var backslash = /\\/g;
15342var enclosure = /[\{\[].*[\/]*.*[\}\]]$/;
15343var globby = /(^|[^\\])([\{\[]|\([^\)]+$)/;
15344var escaped = /\\([\!\*\?\|\[\]\(\)\{\}])/g;
15345
15346/**
15347 * @param {string} str
15348 * @param {Object} opts
15349 * @param {boolean} [opts.flipBackslashes=true]
15350 */
15351module.exports = function globParent(str, opts) {
15352 var options = Object.assign({ flipBackslashes: true }, opts);
15353
15354 // flip windows path separators
15355 if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {
15356 str = str.replace(backslash, slash);
15357 }
15358
15359 // special case for strings ending in enclosure containing path separator
15360 if (enclosure.test(str)) {
15361 str += slash;
15362 }
15363
15364 // preserves full path in case of trailing path separator
15365 str += 'a';
15366
15367 // remove path parts that are globby
15368 do {
15369 str = pathPosixDirname(str);
15370 } while (isGlob(str) || globby.test(str));
15371
15372 // remove escape chars and return result
15373 return str.replace(escaped, '$1');
15374};
15375
15376
15377/***/ }),
15378/* 69 */
15379/***/ (function(module, exports, __webpack_require__) {
15380
15381/*!
15382 * is-glob <https://github.com/jonschlinkert/is-glob>
15383 *
15384 * Copyright (c) 2014-2017, Jon Schlinkert.
15385 * Released under the MIT License.
15386 */
15387
15388var isExtglob = __webpack_require__(70);
15389var chars = { '{': '}', '(': ')', '[': ']'};
15390var strictRegex = /\\(.)|(^!|\*|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/;
15391var relaxedRegex = /\\(.)|(^!|[*?{}()[\]]|\(\?)/;
15392
15393module.exports = function isGlob(str, options) {
15394 if (typeof str !== 'string' || str === '') {
15395 return false;
15396 }
15397
15398 if (isExtglob(str)) {
15399 return true;
15400 }
15401
15402 var regex = strictRegex;
15403 var match;
15404
15405 // optionally relax regex
15406 if (options && options.strict === false) {
15407 regex = relaxedRegex;
15408 }
15409
15410 while ((match = regex.exec(str))) {
15411 if (match[2]) return true;
15412 var idx = match.index + match[0].length;
15413
15414 // if an open bracket/brace/paren is escaped,
15415 // set the index to the next closing character
15416 var open = match[1];
15417 var close = open ? chars[open] : null;
15418 if (open && close) {
15419 var n = str.indexOf(close, idx);
15420 if (n !== -1) {
15421 idx = n + 1;
15422 }
15423 }
15424
15425 str = str.slice(idx);
15426 }
15427 return false;
15428};
15429
15430
15431/***/ }),
15432/* 70 */
15433/***/ (function(module, exports) {
15434
15435/*!
15436 * is-extglob <https://github.com/jonschlinkert/is-extglob>
15437 *
15438 * Copyright (c) 2014-2016, Jon Schlinkert.
15439 * Licensed under the MIT License.
15440 */
15441
15442module.exports = function isExtglob(str) {
15443 if (typeof str !== 'string' || str === '') {
15444 return false;
15445 }
15446
15447 var match;
15448 while ((match = /(\\).|([@?!+*]\(.*\))/g.exec(str))) {
15449 if (match[2]) return true;
15450 str = str.slice(match.index + match[0].length);
15451 }
15452
15453 return false;
15454};
15455
15456
15457/***/ }),
15458/* 71 */
15459/***/ (function(module, exports, __webpack_require__) {
15460
15461"use strict";
15462
15463
15464const util = __webpack_require__(48);
15465const braces = __webpack_require__(72);
15466const picomatch = __webpack_require__(82);
15467const utils = __webpack_require__(85);
15468const isEmptyString = val => typeof val === 'string' && (val === '' || val === './');
15469
15470/**
15471 * Returns an array of strings that match one or more glob patterns.
15472 *
15473 * ```js
15474 * const mm = require('micromatch');
15475 * // mm(list, patterns[, options]);
15476 *
15477 * console.log(mm(['a.js', 'a.txt'], ['*.js']));
15478 * //=> [ 'a.js' ]
15479 * ```
15480 * @param {String|Array<string>} list List of strings to match.
15481 * @param {String|Array<string>} patterns One or more glob patterns to use for matching.
15482 * @param {Object} options See available [options](#options)
15483 * @return {Array} Returns an array of matches
15484 * @summary false
15485 * @api public
15486 */
15487
15488const micromatch = (list, patterns, options) => {
15489 patterns = [].concat(patterns);
15490 list = [].concat(list);
15491
15492 let omit = new Set();
15493 let keep = new Set();
15494 let items = new Set();
15495 let negatives = 0;
15496
15497 let onResult = state => {
15498 items.add(state.output);
15499 if (options && options.onResult) {
15500 options.onResult(state);
15501 }
15502 };
15503
15504 for (let i = 0; i < patterns.length; i++) {
15505 let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);
15506 let negated = isMatch.state.negated || isMatch.state.negatedExtglob;
15507 if (negated) negatives++;
15508
15509 for (let item of list) {
15510 let matched = isMatch(item, true);
15511
15512 let match = negated ? !matched.isMatch : matched.isMatch;
15513 if (!match) continue;
15514
15515 if (negated) {
15516 omit.add(matched.output);
15517 } else {
15518 omit.delete(matched.output);
15519 keep.add(matched.output);
15520 }
15521 }
15522 }
15523
15524 let result = negatives === patterns.length ? [...items] : [...keep];
15525 let matches = result.filter(item => !omit.has(item));
15526
15527 if (options && matches.length === 0) {
15528 if (options.failglob === true) {
15529 throw new Error(`No matches found for "${patterns.join(', ')}"`);
15530 }
15531
15532 if (options.nonull === true || options.nullglob === true) {
15533 return options.unescape ? patterns.map(p => p.replace(/\\/g, '')) : patterns;
15534 }
15535 }
15536
15537 return matches;
15538};
15539
15540/**
15541 * Backwards compatibility
15542 */
15543
15544micromatch.match = micromatch;
15545
15546/**
15547 * Returns a matcher function from the given glob `pattern` and `options`.
15548 * The returned function takes a string to match as its only argument and returns
15549 * true if the string is a match.
15550 *
15551 * ```js
15552 * const mm = require('micromatch');
15553 * // mm.matcher(pattern[, options]);
15554 *
15555 * const isMatch = mm.matcher('*.!(*a)');
15556 * console.log(isMatch('a.a')); //=> false
15557 * console.log(isMatch('a.b')); //=> true
15558 * ```
15559 * @param {String} `pattern` Glob pattern
15560 * @param {Object} `options`
15561 * @return {Function} Returns a matcher function.
15562 * @api public
15563 */
15564
15565micromatch.matcher = (pattern, options) => picomatch(pattern, options);
15566
15567/**
15568 * Returns true if **any** of the given glob `patterns` match the specified `string`.
15569 *
15570 * ```js
15571 * const mm = require('micromatch');
15572 * // mm.isMatch(string, patterns[, options]);
15573 *
15574 * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true
15575 * console.log(mm.isMatch('a.a', 'b.*')); //=> false
15576 * ```
15577 * @param {String} str The string to test.
15578 * @param {String|Array} patterns One or more glob patterns to use for matching.
15579 * @param {Object} [options] See available [options](#options).
15580 * @return {Boolean} Returns true if any patterns match `str`
15581 * @api public
15582 */
15583
15584micromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
15585
15586/**
15587 * Backwards compatibility
15588 */
15589
15590micromatch.any = micromatch.isMatch;
15591
15592/**
15593 * Returns a list of strings that _**do not match any**_ of the given `patterns`.
15594 *
15595 * ```js
15596 * const mm = require('micromatch');
15597 * // mm.not(list, patterns[, options]);
15598 *
15599 * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));
15600 * //=> ['b.b', 'c.c']
15601 * ```
15602 * @param {Array} `list` Array of strings to match.
15603 * @param {String|Array} `patterns` One or more glob pattern to use for matching.
15604 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15605 * @return {Array} Returns an array of strings that **do not match** the given patterns.
15606 * @api public
15607 */
15608
15609micromatch.not = (list, patterns, options = {}) => {
15610 patterns = [].concat(patterns).map(String);
15611 let result = new Set();
15612 let items = [];
15613
15614 let onResult = state => {
15615 if (options.onResult) options.onResult(state);
15616 items.push(state.output);
15617 };
15618
15619 let matches = micromatch(list, patterns, { ...options, onResult });
15620
15621 for (let item of items) {
15622 if (!matches.includes(item)) {
15623 result.add(item);
15624 }
15625 }
15626 return [...result];
15627};
15628
15629/**
15630 * Returns true if the given `string` contains the given pattern. Similar
15631 * to [.isMatch](#isMatch) but the pattern can match any part of the string.
15632 *
15633 * ```js
15634 * var mm = require('micromatch');
15635 * // mm.contains(string, pattern[, options]);
15636 *
15637 * console.log(mm.contains('aa/bb/cc', '*b'));
15638 * //=> true
15639 * console.log(mm.contains('aa/bb/cc', '*d'));
15640 * //=> false
15641 * ```
15642 * @param {String} `str` The string to match.
15643 * @param {String|Array} `patterns` Glob pattern to use for matching.
15644 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15645 * @return {Boolean} Returns true if the patter matches any part of `str`.
15646 * @api public
15647 */
15648
15649micromatch.contains = (str, pattern, options) => {
15650 if (typeof str !== 'string') {
15651 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15652 }
15653
15654 if (Array.isArray(pattern)) {
15655 return pattern.some(p => micromatch.contains(str, p, options));
15656 }
15657
15658 if (typeof pattern === 'string') {
15659 if (isEmptyString(str) || isEmptyString(pattern)) {
15660 return false;
15661 }
15662
15663 if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {
15664 return true;
15665 }
15666 }
15667
15668 return micromatch.isMatch(str, pattern, { ...options, contains: true });
15669};
15670
15671/**
15672 * Filter the keys of the given object with the given `glob` pattern
15673 * and `options`. Does not attempt to match nested keys. If you need this feature,
15674 * use [glob-object][] instead.
15675 *
15676 * ```js
15677 * const mm = require('micromatch');
15678 * // mm.matchKeys(object, patterns[, options]);
15679 *
15680 * const obj = { aa: 'a', ab: 'b', ac: 'c' };
15681 * console.log(mm.matchKeys(obj, '*b'));
15682 * //=> { ab: 'b' }
15683 * ```
15684 * @param {Object} `object` The object with keys to filter.
15685 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15686 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15687 * @return {Object} Returns an object with only keys that match the given patterns.
15688 * @api public
15689 */
15690
15691micromatch.matchKeys = (obj, patterns, options) => {
15692 if (!utils.isObject(obj)) {
15693 throw new TypeError('Expected the first argument to be an object');
15694 }
15695 let keys = micromatch(Object.keys(obj), patterns, options);
15696 let res = {};
15697 for (let key of keys) res[key] = obj[key];
15698 return res;
15699};
15700
15701/**
15702 * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.
15703 *
15704 * ```js
15705 * const mm = require('micromatch');
15706 * // mm.some(list, patterns[, options]);
15707 *
15708 * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15709 * // true
15710 * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));
15711 * // false
15712 * ```
15713 * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.
15714 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15715 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15716 * @return {Boolean} Returns true if any patterns match `str`
15717 * @api public
15718 */
15719
15720micromatch.some = (list, patterns, options) => {
15721 let items = [].concat(list);
15722
15723 for (let pattern of [].concat(patterns)) {
15724 let isMatch = picomatch(String(pattern), options);
15725 if (items.some(item => isMatch(item))) {
15726 return true;
15727 }
15728 }
15729 return false;
15730};
15731
15732/**
15733 * Returns true if every string in the given `list` matches
15734 * any of the given glob `patterns`.
15735 *
15736 * ```js
15737 * const mm = require('micromatch');
15738 * // mm.every(list, patterns[, options]);
15739 *
15740 * console.log(mm.every('foo.js', ['foo.js']));
15741 * // true
15742 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));
15743 * // true
15744 * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));
15745 * // false
15746 * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));
15747 * // false
15748 * ```
15749 * @param {String|Array} `list` The string or array of strings to test.
15750 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15751 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15752 * @return {Boolean} Returns true if any patterns match `str`
15753 * @api public
15754 */
15755
15756micromatch.every = (list, patterns, options) => {
15757 let items = [].concat(list);
15758
15759 for (let pattern of [].concat(patterns)) {
15760 let isMatch = picomatch(String(pattern), options);
15761 if (!items.every(item => isMatch(item))) {
15762 return false;
15763 }
15764 }
15765 return true;
15766};
15767
15768/**
15769 * Returns true if **all** of the given `patterns` match
15770 * the specified string.
15771 *
15772 * ```js
15773 * const mm = require('micromatch');
15774 * // mm.all(string, patterns[, options]);
15775 *
15776 * console.log(mm.all('foo.js', ['foo.js']));
15777 * // true
15778 *
15779 * console.log(mm.all('foo.js', ['*.js', '!foo.js']));
15780 * // false
15781 *
15782 * console.log(mm.all('foo.js', ['*.js', 'foo.js']));
15783 * // true
15784 *
15785 * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));
15786 * // true
15787 * ```
15788 * @param {String|Array} `str` The string to test.
15789 * @param {String|Array} `patterns` One or more glob patterns to use for matching.
15790 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15791 * @return {Boolean} Returns true if any patterns match `str`
15792 * @api public
15793 */
15794
15795micromatch.all = (str, patterns, options) => {
15796 if (typeof str !== 'string') {
15797 throw new TypeError(`Expected a string: "${util.inspect(str)}"`);
15798 }
15799
15800 return [].concat(patterns).every(p => picomatch(p, options)(str));
15801};
15802
15803/**
15804 * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.
15805 *
15806 * ```js
15807 * const mm = require('micromatch');
15808 * // mm.capture(pattern, string[, options]);
15809 *
15810 * console.log(mm.capture('test/*.js', 'test/foo.js'));
15811 * //=> ['foo']
15812 * console.log(mm.capture('test/*.js', 'foo/bar.css'));
15813 * //=> null
15814 * ```
15815 * @param {String} `glob` Glob pattern to use for matching.
15816 * @param {String} `input` String to match
15817 * @param {Object} `options` See available [options](#options) for changing how matches are performed
15818 * @return {Boolean} Returns an array of captures if the input matches the glob pattern, otherwise `null`.
15819 * @api public
15820 */
15821
15822micromatch.capture = (glob, input, options) => {
15823 let posix = utils.isWindows(options);
15824 let regex = picomatch.makeRe(String(glob), { ...options, capture: true });
15825 let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);
15826
15827 if (match) {
15828 return match.slice(1).map(v => v === void 0 ? '' : v);
15829 }
15830};
15831
15832/**
15833 * Create a regular expression from the given glob `pattern`.
15834 *
15835 * ```js
15836 * const mm = require('micromatch');
15837 * // mm.makeRe(pattern[, options]);
15838 *
15839 * console.log(mm.makeRe('*.js'));
15840 * //=> /^(?:(\.[\\\/])?(?!\.)(?=.)[^\/]*?\.js)$/
15841 * ```
15842 * @param {String} `pattern` A glob pattern to convert to regex.
15843 * @param {Object} `options`
15844 * @return {RegExp} Returns a regex created from the given pattern.
15845 * @api public
15846 */
15847
15848micromatch.makeRe = (...args) => picomatch.makeRe(...args);
15849
15850/**
15851 * Scan a glob pattern to separate the pattern into segments. Used
15852 * by the [split](#split) method.
15853 *
15854 * ```js
15855 * const mm = require('micromatch');
15856 * const state = mm.scan(pattern[, options]);
15857 * ```
15858 * @param {String} `pattern`
15859 * @param {Object} `options`
15860 * @return {Object} Returns an object with
15861 * @api public
15862 */
15863
15864micromatch.scan = (...args) => picomatch.scan(...args);
15865
15866/**
15867 * Parse a glob pattern to create the source string for a regular
15868 * expression.
15869 *
15870 * ```js
15871 * const mm = require('micromatch');
15872 * const state = mm(pattern[, options]);
15873 * ```
15874 * @param {String} `glob`
15875 * @param {Object} `options`
15876 * @return {Object} Returns an object with useful properties and output to be used as regex source string.
15877 * @api public
15878 */
15879
15880micromatch.parse = (patterns, options) => {
15881 let res = [];
15882 for (let pattern of [].concat(patterns || [])) {
15883 for (let str of braces(String(pattern), options)) {
15884 res.push(picomatch.parse(str, options));
15885 }
15886 }
15887 return res;
15888};
15889
15890/**
15891 * Process the given brace `pattern`.
15892 *
15893 * ```js
15894 * const { braces } = require('micromatch');
15895 * console.log(braces('foo/{a,b,c}/bar'));
15896 * //=> [ 'foo/(a|b|c)/bar' ]
15897 *
15898 * console.log(braces('foo/{a,b,c}/bar', { expand: true }));
15899 * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]
15900 * ```
15901 * @param {String} `pattern` String with brace pattern to process.
15902 * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.
15903 * @return {Array}
15904 * @api public
15905 */
15906
15907micromatch.braces = (pattern, options) => {
15908 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15909 if ((options && options.nobrace === true) || !/\{.*\}/.test(pattern)) {
15910 return [pattern];
15911 }
15912 return braces(pattern, options);
15913};
15914
15915/**
15916 * Expand braces
15917 */
15918
15919micromatch.braceExpand = (pattern, options) => {
15920 if (typeof pattern !== 'string') throw new TypeError('Expected a string');
15921 return micromatch.braces(pattern, { ...options, expand: true });
15922};
15923
15924/**
15925 * Expose micromatch
15926 */
15927
15928module.exports = micromatch;
15929
15930
15931/***/ }),
15932/* 72 */
15933/***/ (function(module, exports, __webpack_require__) {
15934
15935"use strict";
15936
15937
15938const stringify = __webpack_require__(73);
15939const compile = __webpack_require__(75);
15940const expand = __webpack_require__(79);
15941const parse = __webpack_require__(80);
15942
15943/**
15944 * Expand the given pattern or create a regex-compatible string.
15945 *
15946 * ```js
15947 * const braces = require('braces');
15948 * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']
15949 * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']
15950 * ```
15951 * @param {String} `str`
15952 * @param {Object} `options`
15953 * @return {String}
15954 * @api public
15955 */
15956
15957const braces = (input, options = {}) => {
15958 let output = [];
15959
15960 if (Array.isArray(input)) {
15961 for (let pattern of input) {
15962 let result = braces.create(pattern, options);
15963 if (Array.isArray(result)) {
15964 output.push(...result);
15965 } else {
15966 output.push(result);
15967 }
15968 }
15969 } else {
15970 output = [].concat(braces.create(input, options));
15971 }
15972
15973 if (options && options.expand === true && options.nodupes === true) {
15974 output = [...new Set(output)];
15975 }
15976 return output;
15977};
15978
15979/**
15980 * Parse the given `str` with the given `options`.
15981 *
15982 * ```js
15983 * // braces.parse(pattern, [, options]);
15984 * const ast = braces.parse('a/{b,c}/d');
15985 * console.log(ast);
15986 * ```
15987 * @param {String} pattern Brace pattern to parse
15988 * @param {Object} options
15989 * @return {Object} Returns an AST
15990 * @api public
15991 */
15992
15993braces.parse = (input, options = {}) => parse(input, options);
15994
15995/**
15996 * Creates a braces string from an AST, or an AST node.
15997 *
15998 * ```js
15999 * const braces = require('braces');
16000 * let ast = braces.parse('foo/{a,b}/bar');
16001 * console.log(stringify(ast.nodes[2])); //=> '{a,b}'
16002 * ```
16003 * @param {String} `input` Brace pattern or AST.
16004 * @param {Object} `options`
16005 * @return {Array} Returns an array of expanded values.
16006 * @api public
16007 */
16008
16009braces.stringify = (input, options = {}) => {
16010 if (typeof input === 'string') {
16011 return stringify(braces.parse(input, options), options);
16012 }
16013 return stringify(input, options);
16014};
16015
16016/**
16017 * Compiles a brace pattern into a regex-compatible, optimized string.
16018 * This method is called by the main [braces](#braces) function by default.
16019 *
16020 * ```js
16021 * const braces = require('braces');
16022 * console.log(braces.compile('a/{b,c}/d'));
16023 * //=> ['a/(b|c)/d']
16024 * ```
16025 * @param {String} `input` Brace pattern or AST.
16026 * @param {Object} `options`
16027 * @return {Array} Returns an array of expanded values.
16028 * @api public
16029 */
16030
16031braces.compile = (input, options = {}) => {
16032 if (typeof input === 'string') {
16033 input = braces.parse(input, options);
16034 }
16035 return compile(input, options);
16036};
16037
16038/**
16039 * Expands a brace pattern into an array. This method is called by the
16040 * main [braces](#braces) function when `options.expand` is true. Before
16041 * using this method it's recommended that you read the [performance notes](#performance))
16042 * and advantages of using [.compile](#compile) instead.
16043 *
16044 * ```js
16045 * const braces = require('braces');
16046 * console.log(braces.expand('a/{b,c}/d'));
16047 * //=> ['a/b/d', 'a/c/d'];
16048 * ```
16049 * @param {String} `pattern` Brace pattern
16050 * @param {Object} `options`
16051 * @return {Array} Returns an array of expanded values.
16052 * @api public
16053 */
16054
16055braces.expand = (input, options = {}) => {
16056 if (typeof input === 'string') {
16057 input = braces.parse(input, options);
16058 }
16059
16060 let result = expand(input, options);
16061
16062 // filter out empty strings if specified
16063 if (options.noempty === true) {
16064 result = result.filter(Boolean);
16065 }
16066
16067 // filter out duplicates if specified
16068 if (options.nodupes === true) {
16069 result = [...new Set(result)];
16070 }
16071
16072 return result;
16073};
16074
16075/**
16076 * Processes a brace pattern and returns either an expanded array
16077 * (if `options.expand` is true), a highly optimized regex-compatible string.
16078 * This method is called by the main [braces](#braces) function.
16079 *
16080 * ```js
16081 * const braces = require('braces');
16082 * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))
16083 * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'
16084 * ```
16085 * @param {String} `pattern` Brace pattern
16086 * @param {Object} `options`
16087 * @return {Array} Returns an array of expanded values.
16088 * @api public
16089 */
16090
16091braces.create = (input, options = {}) => {
16092 if (input === '' || input.length < 3) {
16093 return [input];
16094 }
16095
16096 return options.expand !== true
16097 ? braces.compile(input, options)
16098 : braces.expand(input, options);
16099};
16100
16101/**
16102 * Expose "braces"
16103 */
16104
16105module.exports = braces;
16106
16107
16108/***/ }),
16109/* 73 */
16110/***/ (function(module, exports, __webpack_require__) {
16111
16112"use strict";
16113
16114
16115const utils = __webpack_require__(74);
16116
16117module.exports = (ast, options = {}) => {
16118 let stringify = (node, parent = {}) => {
16119 let invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);
16120 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16121 let output = '';
16122
16123 if (node.value) {
16124 if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {
16125 return '\\' + node.value;
16126 }
16127 return node.value;
16128 }
16129
16130 if (node.value) {
16131 return node.value;
16132 }
16133
16134 if (node.nodes) {
16135 for (let child of node.nodes) {
16136 output += stringify(child);
16137 }
16138 }
16139 return output;
16140 };
16141
16142 return stringify(ast);
16143};
16144
16145
16146
16147/***/ }),
16148/* 74 */
16149/***/ (function(module, exports, __webpack_require__) {
16150
16151"use strict";
16152
16153
16154exports.isInteger = num => {
16155 if (typeof num === 'number') {
16156 return Number.isInteger(num);
16157 }
16158 if (typeof num === 'string' && num.trim() !== '') {
16159 return Number.isInteger(Number(num));
16160 }
16161 return false;
16162};
16163
16164/**
16165 * Find a node of the given type
16166 */
16167
16168exports.find = (node, type) => node.nodes.find(node => node.type === type);
16169
16170/**
16171 * Find a node of the given type
16172 */
16173
16174exports.exceedsLimit = (min, max, step = 1, limit) => {
16175 if (limit === false) return false;
16176 if (!exports.isInteger(min) || !exports.isInteger(max)) return false;
16177 return ((Number(max) - Number(min)) / Number(step)) >= limit;
16178};
16179
16180/**
16181 * Escape the given node with '\\' before node.value
16182 */
16183
16184exports.escapeNode = (block, n = 0, type) => {
16185 let node = block.nodes[n];
16186 if (!node) return;
16187
16188 if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {
16189 if (node.escaped !== true) {
16190 node.value = '\\' + node.value;
16191 node.escaped = true;
16192 }
16193 }
16194};
16195
16196/**
16197 * Returns true if the given brace node should be enclosed in literal braces
16198 */
16199
16200exports.encloseBrace = node => {
16201 if (node.type !== 'brace') return false;
16202 if ((node.commas >> 0 + node.ranges >> 0) === 0) {
16203 node.invalid = true;
16204 return true;
16205 }
16206 return false;
16207};
16208
16209/**
16210 * Returns true if a brace node is invalid.
16211 */
16212
16213exports.isInvalidBrace = block => {
16214 if (block.type !== 'brace') return false;
16215 if (block.invalid === true || block.dollar) return true;
16216 if ((block.commas >> 0 + block.ranges >> 0) === 0) {
16217 block.invalid = true;
16218 return true;
16219 }
16220 if (block.open !== true || block.close !== true) {
16221 block.invalid = true;
16222 return true;
16223 }
16224 return false;
16225};
16226
16227/**
16228 * Returns true if a node is an open or close node
16229 */
16230
16231exports.isOpenOrClose = node => {
16232 if (node.type === 'open' || node.type === 'close') {
16233 return true;
16234 }
16235 return node.open === true || node.close === true;
16236};
16237
16238/**
16239 * Reduce an array of text nodes.
16240 */
16241
16242exports.reduce = nodes => nodes.reduce((acc, node) => {
16243 if (node.type === 'text') acc.push(node.value);
16244 if (node.type === 'range') node.type = 'text';
16245 return acc;
16246}, []);
16247
16248/**
16249 * Flatten an array
16250 */
16251
16252exports.flatten = (...args) => {
16253 const result = [];
16254 const flat = arr => {
16255 for (let i = 0; i < arr.length; i++) {
16256 let ele = arr[i];
16257 Array.isArray(ele) ? flat(ele, result) : ele !== void 0 && result.push(ele);
16258 }
16259 return result;
16260 };
16261 flat(args);
16262 return result;
16263};
16264
16265
16266/***/ }),
16267/* 75 */
16268/***/ (function(module, exports, __webpack_require__) {
16269
16270"use strict";
16271
16272
16273const fill = __webpack_require__(76);
16274const utils = __webpack_require__(74);
16275
16276const compile = (ast, options = {}) => {
16277 let walk = (node, parent = {}) => {
16278 let invalidBlock = utils.isInvalidBrace(parent);
16279 let invalidNode = node.invalid === true && options.escapeInvalid === true;
16280 let invalid = invalidBlock === true || invalidNode === true;
16281 let prefix = options.escapeInvalid === true ? '\\' : '';
16282 let output = '';
16283
16284 if (node.isOpen === true) {
16285 return prefix + node.value;
16286 }
16287 if (node.isClose === true) {
16288 return prefix + node.value;
16289 }
16290
16291 if (node.type === 'open') {
16292 return invalid ? (prefix + node.value) : '(';
16293 }
16294
16295 if (node.type === 'close') {
16296 return invalid ? (prefix + node.value) : ')';
16297 }
16298
16299 if (node.type === 'comma') {
16300 return node.prev.type === 'comma' ? '' : (invalid ? node.value : '|');
16301 }
16302
16303 if (node.value) {
16304 return node.value;
16305 }
16306
16307 if (node.nodes && node.ranges > 0) {
16308 let args = utils.reduce(node.nodes);
16309 let range = fill(...args, { ...options, wrap: false, toRegex: true });
16310
16311 if (range.length !== 0) {
16312 return args.length > 1 && range.length > 1 ? `(${range})` : range;
16313 }
16314 }
16315
16316 if (node.nodes) {
16317 for (let child of node.nodes) {
16318 output += walk(child, node);
16319 }
16320 }
16321 return output;
16322 };
16323
16324 return walk(ast);
16325};
16326
16327module.exports = compile;
16328
16329
16330/***/ }),
16331/* 76 */
16332/***/ (function(module, exports, __webpack_require__) {
16333
16334"use strict";
16335/*!
16336 * fill-range <https://github.com/jonschlinkert/fill-range>
16337 *
16338 * Copyright (c) 2014-present, Jon Schlinkert.
16339 * Licensed under the MIT License.
16340 */
16341
16342
16343
16344const util = __webpack_require__(48);
16345const toRegexRange = __webpack_require__(77);
16346
16347const isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
16348
16349const transform = toNumber => {
16350 return value => toNumber === true ? Number(value) : String(value);
16351};
16352
16353const isValidValue = value => {
16354 return typeof value === 'number' || (typeof value === 'string' && value !== '');
16355};
16356
16357const isNumber = num => Number.isInteger(+num);
16358
16359const zeros = input => {
16360 let value = `${input}`;
16361 let index = -1;
16362 if (value[0] === '-') value = value.slice(1);
16363 if (value === '0') return false;
16364 while (value[++index] === '0');
16365 return index > 0;
16366};
16367
16368const stringify = (start, end, options) => {
16369 if (typeof start === 'string' || typeof end === 'string') {
16370 return true;
16371 }
16372 return options.stringify === true;
16373};
16374
16375const pad = (input, maxLength, toNumber) => {
16376 if (maxLength > 0) {
16377 let dash = input[0] === '-' ? '-' : '';
16378 if (dash) input = input.slice(1);
16379 input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));
16380 }
16381 if (toNumber === false) {
16382 return String(input);
16383 }
16384 return input;
16385};
16386
16387const toMaxLen = (input, maxLength) => {
16388 let negative = input[0] === '-' ? '-' : '';
16389 if (negative) {
16390 input = input.slice(1);
16391 maxLength--;
16392 }
16393 while (input.length < maxLength) input = '0' + input;
16394 return negative ? ('-' + input) : input;
16395};
16396
16397const toSequence = (parts, options) => {
16398 parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16399 parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
16400
16401 let prefix = options.capture ? '' : '?:';
16402 let positives = '';
16403 let negatives = '';
16404 let result;
16405
16406 if (parts.positives.length) {
16407 positives = parts.positives.join('|');
16408 }
16409
16410 if (parts.negatives.length) {
16411 negatives = `-(${prefix}${parts.negatives.join('|')})`;
16412 }
16413
16414 if (positives && negatives) {
16415 result = `${positives}|${negatives}`;
16416 } else {
16417 result = positives || negatives;
16418 }
16419
16420 if (options.wrap) {
16421 return `(${prefix}${result})`;
16422 }
16423
16424 return result;
16425};
16426
16427const toRange = (a, b, isNumbers, options) => {
16428 if (isNumbers) {
16429 return toRegexRange(a, b, { wrap: false, ...options });
16430 }
16431
16432 let start = String.fromCharCode(a);
16433 if (a === b) return start;
16434
16435 let stop = String.fromCharCode(b);
16436 return `[${start}-${stop}]`;
16437};
16438
16439const toRegex = (start, end, options) => {
16440 if (Array.isArray(start)) {
16441 let wrap = options.wrap === true;
16442 let prefix = options.capture ? '' : '?:';
16443 return wrap ? `(${prefix}${start.join('|')})` : start.join('|');
16444 }
16445 return toRegexRange(start, end, options);
16446};
16447
16448const rangeError = (...args) => {
16449 return new RangeError('Invalid range arguments: ' + util.inspect(...args));
16450};
16451
16452const invalidRange = (start, end, options) => {
16453 if (options.strictRanges === true) throw rangeError([start, end]);
16454 return [];
16455};
16456
16457const invalidStep = (step, options) => {
16458 if (options.strictRanges === true) {
16459 throw new TypeError(`Expected step "${step}" to be a number`);
16460 }
16461 return [];
16462};
16463
16464const fillNumbers = (start, end, step = 1, options = {}) => {
16465 let a = Number(start);
16466 let b = Number(end);
16467
16468 if (!Number.isInteger(a) || !Number.isInteger(b)) {
16469 if (options.strictRanges === true) throw rangeError([start, end]);
16470 return [];
16471 }
16472
16473 // fix negative zero
16474 if (a === 0) a = 0;
16475 if (b === 0) b = 0;
16476
16477 let descending = a > b;
16478 let startString = String(start);
16479 let endString = String(end);
16480 let stepString = String(step);
16481 step = Math.max(Math.abs(step), 1);
16482
16483 let padded = zeros(startString) || zeros(endString) || zeros(stepString);
16484 let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;
16485 let toNumber = padded === false && stringify(start, end, options) === false;
16486 let format = options.transform || transform(toNumber);
16487
16488 if (options.toRegex && step === 1) {
16489 return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);
16490 }
16491
16492 let parts = { negatives: [], positives: [] };
16493 let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));
16494 let range = [];
16495 let index = 0;
16496
16497 while (descending ? a >= b : a <= b) {
16498 if (options.toRegex === true && step > 1) {
16499 push(a);
16500 } else {
16501 range.push(pad(format(a, index), maxLen, toNumber));
16502 }
16503 a = descending ? a - step : a + step;
16504 index++;
16505 }
16506
16507 if (options.toRegex === true) {
16508 return step > 1
16509 ? toSequence(parts, options)
16510 : toRegex(range, null, { wrap: false, ...options });
16511 }
16512
16513 return range;
16514};
16515
16516const fillLetters = (start, end, step = 1, options = {}) => {
16517 if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {
16518 return invalidRange(start, end, options);
16519 }
16520
16521
16522 let format = options.transform || (val => String.fromCharCode(val));
16523 let a = `${start}`.charCodeAt(0);
16524 let b = `${end}`.charCodeAt(0);
16525
16526 let descending = a > b;
16527 let min = Math.min(a, b);
16528 let max = Math.max(a, b);
16529
16530 if (options.toRegex && step === 1) {
16531 return toRange(min, max, false, options);
16532 }
16533
16534 let range = [];
16535 let index = 0;
16536
16537 while (descending ? a >= b : a <= b) {
16538 range.push(format(a, index));
16539 a = descending ? a - step : a + step;
16540 index++;
16541 }
16542
16543 if (options.toRegex === true) {
16544 return toRegex(range, null, { wrap: false, options });
16545 }
16546
16547 return range;
16548};
16549
16550const fill = (start, end, step, options = {}) => {
16551 if (end == null && isValidValue(start)) {
16552 return [start];
16553 }
16554
16555 if (!isValidValue(start) || !isValidValue(end)) {
16556 return invalidRange(start, end, options);
16557 }
16558
16559 if (typeof step === 'function') {
16560 return fill(start, end, 1, { transform: step });
16561 }
16562
16563 if (isObject(step)) {
16564 return fill(start, end, 0, step);
16565 }
16566
16567 let opts = { ...options };
16568 if (opts.capture === true) opts.wrap = true;
16569 step = step || opts.step || 1;
16570
16571 if (!isNumber(step)) {
16572 if (step != null && !isObject(step)) return invalidStep(step, opts);
16573 return fill(start, end, 1, step);
16574 }
16575
16576 if (isNumber(start) && isNumber(end)) {
16577 return fillNumbers(start, end, step, opts);
16578 }
16579
16580 return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);
16581};
16582
16583module.exports = fill;
16584
16585
16586/***/ }),
16587/* 77 */
16588/***/ (function(module, exports, __webpack_require__) {
16589
16590"use strict";
16591/*!
16592 * to-regex-range <https://github.com/micromatch/to-regex-range>
16593 *
16594 * Copyright (c) 2015-present, Jon Schlinkert.
16595 * Released under the MIT License.
16596 */
16597
16598
16599
16600const isNumber = __webpack_require__(78);
16601
16602const toRegexRange = (min, max, options) => {
16603 if (isNumber(min) === false) {
16604 throw new TypeError('toRegexRange: expected the first argument to be a number');
16605 }
16606
16607 if (max === void 0 || min === max) {
16608 return String(min);
16609 }
16610
16611 if (isNumber(max) === false) {
16612 throw new TypeError('toRegexRange: expected the second argument to be a number.');
16613 }
16614
16615 let opts = { relaxZeros: true, ...options };
16616 if (typeof opts.strictZeros === 'boolean') {
16617 opts.relaxZeros = opts.strictZeros === false;
16618 }
16619
16620 let relax = String(opts.relaxZeros);
16621 let shorthand = String(opts.shorthand);
16622 let capture = String(opts.capture);
16623 let wrap = String(opts.wrap);
16624 let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;
16625
16626 if (toRegexRange.cache.hasOwnProperty(cacheKey)) {
16627 return toRegexRange.cache[cacheKey].result;
16628 }
16629
16630 let a = Math.min(min, max);
16631 let b = Math.max(min, max);
16632
16633 if (Math.abs(a - b) === 1) {
16634 let result = min + '|' + max;
16635 if (opts.capture) {
16636 return `(${result})`;
16637 }
16638 if (opts.wrap === false) {
16639 return result;
16640 }
16641 return `(?:${result})`;
16642 }
16643
16644 let isPadded = hasPadding(min) || hasPadding(max);
16645 let state = { min, max, a, b };
16646 let positives = [];
16647 let negatives = [];
16648
16649 if (isPadded) {
16650 state.isPadded = isPadded;
16651 state.maxLen = String(state.max).length;
16652 }
16653
16654 if (a < 0) {
16655 let newMin = b < 0 ? Math.abs(b) : 1;
16656 negatives = splitToPatterns(newMin, Math.abs(a), state, opts);
16657 a = state.a = 0;
16658 }
16659
16660 if (b >= 0) {
16661 positives = splitToPatterns(a, b, state, opts);
16662 }
16663
16664 state.negatives = negatives;
16665 state.positives = positives;
16666 state.result = collatePatterns(negatives, positives, opts);
16667
16668 if (opts.capture === true) {
16669 state.result = `(${state.result})`;
16670 } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {
16671 state.result = `(?:${state.result})`;
16672 }
16673
16674 toRegexRange.cache[cacheKey] = state;
16675 return state.result;
16676};
16677
16678function collatePatterns(neg, pos, options) {
16679 let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];
16680 let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];
16681 let intersected = filterPatterns(neg, pos, '-?', true, options) || [];
16682 let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);
16683 return subpatterns.join('|');
16684}
16685
16686function splitToRanges(min, max) {
16687 let nines = 1;
16688 let zeros = 1;
16689
16690 let stop = countNines(min, nines);
16691 let stops = new Set([max]);
16692
16693 while (min <= stop && stop <= max) {
16694 stops.add(stop);
16695 nines += 1;
16696 stop = countNines(min, nines);
16697 }
16698
16699 stop = countZeros(max + 1, zeros) - 1;
16700
16701 while (min < stop && stop <= max) {
16702 stops.add(stop);
16703 zeros += 1;
16704 stop = countZeros(max + 1, zeros) - 1;
16705 }
16706
16707 stops = [...stops];
16708 stops.sort(compare);
16709 return stops;
16710}
16711
16712/**
16713 * Convert a range to a regex pattern
16714 * @param {Number} `start`
16715 * @param {Number} `stop`
16716 * @return {String}
16717 */
16718
16719function rangeToPattern(start, stop, options) {
16720 if (start === stop) {
16721 return { pattern: start, count: [], digits: 0 };
16722 }
16723
16724 let zipped = zip(start, stop);
16725 let digits = zipped.length;
16726 let pattern = '';
16727 let count = 0;
16728
16729 for (let i = 0; i < digits; i++) {
16730 let [startDigit, stopDigit] = zipped[i];
16731
16732 if (startDigit === stopDigit) {
16733 pattern += startDigit;
16734
16735 } else if (startDigit !== '0' || stopDigit !== '9') {
16736 pattern += toCharacterClass(startDigit, stopDigit, options);
16737
16738 } else {
16739 count++;
16740 }
16741 }
16742
16743 if (count) {
16744 pattern += options.shorthand === true ? '\\d' : '[0-9]';
16745 }
16746
16747 return { pattern, count: [count], digits };
16748}
16749
16750function splitToPatterns(min, max, tok, options) {
16751 let ranges = splitToRanges(min, max);
16752 let tokens = [];
16753 let start = min;
16754 let prev;
16755
16756 for (let i = 0; i < ranges.length; i++) {
16757 let max = ranges[i];
16758 let obj = rangeToPattern(String(start), String(max), options);
16759 let zeros = '';
16760
16761 if (!tok.isPadded && prev && prev.pattern === obj.pattern) {
16762 if (prev.count.length > 1) {
16763 prev.count.pop();
16764 }
16765
16766 prev.count.push(obj.count[0]);
16767 prev.string = prev.pattern + toQuantifier(prev.count);
16768 start = max + 1;
16769 continue;
16770 }
16771
16772 if (tok.isPadded) {
16773 zeros = padZeros(max, tok, options);
16774 }
16775
16776 obj.string = zeros + obj.pattern + toQuantifier(obj.count);
16777 tokens.push(obj);
16778 start = max + 1;
16779 prev = obj;
16780 }
16781
16782 return tokens;
16783}
16784
16785function filterPatterns(arr, comparison, prefix, intersection, options) {
16786 let result = [];
16787
16788 for (let ele of arr) {
16789 let { string } = ele;
16790
16791 // only push if _both_ are negative...
16792 if (!intersection && !contains(comparison, 'string', string)) {
16793 result.push(prefix + string);
16794 }
16795
16796 // or _both_ are positive
16797 if (intersection && contains(comparison, 'string', string)) {
16798 result.push(prefix + string);
16799 }
16800 }
16801 return result;
16802}
16803
16804/**
16805 * Zip strings
16806 */
16807
16808function zip(a, b) {
16809 let arr = [];
16810 for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);
16811 return arr;
16812}
16813
16814function compare(a, b) {
16815 return a > b ? 1 : b > a ? -1 : 0;
16816}
16817
16818function contains(arr, key, val) {
16819 return arr.some(ele => ele[key] === val);
16820}
16821
16822function countNines(min, len) {
16823 return Number(String(min).slice(0, -len) + '9'.repeat(len));
16824}
16825
16826function countZeros(integer, zeros) {
16827 return integer - (integer % Math.pow(10, zeros));
16828}
16829
16830function toQuantifier(digits) {
16831 let [start = 0, stop = ''] = digits;
16832 if (stop || start > 1) {
16833 return `{${start + (stop ? ',' + stop : '')}}`;
16834 }
16835 return '';
16836}
16837
16838function toCharacterClass(a, b, options) {
16839 return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;
16840}
16841
16842function hasPadding(str) {
16843 return /^-?(0+)\d/.test(str);
16844}
16845
16846function padZeros(value, tok, options) {
16847 if (!tok.isPadded) {
16848 return value;
16849 }
16850
16851 let diff = Math.abs(tok.maxLen - String(value).length);
16852 let relax = options.relaxZeros !== false;
16853
16854 switch (diff) {
16855 case 0:
16856 return '';
16857 case 1:
16858 return relax ? '0?' : '0';
16859 case 2:
16860 return relax ? '0{0,2}' : '00';
16861 default: {
16862 return relax ? `0{0,${diff}}` : `0{${diff}}`;
16863 }
16864 }
16865}
16866
16867/**
16868 * Cache
16869 */
16870
16871toRegexRange.cache = {};
16872toRegexRange.clearCache = () => (toRegexRange.cache = {});
16873
16874/**
16875 * Expose `toRegexRange`
16876 */
16877
16878module.exports = toRegexRange;
16879
16880
16881/***/ }),
16882/* 78 */
16883/***/ (function(module, exports, __webpack_require__) {
16884
16885"use strict";
16886/*!
16887 * is-number <https://github.com/jonschlinkert/is-number>
16888 *
16889 * Copyright (c) 2014-present, Jon Schlinkert.
16890 * Released under the MIT License.
16891 */
16892
16893
16894
16895module.exports = function(num) {
16896 if (typeof num === 'number') {
16897 return num - num === 0;
16898 }
16899 if (typeof num === 'string' && num.trim() !== '') {
16900 return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);
16901 }
16902 return false;
16903};
16904
16905
16906/***/ }),
16907/* 79 */
16908/***/ (function(module, exports, __webpack_require__) {
16909
16910"use strict";
16911
16912
16913const fill = __webpack_require__(76);
16914const stringify = __webpack_require__(73);
16915const utils = __webpack_require__(74);
16916
16917const append = (queue = '', stash = '', enclose = false) => {
16918 let result = [];
16919
16920 queue = [].concat(queue);
16921 stash = [].concat(stash);
16922
16923 if (!stash.length) return queue;
16924 if (!queue.length) {
16925 return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;
16926 }
16927
16928 for (let item of queue) {
16929 if (Array.isArray(item)) {
16930 for (let value of item) {
16931 result.push(append(value, stash, enclose));
16932 }
16933 } else {
16934 for (let ele of stash) {
16935 if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;
16936 result.push(Array.isArray(ele) ? append(item, ele, enclose) : (item + ele));
16937 }
16938 }
16939 }
16940 return utils.flatten(result);
16941};
16942
16943const expand = (ast, options = {}) => {
16944 let rangeLimit = options.rangeLimit === void 0 ? 1000 : options.rangeLimit;
16945
16946 let walk = (node, parent = {}) => {
16947 node.queue = [];
16948
16949 let p = parent;
16950 let q = parent.queue;
16951
16952 while (p.type !== 'brace' && p.type !== 'root' && p.parent) {
16953 p = p.parent;
16954 q = p.queue;
16955 }
16956
16957 if (node.invalid || node.dollar) {
16958 q.push(append(q.pop(), stringify(node, options)));
16959 return;
16960 }
16961
16962 if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {
16963 q.push(append(q.pop(), ['{}']));
16964 return;
16965 }
16966
16967 if (node.nodes && node.ranges > 0) {
16968 let args = utils.reduce(node.nodes);
16969
16970 if (utils.exceedsLimit(...args, options.step, rangeLimit)) {
16971 throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');
16972 }
16973
16974 let range = fill(...args, options);
16975 if (range.length === 0) {
16976 range = stringify(node, options);
16977 }
16978
16979 q.push(append(q.pop(), range));
16980 node.nodes = [];
16981 return;
16982 }
16983
16984 let enclose = utils.encloseBrace(node);
16985 let queue = node.queue;
16986 let block = node;
16987
16988 while (block.type !== 'brace' && block.type !== 'root' && block.parent) {
16989 block = block.parent;
16990 queue = block.queue;
16991 }
16992
16993 for (let i = 0; i < node.nodes.length; i++) {
16994 let child = node.nodes[i];
16995
16996 if (child.type === 'comma' && node.type === 'brace') {
16997 if (i === 1) queue.push('');
16998 queue.push('');
16999 continue;
17000 }
17001
17002 if (child.type === 'close') {
17003 q.push(append(q.pop(), queue, enclose));
17004 continue;
17005 }
17006
17007 if (child.value && child.type !== 'open') {
17008 queue.push(append(queue.pop(), child.value));
17009 continue;
17010 }
17011
17012 if (child.nodes) {
17013 walk(child, node);
17014 }
17015 }
17016
17017 return queue;
17018 };
17019
17020 return utils.flatten(walk(ast));
17021};
17022
17023module.exports = expand;
17024
17025
17026/***/ }),
17027/* 80 */
17028/***/ (function(module, exports, __webpack_require__) {
17029
17030"use strict";
17031
17032
17033const stringify = __webpack_require__(73);
17034
17035/**
17036 * Constants
17037 */
17038
17039const {
17040 MAX_LENGTH,
17041 CHAR_BACKSLASH, /* \ */
17042 CHAR_BACKTICK, /* ` */
17043 CHAR_COMMA, /* , */
17044 CHAR_DOT, /* . */
17045 CHAR_LEFT_PARENTHESES, /* ( */
17046 CHAR_RIGHT_PARENTHESES, /* ) */
17047 CHAR_LEFT_CURLY_BRACE, /* { */
17048 CHAR_RIGHT_CURLY_BRACE, /* } */
17049 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17050 CHAR_RIGHT_SQUARE_BRACKET, /* ] */
17051 CHAR_DOUBLE_QUOTE, /* " */
17052 CHAR_SINGLE_QUOTE, /* ' */
17053 CHAR_NO_BREAK_SPACE,
17054 CHAR_ZERO_WIDTH_NOBREAK_SPACE
17055} = __webpack_require__(81);
17056
17057/**
17058 * parse
17059 */
17060
17061const parse = (input, options = {}) => {
17062 if (typeof input !== 'string') {
17063 throw new TypeError('Expected a string');
17064 }
17065
17066 let opts = options || {};
17067 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
17068 if (input.length > max) {
17069 throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);
17070 }
17071
17072 let ast = { type: 'root', input, nodes: [] };
17073 let stack = [ast];
17074 let block = ast;
17075 let prev = ast;
17076 let brackets = 0;
17077 let length = input.length;
17078 let index = 0;
17079 let depth = 0;
17080 let value;
17081 let memo = {};
17082
17083 /**
17084 * Helpers
17085 */
17086
17087 const advance = () => input[index++];
17088 const push = node => {
17089 if (node.type === 'text' && prev.type === 'dot') {
17090 prev.type = 'text';
17091 }
17092
17093 if (prev && prev.type === 'text' && node.type === 'text') {
17094 prev.value += node.value;
17095 return;
17096 }
17097
17098 block.nodes.push(node);
17099 node.parent = block;
17100 node.prev = prev;
17101 prev = node;
17102 return node;
17103 };
17104
17105 push({ type: 'bos' });
17106
17107 while (index < length) {
17108 block = stack[stack.length - 1];
17109 value = advance();
17110
17111 /**
17112 * Invalid chars
17113 */
17114
17115 if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {
17116 continue;
17117 }
17118
17119 /**
17120 * Escaped chars
17121 */
17122
17123 if (value === CHAR_BACKSLASH) {
17124 push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });
17125 continue;
17126 }
17127
17128 /**
17129 * Right square bracket (literal): ']'
17130 */
17131
17132 if (value === CHAR_RIGHT_SQUARE_BRACKET) {
17133 push({ type: 'text', value: '\\' + value });
17134 continue;
17135 }
17136
17137 /**
17138 * Left square bracket: '['
17139 */
17140
17141 if (value === CHAR_LEFT_SQUARE_BRACKET) {
17142 brackets++;
17143
17144 let closed = true;
17145 let next;
17146
17147 while (index < length && (next = advance())) {
17148 value += next;
17149
17150 if (next === CHAR_LEFT_SQUARE_BRACKET) {
17151 brackets++;
17152 continue;
17153 }
17154
17155 if (next === CHAR_BACKSLASH) {
17156 value += advance();
17157 continue;
17158 }
17159
17160 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17161 brackets--;
17162
17163 if (brackets === 0) {
17164 break;
17165 }
17166 }
17167 }
17168
17169 push({ type: 'text', value });
17170 continue;
17171 }
17172
17173 /**
17174 * Parentheses
17175 */
17176
17177 if (value === CHAR_LEFT_PARENTHESES) {
17178 block = push({ type: 'paren', nodes: [] });
17179 stack.push(block);
17180 push({ type: 'text', value });
17181 continue;
17182 }
17183
17184 if (value === CHAR_RIGHT_PARENTHESES) {
17185 if (block.type !== 'paren') {
17186 push({ type: 'text', value });
17187 continue;
17188 }
17189 block = stack.pop();
17190 push({ type: 'text', value });
17191 block = stack[stack.length - 1];
17192 continue;
17193 }
17194
17195 /**
17196 * Quotes: '|"|`
17197 */
17198
17199 if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {
17200 let open = value;
17201 let next;
17202
17203 if (options.keepQuotes !== true) {
17204 value = '';
17205 }
17206
17207 while (index < length && (next = advance())) {
17208 if (next === CHAR_BACKSLASH) {
17209 value += next + advance();
17210 continue;
17211 }
17212
17213 if (next === open) {
17214 if (options.keepQuotes === true) value += next;
17215 break;
17216 }
17217
17218 value += next;
17219 }
17220
17221 push({ type: 'text', value });
17222 continue;
17223 }
17224
17225 /**
17226 * Left curly brace: '{'
17227 */
17228
17229 if (value === CHAR_LEFT_CURLY_BRACE) {
17230 depth++;
17231
17232 let dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;
17233 let brace = {
17234 type: 'brace',
17235 open: true,
17236 close: false,
17237 dollar,
17238 depth,
17239 commas: 0,
17240 ranges: 0,
17241 nodes: []
17242 };
17243
17244 block = push(brace);
17245 stack.push(block);
17246 push({ type: 'open', value });
17247 continue;
17248 }
17249
17250 /**
17251 * Right curly brace: '}'
17252 */
17253
17254 if (value === CHAR_RIGHT_CURLY_BRACE) {
17255 if (block.type !== 'brace') {
17256 push({ type: 'text', value });
17257 continue;
17258 }
17259
17260 let type = 'close';
17261 block = stack.pop();
17262 block.close = true;
17263
17264 push({ type, value });
17265 depth--;
17266
17267 block = stack[stack.length - 1];
17268 continue;
17269 }
17270
17271 /**
17272 * Comma: ','
17273 */
17274
17275 if (value === CHAR_COMMA && depth > 0) {
17276 if (block.ranges > 0) {
17277 block.ranges = 0;
17278 let open = block.nodes.shift();
17279 block.nodes = [open, { type: 'text', value: stringify(block) }];
17280 }
17281
17282 push({ type: 'comma', value });
17283 block.commas++;
17284 continue;
17285 }
17286
17287 /**
17288 * Dot: '.'
17289 */
17290
17291 if (value === CHAR_DOT && depth > 0 && block.commas === 0) {
17292 let siblings = block.nodes;
17293
17294 if (depth === 0 || siblings.length === 0) {
17295 push({ type: 'text', value });
17296 continue;
17297 }
17298
17299 if (prev.type === 'dot') {
17300 block.range = [];
17301 prev.value += value;
17302 prev.type = 'range';
17303
17304 if (block.nodes.length !== 3 && block.nodes.length !== 5) {
17305 block.invalid = true;
17306 block.ranges = 0;
17307 prev.type = 'text';
17308 continue;
17309 }
17310
17311 block.ranges++;
17312 block.args = [];
17313 continue;
17314 }
17315
17316 if (prev.type === 'range') {
17317 siblings.pop();
17318
17319 let before = siblings[siblings.length - 1];
17320 before.value += prev.value + value;
17321 prev = before;
17322 block.ranges--;
17323 continue;
17324 }
17325
17326 push({ type: 'dot', value });
17327 continue;
17328 }
17329
17330 /**
17331 * Text
17332 */
17333
17334 push({ type: 'text', value });
17335 }
17336
17337 // Mark imbalanced braces and brackets as invalid
17338 do {
17339 block = stack.pop();
17340
17341 if (block.type !== 'root') {
17342 block.nodes.forEach(node => {
17343 if (!node.nodes) {
17344 if (node.type === 'open') node.isOpen = true;
17345 if (node.type === 'close') node.isClose = true;
17346 if (!node.nodes) node.type = 'text';
17347 node.invalid = true;
17348 }
17349 });
17350
17351 // get the location of the block on parent.nodes (block's siblings)
17352 let parent = stack[stack.length - 1];
17353 let index = parent.nodes.indexOf(block);
17354 // replace the (invalid) block with it's nodes
17355 parent.nodes.splice(index, 1, ...block.nodes);
17356 }
17357 } while (stack.length > 0);
17358
17359 push({ type: 'eos' });
17360 return ast;
17361};
17362
17363module.exports = parse;
17364
17365
17366/***/ }),
17367/* 81 */
17368/***/ (function(module, exports, __webpack_require__) {
17369
17370"use strict";
17371
17372
17373module.exports = {
17374 MAX_LENGTH: 1024 * 64,
17375
17376 // Digits
17377 CHAR_0: '0', /* 0 */
17378 CHAR_9: '9', /* 9 */
17379
17380 // Alphabet chars.
17381 CHAR_UPPERCASE_A: 'A', /* A */
17382 CHAR_LOWERCASE_A: 'a', /* a */
17383 CHAR_UPPERCASE_Z: 'Z', /* Z */
17384 CHAR_LOWERCASE_Z: 'z', /* z */
17385
17386 CHAR_LEFT_PARENTHESES: '(', /* ( */
17387 CHAR_RIGHT_PARENTHESES: ')', /* ) */
17388
17389 CHAR_ASTERISK: '*', /* * */
17390
17391 // Non-alphabetic chars.
17392 CHAR_AMPERSAND: '&', /* & */
17393 CHAR_AT: '@', /* @ */
17394 CHAR_BACKSLASH: '\\', /* \ */
17395 CHAR_BACKTICK: '`', /* ` */
17396 CHAR_CARRIAGE_RETURN: '\r', /* \r */
17397 CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */
17398 CHAR_COLON: ':', /* : */
17399 CHAR_COMMA: ',', /* , */
17400 CHAR_DOLLAR: '$', /* . */
17401 CHAR_DOT: '.', /* . */
17402 CHAR_DOUBLE_QUOTE: '"', /* " */
17403 CHAR_EQUAL: '=', /* = */
17404 CHAR_EXCLAMATION_MARK: '!', /* ! */
17405 CHAR_FORM_FEED: '\f', /* \f */
17406 CHAR_FORWARD_SLASH: '/', /* / */
17407 CHAR_HASH: '#', /* # */
17408 CHAR_HYPHEN_MINUS: '-', /* - */
17409 CHAR_LEFT_ANGLE_BRACKET: '<', /* < */
17410 CHAR_LEFT_CURLY_BRACE: '{', /* { */
17411 CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */
17412 CHAR_LINE_FEED: '\n', /* \n */
17413 CHAR_NO_BREAK_SPACE: '\u00A0', /* \u00A0 */
17414 CHAR_PERCENT: '%', /* % */
17415 CHAR_PLUS: '+', /* + */
17416 CHAR_QUESTION_MARK: '?', /* ? */
17417 CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */
17418 CHAR_RIGHT_CURLY_BRACE: '}', /* } */
17419 CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */
17420 CHAR_SEMICOLON: ';', /* ; */
17421 CHAR_SINGLE_QUOTE: '\'', /* ' */
17422 CHAR_SPACE: ' ', /* */
17423 CHAR_TAB: '\t', /* \t */
17424 CHAR_UNDERSCORE: '_', /* _ */
17425 CHAR_VERTICAL_LINE: '|', /* | */
17426 CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\uFEFF' /* \uFEFF */
17427};
17428
17429
17430/***/ }),
17431/* 82 */
17432/***/ (function(module, exports, __webpack_require__) {
17433
17434"use strict";
17435
17436
17437module.exports = __webpack_require__(83);
17438
17439
17440/***/ }),
17441/* 83 */
17442/***/ (function(module, exports, __webpack_require__) {
17443
17444"use strict";
17445
17446
17447const path = __webpack_require__(13);
17448const scan = __webpack_require__(84);
17449const parse = __webpack_require__(87);
17450const utils = __webpack_require__(85);
17451
17452/**
17453 * Creates a matcher function from one or more glob patterns. The
17454 * returned function takes a string to match as its first argument,
17455 * and returns true if the string is a match. The returned matcher
17456 * function also takes a boolean as the second argument that, when true,
17457 * returns an object with additional information.
17458 *
17459 * ```js
17460 * const picomatch = require('picomatch');
17461 * // picomatch(glob[, options]);
17462 *
17463 * const isMatch = picomatch('*.!(*a)');
17464 * console.log(isMatch('a.a')); //=> false
17465 * console.log(isMatch('a.b')); //=> true
17466 * ```
17467 * @name picomatch
17468 * @param {String|Array} `globs` One or more glob patterns.
17469 * @param {Object=} `options`
17470 * @return {Function=} Returns a matcher function.
17471 * @api public
17472 */
17473
17474const picomatch = (glob, options, returnState = false) => {
17475 if (Array.isArray(glob)) {
17476 let fns = glob.map(input => picomatch(input, options, returnState));
17477 return str => {
17478 for (let isMatch of fns) {
17479 let state = isMatch(str);
17480 if (state) return state;
17481 }
17482 return false;
17483 };
17484 }
17485
17486 if (typeof glob !== 'string' || glob === '') {
17487 throw new TypeError('Expected pattern to be a non-empty string');
17488 }
17489
17490 let opts = options || {};
17491 let posix = utils.isWindows(options);
17492 let regex = picomatch.makeRe(glob, options, false, true);
17493 let state = regex.state;
17494 delete regex.state;
17495
17496 let isIgnored = () => false;
17497 if (opts.ignore) {
17498 let ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
17499 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
17500 }
17501
17502 const matcher = (input, returnObject = false) => {
17503 let { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
17504 let result = { glob, state, regex, posix, input, output, match, isMatch };
17505
17506 if (typeof opts.onResult === 'function') {
17507 opts.onResult(result);
17508 }
17509
17510 if (isMatch === false) {
17511 result.isMatch = false;
17512 return returnObject ? result : false;
17513 }
17514
17515 if (isIgnored(input)) {
17516 if (typeof opts.onIgnore === 'function') {
17517 opts.onIgnore(result);
17518 }
17519 result.isMatch = false;
17520 return returnObject ? result : false;
17521 }
17522
17523 if (typeof opts.onMatch === 'function') {
17524 opts.onMatch(result);
17525 }
17526 return returnObject ? result : true;
17527 };
17528
17529 if (returnState) {
17530 matcher.state = state;
17531 }
17532
17533 return matcher;
17534};
17535
17536/**
17537 * Test `input` with the given `regex`. This is used by the main
17538 * `picomatch()` function to test the input string.
17539 *
17540 * ```js
17541 * const picomatch = require('picomatch');
17542 * // picomatch.test(input, regex[, options]);
17543 *
17544 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
17545 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
17546 * ```
17547 * @param {String} `input` String to test.
17548 * @param {RegExp} `regex`
17549 * @return {Object} Returns an object with matching info.
17550 * @api public
17551 */
17552
17553picomatch.test = (input, regex, options, { glob, posix } = {}) => {
17554 if (typeof input !== 'string') {
17555 throw new TypeError('Expected input to be a string');
17556 }
17557
17558 if (input === '') {
17559 return { isMatch: false, output: '' };
17560 }
17561
17562 let opts = options || {};
17563 let format = opts.format || (posix ? utils.toPosixSlashes : null);
17564 let match = input === glob;
17565 let output = (match && format) ? format(input) : input;
17566
17567 if (match === false) {
17568 output = format ? format(input) : input;
17569 match = output === glob;
17570 }
17571
17572 if (match === false || opts.capture === true) {
17573 if (opts.matchBase === true || opts.basename === true) {
17574 match = picomatch.matchBase(input, regex, options, posix);
17575 } else {
17576 match = regex.exec(output);
17577 }
17578 }
17579
17580 return { isMatch: !!match, match, output };
17581};
17582
17583/**
17584 * Match the basename of a filepath.
17585 *
17586 * ```js
17587 * const picomatch = require('picomatch');
17588 * // picomatch.matchBase(input, glob[, options]);
17589 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
17590 * ```
17591 * @param {String} `input` String to test.
17592 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
17593 * @return {Boolean}
17594 * @api public
17595 */
17596
17597picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
17598 let regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
17599 return regex.test(path.basename(input));
17600};
17601
17602/**
17603 * Returns true if **any** of the given glob `patterns` match the specified `string`.
17604 *
17605 * ```js
17606 * const picomatch = require('picomatch');
17607 * // picomatch.isMatch(string, patterns[, options]);
17608 *
17609 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
17610 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
17611 * ```
17612 * @param {String|Array} str The string to test.
17613 * @param {String|Array} patterns One or more glob patterns to use for matching.
17614 * @param {Object} [options] See available [options](#options).
17615 * @return {Boolean} Returns true if any patterns match `str`
17616 * @api public
17617 */
17618
17619picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
17620
17621/**
17622 * Parse a glob pattern to create the source string for a regular
17623 * expression.
17624 *
17625 * ```js
17626 * const picomatch = require('picomatch');
17627 * const result = picomatch.parse(glob[, options]);
17628 * ```
17629 * @param {String} `glob`
17630 * @param {Object} `options`
17631 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
17632 * @api public
17633 */
17634
17635picomatch.parse = (glob, options) => parse(glob, options);
17636
17637/**
17638 * Scan a glob pattern to separate the pattern into segments.
17639 *
17640 * ```js
17641 * const picomatch = require('picomatch');
17642 * // picomatch.scan(input[, options]);
17643 *
17644 * const result = picomatch.scan('!./foo/*.js');
17645 * console.log(result);
17646 * // { prefix: '!./',
17647 * // input: '!./foo/*.js',
17648 * // base: 'foo',
17649 * // glob: '*.js',
17650 * // negated: true,
17651 * // isGlob: true }
17652 * ```
17653 * @param {String} `input` Glob pattern to scan.
17654 * @param {Object} `options`
17655 * @return {Object} Returns an object with
17656 * @api public
17657 */
17658
17659picomatch.scan = (input, options) => scan(input, options);
17660
17661/**
17662 * Create a regular expression from a glob pattern.
17663 *
17664 * ```js
17665 * const picomatch = require('picomatch');
17666 * // picomatch.makeRe(input[, options]);
17667 *
17668 * console.log(picomatch.makeRe('*.js'));
17669 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17670 * ```
17671 * @param {String} `input` A glob pattern to convert to regex.
17672 * @param {Object} `options`
17673 * @return {RegExp} Returns a regex created from the given pattern.
17674 * @api public
17675 */
17676
17677picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
17678 if (!input || typeof input !== 'string') {
17679 throw new TypeError('Expected a non-empty string');
17680 }
17681
17682 let opts = options || {};
17683 let prepend = opts.contains ? '' : '^';
17684 let append = opts.contains ? '' : '$';
17685 let state = { negated: false, fastpaths: true };
17686 let prefix = '';
17687 let output;
17688
17689 if (input.startsWith('./')) {
17690 input = input.slice(2);
17691 prefix = state.prefix = './';
17692 }
17693
17694 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
17695 output = parse.fastpaths(input, options);
17696 }
17697
17698 if (output === void 0) {
17699 state = picomatch.parse(input, options);
17700 state.prefix = prefix + (state.prefix || '');
17701 output = state.output;
17702 }
17703
17704 if (returnOutput === true) {
17705 return output;
17706 }
17707
17708 let source = `${prepend}(?:${output})${append}`;
17709 if (state && state.negated === true) {
17710 source = `^(?!${source}).*$`;
17711 }
17712
17713 let regex = picomatch.toRegex(source, options);
17714 if (returnState === true) {
17715 regex.state = state;
17716 }
17717
17718 return regex;
17719};
17720
17721/**
17722 * Create a regular expression from the given regex source string.
17723 *
17724 * ```js
17725 * const picomatch = require('picomatch');
17726 * // picomatch.toRegex(source[, options]);
17727 *
17728 * const { output } = picomatch.parse('*.js');
17729 * console.log(picomatch.toRegex(output));
17730 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
17731 * ```
17732 * @param {String} `source` Regular expression source string.
17733 * @param {Object} `options`
17734 * @return {RegExp}
17735 * @api public
17736 */
17737
17738picomatch.toRegex = (source, options) => {
17739 try {
17740 let opts = options || {};
17741 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
17742 } catch (err) {
17743 if (options && options.debug === true) throw err;
17744 return /$^/;
17745 }
17746};
17747
17748/**
17749 * Picomatch constants.
17750 * @return {Object}
17751 */
17752
17753picomatch.constants = __webpack_require__(86);
17754
17755/**
17756 * Expose "picomatch"
17757 */
17758
17759module.exports = picomatch;
17760
17761
17762/***/ }),
17763/* 84 */
17764/***/ (function(module, exports, __webpack_require__) {
17765
17766"use strict";
17767
17768
17769const utils = __webpack_require__(85);
17770
17771const {
17772 CHAR_ASTERISK, /* * */
17773 CHAR_AT, /* @ */
17774 CHAR_BACKWARD_SLASH, /* \ */
17775 CHAR_COMMA, /* , */
17776 CHAR_DOT, /* . */
17777 CHAR_EXCLAMATION_MARK, /* ! */
17778 CHAR_FORWARD_SLASH, /* / */
17779 CHAR_LEFT_CURLY_BRACE, /* { */
17780 CHAR_LEFT_PARENTHESES, /* ( */
17781 CHAR_LEFT_SQUARE_BRACKET, /* [ */
17782 CHAR_PLUS, /* + */
17783 CHAR_QUESTION_MARK, /* ? */
17784 CHAR_RIGHT_CURLY_BRACE, /* } */
17785 CHAR_RIGHT_PARENTHESES, /* ) */
17786 CHAR_RIGHT_SQUARE_BRACKET /* ] */
17787} = __webpack_require__(86);
17788
17789const isPathSeparator = code => {
17790 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
17791};
17792
17793/**
17794 * Quickly scans a glob pattern and returns an object with a handful of
17795 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
17796 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
17797 *
17798 * ```js
17799 * const pm = require('picomatch');
17800 * console.log(pm.scan('foo/bar/*.js'));
17801 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
17802 * ```
17803 * @param {String} `str`
17804 * @param {Object} `options`
17805 * @return {Object} Returns an object with tokens and regex source string.
17806 * @api public
17807 */
17808
17809module.exports = (input, options) => {
17810 let opts = options || {};
17811 let length = input.length - 1;
17812 let index = -1;
17813 let start = 0;
17814 let lastIndex = 0;
17815 let isGlob = false;
17816 let backslashes = false;
17817 let negated = false;
17818 let braces = 0;
17819 let prev;
17820 let code;
17821
17822 let braceEscaped = false;
17823
17824 let eos = () => index >= length;
17825 let advance = () => {
17826 prev = code;
17827 return input.charCodeAt(++index);
17828 };
17829
17830 while (index < length) {
17831 code = advance();
17832 let next;
17833
17834 if (code === CHAR_BACKWARD_SLASH) {
17835 backslashes = true;
17836 next = advance();
17837
17838 if (next === CHAR_LEFT_CURLY_BRACE) {
17839 braceEscaped = true;
17840 }
17841 continue;
17842 }
17843
17844 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
17845 braces++;
17846
17847 while (!eos() && (next = advance())) {
17848 if (next === CHAR_BACKWARD_SLASH) {
17849 backslashes = true;
17850 next = advance();
17851 continue;
17852 }
17853
17854 if (next === CHAR_LEFT_CURLY_BRACE) {
17855 braces++;
17856 continue;
17857 }
17858
17859 if (!braceEscaped && next === CHAR_DOT && (next = advance()) === CHAR_DOT) {
17860 isGlob = true;
17861 break;
17862 }
17863
17864 if (!braceEscaped && next === CHAR_COMMA) {
17865 isGlob = true;
17866 break;
17867 }
17868
17869 if (next === CHAR_RIGHT_CURLY_BRACE) {
17870 braces--;
17871 if (braces === 0) {
17872 braceEscaped = false;
17873 break;
17874 }
17875 }
17876 }
17877 }
17878
17879 if (code === CHAR_FORWARD_SLASH) {
17880 if (prev === CHAR_DOT && index === (start + 1)) {
17881 start += 2;
17882 continue;
17883 }
17884
17885 lastIndex = index + 1;
17886 continue;
17887 }
17888
17889 if (code === CHAR_ASTERISK) {
17890 isGlob = true;
17891 break;
17892 }
17893
17894 if (code === CHAR_ASTERISK || code === CHAR_QUESTION_MARK) {
17895 isGlob = true;
17896 break;
17897 }
17898
17899 if (code === CHAR_LEFT_SQUARE_BRACKET) {
17900 while (!eos() && (next = advance())) {
17901 if (next === CHAR_BACKWARD_SLASH) {
17902 backslashes = true;
17903 next = advance();
17904 continue;
17905 }
17906
17907 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
17908 isGlob = true;
17909 break;
17910 }
17911 }
17912 }
17913
17914 let isExtglobChar = code === CHAR_PLUS
17915 || code === CHAR_AT
17916 || code === CHAR_EXCLAMATION_MARK;
17917
17918 if (isExtglobChar && input.charCodeAt(index + 1) === CHAR_LEFT_PARENTHESES) {
17919 isGlob = true;
17920 break;
17921 }
17922
17923 if (code === CHAR_EXCLAMATION_MARK && index === start) {
17924 negated = true;
17925 start++;
17926 continue;
17927 }
17928
17929 if (code === CHAR_LEFT_PARENTHESES) {
17930 while (!eos() && (next = advance())) {
17931 if (next === CHAR_BACKWARD_SLASH) {
17932 backslashes = true;
17933 next = advance();
17934 continue;
17935 }
17936
17937 if (next === CHAR_RIGHT_PARENTHESES) {
17938 isGlob = true;
17939 break;
17940 }
17941 }
17942 }
17943
17944 if (isGlob) {
17945 break;
17946 }
17947 }
17948
17949 let prefix = '';
17950 let orig = input;
17951 let base = input;
17952 let glob = '';
17953
17954 if (start > 0) {
17955 prefix = input.slice(0, start);
17956 input = input.slice(start);
17957 lastIndex -= start;
17958 }
17959
17960 if (base && isGlob === true && lastIndex > 0) {
17961 base = input.slice(0, lastIndex);
17962 glob = input.slice(lastIndex);
17963 } else if (isGlob === true) {
17964 base = '';
17965 glob = input;
17966 } else {
17967 base = input;
17968 }
17969
17970 if (base && base !== '' && base !== '/' && base !== input) {
17971 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
17972 base = base.slice(0, -1);
17973 }
17974 }
17975
17976 if (opts.unescape === true) {
17977 if (glob) glob = utils.removeBackslashes(glob);
17978
17979 if (base && backslashes === true) {
17980 base = utils.removeBackslashes(base);
17981 }
17982 }
17983
17984 return { prefix, input: orig, base, glob, negated, isGlob };
17985};
17986
17987
17988/***/ }),
17989/* 85 */
17990/***/ (function(module, exports, __webpack_require__) {
17991
17992"use strict";
17993
17994
17995const path = __webpack_require__(13);
17996const win32 = process.platform === 'win32';
17997const {
17998 REGEX_SPECIAL_CHARS,
17999 REGEX_SPECIAL_CHARS_GLOBAL,
18000 REGEX_REMOVE_BACKSLASH
18001} = __webpack_require__(86);
18002
18003exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
18004exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
18005exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
18006exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
18007exports.toPosixSlashes = str => str.replace(/\\/g, '/');
18008
18009exports.removeBackslashes = str => {
18010 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
18011 return match === '\\' ? '' : match;
18012 });
18013}
18014
18015exports.supportsLookbehinds = () => {
18016 let segs = process.version.slice(1).split('.');
18017 if (segs.length === 3 && +segs[0] >= 9 || (+segs[0] === 8 && +segs[1] >= 10)) {
18018 return true;
18019 }
18020 return false;
18021};
18022
18023exports.isWindows = options => {
18024 if (options && typeof options.windows === 'boolean') {
18025 return options.windows;
18026 }
18027 return win32 === true || path.sep === '\\';
18028};
18029
18030exports.escapeLast = (input, char, lastIdx) => {
18031 let idx = input.lastIndexOf(char, lastIdx);
18032 if (idx === -1) return input;
18033 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
18034 return input.slice(0, idx) + '\\' + input.slice(idx);
18035};
18036
18037
18038/***/ }),
18039/* 86 */
18040/***/ (function(module, exports, __webpack_require__) {
18041
18042"use strict";
18043
18044
18045const path = __webpack_require__(13);
18046const WIN_SLASH = '\\\\/';
18047const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
18048
18049/**
18050 * Posix glob regex
18051 */
18052
18053const DOT_LITERAL = '\\.';
18054const PLUS_LITERAL = '\\+';
18055const QMARK_LITERAL = '\\?';
18056const SLASH_LITERAL = '\\/';
18057const ONE_CHAR = '(?=.)';
18058const QMARK = '[^/]';
18059const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
18060const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
18061const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
18062const NO_DOT = `(?!${DOT_LITERAL})`;
18063const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
18064const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
18065const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
18066const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
18067const STAR = `${QMARK}*?`;
18068
18069const POSIX_CHARS = {
18070 DOT_LITERAL,
18071 PLUS_LITERAL,
18072 QMARK_LITERAL,
18073 SLASH_LITERAL,
18074 ONE_CHAR,
18075 QMARK,
18076 END_ANCHOR,
18077 DOTS_SLASH,
18078 NO_DOT,
18079 NO_DOTS,
18080 NO_DOT_SLASH,
18081 NO_DOTS_SLASH,
18082 QMARK_NO_DOT,
18083 STAR,
18084 START_ANCHOR
18085};
18086
18087/**
18088 * Windows glob regex
18089 */
18090
18091const WINDOWS_CHARS = {
18092 ...POSIX_CHARS,
18093
18094 SLASH_LITERAL: `[${WIN_SLASH}]`,
18095 QMARK: WIN_NO_SLASH,
18096 STAR: `${WIN_NO_SLASH}*?`,
18097 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
18098 NO_DOT: `(?!${DOT_LITERAL})`,
18099 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18100 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
18101 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
18102 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
18103 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
18104 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
18105};
18106
18107/**
18108 * POSIX Bracket Regex
18109 */
18110
18111const POSIX_REGEX_SOURCE = {
18112 alnum: 'a-zA-Z0-9',
18113 alpha: 'a-zA-Z',
18114 ascii: '\\x00-\\x7F',
18115 blank: ' \\t',
18116 cntrl: '\\x00-\\x1F\\x7F',
18117 digit: '0-9',
18118 graph: '\\x21-\\x7E',
18119 lower: 'a-z',
18120 print: '\\x20-\\x7E ',
18121 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
18122 space: ' \\t\\r\\n\\v\\f',
18123 upper: 'A-Z',
18124 word: 'A-Za-z0-9_',
18125 xdigit: 'A-Fa-f0-9'
18126};
18127
18128module.exports = {
18129 MAX_LENGTH: 1024 * 64,
18130 POSIX_REGEX_SOURCE,
18131
18132 // regular expressions
18133 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
18134 REGEX_NON_SPECIAL_CHAR: /^[^@![\].,$*+?^{}()|\\/]+/,
18135 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
18136 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
18137 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
18138 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
18139
18140 // Replace globs with equivalent patterns to reduce parsing time.
18141 REPLACEMENTS: {
18142 '***': '*',
18143 '**/**': '**',
18144 '**/**/**': '**'
18145 },
18146
18147 // Digits
18148 CHAR_0: 48, /* 0 */
18149 CHAR_9: 57, /* 9 */
18150
18151 // Alphabet chars.
18152 CHAR_UPPERCASE_A: 65, /* A */
18153 CHAR_LOWERCASE_A: 97, /* a */
18154 CHAR_UPPERCASE_Z: 90, /* Z */
18155 CHAR_LOWERCASE_Z: 122, /* z */
18156
18157 CHAR_LEFT_PARENTHESES: 40, /* ( */
18158 CHAR_RIGHT_PARENTHESES: 41, /* ) */
18159
18160 CHAR_ASTERISK: 42, /* * */
18161
18162 // Non-alphabetic chars.
18163 CHAR_AMPERSAND: 38, /* & */
18164 CHAR_AT: 64, /* @ */
18165 CHAR_BACKWARD_SLASH: 92, /* \ */
18166 CHAR_CARRIAGE_RETURN: 13, /* \r */
18167 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
18168 CHAR_COLON: 58, /* : */
18169 CHAR_COMMA: 44, /* , */
18170 CHAR_DOT: 46, /* . */
18171 CHAR_DOUBLE_QUOTE: 34, /* " */
18172 CHAR_EQUAL: 61, /* = */
18173 CHAR_EXCLAMATION_MARK: 33, /* ! */
18174 CHAR_FORM_FEED: 12, /* \f */
18175 CHAR_FORWARD_SLASH: 47, /* / */
18176 CHAR_GRAVE_ACCENT: 96, /* ` */
18177 CHAR_HASH: 35, /* # */
18178 CHAR_HYPHEN_MINUS: 45, /* - */
18179 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
18180 CHAR_LEFT_CURLY_BRACE: 123, /* { */
18181 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
18182 CHAR_LINE_FEED: 10, /* \n */
18183 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
18184 CHAR_PERCENT: 37, /* % */
18185 CHAR_PLUS: 43, /* + */
18186 CHAR_QUESTION_MARK: 63, /* ? */
18187 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
18188 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
18189 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
18190 CHAR_SEMICOLON: 59, /* ; */
18191 CHAR_SINGLE_QUOTE: 39, /* ' */
18192 CHAR_SPACE: 32, /* */
18193 CHAR_TAB: 9, /* \t */
18194 CHAR_UNDERSCORE: 95, /* _ */
18195 CHAR_VERTICAL_LINE: 124, /* | */
18196 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
18197
18198 SEP: path.sep,
18199
18200 /**
18201 * Create EXTGLOB_CHARS
18202 */
18203
18204 extglobChars(chars) {
18205 return {
18206 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
18207 '?': { type: 'qmark', open: '(?:', close: ')?' },
18208 '+': { type: 'plus', open: '(?:', close: ')+' },
18209 '*': { type: 'star', open: '(?:', close: ')*' },
18210 '@': { type: 'at', open: '(?:', close: ')' }
18211 };
18212 },
18213
18214 /**
18215 * Create GLOB_CHARS
18216 */
18217
18218 globChars(win32) {
18219 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
18220 }
18221};
18222
18223
18224/***/ }),
18225/* 87 */
18226/***/ (function(module, exports, __webpack_require__) {
18227
18228"use strict";
18229
18230
18231const utils = __webpack_require__(85);
18232const constants = __webpack_require__(86);
18233
18234/**
18235 * Constants
18236 */
18237
18238const {
18239 MAX_LENGTH,
18240 POSIX_REGEX_SOURCE,
18241 REGEX_NON_SPECIAL_CHAR,
18242 REGEX_SPECIAL_CHARS_BACKREF,
18243 REPLACEMENTS
18244} = constants;
18245
18246/**
18247 * Helpers
18248 */
18249
18250const expandRange = (args, options) => {
18251 if (typeof options.expandRange === 'function') {
18252 return options.expandRange(...args, options);
18253 }
18254
18255 args.sort();
18256 let value = `[${args.join('-')}]`;
18257
18258 try {
18259 /* eslint-disable no-new */
18260 new RegExp(value);
18261 } catch (ex) {
18262 return args.map(v => utils.escapeRegex(v)).join('..');
18263 }
18264
18265 return value;
18266};
18267
18268const negate = state => {
18269 let count = 1;
18270
18271 while (state.peek() === '!' && (state.peek(2) !== '(' || state.peek(3) === '?')) {
18272 state.advance();
18273 state.start++;
18274 count++;
18275 }
18276
18277 if (count % 2 === 0) {
18278 return false;
18279 }
18280
18281 state.negated = true;
18282 state.start++;
18283 return true;
18284};
18285
18286/**
18287 * Create the message for a syntax error
18288 */
18289
18290const syntaxError = (type, char) => {
18291 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
18292};
18293
18294/**
18295 * Parse the given input string.
18296 * @param {String} input
18297 * @param {Object} options
18298 * @return {Object}
18299 */
18300
18301const parse = (input, options) => {
18302 if (typeof input !== 'string') {
18303 throw new TypeError('Expected a string');
18304 }
18305
18306 input = REPLACEMENTS[input] || input;
18307
18308 let opts = { ...options };
18309 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
18310 let len = input.length;
18311 if (len > max) {
18312 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
18313 }
18314
18315 let bos = { type: 'bos', value: '', output: opts.prepend || '' };
18316 let tokens = [bos];
18317
18318 let capture = opts.capture ? '' : '?:';
18319 let win32 = utils.isWindows(options);
18320
18321 // create constants based on platform, for windows or posix
18322 const PLATFORM_CHARS = constants.globChars(win32);
18323 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
18324
18325 const {
18326 DOT_LITERAL,
18327 PLUS_LITERAL,
18328 SLASH_LITERAL,
18329 ONE_CHAR,
18330 DOTS_SLASH,
18331 NO_DOT,
18332 NO_DOT_SLASH,
18333 NO_DOTS_SLASH,
18334 QMARK,
18335 QMARK_NO_DOT,
18336 STAR,
18337 START_ANCHOR
18338 } = PLATFORM_CHARS;
18339
18340 const globstar = (opts) => {
18341 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
18342 };
18343
18344 let nodot = opts.dot ? '' : NO_DOT;
18345 let star = opts.bash === true ? globstar(opts) : STAR;
18346 let qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
18347
18348 if (opts.capture) {
18349 star = `(${star})`;
18350 }
18351
18352 // minimatch options support
18353 if (typeof opts.noext === 'boolean') {
18354 opts.noextglob = opts.noext;
18355 }
18356
18357 let state = {
18358 index: -1,
18359 start: 0,
18360 consumed: '',
18361 output: '',
18362 backtrack: false,
18363 brackets: 0,
18364 braces: 0,
18365 parens: 0,
18366 quotes: 0,
18367 tokens
18368 };
18369
18370 let extglobs = [];
18371 let stack = [];
18372 let prev = bos;
18373 let value;
18374
18375 /**
18376 * Tokenizing helpers
18377 */
18378
18379 const eos = () => state.index === len - 1;
18380 const peek = state.peek = (n = 1) => input[state.index + n];
18381 const advance = state.advance = () => input[++state.index];
18382 const append = token => {
18383 state.output += token.output != null ? token.output : token.value;
18384 state.consumed += token.value || '';
18385 };
18386
18387 const increment = type => {
18388 state[type]++;
18389 stack.push(type);
18390 };
18391
18392 const decrement = type => {
18393 state[type]--;
18394 stack.pop();
18395 };
18396
18397 /**
18398 * Push tokens onto the tokens array. This helper speeds up
18399 * tokenizing by 1) helping us avoid backtracking as much as possible,
18400 * and 2) helping us avoid creating extra tokens when consecutive
18401 * characters are plain text. This improves performance and simplifies
18402 * lookbehinds.
18403 */
18404
18405 const push = tok => {
18406 if (prev.type === 'globstar') {
18407 let isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
18408 let isExtglob = extglobs.length && (tok.type === 'pipe' || tok.type === 'paren');
18409 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
18410 state.output = state.output.slice(0, -prev.output.length);
18411 prev.type = 'star';
18412 prev.value = '*';
18413 prev.output = star;
18414 state.output += prev.output;
18415 }
18416 }
18417
18418 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
18419 extglobs[extglobs.length - 1].inner += tok.value;
18420 }
18421
18422 if (tok.value || tok.output) append(tok);
18423 if (prev && prev.type === 'text' && tok.type === 'text') {
18424 prev.value += tok.value;
18425 return;
18426 }
18427
18428 tok.prev = prev;
18429 tokens.push(tok);
18430 prev = tok;
18431 };
18432
18433 const extglobOpen = (type, value) => {
18434 let token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
18435
18436 token.prev = prev;
18437 token.parens = state.parens;
18438 token.output = state.output;
18439 let output = (opts.capture ? '(' : '') + token.open;
18440
18441 push({ type, value, output: state.output ? '' : ONE_CHAR });
18442 push({ type: 'paren', extglob: true, value: advance(), output });
18443 increment('parens');
18444 extglobs.push(token);
18445 };
18446
18447 const extglobClose = token => {
18448 let output = token.close + (opts.capture ? ')' : '');
18449
18450 if (token.type === 'negate') {
18451 let extglobStar = star;
18452
18453 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
18454 extglobStar = globstar(opts);
18455 }
18456
18457 if (extglobStar !== star || eos() || /^\)+$/.test(input.slice(state.index + 1))) {
18458 output = token.close = ')$))' + extglobStar;
18459 }
18460
18461 if (token.prev.type === 'bos' && eos()) {
18462 state.negatedExtglob = true;
18463 }
18464 }
18465
18466 push({ type: 'paren', extglob: true, value, output });
18467 decrement('parens');
18468 };
18469
18470 if (opts.fastpaths !== false && !/(^[*!]|[/{[()\]}"])/.test(input)) {
18471 let backslashes = false;
18472
18473 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
18474 if (first === '\\') {
18475 backslashes = true;
18476 return m;
18477 }
18478
18479 if (first === '?') {
18480 if (esc) {
18481 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
18482 }
18483 if (index === 0) {
18484 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
18485 }
18486 return QMARK.repeat(chars.length);
18487 }
18488
18489 if (first === '.') {
18490 return DOT_LITERAL.repeat(chars.length);
18491 }
18492
18493 if (first === '*') {
18494 if (esc) {
18495 return esc + first + (rest ? star : '');
18496 }
18497 return star;
18498 }
18499 return esc ? m : '\\' + m;
18500 });
18501
18502 if (backslashes === true) {
18503 if (opts.unescape === true) {
18504 output = output.replace(/\\/g, '');
18505 } else {
18506 output = output.replace(/\\+/g, m => {
18507 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
18508 });
18509 }
18510 }
18511
18512 state.output = output;
18513 return state;
18514 }
18515
18516 /**
18517 * Tokenize input until we reach end-of-string
18518 */
18519
18520 while (!eos()) {
18521 value = advance();
18522
18523 if (value === '\u0000') {
18524 continue;
18525 }
18526
18527 /**
18528 * Escaped characters
18529 */
18530
18531 if (value === '\\') {
18532 let next = peek();
18533
18534 if (next === '/' && opts.bash !== true) {
18535 continue;
18536 }
18537
18538 if (next === '.' || next === ';') {
18539 continue;
18540 }
18541
18542 if (!next) {
18543 value += '\\';
18544 push({ type: 'text', value });
18545 continue;
18546 }
18547
18548 // collapse slashes to reduce potential for exploits
18549 let match = /^\\+/.exec(input.slice(state.index + 1));
18550 let slashes = 0;
18551
18552 if (match && match[0].length > 2) {
18553 slashes = match[0].length;
18554 state.index += slashes;
18555 if (slashes % 2 !== 0) {
18556 value += '\\';
18557 }
18558 }
18559
18560 if (opts.unescape === true) {
18561 value = advance() || '';
18562 } else {
18563 value += advance() || '';
18564 }
18565
18566 if (state.brackets === 0) {
18567 push({ type: 'text', value });
18568 continue;
18569 }
18570 }
18571
18572 /**
18573 * If we're inside a regex character class, continue
18574 * until we reach the closing bracket.
18575 */
18576
18577 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
18578 if (opts.posix !== false && value === ':') {
18579 let inner = prev.value.slice(1);
18580 if (inner.includes('[')) {
18581 prev.posix = true;
18582
18583 if (inner.includes(':')) {
18584 let idx = prev.value.lastIndexOf('[');
18585 let pre = prev.value.slice(0, idx);
18586 let rest = prev.value.slice(idx + 2);
18587 let posix = POSIX_REGEX_SOURCE[rest];
18588 if (posix) {
18589 prev.value = pre + posix;
18590 state.backtrack = true;
18591 advance();
18592
18593 if (!bos.output && tokens.indexOf(prev) === 1) {
18594 bos.output = ONE_CHAR;
18595 }
18596 continue;
18597 }
18598 }
18599 }
18600 }
18601
18602 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
18603 value = '\\' + value;
18604 }
18605
18606 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
18607 value = '\\' + value;
18608 }
18609
18610 if (opts.posix === true && value === '!' && prev.value === '[') {
18611 value = '^';
18612 }
18613
18614 prev.value += value;
18615 append({ value });
18616 continue;
18617 }
18618
18619 /**
18620 * If we're inside a quoted string, continue
18621 * until we reach the closing double quote.
18622 */
18623
18624 if (state.quotes === 1 && value !== '"') {
18625 value = utils.escapeRegex(value);
18626 prev.value += value;
18627 append({ value });
18628 continue;
18629 }
18630
18631 /**
18632 * Double quotes
18633 */
18634
18635 if (value === '"') {
18636 state.quotes = state.quotes === 1 ? 0 : 1;
18637 if (opts.keepQuotes === true) {
18638 push({ type: 'text', value });
18639 }
18640 continue;
18641 }
18642
18643 /**
18644 * Parentheses
18645 */
18646
18647 if (value === '(') {
18648 push({ type: 'paren', value });
18649 increment('parens');
18650 continue;
18651 }
18652
18653 if (value === ')') {
18654 if (state.parens === 0 && opts.strictBrackets === true) {
18655 throw new SyntaxError(syntaxError('opening', '('));
18656 }
18657
18658 let extglob = extglobs[extglobs.length - 1];
18659 if (extglob && state.parens === extglob.parens + 1) {
18660 extglobClose(extglobs.pop());
18661 continue;
18662 }
18663
18664 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
18665 decrement('parens');
18666 continue;
18667 }
18668
18669 /**
18670 * Brackets
18671 */
18672
18673 if (value === '[') {
18674 if (opts.nobracket === true || !input.slice(state.index + 1).includes(']')) {
18675 if (opts.nobracket !== true && opts.strictBrackets === true) {
18676 throw new SyntaxError(syntaxError('closing', ']'));
18677 }
18678
18679 value = '\\' + value;
18680 } else {
18681 increment('brackets');
18682 }
18683
18684 push({ type: 'bracket', value });
18685 continue;
18686 }
18687
18688 if (value === ']') {
18689 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
18690 push({ type: 'text', value, output: '\\' + value });
18691 continue;
18692 }
18693
18694 if (state.brackets === 0) {
18695 if (opts.strictBrackets === true) {
18696 throw new SyntaxError(syntaxError('opening', '['));
18697 }
18698
18699 push({ type: 'text', value, output: '\\' + value });
18700 continue;
18701 }
18702
18703 decrement('brackets');
18704
18705 let prevValue = prev.value.slice(1);
18706 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
18707 value = '/' + value;
18708 }
18709
18710 prev.value += value;
18711 append({ value });
18712
18713 // when literal brackets are explicitly disabled
18714 // assume we should match with a regex character class
18715 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
18716 continue;
18717 }
18718
18719 let escaped = utils.escapeRegex(prev.value);
18720 state.output = state.output.slice(0, -prev.value.length);
18721
18722 // when literal brackets are explicitly enabled
18723 // assume we should escape the brackets to match literal characters
18724 if (opts.literalBrackets === true) {
18725 state.output += escaped;
18726 prev.value = escaped;
18727 continue;
18728 }
18729
18730 // when the user specifies nothing, try to match both
18731 prev.value = `(${capture}${escaped}|${prev.value})`;
18732 state.output += prev.value;
18733 continue;
18734 }
18735
18736 /**
18737 * Braces
18738 */
18739
18740 if (value === '{' && opts.nobrace !== true) {
18741 push({ type: 'brace', value, output: '(' });
18742 increment('braces');
18743 continue;
18744 }
18745
18746 if (value === '}') {
18747 if (opts.nobrace === true || state.braces === 0) {
18748 push({ type: 'text', value, output: '\\' + value });
18749 continue;
18750 }
18751
18752 let output = ')';
18753
18754 if (state.dots === true) {
18755 let arr = tokens.slice();
18756 let range = [];
18757
18758 for (let i = arr.length - 1; i >= 0; i--) {
18759 tokens.pop();
18760 if (arr[i].type === 'brace') {
18761 break;
18762 }
18763 if (arr[i].type !== 'dots') {
18764 range.unshift(arr[i].value);
18765 }
18766 }
18767
18768 output = expandRange(range, opts);
18769 state.backtrack = true;
18770 }
18771
18772 push({ type: 'brace', value, output });
18773 decrement('braces');
18774 continue;
18775 }
18776
18777 /**
18778 * Pipes
18779 */
18780
18781 if (value === '|') {
18782 if (extglobs.length > 0) {
18783 extglobs[extglobs.length - 1].conditions++;
18784 }
18785 push({ type: 'text', value });
18786 continue;
18787 }
18788
18789 /**
18790 * Commas
18791 */
18792
18793 if (value === ',') {
18794 let output = value;
18795
18796 if (state.braces > 0 && stack[stack.length - 1] === 'braces') {
18797 output = '|';
18798 }
18799
18800 push({ type: 'comma', value, output });
18801 continue;
18802 }
18803
18804 /**
18805 * Slashes
18806 */
18807
18808 if (value === '/') {
18809 // if the beginning of the glob is "./", advance the start
18810 // to the current index, and don't add the "./" characters
18811 // to the state. This greatly simplifies lookbehinds when
18812 // checking for BOS characters like "!" and "." (not "./")
18813 if (prev.type === 'dot' && state.index === 1) {
18814 state.start = state.index + 1;
18815 state.consumed = '';
18816 state.output = '';
18817 tokens.pop();
18818 prev = bos; // reset "prev" to the first token
18819 continue;
18820 }
18821
18822 push({ type: 'slash', value, output: SLASH_LITERAL });
18823 continue;
18824 }
18825
18826 /**
18827 * Dots
18828 */
18829
18830 if (value === '.') {
18831 if (state.braces > 0 && prev.type === 'dot') {
18832 if (prev.value === '.') prev.output = DOT_LITERAL;
18833 prev.type = 'dots';
18834 prev.output += value;
18835 prev.value += value;
18836 state.dots = true;
18837 continue;
18838 }
18839
18840 push({ type: 'dot', value, output: DOT_LITERAL });
18841 continue;
18842 }
18843
18844 /**
18845 * Question marks
18846 */
18847
18848 if (value === '?') {
18849 if (prev && prev.type === 'paren') {
18850 let next = peek();
18851 let output = value;
18852
18853 if (next === '<' && !utils.supportsLookbehinds()) {
18854 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
18855 }
18856
18857 if (prev.value === '(' && !/[!=<:]/.test(next) || (next === '<' && !/[!=]/.test(peek(2)))) {
18858 output = '\\' + value;
18859 }
18860
18861 push({ type: 'text', value, output });
18862 continue;
18863 }
18864
18865 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18866 extglobOpen('qmark', value);
18867 continue;
18868 }
18869
18870 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
18871 push({ type: 'qmark', value, output: QMARK_NO_DOT });
18872 continue;
18873 }
18874
18875 push({ type: 'qmark', value, output: QMARK });
18876 continue;
18877 }
18878
18879 /**
18880 * Exclamation
18881 */
18882
18883 if (value === '!') {
18884 if (opts.noextglob !== true && peek() === '(') {
18885 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
18886 extglobOpen('negate', value);
18887 continue;
18888 }
18889 }
18890
18891 if (opts.nonegate !== true && state.index === 0) {
18892 negate(state);
18893 continue;
18894 }
18895 }
18896
18897 /**
18898 * Plus
18899 */
18900
18901 if (value === '+') {
18902 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18903 extglobOpen('plus', value);
18904 continue;
18905 }
18906
18907 if (prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) {
18908 let output = prev.extglob === true ? '\\' + value : value;
18909 push({ type: 'plus', value, output });
18910 continue;
18911 }
18912
18913 // use regex behavior inside parens
18914 if (state.parens > 0 && opts.regex !== false) {
18915 push({ type: 'plus', value });
18916 continue;
18917 }
18918
18919 push({ type: 'plus', value: PLUS_LITERAL });
18920 continue;
18921 }
18922
18923 /**
18924 * Plain text
18925 */
18926
18927 if (value === '@') {
18928 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18929 push({ type: 'at', value, output: '' });
18930 continue;
18931 }
18932
18933 push({ type: 'text', value });
18934 continue;
18935 }
18936
18937 /**
18938 * Plain text
18939 */
18940
18941 if (value !== '*') {
18942 if (value === '$' || value === '^') {
18943 value = '\\' + value;
18944 }
18945
18946 let match = REGEX_NON_SPECIAL_CHAR.exec(input.slice(state.index + 1));
18947 if (match) {
18948 value += match[0];
18949 state.index += match[0].length;
18950 }
18951
18952 push({ type: 'text', value });
18953 continue;
18954 }
18955
18956 /**
18957 * Stars
18958 */
18959
18960 if (prev && (prev.type === 'globstar' || prev.star === true)) {
18961 prev.type = 'star';
18962 prev.star = true;
18963 prev.value += value;
18964 prev.output = star;
18965 state.backtrack = true;
18966 state.consumed += value;
18967 continue;
18968 }
18969
18970 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
18971 extglobOpen('star', value);
18972 continue;
18973 }
18974
18975 if (prev.type === 'star') {
18976 if (opts.noglobstar === true) {
18977 state.consumed += value;
18978 continue;
18979 }
18980
18981 let prior = prev.prev;
18982 let before = prior.prev;
18983 let isStart = prior.type === 'slash' || prior.type === 'bos';
18984 let afterStar = before && (before.type === 'star' || before.type === 'globstar');
18985
18986 if (opts.bash === true && (!isStart || (!eos() && peek() !== '/'))) {
18987 push({ type: 'star', value, output: '' });
18988 continue;
18989 }
18990
18991 let isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
18992 let isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
18993 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
18994 push({ type: 'star', value, output: '' });
18995 continue;
18996 }
18997
18998 // strip consecutive `/**/`
18999 while (input.slice(state.index + 1, state.index + 4) === '/**') {
19000 let after = input[state.index + 4];
19001 if (after && after !== '/') {
19002 break;
19003 }
19004 state.consumed += '/**';
19005 state.index += 3;
19006 }
19007
19008 if (prior.type === 'bos' && eos()) {
19009 prev.type = 'globstar';
19010 prev.value += value;
19011 prev.output = globstar(opts);
19012 state.output = prev.output;
19013 state.consumed += value;
19014 continue;
19015 }
19016
19017 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
19018 state.output = state.output.slice(0, -(prior.output + prev.output).length);
19019 prior.output = '(?:' + prior.output;
19020
19021 prev.type = 'globstar';
19022 prev.output = globstar(opts) + '|$)';
19023 prev.value += value;
19024
19025 state.output += prior.output + prev.output;
19026 state.consumed += value;
19027 continue;
19028 }
19029
19030 let next = peek();
19031 if (prior.type === 'slash' && prior.prev.type !== 'bos' && next === '/') {
19032 let end = peek(2) !== void 0 ? '|$' : '';
19033
19034 state.output = state.output.slice(0, -(prior.output + prev.output).length);
19035 prior.output = '(?:' + prior.output;
19036
19037 prev.type = 'globstar';
19038 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
19039 prev.value += value;
19040
19041 state.output += prior.output + prev.output;
19042 state.consumed += value + advance();
19043
19044 push({ type: 'slash', value, output: '' });
19045 continue;
19046 }
19047
19048 if (prior.type === 'bos' && next === '/') {
19049 prev.type = 'globstar';
19050 prev.value += value;
19051 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
19052 state.output = prev.output;
19053 state.consumed += value + advance();
19054 push({ type: 'slash', value, output: '' });
19055 continue;
19056 }
19057
19058 // remove single star from output
19059 state.output = state.output.slice(0, -prev.output.length);
19060
19061 // reset previous token to globstar
19062 prev.type = 'globstar';
19063 prev.output = globstar(opts);
19064 prev.value += value;
19065
19066 // reset output with globstar
19067 state.output += prev.output;
19068 state.consumed += value;
19069 continue;
19070 }
19071
19072 let token = { type: 'star', value, output: star };
19073
19074 if (opts.bash === true) {
19075 token.output = '.*?';
19076 if (prev.type === 'bos' || prev.type === 'slash') {
19077 token.output = nodot + token.output;
19078 }
19079 push(token);
19080 continue;
19081 }
19082
19083 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
19084 token.output = value;
19085 push(token);
19086 continue;
19087 }
19088
19089 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
19090 if (prev.type === 'dot') {
19091 state.output += NO_DOT_SLASH;
19092 prev.output += NO_DOT_SLASH;
19093
19094 } else if (opts.dot === true) {
19095 state.output += NO_DOTS_SLASH;
19096 prev.output += NO_DOTS_SLASH;
19097
19098 } else {
19099 state.output += nodot;
19100 prev.output += nodot;
19101 }
19102
19103 if (peek() !== '*') {
19104 state.output += ONE_CHAR;
19105 prev.output += ONE_CHAR;
19106 }
19107 }
19108
19109 push(token);
19110 }
19111
19112 while (state.brackets > 0) {
19113 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
19114 state.output = utils.escapeLast(state.output, '[');
19115 decrement('brackets');
19116 }
19117
19118 while (state.parens > 0) {
19119 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
19120 state.output = utils.escapeLast(state.output, '(');
19121 decrement('parens');
19122 }
19123
19124 while (state.braces > 0) {
19125 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
19126 state.output = utils.escapeLast(state.output, '{');
19127 decrement('braces');
19128 }
19129
19130 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
19131 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
19132 }
19133
19134 // rebuild the output if we had to backtrack at any point
19135 if (state.backtrack === true) {
19136 state.output = '';
19137
19138 for (let token of state.tokens) {
19139 state.output += token.output != null ? token.output : token.value;
19140
19141 if (token.suffix) {
19142 state.output += token.suffix;
19143 }
19144 }
19145 }
19146
19147 return state;
19148};
19149
19150/**
19151 * Fast paths for creating regular expressions for common glob patterns.
19152 * This can significantly speed up processing and has very little downside
19153 * impact when none of the fast paths match.
19154 */
19155
19156parse.fastpaths = (input, options) => {
19157 let opts = { ...options };
19158 let max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
19159 let len = input.length;
19160 if (len > max) {
19161 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
19162 }
19163
19164 input = REPLACEMENTS[input] || input;
19165 let win32 = utils.isWindows(options);
19166
19167 // create constants based on platform, for windows or posix
19168 const {
19169 DOT_LITERAL,
19170 SLASH_LITERAL,
19171 ONE_CHAR,
19172 DOTS_SLASH,
19173 NO_DOT,
19174 NO_DOTS,
19175 NO_DOTS_SLASH,
19176 STAR,
19177 START_ANCHOR
19178 } = constants.globChars(win32);
19179
19180 let capture = opts.capture ? '' : '?:';
19181 let star = opts.bash === true ? '.*?' : STAR;
19182 let nodot = opts.dot ? NO_DOTS : NO_DOT;
19183 let slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
19184
19185 if (opts.capture) {
19186 star = `(${star})`;
19187 }
19188
19189 const globstar = (opts) => {
19190 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
19191 };
19192
19193 const create = str => {
19194 switch (str) {
19195 case '*':
19196 return `${nodot}${ONE_CHAR}${star}`;
19197
19198 case '.*':
19199 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
19200
19201 case '*.*':
19202 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19203
19204 case '*/*':
19205 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
19206
19207 case '**':
19208 return nodot + globstar(opts);
19209
19210 case '**/*':
19211 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
19212
19213 case '**/*.*':
19214 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
19215
19216 case '**/.*':
19217 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
19218
19219 default: {
19220 let match = /^(.*?)\.(\w+)$/.exec(str);
19221 if (!match) return;
19222
19223 let source = create(match[1], options);
19224 if (!source) return;
19225
19226 return source + DOT_LITERAL + match[2];
19227 }
19228 }
19229 };
19230
19231 let output = create(input);
19232 if (output && opts.strictSlashes !== true) {
19233 output += `${SLASH_LITERAL}?`;
19234 }
19235
19236 return output;
19237};
19238
19239module.exports = parse;
19240
19241
19242/***/ }),
19243/* 88 */
19244/***/ (function(module, exports, __webpack_require__) {
19245
19246"use strict";
19247
19248
19249module.exports = __webpack_require__(89);
19250
19251
19252/***/ }),
19253/* 89 */
19254/***/ (function(module, exports, __webpack_require__) {
19255
19256"use strict";
19257
19258
19259const path = __webpack_require__(13);
19260const scan = __webpack_require__(90);
19261const parse = __webpack_require__(93);
19262const utils = __webpack_require__(91);
19263const constants = __webpack_require__(92);
19264const isObject = val => val && typeof val === 'object' && !Array.isArray(val);
19265
19266/**
19267 * Creates a matcher function from one or more glob patterns. The
19268 * returned function takes a string to match as its first argument,
19269 * and returns true if the string is a match. The returned matcher
19270 * function also takes a boolean as the second argument that, when true,
19271 * returns an object with additional information.
19272 *
19273 * ```js
19274 * const picomatch = require('picomatch');
19275 * // picomatch(glob[, options]);
19276 *
19277 * const isMatch = picomatch('*.!(*a)');
19278 * console.log(isMatch('a.a')); //=> false
19279 * console.log(isMatch('a.b')); //=> true
19280 * ```
19281 * @name picomatch
19282 * @param {String|Array} `globs` One or more glob patterns.
19283 * @param {Object=} `options`
19284 * @return {Function=} Returns a matcher function.
19285 * @api public
19286 */
19287
19288const picomatch = (glob, options, returnState = false) => {
19289 if (Array.isArray(glob)) {
19290 const fns = glob.map(input => picomatch(input, options, returnState));
19291 const arrayMatcher = str => {
19292 for (const isMatch of fns) {
19293 const state = isMatch(str);
19294 if (state) return state;
19295 }
19296 return false;
19297 };
19298 return arrayMatcher;
19299 }
19300
19301 const isState = isObject(glob) && glob.tokens && glob.input;
19302
19303 if (glob === '' || (typeof glob !== 'string' && !isState)) {
19304 throw new TypeError('Expected pattern to be a non-empty string');
19305 }
19306
19307 const opts = options || {};
19308 const posix = utils.isWindows(options);
19309 const regex = isState
19310 ? picomatch.compileRe(glob, options)
19311 : picomatch.makeRe(glob, options, false, true);
19312
19313 const state = regex.state;
19314 delete regex.state;
19315
19316 let isIgnored = () => false;
19317 if (opts.ignore) {
19318 const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };
19319 isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);
19320 }
19321
19322 const matcher = (input, returnObject = false) => {
19323 const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });
19324 const result = { glob, state, regex, posix, input, output, match, isMatch };
19325
19326 if (typeof opts.onResult === 'function') {
19327 opts.onResult(result);
19328 }
19329
19330 if (isMatch === false) {
19331 result.isMatch = false;
19332 return returnObject ? result : false;
19333 }
19334
19335 if (isIgnored(input)) {
19336 if (typeof opts.onIgnore === 'function') {
19337 opts.onIgnore(result);
19338 }
19339 result.isMatch = false;
19340 return returnObject ? result : false;
19341 }
19342
19343 if (typeof opts.onMatch === 'function') {
19344 opts.onMatch(result);
19345 }
19346 return returnObject ? result : true;
19347 };
19348
19349 if (returnState) {
19350 matcher.state = state;
19351 }
19352
19353 return matcher;
19354};
19355
19356/**
19357 * Test `input` with the given `regex`. This is used by the main
19358 * `picomatch()` function to test the input string.
19359 *
19360 * ```js
19361 * const picomatch = require('picomatch');
19362 * // picomatch.test(input, regex[, options]);
19363 *
19364 * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\/([^/]*?))$/));
19365 * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }
19366 * ```
19367 * @param {String} `input` String to test.
19368 * @param {RegExp} `regex`
19369 * @return {Object} Returns an object with matching info.
19370 * @api public
19371 */
19372
19373picomatch.test = (input, regex, options, { glob, posix } = {}) => {
19374 if (typeof input !== 'string') {
19375 throw new TypeError('Expected input to be a string');
19376 }
19377
19378 if (input === '') {
19379 return { isMatch: false, output: '' };
19380 }
19381
19382 const opts = options || {};
19383 const format = opts.format || (posix ? utils.toPosixSlashes : null);
19384 let match = input === glob;
19385 let output = (match && format) ? format(input) : input;
19386
19387 if (match === false) {
19388 output = format ? format(input) : input;
19389 match = output === glob;
19390 }
19391
19392 if (match === false || opts.capture === true) {
19393 if (opts.matchBase === true || opts.basename === true) {
19394 match = picomatch.matchBase(input, regex, options, posix);
19395 } else {
19396 match = regex.exec(output);
19397 }
19398 }
19399
19400 return { isMatch: Boolean(match), match, output };
19401};
19402
19403/**
19404 * Match the basename of a filepath.
19405 *
19406 * ```js
19407 * const picomatch = require('picomatch');
19408 * // picomatch.matchBase(input, glob[, options]);
19409 * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true
19410 * ```
19411 * @param {String} `input` String to test.
19412 * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).
19413 * @return {Boolean}
19414 * @api public
19415 */
19416
19417picomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {
19418 const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);
19419 return regex.test(path.basename(input));
19420};
19421
19422/**
19423 * Returns true if **any** of the given glob `patterns` match the specified `string`.
19424 *
19425 * ```js
19426 * const picomatch = require('picomatch');
19427 * // picomatch.isMatch(string, patterns[, options]);
19428 *
19429 * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true
19430 * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false
19431 * ```
19432 * @param {String|Array} str The string to test.
19433 * @param {String|Array} patterns One or more glob patterns to use for matching.
19434 * @param {Object} [options] See available [options](#options).
19435 * @return {Boolean} Returns true if any patterns match `str`
19436 * @api public
19437 */
19438
19439picomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);
19440
19441/**
19442 * Parse a glob pattern to create the source string for a regular
19443 * expression.
19444 *
19445 * ```js
19446 * const picomatch = require('picomatch');
19447 * const result = picomatch.parse(pattern[, options]);
19448 * ```
19449 * @param {String} `pattern`
19450 * @param {Object} `options`
19451 * @return {Object} Returns an object with useful properties and output to be used as a regex source string.
19452 * @api public
19453 */
19454
19455picomatch.parse = (pattern, options) => {
19456 if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));
19457 return parse(pattern, { ...options, fastpaths: false });
19458};
19459
19460/**
19461 * Scan a glob pattern to separate the pattern into segments.
19462 *
19463 * ```js
19464 * const picomatch = require('picomatch');
19465 * // picomatch.scan(input[, options]);
19466 *
19467 * const result = picomatch.scan('!./foo/*.js');
19468 * console.log(result);
19469 * { prefix: '!./',
19470 * input: '!./foo/*.js',
19471 * start: 3,
19472 * base: 'foo',
19473 * glob: '*.js',
19474 * isBrace: false,
19475 * isBracket: false,
19476 * isGlob: true,
19477 * isExtglob: false,
19478 * isGlobstar: false,
19479 * negated: true }
19480 * ```
19481 * @param {String} `input` Glob pattern to scan.
19482 * @param {Object} `options`
19483 * @return {Object} Returns an object with
19484 * @api public
19485 */
19486
19487picomatch.scan = (input, options) => scan(input, options);
19488
19489/**
19490 * Create a regular expression from a parsed glob pattern.
19491 *
19492 * ```js
19493 * const picomatch = require('picomatch');
19494 * const state = picomatch.parse('*.js');
19495 * // picomatch.compileRe(state[, options]);
19496 *
19497 * console.log(picomatch.compileRe(state));
19498 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19499 * ```
19500 * @param {String} `state` The object returned from the `.parse` method.
19501 * @param {Object} `options`
19502 * @return {RegExp} Returns a regex created from the given pattern.
19503 * @api public
19504 */
19505
19506picomatch.compileRe = (parsed, options, returnOutput = false, returnState = false) => {
19507 if (returnOutput === true) {
19508 return parsed.output;
19509 }
19510
19511 const opts = options || {};
19512 const prepend = opts.contains ? '' : '^';
19513 const append = opts.contains ? '' : '$';
19514
19515 let source = `${prepend}(?:${parsed.output})${append}`;
19516 if (parsed && parsed.negated === true) {
19517 source = `^(?!${source}).*$`;
19518 }
19519
19520 const regex = picomatch.toRegex(source, options);
19521 if (returnState === true) {
19522 regex.state = parsed;
19523 }
19524
19525 return regex;
19526};
19527
19528picomatch.makeRe = (input, options, returnOutput = false, returnState = false) => {
19529 if (!input || typeof input !== 'string') {
19530 throw new TypeError('Expected a non-empty string');
19531 }
19532
19533 const opts = options || {};
19534 let parsed = { negated: false, fastpaths: true };
19535 let prefix = '';
19536 let output;
19537
19538 if (input.startsWith('./')) {
19539 input = input.slice(2);
19540 prefix = parsed.prefix = './';
19541 }
19542
19543 if (opts.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {
19544 output = parse.fastpaths(input, options);
19545 }
19546
19547 if (output === undefined) {
19548 parsed = parse(input, options);
19549 parsed.prefix = prefix + (parsed.prefix || '');
19550 } else {
19551 parsed.output = output;
19552 }
19553
19554 return picomatch.compileRe(parsed, options, returnOutput, returnState);
19555};
19556
19557/**
19558 * Create a regular expression from the given regex source string.
19559 *
19560 * ```js
19561 * const picomatch = require('picomatch');
19562 * // picomatch.toRegex(source[, options]);
19563 *
19564 * const { output } = picomatch.parse('*.js');
19565 * console.log(picomatch.toRegex(output));
19566 * //=> /^(?:(?!\.)(?=.)[^/]*?\.js)$/
19567 * ```
19568 * @param {String} `source` Regular expression source string.
19569 * @param {Object} `options`
19570 * @return {RegExp}
19571 * @api public
19572 */
19573
19574picomatch.toRegex = (source, options) => {
19575 try {
19576 const opts = options || {};
19577 return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));
19578 } catch (err) {
19579 if (options && options.debug === true) throw err;
19580 return /$^/;
19581 }
19582};
19583
19584/**
19585 * Picomatch constants.
19586 * @return {Object}
19587 */
19588
19589picomatch.constants = constants;
19590
19591/**
19592 * Expose "picomatch"
19593 */
19594
19595module.exports = picomatch;
19596
19597
19598/***/ }),
19599/* 90 */
19600/***/ (function(module, exports, __webpack_require__) {
19601
19602"use strict";
19603
19604
19605const utils = __webpack_require__(91);
19606const {
19607 CHAR_ASTERISK, /* * */
19608 CHAR_AT, /* @ */
19609 CHAR_BACKWARD_SLASH, /* \ */
19610 CHAR_COMMA, /* , */
19611 CHAR_DOT, /* . */
19612 CHAR_EXCLAMATION_MARK, /* ! */
19613 CHAR_FORWARD_SLASH, /* / */
19614 CHAR_LEFT_CURLY_BRACE, /* { */
19615 CHAR_LEFT_PARENTHESES, /* ( */
19616 CHAR_LEFT_SQUARE_BRACKET, /* [ */
19617 CHAR_PLUS, /* + */
19618 CHAR_QUESTION_MARK, /* ? */
19619 CHAR_RIGHT_CURLY_BRACE, /* } */
19620 CHAR_RIGHT_PARENTHESES, /* ) */
19621 CHAR_RIGHT_SQUARE_BRACKET /* ] */
19622} = __webpack_require__(92);
19623
19624const isPathSeparator = code => {
19625 return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;
19626};
19627
19628const depth = token => {
19629 if (token.isPrefix !== true) {
19630 token.depth = token.isGlobstar ? Infinity : 1;
19631 }
19632};
19633
19634/**
19635 * Quickly scans a glob pattern and returns an object with a handful of
19636 * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),
19637 * `glob` (the actual pattern), and `negated` (true if the path starts with `!`).
19638 *
19639 * ```js
19640 * const pm = require('picomatch');
19641 * console.log(pm.scan('foo/bar/*.js'));
19642 * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }
19643 * ```
19644 * @param {String} `str`
19645 * @param {Object} `options`
19646 * @return {Object} Returns an object with tokens and regex source string.
19647 * @api public
19648 */
19649
19650const scan = (input, options) => {
19651 const opts = options || {};
19652
19653 const length = input.length - 1;
19654 const scanToEnd = opts.parts === true || opts.scanToEnd === true;
19655 const slashes = [];
19656 const tokens = [];
19657 const parts = [];
19658
19659 let str = input;
19660 let index = -1;
19661 let start = 0;
19662 let lastIndex = 0;
19663 let isBrace = false;
19664 let isBracket = false;
19665 let isGlob = false;
19666 let isExtglob = false;
19667 let isGlobstar = false;
19668 let braceEscaped = false;
19669 let backslashes = false;
19670 let negated = false;
19671 let finished = false;
19672 let braces = 0;
19673 let prev;
19674 let code;
19675 let token = { value: '', depth: 0, isGlob: false };
19676
19677 const eos = () => index >= length;
19678 const peek = () => str.charCodeAt(index + 1);
19679 const advance = () => {
19680 prev = code;
19681 return str.charCodeAt(++index);
19682 };
19683
19684 while (index < length) {
19685 code = advance();
19686 let next;
19687
19688 if (code === CHAR_BACKWARD_SLASH) {
19689 backslashes = token.backslashes = true;
19690 code = advance();
19691
19692 if (code === CHAR_LEFT_CURLY_BRACE) {
19693 braceEscaped = true;
19694 }
19695 continue;
19696 }
19697
19698 if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {
19699 braces++;
19700
19701 while (eos() !== true && (code = advance())) {
19702 if (code === CHAR_BACKWARD_SLASH) {
19703 backslashes = token.backslashes = true;
19704 advance();
19705 continue;
19706 }
19707
19708 if (code === CHAR_LEFT_CURLY_BRACE) {
19709 braces++;
19710 continue;
19711 }
19712
19713 if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {
19714 isBrace = token.isBrace = true;
19715 isGlob = token.isGlob = true;
19716 finished = true;
19717
19718 if (scanToEnd === true) {
19719 continue;
19720 }
19721
19722 break;
19723 }
19724
19725 if (braceEscaped !== true && code === CHAR_COMMA) {
19726 isBrace = token.isBrace = true;
19727 isGlob = token.isGlob = true;
19728 finished = true;
19729
19730 if (scanToEnd === true) {
19731 continue;
19732 }
19733
19734 break;
19735 }
19736
19737 if (code === CHAR_RIGHT_CURLY_BRACE) {
19738 braces--;
19739
19740 if (braces === 0) {
19741 braceEscaped = false;
19742 isBrace = token.isBrace = true;
19743 finished = true;
19744 break;
19745 }
19746 }
19747 }
19748
19749 if (scanToEnd === true) {
19750 continue;
19751 }
19752
19753 break;
19754 }
19755
19756 if (code === CHAR_FORWARD_SLASH) {
19757 slashes.push(index);
19758 tokens.push(token);
19759 token = { value: '', depth: 0, isGlob: false };
19760
19761 if (finished === true) continue;
19762 if (prev === CHAR_DOT && index === (start + 1)) {
19763 start += 2;
19764 continue;
19765 }
19766
19767 lastIndex = index + 1;
19768 continue;
19769 }
19770
19771 if (opts.noext !== true) {
19772 const isExtglobChar = code === CHAR_PLUS
19773 || code === CHAR_AT
19774 || code === CHAR_ASTERISK
19775 || code === CHAR_QUESTION_MARK
19776 || code === CHAR_EXCLAMATION_MARK;
19777
19778 if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {
19779 isGlob = token.isGlob = true;
19780 isExtglob = token.isExtglob = true;
19781 finished = true;
19782
19783 if (scanToEnd === true) {
19784 while (eos() !== true && (code = advance())) {
19785 if (code === CHAR_BACKWARD_SLASH) {
19786 backslashes = token.backslashes = true;
19787 code = advance();
19788 continue;
19789 }
19790
19791 if (code === CHAR_RIGHT_PARENTHESES) {
19792 isGlob = token.isGlob = true;
19793 finished = true;
19794 break;
19795 }
19796 }
19797 continue;
19798 }
19799 break;
19800 }
19801 }
19802
19803 if (code === CHAR_ASTERISK) {
19804 if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;
19805 isGlob = token.isGlob = true;
19806 finished = true;
19807
19808 if (scanToEnd === true) {
19809 continue;
19810 }
19811 break;
19812 }
19813
19814 if (code === CHAR_QUESTION_MARK) {
19815 isGlob = token.isGlob = true;
19816 finished = true;
19817
19818 if (scanToEnd === true) {
19819 continue;
19820 }
19821 break;
19822 }
19823
19824 if (code === CHAR_LEFT_SQUARE_BRACKET) {
19825 while (eos() !== true && (next = advance())) {
19826 if (next === CHAR_BACKWARD_SLASH) {
19827 backslashes = token.backslashes = true;
19828 advance();
19829 continue;
19830 }
19831
19832 if (next === CHAR_RIGHT_SQUARE_BRACKET) {
19833 isBracket = token.isBracket = true;
19834 isGlob = token.isGlob = true;
19835 finished = true;
19836
19837 if (scanToEnd === true) {
19838 continue;
19839 }
19840 break;
19841 }
19842 }
19843 }
19844
19845 if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {
19846 negated = token.negated = true;
19847 start++;
19848 continue;
19849 }
19850
19851 if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {
19852 isGlob = token.isGlob = true;
19853
19854 if (scanToEnd === true) {
19855 while (eos() !== true && (code = advance())) {
19856 if (code === CHAR_LEFT_PARENTHESES) {
19857 backslashes = token.backslashes = true;
19858 code = advance();
19859 continue;
19860 }
19861
19862 if (code === CHAR_RIGHT_PARENTHESES) {
19863 finished = true;
19864 break;
19865 }
19866 }
19867 continue;
19868 }
19869 break;
19870 }
19871
19872 if (isGlob === true) {
19873 finished = true;
19874
19875 if (scanToEnd === true) {
19876 continue;
19877 }
19878
19879 break;
19880 }
19881 }
19882
19883 if (opts.noext === true) {
19884 isExtglob = false;
19885 isGlob = false;
19886 }
19887
19888 let base = str;
19889 let prefix = '';
19890 let glob = '';
19891
19892 if (start > 0) {
19893 prefix = str.slice(0, start);
19894 str = str.slice(start);
19895 lastIndex -= start;
19896 }
19897
19898 if (base && isGlob === true && lastIndex > 0) {
19899 base = str.slice(0, lastIndex);
19900 glob = str.slice(lastIndex);
19901 } else if (isGlob === true) {
19902 base = '';
19903 glob = str;
19904 } else {
19905 base = str;
19906 }
19907
19908 if (base && base !== '' && base !== '/' && base !== str) {
19909 if (isPathSeparator(base.charCodeAt(base.length - 1))) {
19910 base = base.slice(0, -1);
19911 }
19912 }
19913
19914 if (opts.unescape === true) {
19915 if (glob) glob = utils.removeBackslashes(glob);
19916
19917 if (base && backslashes === true) {
19918 base = utils.removeBackslashes(base);
19919 }
19920 }
19921
19922 const state = {
19923 prefix,
19924 input,
19925 start,
19926 base,
19927 glob,
19928 isBrace,
19929 isBracket,
19930 isGlob,
19931 isExtglob,
19932 isGlobstar,
19933 negated
19934 };
19935
19936 if (opts.tokens === true) {
19937 state.maxDepth = 0;
19938 if (!isPathSeparator(code)) {
19939 tokens.push(token);
19940 }
19941 state.tokens = tokens;
19942 }
19943
19944 if (opts.parts === true || opts.tokens === true) {
19945 let prevIndex;
19946
19947 for (let idx = 0; idx < slashes.length; idx++) {
19948 const n = prevIndex ? prevIndex + 1 : start;
19949 const i = slashes[idx];
19950 const value = input.slice(n, i);
19951 if (opts.tokens) {
19952 if (idx === 0 && start !== 0) {
19953 tokens[idx].isPrefix = true;
19954 tokens[idx].value = prefix;
19955 } else {
19956 tokens[idx].value = value;
19957 }
19958 depth(tokens[idx]);
19959 state.maxDepth += tokens[idx].depth;
19960 }
19961 if (idx !== 0 || value !== '') {
19962 parts.push(value);
19963 }
19964 prevIndex = i;
19965 }
19966
19967 if (prevIndex && prevIndex + 1 < input.length) {
19968 const value = input.slice(prevIndex + 1);
19969 parts.push(value);
19970
19971 if (opts.tokens) {
19972 tokens[tokens.length - 1].value = value;
19973 depth(tokens[tokens.length - 1]);
19974 state.maxDepth += tokens[tokens.length - 1].depth;
19975 }
19976 }
19977
19978 state.slashes = slashes;
19979 state.parts = parts;
19980 }
19981
19982 return state;
19983};
19984
19985module.exports = scan;
19986
19987
19988/***/ }),
19989/* 91 */
19990/***/ (function(module, exports, __webpack_require__) {
19991
19992"use strict";
19993
19994
19995const path = __webpack_require__(13);
19996const win32 = process.platform === 'win32';
19997const {
19998 REGEX_BACKSLASH,
19999 REGEX_REMOVE_BACKSLASH,
20000 REGEX_SPECIAL_CHARS,
20001 REGEX_SPECIAL_CHARS_GLOBAL
20002} = __webpack_require__(92);
20003
20004exports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);
20005exports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);
20006exports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);
20007exports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\$1');
20008exports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');
20009
20010exports.removeBackslashes = str => {
20011 return str.replace(REGEX_REMOVE_BACKSLASH, match => {
20012 return match === '\\' ? '' : match;
20013 });
20014};
20015
20016exports.supportsLookbehinds = () => {
20017 const segs = process.version.slice(1).split('.').map(Number);
20018 if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {
20019 return true;
20020 }
20021 return false;
20022};
20023
20024exports.isWindows = options => {
20025 if (options && typeof options.windows === 'boolean') {
20026 return options.windows;
20027 }
20028 return win32 === true || path.sep === '\\';
20029};
20030
20031exports.escapeLast = (input, char, lastIdx) => {
20032 const idx = input.lastIndexOf(char, lastIdx);
20033 if (idx === -1) return input;
20034 if (input[idx - 1] === '\\') return exports.escapeLast(input, char, idx - 1);
20035 return `${input.slice(0, idx)}\\${input.slice(idx)}`;
20036};
20037
20038exports.removePrefix = (input, state = {}) => {
20039 let output = input;
20040 if (output.startsWith('./')) {
20041 output = output.slice(2);
20042 state.prefix = './';
20043 }
20044 return output;
20045};
20046
20047exports.wrapOutput = (input, state = {}, options = {}) => {
20048 const prepend = options.contains ? '' : '^';
20049 const append = options.contains ? '' : '$';
20050
20051 let output = `${prepend}(?:${input})${append}`;
20052 if (state.negated === true) {
20053 output = `(?:^(?!${output}).*$)`;
20054 }
20055 return output;
20056};
20057
20058
20059/***/ }),
20060/* 92 */
20061/***/ (function(module, exports, __webpack_require__) {
20062
20063"use strict";
20064
20065
20066const path = __webpack_require__(13);
20067const WIN_SLASH = '\\\\/';
20068const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
20069
20070/**
20071 * Posix glob regex
20072 */
20073
20074const DOT_LITERAL = '\\.';
20075const PLUS_LITERAL = '\\+';
20076const QMARK_LITERAL = '\\?';
20077const SLASH_LITERAL = '\\/';
20078const ONE_CHAR = '(?=.)';
20079const QMARK = '[^/]';
20080const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
20081const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
20082const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
20083const NO_DOT = `(?!${DOT_LITERAL})`;
20084const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
20085const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
20086const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
20087const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
20088const STAR = `${QMARK}*?`;
20089
20090const POSIX_CHARS = {
20091 DOT_LITERAL,
20092 PLUS_LITERAL,
20093 QMARK_LITERAL,
20094 SLASH_LITERAL,
20095 ONE_CHAR,
20096 QMARK,
20097 END_ANCHOR,
20098 DOTS_SLASH,
20099 NO_DOT,
20100 NO_DOTS,
20101 NO_DOT_SLASH,
20102 NO_DOTS_SLASH,
20103 QMARK_NO_DOT,
20104 STAR,
20105 START_ANCHOR
20106};
20107
20108/**
20109 * Windows glob regex
20110 */
20111
20112const WINDOWS_CHARS = {
20113 ...POSIX_CHARS,
20114
20115 SLASH_LITERAL: `[${WIN_SLASH}]`,
20116 QMARK: WIN_NO_SLASH,
20117 STAR: `${WIN_NO_SLASH}*?`,
20118 DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
20119 NO_DOT: `(?!${DOT_LITERAL})`,
20120 NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20121 NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
20122 NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
20123 QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
20124 START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
20125 END_ANCHOR: `(?:[${WIN_SLASH}]|$)`
20126};
20127
20128/**
20129 * POSIX Bracket Regex
20130 */
20131
20132const POSIX_REGEX_SOURCE = {
20133 alnum: 'a-zA-Z0-9',
20134 alpha: 'a-zA-Z',
20135 ascii: '\\x00-\\x7F',
20136 blank: ' \\t',
20137 cntrl: '\\x00-\\x1F\\x7F',
20138 digit: '0-9',
20139 graph: '\\x21-\\x7E',
20140 lower: 'a-z',
20141 print: '\\x20-\\x7E ',
20142 punct: '\\-!"#$%&\'()\\*+,./:;<=>?@[\\]^_`{|}~',
20143 space: ' \\t\\r\\n\\v\\f',
20144 upper: 'A-Z',
20145 word: 'A-Za-z0-9_',
20146 xdigit: 'A-Fa-f0-9'
20147};
20148
20149module.exports = {
20150 MAX_LENGTH: 1024 * 64,
20151 POSIX_REGEX_SOURCE,
20152
20153 // regular expressions
20154 REGEX_BACKSLASH: /\\(?![*+?^${}(|)[\]])/g,
20155 REGEX_NON_SPECIAL_CHARS: /^[^@![\].,$*+?^{}()|\\/]+/,
20156 REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\]]/,
20157 REGEX_SPECIAL_CHARS_BACKREF: /(\\?)((\W)(\3*))/g,
20158 REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\]])/g,
20159 REGEX_REMOVE_BACKSLASH: /(?:\[.*?[^\\]\]|\\(?=.))/g,
20160
20161 // Replace globs with equivalent patterns to reduce parsing time.
20162 REPLACEMENTS: {
20163 '***': '*',
20164 '**/**': '**',
20165 '**/**/**': '**'
20166 },
20167
20168 // Digits
20169 CHAR_0: 48, /* 0 */
20170 CHAR_9: 57, /* 9 */
20171
20172 // Alphabet chars.
20173 CHAR_UPPERCASE_A: 65, /* A */
20174 CHAR_LOWERCASE_A: 97, /* a */
20175 CHAR_UPPERCASE_Z: 90, /* Z */
20176 CHAR_LOWERCASE_Z: 122, /* z */
20177
20178 CHAR_LEFT_PARENTHESES: 40, /* ( */
20179 CHAR_RIGHT_PARENTHESES: 41, /* ) */
20180
20181 CHAR_ASTERISK: 42, /* * */
20182
20183 // Non-alphabetic chars.
20184 CHAR_AMPERSAND: 38, /* & */
20185 CHAR_AT: 64, /* @ */
20186 CHAR_BACKWARD_SLASH: 92, /* \ */
20187 CHAR_CARRIAGE_RETURN: 13, /* \r */
20188 CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */
20189 CHAR_COLON: 58, /* : */
20190 CHAR_COMMA: 44, /* , */
20191 CHAR_DOT: 46, /* . */
20192 CHAR_DOUBLE_QUOTE: 34, /* " */
20193 CHAR_EQUAL: 61, /* = */
20194 CHAR_EXCLAMATION_MARK: 33, /* ! */
20195 CHAR_FORM_FEED: 12, /* \f */
20196 CHAR_FORWARD_SLASH: 47, /* / */
20197 CHAR_GRAVE_ACCENT: 96, /* ` */
20198 CHAR_HASH: 35, /* # */
20199 CHAR_HYPHEN_MINUS: 45, /* - */
20200 CHAR_LEFT_ANGLE_BRACKET: 60, /* < */
20201 CHAR_LEFT_CURLY_BRACE: 123, /* { */
20202 CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */
20203 CHAR_LINE_FEED: 10, /* \n */
20204 CHAR_NO_BREAK_SPACE: 160, /* \u00A0 */
20205 CHAR_PERCENT: 37, /* % */
20206 CHAR_PLUS: 43, /* + */
20207 CHAR_QUESTION_MARK: 63, /* ? */
20208 CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */
20209 CHAR_RIGHT_CURLY_BRACE: 125, /* } */
20210 CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */
20211 CHAR_SEMICOLON: 59, /* ; */
20212 CHAR_SINGLE_QUOTE: 39, /* ' */
20213 CHAR_SPACE: 32, /* */
20214 CHAR_TAB: 9, /* \t */
20215 CHAR_UNDERSCORE: 95, /* _ */
20216 CHAR_VERTICAL_LINE: 124, /* | */
20217 CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \uFEFF */
20218
20219 SEP: path.sep,
20220
20221 /**
20222 * Create EXTGLOB_CHARS
20223 */
20224
20225 extglobChars(chars) {
20226 return {
20227 '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },
20228 '?': { type: 'qmark', open: '(?:', close: ')?' },
20229 '+': { type: 'plus', open: '(?:', close: ')+' },
20230 '*': { type: 'star', open: '(?:', close: ')*' },
20231 '@': { type: 'at', open: '(?:', close: ')' }
20232 };
20233 },
20234
20235 /**
20236 * Create GLOB_CHARS
20237 */
20238
20239 globChars(win32) {
20240 return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
20241 }
20242};
20243
20244
20245/***/ }),
20246/* 93 */
20247/***/ (function(module, exports, __webpack_require__) {
20248
20249"use strict";
20250
20251
20252const constants = __webpack_require__(92);
20253const utils = __webpack_require__(91);
20254
20255/**
20256 * Constants
20257 */
20258
20259const {
20260 MAX_LENGTH,
20261 POSIX_REGEX_SOURCE,
20262 REGEX_NON_SPECIAL_CHARS,
20263 REGEX_SPECIAL_CHARS_BACKREF,
20264 REPLACEMENTS
20265} = constants;
20266
20267/**
20268 * Helpers
20269 */
20270
20271const expandRange = (args, options) => {
20272 if (typeof options.expandRange === 'function') {
20273 return options.expandRange(...args, options);
20274 }
20275
20276 args.sort();
20277 const value = `[${args.join('-')}]`;
20278
20279 try {
20280 /* eslint-disable-next-line no-new */
20281 new RegExp(value);
20282 } catch (ex) {
20283 return args.map(v => utils.escapeRegex(v)).join('..');
20284 }
20285
20286 return value;
20287};
20288
20289/**
20290 * Create the message for a syntax error
20291 */
20292
20293const syntaxError = (type, char) => {
20294 return `Missing ${type}: "${char}" - use "\\\\${char}" to match literal characters`;
20295};
20296
20297/**
20298 * Parse the given input string.
20299 * @param {String} input
20300 * @param {Object} options
20301 * @return {Object}
20302 */
20303
20304const parse = (input, options) => {
20305 if (typeof input !== 'string') {
20306 throw new TypeError('Expected a string');
20307 }
20308
20309 input = REPLACEMENTS[input] || input;
20310
20311 const opts = { ...options };
20312 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
20313
20314 let len = input.length;
20315 if (len > max) {
20316 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
20317 }
20318
20319 const bos = { type: 'bos', value: '', output: opts.prepend || '' };
20320 const tokens = [bos];
20321
20322 const capture = opts.capture ? '' : '?:';
20323 const win32 = utils.isWindows(options);
20324
20325 // create constants based on platform, for windows or posix
20326 const PLATFORM_CHARS = constants.globChars(win32);
20327 const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);
20328
20329 const {
20330 DOT_LITERAL,
20331 PLUS_LITERAL,
20332 SLASH_LITERAL,
20333 ONE_CHAR,
20334 DOTS_SLASH,
20335 NO_DOT,
20336 NO_DOT_SLASH,
20337 NO_DOTS_SLASH,
20338 QMARK,
20339 QMARK_NO_DOT,
20340 STAR,
20341 START_ANCHOR
20342 } = PLATFORM_CHARS;
20343
20344 const globstar = (opts) => {
20345 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
20346 };
20347
20348 const nodot = opts.dot ? '' : NO_DOT;
20349 const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;
20350 let star = opts.bash === true ? globstar(opts) : STAR;
20351
20352 if (opts.capture) {
20353 star = `(${star})`;
20354 }
20355
20356 // minimatch options support
20357 if (typeof opts.noext === 'boolean') {
20358 opts.noextglob = opts.noext;
20359 }
20360
20361 const state = {
20362 input,
20363 index: -1,
20364 start: 0,
20365 dot: opts.dot === true,
20366 consumed: '',
20367 output: '',
20368 prefix: '',
20369 backtrack: false,
20370 negated: false,
20371 brackets: 0,
20372 braces: 0,
20373 parens: 0,
20374 quotes: 0,
20375 globstar: false,
20376 tokens
20377 };
20378
20379 input = utils.removePrefix(input, state);
20380 len = input.length;
20381
20382 const extglobs = [];
20383 const braces = [];
20384 const stack = [];
20385 let prev = bos;
20386 let value;
20387
20388 /**
20389 * Tokenizing helpers
20390 */
20391
20392 const eos = () => state.index === len - 1;
20393 const peek = state.peek = (n = 1) => input[state.index + n];
20394 const advance = state.advance = () => input[++state.index];
20395 const remaining = () => input.slice(state.index + 1);
20396 const consume = (value = '', num = 0) => {
20397 state.consumed += value;
20398 state.index += num;
20399 };
20400 const append = token => {
20401 state.output += token.output != null ? token.output : token.value;
20402 consume(token.value);
20403 };
20404
20405 const negate = () => {
20406 let count = 1;
20407
20408 while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {
20409 advance();
20410 state.start++;
20411 count++;
20412 }
20413
20414 if (count % 2 === 0) {
20415 return false;
20416 }
20417
20418 state.negated = true;
20419 state.start++;
20420 return true;
20421 };
20422
20423 const increment = type => {
20424 state[type]++;
20425 stack.push(type);
20426 };
20427
20428 const decrement = type => {
20429 state[type]--;
20430 stack.pop();
20431 };
20432
20433 /**
20434 * Push tokens onto the tokens array. This helper speeds up
20435 * tokenizing by 1) helping us avoid backtracking as much as possible,
20436 * and 2) helping us avoid creating extra tokens when consecutive
20437 * characters are plain text. This improves performance and simplifies
20438 * lookbehinds.
20439 */
20440
20441 const push = tok => {
20442 if (prev.type === 'globstar') {
20443 const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');
20444 const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));
20445
20446 if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {
20447 state.output = state.output.slice(0, -prev.output.length);
20448 prev.type = 'star';
20449 prev.value = '*';
20450 prev.output = star;
20451 state.output += prev.output;
20452 }
20453 }
20454
20455 if (extglobs.length && tok.type !== 'paren' && !EXTGLOB_CHARS[tok.value]) {
20456 extglobs[extglobs.length - 1].inner += tok.value;
20457 }
20458
20459 if (tok.value || tok.output) append(tok);
20460 if (prev && prev.type === 'text' && tok.type === 'text') {
20461 prev.value += tok.value;
20462 prev.output = (prev.output || '') + tok.value;
20463 return;
20464 }
20465
20466 tok.prev = prev;
20467 tokens.push(tok);
20468 prev = tok;
20469 };
20470
20471 const extglobOpen = (type, value) => {
20472 const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };
20473
20474 token.prev = prev;
20475 token.parens = state.parens;
20476 token.output = state.output;
20477 const output = (opts.capture ? '(' : '') + token.open;
20478
20479 increment('parens');
20480 push({ type, value, output: state.output ? '' : ONE_CHAR });
20481 push({ type: 'paren', extglob: true, value: advance(), output });
20482 extglobs.push(token);
20483 };
20484
20485 const extglobClose = token => {
20486 let output = token.close + (opts.capture ? ')' : '');
20487
20488 if (token.type === 'negate') {
20489 let extglobStar = star;
20490
20491 if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {
20492 extglobStar = globstar(opts);
20493 }
20494
20495 if (extglobStar !== star || eos() || /^\)+$/.test(remaining())) {
20496 output = token.close = `)$))${extglobStar}`;
20497 }
20498
20499 if (token.prev.type === 'bos' && eos()) {
20500 state.negatedExtglob = true;
20501 }
20502 }
20503
20504 push({ type: 'paren', extglob: true, value, output });
20505 decrement('parens');
20506 };
20507
20508 /**
20509 * Fast paths
20510 */
20511
20512 if (opts.fastpaths !== false && !/(^[*!]|[/()[\]{}"])/.test(input)) {
20513 let backslashes = false;
20514
20515 let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {
20516 if (first === '\\') {
20517 backslashes = true;
20518 return m;
20519 }
20520
20521 if (first === '?') {
20522 if (esc) {
20523 return esc + first + (rest ? QMARK.repeat(rest.length) : '');
20524 }
20525 if (index === 0) {
20526 return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');
20527 }
20528 return QMARK.repeat(chars.length);
20529 }
20530
20531 if (first === '.') {
20532 return DOT_LITERAL.repeat(chars.length);
20533 }
20534
20535 if (first === '*') {
20536 if (esc) {
20537 return esc + first + (rest ? star : '');
20538 }
20539 return star;
20540 }
20541 return esc ? m : `\\${m}`;
20542 });
20543
20544 if (backslashes === true) {
20545 if (opts.unescape === true) {
20546 output = output.replace(/\\/g, '');
20547 } else {
20548 output = output.replace(/\\+/g, m => {
20549 return m.length % 2 === 0 ? '\\\\' : (m ? '\\' : '');
20550 });
20551 }
20552 }
20553
20554 if (output === input && opts.contains === true) {
20555 state.output = input;
20556 return state;
20557 }
20558
20559 state.output = utils.wrapOutput(output, state, options);
20560 return state;
20561 }
20562
20563 /**
20564 * Tokenize input until we reach end-of-string
20565 */
20566
20567 while (!eos()) {
20568 value = advance();
20569
20570 if (value === '\u0000') {
20571 continue;
20572 }
20573
20574 /**
20575 * Escaped characters
20576 */
20577
20578 if (value === '\\') {
20579 const next = peek();
20580
20581 if (next === '/' && opts.bash !== true) {
20582 continue;
20583 }
20584
20585 if (next === '.' || next === ';') {
20586 continue;
20587 }
20588
20589 if (!next) {
20590 value += '\\';
20591 push({ type: 'text', value });
20592 continue;
20593 }
20594
20595 // collapse slashes to reduce potential for exploits
20596 const match = /^\\+/.exec(remaining());
20597 let slashes = 0;
20598
20599 if (match && match[0].length > 2) {
20600 slashes = match[0].length;
20601 state.index += slashes;
20602 if (slashes % 2 !== 0) {
20603 value += '\\';
20604 }
20605 }
20606
20607 if (opts.unescape === true) {
20608 value = advance() || '';
20609 } else {
20610 value += advance() || '';
20611 }
20612
20613 if (state.brackets === 0) {
20614 push({ type: 'text', value });
20615 continue;
20616 }
20617 }
20618
20619 /**
20620 * If we're inside a regex character class, continue
20621 * until we reach the closing bracket.
20622 */
20623
20624 if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {
20625 if (opts.posix !== false && value === ':') {
20626 const inner = prev.value.slice(1);
20627 if (inner.includes('[')) {
20628 prev.posix = true;
20629
20630 if (inner.includes(':')) {
20631 const idx = prev.value.lastIndexOf('[');
20632 const pre = prev.value.slice(0, idx);
20633 const rest = prev.value.slice(idx + 2);
20634 const posix = POSIX_REGEX_SOURCE[rest];
20635 if (posix) {
20636 prev.value = pre + posix;
20637 state.backtrack = true;
20638 advance();
20639
20640 if (!bos.output && tokens.indexOf(prev) === 1) {
20641 bos.output = ONE_CHAR;
20642 }
20643 continue;
20644 }
20645 }
20646 }
20647 }
20648
20649 if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {
20650 value = `\\${value}`;
20651 }
20652
20653 if (value === ']' && (prev.value === '[' || prev.value === '[^')) {
20654 value = `\\${value}`;
20655 }
20656
20657 if (opts.posix === true && value === '!' && prev.value === '[') {
20658 value = '^';
20659 }
20660
20661 prev.value += value;
20662 append({ value });
20663 continue;
20664 }
20665
20666 /**
20667 * If we're inside a quoted string, continue
20668 * until we reach the closing double quote.
20669 */
20670
20671 if (state.quotes === 1 && value !== '"') {
20672 value = utils.escapeRegex(value);
20673 prev.value += value;
20674 append({ value });
20675 continue;
20676 }
20677
20678 /**
20679 * Double quotes
20680 */
20681
20682 if (value === '"') {
20683 state.quotes = state.quotes === 1 ? 0 : 1;
20684 if (opts.keepQuotes === true) {
20685 push({ type: 'text', value });
20686 }
20687 continue;
20688 }
20689
20690 /**
20691 * Parentheses
20692 */
20693
20694 if (value === '(') {
20695 increment('parens');
20696 push({ type: 'paren', value });
20697 continue;
20698 }
20699
20700 if (value === ')') {
20701 if (state.parens === 0 && opts.strictBrackets === true) {
20702 throw new SyntaxError(syntaxError('opening', '('));
20703 }
20704
20705 const extglob = extglobs[extglobs.length - 1];
20706 if (extglob && state.parens === extglob.parens + 1) {
20707 extglobClose(extglobs.pop());
20708 continue;
20709 }
20710
20711 push({ type: 'paren', value, output: state.parens ? ')' : '\\)' });
20712 decrement('parens');
20713 continue;
20714 }
20715
20716 /**
20717 * Square brackets
20718 */
20719
20720 if (value === '[') {
20721 if (opts.nobracket === true || !remaining().includes(']')) {
20722 if (opts.nobracket !== true && opts.strictBrackets === true) {
20723 throw new SyntaxError(syntaxError('closing', ']'));
20724 }
20725
20726 value = `\\${value}`;
20727 } else {
20728 increment('brackets');
20729 }
20730
20731 push({ type: 'bracket', value });
20732 continue;
20733 }
20734
20735 if (value === ']') {
20736 if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {
20737 push({ type: 'text', value, output: `\\${value}` });
20738 continue;
20739 }
20740
20741 if (state.brackets === 0) {
20742 if (opts.strictBrackets === true) {
20743 throw new SyntaxError(syntaxError('opening', '['));
20744 }
20745
20746 push({ type: 'text', value, output: `\\${value}` });
20747 continue;
20748 }
20749
20750 decrement('brackets');
20751
20752 const prevValue = prev.value.slice(1);
20753 if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {
20754 value = `/${value}`;
20755 }
20756
20757 prev.value += value;
20758 append({ value });
20759
20760 // when literal brackets are explicitly disabled
20761 // assume we should match with a regex character class
20762 if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {
20763 continue;
20764 }
20765
20766 const escaped = utils.escapeRegex(prev.value);
20767 state.output = state.output.slice(0, -prev.value.length);
20768
20769 // when literal brackets are explicitly enabled
20770 // assume we should escape the brackets to match literal characters
20771 if (opts.literalBrackets === true) {
20772 state.output += escaped;
20773 prev.value = escaped;
20774 continue;
20775 }
20776
20777 // when the user specifies nothing, try to match both
20778 prev.value = `(${capture}${escaped}|${prev.value})`;
20779 state.output += prev.value;
20780 continue;
20781 }
20782
20783 /**
20784 * Braces
20785 */
20786
20787 if (value === '{' && opts.nobrace !== true) {
20788 increment('braces');
20789
20790 const open = {
20791 type: 'brace',
20792 value,
20793 output: '(',
20794 outputIndex: state.output.length,
20795 tokensIndex: state.tokens.length
20796 };
20797
20798 braces.push(open);
20799 push(open);
20800 continue;
20801 }
20802
20803 if (value === '}') {
20804 const brace = braces[braces.length - 1];
20805
20806 if (opts.nobrace === true || !brace) {
20807 push({ type: 'text', value, output: value });
20808 continue;
20809 }
20810
20811 let output = ')';
20812
20813 if (brace.dots === true) {
20814 const arr = tokens.slice();
20815 const range = [];
20816
20817 for (let i = arr.length - 1; i >= 0; i--) {
20818 tokens.pop();
20819 if (arr[i].type === 'brace') {
20820 break;
20821 }
20822 if (arr[i].type !== 'dots') {
20823 range.unshift(arr[i].value);
20824 }
20825 }
20826
20827 output = expandRange(range, opts);
20828 state.backtrack = true;
20829 }
20830
20831 if (brace.comma !== true && brace.dots !== true) {
20832 const out = state.output.slice(0, brace.outputIndex);
20833 const toks = state.tokens.slice(brace.tokensIndex);
20834 brace.value = brace.output = '\\{';
20835 value = output = '\\}';
20836 state.output = out;
20837 for (const t of toks) {
20838 state.output += (t.output || t.value);
20839 }
20840 }
20841
20842 push({ type: 'brace', value, output });
20843 decrement('braces');
20844 braces.pop();
20845 continue;
20846 }
20847
20848 /**
20849 * Pipes
20850 */
20851
20852 if (value === '|') {
20853 if (extglobs.length > 0) {
20854 extglobs[extglobs.length - 1].conditions++;
20855 }
20856 push({ type: 'text', value });
20857 continue;
20858 }
20859
20860 /**
20861 * Commas
20862 */
20863
20864 if (value === ',') {
20865 let output = value;
20866
20867 const brace = braces[braces.length - 1];
20868 if (brace && stack[stack.length - 1] === 'braces') {
20869 brace.comma = true;
20870 output = '|';
20871 }
20872
20873 push({ type: 'comma', value, output });
20874 continue;
20875 }
20876
20877 /**
20878 * Slashes
20879 */
20880
20881 if (value === '/') {
20882 // if the beginning of the glob is "./", advance the start
20883 // to the current index, and don't add the "./" characters
20884 // to the state. This greatly simplifies lookbehinds when
20885 // checking for BOS characters like "!" and "." (not "./")
20886 if (prev.type === 'dot' && state.index === state.start + 1) {
20887 state.start = state.index + 1;
20888 state.consumed = '';
20889 state.output = '';
20890 tokens.pop();
20891 prev = bos; // reset "prev" to the first token
20892 continue;
20893 }
20894
20895 push({ type: 'slash', value, output: SLASH_LITERAL });
20896 continue;
20897 }
20898
20899 /**
20900 * Dots
20901 */
20902
20903 if (value === '.') {
20904 if (state.braces > 0 && prev.type === 'dot') {
20905 if (prev.value === '.') prev.output = DOT_LITERAL;
20906 const brace = braces[braces.length - 1];
20907 prev.type = 'dots';
20908 prev.output += value;
20909 prev.value += value;
20910 brace.dots = true;
20911 continue;
20912 }
20913
20914 if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {
20915 push({ type: 'text', value, output: DOT_LITERAL });
20916 continue;
20917 }
20918
20919 push({ type: 'dot', value, output: DOT_LITERAL });
20920 continue;
20921 }
20922
20923 /**
20924 * Question marks
20925 */
20926
20927 if (value === '?') {
20928 const isGroup = prev && prev.value === '(';
20929 if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20930 extglobOpen('qmark', value);
20931 continue;
20932 }
20933
20934 if (prev && prev.type === 'paren') {
20935 const next = peek();
20936 let output = value;
20937
20938 if (next === '<' && !utils.supportsLookbehinds()) {
20939 throw new Error('Node.js v10 or higher is required for regex lookbehinds');
20940 }
20941
20942 if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\w+>)/.test(remaining()))) {
20943 output = `\\${value}`;
20944 }
20945
20946 push({ type: 'text', value, output });
20947 continue;
20948 }
20949
20950 if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {
20951 push({ type: 'qmark', value, output: QMARK_NO_DOT });
20952 continue;
20953 }
20954
20955 push({ type: 'qmark', value, output: QMARK });
20956 continue;
20957 }
20958
20959 /**
20960 * Exclamation
20961 */
20962
20963 if (value === '!') {
20964 if (opts.noextglob !== true && peek() === '(') {
20965 if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {
20966 extglobOpen('negate', value);
20967 continue;
20968 }
20969 }
20970
20971 if (opts.nonegate !== true && state.index === 0) {
20972 negate();
20973 continue;
20974 }
20975 }
20976
20977 /**
20978 * Plus
20979 */
20980
20981 if (value === '+') {
20982 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
20983 extglobOpen('plus', value);
20984 continue;
20985 }
20986
20987 if ((prev && prev.value === '(') || opts.regex === false) {
20988 push({ type: 'plus', value, output: PLUS_LITERAL });
20989 continue;
20990 }
20991
20992 if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {
20993 push({ type: 'plus', value });
20994 continue;
20995 }
20996
20997 push({ type: 'plus', value: PLUS_LITERAL });
20998 continue;
20999 }
21000
21001 /**
21002 * Plain text
21003 */
21004
21005 if (value === '@') {
21006 if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {
21007 push({ type: 'at', extglob: true, value, output: '' });
21008 continue;
21009 }
21010
21011 push({ type: 'text', value });
21012 continue;
21013 }
21014
21015 /**
21016 * Plain text
21017 */
21018
21019 if (value !== '*') {
21020 if (value === '$' || value === '^') {
21021 value = `\\${value}`;
21022 }
21023
21024 const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());
21025 if (match) {
21026 value += match[0];
21027 state.index += match[0].length;
21028 }
21029
21030 push({ type: 'text', value });
21031 continue;
21032 }
21033
21034 /**
21035 * Stars
21036 */
21037
21038 if (prev && (prev.type === 'globstar' || prev.star === true)) {
21039 prev.type = 'star';
21040 prev.star = true;
21041 prev.value += value;
21042 prev.output = star;
21043 state.backtrack = true;
21044 state.globstar = true;
21045 consume(value);
21046 continue;
21047 }
21048
21049 let rest = remaining();
21050 if (opts.noextglob !== true && /^\([^?]/.test(rest)) {
21051 extglobOpen('star', value);
21052 continue;
21053 }
21054
21055 if (prev.type === 'star') {
21056 if (opts.noglobstar === true) {
21057 consume(value);
21058 continue;
21059 }
21060
21061 const prior = prev.prev;
21062 const before = prior.prev;
21063 const isStart = prior.type === 'slash' || prior.type === 'bos';
21064 const afterStar = before && (before.type === 'star' || before.type === 'globstar');
21065
21066 if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {
21067 push({ type: 'star', value, output: '' });
21068 continue;
21069 }
21070
21071 const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');
21072 const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');
21073 if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {
21074 push({ type: 'star', value, output: '' });
21075 continue;
21076 }
21077
21078 // strip consecutive `/**/`
21079 while (rest.slice(0, 3) === '/**') {
21080 const after = input[state.index + 4];
21081 if (after && after !== '/') {
21082 break;
21083 }
21084 rest = rest.slice(3);
21085 consume('/**', 3);
21086 }
21087
21088 if (prior.type === 'bos' && eos()) {
21089 prev.type = 'globstar';
21090 prev.value += value;
21091 prev.output = globstar(opts);
21092 state.output = prev.output;
21093 state.globstar = true;
21094 consume(value);
21095 continue;
21096 }
21097
21098 if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {
21099 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21100 prior.output = `(?:${prior.output}`;
21101
21102 prev.type = 'globstar';
21103 prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');
21104 prev.value += value;
21105 state.globstar = true;
21106 state.output += prior.output + prev.output;
21107 consume(value);
21108 continue;
21109 }
21110
21111 if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {
21112 const end = rest[1] !== void 0 ? '|$' : '';
21113
21114 state.output = state.output.slice(0, -(prior.output + prev.output).length);
21115 prior.output = `(?:${prior.output}`;
21116
21117 prev.type = 'globstar';
21118 prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;
21119 prev.value += value;
21120
21121 state.output += prior.output + prev.output;
21122 state.globstar = true;
21123
21124 consume(value + advance());
21125
21126 push({ type: 'slash', value: '/', output: '' });
21127 continue;
21128 }
21129
21130 if (prior.type === 'bos' && rest[0] === '/') {
21131 prev.type = 'globstar';
21132 prev.value += value;
21133 prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;
21134 state.output = prev.output;
21135 state.globstar = true;
21136 consume(value + advance());
21137 push({ type: 'slash', value: '/', output: '' });
21138 continue;
21139 }
21140
21141 // remove single star from output
21142 state.output = state.output.slice(0, -prev.output.length);
21143
21144 // reset previous token to globstar
21145 prev.type = 'globstar';
21146 prev.output = globstar(opts);
21147 prev.value += value;
21148
21149 // reset output with globstar
21150 state.output += prev.output;
21151 state.globstar = true;
21152 consume(value);
21153 continue;
21154 }
21155
21156 const token = { type: 'star', value, output: star };
21157
21158 if (opts.bash === true) {
21159 token.output = '.*?';
21160 if (prev.type === 'bos' || prev.type === 'slash') {
21161 token.output = nodot + token.output;
21162 }
21163 push(token);
21164 continue;
21165 }
21166
21167 if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {
21168 token.output = value;
21169 push(token);
21170 continue;
21171 }
21172
21173 if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {
21174 if (prev.type === 'dot') {
21175 state.output += NO_DOT_SLASH;
21176 prev.output += NO_DOT_SLASH;
21177
21178 } else if (opts.dot === true) {
21179 state.output += NO_DOTS_SLASH;
21180 prev.output += NO_DOTS_SLASH;
21181
21182 } else {
21183 state.output += nodot;
21184 prev.output += nodot;
21185 }
21186
21187 if (peek() !== '*') {
21188 state.output += ONE_CHAR;
21189 prev.output += ONE_CHAR;
21190 }
21191 }
21192
21193 push(token);
21194 }
21195
21196 while (state.brackets > 0) {
21197 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));
21198 state.output = utils.escapeLast(state.output, '[');
21199 decrement('brackets');
21200 }
21201
21202 while (state.parens > 0) {
21203 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));
21204 state.output = utils.escapeLast(state.output, '(');
21205 decrement('parens');
21206 }
21207
21208 while (state.braces > 0) {
21209 if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));
21210 state.output = utils.escapeLast(state.output, '{');
21211 decrement('braces');
21212 }
21213
21214 if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {
21215 push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });
21216 }
21217
21218 // rebuild the output if we had to backtrack at any point
21219 if (state.backtrack === true) {
21220 state.output = '';
21221
21222 for (const token of state.tokens) {
21223 state.output += token.output != null ? token.output : token.value;
21224
21225 if (token.suffix) {
21226 state.output += token.suffix;
21227 }
21228 }
21229 }
21230
21231 return state;
21232};
21233
21234/**
21235 * Fast paths for creating regular expressions for common glob patterns.
21236 * This can significantly speed up processing and has very little downside
21237 * impact when none of the fast paths match.
21238 */
21239
21240parse.fastpaths = (input, options) => {
21241 const opts = { ...options };
21242 const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;
21243 const len = input.length;
21244 if (len > max) {
21245 throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);
21246 }
21247
21248 input = REPLACEMENTS[input] || input;
21249 const win32 = utils.isWindows(options);
21250
21251 // create constants based on platform, for windows or posix
21252 const {
21253 DOT_LITERAL,
21254 SLASH_LITERAL,
21255 ONE_CHAR,
21256 DOTS_SLASH,
21257 NO_DOT,
21258 NO_DOTS,
21259 NO_DOTS_SLASH,
21260 STAR,
21261 START_ANCHOR
21262 } = constants.globChars(win32);
21263
21264 const nodot = opts.dot ? NO_DOTS : NO_DOT;
21265 const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;
21266 const capture = opts.capture ? '' : '?:';
21267 const state = { negated: false, prefix: '' };
21268 let star = opts.bash === true ? '.*?' : STAR;
21269
21270 if (opts.capture) {
21271 star = `(${star})`;
21272 }
21273
21274 const globstar = (opts) => {
21275 if (opts.noglobstar === true) return star;
21276 return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;
21277 };
21278
21279 const create = str => {
21280 switch (str) {
21281 case '*':
21282 return `${nodot}${ONE_CHAR}${star}`;
21283
21284 case '.*':
21285 return `${DOT_LITERAL}${ONE_CHAR}${star}`;
21286
21287 case '*.*':
21288 return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21289
21290 case '*/*':
21291 return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;
21292
21293 case '**':
21294 return nodot + globstar(opts);
21295
21296 case '**/*':
21297 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;
21298
21299 case '**/*.*':
21300 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;
21301
21302 case '**/.*':
21303 return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;
21304
21305 default: {
21306 const match = /^(.*?)\.(\w+)$/.exec(str);
21307 if (!match) return;
21308
21309 const source = create(match[1]);
21310 if (!source) return;
21311
21312 return source + DOT_LITERAL + match[2];
21313 }
21314 }
21315 };
21316
21317 const output = utils.removePrefix(input, state);
21318 let source = create(output);
21319
21320 if (source && opts.strictSlashes !== true) {
21321 source += `${SLASH_LITERAL}?`;
21322 }
21323
21324 return source;
21325};
21326
21327module.exports = parse;
21328
21329
21330/***/ }),
21331/* 94 */
21332/***/ (function(module, exports, __webpack_require__) {
21333
21334"use strict";
21335
21336Object.defineProperty(exports, "__esModule", { value: true });
21337const merge2 = __webpack_require__(95);
21338function merge(streams) {
21339 const mergedStream = merge2(streams);
21340 streams.forEach((stream) => {
21341 stream.once('error', (error) => mergedStream.emit('error', error));
21342 });
21343 mergedStream.once('close', () => propagateCloseEventToSources(streams));
21344 mergedStream.once('end', () => propagateCloseEventToSources(streams));
21345 return mergedStream;
21346}
21347exports.merge = merge;
21348function propagateCloseEventToSources(streams) {
21349 streams.forEach((stream) => stream.emit('close'));
21350}
21351
21352
21353/***/ }),
21354/* 95 */
21355/***/ (function(module, exports, __webpack_require__) {
21356
21357"use strict";
21358
21359/*
21360 * merge2
21361 * https://github.com/teambition/merge2
21362 *
21363 * Copyright (c) 2014-2016 Teambition
21364 * Licensed under the MIT license.
21365 */
21366const Stream = __webpack_require__(96)
21367const PassThrough = Stream.PassThrough
21368const slice = Array.prototype.slice
21369
21370module.exports = merge2
21371
21372function merge2 () {
21373 const streamsQueue = []
21374 let merging = false
21375 const args = slice.call(arguments)
21376 let options = args[args.length - 1]
21377
21378 if (options && !Array.isArray(options) && options.pipe == null) args.pop()
21379 else options = {}
21380
21381 const doEnd = options.end !== false
21382 if (options.objectMode == null) options.objectMode = true
21383 if (options.highWaterMark == null) options.highWaterMark = 64 * 1024
21384 const mergedStream = PassThrough(options)
21385
21386 function addStream () {
21387 for (let i = 0, len = arguments.length; i < len; i++) {
21388 streamsQueue.push(pauseStreams(arguments[i], options))
21389 }
21390 mergeStream()
21391 return this
21392 }
21393
21394 function mergeStream () {
21395 if (merging) return
21396 merging = true
21397
21398 let streams = streamsQueue.shift()
21399 if (!streams) {
21400 process.nextTick(endStream)
21401 return
21402 }
21403 if (!Array.isArray(streams)) streams = [streams]
21404
21405 let pipesCount = streams.length + 1
21406
21407 function next () {
21408 if (--pipesCount > 0) return
21409 merging = false
21410 mergeStream()
21411 }
21412
21413 function pipe (stream) {
21414 function onend () {
21415 stream.removeListener('merge2UnpipeEnd', onend)
21416 stream.removeListener('end', onend)
21417 next()
21418 }
21419 // skip ended stream
21420 if (stream._readableState.endEmitted) return next()
21421
21422 stream.on('merge2UnpipeEnd', onend)
21423 stream.on('end', onend)
21424 stream.pipe(mergedStream, { end: false })
21425 // compatible for old stream
21426 stream.resume()
21427 }
21428
21429 for (let i = 0; i < streams.length; i++) pipe(streams[i])
21430
21431 next()
21432 }
21433
21434 function endStream () {
21435 merging = false
21436 // emit 'queueDrain' when all streams merged.
21437 mergedStream.emit('queueDrain')
21438 return doEnd && mergedStream.end()
21439 }
21440
21441 mergedStream.setMaxListeners(0)
21442 mergedStream.add = addStream
21443 mergedStream.on('unpipe', function (stream) {
21444 stream.emit('merge2UnpipeEnd')
21445 })
21446
21447 if (args.length) addStream.apply(null, args)
21448 return mergedStream
21449}
21450
21451// check and pause streams for pipe.
21452function pauseStreams (streams, options) {
21453 if (!Array.isArray(streams)) {
21454 // Backwards-compat with old-style streams
21455 if (!streams._readableState && streams.pipe) streams = streams.pipe(PassThrough(options))
21456 if (!streams._readableState || !streams.pause || !streams.pipe) {
21457 throw new Error('Only readable stream can be merged.')
21458 }
21459 streams.pause()
21460 } else {
21461 for (let i = 0, len = streams.length; i < len; i++) streams[i] = pauseStreams(streams[i], options)
21462 }
21463 return streams
21464}
21465
21466
21467/***/ }),
21468/* 96 */
21469/***/ (function(module, exports) {
21470
21471module.exports = require("stream");
21472
21473/***/ }),
21474/* 97 */
21475/***/ (function(module, exports, __webpack_require__) {
21476
21477"use strict";
21478
21479Object.defineProperty(exports, "__esModule", { value: true });
21480function isString(input) {
21481 return typeof input === 'string';
21482}
21483exports.isString = isString;
21484function isEmpty(input) {
21485 return input === '';
21486}
21487exports.isEmpty = isEmpty;
21488
21489
21490/***/ }),
21491/* 98 */
21492/***/ (function(module, exports, __webpack_require__) {
21493
21494"use strict";
21495
21496Object.defineProperty(exports, "__esModule", { value: true });
21497const stream_1 = __webpack_require__(99);
21498const provider_1 = __webpack_require__(126);
21499class ProviderAsync extends provider_1.default {
21500 constructor() {
21501 super(...arguments);
21502 this._reader = new stream_1.default(this._settings);
21503 }
21504 read(task) {
21505 const root = this._getRootDirectory(task);
21506 const options = this._getReaderOptions(task);
21507 const entries = [];
21508 return new Promise((resolve, reject) => {
21509 const stream = this.api(root, task, options);
21510 stream.once('error', reject);
21511 stream.on('data', (entry) => entries.push(options.transform(entry)));
21512 stream.once('end', () => resolve(entries));
21513 });
21514 }
21515 api(root, task, options) {
21516 if (task.dynamic) {
21517 return this._reader.dynamic(root, options);
21518 }
21519 return this._reader.static(task.patterns, options);
21520 }
21521}
21522exports.default = ProviderAsync;
21523
21524
21525/***/ }),
21526/* 99 */
21527/***/ (function(module, exports, __webpack_require__) {
21528
21529"use strict";
21530
21531Object.defineProperty(exports, "__esModule", { value: true });
21532const stream_1 = __webpack_require__(96);
21533const fsStat = __webpack_require__(100);
21534const fsWalk = __webpack_require__(105);
21535const reader_1 = __webpack_require__(125);
21536class ReaderStream extends reader_1.default {
21537 constructor() {
21538 super(...arguments);
21539 this._walkStream = fsWalk.walkStream;
21540 this._stat = fsStat.stat;
21541 }
21542 dynamic(root, options) {
21543 return this._walkStream(root, options);
21544 }
21545 static(patterns, options) {
21546 const filepaths = patterns.map(this._getFullEntryPath, this);
21547 const stream = new stream_1.PassThrough({ objectMode: true });
21548 stream._write = (index, _enc, done) => {
21549 return this._getEntry(filepaths[index], patterns[index], options)
21550 .then((entry) => {
21551 if (entry !== null && options.entryFilter(entry)) {
21552 stream.push(entry);
21553 }
21554 if (index === filepaths.length - 1) {
21555 stream.end();
21556 }
21557 done();
21558 })
21559 .catch(done);
21560 };
21561 for (let i = 0; i < filepaths.length; i++) {
21562 stream.write(i);
21563 }
21564 return stream;
21565 }
21566 _getEntry(filepath, pattern, options) {
21567 return this._getStat(filepath)
21568 .then((stats) => this._makeEntry(stats, pattern))
21569 .catch((error) => {
21570 if (options.errorFilter(error)) {
21571 return null;
21572 }
21573 throw error;
21574 });
21575 }
21576 _getStat(filepath) {
21577 return new Promise((resolve, reject) => {
21578 this._stat(filepath, this._fsStatSettings, (error, stats) => {
21579 return error === null ? resolve(stats) : reject(error);
21580 });
21581 });
21582 }
21583}
21584exports.default = ReaderStream;
21585
21586
21587/***/ }),
21588/* 100 */
21589/***/ (function(module, exports, __webpack_require__) {
21590
21591"use strict";
21592
21593Object.defineProperty(exports, "__esModule", { value: true });
21594const async = __webpack_require__(101);
21595const sync = __webpack_require__(102);
21596const settings_1 = __webpack_require__(103);
21597exports.Settings = settings_1.default;
21598function stat(path, optionsOrSettingsOrCallback, callback) {
21599 if (typeof optionsOrSettingsOrCallback === 'function') {
21600 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21601 }
21602 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21603}
21604exports.stat = stat;
21605function statSync(path, optionsOrSettings) {
21606 const settings = getSettings(optionsOrSettings);
21607 return sync.read(path, settings);
21608}
21609exports.statSync = statSync;
21610function getSettings(settingsOrOptions = {}) {
21611 if (settingsOrOptions instanceof settings_1.default) {
21612 return settingsOrOptions;
21613 }
21614 return new settings_1.default(settingsOrOptions);
21615}
21616
21617
21618/***/ }),
21619/* 101 */
21620/***/ (function(module, exports, __webpack_require__) {
21621
21622"use strict";
21623
21624Object.defineProperty(exports, "__esModule", { value: true });
21625function read(path, settings, callback) {
21626 settings.fs.lstat(path, (lstatError, lstat) => {
21627 if (lstatError !== null) {
21628 return callFailureCallback(callback, lstatError);
21629 }
21630 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21631 return callSuccessCallback(callback, lstat);
21632 }
21633 settings.fs.stat(path, (statError, stat) => {
21634 if (statError !== null) {
21635 if (settings.throwErrorOnBrokenSymbolicLink) {
21636 return callFailureCallback(callback, statError);
21637 }
21638 return callSuccessCallback(callback, lstat);
21639 }
21640 if (settings.markSymbolicLink) {
21641 stat.isSymbolicLink = () => true;
21642 }
21643 callSuccessCallback(callback, stat);
21644 });
21645 });
21646}
21647exports.read = read;
21648function callFailureCallback(callback, error) {
21649 callback(error);
21650}
21651function callSuccessCallback(callback, result) {
21652 callback(null, result);
21653}
21654
21655
21656/***/ }),
21657/* 102 */
21658/***/ (function(module, exports, __webpack_require__) {
21659
21660"use strict";
21661
21662Object.defineProperty(exports, "__esModule", { value: true });
21663function read(path, settings) {
21664 const lstat = settings.fs.lstatSync(path);
21665 if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {
21666 return lstat;
21667 }
21668 try {
21669 const stat = settings.fs.statSync(path);
21670 if (settings.markSymbolicLink) {
21671 stat.isSymbolicLink = () => true;
21672 }
21673 return stat;
21674 }
21675 catch (error) {
21676 if (!settings.throwErrorOnBrokenSymbolicLink) {
21677 return lstat;
21678 }
21679 throw error;
21680 }
21681}
21682exports.read = read;
21683
21684
21685/***/ }),
21686/* 103 */
21687/***/ (function(module, exports, __webpack_require__) {
21688
21689"use strict";
21690
21691Object.defineProperty(exports, "__esModule", { value: true });
21692const fs = __webpack_require__(104);
21693class Settings {
21694 constructor(_options = {}) {
21695 this._options = _options;
21696 this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);
21697 this.fs = fs.createFileSystemAdapter(this._options.fs);
21698 this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);
21699 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
21700 }
21701 _getValue(option, value) {
21702 return option === undefined ? value : option;
21703 }
21704}
21705exports.default = Settings;
21706
21707
21708/***/ }),
21709/* 104 */
21710/***/ (function(module, exports, __webpack_require__) {
21711
21712"use strict";
21713
21714Object.defineProperty(exports, "__esModule", { value: true });
21715const fs = __webpack_require__(40);
21716exports.FILE_SYSTEM_ADAPTER = {
21717 lstat: fs.lstat,
21718 stat: fs.stat,
21719 lstatSync: fs.lstatSync,
21720 statSync: fs.statSync
21721};
21722function createFileSystemAdapter(fsMethods) {
21723 if (fsMethods === undefined) {
21724 return exports.FILE_SYSTEM_ADAPTER;
21725 }
21726 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
21727}
21728exports.createFileSystemAdapter = createFileSystemAdapter;
21729
21730
21731/***/ }),
21732/* 105 */
21733/***/ (function(module, exports, __webpack_require__) {
21734
21735"use strict";
21736
21737Object.defineProperty(exports, "__esModule", { value: true });
21738const async_1 = __webpack_require__(106);
21739const stream_1 = __webpack_require__(121);
21740const sync_1 = __webpack_require__(122);
21741const settings_1 = __webpack_require__(124);
21742exports.Settings = settings_1.default;
21743function walk(directory, optionsOrSettingsOrCallback, callback) {
21744 if (typeof optionsOrSettingsOrCallback === 'function') {
21745 return new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);
21746 }
21747 new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);
21748}
21749exports.walk = walk;
21750function walkSync(directory, optionsOrSettings) {
21751 const settings = getSettings(optionsOrSettings);
21752 const provider = new sync_1.default(directory, settings);
21753 return provider.read();
21754}
21755exports.walkSync = walkSync;
21756function walkStream(directory, optionsOrSettings) {
21757 const settings = getSettings(optionsOrSettings);
21758 const provider = new stream_1.default(directory, settings);
21759 return provider.read();
21760}
21761exports.walkStream = walkStream;
21762function getSettings(settingsOrOptions = {}) {
21763 if (settingsOrOptions instanceof settings_1.default) {
21764 return settingsOrOptions;
21765 }
21766 return new settings_1.default(settingsOrOptions);
21767}
21768
21769
21770/***/ }),
21771/* 106 */
21772/***/ (function(module, exports, __webpack_require__) {
21773
21774"use strict";
21775
21776Object.defineProperty(exports, "__esModule", { value: true });
21777const async_1 = __webpack_require__(107);
21778class AsyncProvider {
21779 constructor(_root, _settings) {
21780 this._root = _root;
21781 this._settings = _settings;
21782 this._reader = new async_1.default(this._root, this._settings);
21783 this._storage = new Set();
21784 }
21785 read(callback) {
21786 this._reader.onError((error) => {
21787 callFailureCallback(callback, error);
21788 });
21789 this._reader.onEntry((entry) => {
21790 this._storage.add(entry);
21791 });
21792 this._reader.onEnd(() => {
21793 callSuccessCallback(callback, [...this._storage]);
21794 });
21795 this._reader.read();
21796 }
21797}
21798exports.default = AsyncProvider;
21799function callFailureCallback(callback, error) {
21800 callback(error);
21801}
21802function callSuccessCallback(callback, entries) {
21803 callback(null, entries);
21804}
21805
21806
21807/***/ }),
21808/* 107 */
21809/***/ (function(module, exports, __webpack_require__) {
21810
21811"use strict";
21812
21813Object.defineProperty(exports, "__esModule", { value: true });
21814const events_1 = __webpack_require__(51);
21815const fsScandir = __webpack_require__(108);
21816const fastq = __webpack_require__(117);
21817const common = __webpack_require__(119);
21818const reader_1 = __webpack_require__(120);
21819class AsyncReader extends reader_1.default {
21820 constructor(_root, _settings) {
21821 super(_root, _settings);
21822 this._settings = _settings;
21823 this._scandir = fsScandir.scandir;
21824 this._emitter = new events_1.EventEmitter();
21825 this._queue = fastq(this._worker.bind(this), this._settings.concurrency);
21826 this._isFatalError = false;
21827 this._isDestroyed = false;
21828 this._queue.drain = () => {
21829 if (!this._isFatalError) {
21830 this._emitter.emit('end');
21831 }
21832 };
21833 }
21834 read() {
21835 this._isFatalError = false;
21836 this._isDestroyed = false;
21837 setImmediate(() => {
21838 this._pushToQueue(this._root, this._settings.basePath);
21839 });
21840 return this._emitter;
21841 }
21842 destroy() {
21843 if (this._isDestroyed) {
21844 throw new Error('The reader is already destroyed');
21845 }
21846 this._isDestroyed = true;
21847 this._queue.killAndDrain();
21848 }
21849 onEntry(callback) {
21850 this._emitter.on('entry', callback);
21851 }
21852 onError(callback) {
21853 this._emitter.once('error', callback);
21854 }
21855 onEnd(callback) {
21856 this._emitter.once('end', callback);
21857 }
21858 _pushToQueue(directory, base) {
21859 const queueItem = { directory, base };
21860 this._queue.push(queueItem, (error) => {
21861 if (error !== null) {
21862 this._handleError(error);
21863 }
21864 });
21865 }
21866 _worker(item, done) {
21867 this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {
21868 if (error !== null) {
21869 return done(error, undefined);
21870 }
21871 for (const entry of entries) {
21872 this._handleEntry(entry, item.base);
21873 }
21874 done(null, undefined);
21875 });
21876 }
21877 _handleError(error) {
21878 if (!common.isFatalError(this._settings, error)) {
21879 return;
21880 }
21881 this._isFatalError = true;
21882 this._isDestroyed = true;
21883 this._emitter.emit('error', error);
21884 }
21885 _handleEntry(entry, base) {
21886 if (this._isDestroyed || this._isFatalError) {
21887 return;
21888 }
21889 const fullpath = entry.path;
21890 if (base !== undefined) {
21891 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
21892 }
21893 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
21894 this._emitEntry(entry);
21895 }
21896 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
21897 this._pushToQueue(fullpath, entry.path);
21898 }
21899 }
21900 _emitEntry(entry) {
21901 this._emitter.emit('entry', entry);
21902 }
21903}
21904exports.default = AsyncReader;
21905
21906
21907/***/ }),
21908/* 108 */
21909/***/ (function(module, exports, __webpack_require__) {
21910
21911"use strict";
21912
21913Object.defineProperty(exports, "__esModule", { value: true });
21914const async = __webpack_require__(109);
21915const sync = __webpack_require__(114);
21916const settings_1 = __webpack_require__(115);
21917exports.Settings = settings_1.default;
21918function scandir(path, optionsOrSettingsOrCallback, callback) {
21919 if (typeof optionsOrSettingsOrCallback === 'function') {
21920 return async.read(path, getSettings(), optionsOrSettingsOrCallback);
21921 }
21922 async.read(path, getSettings(optionsOrSettingsOrCallback), callback);
21923}
21924exports.scandir = scandir;
21925function scandirSync(path, optionsOrSettings) {
21926 const settings = getSettings(optionsOrSettings);
21927 return sync.read(path, settings);
21928}
21929exports.scandirSync = scandirSync;
21930function getSettings(settingsOrOptions = {}) {
21931 if (settingsOrOptions instanceof settings_1.default) {
21932 return settingsOrOptions;
21933 }
21934 return new settings_1.default(settingsOrOptions);
21935}
21936
21937
21938/***/ }),
21939/* 109 */
21940/***/ (function(module, exports, __webpack_require__) {
21941
21942"use strict";
21943
21944Object.defineProperty(exports, "__esModule", { value: true });
21945const fsStat = __webpack_require__(100);
21946const rpl = __webpack_require__(110);
21947const constants_1 = __webpack_require__(111);
21948const utils = __webpack_require__(112);
21949function read(directory, settings, callback) {
21950 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
21951 return readdirWithFileTypes(directory, settings, callback);
21952 }
21953 return readdir(directory, settings, callback);
21954}
21955exports.read = read;
21956function readdirWithFileTypes(directory, settings, callback) {
21957 settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {
21958 if (readdirError !== null) {
21959 return callFailureCallback(callback, readdirError);
21960 }
21961 const entries = dirents.map((dirent) => ({
21962 dirent,
21963 name: dirent.name,
21964 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
21965 }));
21966 if (!settings.followSymbolicLinks) {
21967 return callSuccessCallback(callback, entries);
21968 }
21969 const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));
21970 rpl(tasks, (rplError, rplEntries) => {
21971 if (rplError !== null) {
21972 return callFailureCallback(callback, rplError);
21973 }
21974 callSuccessCallback(callback, rplEntries);
21975 });
21976 });
21977}
21978exports.readdirWithFileTypes = readdirWithFileTypes;
21979function makeRplTaskEntry(entry, settings) {
21980 return (done) => {
21981 if (!entry.dirent.isSymbolicLink()) {
21982 return done(null, entry);
21983 }
21984 settings.fs.stat(entry.path, (statError, stats) => {
21985 if (statError !== null) {
21986 if (settings.throwErrorOnBrokenSymbolicLink) {
21987 return done(statError);
21988 }
21989 return done(null, entry);
21990 }
21991 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
21992 return done(null, entry);
21993 });
21994 };
21995}
21996function readdir(directory, settings, callback) {
21997 settings.fs.readdir(directory, (readdirError, names) => {
21998 if (readdirError !== null) {
21999 return callFailureCallback(callback, readdirError);
22000 }
22001 const filepaths = names.map((name) => `${directory}${settings.pathSegmentSeparator}${name}`);
22002 const tasks = filepaths.map((filepath) => {
22003 return (done) => fsStat.stat(filepath, settings.fsStatSettings, done);
22004 });
22005 rpl(tasks, (rplError, results) => {
22006 if (rplError !== null) {
22007 return callFailureCallback(callback, rplError);
22008 }
22009 const entries = [];
22010 names.forEach((name, index) => {
22011 const stats = results[index];
22012 const entry = {
22013 name,
22014 path: filepaths[index],
22015 dirent: utils.fs.createDirentFromStats(name, stats)
22016 };
22017 if (settings.stats) {
22018 entry.stats = stats;
22019 }
22020 entries.push(entry);
22021 });
22022 callSuccessCallback(callback, entries);
22023 });
22024 });
22025}
22026exports.readdir = readdir;
22027function callFailureCallback(callback, error) {
22028 callback(error);
22029}
22030function callSuccessCallback(callback, result) {
22031 callback(null, result);
22032}
22033
22034
22035/***/ }),
22036/* 110 */
22037/***/ (function(module, exports) {
22038
22039module.exports = runParallel
22040
22041function runParallel (tasks, cb) {
22042 var results, pending, keys
22043 var isSync = true
22044
22045 if (Array.isArray(tasks)) {
22046 results = []
22047 pending = tasks.length
22048 } else {
22049 keys = Object.keys(tasks)
22050 results = {}
22051 pending = keys.length
22052 }
22053
22054 function done (err) {
22055 function end () {
22056 if (cb) cb(err, results)
22057 cb = null
22058 }
22059 if (isSync) process.nextTick(end)
22060 else end()
22061 }
22062
22063 function each (i, err, result) {
22064 results[i] = result
22065 if (--pending === 0 || err) {
22066 done(err)
22067 }
22068 }
22069
22070 if (!pending) {
22071 // empty
22072 done(null)
22073 } else if (keys) {
22074 // object
22075 keys.forEach(function (key) {
22076 tasks[key](function (err, result) { each(key, err, result) })
22077 })
22078 } else {
22079 // array
22080 tasks.forEach(function (task, i) {
22081 task(function (err, result) { each(i, err, result) })
22082 })
22083 }
22084
22085 isSync = false
22086}
22087
22088
22089/***/ }),
22090/* 111 */
22091/***/ (function(module, exports, __webpack_require__) {
22092
22093"use strict";
22094
22095Object.defineProperty(exports, "__esModule", { value: true });
22096const NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');
22097const MAJOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);
22098const MINOR_VERSION = parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);
22099const SUPPORTED_MAJOR_VERSION = 10;
22100const SUPPORTED_MINOR_VERSION = 10;
22101const IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;
22102const IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;
22103/**
22104 * IS `true` for Node.js 10.10 and greater.
22105 */
22106exports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;
22107
22108
22109/***/ }),
22110/* 112 */
22111/***/ (function(module, exports, __webpack_require__) {
22112
22113"use strict";
22114
22115Object.defineProperty(exports, "__esModule", { value: true });
22116const fs = __webpack_require__(113);
22117exports.fs = fs;
22118
22119
22120/***/ }),
22121/* 113 */
22122/***/ (function(module, exports, __webpack_require__) {
22123
22124"use strict";
22125
22126Object.defineProperty(exports, "__esModule", { value: true });
22127class DirentFromStats {
22128 constructor(name, stats) {
22129 this.name = name;
22130 this.isBlockDevice = stats.isBlockDevice.bind(stats);
22131 this.isCharacterDevice = stats.isCharacterDevice.bind(stats);
22132 this.isDirectory = stats.isDirectory.bind(stats);
22133 this.isFIFO = stats.isFIFO.bind(stats);
22134 this.isFile = stats.isFile.bind(stats);
22135 this.isSocket = stats.isSocket.bind(stats);
22136 this.isSymbolicLink = stats.isSymbolicLink.bind(stats);
22137 }
22138}
22139function createDirentFromStats(name, stats) {
22140 return new DirentFromStats(name, stats);
22141}
22142exports.createDirentFromStats = createDirentFromStats;
22143
22144
22145/***/ }),
22146/* 114 */
22147/***/ (function(module, exports, __webpack_require__) {
22148
22149"use strict";
22150
22151Object.defineProperty(exports, "__esModule", { value: true });
22152const fsStat = __webpack_require__(100);
22153const constants_1 = __webpack_require__(111);
22154const utils = __webpack_require__(112);
22155function read(directory, settings) {
22156 if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {
22157 return readdirWithFileTypes(directory, settings);
22158 }
22159 return readdir(directory, settings);
22160}
22161exports.read = read;
22162function readdirWithFileTypes(directory, settings) {
22163 const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });
22164 return dirents.map((dirent) => {
22165 const entry = {
22166 dirent,
22167 name: dirent.name,
22168 path: `${directory}${settings.pathSegmentSeparator}${dirent.name}`
22169 };
22170 if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {
22171 try {
22172 const stats = settings.fs.statSync(entry.path);
22173 entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);
22174 }
22175 catch (error) {
22176 if (settings.throwErrorOnBrokenSymbolicLink) {
22177 throw error;
22178 }
22179 }
22180 }
22181 return entry;
22182 });
22183}
22184exports.readdirWithFileTypes = readdirWithFileTypes;
22185function readdir(directory, settings) {
22186 const names = settings.fs.readdirSync(directory);
22187 return names.map((name) => {
22188 const entryPath = `${directory}${settings.pathSegmentSeparator}${name}`;
22189 const stats = fsStat.statSync(entryPath, settings.fsStatSettings);
22190 const entry = {
22191 name,
22192 path: entryPath,
22193 dirent: utils.fs.createDirentFromStats(name, stats)
22194 };
22195 if (settings.stats) {
22196 entry.stats = stats;
22197 }
22198 return entry;
22199 });
22200}
22201exports.readdir = readdir;
22202
22203
22204/***/ }),
22205/* 115 */
22206/***/ (function(module, exports, __webpack_require__) {
22207
22208"use strict";
22209
22210Object.defineProperty(exports, "__esModule", { value: true });
22211const path = __webpack_require__(13);
22212const fsStat = __webpack_require__(100);
22213const fs = __webpack_require__(116);
22214class Settings {
22215 constructor(_options = {}) {
22216 this._options = _options;
22217 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);
22218 this.fs = fs.createFileSystemAdapter(this._options.fs);
22219 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22220 this.stats = this._getValue(this._options.stats, false);
22221 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);
22222 this.fsStatSettings = new fsStat.Settings({
22223 followSymbolicLink: this.followSymbolicLinks,
22224 fs: this.fs,
22225 throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink
22226 });
22227 }
22228 _getValue(option, value) {
22229 return option === undefined ? value : option;
22230 }
22231}
22232exports.default = Settings;
22233
22234
22235/***/ }),
22236/* 116 */
22237/***/ (function(module, exports, __webpack_require__) {
22238
22239"use strict";
22240
22241Object.defineProperty(exports, "__esModule", { value: true });
22242const fs = __webpack_require__(40);
22243exports.FILE_SYSTEM_ADAPTER = {
22244 lstat: fs.lstat,
22245 stat: fs.stat,
22246 lstatSync: fs.lstatSync,
22247 statSync: fs.statSync,
22248 readdir: fs.readdir,
22249 readdirSync: fs.readdirSync
22250};
22251function createFileSystemAdapter(fsMethods) {
22252 if (fsMethods === undefined) {
22253 return exports.FILE_SYSTEM_ADAPTER;
22254 }
22255 return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);
22256}
22257exports.createFileSystemAdapter = createFileSystemAdapter;
22258
22259
22260/***/ }),
22261/* 117 */
22262/***/ (function(module, exports, __webpack_require__) {
22263
22264"use strict";
22265
22266
22267var reusify = __webpack_require__(118)
22268
22269function fastqueue (context, worker, concurrency) {
22270 if (typeof context === 'function') {
22271 concurrency = worker
22272 worker = context
22273 context = null
22274 }
22275
22276 var cache = reusify(Task)
22277 var queueHead = null
22278 var queueTail = null
22279 var _running = 0
22280
22281 var self = {
22282 push: push,
22283 drain: noop,
22284 saturated: noop,
22285 pause: pause,
22286 paused: false,
22287 concurrency: concurrency,
22288 running: running,
22289 resume: resume,
22290 idle: idle,
22291 length: length,
22292 unshift: unshift,
22293 empty: noop,
22294 kill: kill,
22295 killAndDrain: killAndDrain
22296 }
22297
22298 return self
22299
22300 function running () {
22301 return _running
22302 }
22303
22304 function pause () {
22305 self.paused = true
22306 }
22307
22308 function length () {
22309 var current = queueHead
22310 var counter = 0
22311
22312 while (current) {
22313 current = current.next
22314 counter++
22315 }
22316
22317 return counter
22318 }
22319
22320 function resume () {
22321 if (!self.paused) return
22322 self.paused = false
22323 for (var i = 0; i < self.concurrency; i++) {
22324 _running++
22325 release()
22326 }
22327 }
22328
22329 function idle () {
22330 return _running === 0 && self.length() === 0
22331 }
22332
22333 function push (value, done) {
22334 var current = cache.get()
22335
22336 current.context = context
22337 current.release = release
22338 current.value = value
22339 current.callback = done || noop
22340
22341 if (_running === self.concurrency || self.paused) {
22342 if (queueTail) {
22343 queueTail.next = current
22344 queueTail = current
22345 } else {
22346 queueHead = current
22347 queueTail = current
22348 self.saturated()
22349 }
22350 } else {
22351 _running++
22352 worker.call(context, current.value, current.worked)
22353 }
22354 }
22355
22356 function unshift (value, done) {
22357 var current = cache.get()
22358
22359 current.context = context
22360 current.release = release
22361 current.value = value
22362 current.callback = done || noop
22363
22364 if (_running === self.concurrency || self.paused) {
22365 if (queueHead) {
22366 current.next = queueHead
22367 queueHead = current
22368 } else {
22369 queueHead = current
22370 queueTail = current
22371 self.saturated()
22372 }
22373 } else {
22374 _running++
22375 worker.call(context, current.value, current.worked)
22376 }
22377 }
22378
22379 function release (holder) {
22380 if (holder) {
22381 cache.release(holder)
22382 }
22383 var next = queueHead
22384 if (next) {
22385 if (!self.paused) {
22386 if (queueTail === queueHead) {
22387 queueTail = null
22388 }
22389 queueHead = next.next
22390 next.next = null
22391 worker.call(context, next.value, next.worked)
22392 if (queueTail === null) {
22393 self.empty()
22394 }
22395 } else {
22396 _running--
22397 }
22398 } else if (--_running === 0) {
22399 self.drain()
22400 }
22401 }
22402
22403 function kill () {
22404 queueHead = null
22405 queueTail = null
22406 self.drain = noop
22407 }
22408
22409 function killAndDrain () {
22410 queueHead = null
22411 queueTail = null
22412 self.drain()
22413 self.drain = noop
22414 }
22415}
22416
22417function noop () {}
22418
22419function Task () {
22420 this.value = null
22421 this.callback = noop
22422 this.next = null
22423 this.release = noop
22424 this.context = null
22425
22426 var self = this
22427
22428 this.worked = function worked (err, result) {
22429 var callback = self.callback
22430 self.value = null
22431 self.callback = noop
22432 callback.call(self.context, err, result)
22433 self.release(self)
22434 }
22435}
22436
22437module.exports = fastqueue
22438
22439
22440/***/ }),
22441/* 118 */
22442/***/ (function(module, exports, __webpack_require__) {
22443
22444"use strict";
22445
22446
22447function reusify (Constructor) {
22448 var head = new Constructor()
22449 var tail = head
22450
22451 function get () {
22452 var current = head
22453
22454 if (current.next) {
22455 head = current.next
22456 } else {
22457 head = new Constructor()
22458 tail = head
22459 }
22460
22461 current.next = null
22462
22463 return current
22464 }
22465
22466 function release (obj) {
22467 tail.next = obj
22468 tail = obj
22469 }
22470
22471 return {
22472 get: get,
22473 release: release
22474 }
22475}
22476
22477module.exports = reusify
22478
22479
22480/***/ }),
22481/* 119 */
22482/***/ (function(module, exports, __webpack_require__) {
22483
22484"use strict";
22485
22486Object.defineProperty(exports, "__esModule", { value: true });
22487function isFatalError(settings, error) {
22488 if (settings.errorFilter === null) {
22489 return true;
22490 }
22491 return !settings.errorFilter(error);
22492}
22493exports.isFatalError = isFatalError;
22494function isAppliedFilter(filter, value) {
22495 return filter === null || filter(value);
22496}
22497exports.isAppliedFilter = isAppliedFilter;
22498function replacePathSegmentSeparator(filepath, separator) {
22499 return filepath.split(/[\\/]/).join(separator);
22500}
22501exports.replacePathSegmentSeparator = replacePathSegmentSeparator;
22502function joinPathSegments(a, b, separator) {
22503 if (a === '') {
22504 return b;
22505 }
22506 return a + separator + b;
22507}
22508exports.joinPathSegments = joinPathSegments;
22509
22510
22511/***/ }),
22512/* 120 */
22513/***/ (function(module, exports, __webpack_require__) {
22514
22515"use strict";
22516
22517Object.defineProperty(exports, "__esModule", { value: true });
22518const common = __webpack_require__(119);
22519class Reader {
22520 constructor(_root, _settings) {
22521 this._root = _root;
22522 this._settings = _settings;
22523 this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);
22524 }
22525}
22526exports.default = Reader;
22527
22528
22529/***/ }),
22530/* 121 */
22531/***/ (function(module, exports, __webpack_require__) {
22532
22533"use strict";
22534
22535Object.defineProperty(exports, "__esModule", { value: true });
22536const stream_1 = __webpack_require__(96);
22537const async_1 = __webpack_require__(107);
22538class StreamProvider {
22539 constructor(_root, _settings) {
22540 this._root = _root;
22541 this._settings = _settings;
22542 this._reader = new async_1.default(this._root, this._settings);
22543 this._stream = new stream_1.Readable({
22544 objectMode: true,
22545 read: () => { },
22546 destroy: this._reader.destroy.bind(this._reader)
22547 });
22548 }
22549 read() {
22550 this._reader.onError((error) => {
22551 this._stream.emit('error', error);
22552 });
22553 this._reader.onEntry((entry) => {
22554 this._stream.push(entry);
22555 });
22556 this._reader.onEnd(() => {
22557 this._stream.push(null);
22558 });
22559 this._reader.read();
22560 return this._stream;
22561 }
22562}
22563exports.default = StreamProvider;
22564
22565
22566/***/ }),
22567/* 122 */
22568/***/ (function(module, exports, __webpack_require__) {
22569
22570"use strict";
22571
22572Object.defineProperty(exports, "__esModule", { value: true });
22573const sync_1 = __webpack_require__(123);
22574class SyncProvider {
22575 constructor(_root, _settings) {
22576 this._root = _root;
22577 this._settings = _settings;
22578 this._reader = new sync_1.default(this._root, this._settings);
22579 }
22580 read() {
22581 return this._reader.read();
22582 }
22583}
22584exports.default = SyncProvider;
22585
22586
22587/***/ }),
22588/* 123 */
22589/***/ (function(module, exports, __webpack_require__) {
22590
22591"use strict";
22592
22593Object.defineProperty(exports, "__esModule", { value: true });
22594const fsScandir = __webpack_require__(108);
22595const common = __webpack_require__(119);
22596const reader_1 = __webpack_require__(120);
22597class SyncReader extends reader_1.default {
22598 constructor() {
22599 super(...arguments);
22600 this._scandir = fsScandir.scandirSync;
22601 this._storage = new Set();
22602 this._queue = new Set();
22603 }
22604 read() {
22605 this._pushToQueue(this._root, this._settings.basePath);
22606 this._handleQueue();
22607 return [...this._storage];
22608 }
22609 _pushToQueue(directory, base) {
22610 this._queue.add({ directory, base });
22611 }
22612 _handleQueue() {
22613 for (const item of this._queue.values()) {
22614 this._handleDirectory(item.directory, item.base);
22615 }
22616 }
22617 _handleDirectory(directory, base) {
22618 try {
22619 const entries = this._scandir(directory, this._settings.fsScandirSettings);
22620 for (const entry of entries) {
22621 this._handleEntry(entry, base);
22622 }
22623 }
22624 catch (error) {
22625 this._handleError(error);
22626 }
22627 }
22628 _handleError(error) {
22629 if (!common.isFatalError(this._settings, error)) {
22630 return;
22631 }
22632 throw error;
22633 }
22634 _handleEntry(entry, base) {
22635 const fullpath = entry.path;
22636 if (base !== undefined) {
22637 entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);
22638 }
22639 if (common.isAppliedFilter(this._settings.entryFilter, entry)) {
22640 this._pushToStorage(entry);
22641 }
22642 if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {
22643 this._pushToQueue(fullpath, entry.path);
22644 }
22645 }
22646 _pushToStorage(entry) {
22647 this._storage.add(entry);
22648 }
22649}
22650exports.default = SyncReader;
22651
22652
22653/***/ }),
22654/* 124 */
22655/***/ (function(module, exports, __webpack_require__) {
22656
22657"use strict";
22658
22659Object.defineProperty(exports, "__esModule", { value: true });
22660const path = __webpack_require__(13);
22661const fsScandir = __webpack_require__(108);
22662class Settings {
22663 constructor(_options = {}) {
22664 this._options = _options;
22665 this.basePath = this._getValue(this._options.basePath, undefined);
22666 this.concurrency = this._getValue(this._options.concurrency, Infinity);
22667 this.deepFilter = this._getValue(this._options.deepFilter, null);
22668 this.entryFilter = this._getValue(this._options.entryFilter, null);
22669 this.errorFilter = this._getValue(this._options.errorFilter, null);
22670 this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);
22671 this.fsScandirSettings = new fsScandir.Settings({
22672 followSymbolicLinks: this._options.followSymbolicLinks,
22673 fs: this._options.fs,
22674 pathSegmentSeparator: this._options.pathSegmentSeparator,
22675 stats: this._options.stats,
22676 throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink
22677 });
22678 }
22679 _getValue(option, value) {
22680 return option === undefined ? value : option;
22681 }
22682}
22683exports.default = Settings;
22684
22685
22686/***/ }),
22687/* 125 */
22688/***/ (function(module, exports, __webpack_require__) {
22689
22690"use strict";
22691
22692Object.defineProperty(exports, "__esModule", { value: true });
22693const path = __webpack_require__(13);
22694const fsStat = __webpack_require__(100);
22695const utils = __webpack_require__(62);
22696class Reader {
22697 constructor(_settings) {
22698 this._settings = _settings;
22699 this._fsStatSettings = new fsStat.Settings({
22700 followSymbolicLink: this._settings.followSymbolicLinks,
22701 fs: this._settings.fs,
22702 throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks
22703 });
22704 }
22705 _getFullEntryPath(filepath) {
22706 return path.resolve(this._settings.cwd, filepath);
22707 }
22708 _makeEntry(stats, pattern) {
22709 const entry = {
22710 name: pattern,
22711 path: pattern,
22712 dirent: utils.fs.createDirentFromStats(pattern, stats)
22713 };
22714 if (this._settings.stats) {
22715 entry.stats = stats;
22716 }
22717 return entry;
22718 }
22719 _isFatalError(error) {
22720 return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;
22721 }
22722}
22723exports.default = Reader;
22724
22725
22726/***/ }),
22727/* 126 */
22728/***/ (function(module, exports, __webpack_require__) {
22729
22730"use strict";
22731
22732Object.defineProperty(exports, "__esModule", { value: true });
22733const path = __webpack_require__(13);
22734const deep_1 = __webpack_require__(127);
22735const entry_1 = __webpack_require__(130);
22736const error_1 = __webpack_require__(131);
22737const entry_2 = __webpack_require__(132);
22738class Provider {
22739 constructor(_settings) {
22740 this._settings = _settings;
22741 this.errorFilter = new error_1.default(this._settings);
22742 this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());
22743 this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());
22744 this.entryTransformer = new entry_2.default(this._settings);
22745 }
22746 _getRootDirectory(task) {
22747 return path.resolve(this._settings.cwd, task.base);
22748 }
22749 _getReaderOptions(task) {
22750 const basePath = task.base === '.' ? '' : task.base;
22751 return {
22752 basePath,
22753 pathSegmentSeparator: '/',
22754 concurrency: this._settings.concurrency,
22755 deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),
22756 entryFilter: this.entryFilter.getFilter(task.positive, task.negative),
22757 errorFilter: this.errorFilter.getFilter(),
22758 followSymbolicLinks: this._settings.followSymbolicLinks,
22759 fs: this._settings.fs,
22760 stats: this._settings.stats,
22761 throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,
22762 transform: this.entryTransformer.getTransformer()
22763 };
22764 }
22765 _getMicromatchOptions() {
22766 return {
22767 dot: this._settings.dot,
22768 matchBase: this._settings.baseNameMatch,
22769 nobrace: !this._settings.braceExpansion,
22770 nocase: !this._settings.caseSensitiveMatch,
22771 noext: !this._settings.extglob,
22772 noglobstar: !this._settings.globstar,
22773 posix: true,
22774 strictSlashes: false
22775 };
22776 }
22777}
22778exports.default = Provider;
22779
22780
22781/***/ }),
22782/* 127 */
22783/***/ (function(module, exports, __webpack_require__) {
22784
22785"use strict";
22786
22787Object.defineProperty(exports, "__esModule", { value: true });
22788const utils = __webpack_require__(62);
22789const partial_1 = __webpack_require__(128);
22790class DeepFilter {
22791 constructor(_settings, _micromatchOptions) {
22792 this._settings = _settings;
22793 this._micromatchOptions = _micromatchOptions;
22794 }
22795 getFilter(basePath, positive, negative) {
22796 const matcher = this._getMatcher(positive);
22797 const negativeRe = this._getNegativePatternsRe(negative);
22798 return (entry) => this._filter(basePath, entry, matcher, negativeRe);
22799 }
22800 _getMatcher(patterns) {
22801 return new partial_1.default(patterns, this._settings, this._micromatchOptions);
22802 }
22803 _getNegativePatternsRe(patterns) {
22804 const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);
22805 return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);
22806 }
22807 _filter(basePath, entry, matcher, negativeRe) {
22808 const depth = this._getEntryLevel(basePath, entry.path);
22809 if (this._isSkippedByDeep(depth)) {
22810 return false;
22811 }
22812 if (this._isSkippedSymbolicLink(entry)) {
22813 return false;
22814 }
22815 const filepath = utils.path.removeLeadingDotSegment(entry.path);
22816 if (this._isSkippedByPositivePatterns(filepath, matcher)) {
22817 return false;
22818 }
22819 return this._isSkippedByNegativePatterns(filepath, negativeRe);
22820 }
22821 _isSkippedByDeep(entryDepth) {
22822 return entryDepth >= this._settings.deep;
22823 }
22824 _isSkippedSymbolicLink(entry) {
22825 return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();
22826 }
22827 _getEntryLevel(basePath, entryPath) {
22828 const basePathDepth = basePath.split('/').length;
22829 const entryPathDepth = entryPath.split('/').length;
22830 return entryPathDepth - (basePath === '' ? 0 : basePathDepth);
22831 }
22832 _isSkippedByPositivePatterns(entryPath, matcher) {
22833 return !this._settings.baseNameMatch && !matcher.match(entryPath);
22834 }
22835 _isSkippedByNegativePatterns(entryPath, negativeRe) {
22836 return !utils.pattern.matchAny(entryPath, negativeRe);
22837 }
22838}
22839exports.default = DeepFilter;
22840
22841
22842/***/ }),
22843/* 128 */
22844/***/ (function(module, exports, __webpack_require__) {
22845
22846"use strict";
22847
22848Object.defineProperty(exports, "__esModule", { value: true });
22849const matcher_1 = __webpack_require__(129);
22850class PartialMatcher extends matcher_1.default {
22851 match(filepath) {
22852 const parts = filepath.split('/');
22853 const levels = parts.length;
22854 const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);
22855 for (const pattern of patterns) {
22856 const section = pattern.sections[0];
22857 /**
22858 * In this case, the pattern has a globstar and we must read all directories unconditionally,
22859 * but only if the level has reached the end of the first group.
22860 *
22861 * fixtures/{a,b}/**
22862 * ^ true/false ^ always true
22863 */
22864 if (!pattern.complete && levels > section.length) {
22865 return true;
22866 }
22867 const match = parts.every((part, index) => {
22868 const segment = pattern.segments[index];
22869 if (segment.dynamic && segment.patternRe.test(part)) {
22870 return true;
22871 }
22872 if (!segment.dynamic && segment.pattern === part) {
22873 return true;
22874 }
22875 return false;
22876 });
22877 if (match) {
22878 return true;
22879 }
22880 }
22881 return false;
22882 }
22883}
22884exports.default = PartialMatcher;
22885
22886
22887/***/ }),
22888/* 129 */
22889/***/ (function(module, exports, __webpack_require__) {
22890
22891"use strict";
22892
22893Object.defineProperty(exports, "__esModule", { value: true });
22894const utils = __webpack_require__(62);
22895class Matcher {
22896 constructor(_patterns, _settings, _micromatchOptions) {
22897 this._patterns = _patterns;
22898 this._settings = _settings;
22899 this._micromatchOptions = _micromatchOptions;
22900 this._storage = [];
22901 this._fillStorage();
22902 }
22903 _fillStorage() {
22904 /**
22905 * The original pattern may include `{,*,**,a/*}`, which will lead to problems with matching (unresolved level).
22906 * So, before expand patterns with brace expansion into separated patterns.
22907 */
22908 const patterns = utils.pattern.expandPatternsWithBraceExpansion(this._patterns);
22909 for (const pattern of patterns) {
22910 const segments = this._getPatternSegments(pattern);
22911 const sections = this._splitSegmentsIntoSections(segments);
22912 this._storage.push({
22913 complete: sections.length <= 1,
22914 pattern,
22915 segments,
22916 sections
22917 });
22918 }
22919 }
22920 _getPatternSegments(pattern) {
22921 const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);
22922 return parts.map((part) => {
22923 const dynamic = utils.pattern.isDynamicPattern(part, this._settings);
22924 if (!dynamic) {
22925 return {
22926 dynamic: false,
22927 pattern: part
22928 };
22929 }
22930 return {
22931 dynamic: true,
22932 pattern: part,
22933 patternRe: utils.pattern.makeRe(part, this._micromatchOptions)
22934 };
22935 });
22936 }
22937 _splitSegmentsIntoSections(segments) {
22938 return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));
22939 }
22940}
22941exports.default = Matcher;
22942
22943
22944/***/ }),
22945/* 130 */
22946/***/ (function(module, exports, __webpack_require__) {
22947
22948"use strict";
22949
22950Object.defineProperty(exports, "__esModule", { value: true });
22951const utils = __webpack_require__(62);
22952class EntryFilter {
22953 constructor(_settings, _micromatchOptions) {
22954 this._settings = _settings;
22955 this._micromatchOptions = _micromatchOptions;
22956 this.index = new Map();
22957 }
22958 getFilter(positive, negative) {
22959 const positiveRe = utils.pattern.convertPatternsToRe(positive, this._micromatchOptions);
22960 const negativeRe = utils.pattern.convertPatternsToRe(negative, this._micromatchOptions);
22961 return (entry) => this._filter(entry, positiveRe, negativeRe);
22962 }
22963 _filter(entry, positiveRe, negativeRe) {
22964 if (this._settings.unique) {
22965 if (this._isDuplicateEntry(entry)) {
22966 return false;
22967 }
22968 this._createIndexRecord(entry);
22969 }
22970 if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {
22971 return false;
22972 }
22973 if (this._isSkippedByAbsoluteNegativePatterns(entry, negativeRe)) {
22974 return false;
22975 }
22976 const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
22977 return this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe);
22978 }
22979 _isDuplicateEntry(entry) {
22980 return this.index.has(entry.path);
22981 }
22982 _createIndexRecord(entry) {
22983 this.index.set(entry.path, undefined);
22984 }
22985 _onlyFileFilter(entry) {
22986 return this._settings.onlyFiles && !entry.dirent.isFile();
22987 }
22988 _onlyDirectoryFilter(entry) {
22989 return this._settings.onlyDirectories && !entry.dirent.isDirectory();
22990 }
22991 _isSkippedByAbsoluteNegativePatterns(entry, negativeRe) {
22992 if (!this._settings.absolute) {
22993 return false;
22994 }
22995 const fullpath = utils.path.makeAbsolute(this._settings.cwd, entry.path);
22996 return this._isMatchToPatterns(fullpath, negativeRe);
22997 }
22998 _isMatchToPatterns(entryPath, patternsRe) {
22999 const filepath = utils.path.removeLeadingDotSegment(entryPath);
23000 return utils.pattern.matchAny(filepath, patternsRe);
23001 }
23002}
23003exports.default = EntryFilter;
23004
23005
23006/***/ }),
23007/* 131 */
23008/***/ (function(module, exports, __webpack_require__) {
23009
23010"use strict";
23011
23012Object.defineProperty(exports, "__esModule", { value: true });
23013const utils = __webpack_require__(62);
23014class ErrorFilter {
23015 constructor(_settings) {
23016 this._settings = _settings;
23017 }
23018 getFilter() {
23019 return (error) => this._isNonFatalError(error);
23020 }
23021 _isNonFatalError(error) {
23022 return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;
23023 }
23024}
23025exports.default = ErrorFilter;
23026
23027
23028/***/ }),
23029/* 132 */
23030/***/ (function(module, exports, __webpack_require__) {
23031
23032"use strict";
23033
23034Object.defineProperty(exports, "__esModule", { value: true });
23035const utils = __webpack_require__(62);
23036class EntryTransformer {
23037 constructor(_settings) {
23038 this._settings = _settings;
23039 }
23040 getTransformer() {
23041 return (entry) => this._transform(entry);
23042 }
23043 _transform(entry) {
23044 let filepath = entry.path;
23045 if (this._settings.absolute) {
23046 filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);
23047 filepath = utils.path.unixify(filepath);
23048 }
23049 if (this._settings.markDirectories && entry.dirent.isDirectory()) {
23050 filepath += '/';
23051 }
23052 if (!this._settings.objectMode) {
23053 return filepath;
23054 }
23055 return Object.assign(Object.assign({}, entry), { path: filepath });
23056 }
23057}
23058exports.default = EntryTransformer;
23059
23060
23061/***/ }),
23062/* 133 */
23063/***/ (function(module, exports, __webpack_require__) {
23064
23065"use strict";
23066
23067Object.defineProperty(exports, "__esModule", { value: true });
23068const stream_1 = __webpack_require__(96);
23069const stream_2 = __webpack_require__(99);
23070const provider_1 = __webpack_require__(126);
23071class ProviderStream extends provider_1.default {
23072 constructor() {
23073 super(...arguments);
23074 this._reader = new stream_2.default(this._settings);
23075 }
23076 read(task) {
23077 const root = this._getRootDirectory(task);
23078 const options = this._getReaderOptions(task);
23079 const source = this.api(root, task, options);
23080 const destination = new stream_1.Readable({ objectMode: true, read: () => { } });
23081 source
23082 .once('error', (error) => destination.emit('error', error))
23083 .on('data', (entry) => destination.emit('data', options.transform(entry)))
23084 .once('end', () => destination.emit('end'));
23085 destination
23086 .once('close', () => source.destroy());
23087 return destination;
23088 }
23089 api(root, task, options) {
23090 if (task.dynamic) {
23091 return this._reader.dynamic(root, options);
23092 }
23093 return this._reader.static(task.patterns, options);
23094 }
23095}
23096exports.default = ProviderStream;
23097
23098
23099/***/ }),
23100/* 134 */
23101/***/ (function(module, exports, __webpack_require__) {
23102
23103"use strict";
23104
23105Object.defineProperty(exports, "__esModule", { value: true });
23106const sync_1 = __webpack_require__(135);
23107const provider_1 = __webpack_require__(126);
23108class ProviderSync extends provider_1.default {
23109 constructor() {
23110 super(...arguments);
23111 this._reader = new sync_1.default(this._settings);
23112 }
23113 read(task) {
23114 const root = this._getRootDirectory(task);
23115 const options = this._getReaderOptions(task);
23116 const entries = this.api(root, task, options);
23117 return entries.map(options.transform);
23118 }
23119 api(root, task, options) {
23120 if (task.dynamic) {
23121 return this._reader.dynamic(root, options);
23122 }
23123 return this._reader.static(task.patterns, options);
23124 }
23125}
23126exports.default = ProviderSync;
23127
23128
23129/***/ }),
23130/* 135 */
23131/***/ (function(module, exports, __webpack_require__) {
23132
23133"use strict";
23134
23135Object.defineProperty(exports, "__esModule", { value: true });
23136const fsStat = __webpack_require__(100);
23137const fsWalk = __webpack_require__(105);
23138const reader_1 = __webpack_require__(125);
23139class ReaderSync extends reader_1.default {
23140 constructor() {
23141 super(...arguments);
23142 this._walkSync = fsWalk.walkSync;
23143 this._statSync = fsStat.statSync;
23144 }
23145 dynamic(root, options) {
23146 return this._walkSync(root, options);
23147 }
23148 static(patterns, options) {
23149 const entries = [];
23150 for (const pattern of patterns) {
23151 const filepath = this._getFullEntryPath(pattern);
23152 const entry = this._getEntry(filepath, pattern, options);
23153 if (entry === null || !options.entryFilter(entry)) {
23154 continue;
23155 }
23156 entries.push(entry);
23157 }
23158 return entries;
23159 }
23160 _getEntry(filepath, pattern, options) {
23161 try {
23162 const stats = this._getStat(filepath);
23163 return this._makeEntry(stats, pattern);
23164 }
23165 catch (error) {
23166 if (options.errorFilter(error)) {
23167 return null;
23168 }
23169 throw error;
23170 }
23171 }
23172 _getStat(filepath) {
23173 return this._statSync(filepath, this._fsStatSettings);
23174 }
23175}
23176exports.default = ReaderSync;
23177
23178
23179/***/ }),
23180/* 136 */
23181/***/ (function(module, exports, __webpack_require__) {
23182
23183"use strict";
23184
23185Object.defineProperty(exports, "__esModule", { value: true });
23186const fs = __webpack_require__(40);
23187const os = __webpack_require__(14);
23188const CPU_COUNT = os.cpus().length;
23189exports.DEFAULT_FILE_SYSTEM_ADAPTER = {
23190 lstat: fs.lstat,
23191 lstatSync: fs.lstatSync,
23192 stat: fs.stat,
23193 statSync: fs.statSync,
23194 readdir: fs.readdir,
23195 readdirSync: fs.readdirSync
23196};
23197class Settings {
23198 constructor(_options = {}) {
23199 this._options = _options;
23200 this.absolute = this._getValue(this._options.absolute, false);
23201 this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);
23202 this.braceExpansion = this._getValue(this._options.braceExpansion, true);
23203 this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);
23204 this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);
23205 this.cwd = this._getValue(this._options.cwd, process.cwd());
23206 this.deep = this._getValue(this._options.deep, Infinity);
23207 this.dot = this._getValue(this._options.dot, false);
23208 this.extglob = this._getValue(this._options.extglob, true);
23209 this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);
23210 this.fs = this._getFileSystemMethods(this._options.fs);
23211 this.globstar = this._getValue(this._options.globstar, true);
23212 this.ignore = this._getValue(this._options.ignore, []);
23213 this.markDirectories = this._getValue(this._options.markDirectories, false);
23214 this.objectMode = this._getValue(this._options.objectMode, false);
23215 this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);
23216 this.onlyFiles = this._getValue(this._options.onlyFiles, true);
23217 this.stats = this._getValue(this._options.stats, false);
23218 this.suppressErrors = this._getValue(this._options.suppressErrors, false);
23219 this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);
23220 this.unique = this._getValue(this._options.unique, true);
23221 if (this.onlyDirectories) {
23222 this.onlyFiles = false;
23223 }
23224 if (this.stats) {
23225 this.objectMode = true;
23226 }
23227 }
23228 _getValue(option, value) {
23229 return option === undefined ? value : option;
23230 }
23231 _getFileSystemMethods(methods = {}) {
23232 return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);
23233 }
23234}
23235exports.default = Settings;
23236
23237
23238/***/ }),
23239/* 137 */
23240/***/ (function(module, exports, __webpack_require__) {
23241
23242"use strict";
23243
23244Object.defineProperty(exports, "__esModule", { value: true });
23245var connection_1 = __webpack_require__(138);
23246function default_1(name) {
23247 return {
23248 log: function (message) {
23249 connection_1.connection.console.log(name + ": " + message);
23250 },
23251 info: function (message) {
23252 connection_1.connection.console.info(name + ": " + message);
23253 },
23254 warn: function (message) {
23255 connection_1.connection.console.warn(name + ": " + message);
23256 },
23257 error: function (message) {
23258 connection_1.connection.console.error(name + ": " + message);
23259 },
23260 };
23261}
23262exports.default = default_1;
23263
23264
23265/***/ }),
23266/* 138 */
23267/***/ (function(module, exports, __webpack_require__) {
23268
23269"use strict";
23270
23271Object.defineProperty(exports, "__esModule", { value: true });
23272var vscode_languageserver_1 = __webpack_require__(2);
23273// create connection by command argv
23274exports.connection = vscode_languageserver_1.createConnection();
23275
23276
23277/***/ }),
23278/* 139 */
23279/***/ (function(module) {
23280
23281module.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()`\"]}}}");
23282
23283/***/ }),
23284/* 140 */
23285/***/ (function(module, exports, __webpack_require__) {
23286
23287"use strict";
23288
23289var __importDefault = (this && this.__importDefault) || function (mod) {
23290 return (mod && mod.__esModule) ? mod : { "default": mod };
23291};
23292Object.defineProperty(exports, "__esModule", { value: true });
23293var fuzzy_1 = __importDefault(__webpack_require__(141));
23294var providers = [];
23295function useProvider(p) {
23296 providers.push(p);
23297}
23298exports.useProvider = useProvider;
23299function getProvider() {
23300 return providers.reduce(function (pre, next) {
23301 return function (line, uri, position, word, invalidLength, items) {
23302 // 200 items is enough
23303 if (items.length > 200) {
23304 return items.slice(0, 200);
23305 }
23306 var newItems = next(line, uri, position)
23307 .filter(function (item) { return fuzzy_1.default(item.label, word) >= invalidLength; });
23308 return pre(line, uri, position, word, invalidLength, items.concat(newItems));
23309 };
23310 }, function (_line, _uri, _position, _word, _invalidLength, items) { return items; });
23311}
23312exports.getProvider = getProvider;
23313
23314
23315/***/ }),
23316/* 141 */
23317/***/ (function(module, exports, __webpack_require__) {
23318
23319"use strict";
23320
23321Object.defineProperty(exports, "__esModule", { value: true });
23322function fuzzy(origin, query) {
23323 var score = 0;
23324 for (var qIdx = 0, oIdx = 0; qIdx < query.length && oIdx < origin.length; qIdx++) {
23325 var qc = query.charAt(qIdx).toLowerCase();
23326 for (; oIdx < origin.length; oIdx++) {
23327 var oc = origin.charAt(oIdx).toLowerCase();
23328 if (qc === oc) {
23329 score++;
23330 oIdx++;
23331 break;
23332 }
23333 }
23334 }
23335 return score;
23336}
23337exports.default = fuzzy;
23338
23339
23340/***/ }),
23341/* 142 */
23342/***/ (function(module, exports, __webpack_require__) {
23343
23344"use strict";
23345
23346Object.defineProperty(exports, "__esModule", { value: true });
23347var patterns_1 = __webpack_require__(54);
23348var util_1 = __webpack_require__(46);
23349var builtin_1 = __webpack_require__(59);
23350var provider_1 = __webpack_require__(140);
23351function provider(line) {
23352 if (util_1.isSomeMatchPattern(patterns_1.builtinVariablePattern, line)) {
23353 return builtin_1.builtinDocs.getPredefinedVimVariables();
23354 }
23355 return [];
23356}
23357provider_1.useProvider(provider);
23358
23359
23360/***/ }),
23361/* 143 */
23362/***/ (function(module, exports, __webpack_require__) {
23363
23364"use strict";
23365
23366Object.defineProperty(exports, "__esModule", { value: true });
23367var patterns_1 = __webpack_require__(54);
23368var builtin_1 = __webpack_require__(59);
23369var provider_1 = __webpack_require__(140);
23370function provider(line) {
23371 if (patterns_1.colorschemePattern.test(line)) {
23372 return builtin_1.builtinDocs.getColorschemes();
23373 }
23374 return [];
23375}
23376provider_1.useProvider(provider);
23377
23378
23379/***/ }),
23380/* 144 */
23381/***/ (function(module, exports, __webpack_require__) {
23382
23383"use strict";
23384
23385var __importDefault = (this && this.__importDefault) || function (mod) {
23386 return (mod && mod.__esModule) ? mod : { "default": mod };
23387};
23388Object.defineProperty(exports, "__esModule", { value: true });
23389var patterns_1 = __webpack_require__(54);
23390var util_1 = __webpack_require__(46);
23391var builtin_1 = __webpack_require__(59);
23392var config_1 = __importDefault(__webpack_require__(55));
23393var snippets_1 = __webpack_require__(145);
23394var provider_1 = __webpack_require__(140);
23395function provider(line) {
23396 if (util_1.isSomeMatchPattern(patterns_1.commandPattern, line)) {
23397 // only return snippets when snippetSupport is true
23398 if (config_1.default.snippetSupport) {
23399 return builtin_1.builtinDocs.getVimCommands().concat(snippets_1.commandSnippets);
23400 }
23401 return builtin_1.builtinDocs.getVimCommands();
23402 }
23403 return [];
23404}
23405provider_1.useProvider(provider);
23406
23407
23408/***/ }),
23409/* 145 */
23410/***/ (function(module, exports, __webpack_require__) {
23411
23412"use strict";
23413
23414var __assign = (this && this.__assign) || function () {
23415 __assign = Object.assign || function(t) {
23416 for (var s, i = 1, n = arguments.length; i < n; i++) {
23417 s = arguments[i];
23418 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23419 t[p] = s[p];
23420 }
23421 return t;
23422 };
23423 return __assign.apply(this, arguments);
23424};
23425Object.defineProperty(exports, "__esModule", { value: true });
23426var vscode_languageserver_1 = __webpack_require__(2);
23427var util_1 = __webpack_require__(46);
23428exports.commandSnippets = [
23429 {
23430 label: "func",
23431 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23432 insertText: [
23433 "function ${1:Name}(${2}) ${3:abort}",
23434 "\t${0}",
23435 "endfunction",
23436 ].join("\n"),
23437 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23438 },
23439 {
23440 label: "tryc",
23441 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23442 insertText: [
23443 "try",
23444 "\t${1}",
23445 "catch /.*/",
23446 "\t${0}",
23447 "endtry",
23448 ].join("\n"),
23449 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23450 },
23451 {
23452 label: "tryf",
23453 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23454 insertText: [
23455 "try",
23456 "\t${1}",
23457 "finally",
23458 "\t${0}",
23459 "endtry",
23460 ].join("\n"),
23461 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23462 },
23463 {
23464 label: "trycf",
23465 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23466 insertText: [
23467 "try",
23468 "\t${1}",
23469 "catch /.*/",
23470 "\t${2}",
23471 "finally",
23472 "\t${0}",
23473 "endtry",
23474 ].join("\n"),
23475 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23476 },
23477 {
23478 label: "aug",
23479 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23480 insertText: [
23481 "augroup ${1:Start}",
23482 "\tautocmd!",
23483 "\t${0}",
23484 "augroup END",
23485 ].join("\n"),
23486 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23487 },
23488 {
23489 label: "aut",
23490 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23491 insertText: [
23492 "autocmd ${1:group-event} ${2:pat} ${3:once} ${4:nested} ${5:cmd}",
23493 ].join("\n"),
23494 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23495 },
23496 {
23497 label: "if",
23498 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23499 insertText: [
23500 "if ${1:condition}",
23501 "\t${0}",
23502 "endif",
23503 ].join("\n"),
23504 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23505 },
23506 {
23507 label: "cmd",
23508 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23509 insertText: [
23510 "command! ${1:attr} ${2:cmd} ${3:rep} ${0}",
23511 ].join("\n"),
23512 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23513 },
23514 {
23515 label: "hi",
23516 kind: vscode_languageserver_1.CompletionItemKind.Snippet,
23517 insertText: [
23518 "highlight ${1:default} ${2:group-name} ${3:args} ${0}",
23519 ].join("\n"),
23520 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
23521 },
23522].map(function (item) { return (__assign(__assign({}, item), { documentation: util_1.markupSnippets(item.insertText) })); });
23523
23524
23525/***/ }),
23526/* 146 */
23527/***/ (function(module, exports, __webpack_require__) {
23528
23529"use strict";
23530
23531var __assign = (this && this.__assign) || function () {
23532 __assign = Object.assign || function(t) {
23533 for (var s, i = 1, n = arguments.length; i < n; i++) {
23534 s = arguments[i];
23535 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23536 t[p] = s[p];
23537 }
23538 return t;
23539 };
23540 return __assign.apply(this, arguments);
23541};
23542Object.defineProperty(exports, "__esModule", { value: true });
23543var patterns_1 = __webpack_require__(54);
23544var builtin_1 = __webpack_require__(59);
23545var provider_1 = __webpack_require__(140);
23546function provider(line) {
23547 if (patterns_1.expandPattern[0].test(line)) {
23548 return builtin_1.builtinDocs.getExpandKeywords().map(function (item) {
23549 return __assign(__assign({}, item), { insertText: item.insertText.slice(1) });
23550 });
23551 }
23552 else if (patterns_1.expandPattern[1].test(line)) {
23553 return builtin_1.builtinDocs.getExpandKeywords();
23554 }
23555 return [];
23556}
23557provider_1.useProvider(provider);
23558
23559
23560/***/ }),
23561/* 147 */
23562/***/ (function(module, exports, __webpack_require__) {
23563
23564"use strict";
23565
23566var __assign = (this && this.__assign) || function () {
23567 __assign = Object.assign || function(t) {
23568 for (var s, i = 1, n = arguments.length; i < n; i++) {
23569 s = arguments[i];
23570 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23571 t[p] = s[p];
23572 }
23573 return t;
23574 };
23575 return __assign.apply(this, arguments);
23576};
23577var __importDefault = (this && this.__importDefault) || function (mod) {
23578 return (mod && mod.__esModule) ? mod : { "default": mod };
23579};
23580Object.defineProperty(exports, "__esModule", { value: true });
23581var patterns_1 = __webpack_require__(54);
23582var util_1 = __webpack_require__(46);
23583var builtin_1 = __webpack_require__(59);
23584var config_1 = __importDefault(__webpack_require__(55));
23585var workspaces_1 = __webpack_require__(148);
23586var provider_1 = __webpack_require__(140);
23587function provider(line, uri, position) {
23588 if (/\b(g:|s:|<SID>)\w*$/.test(line)) {
23589 var list = [];
23590 if (/\bg:\w*$/.test(line)) {
23591 list = workspaces_1.workspace.getFunctionItems(uri)
23592 .filter(function (item) { return /^g:/.test(item.label); });
23593 }
23594 else if (/\b(s:|<SID>)\w*$/i.test(line)) {
23595 list = workspaces_1.workspace.getFunctionItems(uri)
23596 .filter(function (item) { return /^s:/.test(item.label); });
23597 }
23598 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
23599 }
23600 else if (/\B:\w*$/.test(line)) {
23601 return workspaces_1.workspace.getFunctionItems(uri)
23602 .filter(function (item) { return /:/.test(item.label); })
23603 .map(function (item) {
23604 var m = line.match(/:[^:]*$/);
23605 return __assign(__assign({}, item), {
23606 // delete the `:` symbol
23607 textEdit: {
23608 range: {
23609 start: {
23610 line: position.line,
23611 character: line.length - m[0].length,
23612 },
23613 end: {
23614 line: position.line,
23615 character: line.length - m[0].length + 1,
23616 },
23617 },
23618 newText: item.insertText,
23619 } });
23620 });
23621 }
23622 else if (util_1.isSomeMatchPattern(patterns_1.notFunctionPattern, line)) {
23623 return [];
23624 }
23625 return workspaces_1.workspace.getFunctionItems(uri)
23626 .filter(function (item) {
23627 return !builtin_1.builtinDocs.isBuiltinFunction(item.label);
23628 })
23629 .concat(builtin_1.builtinDocs.getBuiltinVimFunctions());
23630}
23631provider_1.useProvider(provider);
23632
23633
23634/***/ }),
23635/* 148 */
23636/***/ (function(module, exports, __webpack_require__) {
23637
23638"use strict";
23639
23640var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
23641 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23642 return new (P || (P = Promise))(function (resolve, reject) {
23643 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
23644 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23645 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23646 step((generator = generator.apply(thisArg, _arguments || [])).next());
23647 });
23648};
23649var __generator = (this && this.__generator) || function (thisArg, body) {
23650 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
23651 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
23652 function verb(n) { return function (v) { return step([n, v]); }; }
23653 function step(op) {
23654 if (f) throw new TypeError("Generator is already executing.");
23655 while (_) try {
23656 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;
23657 if (y = 0, t) op = [op[0] & 2, t.value];
23658 switch (op[0]) {
23659 case 0: case 1: t = op; break;
23660 case 4: _.label++; return { value: op[1], done: false };
23661 case 5: _.label++; y = op[1]; op = [0]; continue;
23662 case 7: op = _.ops.pop(); _.trys.pop(); continue;
23663 default:
23664 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
23665 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
23666 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
23667 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
23668 if (t[2]) _.ops.pop();
23669 _.trys.pop(); continue;
23670 }
23671 op = body.call(thisArg, _);
23672 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
23673 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
23674 }
23675};
23676var __importDefault = (this && this.__importDefault) || function (mod) {
23677 return (mod && mod.__esModule) ? mod : { "default": mod };
23678};
23679Object.defineProperty(exports, "__esModule", { value: true });
23680var vscode_uri_1 = __webpack_require__(149);
23681var vscode_languageserver_1 = __webpack_require__(2);
23682var util_1 = __webpack_require__(46);
23683var buffer_1 = __webpack_require__(150);
23684var config_1 = __importDefault(__webpack_require__(55));
23685// import logger from '../common/logger';
23686// const log = logger('workspace')
23687var Workspace = /** @class */ (function () {
23688 function Workspace() {
23689 this.buffers = {};
23690 }
23691 Workspace.prototype.isExistsBuffer = function (uri) {
23692 if (this.buffers[uri]) {
23693 return true;
23694 }
23695 return false;
23696 };
23697 Workspace.prototype.updateBuffer = function (uri, node) {
23698 return __awaiter(this, void 0, void 0, function () {
23699 var projectRoot;
23700 return __generator(this, function (_a) {
23701 switch (_a.label) {
23702 case 0:
23703 if (!node) {
23704 return [2 /*return*/];
23705 }
23706 if (!this.buffers[uri]) return [3 /*break*/, 1];
23707 this.buffers[uri].updateBufferByNode(node);
23708 return [3 /*break*/, 3];
23709 case 1: return [4 /*yield*/, util_1.findProjectRoot(vscode_uri_1.URI.parse(uri).fsPath, config_1.default.indexes.projectRootPatterns)];
23710 case 2:
23711 projectRoot = _a.sent();
23712 if (config_1.default.vimruntime.trim() !== '' && projectRoot.indexOf(config_1.default.vimruntime) === 0) {
23713 projectRoot = config_1.default.vimruntime;
23714 }
23715 this.buffers[uri] = new buffer_1.Buffer(uri, projectRoot, node);
23716 _a.label = 3;
23717 case 3: return [2 /*return*/];
23718 }
23719 });
23720 });
23721 };
23722 Workspace.prototype.getBufferByUri = function (uri) {
23723 return this.buffers[uri];
23724 };
23725 Workspace.prototype.getFunctionItems = function (uri) {
23726 return this.getScriptFunctionItems(uri).concat(this.getGlobalFunctionItems(uri));
23727 };
23728 Workspace.prototype.getIdentifierItems = function (uri, line) {
23729 return this.getLocalIdentifierItems(uri, line)
23730 .concat(this.getGlobalIdentifierItems(uri));
23731 };
23732 Workspace.prototype.getLocations = function (name, uri, position, locationType) {
23733 var isFunArg = false;
23734 var res = [];
23735 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
23736 res = this.getGlobalLocation(name, uri, position, locationType);
23737 }
23738 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23739 // get function args references first
23740 res = this.getFunArgLocation(name, uri, position, locationType);
23741 if (res.length) {
23742 isFunArg = true;
23743 }
23744 else {
23745 res = this.getLocalLocation(name, uri, position, locationType);
23746 if (!res.length) {
23747 res = this.getGlobalLocation(name, uri, position, locationType);
23748 }
23749 }
23750 }
23751 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23752 var names = [name];
23753 if (/^<SID>/.test(name)) {
23754 names.push(name.replace(/^<SID>/, "s:"));
23755 }
23756 else {
23757 names.push(name.replace(/^s:/, "<SID>"));
23758 }
23759 res = this.getScriptLocation(names, uri, position, locationType);
23760 }
23761 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23762 res = this.getLocalLocation(name, uri, position, locationType);
23763 }
23764 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23765 res = this.getAIdentifierLocation(name, uri, position, locationType);
23766 }
23767 if (res.length) {
23768 res = res.sort(function (a, b) {
23769 if (a.range.start.line === b.range.start.line) {
23770 return a.range.start.character - b.range.start.character;
23771 }
23772 return a.range.start.line - b.range.start.line;
23773 });
23774 }
23775 return {
23776 isFunArg: isFunArg,
23777 locations: res,
23778 };
23779 };
23780 Workspace.prototype.getLocationsByUri = function (name, uri, position, locationType) {
23781 var isFunArg = false;
23782 var res = [];
23783 if (/^((g|b):\w+(\.\w+)*|\w+(#\w+)+)$/.test(name)) {
23784 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23785 }
23786 else if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23787 // get function args references first
23788 res = this.getFunArgLocation(name, uri, position, locationType);
23789 if (res.length) {
23790 isFunArg = true;
23791 }
23792 else {
23793 res = this.getLocalLocation(name, uri, position, locationType);
23794 if (!res.length) {
23795 res = this.getGlobalLocationByUri(name, uri, position, locationType);
23796 }
23797 }
23798 }
23799 else if (/^((s:|<SID>)\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23800 var names = [name];
23801 if (/^<SID>/.test(name)) {
23802 names.push(name.replace(/^<SID>/, "s:"));
23803 }
23804 else {
23805 names.push(name.replace(/^s:/, "<SID>"));
23806 }
23807 res = this.getScriptLocation(names, uri, position, locationType);
23808 }
23809 else if (/^(l:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23810 res = this.getLocalLocation(name, uri, position, locationType);
23811 }
23812 else if (/^(a:\w+(\.\w+)*)$/.test(name) && this.buffers[uri]) {
23813 res = this.getAIdentifierLocation(name, uri, position, locationType);
23814 }
23815 if (res.length) {
23816 res = res.sort(function (a, b) {
23817 if (a.range.start.line === b.range.start.line) {
23818 return a.range.start.character - b.range.start.character;
23819 }
23820 return a.range.start.line - b.range.start.line;
23821 });
23822 }
23823 return {
23824 isFunArg: isFunArg,
23825 locations: res,
23826 };
23827 };
23828 Workspace.prototype.filterDuplicate = function (items) {
23829 var tmp = {};
23830 return items.reduce(function (res, next) {
23831 if (!tmp[next.label]) {
23832 tmp[next.label] = true;
23833 res.push(next);
23834 }
23835 return res;
23836 }, []);
23837 };
23838 Workspace.prototype.getGlobalFunctionItems = function (uri) {
23839 var buf = this.buffers[uri];
23840 if (!buf) {
23841 return [];
23842 }
23843 var buffers = config_1.default.suggest.fromRuntimepath
23844 ? Object.values(this.buffers)
23845 : Object.values(this.buffers).filter(function (b) {
23846 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23847 return true;
23848 }
23849 return b.isBelongToWorkdir(buf.getProjectRoot());
23850 });
23851 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23852 return res.concat(cur.getGlobalFunctionItems());
23853 }, []));
23854 };
23855 Workspace.prototype.getScriptFunctionItems = function (uri) {
23856 if (!this.buffers[uri]) {
23857 return [];
23858 }
23859 return this.buffers[uri].getScriptFunctionItems();
23860 };
23861 Workspace.prototype.getGlobalIdentifierItems = function (uri) {
23862 var buf = this.buffers[uri];
23863 if (!buf) {
23864 return [];
23865 }
23866 var buffers = config_1.default.suggest.fromRuntimepath
23867 ? Object.values(this.buffers)
23868 : Object.values(this.buffers).filter(function (b) {
23869 if (config_1.default.suggest.fromVimruntime && b.isBelongToWorkdir(config_1.default.vimruntime)) {
23870 return true;
23871 }
23872 return b.isBelongToWorkdir(buf.getProjectRoot());
23873 });
23874 return this.filterDuplicate(buffers.reduce(function (res, cur) {
23875 return res
23876 .concat(cur.getGlobalIdentifierItems())
23877 .concat(cur.getEnvItems());
23878 }, []));
23879 };
23880 Workspace.prototype.getLocalIdentifierItems = function (uri, line) {
23881 if (!this.buffers[uri]) {
23882 return [];
23883 }
23884 var buf = this.buffers[uri];
23885 return buf.getFunctionLocalIdentifierItems(line)
23886 .concat(buf.getLocalIdentifierItems());
23887 };
23888 Workspace.prototype.getLocation = function (uri, item) {
23889 return {
23890 uri: uri,
23891 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)),
23892 };
23893 };
23894 Workspace.prototype.getGlobalLocation = function (name,
23895 // tslint:disable-next-line: variable-name
23896 _uri,
23897 // tslint:disable-next-line: variable-name
23898 position, locationType) {
23899 var _this = this;
23900 return Object.keys(this.buffers).reduce(function (pre, uri) {
23901 return pre.concat(_this.getGlobalLocationByUri(name, uri, position, locationType));
23902 }, []);
23903 };
23904 Workspace.prototype.getGlobalLocationByUri = function (name,
23905 // tslint:disable-next-line: variable-name
23906 uri,
23907 // tslint:disable-next-line: variable-name
23908 _position, locationType) {
23909 var _this = this;
23910 var res = [];
23911 var tmp = [];
23912 var list = [];
23913 var globalFunctions = locationType === "definition"
23914 ? this.buffers[uri].getGlobalFunctions()
23915 : this.buffers[uri].getGlobalFunctionRefs();
23916 Object.keys(globalFunctions).forEach(function (fname) {
23917 if (fname === name) {
23918 res = res.concat(globalFunctions[fname].map(function (item) { return _this.getLocation(uri, item); }));
23919 }
23920 });
23921 var identifiers = locationType === "definition"
23922 ? this.buffers[uri].getGlobalIdentifiers()
23923 : this.buffers[uri].getGlobalIdentifierRefs();
23924 Object.keys(identifiers).forEach(function (fname) {
23925 if (fname === name) {
23926 tmp = tmp.concat(identifiers[fname].map(function (item) { return _this.getLocation(uri, item); }));
23927 }
23928 });
23929 // filter function local variables
23930 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(name)) {
23931 var glFunctions = this.buffers[uri].getGlobalFunctions();
23932 var scriptFunctions = this.buffers[uri].getScriptFunctions();
23933 var funList_1 = Object.values(glFunctions).concat(Object.values(scriptFunctions)).reduce(function (aur, fs) { return aur.concat(fs); }, []);
23934 tmp.forEach(function (l) {
23935 if (!funList_1.some(function (fun) {
23936 return fun.startLine - 1 < l.range.start.line && l.range.start.line < fun.endLine - 1;
23937 })) {
23938 list.push(l);
23939 }
23940 });
23941 }
23942 else {
23943 list = tmp;
23944 }
23945 res = res.concat(list);
23946 return res;
23947 };
23948 Workspace.prototype.getScriptLocation = function (names, uri,
23949 // tslint:disable-next-line: variable-name
23950 _position, locationType) {
23951 var _this = this;
23952 var res = [];
23953 if (!this.buffers[uri]) {
23954 return res;
23955 }
23956 var functions = locationType === "definition"
23957 ? this.buffers[uri].getScriptFunctions()
23958 : this.buffers[uri].getScriptFunctionRefs();
23959 Object.keys(functions).forEach(function (fname) {
23960 var idx = names.indexOf(fname);
23961 if (idx !== -1) {
23962 res = res.concat(functions[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
23963 }
23964 });
23965 var identifiers = locationType === "definition"
23966 ? this.buffers[uri].getLocalIdentifiers()
23967 : this.buffers[uri].getLocalIdentifierRefs();
23968 Object.keys(identifiers).forEach(function (fname) {
23969 var idx = names.indexOf(fname);
23970 if (idx !== -1) {
23971 res = res.concat(identifiers[names[idx]].map(function (item) { return _this.getLocation(uri, item); }));
23972 }
23973 });
23974 return res;
23975 };
23976 Workspace.prototype.getLocalLocation = function (name, uri, position, locationType) {
23977 var _this = this;
23978 var list = [];
23979 if (!this.buffers[uri]) {
23980 return list;
23981 }
23982 var vimLineNum = position.line + 1;
23983 var startLine = -1;
23984 var endLine = -1;
23985 // get function args completion items
23986 []
23987 .concat(Object
23988 .values(this.buffers[uri].getGlobalFunctions())
23989 .reduce(function (res, next) { return res.concat(next); }, []))
23990 .concat(Object
23991 .values(this.buffers[uri].getScriptFunctions())
23992 .reduce(function (res, next) { return res.concat(next); }, []))
23993 .forEach(function (fun) {
23994 if (fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
23995 startLine = fun.startLine;
23996 endLine = fun.endLine;
23997 }
23998 });
23999 if (startLine !== -1 && endLine !== -1) {
24000 var globalVariables_1 = locationType === "definition"
24001 ? this.buffers[uri].getGlobalIdentifiers()
24002 : this.buffers[uri].getGlobalIdentifierRefs();
24003 Object.keys(globalVariables_1).some(function (key) {
24004 if (key === name) {
24005 globalVariables_1[key].forEach(function (item) {
24006 if (startLine < item.startLine && item.startLine < endLine) {
24007 list.push(_this.getLocation(uri, item));
24008 }
24009 });
24010 return true;
24011 }
24012 return false;
24013 });
24014 var localVariables_1 = locationType === "definition"
24015 ? this.buffers[uri].getLocalIdentifiers()
24016 : this.buffers[uri].getLocalIdentifierRefs();
24017 Object.keys(localVariables_1).some(function (key) {
24018 if (key === name) {
24019 localVariables_1[key].forEach(function (item) {
24020 if (startLine < item.startLine && item.startLine < endLine) {
24021 list.push(_this.getLocation(uri, item));
24022 }
24023 });
24024 return true;
24025 }
24026 return false;
24027 });
24028 }
24029 return list;
24030 };
24031 Workspace.prototype.getAIdentifierLocation = function (name, uri, position, locationType) {
24032 var res = [];
24033 if (!this.buffers[uri]) {
24034 return res;
24035 }
24036 if (locationType === "definition") {
24037 var flist_1 = [];
24038 var globalFunctions_1 = this.buffers[uri].getGlobalFunctions();
24039 Object.keys(globalFunctions_1).forEach(function (fname) {
24040 globalFunctions_1[fname].forEach(function (item) {
24041 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24042 flist_1.push(item);
24043 }
24044 });
24045 });
24046 var scriptFunctions_1 = this.buffers[uri].getScriptFunctions();
24047 Object.keys(scriptFunctions_1).forEach(function (fname) {
24048 scriptFunctions_1[fname].forEach(function (item) {
24049 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24050 flist_1.push(item);
24051 }
24052 });
24053 });
24054 if (flist_1.length) {
24055 var n_1 = name.slice(2);
24056 return flist_1.filter(function (item) { return item.args && item.args.some(function (m) { return m.value === n_1; }); })
24057 .map(function (item) {
24058 var startLine = item.startLine - 1;
24059 var startCol = item.startCol - 1;
24060 var endCol = item.startCol - 1;
24061 item.args.some(function (arg) {
24062 if (arg.value === n_1) {
24063 startCol = arg.pos.col - 1;
24064 endCol = startCol + n_1.length;
24065 return true;
24066 }
24067 return false;
24068 });
24069 return {
24070 uri: uri,
24071 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24072 };
24073 });
24074 }
24075 }
24076 else {
24077 var flist_2 = [];
24078 var globalFunctions_2 = this.buffers[uri].getGlobalFunctions();
24079 Object.keys(globalFunctions_2).forEach(function (fname) {
24080 globalFunctions_2[fname].forEach(function (item) {
24081 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24082 flist_2.push(item);
24083 }
24084 });
24085 });
24086 var scriptFunctions_2 = this.buffers[uri].getScriptFunctions();
24087 Object.keys(scriptFunctions_2).forEach(function (fname) {
24088 scriptFunctions_2[fname].forEach(function (item) {
24089 if (item.startLine - 1 < position.line && position.line < item.endLine - 1) {
24090 flist_2.push(item);
24091 }
24092 });
24093 });
24094 if (flist_2.length) {
24095 var identifiers_1 = this.buffers[uri].getLocalIdentifierRefs();
24096 Object.keys(identifiers_1).forEach(function (key) {
24097 if (key === name) {
24098 identifiers_1[name].forEach(function (item) {
24099 flist_2.forEach(function (fitem) {
24100 if (fitem.startLine < item.startLine && item.startLine < fitem.endLine) {
24101 res.push({
24102 uri: uri,
24103 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)),
24104 });
24105 }
24106 });
24107 });
24108 }
24109 });
24110 }
24111 }
24112 return res;
24113 };
24114 Workspace.prototype.getFunArgLocation = function (name, uri, position, locationType) {
24115 var res = [];
24116 if (!this.buffers[uri]) {
24117 return res;
24118 }
24119 if (locationType === "references") {
24120 var globalFunctions = this.buffers[uri].getGlobalFunctions();
24121 var scriptFunctions = this.buffers[uri].getScriptFunctions();
24122 var startLine_1 = -1;
24123 var endLine_1 = -1;
24124 Object.values(globalFunctions).forEach(function (fitems) {
24125 fitems.forEach(function (fitem) {
24126 fitem.args.forEach(function (arg) {
24127 var pos = arg.pos;
24128 if (pos) {
24129 if (pos.lnum === position.line + 1 && arg.value === name) {
24130 startLine_1 = fitem.startLine;
24131 endLine_1 = fitem.endLine;
24132 }
24133 }
24134 });
24135 });
24136 });
24137 if (startLine_1 === -1 && endLine_1 === -1) {
24138 Object.values(scriptFunctions).forEach(function (fitems) {
24139 fitems.forEach(function (fitem) {
24140 fitem.args.forEach(function (arg) {
24141 var pos = arg.pos;
24142 if (pos) {
24143 if (pos.lnum === position.line + 1 && arg.value === name) {
24144 startLine_1 = fitem.startLine;
24145 endLine_1 = fitem.endLine;
24146 }
24147 }
24148 });
24149 });
24150 });
24151 }
24152 if (startLine_1 !== -1 && endLine_1 !== -1) {
24153 var identifiers_2 = this.buffers[uri].getLocalIdentifierRefs();
24154 Object.keys(identifiers_2).forEach(function (key) {
24155 if (key === "a:" + name) {
24156 identifiers_2[key].forEach(function (item) {
24157 if (startLine_1 < item.startLine && item.startLine < endLine_1) {
24158 res.push({
24159 uri: uri,
24160 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)),
24161 });
24162 }
24163 });
24164 }
24165 });
24166 }
24167 }
24168 else {
24169 var flist_3 = [];
24170 var globalFunctions_3 = this.buffers[uri].getGlobalFunctions();
24171 Object.keys(globalFunctions_3).forEach(function (fname) {
24172 globalFunctions_3[fname].forEach(function (item) {
24173 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24174 flist_3.push(item);
24175 }
24176 });
24177 });
24178 var scriptFunctions_3 = this.buffers[uri].getScriptFunctions();
24179 Object.keys(scriptFunctions_3).forEach(function (fname) {
24180 scriptFunctions_3[fname].forEach(function (item) {
24181 if (item.startLine - 1 === position.line && position.character > item.startCol - 1) {
24182 flist_3.push(item);
24183 }
24184 });
24185 });
24186 if (flist_3.length) {
24187 return flist_3.filter(function (item) { return item.args && item.args.some(function (n) { return n.value === name; }); })
24188 .map(function (item) {
24189 var startLine = item.startLine - 1;
24190 var startCol = item.startCol - 1;
24191 var endCol = item.startCol - 1;
24192 item.args.some(function (arg) {
24193 if (arg.value === name) {
24194 startCol = arg.pos.col - 1;
24195 endCol = startCol + name.length;
24196 return true;
24197 }
24198 return false;
24199 });
24200 return {
24201 uri: uri,
24202 range: vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(startLine, startCol), vscode_languageserver_1.Position.create(startLine, endCol)),
24203 };
24204 });
24205 }
24206 }
24207 return res;
24208 };
24209 return Workspace;
24210}());
24211exports.Workspace = Workspace;
24212exports.workspace = new Workspace();
24213
24214
24215/***/ }),
24216/* 149 */
24217/***/ (function(module, __webpack_exports__, __webpack_require__) {
24218
24219"use strict";
24220__webpack_require__.r(__webpack_exports__);
24221/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "URI", function() { return URI; });
24222/*---------------------------------------------------------------------------------------------
24223 * Copyright (c) Microsoft Corporation. All rights reserved.
24224 * Licensed under the MIT License. See License.txt in the project root for license information.
24225 *--------------------------------------------------------------------------------------------*/
24226
24227var __extends = (undefined && undefined.__extends) || (function () {
24228 var extendStatics = function (d, b) {
24229 extendStatics = Object.setPrototypeOf ||
24230 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
24231 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
24232 return extendStatics(d, b);
24233 };
24234 return function (d, b) {
24235 extendStatics(d, b);
24236 function __() { this.constructor = d; }
24237 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24238 };
24239})();
24240var _a;
24241var isWindows;
24242if (typeof process === 'object') {
24243 isWindows = process.platform === 'win32';
24244}
24245else if (typeof navigator === 'object') {
24246 var userAgent = navigator.userAgent;
24247 isWindows = userAgent.indexOf('Windows') >= 0;
24248}
24249function isHighSurrogate(charCode) {
24250 return (0xD800 <= charCode && charCode <= 0xDBFF);
24251}
24252function isLowSurrogate(charCode) {
24253 return (0xDC00 <= charCode && charCode <= 0xDFFF);
24254}
24255function isLowerAsciiHex(code) {
24256 return code >= 97 /* a */ && code <= 102 /* f */;
24257}
24258function isLowerAsciiLetter(code) {
24259 return code >= 97 /* a */ && code <= 122 /* z */;
24260}
24261function isUpperAsciiLetter(code) {
24262 return code >= 65 /* A */ && code <= 90 /* Z */;
24263}
24264function isAsciiLetter(code) {
24265 return isLowerAsciiLetter(code) || isUpperAsciiLetter(code);
24266}
24267//#endregion
24268var _schemePattern = /^\w[\w\d+.-]*$/;
24269var _singleSlashStart = /^\//;
24270var _doubleSlashStart = /^\/\//;
24271function _validateUri(ret, _strict) {
24272 // scheme, must be set
24273 if (!ret.scheme && _strict) {
24274 throw new Error("[UriError]: Scheme is missing: {scheme: \"\", authority: \"" + ret.authority + "\", path: \"" + ret.path + "\", query: \"" + ret.query + "\", fragment: \"" + ret.fragment + "\"}");
24275 }
24276 // scheme, https://tools.ietf.org/html/rfc3986#section-3.1
24277 // ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
24278 if (ret.scheme && !_schemePattern.test(ret.scheme)) {
24279 throw new Error('[UriError]: Scheme contains illegal characters.');
24280 }
24281 // path, http://tools.ietf.org/html/rfc3986#section-3.3
24282 // If a URI contains an authority component, then the path component
24283 // must either be empty or begin with a slash ("/") character. If a URI
24284 // does not contain an authority component, then the path cannot begin
24285 // with two slash characters ("//").
24286 if (ret.path) {
24287 if (ret.authority) {
24288 if (!_singleSlashStart.test(ret.path)) {
24289 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');
24290 }
24291 }
24292 else {
24293 if (_doubleSlashStart.test(ret.path)) {
24294 throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")');
24295 }
24296 }
24297 }
24298}
24299// for a while we allowed uris *without* schemes and this is the migration
24300// for them, e.g. an uri without scheme and without strict-mode warns and falls
24301// back to the file-scheme. that should cause the least carnage and still be a
24302// clear warning
24303function _schemeFix(scheme, _strict) {
24304 if (!scheme && !_strict) {
24305 return 'file';
24306 }
24307 return scheme;
24308}
24309// implements a bit of https://tools.ietf.org/html/rfc3986#section-5
24310function _referenceResolution(scheme, path) {
24311 // the slash-character is our 'default base' as we don't
24312 // support constructing URIs relative to other URIs. This
24313 // also means that we alter and potentially break paths.
24314 // see https://tools.ietf.org/html/rfc3986#section-5.1.4
24315 switch (scheme) {
24316 case 'https':
24317 case 'http':
24318 case 'file':
24319 if (!path) {
24320 path = _slash;
24321 }
24322 else if (path[0] !== _slash) {
24323 path = _slash + path;
24324 }
24325 break;
24326 }
24327 return path;
24328}
24329var _empty = '';
24330var _slash = '/';
24331var _regexp = /^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/;
24332/**
24333 * Uniform Resource Identifier (URI) http://tools.ietf.org/html/rfc3986.
24334 * This class is a simple parser which creates the basic component parts
24335 * (http://tools.ietf.org/html/rfc3986#section-3) with minimal validation
24336 * and encoding.
24337 *
24338 * foo://example.com:8042/over/there?name=ferret#nose
24339 * \_/ \______________/\_________/ \_________/ \__/
24340 * | | | | |
24341 * scheme authority path query fragment
24342 * | _____________________|__
24343 * / \ / \
24344 * urn:example:animal:ferret:nose
24345 */
24346var URI = /** @class */ (function () {
24347 /**
24348 * @internal
24349 */
24350 function URI(schemeOrData, authority, path, query, fragment, _strict) {
24351 if (_strict === void 0) { _strict = false; }
24352 if (typeof schemeOrData === 'object') {
24353 this.scheme = schemeOrData.scheme || _empty;
24354 this.authority = schemeOrData.authority || _empty;
24355 this.path = schemeOrData.path || _empty;
24356 this.query = schemeOrData.query || _empty;
24357 this.fragment = schemeOrData.fragment || _empty;
24358 // no validation because it's this URI
24359 // that creates uri components.
24360 // _validateUri(this);
24361 }
24362 else {
24363 this.scheme = _schemeFix(schemeOrData, _strict);
24364 this.authority = authority || _empty;
24365 this.path = _referenceResolution(this.scheme, path || _empty);
24366 this.query = query || _empty;
24367 this.fragment = fragment || _empty;
24368 _validateUri(this, _strict);
24369 }
24370 }
24371 URI.isUri = function (thing) {
24372 if (thing instanceof URI) {
24373 return true;
24374 }
24375 if (!thing) {
24376 return false;
24377 }
24378 return typeof thing.authority === 'string'
24379 && typeof thing.fragment === 'string'
24380 && typeof thing.path === 'string'
24381 && typeof thing.query === 'string'
24382 && typeof thing.scheme === 'string'
24383 && typeof thing.fsPath === 'function'
24384 && typeof thing.with === 'function'
24385 && typeof thing.toString === 'function';
24386 };
24387 Object.defineProperty(URI.prototype, "fsPath", {
24388 // ---- filesystem path -----------------------
24389 /**
24390 * Returns a string representing the corresponding file system path of this URI.
24391 * Will handle UNC paths, normalizes windows drive letters to lower-case, and uses the
24392 * platform specific path separator.
24393 *
24394 * * Will *not* validate the path for invalid characters and semantics.
24395 * * Will *not* look at the scheme of this URI.
24396 * * The result shall *not* be used for display purposes but for accessing a file on disk.
24397 *
24398 *
24399 * The *difference* to `URI#path` is the use of the platform specific separator and the handling
24400 * of UNC paths. See the below sample of a file-uri with an authority (UNC path).
24401 *
24402 * ```ts
24403 const u = URI.parse('file://server/c$/folder/file.txt')
24404 u.authority === 'server'
24405 u.path === '/shares/c$/file.txt'
24406 u.fsPath === '\\server\c$\folder\file.txt'
24407 ```
24408 *
24409 * Using `URI#path` to read a file (using fs-apis) would not be enough because parts of the path,
24410 * namely the server name, would be missing. Therefore `URI#fsPath` exists - it's sugar to ease working
24411 * with URIs that represent files on disk (`file` scheme).
24412 */
24413 get: function () {
24414 // if (this.scheme !== 'file') {
24415 // console.warn(`[UriError] calling fsPath with scheme ${this.scheme}`);
24416 // }
24417 return _makeFsPath(this);
24418 },
24419 enumerable: true,
24420 configurable: true
24421 });
24422 // ---- modify to new -------------------------
24423 URI.prototype.with = function (change) {
24424 if (!change) {
24425 return this;
24426 }
24427 var scheme = change.scheme, authority = change.authority, path = change.path, query = change.query, fragment = change.fragment;
24428 if (scheme === undefined) {
24429 scheme = this.scheme;
24430 }
24431 else if (scheme === null) {
24432 scheme = _empty;
24433 }
24434 if (authority === undefined) {
24435 authority = this.authority;
24436 }
24437 else if (authority === null) {
24438 authority = _empty;
24439 }
24440 if (path === undefined) {
24441 path = this.path;
24442 }
24443 else if (path === null) {
24444 path = _empty;
24445 }
24446 if (query === undefined) {
24447 query = this.query;
24448 }
24449 else if (query === null) {
24450 query = _empty;
24451 }
24452 if (fragment === undefined) {
24453 fragment = this.fragment;
24454 }
24455 else if (fragment === null) {
24456 fragment = _empty;
24457 }
24458 if (scheme === this.scheme
24459 && authority === this.authority
24460 && path === this.path
24461 && query === this.query
24462 && fragment === this.fragment) {
24463 return this;
24464 }
24465 return new _URI(scheme, authority, path, query, fragment);
24466 };
24467 // ---- parse & validate ------------------------
24468 /**
24469 * Creates a new URI from a string, e.g. `http://www.msft.com/some/path`,
24470 * `file:///usr/home`, or `scheme:with/path`.
24471 *
24472 * @param value A string which represents an URI (see `URI#toString`).
24473 */
24474 URI.parse = function (value, _strict) {
24475 if (_strict === void 0) { _strict = false; }
24476 var match = _regexp.exec(value);
24477 if (!match) {
24478 return new _URI(_empty, _empty, _empty, _empty, _empty);
24479 }
24480 return new _URI(match[2] || _empty, decodeURIComponent(match[4] || _empty), decodeURIComponent(match[5] || _empty), decodeURIComponent(match[7] || _empty), decodeURIComponent(match[9] || _empty), _strict);
24481 };
24482 /**
24483 * Creates a new URI from a file system path, e.g. `c:\my\files`,
24484 * `/usr/home`, or `\\server\share\some\path`.
24485 *
24486 * The *difference* between `URI#parse` and `URI#file` is that the latter treats the argument
24487 * as path, not as stringified-uri. E.g. `URI.file(path)` is **not the same as**
24488 * `URI.parse('file://' + path)` because the path might contain characters that are
24489 * interpreted (# and ?). See the following sample:
24490 * ```ts
24491 const good = URI.file('/coding/c#/project1');
24492 good.scheme === 'file';
24493 good.path === '/coding/c#/project1';
24494 good.fragment === '';
24495 const bad = URI.parse('file://' + '/coding/c#/project1');
24496 bad.scheme === 'file';
24497 bad.path === '/coding/c'; // path is now broken
24498 bad.fragment === '/project1';
24499 ```
24500 *
24501 * @param path A file system path (see `URI#fsPath`)
24502 */
24503 URI.file = function (path) {
24504 var authority = _empty;
24505 // normalize to fwd-slashes on windows,
24506 // on other systems bwd-slashes are valid
24507 // filename character, eg /f\oo/ba\r.txt
24508 if (isWindows) {
24509 path = path.replace(/\\/g, _slash);
24510 }
24511 // check for authority as used in UNC shares
24512 // or use the path as given
24513 if (path[0] === _slash && path[1] === _slash) {
24514 var idx = path.indexOf(_slash, 2);
24515 if (idx === -1) {
24516 authority = path.substring(2);
24517 path = _slash;
24518 }
24519 else {
24520 authority = path.substring(2, idx);
24521 path = path.substring(idx) || _slash;
24522 }
24523 }
24524 return new _URI('file', authority, path, _empty, _empty);
24525 };
24526 URI.from = function (components) {
24527 return new _URI(components.scheme, components.authority, components.path, components.query, components.fragment);
24528 };
24529 // ---- printing/externalize ---------------------------
24530 /**
24531 * Creates a string representation for this URI. It's guaranteed that calling
24532 * `URI.parse` with the result of this function creates an URI which is equal
24533 * to this URI.
24534 *
24535 * * The result shall *not* be used for display purposes but for externalization or transport.
24536 * * The result will be encoded using the percentage encoding and encoding happens mostly
24537 * ignore the scheme-specific encoding rules.
24538 *
24539 * @param skipEncoding Do not encode the result, default is `false`
24540 */
24541 URI.prototype.toString = function (skipEncoding) {
24542 if (skipEncoding === void 0) { skipEncoding = false; }
24543 return _asFormatted(this, skipEncoding);
24544 };
24545 URI.prototype.toJSON = function () {
24546 return this;
24547 };
24548 URI.revive = function (data) {
24549 if (!data) {
24550 return data;
24551 }
24552 else if (data instanceof URI) {
24553 return data;
24554 }
24555 else {
24556 var result = new _URI(data);
24557 result._formatted = data.external;
24558 result._fsPath = data._sep === _pathSepMarker ? data.fsPath : null;
24559 return result;
24560 }
24561 };
24562 return URI;
24563}());
24564
24565var _pathSepMarker = isWindows ? 1 : undefined;
24566// tslint:disable-next-line:class-name
24567var _URI = /** @class */ (function (_super) {
24568 __extends(_URI, _super);
24569 function _URI() {
24570 var _this = _super !== null && _super.apply(this, arguments) || this;
24571 _this._formatted = null;
24572 _this._fsPath = null;
24573 return _this;
24574 }
24575 Object.defineProperty(_URI.prototype, "fsPath", {
24576 get: function () {
24577 if (!this._fsPath) {
24578 this._fsPath = _makeFsPath(this);
24579 }
24580 return this._fsPath;
24581 },
24582 enumerable: true,
24583 configurable: true
24584 });
24585 _URI.prototype.toString = function (skipEncoding) {
24586 if (skipEncoding === void 0) { skipEncoding = false; }
24587 if (!skipEncoding) {
24588 if (!this._formatted) {
24589 this._formatted = _asFormatted(this, false);
24590 }
24591 return this._formatted;
24592 }
24593 else {
24594 // we don't cache that
24595 return _asFormatted(this, true);
24596 }
24597 };
24598 _URI.prototype.toJSON = function () {
24599 var res = {
24600 $mid: 1
24601 };
24602 // cached state
24603 if (this._fsPath) {
24604 res.fsPath = this._fsPath;
24605 res._sep = _pathSepMarker;
24606 }
24607 if (this._formatted) {
24608 res.external = this._formatted;
24609 }
24610 // uri components
24611 if (this.path) {
24612 res.path = this.path;
24613 }
24614 if (this.scheme) {
24615 res.scheme = this.scheme;
24616 }
24617 if (this.authority) {
24618 res.authority = this.authority;
24619 }
24620 if (this.query) {
24621 res.query = this.query;
24622 }
24623 if (this.fragment) {
24624 res.fragment = this.fragment;
24625 }
24626 return res;
24627 };
24628 return _URI;
24629}(URI));
24630// reserved characters: https://tools.ietf.org/html/rfc3986#section-2.2
24631var encodeTable = (_a = {},
24632 _a[58 /* Colon */] = '%3A',
24633 _a[47 /* Slash */] = '%2F',
24634 _a[63 /* QuestionMark */] = '%3F',
24635 _a[35 /* Hash */] = '%23',
24636 _a[91 /* OpenSquareBracket */] = '%5B',
24637 _a[93 /* CloseSquareBracket */] = '%5D',
24638 _a[64 /* AtSign */] = '%40',
24639 _a[33 /* ExclamationMark */] = '%21',
24640 _a[36 /* DollarSign */] = '%24',
24641 _a[38 /* Ampersand */] = '%26',
24642 _a[39 /* SingleQuote */] = '%27',
24643 _a[40 /* OpenParen */] = '%28',
24644 _a[41 /* CloseParen */] = '%29',
24645 _a[42 /* Asterisk */] = '%2A',
24646 _a[43 /* Plus */] = '%2B',
24647 _a[44 /* Comma */] = '%2C',
24648 _a[59 /* Semicolon */] = '%3B',
24649 _a[61 /* Equals */] = '%3D',
24650 _a[32 /* Space */] = '%20',
24651 _a);
24652function encodeURIComponentFast(uriComponent, allowSlash) {
24653 var res = undefined;
24654 var nativeEncodePos = -1;
24655 for (var pos = 0; pos < uriComponent.length; pos++) {
24656 var code = uriComponent.charCodeAt(pos);
24657 // unreserved characters: https://tools.ietf.org/html/rfc3986#section-2.3
24658 if ((code >= 97 /* a */ && code <= 122 /* z */)
24659 || (code >= 65 /* A */ && code <= 90 /* Z */)
24660 || (code >= 48 /* Digit0 */ && code <= 57 /* Digit9 */)
24661 || code === 45 /* Dash */
24662 || code === 46 /* Period */
24663 || code === 95 /* Underline */
24664 || code === 126 /* Tilde */
24665 || (allowSlash && code === 47 /* Slash */)) {
24666 // check if we are delaying native encode
24667 if (nativeEncodePos !== -1) {
24668 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
24669 nativeEncodePos = -1;
24670 }
24671 // check if we write into a new string (by default we try to return the param)
24672 if (res !== undefined) {
24673 res += uriComponent.charAt(pos);
24674 }
24675 }
24676 else {
24677 // encoding needed, we need to allocate a new string
24678 if (res === undefined) {
24679 res = uriComponent.substr(0, pos);
24680 }
24681 // check with default table first
24682 var escaped = encodeTable[code];
24683 if (escaped !== undefined) {
24684 // check if we are delaying native encode
24685 if (nativeEncodePos !== -1) {
24686 res += encodeURIComponent(uriComponent.substring(nativeEncodePos, pos));
24687 nativeEncodePos = -1;
24688 }
24689 // append escaped variant to result
24690 res += escaped;
24691 }
24692 else if (nativeEncodePos === -1) {
24693 // use native encode only when needed
24694 nativeEncodePos = pos;
24695 }
24696 }
24697 }
24698 if (nativeEncodePos !== -1) {
24699 res += encodeURIComponent(uriComponent.substring(nativeEncodePos));
24700 }
24701 return res !== undefined ? res : uriComponent;
24702}
24703function encodeURIComponentMinimal(path) {
24704 var res = undefined;
24705 for (var pos = 0; pos < path.length; pos++) {
24706 var code = path.charCodeAt(pos);
24707 if (code === 35 /* Hash */ || code === 63 /* QuestionMark */) {
24708 if (res === undefined) {
24709 res = path.substr(0, pos);
24710 }
24711 res += encodeTable[code];
24712 }
24713 else {
24714 if (res !== undefined) {
24715 res += path[pos];
24716 }
24717 }
24718 }
24719 return res !== undefined ? res : path;
24720}
24721/**
24722 * Compute `fsPath` for the given uri
24723 */
24724function _makeFsPath(uri) {
24725 var value;
24726 if (uri.authority && uri.path.length > 1 && uri.scheme === 'file') {
24727 // unc path: file://shares/c$/far/boo
24728 value = "//" + uri.authority + uri.path;
24729 }
24730 else if (uri.path.charCodeAt(0) === 47 /* Slash */
24731 && (uri.path.charCodeAt(1) >= 65 /* A */ && uri.path.charCodeAt(1) <= 90 /* Z */ || uri.path.charCodeAt(1) >= 97 /* a */ && uri.path.charCodeAt(1) <= 122 /* z */)
24732 && uri.path.charCodeAt(2) === 58 /* Colon */) {
24733 // windows drive letter: file:///c:/far/boo
24734 value = uri.path[1].toLowerCase() + uri.path.substr(2);
24735 }
24736 else {
24737 // other path
24738 value = uri.path;
24739 }
24740 if (isWindows) {
24741 value = value.replace(/\//g, '\\');
24742 }
24743 return value;
24744}
24745/**
24746 * Create the external version of a uri
24747 */
24748function _asFormatted(uri, skipEncoding) {
24749 var encoder = !skipEncoding
24750 ? encodeURIComponentFast
24751 : encodeURIComponentMinimal;
24752 var res = '';
24753 var scheme = uri.scheme, authority = uri.authority, path = uri.path, query = uri.query, fragment = uri.fragment;
24754 if (scheme) {
24755 res += scheme;
24756 res += ':';
24757 }
24758 if (authority || scheme === 'file') {
24759 res += _slash;
24760 res += _slash;
24761 }
24762 if (authority) {
24763 var idx = authority.indexOf('@');
24764 if (idx !== -1) {
24765 // <user>@<auth>
24766 var userinfo = authority.substr(0, idx);
24767 authority = authority.substr(idx + 1);
24768 idx = userinfo.indexOf(':');
24769 if (idx === -1) {
24770 res += encoder(userinfo, false);
24771 }
24772 else {
24773 // <user>:<pass>@<auth>
24774 res += encoder(userinfo.substr(0, idx), false);
24775 res += ':';
24776 res += encoder(userinfo.substr(idx + 1), false);
24777 }
24778 res += '@';
24779 }
24780 authority = authority.toLowerCase();
24781 idx = authority.indexOf(':');
24782 if (idx === -1) {
24783 res += encoder(authority, false);
24784 }
24785 else {
24786 // <auth>:<port>
24787 res += encoder(authority.substr(0, idx), false);
24788 res += authority.substr(idx);
24789 }
24790 }
24791 if (path) {
24792 // lower-case windows drive letters in /C:/fff or C:/fff
24793 if (path.length >= 3 && path.charCodeAt(0) === 47 /* Slash */ && path.charCodeAt(2) === 58 /* Colon */) {
24794 var code = path.charCodeAt(1);
24795 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24796 path = "/" + String.fromCharCode(code + 32) + ":" + path.substr(3); // "/c:".length === 3
24797 }
24798 }
24799 else if (path.length >= 2 && path.charCodeAt(1) === 58 /* Colon */) {
24800 var code = path.charCodeAt(0);
24801 if (code >= 65 /* A */ && code <= 90 /* Z */) {
24802 path = String.fromCharCode(code + 32) + ":" + path.substr(2); // "/c:".length === 3
24803 }
24804 }
24805 // encode the rest of the path
24806 res += encoder(path, true);
24807 }
24808 if (query) {
24809 res += '?';
24810 res += encoder(query, false);
24811 }
24812 if (fragment) {
24813 res += '#';
24814 res += !skipEncoding ? encodeURIComponentFast(fragment, false) : fragment;
24815 }
24816 return res;
24817}
24818
24819
24820/***/ }),
24821/* 150 */
24822/***/ (function(module, exports, __webpack_require__) {
24823
24824"use strict";
24825
24826var __importDefault = (this && this.__importDefault) || function (mod) {
24827 return (mod && mod.__esModule) ? mod : { "default": mod };
24828};
24829Object.defineProperty(exports, "__esModule", { value: true });
24830var vscode_languageserver_1 = __webpack_require__(2);
24831var constant_1 = __webpack_require__(44);
24832var logger_1 = __importDefault(__webpack_require__(137));
24833var log = logger_1.default("buffer");
24834var NODE_TOPLEVEL = 1;
24835var NODE_EXCMD = 3;
24836var NODE_FUNCTION = 4;
24837var NODE_DELFUNCTION = 6;
24838var NODE_RETURN = 7;
24839var NODE_EXCALL = 8;
24840var NODE_LET = 9;
24841var NODE_UNLET = 10;
24842var NODE_LOCKVAR = 11;
24843var NODE_UNLOCKVAR = 12;
24844var NODE_IF = 13;
24845var NODE_ELSEIF = 14;
24846var NODE_ELSE = 15;
24847var NODE_WHILE = 17;
24848var NODE_FOR = 19;
24849var NODE_TRY = 23;
24850var NODE_CATCH = 24;
24851var NODE_FINALLY = 25;
24852var NODE_THROW = 27;
24853var NODE_ECHO = 28;
24854var NODE_ECHON = 29;
24855var NODE_ECHOMSG = 31;
24856var NODE_ECHOERR = 32;
24857var NODE_EXECUTE = 33;
24858var NODE_TERNARY = 34;
24859var NODE_OR = 35;
24860var NODE_AND = 36;
24861var NODE_EQUAL = 37;
24862var NODE_EQUALCI = 38;
24863var NODE_EQUALCS = 39;
24864var NODE_NEQUAL = 40;
24865var NODE_NEQUALCI = 41;
24866var NODE_NEQUALCS = 42;
24867var NODE_GREATER = 43;
24868var NODE_GREATERCI = 44;
24869var NODE_GREATERCS = 45;
24870var NODE_GEQUAL = 46;
24871var NODE_GEQUALCI = 47;
24872var NODE_GEQUALCS = 48;
24873var NODE_SMALLER = 49;
24874var NODE_SMALLERCI = 50;
24875var NODE_SMALLERCS = 51;
24876var NODE_SEQUAL = 52;
24877var NODE_SEQUALCI = 53;
24878var NODE_SEQUALCS = 54;
24879var NODE_MATCH = 55;
24880var NODE_MATCHCI = 56;
24881var NODE_MATCHCS = 57;
24882var NODE_NOMATCH = 58;
24883var NODE_NOMATCHCI = 59;
24884var NODE_NOMATCHCS = 60;
24885var NODE_IS = 61;
24886var NODE_ISCI = 62;
24887var NODE_ISCS = 63;
24888var NODE_ISNOT = 64;
24889var NODE_ISNOTCI = 65;
24890var NODE_ISNOTCS = 66;
24891var NODE_ADD = 67;
24892var NODE_SUBTRACT = 68;
24893var NODE_CONCAT = 69;
24894var NODE_MULTIPLY = 70;
24895var NODE_DIVIDE = 71;
24896var NODE_REMAINDER = 72;
24897var NODE_NOT = 73;
24898var NODE_MINUS = 74;
24899var NODE_PLUS = 75;
24900var NODE_SUBSCRIPT = 76;
24901var NODE_SLICE = 77;
24902var NODE_CALL = 78;
24903var NODE_DOT = 79;
24904var NODE_NUMBER = 80;
24905var NODE_STRING = 81;
24906var NODE_LIST = 82;
24907var NODE_DICT = 83;
24908var NODE_IDENTIFIER = 86;
24909var NODE_CURLYNAME = 87;
24910var NODE_ENV = 88;
24911var NODE_REG = 89; // TODO
24912var NODE_CURLYNAMEPART = 90; // TODO
24913var NODE_CURLYNAMEEXPR = 91; // TODO
24914var NODE_LAMBDA = 92;
24915var NODE_CONST = 94;
24916var NODE_EVAL = 95;
24917var NODE_HEREDOC = 96;
24918var NODE_METHOD = 97;
24919var globalFuncPattern = /^(g:\w+(\.\w+)*|[a-zA-Z_]\w*(\.\w+)*|\w+(#\w+)+)$/;
24920var scriptFuncPattern = /^(s:\w+(\.\w+)*|<SID>\w+(\.\w+)*)$/i;
24921var globalVariablePattern = /^(g:\w+(\.\w+)*|b:\w+(\.\w+)*|\w{1,}(\.\w+)*|\w+(#\w+)+)$/;
24922var localVariablePattern = /^(s:\w+(\.\w+)*|l:\w+(\.\w+)*|a:\w+(\.\w+)*)$/;
24923var envPattern = /^\$\w+$/;
24924var Buffer = /** @class */ (function () {
24925 function Buffer(uri, projectRoot, node) {
24926 this.uri = uri;
24927 this.projectRoot = projectRoot;
24928 this.node = node;
24929 this.globalFunctions = {};
24930 this.scriptFunctions = {};
24931 this.globalFunctionRefs = {};
24932 this.scriptFunctionRefs = {};
24933 this.globalVariables = {};
24934 this.localVariables = {};
24935 this.globalVariableRefs = {};
24936 this.localVariableRefs = {};
24937 this.envs = {};
24938 this.envRefs = {};
24939 this.ranges = [];
24940 this.updateBufferByNode(this.node);
24941 }
24942 Buffer.prototype.getGlobalFunctions = function () {
24943 return this.globalFunctions;
24944 };
24945 Buffer.prototype.getGlobalFunctionRefs = function () {
24946 return this.globalFunctionRefs;
24947 };
24948 Buffer.prototype.getScriptFunctions = function () {
24949 return this.scriptFunctions;
24950 };
24951 Buffer.prototype.getScriptFunctionRefs = function () {
24952 return this.scriptFunctionRefs;
24953 };
24954 Buffer.prototype.getGlobalIdentifiers = function () {
24955 return this.globalVariables;
24956 };
24957 Buffer.prototype.getGlobalIdentifierRefs = function () {
24958 return this.globalVariableRefs;
24959 };
24960 Buffer.prototype.getLocalIdentifiers = function () {
24961 return this.localVariables;
24962 };
24963 Buffer.prototype.getLocalIdentifierRefs = function () {
24964 return this.localVariableRefs;
24965 };
24966 Buffer.prototype.getRanges = function () {
24967 return this.ranges;
24968 };
24969 Buffer.prototype.getProjectRoot = function () {
24970 return this.projectRoot;
24971 };
24972 Buffer.prototype.isBelongToWorkdir = function (workUri) {
24973 return this.projectRoot === workUri;
24974 };
24975 Buffer.prototype.updateBufferByNode = function (node) {
24976 this.node = node;
24977 this.resetProperties();
24978 try {
24979 this.resolveCompletionItems([node]);
24980 }
24981 catch (error) {
24982 log.error(error.stack);
24983 }
24984 };
24985 /*
24986 * global function
24987 *
24988 * - g:xxx
24989 * - xx#xxx
24990 */
24991 Buffer.prototype.getGlobalFunctionItems = function () {
24992 var _this = this;
24993 var refs = {};
24994 Object.keys(this.globalFunctionRefs).forEach(function (name) {
24995 if (!_this.globalFunctions[name]) {
24996 refs[name] = _this.globalFunctionRefs[name];
24997 }
24998 });
24999 return this.getFunctionItems(this.globalFunctions, constant_1.sortTexts.three)
25000 .concat(this.getFunctionItems(refs, constant_1.sortTexts.three));
25001 };
25002 /*
25003 * script function
25004 *
25005 * - s:xxx
25006 */
25007 Buffer.prototype.getScriptFunctionItems = function () {
25008 var _this = this;
25009 var refs = {};
25010 Object.keys(this.scriptFunctionRefs).forEach(function (name) {
25011 if (!_this.scriptFunctions[name]) {
25012 refs[name] = _this.scriptFunctionRefs[name];
25013 }
25014 });
25015 return this.getFunctionItems(this.scriptFunctions, constant_1.sortTexts.two)
25016 .concat(this.getFunctionItems(refs, constant_1.sortTexts.two));
25017 };
25018 /*
25019 * global identifier
25020 *
25021 * - g:xxx
25022 * - b:xxx
25023 * - [a-zA-Z]+
25024 * - xx#xxx
25025 */
25026 Buffer.prototype.getGlobalIdentifierItems = function () {
25027 var _this = this;
25028 var refs = {};
25029 Object.keys(this.globalVariableRefs).forEach(function (name) {
25030 if (!_this.globalVariables[name]) {
25031 refs[name] = _this.globalVariableRefs[name];
25032 }
25033 });
25034 var globalVariables = [];
25035 var localVariables = [];
25036 this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.three)
25037 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.three))
25038 .forEach(function (item) {
25039 if (/^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label)) {
25040 localVariables.push(item);
25041 }
25042 else {
25043 globalVariables.push(item);
25044 }
25045 });
25046 if (localVariables.length) {
25047 var gloalFunctions = this.getGlobalFunctions();
25048 var scriptFunctions = this.getScriptFunctions();
25049 var funList_1 = Object.values(gloalFunctions).concat(Object.values(scriptFunctions)).reduce(function (res, fs) { return res.concat(fs); }, []);
25050 localVariables.forEach(function (l) {
25051 if (l.data.some(function (identifier) {
25052 return funList_1.every(function (fun) {
25053 return !(fun.startLine < identifier.startLine && identifier.startLine < fun.endLine);
25054 });
25055 })) {
25056 globalVariables.push(l);
25057 }
25058 });
25059 }
25060 return globalVariables;
25061 };
25062 /*
25063 * local identifier
25064 *
25065 * - s:xxx
25066 */
25067 Buffer.prototype.getLocalIdentifierItems = function () {
25068 var _this = this;
25069 var refs = {};
25070 Object.keys(this.localVariableRefs).forEach(function (name) {
25071 if (!_this.localVariables[name]) {
25072 refs[name] = _this.localVariableRefs[name];
25073 }
25074 });
25075 return this.getIdentifierItems(this.localVariables, constant_1.sortTexts.two)
25076 .concat(this.getIdentifierItems(refs, constant_1.sortTexts.two))
25077 .filter(function (item) { return !/^(a|l):/.test(item.label); });
25078 };
25079 /*
25080 * function local identifier
25081 *
25082 * - l:xxx
25083 * - a:xxx
25084 * - identifiers in function range
25085 */
25086 Buffer.prototype.getFunctionLocalIdentifierItems = function (line) {
25087 var vimLineNum = line + 1;
25088 var startLine = -1;
25089 var endLine = -1;
25090 // get function args completion items
25091 var funArgs = []
25092 .concat(Object.values(this.globalFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25093 .concat(Object.values(this.scriptFunctions).reduce(function (res, next) { return res.concat(next); }, []))
25094 .filter(function (fun) {
25095 if (startLine === -1 && endLine === -1 && fun.startLine < vimLineNum && vimLineNum < fun.endLine) {
25096 startLine = fun.startLine;
25097 endLine = fun.endLine;
25098 }
25099 else if (fun.startLine > startLine && endLine > fun.endLine) {
25100 startLine = fun.startLine;
25101 endLine = fun.endLine;
25102 }
25103 return fun.startLine < vimLineNum && vimLineNum < fun.endLine;
25104 })
25105 .reduce(function (res, next) {
25106 (next.args || []).forEach(function (name) {
25107 if (res.indexOf(name.value) === -1) {
25108 res.push(name.value);
25109 }
25110 });
25111 return res;
25112 }, [])
25113 .map(function (name) { return ({
25114 label: "a:" + name,
25115 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25116 sortText: constant_1.sortTexts.one,
25117 insertText: "a:" + name,
25118 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25119 }); });
25120 if (startLine !== -1 && endLine !== -1) {
25121 var funcLocalIdentifiers = this.getIdentifierItems(this.localVariables, constant_1.sortTexts.one)
25122 .concat(this.getIdentifierItems(this.globalVariables, constant_1.sortTexts.one))
25123 .filter(function (item) {
25124 if (!(/^l:/.test(item.label) || /^([a-zA-Z_]\w*(\.\w+)*)$/.test(item.label))) {
25125 return false;
25126 }
25127 var data = item.data;
25128 if (!data) {
25129 return false;
25130 }
25131 return data.some(function (i) { return startLine < i.startLine && i.startLine < endLine; });
25132 });
25133 return funArgs.concat(funcLocalIdentifiers);
25134 }
25135 return [];
25136 };
25137 /*
25138 * environment identifier
25139 *
25140 * - $xxx
25141 */
25142 Buffer.prototype.getEnvItems = function () {
25143 return Object.keys(this.envs).map(function (name) {
25144 return {
25145 label: name,
25146 insertText: name,
25147 sortText: constant_1.sortTexts.three,
25148 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25149 };
25150 });
25151 };
25152 Buffer.prototype.resetProperties = function () {
25153 this.globalFunctions = {};
25154 this.scriptFunctions = {};
25155 this.globalFunctionRefs = {};
25156 this.scriptFunctionRefs = {};
25157 this.globalVariables = {};
25158 this.localVariables = {};
25159 this.globalVariableRefs = {};
25160 this.localVariableRefs = {};
25161 this.envs = {};
25162 this.envRefs = {};
25163 this.ranges = [];
25164 };
25165 Buffer.prototype.resolveCompletionItems = function (nodes) {
25166 var nodeList = [].concat(nodes);
25167 while (nodeList.length > 0) {
25168 var node = nodeList.pop();
25169 switch (node.type) {
25170 case NODE_TOPLEVEL:
25171 nodeList = nodeList.concat(node.body);
25172 break;
25173 // autocmd/command/map
25174 case NODE_EXCMD:
25175 this.takeFuncRefByExcmd(node);
25176 break;
25177 case NODE_EXCALL:
25178 case NODE_RETURN:
25179 case NODE_DELFUNCTION:
25180 case NODE_THROW:
25181 case NODE_EVAL:
25182 nodeList = nodeList.concat(node.left);
25183 break;
25184 case NODE_DOT:
25185 nodeList = nodeList.concat(node.left);
25186 this.takeIdentifier(node);
25187 break;
25188 case NODE_ECHO:
25189 case NODE_ECHON:
25190 case NODE_ECHOMSG:
25191 case NODE_ECHOERR:
25192 case NODE_UNLET:
25193 case NODE_LOCKVAR:
25194 case NODE_UNLOCKVAR:
25195 case NODE_EXECUTE:
25196 nodeList = nodeList.concat(node.list || []);
25197 break;
25198 case NODE_TERNARY:
25199 nodeList = nodeList.concat(node.cond || []);
25200 nodeList = nodeList.concat(node.left || []);
25201 nodeList = nodeList.concat(node.right || []);
25202 break;
25203 case NODE_IF:
25204 case NODE_ELSEIF:
25205 case NODE_ELSE:
25206 case NODE_WHILE:
25207 this.takeRange(node, ['endif', 'endwhile']);
25208 nodeList = nodeList.concat(node.body || []);
25209 nodeList = nodeList.concat(node.cond || []);
25210 nodeList = nodeList.concat(node.elseif || []);
25211 nodeList = nodeList.concat(node._else || []);
25212 break;
25213 case NODE_OR:
25214 case NODE_AND:
25215 case NODE_EQUAL:
25216 case NODE_EQUALCI:
25217 case NODE_EQUALCS:
25218 case NODE_NEQUAL:
25219 case NODE_NEQUALCI:
25220 case NODE_NEQUALCS:
25221 case NODE_GREATER:
25222 case NODE_GREATERCI:
25223 case NODE_GREATERCS:
25224 case NODE_GEQUAL:
25225 case NODE_GEQUALCI:
25226 case NODE_GEQUALCS:
25227 case NODE_SMALLER:
25228 case NODE_SMALLERCI:
25229 case NODE_SMALLERCS:
25230 case NODE_SEQUAL:
25231 case NODE_SEQUALCI:
25232 case NODE_SEQUALCS:
25233 case NODE_MATCH:
25234 case NODE_MATCHCI:
25235 case NODE_MATCHCS:
25236 case NODE_NOMATCH:
25237 case NODE_NOMATCHCI:
25238 case NODE_NOMATCHCS:
25239 case NODE_IS:
25240 case NODE_ISCI:
25241 case NODE_ISCS:
25242 case NODE_ISNOT:
25243 case NODE_ISNOTCI:
25244 case NODE_ISNOTCS:
25245 case NODE_CONCAT:
25246 case NODE_MULTIPLY:
25247 case NODE_DIVIDE:
25248 case NODE_REMAINDER:
25249 case NODE_NOT:
25250 case NODE_MINUS:
25251 case NODE_PLUS:
25252 case NODE_ADD:
25253 case NODE_SUBTRACT:
25254 case NODE_SUBSCRIPT:
25255 case NODE_METHOD:
25256 nodeList = nodeList.concat(node.left || []);
25257 nodeList = nodeList.concat(node.right || []);
25258 break;
25259 case NODE_FOR:
25260 nodeList = nodeList.concat(node.body || []);
25261 nodeList = nodeList.concat(node.right || []);
25262 this.takeFor([].concat(node.left || []).concat(node.list || []));
25263 this.takeRange(node, 'endfor');
25264 break;
25265 case NODE_TRY:
25266 case NODE_CATCH:
25267 case NODE_FINALLY:
25268 this.takeRange(node, 'endtry');
25269 nodeList = nodeList.concat(node.body || []);
25270 nodeList = nodeList.concat(node.catch || []);
25271 nodeList = nodeList.concat(node._finally || []);
25272 break;
25273 case NODE_FUNCTION:
25274 nodeList = nodeList.concat(node.body || []);
25275 if (node.left && node.left.type === NODE_DOT) {
25276 nodeList = nodeList.concat(node.left.left);
25277 }
25278 this.takeFunction(node);
25279 this.takeRange(node, 'endfunction');
25280 break;
25281 case NODE_LIST:
25282 nodeList = nodeList.concat(node.value || []);
25283 break;
25284 case NODE_DICT:
25285 nodeList = nodeList.concat((node.value || []).map(function (item) { return item[1]; }));
25286 break;
25287 case NODE_SLICE:
25288 case NODE_LAMBDA:
25289 nodeList = nodeList.concat(node.left || []);
25290 nodeList = nodeList.concat(node.rlist || []);
25291 break;
25292 case NODE_CALL:
25293 nodeList = nodeList.concat(node.rlist || []);
25294 if (node.left && node.left.type === NODE_DOT) {
25295 nodeList = nodeList.concat(node.left.left);
25296 }
25297 this.takeFuncRefByRef(node);
25298 this.takeFuncRef(node);
25299 break;
25300 case NODE_LET:
25301 case NODE_CONST:
25302 nodeList = nodeList.concat(node.right || []);
25303 if (node.left && node.left.type === NODE_DOT) {
25304 nodeList = nodeList.concat(node.left.left);
25305 }
25306 // not a function by function()/funcref()
25307 if (!this.takeFunctionByRef(node)) {
25308 this.takeLet(node);
25309 }
25310 break;
25311 case NODE_ENV:
25312 case NODE_IDENTIFIER:
25313 this.takeIdentifier(node);
25314 break;
25315 default:
25316 break;
25317 }
25318 }
25319 // log.info(`parse_buffer: ${JSON.stringify(this)}`)
25320 };
25321 Buffer.prototype.takeFunction = function (node) {
25322 var left = node.left, rlist = node.rlist, endfunction = node.endfunction;
25323 var name = this.getDotName(left);
25324 if (!name) {
25325 return;
25326 }
25327 var pos = this.getDotPos(left);
25328 if (!pos) {
25329 return;
25330 }
25331 var func = {
25332 name: name,
25333 args: rlist || [],
25334 startLine: pos.lnum,
25335 startCol: pos.col,
25336 endLine: endfunction.pos.lnum,
25337 endCol: endfunction.pos.col,
25338 range: {
25339 startLine: node.pos.lnum,
25340 startCol: node.pos.col,
25341 endLine: endfunction.pos.lnum,
25342 endCol: endfunction.pos.col,
25343 }
25344 };
25345 if (globalFuncPattern.test(name)) {
25346 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25347 this.globalFunctions[name] = [];
25348 }
25349 this.globalFunctions[name].push(func);
25350 }
25351 else if (scriptFuncPattern.test(name)) {
25352 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25353 this.scriptFunctions[name] = [];
25354 }
25355 this.scriptFunctions[name].push(func);
25356 }
25357 };
25358 /*
25359 * vim function
25360 *
25361 * - let funcName = function()
25362 * - let funcName = funcref()
25363 */
25364 Buffer.prototype.takeFunctionByRef = function (node) {
25365 var left = node.left, right = node.right;
25366 if (!right || right.type !== NODE_CALL) {
25367 return;
25368 }
25369 // is not function()/funcref()
25370 if (!right.left ||
25371 !right.left.value ||
25372 ["function", "funcref"].indexOf(right.left.value) === -1) {
25373 return;
25374 }
25375 var name = this.getDotName(left);
25376 if (!name) {
25377 return;
25378 }
25379 var pos = this.getDotPos(left);
25380 if (!pos) {
25381 return false;
25382 }
25383 var func = {
25384 name: name,
25385 args: [],
25386 startLine: pos.lnum,
25387 startCol: pos.col,
25388 endLine: pos.lnum,
25389 endCol: pos.col,
25390 range: {
25391 startLine: pos.lnum,
25392 startCol: pos.col,
25393 endLine: pos.lnum,
25394 endCol: pos.col,
25395 }
25396 };
25397 if (globalFuncPattern.test(name)) {
25398 if (!this.globalFunctions[name] || !Array.isArray(this.globalFunctions[name])) {
25399 this.globalFunctions[name] = [];
25400 }
25401 this.globalFunctions[name].push(func);
25402 return true;
25403 }
25404 else if (scriptFuncPattern.test(name)) {
25405 if (!this.scriptFunctions[name] || !Array.isArray(this.scriptFunctions[name])) {
25406 this.scriptFunctions[name] = [];
25407 }
25408 this.scriptFunctions[name].push(func);
25409 return true;
25410 }
25411 return false;
25412 };
25413 Buffer.prototype.takeFuncRef = function (node) {
25414 var left = node.left, rlist = node.rlist;
25415 var name = "";
25416 if (left.type === NODE_IDENTIFIER) {
25417 name = left.value;
25418 // <SID>funName
25419 }
25420 else if (left.type === NODE_CURLYNAME) {
25421 name = (left.value || []).map(function (item) { return item.value; }).join("");
25422 }
25423 else if (left.type === NODE_DOT) {
25424 name = this.getDotName(left);
25425 }
25426 if (!name) {
25427 return;
25428 }
25429 var pos = this.getDotPos(left);
25430 if (!pos) {
25431 return;
25432 }
25433 var funcRef = {
25434 name: name,
25435 args: rlist || [],
25436 startLine: pos.lnum,
25437 startCol: pos.col,
25438 };
25439 if (globalFuncPattern.test(name)) {
25440 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25441 this.globalFunctionRefs[name] = [];
25442 }
25443 this.globalFunctionRefs[name].push(funcRef);
25444 }
25445 else if (scriptFuncPattern.test(name)) {
25446 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25447 this.scriptFunctionRefs[name] = [];
25448 }
25449 this.scriptFunctionRefs[name].push(funcRef);
25450 }
25451 };
25452 /*
25453 * vim function ref
25454 * first value is function name
25455 *
25456 * - function('funcName')
25457 * - funcref('funcName')
25458 */
25459 Buffer.prototype.takeFuncRefByRef = function (node) {
25460 var left = node.left, rlist = node.rlist;
25461 var funcNode = rlist && rlist[0];
25462 if (!left ||
25463 ["function", "funcref"].indexOf(left.value) === -1 ||
25464 !funcNode ||
25465 !funcNode.pos ||
25466 typeof funcNode.value !== "string") {
25467 return;
25468 }
25469 // delete '/" of function name
25470 var name = funcNode.value.replace(/^['"]|['"]$/g, "");
25471 var funcRef = {
25472 name: name,
25473 args: [],
25474 startLine: funcNode.pos.lnum,
25475 startCol: funcNode.pos.col + 1,
25476 };
25477 if (globalFuncPattern.test(name)) {
25478 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25479 this.globalFunctionRefs[name] = [];
25480 }
25481 this.globalFunctionRefs[name].push(funcRef);
25482 }
25483 else if (scriptFuncPattern.test(name)) {
25484 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25485 this.scriptFunctionRefs[name] = [];
25486 }
25487 this.scriptFunctionRefs[name].push(funcRef);
25488 }
25489 };
25490 /*
25491 * FIXME: take function ref by
25492 *
25493 * - autocmd
25494 * - command
25495 * - map
25496 */
25497 Buffer.prototype.takeFuncRefByExcmd = function (node) {
25498 var pos = node.pos, str = node.str;
25499 if (!str) {
25500 return;
25501 }
25502 // tslint:disable-next-line: max-line-length
25503 if (!/^[ \t]*((au|aut|auto|autoc|autocm|autocmd|com|comm|comma|comman|command)!?[ \t]+|([a-zA-Z]*map!?[ \t]+.*?:))/.test(str)) {
25504 return;
25505 }
25506 var regFunc = /(<sid>[\w_#]+|[a-zA-Z_]:[\w_#]+|[\w_#]+)[ \t]*\(/gi;
25507 var m = regFunc.exec(str);
25508 while (m) {
25509 var name = m[1];
25510 if (name) {
25511 var funcRef = {
25512 name: name,
25513 args: [],
25514 startLine: pos.lnum,
25515 startCol: pos.col + m.index,
25516 };
25517 if (globalFuncPattern.test(name)) {
25518 if (!this.globalFunctionRefs[name] || !Array.isArray(this.globalFunctionRefs[name])) {
25519 this.globalFunctionRefs[name] = [];
25520 }
25521 this.globalFunctionRefs[name].push(funcRef);
25522 }
25523 else if (scriptFuncPattern.test(name)) {
25524 if (!this.scriptFunctionRefs[name] || !Array.isArray(this.scriptFunctionRefs[name])) {
25525 this.scriptFunctionRefs[name] = [];
25526 }
25527 this.scriptFunctionRefs[name].push(funcRef);
25528 }
25529 }
25530 m = regFunc.exec(str);
25531 }
25532 };
25533 Buffer.prototype.takeLet = function (node) {
25534 var pos = this.getDotPos(node.left);
25535 var name = this.getDotName(node.left);
25536 if (!pos || !name) {
25537 return;
25538 }
25539 var identifier = {
25540 name: name,
25541 startLine: pos.lnum,
25542 startCol: pos.col,
25543 };
25544 if (localVariablePattern.test(name)) {
25545 if (!this.localVariables[name] || !Array.isArray(this.localVariables[name])) {
25546 this.localVariables[name] = [];
25547 }
25548 this.localVariables[name].push(identifier);
25549 }
25550 else if (globalVariablePattern.test(name)) {
25551 if (!this.globalVariables[name] || !Array.isArray(this.globalVariables[name])) {
25552 this.globalVariables[name] = [];
25553 }
25554 this.globalVariables[name].push(identifier);
25555 }
25556 else if (envPattern.test(name)) {
25557 if (!this.envs[name] || !Array.isArray(this.envs[name])) {
25558 this.envs[name] = [];
25559 }
25560 this.envs[name].push(identifier);
25561 }
25562 };
25563 Buffer.prototype.takeRange = function (node, keys) {
25564 var _this = this;
25565 [].concat(keys).forEach(function (key) {
25566 if (node.pos && node[key] && node[key].pos) {
25567 _this.ranges.push({
25568 startLine: node.pos.lnum,
25569 startCol: node.pos.col,
25570 endLine: node[key].pos.lnum,
25571 endCol: node[key].pos.col
25572 });
25573 }
25574 });
25575 };
25576 Buffer.prototype.takeFor = function (nodes) {
25577 var _this = this;
25578 nodes.forEach(function (node) {
25579 if (node.type !== NODE_IDENTIFIER || !node.pos) {
25580 return;
25581 }
25582 var name = node.value;
25583 var identifier = {
25584 name: name,
25585 startLine: node.pos.lnum,
25586 startCol: node.pos.col,
25587 };
25588 if (localVariablePattern.test(name)) {
25589 if (!_this.localVariables[name] || !Array.isArray(_this.localVariables[name])) {
25590 _this.localVariables[name] = [];
25591 }
25592 _this.localVariables[name].push(identifier);
25593 }
25594 else if (globalVariablePattern.test(name)) {
25595 if (!_this.globalVariables[name] || !Array.isArray(_this.globalVariables[name])) {
25596 _this.globalVariables[name] = [];
25597 }
25598 _this.globalVariables[name].push(identifier);
25599 }
25600 else if (envPattern.test(name)) {
25601 if (!_this.envs[name] || !Array.isArray(_this.envs[name])) {
25602 _this.envs[name] = [];
25603 }
25604 _this.envs[name].push(identifier);
25605 }
25606 });
25607 };
25608 Buffer.prototype.takeIdentifier = function (node) {
25609 var name = this.getDotName(node);
25610 if (!name) {
25611 return;
25612 }
25613 var pos = this.getDotPos(node);
25614 if (!pos) {
25615 return;
25616 }
25617 var identifier = {
25618 name: name,
25619 startLine: pos.lnum,
25620 startCol: pos.col,
25621 };
25622 if (globalVariablePattern.test(name)) {
25623 if (!this.globalVariableRefs[name] || !Array.isArray(this.globalVariableRefs[name])) {
25624 this.globalVariableRefs[name] = [];
25625 }
25626 this.globalVariableRefs[name].push(identifier);
25627 }
25628 else if (localVariablePattern.test(name)) {
25629 if (!this.localVariableRefs[name] || !Array.isArray(this.localVariableRefs[name])) {
25630 this.localVariableRefs[name] = [];
25631 }
25632 this.localVariableRefs[name].push(identifier);
25633 }
25634 else if (envPattern.test(name)) {
25635 if (!this.envRefs[name] || !Array.isArray(this.envRefs[name])) {
25636 this.envRefs[name] = [];
25637 }
25638 this.envRefs[name].push(identifier);
25639 }
25640 };
25641 Buffer.prototype.getDotPos = function (node) {
25642 if (!node) {
25643 return null;
25644 }
25645 if (node.type === NODE_IDENTIFIER ||
25646 node.type === NODE_ENV ||
25647 node.type === NODE_CURLYNAME) {
25648 return node.pos;
25649 }
25650 var left = node.left;
25651 return this.getDotPos(left);
25652 };
25653 Buffer.prototype.getDotName = function (node) {
25654 if (node.type === NODE_IDENTIFIER ||
25655 node.type === NODE_STRING ||
25656 node.type === NODE_NUMBER ||
25657 node.type === NODE_ENV) {
25658 return node.value;
25659 }
25660 else if (node.type === NODE_CURLYNAME) {
25661 return (node.value || []).map(function (item) { return item.value; }).join("");
25662 }
25663 else if (node.type === NODE_SUBSCRIPT) {
25664 return this.getDotName(node.left);
25665 }
25666 var left = node.left, right = node.right;
25667 var list = [];
25668 if (left) {
25669 list.push(this.getDotName(left));
25670 }
25671 if (right) {
25672 list.push(this.getDotName(right));
25673 }
25674 return list.join(".");
25675 };
25676 Buffer.prototype.getFunctionItems = function (items, sortText) {
25677 return Object.keys(items).map(function (name) {
25678 var list = items[name];
25679 var args = "${1}";
25680 if (list[0] && list[0].args && list[0].args.length > 0) {
25681 args = (list[0].args || []).reduce(function (res, next, idx) {
25682 // FIXME: resove next.value is not string
25683 var value = typeof next.value !== "string" ? "param" : next.value;
25684 if (idx === 0) {
25685 return "${" + (idx + 1) + ":" + value + "}";
25686 }
25687 return res + ", ${" + (idx + 1) + ":" + value + "}";
25688 }, "");
25689 }
25690 var label = name;
25691 if (/^<SID>/.test(name)) {
25692 label = name.replace(/^<SID>/, "s:");
25693 }
25694 return {
25695 label: label,
25696 detail: "any",
25697 sortText: sortText,
25698 documentation: "User defined function",
25699 kind: vscode_languageserver_1.CompletionItemKind.Function,
25700 insertText: label + "(" + args + ")${0}",
25701 insertTextFormat: vscode_languageserver_1.InsertTextFormat.Snippet,
25702 };
25703 });
25704 };
25705 Buffer.prototype.getIdentifierItems = function (items, sortText) {
25706 var _this = this;
25707 return Object.keys(items)
25708 .filter(function (name) { return !_this.globalFunctions[name] && !_this.scriptFunctions[name]; })
25709 .map(function (name) {
25710 var list = items[name];
25711 return {
25712 label: name,
25713 kind: vscode_languageserver_1.CompletionItemKind.Variable,
25714 sortText: sortText,
25715 documentation: "User defined variable",
25716 insertText: name,
25717 insertTextFormat: vscode_languageserver_1.InsertTextFormat.PlainText,
25718 data: list || [],
25719 };
25720 });
25721 };
25722 return Buffer;
25723}());
25724exports.Buffer = Buffer;
25725
25726
25727/***/ }),
25728/* 151 */
25729/***/ (function(module, exports, __webpack_require__) {
25730
25731"use strict";
25732
25733Object.defineProperty(exports, "__esModule", { value: true });
25734var patterns_1 = __webpack_require__(54);
25735var util_1 = __webpack_require__(46);
25736var builtin_1 = __webpack_require__(59);
25737var provider_1 = __webpack_require__(140);
25738function provider(line) {
25739 if (util_1.isSomeMatchPattern(patterns_1.featurePattern, line)) {
25740 return builtin_1.builtinDocs.getVimFeatures();
25741 }
25742 return [];
25743}
25744provider_1.useProvider(provider);
25745
25746
25747/***/ }),
25748/* 152 */
25749/***/ (function(module, exports, __webpack_require__) {
25750
25751"use strict";
25752
25753Object.defineProperty(exports, "__esModule", { value: true });
25754var patterns_1 = __webpack_require__(54);
25755var builtin_1 = __webpack_require__(59);
25756var provider_1 = __webpack_require__(140);
25757function provider(line) {
25758 if (!patterns_1.highlightLinkPattern.test(line) &&
25759 !patterns_1.highlightValuePattern.test(line) &&
25760 patterns_1.highlightPattern.test(line)) {
25761 return builtin_1.builtinDocs.getHighlightArgKeys().filter(function (item) {
25762 return line.indexOf(item.label) === -1;
25763 });
25764 }
25765 return [];
25766}
25767provider_1.useProvider(provider);
25768
25769
25770/***/ }),
25771/* 153 */
25772/***/ (function(module, exports, __webpack_require__) {
25773
25774"use strict";
25775
25776Object.defineProperty(exports, "__esModule", { value: true });
25777var patterns_1 = __webpack_require__(54);
25778var builtin_1 = __webpack_require__(59);
25779var provider_1 = __webpack_require__(140);
25780function provider(line) {
25781 var m = line.match(patterns_1.highlightValuePattern);
25782 if (!patterns_1.highlightLinkPattern.test(line) && m) {
25783 var values = builtin_1.builtinDocs.getHighlightArgValues();
25784 var keyName = m[3];
25785 if (values[keyName]) {
25786 return values[keyName];
25787 }
25788 }
25789 return [];
25790}
25791provider_1.useProvider(provider);
25792
25793
25794/***/ }),
25795/* 154 */
25796/***/ (function(module, exports, __webpack_require__) {
25797
25798"use strict";
25799
25800var __assign = (this && this.__assign) || function () {
25801 __assign = Object.assign || function(t) {
25802 for (var s, i = 1, n = arguments.length; i < n; i++) {
25803 s = arguments[i];
25804 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25805 t[p] = s[p];
25806 }
25807 return t;
25808 };
25809 return __assign.apply(this, arguments);
25810};
25811var __importDefault = (this && this.__importDefault) || function (mod) {
25812 return (mod && mod.__esModule) ? mod : { "default": mod };
25813};
25814Object.defineProperty(exports, "__esModule", { value: true });
25815var patterns_1 = __webpack_require__(54);
25816var util_1 = __webpack_require__(46);
25817var config_1 = __importDefault(__webpack_require__(55));
25818var workspaces_1 = __webpack_require__(148);
25819var provider_1 = __webpack_require__(140);
25820function provider(line, uri, position) {
25821 if (util_1.isSomeMatchPattern(patterns_1.notIdentifierPattern, line)) {
25822 return [];
25823 }
25824 else if (/\b[gbsla]:\w*$/.test(line)) {
25825 var list = [];
25826 if (/\bg:\w*$/.test(line)) {
25827 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25828 .filter(function (item) { return /^g:/.test(item.label); });
25829 }
25830 else if (/\bb:\w*$/.test(line)) {
25831 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25832 .filter(function (item) { return /^b:/.test(item.label); });
25833 }
25834 else if (/\bs:\w*$/.test(line)) {
25835 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25836 .filter(function (item) { return /^s:/.test(item.label); });
25837 }
25838 else if (/\bl:\w*$/.test(line)) {
25839 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25840 .filter(function (item) { return /^l:/.test(item.label); });
25841 }
25842 else if (/\ba:\w*$/.test(line)) {
25843 list = workspaces_1.workspace.getIdentifierItems(uri, position.line)
25844 .filter(function (item) { return /^a:/.test(item.label); });
25845 }
25846 return list.map(function (item) { return (__assign(__assign({}, item), { insertText: !/:/.test(config_1.default.iskeyword) ? item.insertText.slice(2) : item.insertText })); });
25847 }
25848 else if (/\B:\w*$/.test(line)) {
25849 return workspaces_1.workspace.getIdentifierItems(uri, position.line)
25850 .filter(function (item) { return /:/.test(item.label); })
25851 .map(function (item) {
25852 var m = line.match(/:[^:]*$/);
25853 return __assign(__assign({}, item), {
25854 // delete the `:` symbol
25855 textEdit: {
25856 range: {
25857 start: {
25858 line: position.line,
25859 character: line.length - m[0].length,
25860 },
25861 end: {
25862 line: position.line,
25863 character: line.length - m[0].length + 1,
25864 },
25865 },
25866 newText: item.insertText,
25867 } });
25868 });
25869 }
25870 return workspaces_1.workspace.getIdentifierItems(uri, position.line);
25871}
25872provider_1.useProvider(provider);
25873
25874
25875/***/ }),
25876/* 155 */
25877/***/ (function(module, exports, __webpack_require__) {
25878
25879"use strict";
25880
25881var __assign = (this && this.__assign) || function () {
25882 __assign = Object.assign || function(t) {
25883 for (var s, i = 1, n = arguments.length; i < n; i++) {
25884 s = arguments[i];
25885 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
25886 t[p] = s[p];
25887 }
25888 return t;
25889 };
25890 return __assign.apply(this, arguments);
25891};
25892Object.defineProperty(exports, "__esModule", { value: true });
25893var patterns_1 = __webpack_require__(54);
25894var builtin_1 = __webpack_require__(59);
25895var provider_1 = __webpack_require__(140);
25896function provider(line) {
25897 if (patterns_1.mapCommandPattern.test(line)) {
25898 if (/<$/.test(line)) {
25899 return builtin_1.builtinDocs.getVimMapArgs().map(function (item) { return (__assign(__assign({}, item), { insertText: item.insertText.slice(1) })); });
25900 }
25901 return builtin_1.builtinDocs.getVimMapArgs();
25902 }
25903 return [];
25904}
25905provider_1.useProvider(provider);
25906
25907
25908/***/ }),
25909/* 156 */
25910/***/ (function(module, exports, __webpack_require__) {
25911
25912"use strict";
25913
25914Object.defineProperty(exports, "__esModule", { value: true });
25915var patterns_1 = __webpack_require__(54);
25916var util_1 = __webpack_require__(46);
25917var builtin_1 = __webpack_require__(59);
25918var provider_1 = __webpack_require__(140);
25919function provider(line) {
25920 if (util_1.isSomeMatchPattern(patterns_1.optionPattern, line)) {
25921 return builtin_1.builtinDocs.getVimOptions();
25922 }
25923 return [];
25924}
25925provider_1.useProvider(provider);
25926
25927
25928/***/ }),
25929/* 157 */
25930/***/ (function(module, exports, __webpack_require__) {
25931
25932"use strict";
25933
25934Object.defineProperty(exports, "__esModule", { value: true });
25935var builtin_1 = __webpack_require__(59);
25936exports.completionResolveProvider = function (params) {
25937 return builtin_1.builtinDocs.getDocumentByCompletionItem(params);
25938};
25939
25940
25941/***/ }),
25942/* 158 */
25943/***/ (function(module, exports, __webpack_require__) {
25944
25945"use strict";
25946
25947Object.defineProperty(exports, "__esModule", { value: true });
25948var util_1 = __webpack_require__(46);
25949var documents_1 = __webpack_require__(56);
25950var workspaces_1 = __webpack_require__(148);
25951exports.definitionProvider = function (params) {
25952 var textDocument = params.textDocument, position = params.position;
25953 var doc = documents_1.documents.get(textDocument.uri);
25954 if (!doc) {
25955 return null;
25956 }
25957 var words = util_1.getWordFromPosition(doc, position);
25958 if (!words) {
25959 return null;
25960 }
25961 var currentName = words.word;
25962 if (/\./.test(words.right)) {
25963 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
25964 currentName = words.word.replace(tail, "");
25965 }
25966 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations;
25967};
25968
25969
25970/***/ }),
25971/* 159 */
25972/***/ (function(module, exports, __webpack_require__) {
25973
25974"use strict";
25975
25976Object.defineProperty(exports, "__esModule", { value: true });
25977var util_1 = __webpack_require__(46);
25978var documents_1 = __webpack_require__(56);
25979var workspaces_1 = __webpack_require__(148);
25980exports.documentHighlightProvider = (function (params) {
25981 var textDocument = params.textDocument, position = params.position;
25982 var doc = documents_1.documents.get(textDocument.uri);
25983 if (!doc) {
25984 return [];
25985 }
25986 var words = util_1.getWordFromPosition(doc, position);
25987 if (!words) {
25988 return [];
25989 }
25990 var currentName = words.word;
25991 if (/\./.test(words.right)) {
25992 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
25993 currentName = words.word.replace(tail, "");
25994 }
25995 var defs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "definition");
25996 var refs = workspaces_1.workspace.getLocationsByUri(currentName, doc.uri, position, "references");
25997 return defs.locations.concat(refs.locations)
25998 .map(function (location) {
25999 return {
26000 range: location.range,
26001 };
26002 });
26003});
26004
26005
26006/***/ }),
26007/* 160 */
26008/***/ (function(module, exports, __webpack_require__) {
26009
26010"use strict";
26011
26012Object.defineProperty(exports, "__esModule", { value: true });
26013var workspaces_1 = __webpack_require__(148);
26014exports.foldingRangeProvider = function (params) {
26015 var res = [];
26016 var textDocument = params.textDocument;
26017 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
26018 if (!buffer) {
26019 return res;
26020 }
26021 var globalFunctions = buffer.getGlobalFunctions();
26022 var scriptFunctions = buffer.getScriptFunctions();
26023 return Object.values(globalFunctions).concat(Object.values(scriptFunctions))
26024 .reduce(function (pre, cur) {
26025 return pre.concat(cur);
26026 }, [])
26027 .map(function (func) {
26028 return {
26029 startLine: func.startLine - 1,
26030 startCharacter: func.startCol - 1,
26031 endLine: func.endLine - 1,
26032 endCharacter: func.endCol - 1,
26033 kind: "region",
26034 };
26035 });
26036};
26037
26038
26039/***/ }),
26040/* 161 */
26041/***/ (function(module, exports, __webpack_require__) {
26042
26043"use strict";
26044
26045Object.defineProperty(exports, "__esModule", { value: true });
26046var util_1 = __webpack_require__(46);
26047var builtin_1 = __webpack_require__(59);
26048var documents_1 = __webpack_require__(56);
26049exports.hoverProvider = function (params) {
26050 var textDocument = params.textDocument, position = params.position;
26051 var doc = documents_1.documents.get(textDocument.uri);
26052 if (!doc) {
26053 return;
26054 }
26055 var words = util_1.getWordFromPosition(doc, position);
26056 if (!words) {
26057 return;
26058 }
26059 return builtin_1.builtinDocs.getHoverDocument(words.word, words.wordLeft, words.wordRight);
26060};
26061
26062
26063/***/ }),
26064/* 162 */
26065/***/ (function(module, exports, __webpack_require__) {
26066
26067"use strict";
26068
26069Object.defineProperty(exports, "__esModule", { value: true });
26070var util_1 = __webpack_require__(46);
26071var documents_1 = __webpack_require__(56);
26072var workspaces_1 = __webpack_require__(148);
26073exports.referencesProvider = function (params) {
26074 var textDocument = params.textDocument, position = params.position;
26075 var doc = documents_1.documents.get(textDocument.uri);
26076 if (!doc) {
26077 return null;
26078 }
26079 var words = util_1.getWordFromPosition(doc, position);
26080 if (!words) {
26081 return null;
26082 }
26083 var currentName = words.word;
26084 if (/\./.test(words.right)) {
26085 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26086 currentName = words.word.replace(tail, "");
26087 }
26088 return workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references").locations;
26089};
26090
26091
26092/***/ }),
26093/* 163 */
26094/***/ (function(module, exports, __webpack_require__) {
26095
26096"use strict";
26097
26098Object.defineProperty(exports, "__esModule", { value: true });
26099var vscode_languageserver_1 = __webpack_require__(2);
26100var util_1 = __webpack_require__(46);
26101var documents_1 = __webpack_require__(56);
26102var workspaces_1 = __webpack_require__(148);
26103exports.prepareProvider = function (params) {
26104 var textDocument = params.textDocument, position = params.position;
26105 var doc = documents_1.documents.get(textDocument.uri);
26106 if (!doc) {
26107 return null;
26108 }
26109 var words = util_1.getWordFromPosition(doc, position);
26110 if (!words) {
26111 return null;
26112 }
26113 var currentName = words.word;
26114 if (/\./.test(words.right)) {
26115 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26116 currentName = words.word.replace(tail, "");
26117 }
26118 return {
26119 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)),
26120 placeholder: currentName,
26121 };
26122};
26123exports.renameProvider = function (params) {
26124 var textDocument = params.textDocument, position = params.position, newName = params.newName;
26125 var doc = documents_1.documents.get(textDocument.uri);
26126 if (!doc) {
26127 return null;
26128 }
26129 var words = util_1.getWordFromPosition(doc, position);
26130 if (!words) {
26131 return null;
26132 }
26133 var currentName = words.word;
26134 if (/\./.test(words.right)) {
26135 var tail = words.right.replace(/^[^.]*(\.)/, "$1");
26136 currentName = words.word.replace(tail, "");
26137 }
26138 var changes = {};
26139 var isChange = false;
26140 workspaces_1.workspace.getLocations(currentName, doc.uri, position, "definition").locations
26141 .forEach(function (l) {
26142 isChange = true;
26143 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26144 changes[l.uri] = [];
26145 }
26146 changes[l.uri].push({
26147 newText: /^a:/.test(newName) ? newName.slice(2) : newName,
26148 range: l.range,
26149 });
26150 });
26151 var refs = workspaces_1.workspace.getLocations(currentName, doc.uri, position, "references");
26152 refs.locations.forEach(function (l) {
26153 isChange = true;
26154 if (!changes[l.uri] || !Array.isArray(changes[l.uri])) {
26155 changes[l.uri] = [];
26156 }
26157 changes[l.uri].push({
26158 newText: refs.isFunArg ? "a:" + newName : newName,
26159 range: l.range,
26160 });
26161 });
26162 if (isChange) {
26163 return {
26164 changes: changes,
26165 };
26166 }
26167 return null;
26168};
26169
26170
26171/***/ }),
26172/* 164 */
26173/***/ (function(module, exports, __webpack_require__) {
26174
26175"use strict";
26176
26177Object.defineProperty(exports, "__esModule", { value: true });
26178var vscode_languageserver_1 = __webpack_require__(2);
26179var patterns_1 = __webpack_require__(54);
26180var builtin_1 = __webpack_require__(59);
26181var documents_1 = __webpack_require__(56);
26182exports.signatureHelpProvider = function (params) {
26183 var textDocument = params.textDocument, position = params.position;
26184 var doc = documents_1.documents.get(textDocument.uri);
26185 if (!doc) {
26186 return;
26187 }
26188 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)));
26189 // comment line
26190 if (patterns_1.commentPattern.test(currentLine)) {
26191 return;
26192 }
26193 var preSegment = currentLine.slice(0, position.character);
26194 var m = preSegment.match(/([\w#&:]+)[ \t]*\(([^()]*|\([^)]*\))*$/);
26195 if (!m) {
26196 return;
26197 }
26198 var functionName = m["1"];
26199 var placeIdx = m[0].split(",").length - 1;
26200 return builtin_1.builtinDocs.getSignatureHelpByName(functionName, placeIdx);
26201};
26202
26203
26204/***/ }),
26205/* 165 */
26206/***/ (function(module, exports, __webpack_require__) {
26207
26208"use strict";
26209
26210var __importDefault = (this && this.__importDefault) || function (mod) {
26211 return (mod && mod.__esModule) ? mod : { "default": mod };
26212};
26213Object.defineProperty(exports, "__esModule", { value: true });
26214var child_process_1 = __importDefault(__webpack_require__(41));
26215var path_1 = __webpack_require__(13);
26216var rxjs_1 = __webpack_require__(166);
26217var waitMap_1 = __webpack_require__(268);
26218var operators_1 = __webpack_require__(269);
26219var vscode_uri_1 = __webpack_require__(149);
26220var logger_1 = __importDefault(__webpack_require__(137));
26221var util_1 = __webpack_require__(46);
26222var diagnostic_1 = __webpack_require__(367);
26223var config_1 = __importDefault(__webpack_require__(55));
26224var workspaces_1 = __webpack_require__(148);
26225var log = logger_1.default("parser");
26226var parserHandles = {};
26227var indexes = {};
26228var origin$ = new rxjs_1.Subject();
26229var scanProcess;
26230var isScanRuntimepath = false;
26231function startIndex() {
26232 if (scanProcess) {
26233 return;
26234 }
26235 scanProcess = child_process_1.default.fork(path_1.join(__dirname, "scan.js"), ["--node-ipc"]);
26236 scanProcess.on("message", function (mess) {
26237 var data = mess.data, msglog = mess.msglog;
26238 if (data) {
26239 if (!workspaces_1.workspace.isExistsBuffer(data.uri)) {
26240 workspaces_1.workspace.updateBuffer(data.uri, data.node);
26241 }
26242 }
26243 if (msglog) {
26244 log.info("child_log: " + msglog);
26245 }
26246 });
26247 scanProcess.on("error", function (err) {
26248 log.error("" + (err.stack || err.message || err));
26249 });
26250 scanProcess.send({
26251 config: {
26252 gap: config_1.default.indexes.gap,
26253 count: config_1.default.indexes.count,
26254 projectRootPatterns: config_1.default.indexes.projectRootPatterns,
26255 },
26256 });
26257}
26258function next(textDoc) {
26259 if (!parserHandles[textDoc.uri]) {
26260 var uri_1 = textDoc.uri;
26261 parserHandles[uri_1] = origin$.pipe(operators_1.filter(function (td) { return uri_1 === td.uri; }), operators_1.switchMap(function (td) {
26262 return rxjs_1.timer(100).pipe(operators_1.map(function () { return td; }));
26263 }), waitMap_1.waitMap(function (td) {
26264 return rxjs_1.from(util_1.handleParse(td));
26265 }, true)).subscribe(function (res) {
26266 if (config_1.default.diagnostic.enable) {
26267 // handle diagnostic
26268 diagnostic_1.handleDiagnostic(textDoc, res[1]);
26269 }
26270 // handle node
26271 workspaces_1.workspace.updateBuffer(uri_1, res[0]);
26272 // scan project
26273 if (!indexes[uri_1]) {
26274 indexes[uri_1] = true;
26275 scanProcess.send({
26276 uri: uri_1,
26277 });
26278 if (!isScanRuntimepath) {
26279 isScanRuntimepath = true;
26280 scan([config_1.default.vimruntime].concat(config_1.default.runtimepath));
26281 }
26282 }
26283 }, function (err) {
26284 log.error("" + (err.stack || err.message || err));
26285 });
26286 }
26287 if (!scanProcess) {
26288 startIndex();
26289 }
26290 origin$.next(textDoc);
26291}
26292exports.next = next;
26293function unsubscribe(textDoc) {
26294 if (parserHandles[textDoc.uri] !== undefined) {
26295 parserHandles[textDoc.uri].unsubscribe();
26296 }
26297 parserHandles[textDoc.uri] = undefined;
26298}
26299exports.unsubscribe = unsubscribe;
26300// scan directory
26301function scan(paths) {
26302 if (!scanProcess) {
26303 startIndex();
26304 }
26305 if (config_1.default.indexes.runtimepath) {
26306 var list = [].concat(paths);
26307 for (var _i = 0, list_1 = list; _i < list_1.length; _i++) {
26308 var p = list_1[_i];
26309 if (!p) {
26310 continue;
26311 }
26312 p = p.trim();
26313 if (!p || p === "/") {
26314 continue;
26315 }
26316 scanProcess.send({
26317 uri: vscode_uri_1.URI.file(path_1.join(p, "f")).toString(),
26318 });
26319 }
26320 }
26321}
26322exports.scan = scan;
26323
26324
26325/***/ }),
26326/* 166 */
26327/***/ (function(module, __webpack_exports__, __webpack_require__) {
26328
26329"use strict";
26330__webpack_require__.r(__webpack_exports__);
26331/* harmony import */ var _internal_Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
26332/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return _internal_Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]; });
26333
26334/* harmony import */ var _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(184);
26335/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return _internal_observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_1__["ConnectableObservable"]; });
26336
26337/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(189);
26338/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_2__["GroupedObservable"]; });
26339
26340/* harmony import */ var _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(181);
26341/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return _internal_symbol_observable__WEBPACK_IMPORTED_MODULE_3__["observable"]; });
26342
26343/* harmony import */ var _internal_Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
26344/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return _internal_Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]; });
26345
26346/* harmony import */ var _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(190);
26347/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return _internal_BehaviorSubject__WEBPACK_IMPORTED_MODULE_5__["BehaviorSubject"]; });
26348
26349/* harmony import */ var _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(191);
26350/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return _internal_ReplaySubject__WEBPACK_IMPORTED_MODULE_6__["ReplaySubject"]; });
26351
26352/* harmony import */ var _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(208);
26353/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return _internal_AsyncSubject__WEBPACK_IMPORTED_MODULE_7__["AsyncSubject"]; });
26354
26355/* harmony import */ var _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(209);
26356/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asapScheduler", function() { return _internal_scheduler_asap__WEBPACK_IMPORTED_MODULE_8__["asap"]; });
26357
26358/* harmony import */ var _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(213);
26359/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "asyncScheduler", function() { return _internal_scheduler_async__WEBPACK_IMPORTED_MODULE_9__["async"]; });
26360
26361/* harmony import */ var _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(192);
26362/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "queueScheduler", function() { return _internal_scheduler_queue__WEBPACK_IMPORTED_MODULE_10__["queue"]; });
26363
26364/* harmony import */ var _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(214);
26365/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "animationFrameScheduler", function() { return _internal_scheduler_animationFrame__WEBPACK_IMPORTED_MODULE_11__["animationFrame"]; });
26366
26367/* harmony import */ var _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(217);
26368/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualTimeScheduler"]; });
26369
26370/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return _internal_scheduler_VirtualTimeScheduler__WEBPACK_IMPORTED_MODULE_12__["VirtualAction"]; });
26371
26372/* harmony import */ var _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(198);
26373/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return _internal_Scheduler__WEBPACK_IMPORTED_MODULE_13__["Scheduler"]; });
26374
26375/* harmony import */ var _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(175);
26376/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return _internal_Subscription__WEBPACK_IMPORTED_MODULE_14__["Subscription"]; });
26377
26378/* harmony import */ var _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(169);
26379/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return _internal_Subscriber__WEBPACK_IMPORTED_MODULE_15__["Subscriber"]; });
26380
26381/* harmony import */ var _internal_Notification__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(200);
26382/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["Notification"]; });
26383
26384/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return _internal_Notification__WEBPACK_IMPORTED_MODULE_16__["NotificationKind"]; });
26385
26386/* harmony import */ var _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(182);
26387/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return _internal_util_pipe__WEBPACK_IMPORTED_MODULE_17__["pipe"]; });
26388
26389/* harmony import */ var _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(218);
26390/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return _internal_util_noop__WEBPACK_IMPORTED_MODULE_18__["noop"]; });
26391
26392/* harmony import */ var _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(183);
26393/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return _internal_util_identity__WEBPACK_IMPORTED_MODULE_19__["identity"]; });
26394
26395/* harmony import */ var _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(219);
26396/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return _internal_util_isObservable__WEBPACK_IMPORTED_MODULE_20__["isObservable"]; });
26397
26398/* harmony import */ var _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(220);
26399/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return _internal_util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_21__["ArgumentOutOfRangeError"]; });
26400
26401/* harmony import */ var _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(221);
26402/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return _internal_util_EmptyError__WEBPACK_IMPORTED_MODULE_22__["EmptyError"]; });
26403
26404/* harmony import */ var _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(186);
26405/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return _internal_util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_23__["ObjectUnsubscribedError"]; });
26406
26407/* harmony import */ var _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(178);
26408/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return _internal_util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_24__["UnsubscriptionError"]; });
26409
26410/* harmony import */ var _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(222);
26411/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "TimeoutError", function() { return _internal_util_TimeoutError__WEBPACK_IMPORTED_MODULE_25__["TimeoutError"]; });
26412
26413/* harmony import */ var _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(223);
26414/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return _internal_observable_bindCallback__WEBPACK_IMPORTED_MODULE_26__["bindCallback"]; });
26415
26416/* harmony import */ var _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(225);
26417/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return _internal_observable_bindNodeCallback__WEBPACK_IMPORTED_MODULE_27__["bindNodeCallback"]; });
26418
26419/* harmony import */ var _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(226);
26420/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_observable_combineLatest__WEBPACK_IMPORTED_MODULE_28__["combineLatest"]; });
26421
26422/* harmony import */ var _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(237);
26423/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_observable_concat__WEBPACK_IMPORTED_MODULE_29__["concat"]; });
26424
26425/* harmony import */ var _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(248);
26426/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return _internal_observable_defer__WEBPACK_IMPORTED_MODULE_30__["defer"]; });
26427
26428/* harmony import */ var _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(201);
26429/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["empty"]; });
26430
26431/* harmony import */ var _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(249);
26432/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return _internal_observable_forkJoin__WEBPACK_IMPORTED_MODULE_32__["forkJoin"]; });
26433
26434/* harmony import */ var _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(241);
26435/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "from", function() { return _internal_observable_from__WEBPACK_IMPORTED_MODULE_33__["from"]; });
26436
26437/* harmony import */ var _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(250);
26438/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return _internal_observable_fromEvent__WEBPACK_IMPORTED_MODULE_34__["fromEvent"]; });
26439
26440/* harmony import */ var _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(251);
26441/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return _internal_observable_fromEventPattern__WEBPACK_IMPORTED_MODULE_35__["fromEventPattern"]; });
26442
26443/* harmony import */ var _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(252);
26444/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return _internal_observable_generate__WEBPACK_IMPORTED_MODULE_36__["generate"]; });
26445
26446/* harmony import */ var _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(253);
26447/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return _internal_observable_iif__WEBPACK_IMPORTED_MODULE_37__["iif"]; });
26448
26449/* harmony import */ var _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(254);
26450/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return _internal_observable_interval__WEBPACK_IMPORTED_MODULE_38__["interval"]; });
26451
26452/* harmony import */ var _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(256);
26453/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_observable_merge__WEBPACK_IMPORTED_MODULE_39__["merge"]; });
26454
26455/* harmony import */ var _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(257);
26456/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "never", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["never"]; });
26457
26458/* harmony import */ var _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(202);
26459/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "of", function() { return _internal_observable_of__WEBPACK_IMPORTED_MODULE_41__["of"]; });
26460
26461/* harmony import */ var _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(258);
26462/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_observable_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_42__["onErrorResumeNext"]; });
26463
26464/* harmony import */ var _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(259);
26465/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return _internal_observable_pairs__WEBPACK_IMPORTED_MODULE_43__["pairs"]; });
26466
26467/* harmony import */ var _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(260);
26468/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_observable_partition__WEBPACK_IMPORTED_MODULE_44__["partition"]; });
26469
26470/* harmony import */ var _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(263);
26471/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_observable_race__WEBPACK_IMPORTED_MODULE_45__["race"]; });
26472
26473/* harmony import */ var _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(264);
26474/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "range", function() { return _internal_observable_range__WEBPACK_IMPORTED_MODULE_46__["range"]; });
26475
26476/* harmony import */ var _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(207);
26477/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return _internal_observable_throwError__WEBPACK_IMPORTED_MODULE_47__["throwError"]; });
26478
26479/* harmony import */ var _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(265);
26480/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return _internal_observable_timer__WEBPACK_IMPORTED_MODULE_48__["timer"]; });
26481
26482/* harmony import */ var _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(266);
26483/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "using", function() { return _internal_observable_using__WEBPACK_IMPORTED_MODULE_49__["using"]; });
26484
26485/* harmony import */ var _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(267);
26486/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_observable_zip__WEBPACK_IMPORTED_MODULE_50__["zip"]; });
26487
26488/* harmony import */ var _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(242);
26489/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return _internal_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_51__["scheduled"]; });
26490
26491/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return _internal_observable_empty__WEBPACK_IMPORTED_MODULE_31__["EMPTY"]; });
26492
26493/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return _internal_observable_never__WEBPACK_IMPORTED_MODULE_40__["NEVER"]; });
26494
26495/* harmony import */ var _internal_config__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(173);
26496/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "config", function() { return _internal_config__WEBPACK_IMPORTED_MODULE_52__["config"]; });
26497
26498/** PURE_IMPORTS_START PURE_IMPORTS_END */
26499
26500
26501
26502
26503
26504
26505
26506
26507
26508
26509
26510
26511
26512
26513
26514
26515
26516
26517
26518
26519
26520
26521
26522
26523
26524
26525
26526
26527
26528
26529
26530
26531
26532
26533
26534
26535
26536
26537
26538
26539
26540
26541
26542
26543
26544
26545
26546
26547
26548
26549
26550
26551
26552
26553
26554//# sourceMappingURL=index.js.map
26555
26556
26557/***/ }),
26558/* 167 */
26559/***/ (function(module, __webpack_exports__, __webpack_require__) {
26560
26561"use strict";
26562__webpack_require__.r(__webpack_exports__);
26563/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Observable", function() { return Observable; });
26564/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(168);
26565/* harmony import */ var _util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(180);
26566/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(181);
26567/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(182);
26568/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(173);
26569/** PURE_IMPORTS_START _util_canReportError,_util_toSubscriber,_symbol_observable,_util_pipe,_config PURE_IMPORTS_END */
26570
26571
26572
26573
26574
26575var Observable = /*@__PURE__*/ (function () {
26576 function Observable(subscribe) {
26577 this._isScalar = false;
26578 if (subscribe) {
26579 this._subscribe = subscribe;
26580 }
26581 }
26582 Observable.prototype.lift = function (operator) {
26583 var observable = new Observable();
26584 observable.source = this;
26585 observable.operator = operator;
26586 return observable;
26587 };
26588 Observable.prototype.subscribe = function (observerOrNext, error, complete) {
26589 var operator = this.operator;
26590 var sink = Object(_util_toSubscriber__WEBPACK_IMPORTED_MODULE_1__["toSubscriber"])(observerOrNext, error, complete);
26591 if (operator) {
26592 sink.add(operator.call(sink, this.source));
26593 }
26594 else {
26595 sink.add(this.source || (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling && !sink.syncErrorThrowable) ?
26596 this._subscribe(sink) :
26597 this._trySubscribe(sink));
26598 }
26599 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
26600 if (sink.syncErrorThrowable) {
26601 sink.syncErrorThrowable = false;
26602 if (sink.syncErrorThrown) {
26603 throw sink.syncErrorValue;
26604 }
26605 }
26606 }
26607 return sink;
26608 };
26609 Observable.prototype._trySubscribe = function (sink) {
26610 try {
26611 return this._subscribe(sink);
26612 }
26613 catch (err) {
26614 if (_config__WEBPACK_IMPORTED_MODULE_4__["config"].useDeprecatedSynchronousErrorHandling) {
26615 sink.syncErrorThrown = true;
26616 sink.syncErrorValue = err;
26617 }
26618 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_0__["canReportError"])(sink)) {
26619 sink.error(err);
26620 }
26621 else {
26622 console.warn(err);
26623 }
26624 }
26625 };
26626 Observable.prototype.forEach = function (next, promiseCtor) {
26627 var _this = this;
26628 promiseCtor = getPromiseCtor(promiseCtor);
26629 return new promiseCtor(function (resolve, reject) {
26630 var subscription;
26631 subscription = _this.subscribe(function (value) {
26632 try {
26633 next(value);
26634 }
26635 catch (err) {
26636 reject(err);
26637 if (subscription) {
26638 subscription.unsubscribe();
26639 }
26640 }
26641 }, reject, resolve);
26642 });
26643 };
26644 Observable.prototype._subscribe = function (subscriber) {
26645 var source = this.source;
26646 return source && source.subscribe(subscriber);
26647 };
26648 Observable.prototype[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]] = function () {
26649 return this;
26650 };
26651 Observable.prototype.pipe = function () {
26652 var operations = [];
26653 for (var _i = 0; _i < arguments.length; _i++) {
26654 operations[_i] = arguments[_i];
26655 }
26656 if (operations.length === 0) {
26657 return this;
26658 }
26659 return Object(_util_pipe__WEBPACK_IMPORTED_MODULE_3__["pipeFromArray"])(operations)(this);
26660 };
26661 Observable.prototype.toPromise = function (promiseCtor) {
26662 var _this = this;
26663 promiseCtor = getPromiseCtor(promiseCtor);
26664 return new promiseCtor(function (resolve, reject) {
26665 var value;
26666 _this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
26667 });
26668 };
26669 Observable.create = function (subscribe) {
26670 return new Observable(subscribe);
26671 };
26672 return Observable;
26673}());
26674
26675function getPromiseCtor(promiseCtor) {
26676 if (!promiseCtor) {
26677 promiseCtor = _config__WEBPACK_IMPORTED_MODULE_4__["config"].Promise || Promise;
26678 }
26679 if (!promiseCtor) {
26680 throw new Error('no Promise impl found');
26681 }
26682 return promiseCtor;
26683}
26684//# sourceMappingURL=Observable.js.map
26685
26686
26687/***/ }),
26688/* 168 */
26689/***/ (function(module, __webpack_exports__, __webpack_require__) {
26690
26691"use strict";
26692__webpack_require__.r(__webpack_exports__);
26693/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "canReportError", function() { return canReportError; });
26694/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
26695/** PURE_IMPORTS_START _Subscriber PURE_IMPORTS_END */
26696
26697function canReportError(observer) {
26698 while (observer) {
26699 var _a = observer, closed_1 = _a.closed, destination = _a.destination, isStopped = _a.isStopped;
26700 if (closed_1 || isStopped) {
26701 return false;
26702 }
26703 else if (destination && destination instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
26704 observer = destination;
26705 }
26706 else {
26707 observer = null;
26708 }
26709 }
26710 return true;
26711}
26712//# sourceMappingURL=canReportError.js.map
26713
26714
26715/***/ }),
26716/* 169 */
26717/***/ (function(module, __webpack_exports__, __webpack_require__) {
26718
26719"use strict";
26720__webpack_require__.r(__webpack_exports__);
26721/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscriber", function() { return Subscriber; });
26722/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SafeSubscriber", function() { return SafeSubscriber; });
26723/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
26724/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(171);
26725/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
26726/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
26727/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(179);
26728/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(173);
26729/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(174);
26730/** PURE_IMPORTS_START tslib,_util_isFunction,_Observer,_Subscription,_internal_symbol_rxSubscriber,_config,_util_hostReportError PURE_IMPORTS_END */
26731
26732
26733
26734
26735
26736
26737
26738var Subscriber = /*@__PURE__*/ (function (_super) {
26739 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subscriber, _super);
26740 function Subscriber(destinationOrNext, error, complete) {
26741 var _this = _super.call(this) || this;
26742 _this.syncErrorValue = null;
26743 _this.syncErrorThrown = false;
26744 _this.syncErrorThrowable = false;
26745 _this.isStopped = false;
26746 switch (arguments.length) {
26747 case 0:
26748 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
26749 break;
26750 case 1:
26751 if (!destinationOrNext) {
26752 _this.destination = _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"];
26753 break;
26754 }
26755 if (typeof destinationOrNext === 'object') {
26756 if (destinationOrNext instanceof Subscriber) {
26757 _this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
26758 _this.destination = destinationOrNext;
26759 destinationOrNext.add(_this);
26760 }
26761 else {
26762 _this.syncErrorThrowable = true;
26763 _this.destination = new SafeSubscriber(_this, destinationOrNext);
26764 }
26765 break;
26766 }
26767 default:
26768 _this.syncErrorThrowable = true;
26769 _this.destination = new SafeSubscriber(_this, destinationOrNext, error, complete);
26770 break;
26771 }
26772 return _this;
26773 }
26774 Subscriber.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_4__["rxSubscriber"]] = function () { return this; };
26775 Subscriber.create = function (next, error, complete) {
26776 var subscriber = new Subscriber(next, error, complete);
26777 subscriber.syncErrorThrowable = false;
26778 return subscriber;
26779 };
26780 Subscriber.prototype.next = function (value) {
26781 if (!this.isStopped) {
26782 this._next(value);
26783 }
26784 };
26785 Subscriber.prototype.error = function (err) {
26786 if (!this.isStopped) {
26787 this.isStopped = true;
26788 this._error(err);
26789 }
26790 };
26791 Subscriber.prototype.complete = function () {
26792 if (!this.isStopped) {
26793 this.isStopped = true;
26794 this._complete();
26795 }
26796 };
26797 Subscriber.prototype.unsubscribe = function () {
26798 if (this.closed) {
26799 return;
26800 }
26801 this.isStopped = true;
26802 _super.prototype.unsubscribe.call(this);
26803 };
26804 Subscriber.prototype._next = function (value) {
26805 this.destination.next(value);
26806 };
26807 Subscriber.prototype._error = function (err) {
26808 this.destination.error(err);
26809 this.unsubscribe();
26810 };
26811 Subscriber.prototype._complete = function () {
26812 this.destination.complete();
26813 this.unsubscribe();
26814 };
26815 Subscriber.prototype._unsubscribeAndRecycle = function () {
26816 var _parentOrParents = this._parentOrParents;
26817 this._parentOrParents = null;
26818 this.unsubscribe();
26819 this.closed = false;
26820 this.isStopped = false;
26821 this._parentOrParents = _parentOrParents;
26822 return this;
26823 };
26824 return Subscriber;
26825}(_Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"]));
26826
26827var SafeSubscriber = /*@__PURE__*/ (function (_super) {
26828 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SafeSubscriber, _super);
26829 function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
26830 var _this = _super.call(this) || this;
26831 _this._parentSubscriber = _parentSubscriber;
26832 var next;
26833 var context = _this;
26834 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(observerOrNext)) {
26835 next = observerOrNext;
26836 }
26837 else if (observerOrNext) {
26838 next = observerOrNext.next;
26839 error = observerOrNext.error;
26840 complete = observerOrNext.complete;
26841 if (observerOrNext !== _Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]) {
26842 context = Object.create(observerOrNext);
26843 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_1__["isFunction"])(context.unsubscribe)) {
26844 _this.add(context.unsubscribe.bind(context));
26845 }
26846 context.unsubscribe = _this.unsubscribe.bind(_this);
26847 }
26848 }
26849 _this._context = context;
26850 _this._next = next;
26851 _this._error = error;
26852 _this._complete = complete;
26853 return _this;
26854 }
26855 SafeSubscriber.prototype.next = function (value) {
26856 if (!this.isStopped && this._next) {
26857 var _parentSubscriber = this._parentSubscriber;
26858 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26859 this.__tryOrUnsub(this._next, value);
26860 }
26861 else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
26862 this.unsubscribe();
26863 }
26864 }
26865 };
26866 SafeSubscriber.prototype.error = function (err) {
26867 if (!this.isStopped) {
26868 var _parentSubscriber = this._parentSubscriber;
26869 var useDeprecatedSynchronousErrorHandling = _config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling;
26870 if (this._error) {
26871 if (!useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26872 this.__tryOrUnsub(this._error, err);
26873 this.unsubscribe();
26874 }
26875 else {
26876 this.__tryOrSetError(_parentSubscriber, this._error, err);
26877 this.unsubscribe();
26878 }
26879 }
26880 else if (!_parentSubscriber.syncErrorThrowable) {
26881 this.unsubscribe();
26882 if (useDeprecatedSynchronousErrorHandling) {
26883 throw err;
26884 }
26885 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26886 }
26887 else {
26888 if (useDeprecatedSynchronousErrorHandling) {
26889 _parentSubscriber.syncErrorValue = err;
26890 _parentSubscriber.syncErrorThrown = true;
26891 }
26892 else {
26893 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26894 }
26895 this.unsubscribe();
26896 }
26897 }
26898 };
26899 SafeSubscriber.prototype.complete = function () {
26900 var _this = this;
26901 if (!this.isStopped) {
26902 var _parentSubscriber = this._parentSubscriber;
26903 if (this._complete) {
26904 var wrappedComplete = function () { return _this._complete.call(_this._context); };
26905 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling || !_parentSubscriber.syncErrorThrowable) {
26906 this.__tryOrUnsub(wrappedComplete);
26907 this.unsubscribe();
26908 }
26909 else {
26910 this.__tryOrSetError(_parentSubscriber, wrappedComplete);
26911 this.unsubscribe();
26912 }
26913 }
26914 else {
26915 this.unsubscribe();
26916 }
26917 }
26918 };
26919 SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
26920 try {
26921 fn.call(this._context, value);
26922 }
26923 catch (err) {
26924 this.unsubscribe();
26925 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
26926 throw err;
26927 }
26928 else {
26929 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26930 }
26931 }
26932 };
26933 SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
26934 if (!_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
26935 throw new Error('bad call');
26936 }
26937 try {
26938 fn.call(this._context, value);
26939 }
26940 catch (err) {
26941 if (_config__WEBPACK_IMPORTED_MODULE_5__["config"].useDeprecatedSynchronousErrorHandling) {
26942 parent.syncErrorValue = err;
26943 parent.syncErrorThrown = true;
26944 return true;
26945 }
26946 else {
26947 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_6__["hostReportError"])(err);
26948 return true;
26949 }
26950 }
26951 return false;
26952 };
26953 SafeSubscriber.prototype._unsubscribe = function () {
26954 var _parentSubscriber = this._parentSubscriber;
26955 this._context = null;
26956 this._parentSubscriber = null;
26957 _parentSubscriber.unsubscribe();
26958 };
26959 return SafeSubscriber;
26960}(Subscriber));
26961
26962//# sourceMappingURL=Subscriber.js.map
26963
26964
26965/***/ }),
26966/* 170 */
26967/***/ (function(module, __webpack_exports__, __webpack_require__) {
26968
26969"use strict";
26970__webpack_require__.r(__webpack_exports__);
26971/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
26972/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
26973/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
26974/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
26975/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
26976/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
26977/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
26978/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
26979/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
26980/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
26981/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
26982/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
26983/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
26984/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
26985/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
26986/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
26987/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
26988/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
26989/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
26990/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
26991/*! *****************************************************************************
26992Copyright (c) Microsoft Corporation. All rights reserved.
26993Licensed under the Apache License, Version 2.0 (the "License"); you may not use
26994this file except in compliance with the License. You may obtain a copy of the
26995License at http://www.apache.org/licenses/LICENSE-2.0
26996
26997THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
26998KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
26999WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
27000MERCHANTABLITY OR NON-INFRINGEMENT.
27001
27002See the Apache Version 2.0 License for specific language governing permissions
27003and limitations under the License.
27004***************************************************************************** */
27005/* global Reflect, Promise */
27006
27007var extendStatics = function(d, b) {
27008 extendStatics = Object.setPrototypeOf ||
27009 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27010 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27011 return extendStatics(d, b);
27012};
27013
27014function __extends(d, b) {
27015 extendStatics(d, b);
27016 function __() { this.constructor = d; }
27017 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27018}
27019
27020var __assign = function() {
27021 __assign = Object.assign || function __assign(t) {
27022 for (var s, i = 1, n = arguments.length; i < n; i++) {
27023 s = arguments[i];
27024 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
27025 }
27026 return t;
27027 }
27028 return __assign.apply(this, arguments);
27029}
27030
27031function __rest(s, e) {
27032 var t = {};
27033 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
27034 t[p] = s[p];
27035 if (s != null && typeof Object.getOwnPropertySymbols === "function")
27036 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
27037 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
27038 t[p[i]] = s[p[i]];
27039 }
27040 return t;
27041}
27042
27043function __decorate(decorators, target, key, desc) {
27044 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27045 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27046 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;
27047 return c > 3 && r && Object.defineProperty(target, key, r), r;
27048}
27049
27050function __param(paramIndex, decorator) {
27051 return function (target, key) { decorator(target, key, paramIndex); }
27052}
27053
27054function __metadata(metadataKey, metadataValue) {
27055 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
27056}
27057
27058function __awaiter(thisArg, _arguments, P, generator) {
27059 return new (P || (P = Promise))(function (resolve, reject) {
27060 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
27061 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
27062 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
27063 step((generator = generator.apply(thisArg, _arguments || [])).next());
27064 });
27065}
27066
27067function __generator(thisArg, body) {
27068 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
27069 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
27070 function verb(n) { return function (v) { return step([n, v]); }; }
27071 function step(op) {
27072 if (f) throw new TypeError("Generator is already executing.");
27073 while (_) try {
27074 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;
27075 if (y = 0, t) op = [op[0] & 2, t.value];
27076 switch (op[0]) {
27077 case 0: case 1: t = op; break;
27078 case 4: _.label++; return { value: op[1], done: false };
27079 case 5: _.label++; y = op[1]; op = [0]; continue;
27080 case 7: op = _.ops.pop(); _.trys.pop(); continue;
27081 default:
27082 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27083 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
27084 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
27085 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
27086 if (t[2]) _.ops.pop();
27087 _.trys.pop(); continue;
27088 }
27089 op = body.call(thisArg, _);
27090 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
27091 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
27092 }
27093}
27094
27095function __exportStar(m, exports) {
27096 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
27097}
27098
27099function __values(o) {
27100 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
27101 if (m) return m.call(o);
27102 return {
27103 next: function () {
27104 if (o && i >= o.length) o = void 0;
27105 return { value: o && o[i++], done: !o };
27106 }
27107 };
27108}
27109
27110function __read(o, n) {
27111 var m = typeof Symbol === "function" && o[Symbol.iterator];
27112 if (!m) return o;
27113 var i = m.call(o), r, ar = [], e;
27114 try {
27115 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
27116 }
27117 catch (error) { e = { error: error }; }
27118 finally {
27119 try {
27120 if (r && !r.done && (m = i["return"])) m.call(i);
27121 }
27122 finally { if (e) throw e.error; }
27123 }
27124 return ar;
27125}
27126
27127function __spread() {
27128 for (var ar = [], i = 0; i < arguments.length; i++)
27129 ar = ar.concat(__read(arguments[i]));
27130 return ar;
27131}
27132
27133function __spreadArrays() {
27134 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
27135 for (var r = Array(s), k = 0, i = 0; i < il; i++)
27136 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
27137 r[k] = a[j];
27138 return r;
27139};
27140
27141function __await(v) {
27142 return this instanceof __await ? (this.v = v, this) : new __await(v);
27143}
27144
27145function __asyncGenerator(thisArg, _arguments, generator) {
27146 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27147 var g = generator.apply(thisArg, _arguments || []), i, q = [];
27148 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
27149 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); }); }; }
27150 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
27151 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
27152 function fulfill(value) { resume("next", value); }
27153 function reject(value) { resume("throw", value); }
27154 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
27155}
27156
27157function __asyncDelegator(o) {
27158 var i, p;
27159 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
27160 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; }
27161}
27162
27163function __asyncValues(o) {
27164 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
27165 var m = o[Symbol.asyncIterator], i;
27166 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);
27167 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); }); }; }
27168 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
27169}
27170
27171function __makeTemplateObject(cooked, raw) {
27172 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
27173 return cooked;
27174};
27175
27176function __importStar(mod) {
27177 if (mod && mod.__esModule) return mod;
27178 var result = {};
27179 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
27180 result.default = mod;
27181 return result;
27182}
27183
27184function __importDefault(mod) {
27185 return (mod && mod.__esModule) ? mod : { default: mod };
27186}
27187
27188
27189/***/ }),
27190/* 171 */
27191/***/ (function(module, __webpack_exports__, __webpack_require__) {
27192
27193"use strict";
27194__webpack_require__.r(__webpack_exports__);
27195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isFunction", function() { return isFunction; });
27196/** PURE_IMPORTS_START PURE_IMPORTS_END */
27197function isFunction(x) {
27198 return typeof x === 'function';
27199}
27200//# sourceMappingURL=isFunction.js.map
27201
27202
27203/***/ }),
27204/* 172 */
27205/***/ (function(module, __webpack_exports__, __webpack_require__) {
27206
27207"use strict";
27208__webpack_require__.r(__webpack_exports__);
27209/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
27210/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(173);
27211/* harmony import */ var _util_hostReportError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(174);
27212/** PURE_IMPORTS_START _config,_util_hostReportError PURE_IMPORTS_END */
27213
27214
27215var empty = {
27216 closed: true,
27217 next: function (value) { },
27218 error: function (err) {
27219 if (_config__WEBPACK_IMPORTED_MODULE_0__["config"].useDeprecatedSynchronousErrorHandling) {
27220 throw err;
27221 }
27222 else {
27223 Object(_util_hostReportError__WEBPACK_IMPORTED_MODULE_1__["hostReportError"])(err);
27224 }
27225 },
27226 complete: function () { }
27227};
27228//# sourceMappingURL=Observer.js.map
27229
27230
27231/***/ }),
27232/* 173 */
27233/***/ (function(module, __webpack_exports__, __webpack_require__) {
27234
27235"use strict";
27236__webpack_require__.r(__webpack_exports__);
27237/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "config", function() { return config; });
27238/** PURE_IMPORTS_START PURE_IMPORTS_END */
27239var _enable_super_gross_mode_that_will_cause_bad_things = false;
27240var config = {
27241 Promise: undefined,
27242 set useDeprecatedSynchronousErrorHandling(value) {
27243 if (value) {
27244 var error = /*@__PURE__*/ new Error();
27245 /*@__PURE__*/ console.warn('DEPRECATED! RxJS was set to use deprecated synchronous error handling behavior by code at: \n' + error.stack);
27246 }
27247 else if (_enable_super_gross_mode_that_will_cause_bad_things) {
27248 /*@__PURE__*/ console.log('RxJS: Back to a better error behavior. Thank you. <3');
27249 }
27250 _enable_super_gross_mode_that_will_cause_bad_things = value;
27251 },
27252 get useDeprecatedSynchronousErrorHandling() {
27253 return _enable_super_gross_mode_that_will_cause_bad_things;
27254 },
27255};
27256//# sourceMappingURL=config.js.map
27257
27258
27259/***/ }),
27260/* 174 */
27261/***/ (function(module, __webpack_exports__, __webpack_require__) {
27262
27263"use strict";
27264__webpack_require__.r(__webpack_exports__);
27265/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hostReportError", function() { return hostReportError; });
27266/** PURE_IMPORTS_START PURE_IMPORTS_END */
27267function hostReportError(err) {
27268 setTimeout(function () { throw err; }, 0);
27269}
27270//# sourceMappingURL=hostReportError.js.map
27271
27272
27273/***/ }),
27274/* 175 */
27275/***/ (function(module, __webpack_exports__, __webpack_require__) {
27276
27277"use strict";
27278__webpack_require__.r(__webpack_exports__);
27279/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subscription", function() { return Subscription; });
27280/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
27281/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(177);
27282/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
27283/* harmony import */ var _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(178);
27284/** PURE_IMPORTS_START _util_isArray,_util_isObject,_util_isFunction,_util_UnsubscriptionError PURE_IMPORTS_END */
27285
27286
27287
27288
27289var Subscription = /*@__PURE__*/ (function () {
27290 function Subscription(unsubscribe) {
27291 this.closed = false;
27292 this._parentOrParents = null;
27293 this._subscriptions = null;
27294 if (unsubscribe) {
27295 this._unsubscribe = unsubscribe;
27296 }
27297 }
27298 Subscription.prototype.unsubscribe = function () {
27299 var errors;
27300 if (this.closed) {
27301 return;
27302 }
27303 var _a = this, _parentOrParents = _a._parentOrParents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
27304 this.closed = true;
27305 this._parentOrParents = null;
27306 this._subscriptions = null;
27307 if (_parentOrParents instanceof Subscription) {
27308 _parentOrParents.remove(this);
27309 }
27310 else if (_parentOrParents !== null) {
27311 for (var index = 0; index < _parentOrParents.length; ++index) {
27312 var parent_1 = _parentOrParents[index];
27313 parent_1.remove(this);
27314 }
27315 }
27316 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(_unsubscribe)) {
27317 try {
27318 _unsubscribe.call(this);
27319 }
27320 catch (e) {
27321 errors = e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"] ? flattenUnsubscriptionErrors(e.errors) : [e];
27322 }
27323 }
27324 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(_subscriptions)) {
27325 var index = -1;
27326 var len = _subscriptions.length;
27327 while (++index < len) {
27328 var sub = _subscriptions[index];
27329 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_1__["isObject"])(sub)) {
27330 try {
27331 sub.unsubscribe();
27332 }
27333 catch (e) {
27334 errors = errors || [];
27335 if (e instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) {
27336 errors = errors.concat(flattenUnsubscriptionErrors(e.errors));
27337 }
27338 else {
27339 errors.push(e);
27340 }
27341 }
27342 }
27343 }
27344 }
27345 if (errors) {
27346 throw new _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"](errors);
27347 }
27348 };
27349 Subscription.prototype.add = function (teardown) {
27350 var subscription = teardown;
27351 if (!teardown) {
27352 return Subscription.EMPTY;
27353 }
27354 switch (typeof teardown) {
27355 case 'function':
27356 subscription = new Subscription(teardown);
27357 case 'object':
27358 if (subscription === this || subscription.closed || typeof subscription.unsubscribe !== 'function') {
27359 return subscription;
27360 }
27361 else if (this.closed) {
27362 subscription.unsubscribe();
27363 return subscription;
27364 }
27365 else if (!(subscription instanceof Subscription)) {
27366 var tmp = subscription;
27367 subscription = new Subscription();
27368 subscription._subscriptions = [tmp];
27369 }
27370 break;
27371 default: {
27372 throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
27373 }
27374 }
27375 var _parentOrParents = subscription._parentOrParents;
27376 if (_parentOrParents === null) {
27377 subscription._parentOrParents = this;
27378 }
27379 else if (_parentOrParents instanceof Subscription) {
27380 if (_parentOrParents === this) {
27381 return subscription;
27382 }
27383 subscription._parentOrParents = [_parentOrParents, this];
27384 }
27385 else if (_parentOrParents.indexOf(this) === -1) {
27386 _parentOrParents.push(this);
27387 }
27388 else {
27389 return subscription;
27390 }
27391 var subscriptions = this._subscriptions;
27392 if (subscriptions === null) {
27393 this._subscriptions = [subscription];
27394 }
27395 else {
27396 subscriptions.push(subscription);
27397 }
27398 return subscription;
27399 };
27400 Subscription.prototype.remove = function (subscription) {
27401 var subscriptions = this._subscriptions;
27402 if (subscriptions) {
27403 var subscriptionIndex = subscriptions.indexOf(subscription);
27404 if (subscriptionIndex !== -1) {
27405 subscriptions.splice(subscriptionIndex, 1);
27406 }
27407 }
27408 };
27409 Subscription.EMPTY = (function (empty) {
27410 empty.closed = true;
27411 return empty;
27412 }(new Subscription()));
27413 return Subscription;
27414}());
27415
27416function flattenUnsubscriptionErrors(errors) {
27417 return errors.reduce(function (errs, err) { return errs.concat((err instanceof _util_UnsubscriptionError__WEBPACK_IMPORTED_MODULE_3__["UnsubscriptionError"]) ? err.errors : err); }, []);
27418}
27419//# sourceMappingURL=Subscription.js.map
27420
27421
27422/***/ }),
27423/* 176 */
27424/***/ (function(module, __webpack_exports__, __webpack_require__) {
27425
27426"use strict";
27427__webpack_require__.r(__webpack_exports__);
27428/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArray", function() { return isArray; });
27429/** PURE_IMPORTS_START PURE_IMPORTS_END */
27430var isArray = /*@__PURE__*/ (function () { return Array.isArray || (function (x) { return x && typeof x.length === 'number'; }); })();
27431//# sourceMappingURL=isArray.js.map
27432
27433
27434/***/ }),
27435/* 177 */
27436/***/ (function(module, __webpack_exports__, __webpack_require__) {
27437
27438"use strict";
27439__webpack_require__.r(__webpack_exports__);
27440/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObject", function() { return isObject; });
27441/** PURE_IMPORTS_START PURE_IMPORTS_END */
27442function isObject(x) {
27443 return x !== null && typeof x === 'object';
27444}
27445//# sourceMappingURL=isObject.js.map
27446
27447
27448/***/ }),
27449/* 178 */
27450/***/ (function(module, __webpack_exports__, __webpack_require__) {
27451
27452"use strict";
27453__webpack_require__.r(__webpack_exports__);
27454/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UnsubscriptionError", function() { return UnsubscriptionError; });
27455/** PURE_IMPORTS_START PURE_IMPORTS_END */
27456var UnsubscriptionErrorImpl = /*@__PURE__*/ (function () {
27457 function UnsubscriptionErrorImpl(errors) {
27458 Error.call(this);
27459 this.message = errors ?
27460 errors.length + " errors occurred during unsubscription:\n" + errors.map(function (err, i) { return i + 1 + ") " + err.toString(); }).join('\n ') : '';
27461 this.name = 'UnsubscriptionError';
27462 this.errors = errors;
27463 return this;
27464 }
27465 UnsubscriptionErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
27466 return UnsubscriptionErrorImpl;
27467})();
27468var UnsubscriptionError = UnsubscriptionErrorImpl;
27469//# sourceMappingURL=UnsubscriptionError.js.map
27470
27471
27472/***/ }),
27473/* 179 */
27474/***/ (function(module, __webpack_exports__, __webpack_require__) {
27475
27476"use strict";
27477__webpack_require__.r(__webpack_exports__);
27478/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rxSubscriber", function() { return rxSubscriber; });
27479/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$rxSubscriber", function() { return $$rxSubscriber; });
27480/** PURE_IMPORTS_START PURE_IMPORTS_END */
27481var rxSubscriber = /*@__PURE__*/ (function () {
27482 return typeof Symbol === 'function'
27483 ? /*@__PURE__*/ Symbol('rxSubscriber')
27484 : '@@rxSubscriber_' + /*@__PURE__*/ Math.random();
27485})();
27486var $$rxSubscriber = rxSubscriber;
27487//# sourceMappingURL=rxSubscriber.js.map
27488
27489
27490/***/ }),
27491/* 180 */
27492/***/ (function(module, __webpack_exports__, __webpack_require__) {
27493
27494"use strict";
27495__webpack_require__.r(__webpack_exports__);
27496/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toSubscriber", function() { return toSubscriber; });
27497/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(169);
27498/* harmony import */ var _symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(179);
27499/* harmony import */ var _Observer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(172);
27500/** PURE_IMPORTS_START _Subscriber,_symbol_rxSubscriber,_Observer PURE_IMPORTS_END */
27501
27502
27503
27504function toSubscriber(nextOrObserver, error, complete) {
27505 if (nextOrObserver) {
27506 if (nextOrObserver instanceof _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"]) {
27507 return nextOrObserver;
27508 }
27509 if (nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]) {
27510 return nextOrObserver[_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_1__["rxSubscriber"]]();
27511 }
27512 }
27513 if (!nextOrObserver && !error && !complete) {
27514 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](_Observer__WEBPACK_IMPORTED_MODULE_2__["empty"]);
27515 }
27516 return new _Subscriber__WEBPACK_IMPORTED_MODULE_0__["Subscriber"](nextOrObserver, error, complete);
27517}
27518//# sourceMappingURL=toSubscriber.js.map
27519
27520
27521/***/ }),
27522/* 181 */
27523/***/ (function(module, __webpack_exports__, __webpack_require__) {
27524
27525"use strict";
27526__webpack_require__.r(__webpack_exports__);
27527/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observable", function() { return observable; });
27528/** PURE_IMPORTS_START PURE_IMPORTS_END */
27529var observable = /*@__PURE__*/ (function () { return typeof Symbol === 'function' && Symbol.observable || '@@observable'; })();
27530//# sourceMappingURL=observable.js.map
27531
27532
27533/***/ }),
27534/* 182 */
27535/***/ (function(module, __webpack_exports__, __webpack_require__) {
27536
27537"use strict";
27538__webpack_require__.r(__webpack_exports__);
27539/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipe", function() { return pipe; });
27540/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pipeFromArray", function() { return pipeFromArray; });
27541/* harmony import */ var _identity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(183);
27542/** PURE_IMPORTS_START _identity PURE_IMPORTS_END */
27543
27544function pipe() {
27545 var fns = [];
27546 for (var _i = 0; _i < arguments.length; _i++) {
27547 fns[_i] = arguments[_i];
27548 }
27549 return pipeFromArray(fns);
27550}
27551function pipeFromArray(fns) {
27552 if (fns.length === 0) {
27553 return _identity__WEBPACK_IMPORTED_MODULE_0__["identity"];
27554 }
27555 if (fns.length === 1) {
27556 return fns[0];
27557 }
27558 return function piped(input) {
27559 return fns.reduce(function (prev, fn) { return fn(prev); }, input);
27560 };
27561}
27562//# sourceMappingURL=pipe.js.map
27563
27564
27565/***/ }),
27566/* 183 */
27567/***/ (function(module, __webpack_exports__, __webpack_require__) {
27568
27569"use strict";
27570__webpack_require__.r(__webpack_exports__);
27571/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; });
27572/** PURE_IMPORTS_START PURE_IMPORTS_END */
27573function identity(x) {
27574 return x;
27575}
27576//# sourceMappingURL=identity.js.map
27577
27578
27579/***/ }),
27580/* 184 */
27581/***/ (function(module, __webpack_exports__, __webpack_require__) {
27582
27583"use strict";
27584__webpack_require__.r(__webpack_exports__);
27585/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ConnectableObservable", function() { return ConnectableObservable; });
27586/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "connectableObservableDescriptor", function() { return connectableObservableDescriptor; });
27587/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27588/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
27589/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
27590/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
27591/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(175);
27592/* harmony import */ var _operators_refCount__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(188);
27593/** PURE_IMPORTS_START tslib,_Subject,_Observable,_Subscriber,_Subscription,_operators_refCount PURE_IMPORTS_END */
27594
27595
27596
27597
27598
27599
27600var ConnectableObservable = /*@__PURE__*/ (function (_super) {
27601 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableObservable, _super);
27602 function ConnectableObservable(source, subjectFactory) {
27603 var _this = _super.call(this) || this;
27604 _this.source = source;
27605 _this.subjectFactory = subjectFactory;
27606 _this._refCount = 0;
27607 _this._isComplete = false;
27608 return _this;
27609 }
27610 ConnectableObservable.prototype._subscribe = function (subscriber) {
27611 return this.getSubject().subscribe(subscriber);
27612 };
27613 ConnectableObservable.prototype.getSubject = function () {
27614 var subject = this._subject;
27615 if (!subject || subject.isStopped) {
27616 this._subject = this.subjectFactory();
27617 }
27618 return this._subject;
27619 };
27620 ConnectableObservable.prototype.connect = function () {
27621 var connection = this._connection;
27622 if (!connection) {
27623 this._isComplete = false;
27624 connection = this._connection = new _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"]();
27625 connection.add(this.source
27626 .subscribe(new ConnectableSubscriber(this.getSubject(), this)));
27627 if (connection.closed) {
27628 this._connection = null;
27629 connection = _Subscription__WEBPACK_IMPORTED_MODULE_4__["Subscription"].EMPTY;
27630 }
27631 }
27632 return connection;
27633 };
27634 ConnectableObservable.prototype.refCount = function () {
27635 return Object(_operators_refCount__WEBPACK_IMPORTED_MODULE_5__["refCount"])()(this);
27636 };
27637 return ConnectableObservable;
27638}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
27639
27640var connectableObservableDescriptor = /*@__PURE__*/ (function () {
27641 var connectableProto = ConnectableObservable.prototype;
27642 return {
27643 operator: { value: null },
27644 _refCount: { value: 0, writable: true },
27645 _subject: { value: null, writable: true },
27646 _connection: { value: null, writable: true },
27647 _subscribe: { value: connectableProto._subscribe },
27648 _isComplete: { value: connectableProto._isComplete, writable: true },
27649 getSubject: { value: connectableProto.getSubject },
27650 connect: { value: connectableProto.connect },
27651 refCount: { value: connectableProto.refCount }
27652 };
27653})();
27654var ConnectableSubscriber = /*@__PURE__*/ (function (_super) {
27655 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ConnectableSubscriber, _super);
27656 function ConnectableSubscriber(destination, connectable) {
27657 var _this = _super.call(this, destination) || this;
27658 _this.connectable = connectable;
27659 return _this;
27660 }
27661 ConnectableSubscriber.prototype._error = function (err) {
27662 this._unsubscribe();
27663 _super.prototype._error.call(this, err);
27664 };
27665 ConnectableSubscriber.prototype._complete = function () {
27666 this.connectable._isComplete = true;
27667 this._unsubscribe();
27668 _super.prototype._complete.call(this);
27669 };
27670 ConnectableSubscriber.prototype._unsubscribe = function () {
27671 var connectable = this.connectable;
27672 if (connectable) {
27673 this.connectable = null;
27674 var connection = connectable._connection;
27675 connectable._refCount = 0;
27676 connectable._subject = null;
27677 connectable._connection = null;
27678 if (connection) {
27679 connection.unsubscribe();
27680 }
27681 }
27682 };
27683 return ConnectableSubscriber;
27684}(_Subject__WEBPACK_IMPORTED_MODULE_1__["SubjectSubscriber"]));
27685var RefCountOperator = /*@__PURE__*/ (function () {
27686 function RefCountOperator(connectable) {
27687 this.connectable = connectable;
27688 }
27689 RefCountOperator.prototype.call = function (subscriber, source) {
27690 var connectable = this.connectable;
27691 connectable._refCount++;
27692 var refCounter = new RefCountSubscriber(subscriber, connectable);
27693 var subscription = source.subscribe(refCounter);
27694 if (!refCounter.closed) {
27695 refCounter.connection = connectable.connect();
27696 }
27697 return subscription;
27698 };
27699 return RefCountOperator;
27700}());
27701var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
27702 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
27703 function RefCountSubscriber(destination, connectable) {
27704 var _this = _super.call(this, destination) || this;
27705 _this.connectable = connectable;
27706 return _this;
27707 }
27708 RefCountSubscriber.prototype._unsubscribe = function () {
27709 var connectable = this.connectable;
27710 if (!connectable) {
27711 this.connection = null;
27712 return;
27713 }
27714 this.connectable = null;
27715 var refCount = connectable._refCount;
27716 if (refCount <= 0) {
27717 this.connection = null;
27718 return;
27719 }
27720 connectable._refCount = refCount - 1;
27721 if (refCount > 1) {
27722 this.connection = null;
27723 return;
27724 }
27725 var connection = this.connection;
27726 var sharedConnection = connectable._connection;
27727 this.connection = null;
27728 if (sharedConnection && (!connection || sharedConnection === connection)) {
27729 sharedConnection.unsubscribe();
27730 }
27731 };
27732 return RefCountSubscriber;
27733}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
27734//# sourceMappingURL=ConnectableObservable.js.map
27735
27736
27737/***/ }),
27738/* 185 */
27739/***/ (function(module, __webpack_exports__, __webpack_require__) {
27740
27741"use strict";
27742__webpack_require__.r(__webpack_exports__);
27743/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscriber", function() { return SubjectSubscriber; });
27744/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Subject", function() { return Subject; });
27745/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnonymousSubject", function() { return AnonymousSubject; });
27746/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27747/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
27748/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
27749/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
27750/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(186);
27751/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(187);
27752/* harmony import */ var _internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(179);
27753/** PURE_IMPORTS_START tslib,_Observable,_Subscriber,_Subscription,_util_ObjectUnsubscribedError,_SubjectSubscription,_internal_symbol_rxSubscriber PURE_IMPORTS_END */
27754
27755
27756
27757
27758
27759
27760
27761var SubjectSubscriber = /*@__PURE__*/ (function (_super) {
27762 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscriber, _super);
27763 function SubjectSubscriber(destination) {
27764 var _this = _super.call(this, destination) || this;
27765 _this.destination = destination;
27766 return _this;
27767 }
27768 return SubjectSubscriber;
27769}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
27770
27771var Subject = /*@__PURE__*/ (function (_super) {
27772 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Subject, _super);
27773 function Subject() {
27774 var _this = _super.call(this) || this;
27775 _this.observers = [];
27776 _this.closed = false;
27777 _this.isStopped = false;
27778 _this.hasError = false;
27779 _this.thrownError = null;
27780 return _this;
27781 }
27782 Subject.prototype[_internal_symbol_rxSubscriber__WEBPACK_IMPORTED_MODULE_6__["rxSubscriber"]] = function () {
27783 return new SubjectSubscriber(this);
27784 };
27785 Subject.prototype.lift = function (operator) {
27786 var subject = new AnonymousSubject(this, this);
27787 subject.operator = operator;
27788 return subject;
27789 };
27790 Subject.prototype.next = function (value) {
27791 if (this.closed) {
27792 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27793 }
27794 if (!this.isStopped) {
27795 var observers = this.observers;
27796 var len = observers.length;
27797 var copy = observers.slice();
27798 for (var i = 0; i < len; i++) {
27799 copy[i].next(value);
27800 }
27801 }
27802 };
27803 Subject.prototype.error = function (err) {
27804 if (this.closed) {
27805 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27806 }
27807 this.hasError = true;
27808 this.thrownError = err;
27809 this.isStopped = true;
27810 var observers = this.observers;
27811 var len = observers.length;
27812 var copy = observers.slice();
27813 for (var i = 0; i < len; i++) {
27814 copy[i].error(err);
27815 }
27816 this.observers.length = 0;
27817 };
27818 Subject.prototype.complete = function () {
27819 if (this.closed) {
27820 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27821 }
27822 this.isStopped = true;
27823 var observers = this.observers;
27824 var len = observers.length;
27825 var copy = observers.slice();
27826 for (var i = 0; i < len; i++) {
27827 copy[i].complete();
27828 }
27829 this.observers.length = 0;
27830 };
27831 Subject.prototype.unsubscribe = function () {
27832 this.isStopped = true;
27833 this.closed = true;
27834 this.observers = null;
27835 };
27836 Subject.prototype._trySubscribe = function (subscriber) {
27837 if (this.closed) {
27838 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27839 }
27840 else {
27841 return _super.prototype._trySubscribe.call(this, subscriber);
27842 }
27843 };
27844 Subject.prototype._subscribe = function (subscriber) {
27845 if (this.closed) {
27846 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_4__["ObjectUnsubscribedError"]();
27847 }
27848 else if (this.hasError) {
27849 subscriber.error(this.thrownError);
27850 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27851 }
27852 else if (this.isStopped) {
27853 subscriber.complete();
27854 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27855 }
27856 else {
27857 this.observers.push(subscriber);
27858 return new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_5__["SubjectSubscription"](this, subscriber);
27859 }
27860 };
27861 Subject.prototype.asObservable = function () {
27862 var observable = new _Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]();
27863 observable.source = this;
27864 return observable;
27865 };
27866 Subject.create = function (destination, source) {
27867 return new AnonymousSubject(destination, source);
27868 };
27869 return Subject;
27870}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
27871
27872var AnonymousSubject = /*@__PURE__*/ (function (_super) {
27873 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnonymousSubject, _super);
27874 function AnonymousSubject(destination, source) {
27875 var _this = _super.call(this) || this;
27876 _this.destination = destination;
27877 _this.source = source;
27878 return _this;
27879 }
27880 AnonymousSubject.prototype.next = function (value) {
27881 var destination = this.destination;
27882 if (destination && destination.next) {
27883 destination.next(value);
27884 }
27885 };
27886 AnonymousSubject.prototype.error = function (err) {
27887 var destination = this.destination;
27888 if (destination && destination.error) {
27889 this.destination.error(err);
27890 }
27891 };
27892 AnonymousSubject.prototype.complete = function () {
27893 var destination = this.destination;
27894 if (destination && destination.complete) {
27895 this.destination.complete();
27896 }
27897 };
27898 AnonymousSubject.prototype._subscribe = function (subscriber) {
27899 var source = this.source;
27900 if (source) {
27901 return this.source.subscribe(subscriber);
27902 }
27903 else {
27904 return _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
27905 }
27906 };
27907 return AnonymousSubject;
27908}(Subject));
27909
27910//# sourceMappingURL=Subject.js.map
27911
27912
27913/***/ }),
27914/* 186 */
27915/***/ (function(module, __webpack_exports__, __webpack_require__) {
27916
27917"use strict";
27918__webpack_require__.r(__webpack_exports__);
27919/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObjectUnsubscribedError", function() { return ObjectUnsubscribedError; });
27920/** PURE_IMPORTS_START PURE_IMPORTS_END */
27921var ObjectUnsubscribedErrorImpl = /*@__PURE__*/ (function () {
27922 function ObjectUnsubscribedErrorImpl() {
27923 Error.call(this);
27924 this.message = 'object unsubscribed';
27925 this.name = 'ObjectUnsubscribedError';
27926 return this;
27927 }
27928 ObjectUnsubscribedErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
27929 return ObjectUnsubscribedErrorImpl;
27930})();
27931var ObjectUnsubscribedError = ObjectUnsubscribedErrorImpl;
27932//# sourceMappingURL=ObjectUnsubscribedError.js.map
27933
27934
27935/***/ }),
27936/* 187 */
27937/***/ (function(module, __webpack_exports__, __webpack_require__) {
27938
27939"use strict";
27940__webpack_require__.r(__webpack_exports__);
27941/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubjectSubscription", function() { return SubjectSubscription; });
27942/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27943/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
27944/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
27945
27946
27947var SubjectSubscription = /*@__PURE__*/ (function (_super) {
27948 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubjectSubscription, _super);
27949 function SubjectSubscription(subject, subscriber) {
27950 var _this = _super.call(this) || this;
27951 _this.subject = subject;
27952 _this.subscriber = subscriber;
27953 _this.closed = false;
27954 return _this;
27955 }
27956 SubjectSubscription.prototype.unsubscribe = function () {
27957 if (this.closed) {
27958 return;
27959 }
27960 this.closed = true;
27961 var subject = this.subject;
27962 var observers = subject.observers;
27963 this.subject = null;
27964 if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
27965 return;
27966 }
27967 var subscriberIndex = observers.indexOf(this.subscriber);
27968 if (subscriberIndex !== -1) {
27969 observers.splice(subscriberIndex, 1);
27970 }
27971 };
27972 return SubjectSubscription;
27973}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
27974
27975//# sourceMappingURL=SubjectSubscription.js.map
27976
27977
27978/***/ }),
27979/* 188 */
27980/***/ (function(module, __webpack_exports__, __webpack_require__) {
27981
27982"use strict";
27983__webpack_require__.r(__webpack_exports__);
27984/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return refCount; });
27985/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
27986/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
27987/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
27988
27989
27990function refCount() {
27991 return function refCountOperatorFunction(source) {
27992 return source.lift(new RefCountOperator(source));
27993 };
27994}
27995var RefCountOperator = /*@__PURE__*/ (function () {
27996 function RefCountOperator(connectable) {
27997 this.connectable = connectable;
27998 }
27999 RefCountOperator.prototype.call = function (subscriber, source) {
28000 var connectable = this.connectable;
28001 connectable._refCount++;
28002 var refCounter = new RefCountSubscriber(subscriber, connectable);
28003 var subscription = source.subscribe(refCounter);
28004 if (!refCounter.closed) {
28005 refCounter.connection = connectable.connect();
28006 }
28007 return subscription;
28008 };
28009 return RefCountOperator;
28010}());
28011var RefCountSubscriber = /*@__PURE__*/ (function (_super) {
28012 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RefCountSubscriber, _super);
28013 function RefCountSubscriber(destination, connectable) {
28014 var _this = _super.call(this, destination) || this;
28015 _this.connectable = connectable;
28016 return _this;
28017 }
28018 RefCountSubscriber.prototype._unsubscribe = function () {
28019 var connectable = this.connectable;
28020 if (!connectable) {
28021 this.connection = null;
28022 return;
28023 }
28024 this.connectable = null;
28025 var refCount = connectable._refCount;
28026 if (refCount <= 0) {
28027 this.connection = null;
28028 return;
28029 }
28030 connectable._refCount = refCount - 1;
28031 if (refCount > 1) {
28032 this.connection = null;
28033 return;
28034 }
28035 var connection = this.connection;
28036 var sharedConnection = connectable._connection;
28037 this.connection = null;
28038 if (sharedConnection && (!connection || sharedConnection === connection)) {
28039 sharedConnection.unsubscribe();
28040 }
28041 };
28042 return RefCountSubscriber;
28043}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28044//# sourceMappingURL=refCount.js.map
28045
28046
28047/***/ }),
28048/* 189 */
28049/***/ (function(module, __webpack_exports__, __webpack_require__) {
28050
28051"use strict";
28052__webpack_require__.r(__webpack_exports__);
28053/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return groupBy; });
28054/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GroupedObservable", function() { return GroupedObservable; });
28055/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28056/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
28057/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
28058/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(167);
28059/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(185);
28060/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription,_Observable,_Subject PURE_IMPORTS_END */
28061
28062
28063
28064
28065
28066function groupBy(keySelector, elementSelector, durationSelector, subjectSelector) {
28067 return function (source) {
28068 return source.lift(new GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector));
28069 };
28070}
28071var GroupByOperator = /*@__PURE__*/ (function () {
28072 function GroupByOperator(keySelector, elementSelector, durationSelector, subjectSelector) {
28073 this.keySelector = keySelector;
28074 this.elementSelector = elementSelector;
28075 this.durationSelector = durationSelector;
28076 this.subjectSelector = subjectSelector;
28077 }
28078 GroupByOperator.prototype.call = function (subscriber, source) {
28079 return source.subscribe(new GroupBySubscriber(subscriber, this.keySelector, this.elementSelector, this.durationSelector, this.subjectSelector));
28080 };
28081 return GroupByOperator;
28082}());
28083var GroupBySubscriber = /*@__PURE__*/ (function (_super) {
28084 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupBySubscriber, _super);
28085 function GroupBySubscriber(destination, keySelector, elementSelector, durationSelector, subjectSelector) {
28086 var _this = _super.call(this, destination) || this;
28087 _this.keySelector = keySelector;
28088 _this.elementSelector = elementSelector;
28089 _this.durationSelector = durationSelector;
28090 _this.subjectSelector = subjectSelector;
28091 _this.groups = null;
28092 _this.attemptedToUnsubscribe = false;
28093 _this.count = 0;
28094 return _this;
28095 }
28096 GroupBySubscriber.prototype._next = function (value) {
28097 var key;
28098 try {
28099 key = this.keySelector(value);
28100 }
28101 catch (err) {
28102 this.error(err);
28103 return;
28104 }
28105 this._group(value, key);
28106 };
28107 GroupBySubscriber.prototype._group = function (value, key) {
28108 var groups = this.groups;
28109 if (!groups) {
28110 groups = this.groups = new Map();
28111 }
28112 var group = groups.get(key);
28113 var element;
28114 if (this.elementSelector) {
28115 try {
28116 element = this.elementSelector(value);
28117 }
28118 catch (err) {
28119 this.error(err);
28120 }
28121 }
28122 else {
28123 element = value;
28124 }
28125 if (!group) {
28126 group = (this.subjectSelector ? this.subjectSelector() : new _Subject__WEBPACK_IMPORTED_MODULE_4__["Subject"]());
28127 groups.set(key, group);
28128 var groupedObservable = new GroupedObservable(key, group, this);
28129 this.destination.next(groupedObservable);
28130 if (this.durationSelector) {
28131 var duration = void 0;
28132 try {
28133 duration = this.durationSelector(new GroupedObservable(key, group));
28134 }
28135 catch (err) {
28136 this.error(err);
28137 return;
28138 }
28139 this.add(duration.subscribe(new GroupDurationSubscriber(key, group, this)));
28140 }
28141 }
28142 if (!group.closed) {
28143 group.next(element);
28144 }
28145 };
28146 GroupBySubscriber.prototype._error = function (err) {
28147 var groups = this.groups;
28148 if (groups) {
28149 groups.forEach(function (group, key) {
28150 group.error(err);
28151 });
28152 groups.clear();
28153 }
28154 this.destination.error(err);
28155 };
28156 GroupBySubscriber.prototype._complete = function () {
28157 var groups = this.groups;
28158 if (groups) {
28159 groups.forEach(function (group, key) {
28160 group.complete();
28161 });
28162 groups.clear();
28163 }
28164 this.destination.complete();
28165 };
28166 GroupBySubscriber.prototype.removeGroup = function (key) {
28167 this.groups.delete(key);
28168 };
28169 GroupBySubscriber.prototype.unsubscribe = function () {
28170 if (!this.closed) {
28171 this.attemptedToUnsubscribe = true;
28172 if (this.count === 0) {
28173 _super.prototype.unsubscribe.call(this);
28174 }
28175 }
28176 };
28177 return GroupBySubscriber;
28178}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28179var GroupDurationSubscriber = /*@__PURE__*/ (function (_super) {
28180 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupDurationSubscriber, _super);
28181 function GroupDurationSubscriber(key, group, parent) {
28182 var _this = _super.call(this, group) || this;
28183 _this.key = key;
28184 _this.group = group;
28185 _this.parent = parent;
28186 return _this;
28187 }
28188 GroupDurationSubscriber.prototype._next = function (value) {
28189 this.complete();
28190 };
28191 GroupDurationSubscriber.prototype._unsubscribe = function () {
28192 var _a = this, parent = _a.parent, key = _a.key;
28193 this.key = this.parent = null;
28194 if (parent) {
28195 parent.removeGroup(key);
28196 }
28197 };
28198 return GroupDurationSubscriber;
28199}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28200var GroupedObservable = /*@__PURE__*/ (function (_super) {
28201 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](GroupedObservable, _super);
28202 function GroupedObservable(key, groupSubject, refCountSubscription) {
28203 var _this = _super.call(this) || this;
28204 _this.key = key;
28205 _this.groupSubject = groupSubject;
28206 _this.refCountSubscription = refCountSubscription;
28207 return _this;
28208 }
28209 GroupedObservable.prototype._subscribe = function (subscriber) {
28210 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
28211 var _a = this, refCountSubscription = _a.refCountSubscription, groupSubject = _a.groupSubject;
28212 if (refCountSubscription && !refCountSubscription.closed) {
28213 subscription.add(new InnerRefCountSubscription(refCountSubscription));
28214 }
28215 subscription.add(groupSubject.subscribe(subscriber));
28216 return subscription;
28217 };
28218 return GroupedObservable;
28219}(_Observable__WEBPACK_IMPORTED_MODULE_3__["Observable"]));
28220
28221var InnerRefCountSubscription = /*@__PURE__*/ (function (_super) {
28222 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerRefCountSubscription, _super);
28223 function InnerRefCountSubscription(parent) {
28224 var _this = _super.call(this) || this;
28225 _this.parent = parent;
28226 parent.count++;
28227 return _this;
28228 }
28229 InnerRefCountSubscription.prototype.unsubscribe = function () {
28230 var parent = this.parent;
28231 if (!parent.closed && !this.closed) {
28232 _super.prototype.unsubscribe.call(this);
28233 parent.count -= 1;
28234 if (parent.count === 0 && parent.attemptedToUnsubscribe) {
28235 parent.unsubscribe();
28236 }
28237 }
28238 };
28239 return InnerRefCountSubscription;
28240}(_Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]));
28241//# sourceMappingURL=groupBy.js.map
28242
28243
28244/***/ }),
28245/* 190 */
28246/***/ (function(module, __webpack_exports__, __webpack_require__) {
28247
28248"use strict";
28249__webpack_require__.r(__webpack_exports__);
28250/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BehaviorSubject", function() { return BehaviorSubject; });
28251/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28252/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
28253/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(186);
28254/** PURE_IMPORTS_START tslib,_Subject,_util_ObjectUnsubscribedError PURE_IMPORTS_END */
28255
28256
28257
28258var BehaviorSubject = /*@__PURE__*/ (function (_super) {
28259 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BehaviorSubject, _super);
28260 function BehaviorSubject(_value) {
28261 var _this = _super.call(this) || this;
28262 _this._value = _value;
28263 return _this;
28264 }
28265 Object.defineProperty(BehaviorSubject.prototype, "value", {
28266 get: function () {
28267 return this.getValue();
28268 },
28269 enumerable: true,
28270 configurable: true
28271 });
28272 BehaviorSubject.prototype._subscribe = function (subscriber) {
28273 var subscription = _super.prototype._subscribe.call(this, subscriber);
28274 if (subscription && !subscription.closed) {
28275 subscriber.next(this._value);
28276 }
28277 return subscription;
28278 };
28279 BehaviorSubject.prototype.getValue = function () {
28280 if (this.hasError) {
28281 throw this.thrownError;
28282 }
28283 else if (this.closed) {
28284 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_2__["ObjectUnsubscribedError"]();
28285 }
28286 else {
28287 return this._value;
28288 }
28289 };
28290 BehaviorSubject.prototype.next = function (value) {
28291 _super.prototype.next.call(this, this._value = value);
28292 };
28293 return BehaviorSubject;
28294}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
28295
28296//# sourceMappingURL=BehaviorSubject.js.map
28297
28298
28299/***/ }),
28300/* 191 */
28301/***/ (function(module, __webpack_exports__, __webpack_require__) {
28302
28303"use strict";
28304__webpack_require__.r(__webpack_exports__);
28305/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ReplaySubject", function() { return ReplaySubject; });
28306/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28307/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
28308/* harmony import */ var _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(192);
28309/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(175);
28310/* harmony import */ var _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(199);
28311/* harmony import */ var _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(186);
28312/* harmony import */ var _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(187);
28313/** PURE_IMPORTS_START tslib,_Subject,_scheduler_queue,_Subscription,_operators_observeOn,_util_ObjectUnsubscribedError,_SubjectSubscription PURE_IMPORTS_END */
28314
28315
28316
28317
28318
28319
28320
28321var ReplaySubject = /*@__PURE__*/ (function (_super) {
28322 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ReplaySubject, _super);
28323 function ReplaySubject(bufferSize, windowTime, scheduler) {
28324 if (bufferSize === void 0) {
28325 bufferSize = Number.POSITIVE_INFINITY;
28326 }
28327 if (windowTime === void 0) {
28328 windowTime = Number.POSITIVE_INFINITY;
28329 }
28330 var _this = _super.call(this) || this;
28331 _this.scheduler = scheduler;
28332 _this._events = [];
28333 _this._infiniteTimeWindow = false;
28334 _this._bufferSize = bufferSize < 1 ? 1 : bufferSize;
28335 _this._windowTime = windowTime < 1 ? 1 : windowTime;
28336 if (windowTime === Number.POSITIVE_INFINITY) {
28337 _this._infiniteTimeWindow = true;
28338 _this.next = _this.nextInfiniteTimeWindow;
28339 }
28340 else {
28341 _this.next = _this.nextTimeWindow;
28342 }
28343 return _this;
28344 }
28345 ReplaySubject.prototype.nextInfiniteTimeWindow = function (value) {
28346 var _events = this._events;
28347 _events.push(value);
28348 if (_events.length > this._bufferSize) {
28349 _events.shift();
28350 }
28351 _super.prototype.next.call(this, value);
28352 };
28353 ReplaySubject.prototype.nextTimeWindow = function (value) {
28354 this._events.push(new ReplayEvent(this._getNow(), value));
28355 this._trimBufferThenGetEvents();
28356 _super.prototype.next.call(this, value);
28357 };
28358 ReplaySubject.prototype._subscribe = function (subscriber) {
28359 var _infiniteTimeWindow = this._infiniteTimeWindow;
28360 var _events = _infiniteTimeWindow ? this._events : this._trimBufferThenGetEvents();
28361 var scheduler = this.scheduler;
28362 var len = _events.length;
28363 var subscription;
28364 if (this.closed) {
28365 throw new _util_ObjectUnsubscribedError__WEBPACK_IMPORTED_MODULE_5__["ObjectUnsubscribedError"]();
28366 }
28367 else if (this.isStopped || this.hasError) {
28368 subscription = _Subscription__WEBPACK_IMPORTED_MODULE_3__["Subscription"].EMPTY;
28369 }
28370 else {
28371 this.observers.push(subscriber);
28372 subscription = new _SubjectSubscription__WEBPACK_IMPORTED_MODULE_6__["SubjectSubscription"](this, subscriber);
28373 }
28374 if (scheduler) {
28375 subscriber.add(subscriber = new _operators_observeOn__WEBPACK_IMPORTED_MODULE_4__["ObserveOnSubscriber"](subscriber, scheduler));
28376 }
28377 if (_infiniteTimeWindow) {
28378 for (var i = 0; i < len && !subscriber.closed; i++) {
28379 subscriber.next(_events[i]);
28380 }
28381 }
28382 else {
28383 for (var i = 0; i < len && !subscriber.closed; i++) {
28384 subscriber.next(_events[i].value);
28385 }
28386 }
28387 if (this.hasError) {
28388 subscriber.error(this.thrownError);
28389 }
28390 else if (this.isStopped) {
28391 subscriber.complete();
28392 }
28393 return subscription;
28394 };
28395 ReplaySubject.prototype._getNow = function () {
28396 return (this.scheduler || _scheduler_queue__WEBPACK_IMPORTED_MODULE_2__["queue"]).now();
28397 };
28398 ReplaySubject.prototype._trimBufferThenGetEvents = function () {
28399 var now = this._getNow();
28400 var _bufferSize = this._bufferSize;
28401 var _windowTime = this._windowTime;
28402 var _events = this._events;
28403 var eventsCount = _events.length;
28404 var spliceCount = 0;
28405 while (spliceCount < eventsCount) {
28406 if ((now - _events[spliceCount].time) < _windowTime) {
28407 break;
28408 }
28409 spliceCount++;
28410 }
28411 if (eventsCount > _bufferSize) {
28412 spliceCount = Math.max(spliceCount, eventsCount - _bufferSize);
28413 }
28414 if (spliceCount > 0) {
28415 _events.splice(0, spliceCount);
28416 }
28417 return _events;
28418 };
28419 return ReplaySubject;
28420}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
28421
28422var ReplayEvent = /*@__PURE__*/ (function () {
28423 function ReplayEvent(time, value) {
28424 this.time = time;
28425 this.value = value;
28426 }
28427 return ReplayEvent;
28428}());
28429//# sourceMappingURL=ReplaySubject.js.map
28430
28431
28432/***/ }),
28433/* 192 */
28434/***/ (function(module, __webpack_exports__, __webpack_require__) {
28435
28436"use strict";
28437__webpack_require__.r(__webpack_exports__);
28438/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "queue", function() { return queue; });
28439/* harmony import */ var _QueueAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(193);
28440/* harmony import */ var _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(196);
28441/** PURE_IMPORTS_START _QueueAction,_QueueScheduler PURE_IMPORTS_END */
28442
28443
28444var queue = /*@__PURE__*/ new _QueueScheduler__WEBPACK_IMPORTED_MODULE_1__["QueueScheduler"](_QueueAction__WEBPACK_IMPORTED_MODULE_0__["QueueAction"]);
28445//# sourceMappingURL=queue.js.map
28446
28447
28448/***/ }),
28449/* 193 */
28450/***/ (function(module, __webpack_exports__, __webpack_require__) {
28451
28452"use strict";
28453__webpack_require__.r(__webpack_exports__);
28454/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueAction", function() { return QueueAction; });
28455/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28456/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
28457/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
28458
28459
28460var QueueAction = /*@__PURE__*/ (function (_super) {
28461 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueAction, _super);
28462 function QueueAction(scheduler, work) {
28463 var _this = _super.call(this, scheduler, work) || this;
28464 _this.scheduler = scheduler;
28465 _this.work = work;
28466 return _this;
28467 }
28468 QueueAction.prototype.schedule = function (state, delay) {
28469 if (delay === void 0) {
28470 delay = 0;
28471 }
28472 if (delay > 0) {
28473 return _super.prototype.schedule.call(this, state, delay);
28474 }
28475 this.delay = delay;
28476 this.state = state;
28477 this.scheduler.flush(this);
28478 return this;
28479 };
28480 QueueAction.prototype.execute = function (state, delay) {
28481 return (delay > 0 || this.closed) ?
28482 _super.prototype.execute.call(this, state, delay) :
28483 this._execute(state, delay);
28484 };
28485 QueueAction.prototype.requestAsyncId = function (scheduler, id, delay) {
28486 if (delay === void 0) {
28487 delay = 0;
28488 }
28489 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
28490 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
28491 }
28492 return scheduler.flush(this);
28493 };
28494 return QueueAction;
28495}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
28496
28497//# sourceMappingURL=QueueAction.js.map
28498
28499
28500/***/ }),
28501/* 194 */
28502/***/ (function(module, __webpack_exports__, __webpack_require__) {
28503
28504"use strict";
28505__webpack_require__.r(__webpack_exports__);
28506/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncAction", function() { return AsyncAction; });
28507/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28508/* harmony import */ var _Action__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(195);
28509/** PURE_IMPORTS_START tslib,_Action PURE_IMPORTS_END */
28510
28511
28512var AsyncAction = /*@__PURE__*/ (function (_super) {
28513 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncAction, _super);
28514 function AsyncAction(scheduler, work) {
28515 var _this = _super.call(this, scheduler, work) || this;
28516 _this.scheduler = scheduler;
28517 _this.work = work;
28518 _this.pending = false;
28519 return _this;
28520 }
28521 AsyncAction.prototype.schedule = function (state, delay) {
28522 if (delay === void 0) {
28523 delay = 0;
28524 }
28525 if (this.closed) {
28526 return this;
28527 }
28528 this.state = state;
28529 var id = this.id;
28530 var scheduler = this.scheduler;
28531 if (id != null) {
28532 this.id = this.recycleAsyncId(scheduler, id, delay);
28533 }
28534 this.pending = true;
28535 this.delay = delay;
28536 this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);
28537 return this;
28538 };
28539 AsyncAction.prototype.requestAsyncId = function (scheduler, id, delay) {
28540 if (delay === void 0) {
28541 delay = 0;
28542 }
28543 return setInterval(scheduler.flush.bind(scheduler, this), delay);
28544 };
28545 AsyncAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
28546 if (delay === void 0) {
28547 delay = 0;
28548 }
28549 if (delay !== null && this.delay === delay && this.pending === false) {
28550 return id;
28551 }
28552 clearInterval(id);
28553 return undefined;
28554 };
28555 AsyncAction.prototype.execute = function (state, delay) {
28556 if (this.closed) {
28557 return new Error('executing a cancelled action');
28558 }
28559 this.pending = false;
28560 var error = this._execute(state, delay);
28561 if (error) {
28562 return error;
28563 }
28564 else if (this.pending === false && this.id != null) {
28565 this.id = this.recycleAsyncId(this.scheduler, this.id, null);
28566 }
28567 };
28568 AsyncAction.prototype._execute = function (state, delay) {
28569 var errored = false;
28570 var errorValue = undefined;
28571 try {
28572 this.work(state);
28573 }
28574 catch (e) {
28575 errored = true;
28576 errorValue = !!e && e || new Error(e);
28577 }
28578 if (errored) {
28579 this.unsubscribe();
28580 return errorValue;
28581 }
28582 };
28583 AsyncAction.prototype._unsubscribe = function () {
28584 var id = this.id;
28585 var scheduler = this.scheduler;
28586 var actions = scheduler.actions;
28587 var index = actions.indexOf(this);
28588 this.work = null;
28589 this.state = null;
28590 this.pending = false;
28591 this.scheduler = null;
28592 if (index !== -1) {
28593 actions.splice(index, 1);
28594 }
28595 if (id != null) {
28596 this.id = this.recycleAsyncId(scheduler, id, null);
28597 }
28598 this.delay = null;
28599 };
28600 return AsyncAction;
28601}(_Action__WEBPACK_IMPORTED_MODULE_1__["Action"]));
28602
28603//# sourceMappingURL=AsyncAction.js.map
28604
28605
28606/***/ }),
28607/* 195 */
28608/***/ (function(module, __webpack_exports__, __webpack_require__) {
28609
28610"use strict";
28611__webpack_require__.r(__webpack_exports__);
28612/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Action", function() { return Action; });
28613/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28614/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
28615/** PURE_IMPORTS_START tslib,_Subscription PURE_IMPORTS_END */
28616
28617
28618var Action = /*@__PURE__*/ (function (_super) {
28619 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](Action, _super);
28620 function Action(scheduler, work) {
28621 return _super.call(this) || this;
28622 }
28623 Action.prototype.schedule = function (state, delay) {
28624 if (delay === void 0) {
28625 delay = 0;
28626 }
28627 return this;
28628 };
28629 return Action;
28630}(_Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]));
28631
28632//# sourceMappingURL=Action.js.map
28633
28634
28635/***/ }),
28636/* 196 */
28637/***/ (function(module, __webpack_exports__, __webpack_require__) {
28638
28639"use strict";
28640__webpack_require__.r(__webpack_exports__);
28641/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "QueueScheduler", function() { return QueueScheduler; });
28642/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28643/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
28644/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
28645
28646
28647var QueueScheduler = /*@__PURE__*/ (function (_super) {
28648 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](QueueScheduler, _super);
28649 function QueueScheduler() {
28650 return _super !== null && _super.apply(this, arguments) || this;
28651 }
28652 return QueueScheduler;
28653}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
28654
28655//# sourceMappingURL=QueueScheduler.js.map
28656
28657
28658/***/ }),
28659/* 197 */
28660/***/ (function(module, __webpack_exports__, __webpack_require__) {
28661
28662"use strict";
28663__webpack_require__.r(__webpack_exports__);
28664/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncScheduler", function() { return AsyncScheduler; });
28665/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28666/* harmony import */ var _Scheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(198);
28667/** PURE_IMPORTS_START tslib,_Scheduler PURE_IMPORTS_END */
28668
28669
28670var AsyncScheduler = /*@__PURE__*/ (function (_super) {
28671 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncScheduler, _super);
28672 function AsyncScheduler(SchedulerAction, now) {
28673 if (now === void 0) {
28674 now = _Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"].now;
28675 }
28676 var _this = _super.call(this, SchedulerAction, function () {
28677 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== _this) {
28678 return AsyncScheduler.delegate.now();
28679 }
28680 else {
28681 return now();
28682 }
28683 }) || this;
28684 _this.actions = [];
28685 _this.active = false;
28686 _this.scheduled = undefined;
28687 return _this;
28688 }
28689 AsyncScheduler.prototype.schedule = function (work, delay, state) {
28690 if (delay === void 0) {
28691 delay = 0;
28692 }
28693 if (AsyncScheduler.delegate && AsyncScheduler.delegate !== this) {
28694 return AsyncScheduler.delegate.schedule(work, delay, state);
28695 }
28696 else {
28697 return _super.prototype.schedule.call(this, work, delay, state);
28698 }
28699 };
28700 AsyncScheduler.prototype.flush = function (action) {
28701 var actions = this.actions;
28702 if (this.active) {
28703 actions.push(action);
28704 return;
28705 }
28706 var error;
28707 this.active = true;
28708 do {
28709 if (error = action.execute(action.state, action.delay)) {
28710 break;
28711 }
28712 } while (action = actions.shift());
28713 this.active = false;
28714 if (error) {
28715 while (action = actions.shift()) {
28716 action.unsubscribe();
28717 }
28718 throw error;
28719 }
28720 };
28721 return AsyncScheduler;
28722}(_Scheduler__WEBPACK_IMPORTED_MODULE_1__["Scheduler"]));
28723
28724//# sourceMappingURL=AsyncScheduler.js.map
28725
28726
28727/***/ }),
28728/* 198 */
28729/***/ (function(module, __webpack_exports__, __webpack_require__) {
28730
28731"use strict";
28732__webpack_require__.r(__webpack_exports__);
28733/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Scheduler", function() { return Scheduler; });
28734var Scheduler = /*@__PURE__*/ (function () {
28735 function Scheduler(SchedulerAction, now) {
28736 if (now === void 0) {
28737 now = Scheduler.now;
28738 }
28739 this.SchedulerAction = SchedulerAction;
28740 this.now = now;
28741 }
28742 Scheduler.prototype.schedule = function (work, delay, state) {
28743 if (delay === void 0) {
28744 delay = 0;
28745 }
28746 return new this.SchedulerAction(this, work).schedule(state, delay);
28747 };
28748 Scheduler.now = function () { return Date.now(); };
28749 return Scheduler;
28750}());
28751
28752//# sourceMappingURL=Scheduler.js.map
28753
28754
28755/***/ }),
28756/* 199 */
28757/***/ (function(module, __webpack_exports__, __webpack_require__) {
28758
28759"use strict";
28760__webpack_require__.r(__webpack_exports__);
28761/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return observeOn; });
28762/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnOperator", function() { return ObserveOnOperator; });
28763/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnSubscriber", function() { return ObserveOnSubscriber; });
28764/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ObserveOnMessage", function() { return ObserveOnMessage; });
28765/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
28766/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
28767/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(200);
28768/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
28769
28770
28771
28772function observeOn(scheduler, delay) {
28773 if (delay === void 0) {
28774 delay = 0;
28775 }
28776 return function observeOnOperatorFunction(source) {
28777 return source.lift(new ObserveOnOperator(scheduler, delay));
28778 };
28779}
28780var ObserveOnOperator = /*@__PURE__*/ (function () {
28781 function ObserveOnOperator(scheduler, delay) {
28782 if (delay === void 0) {
28783 delay = 0;
28784 }
28785 this.scheduler = scheduler;
28786 this.delay = delay;
28787 }
28788 ObserveOnOperator.prototype.call = function (subscriber, source) {
28789 return source.subscribe(new ObserveOnSubscriber(subscriber, this.scheduler, this.delay));
28790 };
28791 return ObserveOnOperator;
28792}());
28793
28794var ObserveOnSubscriber = /*@__PURE__*/ (function (_super) {
28795 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ObserveOnSubscriber, _super);
28796 function ObserveOnSubscriber(destination, scheduler, delay) {
28797 if (delay === void 0) {
28798 delay = 0;
28799 }
28800 var _this = _super.call(this, destination) || this;
28801 _this.scheduler = scheduler;
28802 _this.delay = delay;
28803 return _this;
28804 }
28805 ObserveOnSubscriber.dispatch = function (arg) {
28806 var notification = arg.notification, destination = arg.destination;
28807 notification.observe(destination);
28808 this.unsubscribe();
28809 };
28810 ObserveOnSubscriber.prototype.scheduleMessage = function (notification) {
28811 var destination = this.destination;
28812 destination.add(this.scheduler.schedule(ObserveOnSubscriber.dispatch, this.delay, new ObserveOnMessage(notification, this.destination)));
28813 };
28814 ObserveOnSubscriber.prototype._next = function (value) {
28815 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
28816 };
28817 ObserveOnSubscriber.prototype._error = function (err) {
28818 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
28819 this.unsubscribe();
28820 };
28821 ObserveOnSubscriber.prototype._complete = function () {
28822 this.scheduleMessage(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
28823 this.unsubscribe();
28824 };
28825 return ObserveOnSubscriber;
28826}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
28827
28828var ObserveOnMessage = /*@__PURE__*/ (function () {
28829 function ObserveOnMessage(notification, destination) {
28830 this.notification = notification;
28831 this.destination = destination;
28832 }
28833 return ObserveOnMessage;
28834}());
28835
28836//# sourceMappingURL=observeOn.js.map
28837
28838
28839/***/ }),
28840/* 200 */
28841/***/ (function(module, __webpack_exports__, __webpack_require__) {
28842
28843"use strict";
28844__webpack_require__.r(__webpack_exports__);
28845/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NotificationKind", function() { return NotificationKind; });
28846/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Notification", function() { return Notification; });
28847/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(201);
28848/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
28849/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(207);
28850/** PURE_IMPORTS_START _observable_empty,_observable_of,_observable_throwError PURE_IMPORTS_END */
28851
28852
28853
28854var NotificationKind;
28855/*@__PURE__*/ (function (NotificationKind) {
28856 NotificationKind["NEXT"] = "N";
28857 NotificationKind["ERROR"] = "E";
28858 NotificationKind["COMPLETE"] = "C";
28859})(NotificationKind || (NotificationKind = {}));
28860var Notification = /*@__PURE__*/ (function () {
28861 function Notification(kind, value, error) {
28862 this.kind = kind;
28863 this.value = value;
28864 this.error = error;
28865 this.hasValue = kind === 'N';
28866 }
28867 Notification.prototype.observe = function (observer) {
28868 switch (this.kind) {
28869 case 'N':
28870 return observer.next && observer.next(this.value);
28871 case 'E':
28872 return observer.error && observer.error(this.error);
28873 case 'C':
28874 return observer.complete && observer.complete();
28875 }
28876 };
28877 Notification.prototype.do = function (next, error, complete) {
28878 var kind = this.kind;
28879 switch (kind) {
28880 case 'N':
28881 return next && next(this.value);
28882 case 'E':
28883 return error && error(this.error);
28884 case 'C':
28885 return complete && complete();
28886 }
28887 };
28888 Notification.prototype.accept = function (nextOrObserver, error, complete) {
28889 if (nextOrObserver && typeof nextOrObserver.next === 'function') {
28890 return this.observe(nextOrObserver);
28891 }
28892 else {
28893 return this.do(nextOrObserver, error, complete);
28894 }
28895 };
28896 Notification.prototype.toObservable = function () {
28897 var kind = this.kind;
28898 switch (kind) {
28899 case 'N':
28900 return Object(_observable_of__WEBPACK_IMPORTED_MODULE_1__["of"])(this.value);
28901 case 'E':
28902 return Object(_observable_throwError__WEBPACK_IMPORTED_MODULE_2__["throwError"])(this.error);
28903 case 'C':
28904 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_0__["empty"])();
28905 }
28906 throw new Error('unexpected notification kind value');
28907 };
28908 Notification.createNext = function (value) {
28909 if (typeof value !== 'undefined') {
28910 return new Notification('N', value);
28911 }
28912 return Notification.undefinedValueNotification;
28913 };
28914 Notification.createError = function (err) {
28915 return new Notification('E', undefined, err);
28916 };
28917 Notification.createComplete = function () {
28918 return Notification.completeNotification;
28919 };
28920 Notification.completeNotification = new Notification('C');
28921 Notification.undefinedValueNotification = new Notification('N', undefined);
28922 return Notification;
28923}());
28924
28925//# sourceMappingURL=Notification.js.map
28926
28927
28928/***/ }),
28929/* 201 */
28930/***/ (function(module, __webpack_exports__, __webpack_require__) {
28931
28932"use strict";
28933__webpack_require__.r(__webpack_exports__);
28934/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EMPTY", function() { return EMPTY; });
28935/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; });
28936/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
28937/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
28938
28939var EMPTY = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.complete(); });
28940function empty(scheduler) {
28941 return scheduler ? emptyScheduled(scheduler) : EMPTY;
28942}
28943function emptyScheduled(scheduler) {
28944 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(function () { return subscriber.complete(); }); });
28945}
28946//# sourceMappingURL=empty.js.map
28947
28948
28949/***/ }),
28950/* 202 */
28951/***/ (function(module, __webpack_exports__, __webpack_require__) {
28952
28953"use strict";
28954__webpack_require__.r(__webpack_exports__);
28955/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "of", function() { return of; });
28956/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(203);
28957/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
28958/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
28959/** PURE_IMPORTS_START _util_isScheduler,_fromArray,_scheduled_scheduleArray PURE_IMPORTS_END */
28960
28961
28962
28963function of() {
28964 var args = [];
28965 for (var _i = 0; _i < arguments.length; _i++) {
28966 args[_i] = arguments[_i];
28967 }
28968 var scheduler = args[args.length - 1];
28969 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_0__["isScheduler"])(scheduler)) {
28970 args.pop();
28971 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(args, scheduler);
28972 }
28973 else {
28974 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(args);
28975 }
28976}
28977//# sourceMappingURL=of.js.map
28978
28979
28980/***/ }),
28981/* 203 */
28982/***/ (function(module, __webpack_exports__, __webpack_require__) {
28983
28984"use strict";
28985__webpack_require__.r(__webpack_exports__);
28986/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isScheduler", function() { return isScheduler; });
28987/** PURE_IMPORTS_START PURE_IMPORTS_END */
28988function isScheduler(value) {
28989 return value && typeof value.schedule === 'function';
28990}
28991//# sourceMappingURL=isScheduler.js.map
28992
28993
28994/***/ }),
28995/* 204 */
28996/***/ (function(module, __webpack_exports__, __webpack_require__) {
28997
28998"use strict";
28999__webpack_require__.r(__webpack_exports__);
29000/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromArray", function() { return fromArray; });
29001/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29002/* harmony import */ var _util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(205);
29003/* harmony import */ var _scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
29004/** PURE_IMPORTS_START _Observable,_util_subscribeToArray,_scheduled_scheduleArray PURE_IMPORTS_END */
29005
29006
29007
29008function fromArray(input, scheduler) {
29009 if (!scheduler) {
29010 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeToArray__WEBPACK_IMPORTED_MODULE_1__["subscribeToArray"])(input));
29011 }
29012 else {
29013 return Object(_scheduled_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
29014 }
29015}
29016//# sourceMappingURL=fromArray.js.map
29017
29018
29019/***/ }),
29020/* 205 */
29021/***/ (function(module, __webpack_exports__, __webpack_require__) {
29022
29023"use strict";
29024__webpack_require__.r(__webpack_exports__);
29025/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToArray", function() { return subscribeToArray; });
29026/** PURE_IMPORTS_START PURE_IMPORTS_END */
29027var subscribeToArray = function (array) {
29028 return function (subscriber) {
29029 for (var i = 0, len = array.length; i < len && !subscriber.closed; i++) {
29030 subscriber.next(array[i]);
29031 }
29032 subscriber.complete();
29033 };
29034};
29035//# sourceMappingURL=subscribeToArray.js.map
29036
29037
29038/***/ }),
29039/* 206 */
29040/***/ (function(module, __webpack_exports__, __webpack_require__) {
29041
29042"use strict";
29043__webpack_require__.r(__webpack_exports__);
29044/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleArray", function() { return scheduleArray; });
29045/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29046/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
29047/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
29048
29049
29050function scheduleArray(input, scheduler) {
29051 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29052 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
29053 var i = 0;
29054 sub.add(scheduler.schedule(function () {
29055 if (i === input.length) {
29056 subscriber.complete();
29057 return;
29058 }
29059 subscriber.next(input[i++]);
29060 if (!subscriber.closed) {
29061 sub.add(this.schedule());
29062 }
29063 }));
29064 return sub;
29065 });
29066}
29067//# sourceMappingURL=scheduleArray.js.map
29068
29069
29070/***/ }),
29071/* 207 */
29072/***/ (function(module, __webpack_exports__, __webpack_require__) {
29073
29074"use strict";
29075__webpack_require__.r(__webpack_exports__);
29076/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwError", function() { return throwError; });
29077/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29078/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29079
29080function throwError(error, scheduler) {
29081 if (!scheduler) {
29082 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return subscriber.error(error); });
29083 }
29084 else {
29085 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) { return scheduler.schedule(dispatch, 0, { error: error, subscriber: subscriber }); });
29086 }
29087}
29088function dispatch(_a) {
29089 var error = _a.error, subscriber = _a.subscriber;
29090 subscriber.error(error);
29091}
29092//# sourceMappingURL=throwError.js.map
29093
29094
29095/***/ }),
29096/* 208 */
29097/***/ (function(module, __webpack_exports__, __webpack_require__) {
29098
29099"use strict";
29100__webpack_require__.r(__webpack_exports__);
29101/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsyncSubject", function() { return AsyncSubject; });
29102/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29103/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
29104/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
29105/** PURE_IMPORTS_START tslib,_Subject,_Subscription PURE_IMPORTS_END */
29106
29107
29108
29109var AsyncSubject = /*@__PURE__*/ (function (_super) {
29110 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsyncSubject, _super);
29111 function AsyncSubject() {
29112 var _this = _super !== null && _super.apply(this, arguments) || this;
29113 _this.value = null;
29114 _this.hasNext = false;
29115 _this.hasCompleted = false;
29116 return _this;
29117 }
29118 AsyncSubject.prototype._subscribe = function (subscriber) {
29119 if (this.hasError) {
29120 subscriber.error(this.thrownError);
29121 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
29122 }
29123 else if (this.hasCompleted && this.hasNext) {
29124 subscriber.next(this.value);
29125 subscriber.complete();
29126 return _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"].EMPTY;
29127 }
29128 return _super.prototype._subscribe.call(this, subscriber);
29129 };
29130 AsyncSubject.prototype.next = function (value) {
29131 if (!this.hasCompleted) {
29132 this.value = value;
29133 this.hasNext = true;
29134 }
29135 };
29136 AsyncSubject.prototype.error = function (error) {
29137 if (!this.hasCompleted) {
29138 _super.prototype.error.call(this, error);
29139 }
29140 };
29141 AsyncSubject.prototype.complete = function () {
29142 this.hasCompleted = true;
29143 if (this.hasNext) {
29144 _super.prototype.next.call(this, this.value);
29145 }
29146 _super.prototype.complete.call(this);
29147 };
29148 return AsyncSubject;
29149}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
29150
29151//# sourceMappingURL=AsyncSubject.js.map
29152
29153
29154/***/ }),
29155/* 209 */
29156/***/ (function(module, __webpack_exports__, __webpack_require__) {
29157
29158"use strict";
29159__webpack_require__.r(__webpack_exports__);
29160/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "asap", function() { return asap; });
29161/* harmony import */ var _AsapAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(210);
29162/* harmony import */ var _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(212);
29163/** PURE_IMPORTS_START _AsapAction,_AsapScheduler PURE_IMPORTS_END */
29164
29165
29166var asap = /*@__PURE__*/ new _AsapScheduler__WEBPACK_IMPORTED_MODULE_1__["AsapScheduler"](_AsapAction__WEBPACK_IMPORTED_MODULE_0__["AsapAction"]);
29167//# sourceMappingURL=asap.js.map
29168
29169
29170/***/ }),
29171/* 210 */
29172/***/ (function(module, __webpack_exports__, __webpack_require__) {
29173
29174"use strict";
29175__webpack_require__.r(__webpack_exports__);
29176/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapAction", function() { return AsapAction; });
29177/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29178/* harmony import */ var _util_Immediate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(211);
29179/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(194);
29180/** PURE_IMPORTS_START tslib,_util_Immediate,_AsyncAction PURE_IMPORTS_END */
29181
29182
29183
29184var AsapAction = /*@__PURE__*/ (function (_super) {
29185 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapAction, _super);
29186 function AsapAction(scheduler, work) {
29187 var _this = _super.call(this, scheduler, work) || this;
29188 _this.scheduler = scheduler;
29189 _this.work = work;
29190 return _this;
29191 }
29192 AsapAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29193 if (delay === void 0) {
29194 delay = 0;
29195 }
29196 if (delay !== null && delay > 0) {
29197 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29198 }
29199 scheduler.actions.push(this);
29200 return scheduler.scheduled || (scheduler.scheduled = _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].setImmediate(scheduler.flush.bind(scheduler, null)));
29201 };
29202 AsapAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29203 if (delay === void 0) {
29204 delay = 0;
29205 }
29206 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29207 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29208 }
29209 if (scheduler.actions.length === 0) {
29210 _util_Immediate__WEBPACK_IMPORTED_MODULE_1__["Immediate"].clearImmediate(id);
29211 scheduler.scheduled = undefined;
29212 }
29213 return undefined;
29214 };
29215 return AsapAction;
29216}(_AsyncAction__WEBPACK_IMPORTED_MODULE_2__["AsyncAction"]));
29217
29218//# sourceMappingURL=AsapAction.js.map
29219
29220
29221/***/ }),
29222/* 211 */
29223/***/ (function(module, __webpack_exports__, __webpack_require__) {
29224
29225"use strict";
29226__webpack_require__.r(__webpack_exports__);
29227/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Immediate", function() { return Immediate; });
29228/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TestTools", function() { return TestTools; });
29229/** PURE_IMPORTS_START PURE_IMPORTS_END */
29230var nextHandle = 1;
29231var RESOLVED = /*@__PURE__*/ (function () { return /*@__PURE__*/ Promise.resolve(); })();
29232var activeHandles = {};
29233function findAndClearHandle(handle) {
29234 if (handle in activeHandles) {
29235 delete activeHandles[handle];
29236 return true;
29237 }
29238 return false;
29239}
29240var Immediate = {
29241 setImmediate: function (cb) {
29242 var handle = nextHandle++;
29243 activeHandles[handle] = true;
29244 RESOLVED.then(function () { return findAndClearHandle(handle) && cb(); });
29245 return handle;
29246 },
29247 clearImmediate: function (handle) {
29248 findAndClearHandle(handle);
29249 },
29250};
29251var TestTools = {
29252 pending: function () {
29253 return Object.keys(activeHandles).length;
29254 }
29255};
29256//# sourceMappingURL=Immediate.js.map
29257
29258
29259/***/ }),
29260/* 212 */
29261/***/ (function(module, __webpack_exports__, __webpack_require__) {
29262
29263"use strict";
29264__webpack_require__.r(__webpack_exports__);
29265/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AsapScheduler", function() { return AsapScheduler; });
29266/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29267/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29268/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29269
29270
29271var AsapScheduler = /*@__PURE__*/ (function (_super) {
29272 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AsapScheduler, _super);
29273 function AsapScheduler() {
29274 return _super !== null && _super.apply(this, arguments) || this;
29275 }
29276 AsapScheduler.prototype.flush = function (action) {
29277 this.active = true;
29278 this.scheduled = undefined;
29279 var actions = this.actions;
29280 var error;
29281 var index = -1;
29282 var count = actions.length;
29283 action = action || actions.shift();
29284 do {
29285 if (error = action.execute(action.state, action.delay)) {
29286 break;
29287 }
29288 } while (++index < count && (action = actions.shift()));
29289 this.active = false;
29290 if (error) {
29291 while (++index < count && (action = actions.shift())) {
29292 action.unsubscribe();
29293 }
29294 throw error;
29295 }
29296 };
29297 return AsapScheduler;
29298}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
29299
29300//# sourceMappingURL=AsapScheduler.js.map
29301
29302
29303/***/ }),
29304/* 213 */
29305/***/ (function(module, __webpack_exports__, __webpack_require__) {
29306
29307"use strict";
29308__webpack_require__.r(__webpack_exports__);
29309/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "async", function() { return async; });
29310/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(194);
29311/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29312/** PURE_IMPORTS_START _AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29313
29314
29315var async = /*@__PURE__*/ new _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"](_AsyncAction__WEBPACK_IMPORTED_MODULE_0__["AsyncAction"]);
29316//# sourceMappingURL=async.js.map
29317
29318
29319/***/ }),
29320/* 214 */
29321/***/ (function(module, __webpack_exports__, __webpack_require__) {
29322
29323"use strict";
29324__webpack_require__.r(__webpack_exports__);
29325/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animationFrame", function() { return animationFrame; });
29326/* harmony import */ var _AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(215);
29327/* harmony import */ var _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(216);
29328/** PURE_IMPORTS_START _AnimationFrameAction,_AnimationFrameScheduler PURE_IMPORTS_END */
29329
29330
29331var animationFrame = /*@__PURE__*/ new _AnimationFrameScheduler__WEBPACK_IMPORTED_MODULE_1__["AnimationFrameScheduler"](_AnimationFrameAction__WEBPACK_IMPORTED_MODULE_0__["AnimationFrameAction"]);
29332//# sourceMappingURL=animationFrame.js.map
29333
29334
29335/***/ }),
29336/* 215 */
29337/***/ (function(module, __webpack_exports__, __webpack_require__) {
29338
29339"use strict";
29340__webpack_require__.r(__webpack_exports__);
29341/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameAction", function() { return AnimationFrameAction; });
29342/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29343/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29344/** PURE_IMPORTS_START tslib,_AsyncAction PURE_IMPORTS_END */
29345
29346
29347var AnimationFrameAction = /*@__PURE__*/ (function (_super) {
29348 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameAction, _super);
29349 function AnimationFrameAction(scheduler, work) {
29350 var _this = _super.call(this, scheduler, work) || this;
29351 _this.scheduler = scheduler;
29352 _this.work = work;
29353 return _this;
29354 }
29355 AnimationFrameAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29356 if (delay === void 0) {
29357 delay = 0;
29358 }
29359 if (delay !== null && delay > 0) {
29360 return _super.prototype.requestAsyncId.call(this, scheduler, id, delay);
29361 }
29362 scheduler.actions.push(this);
29363 return scheduler.scheduled || (scheduler.scheduled = requestAnimationFrame(function () { return scheduler.flush(null); }));
29364 };
29365 AnimationFrameAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29366 if (delay === void 0) {
29367 delay = 0;
29368 }
29369 if ((delay !== null && delay > 0) || (delay === null && this.delay > 0)) {
29370 return _super.prototype.recycleAsyncId.call(this, scheduler, id, delay);
29371 }
29372 if (scheduler.actions.length === 0) {
29373 cancelAnimationFrame(id);
29374 scheduler.scheduled = undefined;
29375 }
29376 return undefined;
29377 };
29378 return AnimationFrameAction;
29379}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
29380
29381//# sourceMappingURL=AnimationFrameAction.js.map
29382
29383
29384/***/ }),
29385/* 216 */
29386/***/ (function(module, __webpack_exports__, __webpack_require__) {
29387
29388"use strict";
29389__webpack_require__.r(__webpack_exports__);
29390/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AnimationFrameScheduler", function() { return AnimationFrameScheduler; });
29391/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29392/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(197);
29393/** PURE_IMPORTS_START tslib,_AsyncScheduler PURE_IMPORTS_END */
29394
29395
29396var AnimationFrameScheduler = /*@__PURE__*/ (function (_super) {
29397 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AnimationFrameScheduler, _super);
29398 function AnimationFrameScheduler() {
29399 return _super !== null && _super.apply(this, arguments) || this;
29400 }
29401 AnimationFrameScheduler.prototype.flush = function (action) {
29402 this.active = true;
29403 this.scheduled = undefined;
29404 var actions = this.actions;
29405 var error;
29406 var index = -1;
29407 var count = actions.length;
29408 action = action || actions.shift();
29409 do {
29410 if (error = action.execute(action.state, action.delay)) {
29411 break;
29412 }
29413 } while (++index < count && (action = actions.shift()));
29414 this.active = false;
29415 if (error) {
29416 while (++index < count && (action = actions.shift())) {
29417 action.unsubscribe();
29418 }
29419 throw error;
29420 }
29421 };
29422 return AnimationFrameScheduler;
29423}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_1__["AsyncScheduler"]));
29424
29425//# sourceMappingURL=AnimationFrameScheduler.js.map
29426
29427
29428/***/ }),
29429/* 217 */
29430/***/ (function(module, __webpack_exports__, __webpack_require__) {
29431
29432"use strict";
29433__webpack_require__.r(__webpack_exports__);
29434/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualTimeScheduler", function() { return VirtualTimeScheduler; });
29435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "VirtualAction", function() { return VirtualAction; });
29436/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29437/* harmony import */ var _AsyncAction__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(194);
29438/* harmony import */ var _AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(197);
29439/** PURE_IMPORTS_START tslib,_AsyncAction,_AsyncScheduler PURE_IMPORTS_END */
29440
29441
29442
29443var VirtualTimeScheduler = /*@__PURE__*/ (function (_super) {
29444 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualTimeScheduler, _super);
29445 function VirtualTimeScheduler(SchedulerAction, maxFrames) {
29446 if (SchedulerAction === void 0) {
29447 SchedulerAction = VirtualAction;
29448 }
29449 if (maxFrames === void 0) {
29450 maxFrames = Number.POSITIVE_INFINITY;
29451 }
29452 var _this = _super.call(this, SchedulerAction, function () { return _this.frame; }) || this;
29453 _this.maxFrames = maxFrames;
29454 _this.frame = 0;
29455 _this.index = -1;
29456 return _this;
29457 }
29458 VirtualTimeScheduler.prototype.flush = function () {
29459 var _a = this, actions = _a.actions, maxFrames = _a.maxFrames;
29460 var error, action;
29461 while ((action = actions[0]) && action.delay <= maxFrames) {
29462 actions.shift();
29463 this.frame = action.delay;
29464 if (error = action.execute(action.state, action.delay)) {
29465 break;
29466 }
29467 }
29468 if (error) {
29469 while (action = actions.shift()) {
29470 action.unsubscribe();
29471 }
29472 throw error;
29473 }
29474 };
29475 VirtualTimeScheduler.frameTimeFactor = 10;
29476 return VirtualTimeScheduler;
29477}(_AsyncScheduler__WEBPACK_IMPORTED_MODULE_2__["AsyncScheduler"]));
29478
29479var VirtualAction = /*@__PURE__*/ (function (_super) {
29480 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](VirtualAction, _super);
29481 function VirtualAction(scheduler, work, index) {
29482 if (index === void 0) {
29483 index = scheduler.index += 1;
29484 }
29485 var _this = _super.call(this, scheduler, work) || this;
29486 _this.scheduler = scheduler;
29487 _this.work = work;
29488 _this.index = index;
29489 _this.active = true;
29490 _this.index = scheduler.index = index;
29491 return _this;
29492 }
29493 VirtualAction.prototype.schedule = function (state, delay) {
29494 if (delay === void 0) {
29495 delay = 0;
29496 }
29497 if (!this.id) {
29498 return _super.prototype.schedule.call(this, state, delay);
29499 }
29500 this.active = false;
29501 var action = new VirtualAction(this.scheduler, this.work);
29502 this.add(action);
29503 return action.schedule(state, delay);
29504 };
29505 VirtualAction.prototype.requestAsyncId = function (scheduler, id, delay) {
29506 if (delay === void 0) {
29507 delay = 0;
29508 }
29509 this.delay = scheduler.frame + delay;
29510 var actions = scheduler.actions;
29511 actions.push(this);
29512 actions.sort(VirtualAction.sortActions);
29513 return true;
29514 };
29515 VirtualAction.prototype.recycleAsyncId = function (scheduler, id, delay) {
29516 if (delay === void 0) {
29517 delay = 0;
29518 }
29519 return undefined;
29520 };
29521 VirtualAction.prototype._execute = function (state, delay) {
29522 if (this.active === true) {
29523 return _super.prototype._execute.call(this, state, delay);
29524 }
29525 };
29526 VirtualAction.sortActions = function (a, b) {
29527 if (a.delay === b.delay) {
29528 if (a.index === b.index) {
29529 return 0;
29530 }
29531 else if (a.index > b.index) {
29532 return 1;
29533 }
29534 else {
29535 return -1;
29536 }
29537 }
29538 else if (a.delay > b.delay) {
29539 return 1;
29540 }
29541 else {
29542 return -1;
29543 }
29544 };
29545 return VirtualAction;
29546}(_AsyncAction__WEBPACK_IMPORTED_MODULE_1__["AsyncAction"]));
29547
29548//# sourceMappingURL=VirtualTimeScheduler.js.map
29549
29550
29551/***/ }),
29552/* 218 */
29553/***/ (function(module, __webpack_exports__, __webpack_require__) {
29554
29555"use strict";
29556__webpack_require__.r(__webpack_exports__);
29557/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "noop", function() { return noop; });
29558/** PURE_IMPORTS_START PURE_IMPORTS_END */
29559function noop() { }
29560//# sourceMappingURL=noop.js.map
29561
29562
29563/***/ }),
29564/* 219 */
29565/***/ (function(module, __webpack_exports__, __webpack_require__) {
29566
29567"use strict";
29568__webpack_require__.r(__webpack_exports__);
29569/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isObservable", function() { return isObservable; });
29570/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29571/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
29572
29573function isObservable(obj) {
29574 return !!obj && (obj instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"] || (typeof obj.lift === 'function' && typeof obj.subscribe === 'function'));
29575}
29576//# sourceMappingURL=isObservable.js.map
29577
29578
29579/***/ }),
29580/* 220 */
29581/***/ (function(module, __webpack_exports__, __webpack_require__) {
29582
29583"use strict";
29584__webpack_require__.r(__webpack_exports__);
29585/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ArgumentOutOfRangeError", function() { return ArgumentOutOfRangeError; });
29586/** PURE_IMPORTS_START PURE_IMPORTS_END */
29587var ArgumentOutOfRangeErrorImpl = /*@__PURE__*/ (function () {
29588 function ArgumentOutOfRangeErrorImpl() {
29589 Error.call(this);
29590 this.message = 'argument out of range';
29591 this.name = 'ArgumentOutOfRangeError';
29592 return this;
29593 }
29594 ArgumentOutOfRangeErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29595 return ArgumentOutOfRangeErrorImpl;
29596})();
29597var ArgumentOutOfRangeError = ArgumentOutOfRangeErrorImpl;
29598//# sourceMappingURL=ArgumentOutOfRangeError.js.map
29599
29600
29601/***/ }),
29602/* 221 */
29603/***/ (function(module, __webpack_exports__, __webpack_require__) {
29604
29605"use strict";
29606__webpack_require__.r(__webpack_exports__);
29607/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EmptyError", function() { return EmptyError; });
29608/** PURE_IMPORTS_START PURE_IMPORTS_END */
29609var EmptyErrorImpl = /*@__PURE__*/ (function () {
29610 function EmptyErrorImpl() {
29611 Error.call(this);
29612 this.message = 'no elements in sequence';
29613 this.name = 'EmptyError';
29614 return this;
29615 }
29616 EmptyErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29617 return EmptyErrorImpl;
29618})();
29619var EmptyError = EmptyErrorImpl;
29620//# sourceMappingURL=EmptyError.js.map
29621
29622
29623/***/ }),
29624/* 222 */
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__, "TimeoutError", function() { return TimeoutError; });
29630/** PURE_IMPORTS_START PURE_IMPORTS_END */
29631var TimeoutErrorImpl = /*@__PURE__*/ (function () {
29632 function TimeoutErrorImpl() {
29633 Error.call(this);
29634 this.message = 'Timeout has occurred';
29635 this.name = 'TimeoutError';
29636 return this;
29637 }
29638 TimeoutErrorImpl.prototype = /*@__PURE__*/ Object.create(Error.prototype);
29639 return TimeoutErrorImpl;
29640})();
29641var TimeoutError = TimeoutErrorImpl;
29642//# sourceMappingURL=TimeoutError.js.map
29643
29644
29645/***/ }),
29646/* 223 */
29647/***/ (function(module, __webpack_exports__, __webpack_require__) {
29648
29649"use strict";
29650__webpack_require__.r(__webpack_exports__);
29651/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindCallback", function() { return bindCallback; });
29652/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29653/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
29654/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
29655/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
29656/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(176);
29657/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(203);
29658/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isArray,_util_isScheduler PURE_IMPORTS_END */
29659
29660
29661
29662
29663
29664
29665function bindCallback(callbackFunc, resultSelector, scheduler) {
29666 if (resultSelector) {
29667 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(resultSelector)) {
29668 scheduler = resultSelector;
29669 }
29670 else {
29671 return function () {
29672 var args = [];
29673 for (var _i = 0; _i < arguments.length; _i++) {
29674 args[_i] = arguments[_i];
29675 }
29676 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); }));
29677 };
29678 }
29679 }
29680 return function () {
29681 var args = [];
29682 for (var _i = 0; _i < arguments.length; _i++) {
29683 args[_i] = arguments[_i];
29684 }
29685 var context = this;
29686 var subject;
29687 var params = {
29688 context: context,
29689 subject: subject,
29690 callbackFunc: callbackFunc,
29691 scheduler: scheduler,
29692 };
29693 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29694 if (!scheduler) {
29695 if (!subject) {
29696 subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29697 var handler = function () {
29698 var innerArgs = [];
29699 for (var _i = 0; _i < arguments.length; _i++) {
29700 innerArgs[_i] = arguments[_i];
29701 }
29702 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
29703 subject.complete();
29704 };
29705 try {
29706 callbackFunc.apply(context, args.concat([handler]));
29707 }
29708 catch (err) {
29709 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
29710 subject.error(err);
29711 }
29712 else {
29713 console.warn(err);
29714 }
29715 }
29716 }
29717 return subject.subscribe(subscriber);
29718 }
29719 else {
29720 var state = {
29721 args: args, subscriber: subscriber, params: params,
29722 };
29723 return scheduler.schedule(dispatch, 0, state);
29724 }
29725 });
29726 };
29727}
29728function dispatch(state) {
29729 var _this = this;
29730 var self = this;
29731 var args = state.args, subscriber = state.subscriber, params = state.params;
29732 var callbackFunc = params.callbackFunc, context = params.context, scheduler = params.scheduler;
29733 var subject = params.subject;
29734 if (!subject) {
29735 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29736 var handler = function () {
29737 var innerArgs = [];
29738 for (var _i = 0; _i < arguments.length; _i++) {
29739 innerArgs[_i] = arguments[_i];
29740 }
29741 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
29742 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
29743 };
29744 try {
29745 callbackFunc.apply(context, args.concat([handler]));
29746 }
29747 catch (err) {
29748 subject.error(err);
29749 }
29750 }
29751 this.add(subject.subscribe(subscriber));
29752}
29753function dispatchNext(state) {
29754 var value = state.value, subject = state.subject;
29755 subject.next(value);
29756 subject.complete();
29757}
29758function dispatchError(state) {
29759 var err = state.err, subject = state.subject;
29760 subject.error(err);
29761}
29762//# sourceMappingURL=bindCallback.js.map
29763
29764
29765/***/ }),
29766/* 224 */
29767/***/ (function(module, __webpack_exports__, __webpack_require__) {
29768
29769"use strict";
29770__webpack_require__.r(__webpack_exports__);
29771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; });
29772/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MapOperator", function() { return MapOperator; });
29773/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29774/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
29775/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
29776
29777
29778function map(project, thisArg) {
29779 return function mapOperation(source) {
29780 if (typeof project !== 'function') {
29781 throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
29782 }
29783 return source.lift(new MapOperator(project, thisArg));
29784 };
29785}
29786var MapOperator = /*@__PURE__*/ (function () {
29787 function MapOperator(project, thisArg) {
29788 this.project = project;
29789 this.thisArg = thisArg;
29790 }
29791 MapOperator.prototype.call = function (subscriber, source) {
29792 return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
29793 };
29794 return MapOperator;
29795}());
29796
29797var MapSubscriber = /*@__PURE__*/ (function (_super) {
29798 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapSubscriber, _super);
29799 function MapSubscriber(destination, project, thisArg) {
29800 var _this = _super.call(this, destination) || this;
29801 _this.project = project;
29802 _this.count = 0;
29803 _this.thisArg = thisArg || _this;
29804 return _this;
29805 }
29806 MapSubscriber.prototype._next = function (value) {
29807 var result;
29808 try {
29809 result = this.project.call(this.thisArg, value, this.count++);
29810 }
29811 catch (err) {
29812 this.destination.error(err);
29813 return;
29814 }
29815 this.destination.next(result);
29816 };
29817 return MapSubscriber;
29818}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
29819//# sourceMappingURL=map.js.map
29820
29821
29822/***/ }),
29823/* 225 */
29824/***/ (function(module, __webpack_exports__, __webpack_require__) {
29825
29826"use strict";
29827__webpack_require__.r(__webpack_exports__);
29828/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bindNodeCallback", function() { return bindNodeCallback; });
29829/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
29830/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(208);
29831/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
29832/* harmony import */ var _util_canReportError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(168);
29833/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(203);
29834/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(176);
29835/** PURE_IMPORTS_START _Observable,_AsyncSubject,_operators_map,_util_canReportError,_util_isScheduler,_util_isArray PURE_IMPORTS_END */
29836
29837
29838
29839
29840
29841
29842function bindNodeCallback(callbackFunc, resultSelector, scheduler) {
29843 if (resultSelector) {
29844 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_4__["isScheduler"])(resultSelector)) {
29845 scheduler = resultSelector;
29846 }
29847 else {
29848 return function () {
29849 var args = [];
29850 for (var _i = 0; _i < arguments.length; _i++) {
29851 args[_i] = arguments[_i];
29852 }
29853 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); }));
29854 };
29855 }
29856 }
29857 return function () {
29858 var args = [];
29859 for (var _i = 0; _i < arguments.length; _i++) {
29860 args[_i] = arguments[_i];
29861 }
29862 var params = {
29863 subject: undefined,
29864 args: args,
29865 callbackFunc: callbackFunc,
29866 scheduler: scheduler,
29867 context: this,
29868 };
29869 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
29870 var context = params.context;
29871 var subject = params.subject;
29872 if (!scheduler) {
29873 if (!subject) {
29874 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29875 var handler = function () {
29876 var innerArgs = [];
29877 for (var _i = 0; _i < arguments.length; _i++) {
29878 innerArgs[_i] = arguments[_i];
29879 }
29880 var err = innerArgs.shift();
29881 if (err) {
29882 subject.error(err);
29883 return;
29884 }
29885 subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
29886 subject.complete();
29887 };
29888 try {
29889 callbackFunc.apply(context, args.concat([handler]));
29890 }
29891 catch (err) {
29892 if (Object(_util_canReportError__WEBPACK_IMPORTED_MODULE_3__["canReportError"])(subject)) {
29893 subject.error(err);
29894 }
29895 else {
29896 console.warn(err);
29897 }
29898 }
29899 }
29900 return subject.subscribe(subscriber);
29901 }
29902 else {
29903 return scheduler.schedule(dispatch, 0, { params: params, subscriber: subscriber, context: context });
29904 }
29905 });
29906 };
29907}
29908function dispatch(state) {
29909 var _this = this;
29910 var params = state.params, subscriber = state.subscriber, context = state.context;
29911 var callbackFunc = params.callbackFunc, args = params.args, scheduler = params.scheduler;
29912 var subject = params.subject;
29913 if (!subject) {
29914 subject = params.subject = new _AsyncSubject__WEBPACK_IMPORTED_MODULE_1__["AsyncSubject"]();
29915 var handler = function () {
29916 var innerArgs = [];
29917 for (var _i = 0; _i < arguments.length; _i++) {
29918 innerArgs[_i] = arguments[_i];
29919 }
29920 var err = innerArgs.shift();
29921 if (err) {
29922 _this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
29923 }
29924 else {
29925 var value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
29926 _this.add(scheduler.schedule(dispatchNext, 0, { value: value, subject: subject }));
29927 }
29928 };
29929 try {
29930 callbackFunc.apply(context, args.concat([handler]));
29931 }
29932 catch (err) {
29933 this.add(scheduler.schedule(dispatchError, 0, { err: err, subject: subject }));
29934 }
29935 }
29936 this.add(subject.subscribe(subscriber));
29937}
29938function dispatchNext(arg) {
29939 var value = arg.value, subject = arg.subject;
29940 subject.next(value);
29941 subject.complete();
29942}
29943function dispatchError(arg) {
29944 var err = arg.err, subject = arg.subject;
29945 subject.error(err);
29946}
29947//# sourceMappingURL=bindNodeCallback.js.map
29948
29949
29950/***/ }),
29951/* 226 */
29952/***/ (function(module, __webpack_exports__, __webpack_require__) {
29953
29954"use strict";
29955__webpack_require__.r(__webpack_exports__);
29956/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
29957/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestOperator", function() { return CombineLatestOperator; });
29958/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CombineLatestSubscriber", function() { return CombineLatestSubscriber; });
29959/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
29960/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
29961/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
29962/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
29963/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
29964/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(204);
29965/** PURE_IMPORTS_START tslib,_util_isScheduler,_util_isArray,_OuterSubscriber,_util_subscribeToResult,_fromArray PURE_IMPORTS_END */
29966
29967
29968
29969
29970
29971
29972var NONE = {};
29973function combineLatest() {
29974 var observables = [];
29975 for (var _i = 0; _i < arguments.length; _i++) {
29976 observables[_i] = arguments[_i];
29977 }
29978 var resultSelector = null;
29979 var scheduler = null;
29980 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(observables[observables.length - 1])) {
29981 scheduler = observables.pop();
29982 }
29983 if (typeof observables[observables.length - 1] === 'function') {
29984 resultSelector = observables.pop();
29985 }
29986 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(observables[0])) {
29987 observables = observables[0];
29988 }
29989 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_5__["fromArray"])(observables, scheduler).lift(new CombineLatestOperator(resultSelector));
29990}
29991var CombineLatestOperator = /*@__PURE__*/ (function () {
29992 function CombineLatestOperator(resultSelector) {
29993 this.resultSelector = resultSelector;
29994 }
29995 CombineLatestOperator.prototype.call = function (subscriber, source) {
29996 return source.subscribe(new CombineLatestSubscriber(subscriber, this.resultSelector));
29997 };
29998 return CombineLatestOperator;
29999}());
30000
30001var CombineLatestSubscriber = /*@__PURE__*/ (function (_super) {
30002 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CombineLatestSubscriber, _super);
30003 function CombineLatestSubscriber(destination, resultSelector) {
30004 var _this = _super.call(this, destination) || this;
30005 _this.resultSelector = resultSelector;
30006 _this.active = 0;
30007 _this.values = [];
30008 _this.observables = [];
30009 return _this;
30010 }
30011 CombineLatestSubscriber.prototype._next = function (observable) {
30012 this.values.push(NONE);
30013 this.observables.push(observable);
30014 };
30015 CombineLatestSubscriber.prototype._complete = function () {
30016 var observables = this.observables;
30017 var len = observables.length;
30018 if (len === 0) {
30019 this.destination.complete();
30020 }
30021 else {
30022 this.active = len;
30023 this.toRespond = len;
30024 for (var i = 0; i < len; i++) {
30025 var observable = observables[i];
30026 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i));
30027 }
30028 }
30029 };
30030 CombineLatestSubscriber.prototype.notifyComplete = function (unused) {
30031 if ((this.active -= 1) === 0) {
30032 this.destination.complete();
30033 }
30034 };
30035 CombineLatestSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30036 var values = this.values;
30037 var oldVal = values[outerIndex];
30038 var toRespond = !this.toRespond
30039 ? 0
30040 : oldVal === NONE ? --this.toRespond : this.toRespond;
30041 values[outerIndex] = innerValue;
30042 if (toRespond === 0) {
30043 if (this.resultSelector) {
30044 this._tryResultSelector(values);
30045 }
30046 else {
30047 this.destination.next(values.slice());
30048 }
30049 }
30050 };
30051 CombineLatestSubscriber.prototype._tryResultSelector = function (values) {
30052 var result;
30053 try {
30054 result = this.resultSelector.apply(this, values);
30055 }
30056 catch (err) {
30057 this.destination.error(err);
30058 return;
30059 }
30060 this.destination.next(result);
30061 };
30062 return CombineLatestSubscriber;
30063}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
30064
30065//# sourceMappingURL=combineLatest.js.map
30066
30067
30068/***/ }),
30069/* 227 */
30070/***/ (function(module, __webpack_exports__, __webpack_require__) {
30071
30072"use strict";
30073__webpack_require__.r(__webpack_exports__);
30074/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OuterSubscriber", function() { return OuterSubscriber; });
30075/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30076/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
30077/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30078
30079
30080var OuterSubscriber = /*@__PURE__*/ (function (_super) {
30081 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OuterSubscriber, _super);
30082 function OuterSubscriber() {
30083 return _super !== null && _super.apply(this, arguments) || this;
30084 }
30085 OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30086 this.destination.next(innerValue);
30087 };
30088 OuterSubscriber.prototype.notifyError = function (error, innerSub) {
30089 this.destination.error(error);
30090 };
30091 OuterSubscriber.prototype.notifyComplete = function (innerSub) {
30092 this.destination.complete();
30093 };
30094 return OuterSubscriber;
30095}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30096
30097//# sourceMappingURL=OuterSubscriber.js.map
30098
30099
30100/***/ }),
30101/* 228 */
30102/***/ (function(module, __webpack_exports__, __webpack_require__) {
30103
30104"use strict";
30105__webpack_require__.r(__webpack_exports__);
30106/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToResult", function() { return subscribeToResult; });
30107/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(229);
30108/* harmony import */ var _subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
30109/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
30110/** PURE_IMPORTS_START _InnerSubscriber,_subscribeTo,_Observable PURE_IMPORTS_END */
30111
30112
30113
30114function subscribeToResult(outerSubscriber, result, outerValue, outerIndex, innerSubscriber) {
30115 if (innerSubscriber === void 0) {
30116 innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_0__["InnerSubscriber"](outerSubscriber, outerValue, outerIndex);
30117 }
30118 if (innerSubscriber.closed) {
30119 return undefined;
30120 }
30121 if (result instanceof _Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]) {
30122 return result.subscribe(innerSubscriber);
30123 }
30124 return Object(_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(result)(innerSubscriber);
30125}
30126//# sourceMappingURL=subscribeToResult.js.map
30127
30128
30129/***/ }),
30130/* 229 */
30131/***/ (function(module, __webpack_exports__, __webpack_require__) {
30132
30133"use strict";
30134__webpack_require__.r(__webpack_exports__);
30135/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "InnerSubscriber", function() { return InnerSubscriber; });
30136/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30137/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
30138/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
30139
30140
30141var InnerSubscriber = /*@__PURE__*/ (function (_super) {
30142 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](InnerSubscriber, _super);
30143 function InnerSubscriber(parent, outerValue, outerIndex) {
30144 var _this = _super.call(this) || this;
30145 _this.parent = parent;
30146 _this.outerValue = outerValue;
30147 _this.outerIndex = outerIndex;
30148 _this.index = 0;
30149 return _this;
30150 }
30151 InnerSubscriber.prototype._next = function (value) {
30152 this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
30153 };
30154 InnerSubscriber.prototype._error = function (error) {
30155 this.parent.notifyError(error, this);
30156 this.unsubscribe();
30157 };
30158 InnerSubscriber.prototype._complete = function () {
30159 this.parent.notifyComplete(this);
30160 this.unsubscribe();
30161 };
30162 return InnerSubscriber;
30163}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
30164
30165//# sourceMappingURL=InnerSubscriber.js.map
30166
30167
30168/***/ }),
30169/* 230 */
30170/***/ (function(module, __webpack_exports__, __webpack_require__) {
30171
30172"use strict";
30173__webpack_require__.r(__webpack_exports__);
30174/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeTo", function() { return subscribeTo; });
30175/* harmony import */ var _subscribeToArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(205);
30176/* harmony import */ var _subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(231);
30177/* harmony import */ var _subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(232);
30178/* harmony import */ var _subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(234);
30179/* harmony import */ var _isArrayLike__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(235);
30180/* harmony import */ var _isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(236);
30181/* harmony import */ var _isObject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(177);
30182/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(233);
30183/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(181);
30184/** PURE_IMPORTS_START _subscribeToArray,_subscribeToPromise,_subscribeToIterable,_subscribeToObservable,_isArrayLike,_isPromise,_isObject,_symbol_iterator,_symbol_observable PURE_IMPORTS_END */
30185
30186
30187
30188
30189
30190
30191
30192
30193
30194var subscribeTo = function (result) {
30195 if (!!result && typeof result[_symbol_observable__WEBPACK_IMPORTED_MODULE_8__["observable"]] === 'function') {
30196 return Object(_subscribeToObservable__WEBPACK_IMPORTED_MODULE_3__["subscribeToObservable"])(result);
30197 }
30198 else if (Object(_isArrayLike__WEBPACK_IMPORTED_MODULE_4__["isArrayLike"])(result)) {
30199 return Object(_subscribeToArray__WEBPACK_IMPORTED_MODULE_0__["subscribeToArray"])(result);
30200 }
30201 else if (Object(_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(result)) {
30202 return Object(_subscribeToPromise__WEBPACK_IMPORTED_MODULE_1__["subscribeToPromise"])(result);
30203 }
30204 else if (!!result && typeof result[_symbol_iterator__WEBPACK_IMPORTED_MODULE_7__["iterator"]] === 'function') {
30205 return Object(_subscribeToIterable__WEBPACK_IMPORTED_MODULE_2__["subscribeToIterable"])(result);
30206 }
30207 else {
30208 var value = Object(_isObject__WEBPACK_IMPORTED_MODULE_6__["isObject"])(result) ? 'an invalid object' : "'" + result + "'";
30209 var msg = "You provided " + value + " where a stream was expected."
30210 + ' You can provide an Observable, Promise, Array, or Iterable.';
30211 throw new TypeError(msg);
30212 }
30213};
30214//# sourceMappingURL=subscribeTo.js.map
30215
30216
30217/***/ }),
30218/* 231 */
30219/***/ (function(module, __webpack_exports__, __webpack_require__) {
30220
30221"use strict";
30222__webpack_require__.r(__webpack_exports__);
30223/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToPromise", function() { return subscribeToPromise; });
30224/* harmony import */ var _hostReportError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(174);
30225/** PURE_IMPORTS_START _hostReportError PURE_IMPORTS_END */
30226
30227var subscribeToPromise = function (promise) {
30228 return function (subscriber) {
30229 promise.then(function (value) {
30230 if (!subscriber.closed) {
30231 subscriber.next(value);
30232 subscriber.complete();
30233 }
30234 }, function (err) { return subscriber.error(err); })
30235 .then(null, _hostReportError__WEBPACK_IMPORTED_MODULE_0__["hostReportError"]);
30236 return subscriber;
30237 };
30238};
30239//# sourceMappingURL=subscribeToPromise.js.map
30240
30241
30242/***/ }),
30243/* 232 */
30244/***/ (function(module, __webpack_exports__, __webpack_require__) {
30245
30246"use strict";
30247__webpack_require__.r(__webpack_exports__);
30248/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToIterable", function() { return subscribeToIterable; });
30249/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30250/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30251
30252var subscribeToIterable = function (iterable) {
30253 return function (subscriber) {
30254 var iterator = iterable[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]]();
30255 do {
30256 var item = iterator.next();
30257 if (item.done) {
30258 subscriber.complete();
30259 break;
30260 }
30261 subscriber.next(item.value);
30262 if (subscriber.closed) {
30263 break;
30264 }
30265 } while (true);
30266 if (typeof iterator.return === 'function') {
30267 subscriber.add(function () {
30268 if (iterator.return) {
30269 iterator.return();
30270 }
30271 });
30272 }
30273 return subscriber;
30274 };
30275};
30276//# sourceMappingURL=subscribeToIterable.js.map
30277
30278
30279/***/ }),
30280/* 233 */
30281/***/ (function(module, __webpack_exports__, __webpack_require__) {
30282
30283"use strict";
30284__webpack_require__.r(__webpack_exports__);
30285/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getSymbolIterator", function() { return getSymbolIterator; });
30286/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iterator", function() { return iterator; });
30287/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$$iterator", function() { return $$iterator; });
30288/** PURE_IMPORTS_START PURE_IMPORTS_END */
30289function getSymbolIterator() {
30290 if (typeof Symbol !== 'function' || !Symbol.iterator) {
30291 return '@@iterator';
30292 }
30293 return Symbol.iterator;
30294}
30295var iterator = /*@__PURE__*/ getSymbolIterator();
30296var $$iterator = iterator;
30297//# sourceMappingURL=iterator.js.map
30298
30299
30300/***/ }),
30301/* 234 */
30302/***/ (function(module, __webpack_exports__, __webpack_require__) {
30303
30304"use strict";
30305__webpack_require__.r(__webpack_exports__);
30306/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeToObservable", function() { return subscribeToObservable; });
30307/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(181);
30308/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30309
30310var subscribeToObservable = function (obj) {
30311 return function (subscriber) {
30312 var obs = obj[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]]();
30313 if (typeof obs.subscribe !== 'function') {
30314 throw new TypeError('Provided object does not correctly implement Symbol.observable');
30315 }
30316 else {
30317 return obs.subscribe(subscriber);
30318 }
30319 };
30320};
30321//# sourceMappingURL=subscribeToObservable.js.map
30322
30323
30324/***/ }),
30325/* 235 */
30326/***/ (function(module, __webpack_exports__, __webpack_require__) {
30327
30328"use strict";
30329__webpack_require__.r(__webpack_exports__);
30330/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isArrayLike", function() { return isArrayLike; });
30331/** PURE_IMPORTS_START PURE_IMPORTS_END */
30332var isArrayLike = (function (x) { return x && typeof x.length === 'number' && typeof x !== 'function'; });
30333//# sourceMappingURL=isArrayLike.js.map
30334
30335
30336/***/ }),
30337/* 236 */
30338/***/ (function(module, __webpack_exports__, __webpack_require__) {
30339
30340"use strict";
30341__webpack_require__.r(__webpack_exports__);
30342/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isPromise", function() { return isPromise; });
30343/** PURE_IMPORTS_START PURE_IMPORTS_END */
30344function isPromise(value) {
30345 return !!value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
30346}
30347//# sourceMappingURL=isPromise.js.map
30348
30349
30350/***/ }),
30351/* 237 */
30352/***/ (function(module, __webpack_exports__, __webpack_require__) {
30353
30354"use strict";
30355__webpack_require__.r(__webpack_exports__);
30356/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
30357/* harmony import */ var _of__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(202);
30358/* harmony import */ var _operators_concatAll__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(238);
30359/** PURE_IMPORTS_START _of,_operators_concatAll PURE_IMPORTS_END */
30360
30361
30362function concat() {
30363 var observables = [];
30364 for (var _i = 0; _i < arguments.length; _i++) {
30365 observables[_i] = arguments[_i];
30366 }
30367 return Object(_operators_concatAll__WEBPACK_IMPORTED_MODULE_1__["concatAll"])()(_of__WEBPACK_IMPORTED_MODULE_0__["of"].apply(void 0, observables));
30368}
30369//# sourceMappingURL=concat.js.map
30370
30371
30372/***/ }),
30373/* 238 */
30374/***/ (function(module, __webpack_exports__, __webpack_require__) {
30375
30376"use strict";
30377__webpack_require__.r(__webpack_exports__);
30378/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return concatAll; });
30379/* harmony import */ var _mergeAll__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(239);
30380/** PURE_IMPORTS_START _mergeAll PURE_IMPORTS_END */
30381
30382function concatAll() {
30383 return Object(_mergeAll__WEBPACK_IMPORTED_MODULE_0__["mergeAll"])(1);
30384}
30385//# sourceMappingURL=concatAll.js.map
30386
30387
30388/***/ }),
30389/* 239 */
30390/***/ (function(module, __webpack_exports__, __webpack_require__) {
30391
30392"use strict";
30393__webpack_require__.r(__webpack_exports__);
30394/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return mergeAll; });
30395/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
30396/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
30397/** PURE_IMPORTS_START _mergeMap,_util_identity PURE_IMPORTS_END */
30398
30399
30400function mergeAll(concurrent) {
30401 if (concurrent === void 0) {
30402 concurrent = Number.POSITIVE_INFINITY;
30403 }
30404 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"], concurrent);
30405}
30406//# sourceMappingURL=mergeAll.js.map
30407
30408
30409/***/ }),
30410/* 240 */
30411/***/ (function(module, __webpack_exports__, __webpack_require__) {
30412
30413"use strict";
30414__webpack_require__.r(__webpack_exports__);
30415/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return mergeMap; });
30416/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapOperator", function() { return MergeMapOperator; });
30417/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeMapSubscriber", function() { return MergeMapSubscriber; });
30418/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
30419/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
30420/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
30421/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(229);
30422/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
30423/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
30424/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber,_map,_observable_from PURE_IMPORTS_END */
30425
30426
30427
30428
30429
30430
30431function mergeMap(project, resultSelector, concurrent) {
30432 if (concurrent === void 0) {
30433 concurrent = Number.POSITIVE_INFINITY;
30434 }
30435 if (typeof resultSelector === 'function') {
30436 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)); };
30437 }
30438 else if (typeof resultSelector === 'number') {
30439 concurrent = resultSelector;
30440 }
30441 return function (source) { return source.lift(new MergeMapOperator(project, concurrent)); };
30442}
30443var MergeMapOperator = /*@__PURE__*/ (function () {
30444 function MergeMapOperator(project, concurrent) {
30445 if (concurrent === void 0) {
30446 concurrent = Number.POSITIVE_INFINITY;
30447 }
30448 this.project = project;
30449 this.concurrent = concurrent;
30450 }
30451 MergeMapOperator.prototype.call = function (observer, source) {
30452 return source.subscribe(new MergeMapSubscriber(observer, this.project, this.concurrent));
30453 };
30454 return MergeMapOperator;
30455}());
30456
30457var MergeMapSubscriber = /*@__PURE__*/ (function (_super) {
30458 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeMapSubscriber, _super);
30459 function MergeMapSubscriber(destination, project, concurrent) {
30460 if (concurrent === void 0) {
30461 concurrent = Number.POSITIVE_INFINITY;
30462 }
30463 var _this = _super.call(this, destination) || this;
30464 _this.project = project;
30465 _this.concurrent = concurrent;
30466 _this.hasCompleted = false;
30467 _this.buffer = [];
30468 _this.active = 0;
30469 _this.index = 0;
30470 return _this;
30471 }
30472 MergeMapSubscriber.prototype._next = function (value) {
30473 if (this.active < this.concurrent) {
30474 this._tryNext(value);
30475 }
30476 else {
30477 this.buffer.push(value);
30478 }
30479 };
30480 MergeMapSubscriber.prototype._tryNext = function (value) {
30481 var result;
30482 var index = this.index++;
30483 try {
30484 result = this.project(value, index);
30485 }
30486 catch (err) {
30487 this.destination.error(err);
30488 return;
30489 }
30490 this.active++;
30491 this._innerSub(result, value, index);
30492 };
30493 MergeMapSubscriber.prototype._innerSub = function (ish, value, index) {
30494 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, value, index);
30495 var destination = this.destination;
30496 destination.add(innerSubscriber);
30497 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
30498 if (innerSubscription !== innerSubscriber) {
30499 destination.add(innerSubscription);
30500 }
30501 };
30502 MergeMapSubscriber.prototype._complete = function () {
30503 this.hasCompleted = true;
30504 if (this.active === 0 && this.buffer.length === 0) {
30505 this.destination.complete();
30506 }
30507 this.unsubscribe();
30508 };
30509 MergeMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
30510 this.destination.next(innerValue);
30511 };
30512 MergeMapSubscriber.prototype.notifyComplete = function (innerSub) {
30513 var buffer = this.buffer;
30514 this.remove(innerSub);
30515 this.active--;
30516 if (buffer.length > 0) {
30517 this._next(buffer.shift());
30518 }
30519 else if (this.active === 0 && this.hasCompleted) {
30520 this.destination.complete();
30521 }
30522 };
30523 return MergeMapSubscriber;
30524}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
30525
30526//# sourceMappingURL=mergeMap.js.map
30527
30528
30529/***/ }),
30530/* 241 */
30531/***/ (function(module, __webpack_exports__, __webpack_require__) {
30532
30533"use strict";
30534__webpack_require__.r(__webpack_exports__);
30535/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "from", function() { return from; });
30536/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30537/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
30538/* harmony import */ var _scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(242);
30539/** PURE_IMPORTS_START _Observable,_util_subscribeTo,_scheduled_scheduled PURE_IMPORTS_END */
30540
30541
30542
30543function from(input, scheduler) {
30544 if (!scheduler) {
30545 if (input instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
30546 return input;
30547 }
30548 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](Object(_util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__["subscribeTo"])(input));
30549 }
30550 else {
30551 return Object(_scheduled_scheduled__WEBPACK_IMPORTED_MODULE_2__["scheduled"])(input, scheduler);
30552 }
30553}
30554//# sourceMappingURL=from.js.map
30555
30556
30557/***/ }),
30558/* 242 */
30559/***/ (function(module, __webpack_exports__, __webpack_require__) {
30560
30561"use strict";
30562__webpack_require__.r(__webpack_exports__);
30563/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduled", function() { return scheduled; });
30564/* harmony import */ var _scheduleObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(243);
30565/* harmony import */ var _schedulePromise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(244);
30566/* harmony import */ var _scheduleArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(206);
30567/* harmony import */ var _scheduleIterable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(245);
30568/* harmony import */ var _util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(246);
30569/* harmony import */ var _util_isPromise__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(236);
30570/* harmony import */ var _util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(235);
30571/* harmony import */ var _util_isIterable__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(247);
30572/** PURE_IMPORTS_START _scheduleObservable,_schedulePromise,_scheduleArray,_scheduleIterable,_util_isInteropObservable,_util_isPromise,_util_isArrayLike,_util_isIterable PURE_IMPORTS_END */
30573
30574
30575
30576
30577
30578
30579
30580
30581function scheduled(input, scheduler) {
30582 if (input != null) {
30583 if (Object(_util_isInteropObservable__WEBPACK_IMPORTED_MODULE_4__["isInteropObservable"])(input)) {
30584 return Object(_scheduleObservable__WEBPACK_IMPORTED_MODULE_0__["scheduleObservable"])(input, scheduler);
30585 }
30586 else if (Object(_util_isPromise__WEBPACK_IMPORTED_MODULE_5__["isPromise"])(input)) {
30587 return Object(_schedulePromise__WEBPACK_IMPORTED_MODULE_1__["schedulePromise"])(input, scheduler);
30588 }
30589 else if (Object(_util_isArrayLike__WEBPACK_IMPORTED_MODULE_6__["isArrayLike"])(input)) {
30590 return Object(_scheduleArray__WEBPACK_IMPORTED_MODULE_2__["scheduleArray"])(input, scheduler);
30591 }
30592 else if (Object(_util_isIterable__WEBPACK_IMPORTED_MODULE_7__["isIterable"])(input) || typeof input === 'string') {
30593 return Object(_scheduleIterable__WEBPACK_IMPORTED_MODULE_3__["scheduleIterable"])(input, scheduler);
30594 }
30595 }
30596 throw new TypeError((input !== null && typeof input || input) + ' is not observable');
30597}
30598//# sourceMappingURL=scheduled.js.map
30599
30600
30601/***/ }),
30602/* 243 */
30603/***/ (function(module, __webpack_exports__, __webpack_require__) {
30604
30605"use strict";
30606__webpack_require__.r(__webpack_exports__);
30607/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleObservable", function() { return scheduleObservable; });
30608/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30609/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30610/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(181);
30611/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_observable PURE_IMPORTS_END */
30612
30613
30614
30615function scheduleObservable(input, scheduler) {
30616 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30617 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30618 sub.add(scheduler.schedule(function () {
30619 var observable = input[_symbol_observable__WEBPACK_IMPORTED_MODULE_2__["observable"]]();
30620 sub.add(observable.subscribe({
30621 next: function (value) { sub.add(scheduler.schedule(function () { return subscriber.next(value); })); },
30622 error: function (err) { sub.add(scheduler.schedule(function () { return subscriber.error(err); })); },
30623 complete: function () { sub.add(scheduler.schedule(function () { return subscriber.complete(); })); },
30624 }));
30625 }));
30626 return sub;
30627 });
30628}
30629//# sourceMappingURL=scheduleObservable.js.map
30630
30631
30632/***/ }),
30633/* 244 */
30634/***/ (function(module, __webpack_exports__, __webpack_require__) {
30635
30636"use strict";
30637__webpack_require__.r(__webpack_exports__);
30638/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "schedulePromise", function() { return schedulePromise; });
30639/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30640/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30641/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
30642
30643
30644function schedulePromise(input, scheduler) {
30645 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30646 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30647 sub.add(scheduler.schedule(function () {
30648 return input.then(function (value) {
30649 sub.add(scheduler.schedule(function () {
30650 subscriber.next(value);
30651 sub.add(scheduler.schedule(function () { return subscriber.complete(); }));
30652 }));
30653 }, function (err) {
30654 sub.add(scheduler.schedule(function () { return subscriber.error(err); }));
30655 });
30656 }));
30657 return sub;
30658 });
30659}
30660//# sourceMappingURL=schedulePromise.js.map
30661
30662
30663/***/ }),
30664/* 245 */
30665/***/ (function(module, __webpack_exports__, __webpack_require__) {
30666
30667"use strict";
30668__webpack_require__.r(__webpack_exports__);
30669/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scheduleIterable", function() { return scheduleIterable; });
30670/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30671/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
30672/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(233);
30673/** PURE_IMPORTS_START _Observable,_Subscription,_symbol_iterator PURE_IMPORTS_END */
30674
30675
30676
30677function scheduleIterable(input, scheduler) {
30678 if (!input) {
30679 throw new Error('Iterable cannot be null');
30680 }
30681 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30682 var sub = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
30683 var iterator;
30684 sub.add(function () {
30685 if (iterator && typeof iterator.return === 'function') {
30686 iterator.return();
30687 }
30688 });
30689 sub.add(scheduler.schedule(function () {
30690 iterator = input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_2__["iterator"]]();
30691 sub.add(scheduler.schedule(function () {
30692 if (subscriber.closed) {
30693 return;
30694 }
30695 var value;
30696 var done;
30697 try {
30698 var result = iterator.next();
30699 value = result.value;
30700 done = result.done;
30701 }
30702 catch (err) {
30703 subscriber.error(err);
30704 return;
30705 }
30706 if (done) {
30707 subscriber.complete();
30708 }
30709 else {
30710 subscriber.next(value);
30711 this.schedule();
30712 }
30713 }));
30714 }));
30715 return sub;
30716 });
30717}
30718//# sourceMappingURL=scheduleIterable.js.map
30719
30720
30721/***/ }),
30722/* 246 */
30723/***/ (function(module, __webpack_exports__, __webpack_require__) {
30724
30725"use strict";
30726__webpack_require__.r(__webpack_exports__);
30727/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isInteropObservable", function() { return isInteropObservable; });
30728/* harmony import */ var _symbol_observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(181);
30729/** PURE_IMPORTS_START _symbol_observable PURE_IMPORTS_END */
30730
30731function isInteropObservable(input) {
30732 return input && typeof input[_symbol_observable__WEBPACK_IMPORTED_MODULE_0__["observable"]] === 'function';
30733}
30734//# sourceMappingURL=isInteropObservable.js.map
30735
30736
30737/***/ }),
30738/* 247 */
30739/***/ (function(module, __webpack_exports__, __webpack_require__) {
30740
30741"use strict";
30742__webpack_require__.r(__webpack_exports__);
30743/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isIterable", function() { return isIterable; });
30744/* harmony import */ var _symbol_iterator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(233);
30745/** PURE_IMPORTS_START _symbol_iterator PURE_IMPORTS_END */
30746
30747function isIterable(input) {
30748 return input && typeof input[_symbol_iterator__WEBPACK_IMPORTED_MODULE_0__["iterator"]] === 'function';
30749}
30750//# sourceMappingURL=isIterable.js.map
30751
30752
30753/***/ }),
30754/* 248 */
30755/***/ (function(module, __webpack_exports__, __webpack_require__) {
30756
30757"use strict";
30758__webpack_require__.r(__webpack_exports__);
30759/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defer", function() { return defer; });
30760/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30761/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
30762/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
30763/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
30764
30765
30766
30767function defer(observableFactory) {
30768 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30769 var input;
30770 try {
30771 input = observableFactory();
30772 }
30773 catch (err) {
30774 subscriber.error(err);
30775 return undefined;
30776 }
30777 var source = input ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(input) : Object(_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
30778 return source.subscribe(subscriber);
30779 });
30780}
30781//# sourceMappingURL=defer.js.map
30782
30783
30784/***/ }),
30785/* 249 */
30786/***/ (function(module, __webpack_exports__, __webpack_require__) {
30787
30788"use strict";
30789__webpack_require__.r(__webpack_exports__);
30790/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forkJoin", function() { return forkJoin; });
30791/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30792/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
30793/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(224);
30794/* harmony import */ var _util_isObject__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(177);
30795/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(241);
30796/** PURE_IMPORTS_START _Observable,_util_isArray,_operators_map,_util_isObject,_from PURE_IMPORTS_END */
30797
30798
30799
30800
30801
30802function forkJoin() {
30803 var sources = [];
30804 for (var _i = 0; _i < arguments.length; _i++) {
30805 sources[_i] = arguments[_i];
30806 }
30807 if (sources.length === 1) {
30808 var first_1 = sources[0];
30809 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(first_1)) {
30810 return forkJoinInternal(first_1, null);
30811 }
30812 if (Object(_util_isObject__WEBPACK_IMPORTED_MODULE_3__["isObject"])(first_1) && Object.getPrototypeOf(first_1) === Object.prototype) {
30813 var keys = Object.keys(first_1);
30814 return forkJoinInternal(keys.map(function (key) { return first_1[key]; }), keys);
30815 }
30816 }
30817 if (typeof sources[sources.length - 1] === 'function') {
30818 var resultSelector_1 = sources.pop();
30819 sources = (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(sources[0])) ? sources[0] : sources;
30820 return forkJoinInternal(sources, null).pipe(Object(_operators_map__WEBPACK_IMPORTED_MODULE_2__["map"])(function (args) { return resultSelector_1.apply(void 0, args); }));
30821 }
30822 return forkJoinInternal(sources, null);
30823}
30824function forkJoinInternal(sources, keys) {
30825 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30826 var len = sources.length;
30827 if (len === 0) {
30828 subscriber.complete();
30829 return;
30830 }
30831 var values = new Array(len);
30832 var completed = 0;
30833 var emitted = 0;
30834 var _loop_1 = function (i) {
30835 var source = Object(_from__WEBPACK_IMPORTED_MODULE_4__["from"])(sources[i]);
30836 var hasValue = false;
30837 subscriber.add(source.subscribe({
30838 next: function (value) {
30839 if (!hasValue) {
30840 hasValue = true;
30841 emitted++;
30842 }
30843 values[i] = value;
30844 },
30845 error: function (err) { return subscriber.error(err); },
30846 complete: function () {
30847 completed++;
30848 if (completed === len || !hasValue) {
30849 if (emitted === len) {
30850 subscriber.next(keys ?
30851 keys.reduce(function (result, key, i) { return (result[key] = values[i], result); }, {}) :
30852 values);
30853 }
30854 subscriber.complete();
30855 }
30856 }
30857 }));
30858 };
30859 for (var i = 0; i < len; i++) {
30860 _loop_1(i);
30861 }
30862 });
30863}
30864//# sourceMappingURL=forkJoin.js.map
30865
30866
30867/***/ }),
30868/* 250 */
30869/***/ (function(module, __webpack_exports__, __webpack_require__) {
30870
30871"use strict";
30872__webpack_require__.r(__webpack_exports__);
30873/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEvent", function() { return fromEvent; });
30874/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30875/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
30876/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
30877/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
30878/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
30879
30880
30881
30882
30883var toString = /*@__PURE__*/ (function () { return Object.prototype.toString; })();
30884function fromEvent(target, eventName, options, resultSelector) {
30885 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(options)) {
30886 resultSelector = options;
30887 options = undefined;
30888 }
30889 if (resultSelector) {
30890 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); }));
30891 }
30892 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30893 function handler(e) {
30894 if (arguments.length > 1) {
30895 subscriber.next(Array.prototype.slice.call(arguments));
30896 }
30897 else {
30898 subscriber.next(e);
30899 }
30900 }
30901 setupSubscription(target, eventName, handler, subscriber, options);
30902 });
30903}
30904function setupSubscription(sourceObj, eventName, handler, subscriber, options) {
30905 var unsubscribe;
30906 if (isEventTarget(sourceObj)) {
30907 var source_1 = sourceObj;
30908 sourceObj.addEventListener(eventName, handler, options);
30909 unsubscribe = function () { return source_1.removeEventListener(eventName, handler, options); };
30910 }
30911 else if (isJQueryStyleEventEmitter(sourceObj)) {
30912 var source_2 = sourceObj;
30913 sourceObj.on(eventName, handler);
30914 unsubscribe = function () { return source_2.off(eventName, handler); };
30915 }
30916 else if (isNodeStyleEventEmitter(sourceObj)) {
30917 var source_3 = sourceObj;
30918 sourceObj.addListener(eventName, handler);
30919 unsubscribe = function () { return source_3.removeListener(eventName, handler); };
30920 }
30921 else if (sourceObj && sourceObj.length) {
30922 for (var i = 0, len = sourceObj.length; i < len; i++) {
30923 setupSubscription(sourceObj[i], eventName, handler, subscriber, options);
30924 }
30925 }
30926 else {
30927 throw new TypeError('Invalid event target');
30928 }
30929 subscriber.add(unsubscribe);
30930}
30931function isNodeStyleEventEmitter(sourceObj) {
30932 return sourceObj && typeof sourceObj.addListener === 'function' && typeof sourceObj.removeListener === 'function';
30933}
30934function isJQueryStyleEventEmitter(sourceObj) {
30935 return sourceObj && typeof sourceObj.on === 'function' && typeof sourceObj.off === 'function';
30936}
30937function isEventTarget(sourceObj) {
30938 return sourceObj && typeof sourceObj.addEventListener === 'function' && typeof sourceObj.removeEventListener === 'function';
30939}
30940//# sourceMappingURL=fromEvent.js.map
30941
30942
30943/***/ }),
30944/* 251 */
30945/***/ (function(module, __webpack_exports__, __webpack_require__) {
30946
30947"use strict";
30948__webpack_require__.r(__webpack_exports__);
30949/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "fromEventPattern", function() { return fromEventPattern; });
30950/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30951/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
30952/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(171);
30953/* harmony import */ var _operators_map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
30954/** PURE_IMPORTS_START _Observable,_util_isArray,_util_isFunction,_operators_map PURE_IMPORTS_END */
30955
30956
30957
30958
30959function fromEventPattern(addHandler, removeHandler, resultSelector) {
30960 if (resultSelector) {
30961 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); }));
30962 }
30963 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
30964 var handler = function () {
30965 var e = [];
30966 for (var _i = 0; _i < arguments.length; _i++) {
30967 e[_i] = arguments[_i];
30968 }
30969 return subscriber.next(e.length === 1 ? e[0] : e);
30970 };
30971 var retValue;
30972 try {
30973 retValue = addHandler(handler);
30974 }
30975 catch (err) {
30976 subscriber.error(err);
30977 return undefined;
30978 }
30979 if (!Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_2__["isFunction"])(removeHandler)) {
30980 return undefined;
30981 }
30982 return function () { return removeHandler(handler, retValue); };
30983 });
30984}
30985//# sourceMappingURL=fromEventPattern.js.map
30986
30987
30988/***/ }),
30989/* 252 */
30990/***/ (function(module, __webpack_exports__, __webpack_require__) {
30991
30992"use strict";
30993__webpack_require__.r(__webpack_exports__);
30994/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "generate", function() { return generate; });
30995/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
30996/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
30997/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(203);
30998/** PURE_IMPORTS_START _Observable,_util_identity,_util_isScheduler PURE_IMPORTS_END */
30999
31000
31001
31002function generate(initialStateOrOptions, condition, iterate, resultSelectorOrObservable, scheduler) {
31003 var resultSelector;
31004 var initialState;
31005 if (arguments.length == 1) {
31006 var options = initialStateOrOptions;
31007 initialState = options.initialState;
31008 condition = options.condition;
31009 iterate = options.iterate;
31010 resultSelector = options.resultSelector || _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
31011 scheduler = options.scheduler;
31012 }
31013 else if (resultSelectorOrObservable === undefined || Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_2__["isScheduler"])(resultSelectorOrObservable)) {
31014 initialState = initialStateOrOptions;
31015 resultSelector = _util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"];
31016 scheduler = resultSelectorOrObservable;
31017 }
31018 else {
31019 initialState = initialStateOrOptions;
31020 resultSelector = resultSelectorOrObservable;
31021 }
31022 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31023 var state = initialState;
31024 if (scheduler) {
31025 return scheduler.schedule(dispatch, 0, {
31026 subscriber: subscriber,
31027 iterate: iterate,
31028 condition: condition,
31029 resultSelector: resultSelector,
31030 state: state
31031 });
31032 }
31033 do {
31034 if (condition) {
31035 var conditionResult = void 0;
31036 try {
31037 conditionResult = condition(state);
31038 }
31039 catch (err) {
31040 subscriber.error(err);
31041 return undefined;
31042 }
31043 if (!conditionResult) {
31044 subscriber.complete();
31045 break;
31046 }
31047 }
31048 var value = void 0;
31049 try {
31050 value = resultSelector(state);
31051 }
31052 catch (err) {
31053 subscriber.error(err);
31054 return undefined;
31055 }
31056 subscriber.next(value);
31057 if (subscriber.closed) {
31058 break;
31059 }
31060 try {
31061 state = iterate(state);
31062 }
31063 catch (err) {
31064 subscriber.error(err);
31065 return undefined;
31066 }
31067 } while (true);
31068 return undefined;
31069 });
31070}
31071function dispatch(state) {
31072 var subscriber = state.subscriber, condition = state.condition;
31073 if (subscriber.closed) {
31074 return undefined;
31075 }
31076 if (state.needIterate) {
31077 try {
31078 state.state = state.iterate(state.state);
31079 }
31080 catch (err) {
31081 subscriber.error(err);
31082 return undefined;
31083 }
31084 }
31085 else {
31086 state.needIterate = true;
31087 }
31088 if (condition) {
31089 var conditionResult = void 0;
31090 try {
31091 conditionResult = condition(state.state);
31092 }
31093 catch (err) {
31094 subscriber.error(err);
31095 return undefined;
31096 }
31097 if (!conditionResult) {
31098 subscriber.complete();
31099 return undefined;
31100 }
31101 if (subscriber.closed) {
31102 return undefined;
31103 }
31104 }
31105 var value;
31106 try {
31107 value = state.resultSelector(state.state);
31108 }
31109 catch (err) {
31110 subscriber.error(err);
31111 return undefined;
31112 }
31113 if (subscriber.closed) {
31114 return undefined;
31115 }
31116 subscriber.next(value);
31117 if (subscriber.closed) {
31118 return undefined;
31119 }
31120 return this.schedule(state);
31121}
31122//# sourceMappingURL=generate.js.map
31123
31124
31125/***/ }),
31126/* 253 */
31127/***/ (function(module, __webpack_exports__, __webpack_require__) {
31128
31129"use strict";
31130__webpack_require__.r(__webpack_exports__);
31131/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "iif", function() { return iif; });
31132/* harmony import */ var _defer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(248);
31133/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(201);
31134/** PURE_IMPORTS_START _defer,_empty PURE_IMPORTS_END */
31135
31136
31137function iif(condition, trueResult, falseResult) {
31138 if (trueResult === void 0) {
31139 trueResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
31140 }
31141 if (falseResult === void 0) {
31142 falseResult = _empty__WEBPACK_IMPORTED_MODULE_1__["EMPTY"];
31143 }
31144 return Object(_defer__WEBPACK_IMPORTED_MODULE_0__["defer"])(function () { return condition() ? trueResult : falseResult; });
31145}
31146//# sourceMappingURL=iif.js.map
31147
31148
31149/***/ }),
31150/* 254 */
31151/***/ (function(module, __webpack_exports__, __webpack_require__) {
31152
31153"use strict";
31154__webpack_require__.r(__webpack_exports__);
31155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "interval", function() { return interval; });
31156/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31157/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
31158/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
31159/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric PURE_IMPORTS_END */
31160
31161
31162
31163function interval(period, scheduler) {
31164 if (period === void 0) {
31165 period = 0;
31166 }
31167 if (scheduler === void 0) {
31168 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31169 }
31170 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(period) || period < 0) {
31171 period = 0;
31172 }
31173 if (!scheduler || typeof scheduler.schedule !== 'function') {
31174 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31175 }
31176 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31177 subscriber.add(scheduler.schedule(dispatch, period, { subscriber: subscriber, counter: 0, period: period }));
31178 return subscriber;
31179 });
31180}
31181function dispatch(state) {
31182 var subscriber = state.subscriber, counter = state.counter, period = state.period;
31183 subscriber.next(counter);
31184 this.schedule({ subscriber: subscriber, counter: counter + 1, period: period }, period);
31185}
31186//# sourceMappingURL=interval.js.map
31187
31188
31189/***/ }),
31190/* 255 */
31191/***/ (function(module, __webpack_exports__, __webpack_require__) {
31192
31193"use strict";
31194__webpack_require__.r(__webpack_exports__);
31195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isNumeric", function() { return isNumeric; });
31196/* harmony import */ var _isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
31197/** PURE_IMPORTS_START _isArray PURE_IMPORTS_END */
31198
31199function isNumeric(val) {
31200 return !Object(_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(val) && (val - parseFloat(val) + 1) >= 0;
31201}
31202//# sourceMappingURL=isNumeric.js.map
31203
31204
31205/***/ }),
31206/* 256 */
31207/***/ (function(module, __webpack_exports__, __webpack_require__) {
31208
31209"use strict";
31210__webpack_require__.r(__webpack_exports__);
31211/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
31212/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31213/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
31214/* harmony import */ var _operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(239);
31215/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(204);
31216/** PURE_IMPORTS_START _Observable,_util_isScheduler,_operators_mergeAll,_fromArray PURE_IMPORTS_END */
31217
31218
31219
31220
31221function merge() {
31222 var observables = [];
31223 for (var _i = 0; _i < arguments.length; _i++) {
31224 observables[_i] = arguments[_i];
31225 }
31226 var concurrent = Number.POSITIVE_INFINITY;
31227 var scheduler = null;
31228 var last = observables[observables.length - 1];
31229 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(last)) {
31230 scheduler = observables.pop();
31231 if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
31232 concurrent = observables.pop();
31233 }
31234 }
31235 else if (typeof last === 'number') {
31236 concurrent = observables.pop();
31237 }
31238 if (scheduler === null && observables.length === 1 && observables[0] instanceof _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"]) {
31239 return observables[0];
31240 }
31241 return Object(_operators_mergeAll__WEBPACK_IMPORTED_MODULE_2__["mergeAll"])(concurrent)(Object(_fromArray__WEBPACK_IMPORTED_MODULE_3__["fromArray"])(observables, scheduler));
31242}
31243//# sourceMappingURL=merge.js.map
31244
31245
31246/***/ }),
31247/* 257 */
31248/***/ (function(module, __webpack_exports__, __webpack_require__) {
31249
31250"use strict";
31251__webpack_require__.r(__webpack_exports__);
31252/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NEVER", function() { return NEVER; });
31253/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "never", function() { return never; });
31254/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31255/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(218);
31256/** PURE_IMPORTS_START _Observable,_util_noop PURE_IMPORTS_END */
31257
31258
31259var NEVER = /*@__PURE__*/ new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](_util_noop__WEBPACK_IMPORTED_MODULE_1__["noop"]);
31260function never() {
31261 return NEVER;
31262}
31263//# sourceMappingURL=never.js.map
31264
31265
31266/***/ }),
31267/* 258 */
31268/***/ (function(module, __webpack_exports__, __webpack_require__) {
31269
31270"use strict";
31271__webpack_require__.r(__webpack_exports__);
31272/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
31273/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31274/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
31275/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
31276/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
31277/** PURE_IMPORTS_START _Observable,_from,_util_isArray,_empty PURE_IMPORTS_END */
31278
31279
31280
31281
31282function onErrorResumeNext() {
31283 var sources = [];
31284 for (var _i = 0; _i < arguments.length; _i++) {
31285 sources[_i] = arguments[_i];
31286 }
31287 if (sources.length === 0) {
31288 return _empty__WEBPACK_IMPORTED_MODULE_3__["EMPTY"];
31289 }
31290 var first = sources[0], remainder = sources.slice(1);
31291 if (sources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(first)) {
31292 return onErrorResumeNext.apply(void 0, first);
31293 }
31294 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31295 var subNext = function () { return subscriber.add(onErrorResumeNext.apply(void 0, remainder).subscribe(subscriber)); };
31296 return Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(first).subscribe({
31297 next: function (value) { subscriber.next(value); },
31298 error: subNext,
31299 complete: subNext,
31300 });
31301 });
31302}
31303//# sourceMappingURL=onErrorResumeNext.js.map
31304
31305
31306/***/ }),
31307/* 259 */
31308/***/ (function(module, __webpack_exports__, __webpack_require__) {
31309
31310"use strict";
31311__webpack_require__.r(__webpack_exports__);
31312/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairs", function() { return pairs; });
31313/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
31314/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31315/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
31316/** PURE_IMPORTS_START _Observable,_Subscription PURE_IMPORTS_END */
31317
31318
31319function pairs(obj, scheduler) {
31320 if (!scheduler) {
31321 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31322 var keys = Object.keys(obj);
31323 for (var i = 0; i < keys.length && !subscriber.closed; i++) {
31324 var key = keys[i];
31325 if (obj.hasOwnProperty(key)) {
31326 subscriber.next([key, obj[key]]);
31327 }
31328 }
31329 subscriber.complete();
31330 });
31331 }
31332 else {
31333 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31334 var keys = Object.keys(obj);
31335 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
31336 subscription.add(scheduler.schedule(dispatch, 0, { keys: keys, index: 0, subscriber: subscriber, subscription: subscription, obj: obj }));
31337 return subscription;
31338 });
31339 }
31340}
31341function dispatch(state) {
31342 var keys = state.keys, index = state.index, subscriber = state.subscriber, subscription = state.subscription, obj = state.obj;
31343 if (!subscriber.closed) {
31344 if (index < keys.length) {
31345 var key = keys[index];
31346 subscriber.next([key, obj[key]]);
31347 subscription.add(this.schedule({ keys: keys, index: index + 1, subscriber: subscriber, subscription: subscription, obj: obj }));
31348 }
31349 else {
31350 subscriber.complete();
31351 }
31352 }
31353}
31354//# sourceMappingURL=pairs.js.map
31355
31356
31357/***/ }),
31358/* 260 */
31359/***/ (function(module, __webpack_exports__, __webpack_require__) {
31360
31361"use strict";
31362__webpack_require__.r(__webpack_exports__);
31363/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
31364/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(261);
31365/* harmony import */ var _util_subscribeTo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(230);
31366/* harmony import */ var _operators_filter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(262);
31367/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(167);
31368/** PURE_IMPORTS_START _util_not,_util_subscribeTo,_operators_filter,_Observable PURE_IMPORTS_END */
31369
31370
31371
31372
31373function partition(source, predicate, thisArg) {
31374 return [
31375 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))),
31376 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)))
31377 ];
31378}
31379//# sourceMappingURL=partition.js.map
31380
31381
31382/***/ }),
31383/* 261 */
31384/***/ (function(module, __webpack_exports__, __webpack_require__) {
31385
31386"use strict";
31387__webpack_require__.r(__webpack_exports__);
31388/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "not", function() { return not; });
31389/** PURE_IMPORTS_START PURE_IMPORTS_END */
31390function not(pred, thisArg) {
31391 function notPred() {
31392 return !(notPred.pred.apply(notPred.thisArg, arguments));
31393 }
31394 notPred.pred = pred;
31395 notPred.thisArg = thisArg;
31396 return notPred;
31397}
31398//# sourceMappingURL=not.js.map
31399
31400
31401/***/ }),
31402/* 262 */
31403/***/ (function(module, __webpack_exports__, __webpack_require__) {
31404
31405"use strict";
31406__webpack_require__.r(__webpack_exports__);
31407/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return filter; });
31408/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31409/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
31410/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
31411
31412
31413function filter(predicate, thisArg) {
31414 return function filterOperatorFunction(source) {
31415 return source.lift(new FilterOperator(predicate, thisArg));
31416 };
31417}
31418var FilterOperator = /*@__PURE__*/ (function () {
31419 function FilterOperator(predicate, thisArg) {
31420 this.predicate = predicate;
31421 this.thisArg = thisArg;
31422 }
31423 FilterOperator.prototype.call = function (subscriber, source) {
31424 return source.subscribe(new FilterSubscriber(subscriber, this.predicate, this.thisArg));
31425 };
31426 return FilterOperator;
31427}());
31428var FilterSubscriber = /*@__PURE__*/ (function (_super) {
31429 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FilterSubscriber, _super);
31430 function FilterSubscriber(destination, predicate, thisArg) {
31431 var _this = _super.call(this, destination) || this;
31432 _this.predicate = predicate;
31433 _this.thisArg = thisArg;
31434 _this.count = 0;
31435 return _this;
31436 }
31437 FilterSubscriber.prototype._next = function (value) {
31438 var result;
31439 try {
31440 result = this.predicate.call(this.thisArg, value, this.count++);
31441 }
31442 catch (err) {
31443 this.destination.error(err);
31444 return;
31445 }
31446 if (result) {
31447 this.destination.next(value);
31448 }
31449 };
31450 return FilterSubscriber;
31451}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
31452//# sourceMappingURL=filter.js.map
31453
31454
31455/***/ }),
31456/* 263 */
31457/***/ (function(module, __webpack_exports__, __webpack_require__) {
31458
31459"use strict";
31460__webpack_require__.r(__webpack_exports__);
31461/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
31462/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceOperator", function() { return RaceOperator; });
31463/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RaceSubscriber", function() { return RaceSubscriber; });
31464/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31465/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(176);
31466/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(204);
31467/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
31468/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
31469/** PURE_IMPORTS_START tslib,_util_isArray,_fromArray,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
31470
31471
31472
31473
31474
31475function race() {
31476 var observables = [];
31477 for (var _i = 0; _i < arguments.length; _i++) {
31478 observables[_i] = arguments[_i];
31479 }
31480 if (observables.length === 1) {
31481 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_1__["isArray"])(observables[0])) {
31482 observables = observables[0];
31483 }
31484 else {
31485 return observables[0];
31486 }
31487 }
31488 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_2__["fromArray"])(observables, undefined).lift(new RaceOperator());
31489}
31490var RaceOperator = /*@__PURE__*/ (function () {
31491 function RaceOperator() {
31492 }
31493 RaceOperator.prototype.call = function (subscriber, source) {
31494 return source.subscribe(new RaceSubscriber(subscriber));
31495 };
31496 return RaceOperator;
31497}());
31498
31499var RaceSubscriber = /*@__PURE__*/ (function (_super) {
31500 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RaceSubscriber, _super);
31501 function RaceSubscriber(destination) {
31502 var _this = _super.call(this, destination) || this;
31503 _this.hasFirst = false;
31504 _this.observables = [];
31505 _this.subscriptions = [];
31506 return _this;
31507 }
31508 RaceSubscriber.prototype._next = function (observable) {
31509 this.observables.push(observable);
31510 };
31511 RaceSubscriber.prototype._complete = function () {
31512 var observables = this.observables;
31513 var len = observables.length;
31514 if (len === 0) {
31515 this.destination.complete();
31516 }
31517 else {
31518 for (var i = 0; i < len && !this.hasFirst; i++) {
31519 var observable = observables[i];
31520 var subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, observable, observable, i);
31521 if (this.subscriptions) {
31522 this.subscriptions.push(subscription);
31523 }
31524 this.add(subscription);
31525 }
31526 this.observables = null;
31527 }
31528 };
31529 RaceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31530 if (!this.hasFirst) {
31531 this.hasFirst = true;
31532 for (var i = 0; i < this.subscriptions.length; i++) {
31533 if (i !== outerIndex) {
31534 var subscription = this.subscriptions[i];
31535 subscription.unsubscribe();
31536 this.remove(subscription);
31537 }
31538 }
31539 this.subscriptions = null;
31540 }
31541 this.destination.next(innerValue);
31542 };
31543 return RaceSubscriber;
31544}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
31545
31546//# sourceMappingURL=race.js.map
31547
31548
31549/***/ }),
31550/* 264 */
31551/***/ (function(module, __webpack_exports__, __webpack_require__) {
31552
31553"use strict";
31554__webpack_require__.r(__webpack_exports__);
31555/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "range", function() { return range; });
31556/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dispatch", function() { return dispatch; });
31557/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31558/** PURE_IMPORTS_START _Observable PURE_IMPORTS_END */
31559
31560function range(start, count, scheduler) {
31561 if (start === void 0) {
31562 start = 0;
31563 }
31564 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31565 if (count === undefined) {
31566 count = start;
31567 start = 0;
31568 }
31569 var index = 0;
31570 var current = start;
31571 if (scheduler) {
31572 return scheduler.schedule(dispatch, 0, {
31573 index: index, count: count, start: start, subscriber: subscriber
31574 });
31575 }
31576 else {
31577 do {
31578 if (index++ >= count) {
31579 subscriber.complete();
31580 break;
31581 }
31582 subscriber.next(current++);
31583 if (subscriber.closed) {
31584 break;
31585 }
31586 } while (true);
31587 }
31588 return undefined;
31589 });
31590}
31591function dispatch(state) {
31592 var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
31593 if (index >= count) {
31594 subscriber.complete();
31595 return;
31596 }
31597 subscriber.next(start);
31598 if (subscriber.closed) {
31599 return;
31600 }
31601 state.index = index + 1;
31602 state.start = start + 1;
31603 this.schedule(state);
31604}
31605//# sourceMappingURL=range.js.map
31606
31607
31608/***/ }),
31609/* 265 */
31610/***/ (function(module, __webpack_exports__, __webpack_require__) {
31611
31612"use strict";
31613__webpack_require__.r(__webpack_exports__);
31614/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timer", function() { return timer; });
31615/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31616/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
31617/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(255);
31618/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(203);
31619/** PURE_IMPORTS_START _Observable,_scheduler_async,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
31620
31621
31622
31623
31624function timer(dueTime, periodOrScheduler, scheduler) {
31625 if (dueTime === void 0) {
31626 dueTime = 0;
31627 }
31628 var period = -1;
31629 if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(periodOrScheduler)) {
31630 period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
31631 }
31632 else if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(periodOrScheduler)) {
31633 scheduler = periodOrScheduler;
31634 }
31635 if (!Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(scheduler)) {
31636 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
31637 }
31638 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31639 var due = Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_2__["isNumeric"])(dueTime)
31640 ? dueTime
31641 : (+dueTime - scheduler.now());
31642 return scheduler.schedule(dispatch, due, {
31643 index: 0, period: period, subscriber: subscriber
31644 });
31645 });
31646}
31647function dispatch(state) {
31648 var index = state.index, period = state.period, subscriber = state.subscriber;
31649 subscriber.next(index);
31650 if (subscriber.closed) {
31651 return;
31652 }
31653 else if (period === -1) {
31654 return subscriber.complete();
31655 }
31656 state.index = index + 1;
31657 this.schedule(state, period);
31658}
31659//# sourceMappingURL=timer.js.map
31660
31661
31662/***/ }),
31663/* 266 */
31664/***/ (function(module, __webpack_exports__, __webpack_require__) {
31665
31666"use strict";
31667__webpack_require__.r(__webpack_exports__);
31668/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "using", function() { return using; });
31669/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(167);
31670/* harmony import */ var _from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
31671/* harmony import */ var _empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
31672/** PURE_IMPORTS_START _Observable,_from,_empty PURE_IMPORTS_END */
31673
31674
31675
31676function using(resourceFactory, observableFactory) {
31677 return new _Observable__WEBPACK_IMPORTED_MODULE_0__["Observable"](function (subscriber) {
31678 var resource;
31679 try {
31680 resource = resourceFactory();
31681 }
31682 catch (err) {
31683 subscriber.error(err);
31684 return undefined;
31685 }
31686 var result;
31687 try {
31688 result = observableFactory(resource);
31689 }
31690 catch (err) {
31691 subscriber.error(err);
31692 return undefined;
31693 }
31694 var source = result ? Object(_from__WEBPACK_IMPORTED_MODULE_1__["from"])(result) : _empty__WEBPACK_IMPORTED_MODULE_2__["EMPTY"];
31695 var subscription = source.subscribe(subscriber);
31696 return function () {
31697 subscription.unsubscribe();
31698 if (resource) {
31699 resource.unsubscribe();
31700 }
31701 };
31702 });
31703}
31704//# sourceMappingURL=using.js.map
31705
31706
31707/***/ }),
31708/* 267 */
31709/***/ (function(module, __webpack_exports__, __webpack_require__) {
31710
31711"use strict";
31712__webpack_require__.r(__webpack_exports__);
31713/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
31714/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipOperator", function() { return ZipOperator; });
31715/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ZipSubscriber", function() { return ZipSubscriber; });
31716/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
31717/* harmony import */ var _fromArray__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(204);
31718/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
31719/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
31720/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(227);
31721/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(228);
31722/* harmony import */ var _internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(233);
31723/** PURE_IMPORTS_START tslib,_fromArray,_util_isArray,_Subscriber,_OuterSubscriber,_util_subscribeToResult,_.._internal_symbol_iterator PURE_IMPORTS_END */
31724
31725
31726
31727
31728
31729
31730
31731function zip() {
31732 var observables = [];
31733 for (var _i = 0; _i < arguments.length; _i++) {
31734 observables[_i] = arguments[_i];
31735 }
31736 var resultSelector = observables[observables.length - 1];
31737 if (typeof resultSelector === 'function') {
31738 observables.pop();
31739 }
31740 return Object(_fromArray__WEBPACK_IMPORTED_MODULE_1__["fromArray"])(observables, undefined).lift(new ZipOperator(resultSelector));
31741}
31742var ZipOperator = /*@__PURE__*/ (function () {
31743 function ZipOperator(resultSelector) {
31744 this.resultSelector = resultSelector;
31745 }
31746 ZipOperator.prototype.call = function (subscriber, source) {
31747 return source.subscribe(new ZipSubscriber(subscriber, this.resultSelector));
31748 };
31749 return ZipOperator;
31750}());
31751
31752var ZipSubscriber = /*@__PURE__*/ (function (_super) {
31753 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipSubscriber, _super);
31754 function ZipSubscriber(destination, resultSelector, values) {
31755 if (values === void 0) {
31756 values = Object.create(null);
31757 }
31758 var _this = _super.call(this, destination) || this;
31759 _this.iterators = [];
31760 _this.active = 0;
31761 _this.resultSelector = (typeof resultSelector === 'function') ? resultSelector : null;
31762 _this.values = values;
31763 return _this;
31764 }
31765 ZipSubscriber.prototype._next = function (value) {
31766 var iterators = this.iterators;
31767 if (Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(value)) {
31768 iterators.push(new StaticArrayIterator(value));
31769 }
31770 else if (typeof value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] === 'function') {
31771 iterators.push(new StaticIterator(value[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]]()));
31772 }
31773 else {
31774 iterators.push(new ZipBufferIterator(this.destination, this, value));
31775 }
31776 };
31777 ZipSubscriber.prototype._complete = function () {
31778 var iterators = this.iterators;
31779 var len = iterators.length;
31780 this.unsubscribe();
31781 if (len === 0) {
31782 this.destination.complete();
31783 return;
31784 }
31785 this.active = len;
31786 for (var i = 0; i < len; i++) {
31787 var iterator = iterators[i];
31788 if (iterator.stillUnsubscribed) {
31789 var destination = this.destination;
31790 destination.add(iterator.subscribe(iterator, i));
31791 }
31792 else {
31793 this.active--;
31794 }
31795 }
31796 };
31797 ZipSubscriber.prototype.notifyInactive = function () {
31798 this.active--;
31799 if (this.active === 0) {
31800 this.destination.complete();
31801 }
31802 };
31803 ZipSubscriber.prototype.checkIterators = function () {
31804 var iterators = this.iterators;
31805 var len = iterators.length;
31806 var destination = this.destination;
31807 for (var i = 0; i < len; i++) {
31808 var iterator = iterators[i];
31809 if (typeof iterator.hasValue === 'function' && !iterator.hasValue()) {
31810 return;
31811 }
31812 }
31813 var shouldComplete = false;
31814 var args = [];
31815 for (var i = 0; i < len; i++) {
31816 var iterator = iterators[i];
31817 var result = iterator.next();
31818 if (iterator.hasCompleted()) {
31819 shouldComplete = true;
31820 }
31821 if (result.done) {
31822 destination.complete();
31823 return;
31824 }
31825 args.push(result.value);
31826 }
31827 if (this.resultSelector) {
31828 this._tryresultSelector(args);
31829 }
31830 else {
31831 destination.next(args);
31832 }
31833 if (shouldComplete) {
31834 destination.complete();
31835 }
31836 };
31837 ZipSubscriber.prototype._tryresultSelector = function (args) {
31838 var result;
31839 try {
31840 result = this.resultSelector.apply(this, args);
31841 }
31842 catch (err) {
31843 this.destination.error(err);
31844 return;
31845 }
31846 this.destination.next(result);
31847 };
31848 return ZipSubscriber;
31849}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
31850
31851var StaticIterator = /*@__PURE__*/ (function () {
31852 function StaticIterator(iterator) {
31853 this.iterator = iterator;
31854 this.nextResult = iterator.next();
31855 }
31856 StaticIterator.prototype.hasValue = function () {
31857 return true;
31858 };
31859 StaticIterator.prototype.next = function () {
31860 var result = this.nextResult;
31861 this.nextResult = this.iterator.next();
31862 return result;
31863 };
31864 StaticIterator.prototype.hasCompleted = function () {
31865 var nextResult = this.nextResult;
31866 return nextResult && nextResult.done;
31867 };
31868 return StaticIterator;
31869}());
31870var StaticArrayIterator = /*@__PURE__*/ (function () {
31871 function StaticArrayIterator(array) {
31872 this.array = array;
31873 this.index = 0;
31874 this.length = 0;
31875 this.length = array.length;
31876 }
31877 StaticArrayIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
31878 return this;
31879 };
31880 StaticArrayIterator.prototype.next = function (value) {
31881 var i = this.index++;
31882 var array = this.array;
31883 return i < this.length ? { value: array[i], done: false } : { value: null, done: true };
31884 };
31885 StaticArrayIterator.prototype.hasValue = function () {
31886 return this.array.length > this.index;
31887 };
31888 StaticArrayIterator.prototype.hasCompleted = function () {
31889 return this.array.length === this.index;
31890 };
31891 return StaticArrayIterator;
31892}());
31893var ZipBufferIterator = /*@__PURE__*/ (function (_super) {
31894 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ZipBufferIterator, _super);
31895 function ZipBufferIterator(destination, parent, observable) {
31896 var _this = _super.call(this, destination) || this;
31897 _this.parent = parent;
31898 _this.observable = observable;
31899 _this.stillUnsubscribed = true;
31900 _this.buffer = [];
31901 _this.isComplete = false;
31902 return _this;
31903 }
31904 ZipBufferIterator.prototype[_internal_symbol_iterator__WEBPACK_IMPORTED_MODULE_6__["iterator"]] = function () {
31905 return this;
31906 };
31907 ZipBufferIterator.prototype.next = function () {
31908 var buffer = this.buffer;
31909 if (buffer.length === 0 && this.isComplete) {
31910 return { value: null, done: true };
31911 }
31912 else {
31913 return { value: buffer.shift(), done: false };
31914 }
31915 };
31916 ZipBufferIterator.prototype.hasValue = function () {
31917 return this.buffer.length > 0;
31918 };
31919 ZipBufferIterator.prototype.hasCompleted = function () {
31920 return this.buffer.length === 0 && this.isComplete;
31921 };
31922 ZipBufferIterator.prototype.notifyComplete = function () {
31923 if (this.buffer.length > 0) {
31924 this.isComplete = true;
31925 this.parent.notifyInactive();
31926 }
31927 else {
31928 this.destination.complete();
31929 }
31930 };
31931 ZipBufferIterator.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
31932 this.buffer.push(innerValue);
31933 this.parent.checkIterators();
31934 };
31935 ZipBufferIterator.prototype.subscribe = function (value, index) {
31936 return Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, this.observable, this, index);
31937 };
31938 return ZipBufferIterator;
31939}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_4__["OuterSubscriber"]));
31940//# sourceMappingURL=zip.js.map
31941
31942
31943/***/ }),
31944/* 268 */
31945/***/ (function(module, exports, __webpack_require__) {
31946
31947"use strict";
31948
31949Object.defineProperty(exports, "__esModule", { value: true });
31950var rxjs_1 = __webpack_require__(166);
31951/**
31952 *
31953 * only keep the lastest source observable value until the inner observable complete,
31954 * then trigger the lastest source observable value
31955 *
31956 * @param isAbandon - is abandon inner observable value when there is newer source observable value
31957 *
31958 */
31959function waitMap(fn, isAbandon) {
31960 if (isAbandon === void 0) { isAbandon = true; }
31961 return function (preObs) {
31962 return rxjs_1.Observable.create(function (observer) {
31963 var closed = false;
31964 var latestRes;
31965 var resultSubp;
31966 var subp;
31967 var run = function (res) {
31968 var obs = fn(res);
31969 return obs.subscribe({
31970 next: function (res) {
31971 if (latestRes !== undefined && isAbandon) {
31972 return;
31973 }
31974 observer.next(res);
31975 },
31976 error: function (err) {
31977 closed = true;
31978 observer.error(err);
31979 resultSubp.unsubscribe();
31980 },
31981 complete: function () {
31982 if (latestRes && !closed) {
31983 var res_1 = latestRes;
31984 latestRes = undefined;
31985 run(res_1);
31986 }
31987 }
31988 });
31989 };
31990 resultSubp = preObs.subscribe({
31991 next: function (res) {
31992 latestRes = res;
31993 if (!subp || subp.closed) {
31994 latestRes = undefined;
31995 subp = run(res);
31996 }
31997 },
31998 error: function (err) {
31999 closed = true;
32000 observer.error(err);
32001 },
32002 complete: function () {
32003 closed = true;
32004 observer.complete();
32005 }
32006 });
32007 return resultSubp;
32008 });
32009 };
32010}
32011exports.waitMap = waitMap;
32012
32013
32014/***/ }),
32015/* 269 */
32016/***/ (function(module, __webpack_exports__, __webpack_require__) {
32017
32018"use strict";
32019__webpack_require__.r(__webpack_exports__);
32020/* harmony import */ var _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(270);
32021/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return _internal_operators_audit__WEBPACK_IMPORTED_MODULE_0__["audit"]; });
32022
32023/* harmony import */ var _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(271);
32024/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return _internal_operators_auditTime__WEBPACK_IMPORTED_MODULE_1__["auditTime"]; });
32025
32026/* harmony import */ var _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(272);
32027/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return _internal_operators_buffer__WEBPACK_IMPORTED_MODULE_2__["buffer"]; });
32028
32029/* harmony import */ var _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(273);
32030/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return _internal_operators_bufferCount__WEBPACK_IMPORTED_MODULE_3__["bufferCount"]; });
32031
32032/* harmony import */ var _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(274);
32033/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return _internal_operators_bufferTime__WEBPACK_IMPORTED_MODULE_4__["bufferTime"]; });
32034
32035/* harmony import */ var _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(275);
32036/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return _internal_operators_bufferToggle__WEBPACK_IMPORTED_MODULE_5__["bufferToggle"]; });
32037
32038/* harmony import */ var _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(276);
32039/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return _internal_operators_bufferWhen__WEBPACK_IMPORTED_MODULE_6__["bufferWhen"]; });
32040
32041/* harmony import */ var _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(277);
32042/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return _internal_operators_catchError__WEBPACK_IMPORTED_MODULE_7__["catchError"]; });
32043
32044/* harmony import */ var _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(278);
32045/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return _internal_operators_combineAll__WEBPACK_IMPORTED_MODULE_8__["combineAll"]; });
32046
32047/* harmony import */ var _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(279);
32048/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return _internal_operators_combineLatest__WEBPACK_IMPORTED_MODULE_9__["combineLatest"]; });
32049
32050/* harmony import */ var _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(280);
32051/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return _internal_operators_concat__WEBPACK_IMPORTED_MODULE_10__["concat"]; });
32052
32053/* harmony import */ var _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(238);
32054/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatAll", function() { return _internal_operators_concatAll__WEBPACK_IMPORTED_MODULE_11__["concatAll"]; });
32055
32056/* harmony import */ var _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(281);
32057/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return _internal_operators_concatMap__WEBPACK_IMPORTED_MODULE_12__["concatMap"]; });
32058
32059/* harmony import */ var _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(282);
32060/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return _internal_operators_concatMapTo__WEBPACK_IMPORTED_MODULE_13__["concatMapTo"]; });
32061
32062/* harmony import */ var _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(283);
32063/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "count", function() { return _internal_operators_count__WEBPACK_IMPORTED_MODULE_14__["count"]; });
32064
32065/* harmony import */ var _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(284);
32066/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return _internal_operators_debounce__WEBPACK_IMPORTED_MODULE_15__["debounce"]; });
32067
32068/* harmony import */ var _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(285);
32069/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return _internal_operators_debounceTime__WEBPACK_IMPORTED_MODULE_16__["debounceTime"]; });
32070
32071/* harmony import */ var _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(286);
32072/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return _internal_operators_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_17__["defaultIfEmpty"]; });
32073
32074/* harmony import */ var _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(287);
32075/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return _internal_operators_delay__WEBPACK_IMPORTED_MODULE_18__["delay"]; });
32076
32077/* harmony import */ var _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(289);
32078/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return _internal_operators_delayWhen__WEBPACK_IMPORTED_MODULE_19__["delayWhen"]; });
32079
32080/* harmony import */ var _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(290);
32081/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return _internal_operators_dematerialize__WEBPACK_IMPORTED_MODULE_20__["dematerialize"]; });
32082
32083/* harmony import */ var _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(291);
32084/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return _internal_operators_distinct__WEBPACK_IMPORTED_MODULE_21__["distinct"]; });
32085
32086/* harmony import */ var _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(292);
32087/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return _internal_operators_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_22__["distinctUntilChanged"]; });
32088
32089/* harmony import */ var _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(293);
32090/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return _internal_operators_distinctUntilKeyChanged__WEBPACK_IMPORTED_MODULE_23__["distinctUntilKeyChanged"]; });
32091
32092/* harmony import */ var _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(294);
32093/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return _internal_operators_elementAt__WEBPACK_IMPORTED_MODULE_24__["elementAt"]; });
32094
32095/* harmony import */ var _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(297);
32096/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return _internal_operators_endWith__WEBPACK_IMPORTED_MODULE_25__["endWith"]; });
32097
32098/* harmony import */ var _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(298);
32099/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "every", function() { return _internal_operators_every__WEBPACK_IMPORTED_MODULE_26__["every"]; });
32100
32101/* harmony import */ var _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(299);
32102/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return _internal_operators_exhaust__WEBPACK_IMPORTED_MODULE_27__["exhaust"]; });
32103
32104/* harmony import */ var _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(300);
32105/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return _internal_operators_exhaustMap__WEBPACK_IMPORTED_MODULE_28__["exhaustMap"]; });
32106
32107/* harmony import */ var _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(301);
32108/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return _internal_operators_expand__WEBPACK_IMPORTED_MODULE_29__["expand"]; });
32109
32110/* harmony import */ var _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(262);
32111/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return _internal_operators_filter__WEBPACK_IMPORTED_MODULE_30__["filter"]; });
32112
32113/* harmony import */ var _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(302);
32114/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return _internal_operators_finalize__WEBPACK_IMPORTED_MODULE_31__["finalize"]; });
32115
32116/* harmony import */ var _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(303);
32117/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "find", function() { return _internal_operators_find__WEBPACK_IMPORTED_MODULE_32__["find"]; });
32118
32119/* harmony import */ var _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(304);
32120/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return _internal_operators_findIndex__WEBPACK_IMPORTED_MODULE_33__["findIndex"]; });
32121
32122/* harmony import */ var _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(305);
32123/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "first", function() { return _internal_operators_first__WEBPACK_IMPORTED_MODULE_34__["first"]; });
32124
32125/* harmony import */ var _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(189);
32126/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "groupBy", function() { return _internal_operators_groupBy__WEBPACK_IMPORTED_MODULE_35__["groupBy"]; });
32127
32128/* harmony import */ var _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(306);
32129/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return _internal_operators_ignoreElements__WEBPACK_IMPORTED_MODULE_36__["ignoreElements"]; });
32130
32131/* harmony import */ var _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(307);
32132/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return _internal_operators_isEmpty__WEBPACK_IMPORTED_MODULE_37__["isEmpty"]; });
32133
32134/* harmony import */ var _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(308);
32135/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "last", function() { return _internal_operators_last__WEBPACK_IMPORTED_MODULE_38__["last"]; });
32136
32137/* harmony import */ var _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(224);
32138/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "map", function() { return _internal_operators_map__WEBPACK_IMPORTED_MODULE_39__["map"]; });
32139
32140/* harmony import */ var _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__ = __webpack_require__(310);
32141/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return _internal_operators_mapTo__WEBPACK_IMPORTED_MODULE_40__["mapTo"]; });
32142
32143/* harmony import */ var _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__ = __webpack_require__(311);
32144/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return _internal_operators_materialize__WEBPACK_IMPORTED_MODULE_41__["materialize"]; });
32145
32146/* harmony import */ var _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__ = __webpack_require__(312);
32147/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "max", function() { return _internal_operators_max__WEBPACK_IMPORTED_MODULE_42__["max"]; });
32148
32149/* harmony import */ var _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__ = __webpack_require__(315);
32150/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return _internal_operators_merge__WEBPACK_IMPORTED_MODULE_43__["merge"]; });
32151
32152/* harmony import */ var _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__ = __webpack_require__(239);
32153/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeAll", function() { return _internal_operators_mergeAll__WEBPACK_IMPORTED_MODULE_44__["mergeAll"]; });
32154
32155/* harmony import */ var _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__ = __webpack_require__(240);
32156/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
32157
32158/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "flatMap", function() { return _internal_operators_mergeMap__WEBPACK_IMPORTED_MODULE_45__["mergeMap"]; });
32159
32160/* harmony import */ var _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__ = __webpack_require__(316);
32161/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return _internal_operators_mergeMapTo__WEBPACK_IMPORTED_MODULE_46__["mergeMapTo"]; });
32162
32163/* harmony import */ var _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__ = __webpack_require__(317);
32164/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return _internal_operators_mergeScan__WEBPACK_IMPORTED_MODULE_47__["mergeScan"]; });
32165
32166/* harmony import */ var _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__ = __webpack_require__(318);
32167/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "min", function() { return _internal_operators_min__WEBPACK_IMPORTED_MODULE_48__["min"]; });
32168
32169/* harmony import */ var _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__ = __webpack_require__(319);
32170/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return _internal_operators_multicast__WEBPACK_IMPORTED_MODULE_49__["multicast"]; });
32171
32172/* harmony import */ var _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__ = __webpack_require__(199);
32173/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "observeOn", function() { return _internal_operators_observeOn__WEBPACK_IMPORTED_MODULE_50__["observeOn"]; });
32174
32175/* harmony import */ var _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__ = __webpack_require__(320);
32176/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return _internal_operators_onErrorResumeNext__WEBPACK_IMPORTED_MODULE_51__["onErrorResumeNext"]; });
32177
32178/* harmony import */ var _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__ = __webpack_require__(321);
32179/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return _internal_operators_pairwise__WEBPACK_IMPORTED_MODULE_52__["pairwise"]; });
32180
32181/* harmony import */ var _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__ = __webpack_require__(322);
32182/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return _internal_operators_partition__WEBPACK_IMPORTED_MODULE_53__["partition"]; });
32183
32184/* harmony import */ var _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__ = __webpack_require__(323);
32185/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return _internal_operators_pluck__WEBPACK_IMPORTED_MODULE_54__["pluck"]; });
32186
32187/* harmony import */ var _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__ = __webpack_require__(324);
32188/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return _internal_operators_publish__WEBPACK_IMPORTED_MODULE_55__["publish"]; });
32189
32190/* harmony import */ var _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__ = __webpack_require__(325);
32191/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return _internal_operators_publishBehavior__WEBPACK_IMPORTED_MODULE_56__["publishBehavior"]; });
32192
32193/* harmony import */ var _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__ = __webpack_require__(326);
32194/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return _internal_operators_publishLast__WEBPACK_IMPORTED_MODULE_57__["publishLast"]; });
32195
32196/* harmony import */ var _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__ = __webpack_require__(327);
32197/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return _internal_operators_publishReplay__WEBPACK_IMPORTED_MODULE_58__["publishReplay"]; });
32198
32199/* harmony import */ var _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__ = __webpack_require__(328);
32200/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "race", function() { return _internal_operators_race__WEBPACK_IMPORTED_MODULE_59__["race"]; });
32201
32202/* harmony import */ var _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__ = __webpack_require__(313);
32203/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return _internal_operators_reduce__WEBPACK_IMPORTED_MODULE_60__["reduce"]; });
32204
32205/* harmony import */ var _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__ = __webpack_require__(329);
32206/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return _internal_operators_repeat__WEBPACK_IMPORTED_MODULE_61__["repeat"]; });
32207
32208/* harmony import */ var _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__ = __webpack_require__(330);
32209/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return _internal_operators_repeatWhen__WEBPACK_IMPORTED_MODULE_62__["repeatWhen"]; });
32210
32211/* harmony import */ var _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__ = __webpack_require__(331);
32212/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return _internal_operators_retry__WEBPACK_IMPORTED_MODULE_63__["retry"]; });
32213
32214/* harmony import */ var _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__ = __webpack_require__(332);
32215/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return _internal_operators_retryWhen__WEBPACK_IMPORTED_MODULE_64__["retryWhen"]; });
32216
32217/* harmony import */ var _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__ = __webpack_require__(188);
32218/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "refCount", function() { return _internal_operators_refCount__WEBPACK_IMPORTED_MODULE_65__["refCount"]; });
32219
32220/* harmony import */ var _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__ = __webpack_require__(333);
32221/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return _internal_operators_sample__WEBPACK_IMPORTED_MODULE_66__["sample"]; });
32222
32223/* harmony import */ var _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__ = __webpack_require__(334);
32224/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return _internal_operators_sampleTime__WEBPACK_IMPORTED_MODULE_67__["sampleTime"]; });
32225
32226/* harmony import */ var _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__ = __webpack_require__(314);
32227/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return _internal_operators_scan__WEBPACK_IMPORTED_MODULE_68__["scan"]; });
32228
32229/* harmony import */ var _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__ = __webpack_require__(335);
32230/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return _internal_operators_sequenceEqual__WEBPACK_IMPORTED_MODULE_69__["sequenceEqual"]; });
32231
32232/* harmony import */ var _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__ = __webpack_require__(336);
32233/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "share", function() { return _internal_operators_share__WEBPACK_IMPORTED_MODULE_70__["share"]; });
32234
32235/* harmony import */ var _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__ = __webpack_require__(337);
32236/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return _internal_operators_shareReplay__WEBPACK_IMPORTED_MODULE_71__["shareReplay"]; });
32237
32238/* harmony import */ var _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__ = __webpack_require__(338);
32239/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "single", function() { return _internal_operators_single__WEBPACK_IMPORTED_MODULE_72__["single"]; });
32240
32241/* harmony import */ var _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__ = __webpack_require__(339);
32242/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return _internal_operators_skip__WEBPACK_IMPORTED_MODULE_73__["skip"]; });
32243
32244/* harmony import */ var _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__ = __webpack_require__(340);
32245/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return _internal_operators_skipLast__WEBPACK_IMPORTED_MODULE_74__["skipLast"]; });
32246
32247/* harmony import */ var _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__ = __webpack_require__(341);
32248/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return _internal_operators_skipUntil__WEBPACK_IMPORTED_MODULE_75__["skipUntil"]; });
32249
32250/* harmony import */ var _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__ = __webpack_require__(342);
32251/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return _internal_operators_skipWhile__WEBPACK_IMPORTED_MODULE_76__["skipWhile"]; });
32252
32253/* harmony import */ var _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__ = __webpack_require__(343);
32254/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return _internal_operators_startWith__WEBPACK_IMPORTED_MODULE_77__["startWith"]; });
32255
32256/* harmony import */ var _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__ = __webpack_require__(344);
32257/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return _internal_operators_subscribeOn__WEBPACK_IMPORTED_MODULE_78__["subscribeOn"]; });
32258
32259/* harmony import */ var _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__ = __webpack_require__(346);
32260/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return _internal_operators_switchAll__WEBPACK_IMPORTED_MODULE_79__["switchAll"]; });
32261
32262/* harmony import */ var _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__ = __webpack_require__(347);
32263/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return _internal_operators_switchMap__WEBPACK_IMPORTED_MODULE_80__["switchMap"]; });
32264
32265/* harmony import */ var _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__ = __webpack_require__(348);
32266/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return _internal_operators_switchMapTo__WEBPACK_IMPORTED_MODULE_81__["switchMapTo"]; });
32267
32268/* harmony import */ var _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__ = __webpack_require__(296);
32269/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "take", function() { return _internal_operators_take__WEBPACK_IMPORTED_MODULE_82__["take"]; });
32270
32271/* harmony import */ var _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__ = __webpack_require__(309);
32272/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return _internal_operators_takeLast__WEBPACK_IMPORTED_MODULE_83__["takeLast"]; });
32273
32274/* harmony import */ var _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__ = __webpack_require__(349);
32275/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return _internal_operators_takeUntil__WEBPACK_IMPORTED_MODULE_84__["takeUntil"]; });
32276
32277/* harmony import */ var _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__ = __webpack_require__(350);
32278/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return _internal_operators_takeWhile__WEBPACK_IMPORTED_MODULE_85__["takeWhile"]; });
32279
32280/* harmony import */ var _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__ = __webpack_require__(351);
32281/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return _internal_operators_tap__WEBPACK_IMPORTED_MODULE_86__["tap"]; });
32282
32283/* harmony import */ var _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__ = __webpack_require__(352);
32284/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return _internal_operators_throttle__WEBPACK_IMPORTED_MODULE_87__["throttle"]; });
32285
32286/* harmony import */ var _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__ = __webpack_require__(353);
32287/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return _internal_operators_throttleTime__WEBPACK_IMPORTED_MODULE_88__["throttleTime"]; });
32288
32289/* harmony import */ var _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__ = __webpack_require__(295);
32290/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return _internal_operators_throwIfEmpty__WEBPACK_IMPORTED_MODULE_89__["throwIfEmpty"]; });
32291
32292/* harmony import */ var _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__ = __webpack_require__(354);
32293/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return _internal_operators_timeInterval__WEBPACK_IMPORTED_MODULE_90__["timeInterval"]; });
32294
32295/* harmony import */ var _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__ = __webpack_require__(355);
32296/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return _internal_operators_timeout__WEBPACK_IMPORTED_MODULE_91__["timeout"]; });
32297
32298/* harmony import */ var _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__ = __webpack_require__(356);
32299/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return _internal_operators_timeoutWith__WEBPACK_IMPORTED_MODULE_92__["timeoutWith"]; });
32300
32301/* harmony import */ var _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__ = __webpack_require__(357);
32302/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return _internal_operators_timestamp__WEBPACK_IMPORTED_MODULE_93__["timestamp"]; });
32303
32304/* harmony import */ var _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__ = __webpack_require__(358);
32305/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return _internal_operators_toArray__WEBPACK_IMPORTED_MODULE_94__["toArray"]; });
32306
32307/* harmony import */ var _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__ = __webpack_require__(359);
32308/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "window", function() { return _internal_operators_window__WEBPACK_IMPORTED_MODULE_95__["window"]; });
32309
32310/* harmony import */ var _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__ = __webpack_require__(360);
32311/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return _internal_operators_windowCount__WEBPACK_IMPORTED_MODULE_96__["windowCount"]; });
32312
32313/* harmony import */ var _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__ = __webpack_require__(361);
32314/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return _internal_operators_windowTime__WEBPACK_IMPORTED_MODULE_97__["windowTime"]; });
32315
32316/* harmony import */ var _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__ = __webpack_require__(362);
32317/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return _internal_operators_windowToggle__WEBPACK_IMPORTED_MODULE_98__["windowToggle"]; });
32318
32319/* harmony import */ var _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__ = __webpack_require__(363);
32320/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return _internal_operators_windowWhen__WEBPACK_IMPORTED_MODULE_99__["windowWhen"]; });
32321
32322/* harmony import */ var _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__ = __webpack_require__(364);
32323/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return _internal_operators_withLatestFrom__WEBPACK_IMPORTED_MODULE_100__["withLatestFrom"]; });
32324
32325/* harmony import */ var _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__ = __webpack_require__(365);
32326/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return _internal_operators_zip__WEBPACK_IMPORTED_MODULE_101__["zip"]; });
32327
32328/* harmony import */ var _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__ = __webpack_require__(366);
32329/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return _internal_operators_zipAll__WEBPACK_IMPORTED_MODULE_102__["zipAll"]; });
32330
32331/** PURE_IMPORTS_START PURE_IMPORTS_END */
32332
32333
32334
32335
32336
32337
32338
32339
32340
32341
32342
32343
32344
32345
32346
32347
32348
32349
32350
32351
32352
32353
32354
32355
32356
32357
32358
32359
32360
32361
32362
32363
32364
32365
32366
32367
32368
32369
32370
32371
32372
32373
32374
32375
32376
32377
32378
32379
32380
32381
32382
32383
32384
32385
32386
32387
32388
32389
32390
32391
32392
32393
32394
32395
32396
32397
32398
32399
32400
32401
32402
32403
32404
32405
32406
32407
32408
32409
32410
32411
32412
32413
32414
32415
32416
32417
32418
32419
32420
32421
32422
32423
32424
32425
32426
32427
32428
32429
32430
32431
32432
32433
32434
32435
32436//# sourceMappingURL=index.js.map
32437
32438
32439/***/ }),
32440/* 270 */
32441/***/ (function(module, __webpack_exports__, __webpack_require__) {
32442
32443"use strict";
32444__webpack_require__.r(__webpack_exports__);
32445/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "audit", function() { return audit; });
32446/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32447/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
32448/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32449/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32450
32451
32452
32453function audit(durationSelector) {
32454 return function auditOperatorFunction(source) {
32455 return source.lift(new AuditOperator(durationSelector));
32456 };
32457}
32458var AuditOperator = /*@__PURE__*/ (function () {
32459 function AuditOperator(durationSelector) {
32460 this.durationSelector = durationSelector;
32461 }
32462 AuditOperator.prototype.call = function (subscriber, source) {
32463 return source.subscribe(new AuditSubscriber(subscriber, this.durationSelector));
32464 };
32465 return AuditOperator;
32466}());
32467var AuditSubscriber = /*@__PURE__*/ (function (_super) {
32468 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](AuditSubscriber, _super);
32469 function AuditSubscriber(destination, durationSelector) {
32470 var _this = _super.call(this, destination) || this;
32471 _this.durationSelector = durationSelector;
32472 _this.hasValue = false;
32473 return _this;
32474 }
32475 AuditSubscriber.prototype._next = function (value) {
32476 this.value = value;
32477 this.hasValue = true;
32478 if (!this.throttled) {
32479 var duration = void 0;
32480 try {
32481 var durationSelector = this.durationSelector;
32482 duration = durationSelector(value);
32483 }
32484 catch (err) {
32485 return this.destination.error(err);
32486 }
32487 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
32488 if (!innerSubscription || innerSubscription.closed) {
32489 this.clearThrottle();
32490 }
32491 else {
32492 this.add(this.throttled = innerSubscription);
32493 }
32494 }
32495 };
32496 AuditSubscriber.prototype.clearThrottle = function () {
32497 var _a = this, value = _a.value, hasValue = _a.hasValue, throttled = _a.throttled;
32498 if (throttled) {
32499 this.remove(throttled);
32500 this.throttled = null;
32501 throttled.unsubscribe();
32502 }
32503 if (hasValue) {
32504 this.value = null;
32505 this.hasValue = false;
32506 this.destination.next(value);
32507 }
32508 };
32509 AuditSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex) {
32510 this.clearThrottle();
32511 };
32512 AuditSubscriber.prototype.notifyComplete = function () {
32513 this.clearThrottle();
32514 };
32515 return AuditSubscriber;
32516}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32517//# sourceMappingURL=audit.js.map
32518
32519
32520/***/ }),
32521/* 271 */
32522/***/ (function(module, __webpack_exports__, __webpack_require__) {
32523
32524"use strict";
32525__webpack_require__.r(__webpack_exports__);
32526/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "auditTime", function() { return auditTime; });
32527/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
32528/* harmony import */ var _audit__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(270);
32529/* harmony import */ var _observable_timer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(265);
32530/** PURE_IMPORTS_START _scheduler_async,_audit,_observable_timer PURE_IMPORTS_END */
32531
32532
32533
32534function auditTime(duration, scheduler) {
32535 if (scheduler === void 0) {
32536 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
32537 }
32538 return Object(_audit__WEBPACK_IMPORTED_MODULE_1__["audit"])(function () { return Object(_observable_timer__WEBPACK_IMPORTED_MODULE_2__["timer"])(duration, scheduler); });
32539}
32540//# sourceMappingURL=auditTime.js.map
32541
32542
32543/***/ }),
32544/* 272 */
32545/***/ (function(module, __webpack_exports__, __webpack_require__) {
32546
32547"use strict";
32548__webpack_require__.r(__webpack_exports__);
32549/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "buffer", function() { return buffer; });
32550/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32551/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
32552/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32553/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32554
32555
32556
32557function buffer(closingNotifier) {
32558 return function bufferOperatorFunction(source) {
32559 return source.lift(new BufferOperator(closingNotifier));
32560 };
32561}
32562var BufferOperator = /*@__PURE__*/ (function () {
32563 function BufferOperator(closingNotifier) {
32564 this.closingNotifier = closingNotifier;
32565 }
32566 BufferOperator.prototype.call = function (subscriber, source) {
32567 return source.subscribe(new BufferSubscriber(subscriber, this.closingNotifier));
32568 };
32569 return BufferOperator;
32570}());
32571var BufferSubscriber = /*@__PURE__*/ (function (_super) {
32572 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSubscriber, _super);
32573 function BufferSubscriber(destination, closingNotifier) {
32574 var _this = _super.call(this, destination) || this;
32575 _this.buffer = [];
32576 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, closingNotifier));
32577 return _this;
32578 }
32579 BufferSubscriber.prototype._next = function (value) {
32580 this.buffer.push(value);
32581 };
32582 BufferSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32583 var buffer = this.buffer;
32584 this.buffer = [];
32585 this.destination.next(buffer);
32586 };
32587 return BufferSubscriber;
32588}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
32589//# sourceMappingURL=buffer.js.map
32590
32591
32592/***/ }),
32593/* 273 */
32594/***/ (function(module, __webpack_exports__, __webpack_require__) {
32595
32596"use strict";
32597__webpack_require__.r(__webpack_exports__);
32598/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferCount", function() { return bufferCount; });
32599/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32600/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
32601/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
32602
32603
32604function bufferCount(bufferSize, startBufferEvery) {
32605 if (startBufferEvery === void 0) {
32606 startBufferEvery = null;
32607 }
32608 return function bufferCountOperatorFunction(source) {
32609 return source.lift(new BufferCountOperator(bufferSize, startBufferEvery));
32610 };
32611}
32612var BufferCountOperator = /*@__PURE__*/ (function () {
32613 function BufferCountOperator(bufferSize, startBufferEvery) {
32614 this.bufferSize = bufferSize;
32615 this.startBufferEvery = startBufferEvery;
32616 if (!startBufferEvery || bufferSize === startBufferEvery) {
32617 this.subscriberClass = BufferCountSubscriber;
32618 }
32619 else {
32620 this.subscriberClass = BufferSkipCountSubscriber;
32621 }
32622 }
32623 BufferCountOperator.prototype.call = function (subscriber, source) {
32624 return source.subscribe(new this.subscriberClass(subscriber, this.bufferSize, this.startBufferEvery));
32625 };
32626 return BufferCountOperator;
32627}());
32628var BufferCountSubscriber = /*@__PURE__*/ (function (_super) {
32629 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferCountSubscriber, _super);
32630 function BufferCountSubscriber(destination, bufferSize) {
32631 var _this = _super.call(this, destination) || this;
32632 _this.bufferSize = bufferSize;
32633 _this.buffer = [];
32634 return _this;
32635 }
32636 BufferCountSubscriber.prototype._next = function (value) {
32637 var buffer = this.buffer;
32638 buffer.push(value);
32639 if (buffer.length == this.bufferSize) {
32640 this.destination.next(buffer);
32641 this.buffer = [];
32642 }
32643 };
32644 BufferCountSubscriber.prototype._complete = function () {
32645 var buffer = this.buffer;
32646 if (buffer.length > 0) {
32647 this.destination.next(buffer);
32648 }
32649 _super.prototype._complete.call(this);
32650 };
32651 return BufferCountSubscriber;
32652}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32653var BufferSkipCountSubscriber = /*@__PURE__*/ (function (_super) {
32654 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferSkipCountSubscriber, _super);
32655 function BufferSkipCountSubscriber(destination, bufferSize, startBufferEvery) {
32656 var _this = _super.call(this, destination) || this;
32657 _this.bufferSize = bufferSize;
32658 _this.startBufferEvery = startBufferEvery;
32659 _this.buffers = [];
32660 _this.count = 0;
32661 return _this;
32662 }
32663 BufferSkipCountSubscriber.prototype._next = function (value) {
32664 var _a = this, bufferSize = _a.bufferSize, startBufferEvery = _a.startBufferEvery, buffers = _a.buffers, count = _a.count;
32665 this.count++;
32666 if (count % startBufferEvery === 0) {
32667 buffers.push([]);
32668 }
32669 for (var i = buffers.length; i--;) {
32670 var buffer = buffers[i];
32671 buffer.push(value);
32672 if (buffer.length === bufferSize) {
32673 buffers.splice(i, 1);
32674 this.destination.next(buffer);
32675 }
32676 }
32677 };
32678 BufferSkipCountSubscriber.prototype._complete = function () {
32679 var _a = this, buffers = _a.buffers, destination = _a.destination;
32680 while (buffers.length > 0) {
32681 var buffer = buffers.shift();
32682 if (buffer.length > 0) {
32683 destination.next(buffer);
32684 }
32685 }
32686 _super.prototype._complete.call(this);
32687 };
32688 return BufferSkipCountSubscriber;
32689}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
32690//# sourceMappingURL=bufferCount.js.map
32691
32692
32693/***/ }),
32694/* 274 */
32695/***/ (function(module, __webpack_exports__, __webpack_require__) {
32696
32697"use strict";
32698__webpack_require__.r(__webpack_exports__);
32699/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferTime", function() { return bufferTime; });
32700/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32701/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
32702/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
32703/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(203);
32704/** PURE_IMPORTS_START tslib,_scheduler_async,_Subscriber,_util_isScheduler PURE_IMPORTS_END */
32705
32706
32707
32708
32709function bufferTime(bufferTimeSpan) {
32710 var length = arguments.length;
32711 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
32712 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_3__["isScheduler"])(arguments[arguments.length - 1])) {
32713 scheduler = arguments[arguments.length - 1];
32714 length--;
32715 }
32716 var bufferCreationInterval = null;
32717 if (length >= 2) {
32718 bufferCreationInterval = arguments[1];
32719 }
32720 var maxBufferSize = Number.POSITIVE_INFINITY;
32721 if (length >= 3) {
32722 maxBufferSize = arguments[2];
32723 }
32724 return function bufferTimeOperatorFunction(source) {
32725 return source.lift(new BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler));
32726 };
32727}
32728var BufferTimeOperator = /*@__PURE__*/ (function () {
32729 function BufferTimeOperator(bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32730 this.bufferTimeSpan = bufferTimeSpan;
32731 this.bufferCreationInterval = bufferCreationInterval;
32732 this.maxBufferSize = maxBufferSize;
32733 this.scheduler = scheduler;
32734 }
32735 BufferTimeOperator.prototype.call = function (subscriber, source) {
32736 return source.subscribe(new BufferTimeSubscriber(subscriber, this.bufferTimeSpan, this.bufferCreationInterval, this.maxBufferSize, this.scheduler));
32737 };
32738 return BufferTimeOperator;
32739}());
32740var Context = /*@__PURE__*/ (function () {
32741 function Context() {
32742 this.buffer = [];
32743 }
32744 return Context;
32745}());
32746var BufferTimeSubscriber = /*@__PURE__*/ (function (_super) {
32747 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferTimeSubscriber, _super);
32748 function BufferTimeSubscriber(destination, bufferTimeSpan, bufferCreationInterval, maxBufferSize, scheduler) {
32749 var _this = _super.call(this, destination) || this;
32750 _this.bufferTimeSpan = bufferTimeSpan;
32751 _this.bufferCreationInterval = bufferCreationInterval;
32752 _this.maxBufferSize = maxBufferSize;
32753 _this.scheduler = scheduler;
32754 _this.contexts = [];
32755 var context = _this.openContext();
32756 _this.timespanOnly = bufferCreationInterval == null || bufferCreationInterval < 0;
32757 if (_this.timespanOnly) {
32758 var timeSpanOnlyState = { subscriber: _this, context: context, bufferTimeSpan: bufferTimeSpan };
32759 _this.add(context.closeAction = scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32760 }
32761 else {
32762 var closeState = { subscriber: _this, context: context };
32763 var creationState = { bufferTimeSpan: bufferTimeSpan, bufferCreationInterval: bufferCreationInterval, subscriber: _this, scheduler: scheduler };
32764 _this.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, closeState));
32765 _this.add(scheduler.schedule(dispatchBufferCreation, bufferCreationInterval, creationState));
32766 }
32767 return _this;
32768 }
32769 BufferTimeSubscriber.prototype._next = function (value) {
32770 var contexts = this.contexts;
32771 var len = contexts.length;
32772 var filledBufferContext;
32773 for (var i = 0; i < len; i++) {
32774 var context_1 = contexts[i];
32775 var buffer = context_1.buffer;
32776 buffer.push(value);
32777 if (buffer.length == this.maxBufferSize) {
32778 filledBufferContext = context_1;
32779 }
32780 }
32781 if (filledBufferContext) {
32782 this.onBufferFull(filledBufferContext);
32783 }
32784 };
32785 BufferTimeSubscriber.prototype._error = function (err) {
32786 this.contexts.length = 0;
32787 _super.prototype._error.call(this, err);
32788 };
32789 BufferTimeSubscriber.prototype._complete = function () {
32790 var _a = this, contexts = _a.contexts, destination = _a.destination;
32791 while (contexts.length > 0) {
32792 var context_2 = contexts.shift();
32793 destination.next(context_2.buffer);
32794 }
32795 _super.prototype._complete.call(this);
32796 };
32797 BufferTimeSubscriber.prototype._unsubscribe = function () {
32798 this.contexts = null;
32799 };
32800 BufferTimeSubscriber.prototype.onBufferFull = function (context) {
32801 this.closeContext(context);
32802 var closeAction = context.closeAction;
32803 closeAction.unsubscribe();
32804 this.remove(closeAction);
32805 if (!this.closed && this.timespanOnly) {
32806 context = this.openContext();
32807 var bufferTimeSpan = this.bufferTimeSpan;
32808 var timeSpanOnlyState = { subscriber: this, context: context, bufferTimeSpan: bufferTimeSpan };
32809 this.add(context.closeAction = this.scheduler.schedule(dispatchBufferTimeSpanOnly, bufferTimeSpan, timeSpanOnlyState));
32810 }
32811 };
32812 BufferTimeSubscriber.prototype.openContext = function () {
32813 var context = new Context();
32814 this.contexts.push(context);
32815 return context;
32816 };
32817 BufferTimeSubscriber.prototype.closeContext = function (context) {
32818 this.destination.next(context.buffer);
32819 var contexts = this.contexts;
32820 var spliceIndex = contexts ? contexts.indexOf(context) : -1;
32821 if (spliceIndex >= 0) {
32822 contexts.splice(contexts.indexOf(context), 1);
32823 }
32824 };
32825 return BufferTimeSubscriber;
32826}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
32827function dispatchBufferTimeSpanOnly(state) {
32828 var subscriber = state.subscriber;
32829 var prevContext = state.context;
32830 if (prevContext) {
32831 subscriber.closeContext(prevContext);
32832 }
32833 if (!subscriber.closed) {
32834 state.context = subscriber.openContext();
32835 state.context.closeAction = this.schedule(state, state.bufferTimeSpan);
32836 }
32837}
32838function dispatchBufferCreation(state) {
32839 var bufferCreationInterval = state.bufferCreationInterval, bufferTimeSpan = state.bufferTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler;
32840 var context = subscriber.openContext();
32841 var action = this;
32842 if (!subscriber.closed) {
32843 subscriber.add(context.closeAction = scheduler.schedule(dispatchBufferClose, bufferTimeSpan, { subscriber: subscriber, context: context }));
32844 action.schedule(state, bufferCreationInterval);
32845 }
32846}
32847function dispatchBufferClose(arg) {
32848 var subscriber = arg.subscriber, context = arg.context;
32849 subscriber.closeContext(context);
32850}
32851//# sourceMappingURL=bufferTime.js.map
32852
32853
32854/***/ }),
32855/* 275 */
32856/***/ (function(module, __webpack_exports__, __webpack_require__) {
32857
32858"use strict";
32859__webpack_require__.r(__webpack_exports__);
32860/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferToggle", function() { return bufferToggle; });
32861/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32862/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
32863/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
32864/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
32865/** PURE_IMPORTS_START tslib,_Subscription,_util_subscribeToResult,_OuterSubscriber PURE_IMPORTS_END */
32866
32867
32868
32869
32870function bufferToggle(openings, closingSelector) {
32871 return function bufferToggleOperatorFunction(source) {
32872 return source.lift(new BufferToggleOperator(openings, closingSelector));
32873 };
32874}
32875var BufferToggleOperator = /*@__PURE__*/ (function () {
32876 function BufferToggleOperator(openings, closingSelector) {
32877 this.openings = openings;
32878 this.closingSelector = closingSelector;
32879 }
32880 BufferToggleOperator.prototype.call = function (subscriber, source) {
32881 return source.subscribe(new BufferToggleSubscriber(subscriber, this.openings, this.closingSelector));
32882 };
32883 return BufferToggleOperator;
32884}());
32885var BufferToggleSubscriber = /*@__PURE__*/ (function (_super) {
32886 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferToggleSubscriber, _super);
32887 function BufferToggleSubscriber(destination, openings, closingSelector) {
32888 var _this = _super.call(this, destination) || this;
32889 _this.openings = openings;
32890 _this.closingSelector = closingSelector;
32891 _this.contexts = [];
32892 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, openings));
32893 return _this;
32894 }
32895 BufferToggleSubscriber.prototype._next = function (value) {
32896 var contexts = this.contexts;
32897 var len = contexts.length;
32898 for (var i = 0; i < len; i++) {
32899 contexts[i].buffer.push(value);
32900 }
32901 };
32902 BufferToggleSubscriber.prototype._error = function (err) {
32903 var contexts = this.contexts;
32904 while (contexts.length > 0) {
32905 var context_1 = contexts.shift();
32906 context_1.subscription.unsubscribe();
32907 context_1.buffer = null;
32908 context_1.subscription = null;
32909 }
32910 this.contexts = null;
32911 _super.prototype._error.call(this, err);
32912 };
32913 BufferToggleSubscriber.prototype._complete = function () {
32914 var contexts = this.contexts;
32915 while (contexts.length > 0) {
32916 var context_2 = contexts.shift();
32917 this.destination.next(context_2.buffer);
32918 context_2.subscription.unsubscribe();
32919 context_2.buffer = null;
32920 context_2.subscription = null;
32921 }
32922 this.contexts = null;
32923 _super.prototype._complete.call(this);
32924 };
32925 BufferToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
32926 outerValue ? this.closeBuffer(outerValue) : this.openBuffer(innerValue);
32927 };
32928 BufferToggleSubscriber.prototype.notifyComplete = function (innerSub) {
32929 this.closeBuffer(innerSub.context);
32930 };
32931 BufferToggleSubscriber.prototype.openBuffer = function (value) {
32932 try {
32933 var closingSelector = this.closingSelector;
32934 var closingNotifier = closingSelector.call(this, value);
32935 if (closingNotifier) {
32936 this.trySubscribe(closingNotifier);
32937 }
32938 }
32939 catch (err) {
32940 this._error(err);
32941 }
32942 };
32943 BufferToggleSubscriber.prototype.closeBuffer = function (context) {
32944 var contexts = this.contexts;
32945 if (contexts && context) {
32946 var buffer = context.buffer, subscription = context.subscription;
32947 this.destination.next(buffer);
32948 contexts.splice(contexts.indexOf(context), 1);
32949 this.remove(subscription);
32950 subscription.unsubscribe();
32951 }
32952 };
32953 BufferToggleSubscriber.prototype.trySubscribe = function (closingNotifier) {
32954 var contexts = this.contexts;
32955 var buffer = [];
32956 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
32957 var context = { buffer: buffer, subscription: subscription };
32958 contexts.push(context);
32959 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, closingNotifier, context);
32960 if (!innerSubscription || innerSubscription.closed) {
32961 this.closeBuffer(context);
32962 }
32963 else {
32964 innerSubscription.context = context;
32965 this.add(innerSubscription);
32966 subscription.add(innerSubscription);
32967 }
32968 };
32969 return BufferToggleSubscriber;
32970}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
32971//# sourceMappingURL=bufferToggle.js.map
32972
32973
32974/***/ }),
32975/* 276 */
32976/***/ (function(module, __webpack_exports__, __webpack_require__) {
32977
32978"use strict";
32979__webpack_require__.r(__webpack_exports__);
32980/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "bufferWhen", function() { return bufferWhen; });
32981/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
32982/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(175);
32983/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
32984/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
32985/** PURE_IMPORTS_START tslib,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
32986
32987
32988
32989
32990function bufferWhen(closingSelector) {
32991 return function (source) {
32992 return source.lift(new BufferWhenOperator(closingSelector));
32993 };
32994}
32995var BufferWhenOperator = /*@__PURE__*/ (function () {
32996 function BufferWhenOperator(closingSelector) {
32997 this.closingSelector = closingSelector;
32998 }
32999 BufferWhenOperator.prototype.call = function (subscriber, source) {
33000 return source.subscribe(new BufferWhenSubscriber(subscriber, this.closingSelector));
33001 };
33002 return BufferWhenOperator;
33003}());
33004var BufferWhenSubscriber = /*@__PURE__*/ (function (_super) {
33005 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](BufferWhenSubscriber, _super);
33006 function BufferWhenSubscriber(destination, closingSelector) {
33007 var _this = _super.call(this, destination) || this;
33008 _this.closingSelector = closingSelector;
33009 _this.subscribing = false;
33010 _this.openBuffer();
33011 return _this;
33012 }
33013 BufferWhenSubscriber.prototype._next = function (value) {
33014 this.buffer.push(value);
33015 };
33016 BufferWhenSubscriber.prototype._complete = function () {
33017 var buffer = this.buffer;
33018 if (buffer) {
33019 this.destination.next(buffer);
33020 }
33021 _super.prototype._complete.call(this);
33022 };
33023 BufferWhenSubscriber.prototype._unsubscribe = function () {
33024 this.buffer = null;
33025 this.subscribing = false;
33026 };
33027 BufferWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33028 this.openBuffer();
33029 };
33030 BufferWhenSubscriber.prototype.notifyComplete = function () {
33031 if (this.subscribing) {
33032 this.complete();
33033 }
33034 else {
33035 this.openBuffer();
33036 }
33037 };
33038 BufferWhenSubscriber.prototype.openBuffer = function () {
33039 var closingSubscription = this.closingSubscription;
33040 if (closingSubscription) {
33041 this.remove(closingSubscription);
33042 closingSubscription.unsubscribe();
33043 }
33044 var buffer = this.buffer;
33045 if (this.buffer) {
33046 this.destination.next(buffer);
33047 }
33048 this.buffer = [];
33049 var closingNotifier;
33050 try {
33051 var closingSelector = this.closingSelector;
33052 closingNotifier = closingSelector();
33053 }
33054 catch (err) {
33055 return this.error(err);
33056 }
33057 closingSubscription = new _Subscription__WEBPACK_IMPORTED_MODULE_1__["Subscription"]();
33058 this.closingSubscription = closingSubscription;
33059 this.add(closingSubscription);
33060 this.subscribing = true;
33061 closingSubscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
33062 this.subscribing = false;
33063 };
33064 return BufferWhenSubscriber;
33065}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
33066//# sourceMappingURL=bufferWhen.js.map
33067
33068
33069/***/ }),
33070/* 277 */
33071/***/ (function(module, __webpack_exports__, __webpack_require__) {
33072
33073"use strict";
33074__webpack_require__.r(__webpack_exports__);
33075/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "catchError", function() { return catchError; });
33076/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33077/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33078/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
33079/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
33080/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33081
33082
33083
33084
33085function catchError(selector) {
33086 return function catchErrorOperatorFunction(source) {
33087 var operator = new CatchOperator(selector);
33088 var caught = source.lift(operator);
33089 return (operator.caught = caught);
33090 };
33091}
33092var CatchOperator = /*@__PURE__*/ (function () {
33093 function CatchOperator(selector) {
33094 this.selector = selector;
33095 }
33096 CatchOperator.prototype.call = function (subscriber, source) {
33097 return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
33098 };
33099 return CatchOperator;
33100}());
33101var CatchSubscriber = /*@__PURE__*/ (function (_super) {
33102 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CatchSubscriber, _super);
33103 function CatchSubscriber(destination, selector, caught) {
33104 var _this = _super.call(this, destination) || this;
33105 _this.selector = selector;
33106 _this.caught = caught;
33107 return _this;
33108 }
33109 CatchSubscriber.prototype.error = function (err) {
33110 if (!this.isStopped) {
33111 var result = void 0;
33112 try {
33113 result = this.selector(err, this.caught);
33114 }
33115 catch (err2) {
33116 _super.prototype.error.call(this, err2);
33117 return;
33118 }
33119 this._unsubscribeAndRecycle();
33120 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, undefined, undefined);
33121 this.add(innerSubscriber);
33122 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
33123 if (innerSubscription !== innerSubscriber) {
33124 this.add(innerSubscription);
33125 }
33126 }
33127 };
33128 return CatchSubscriber;
33129}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33130//# sourceMappingURL=catchError.js.map
33131
33132
33133/***/ }),
33134/* 278 */
33135/***/ (function(module, __webpack_exports__, __webpack_require__) {
33136
33137"use strict";
33138__webpack_require__.r(__webpack_exports__);
33139/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineAll", function() { return combineAll; });
33140/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(226);
33141/** PURE_IMPORTS_START _observable_combineLatest PURE_IMPORTS_END */
33142
33143function combineAll(project) {
33144 return function (source) { return source.lift(new _observable_combineLatest__WEBPACK_IMPORTED_MODULE_0__["CombineLatestOperator"](project)); };
33145}
33146//# sourceMappingURL=combineAll.js.map
33147
33148
33149/***/ }),
33150/* 279 */
33151/***/ (function(module, __webpack_exports__, __webpack_require__) {
33152
33153"use strict";
33154__webpack_require__.r(__webpack_exports__);
33155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "combineLatest", function() { return combineLatest; });
33156/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
33157/* harmony import */ var _observable_combineLatest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(226);
33158/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(241);
33159/** PURE_IMPORTS_START _util_isArray,_observable_combineLatest,_observable_from PURE_IMPORTS_END */
33160
33161
33162
33163var none = {};
33164function combineLatest() {
33165 var observables = [];
33166 for (var _i = 0; _i < arguments.length; _i++) {
33167 observables[_i] = arguments[_i];
33168 }
33169 var project = null;
33170 if (typeof observables[observables.length - 1] === 'function') {
33171 project = observables.pop();
33172 }
33173 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
33174 observables = observables[0].slice();
33175 }
33176 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)); };
33177}
33178//# sourceMappingURL=combineLatest.js.map
33179
33180
33181/***/ }),
33182/* 280 */
33183/***/ (function(module, __webpack_exports__, __webpack_require__) {
33184
33185"use strict";
33186__webpack_require__.r(__webpack_exports__);
33187/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concat", function() { return concat; });
33188/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
33189/** PURE_IMPORTS_START _observable_concat PURE_IMPORTS_END */
33190
33191function concat() {
33192 var observables = [];
33193 for (var _i = 0; _i < arguments.length; _i++) {
33194 observables[_i] = arguments[_i];
33195 }
33196 return function (source) { return source.lift.call(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"].apply(void 0, [source].concat(observables))); };
33197}
33198//# sourceMappingURL=concat.js.map
33199
33200
33201/***/ }),
33202/* 281 */
33203/***/ (function(module, __webpack_exports__, __webpack_require__) {
33204
33205"use strict";
33206__webpack_require__.r(__webpack_exports__);
33207/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMap", function() { return concatMap; });
33208/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
33209/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
33210
33211function concatMap(project, resultSelector) {
33212 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(project, resultSelector, 1);
33213}
33214//# sourceMappingURL=concatMap.js.map
33215
33216
33217/***/ }),
33218/* 282 */
33219/***/ (function(module, __webpack_exports__, __webpack_require__) {
33220
33221"use strict";
33222__webpack_require__.r(__webpack_exports__);
33223/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "concatMapTo", function() { return concatMapTo; });
33224/* harmony import */ var _concatMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(281);
33225/** PURE_IMPORTS_START _concatMap PURE_IMPORTS_END */
33226
33227function concatMapTo(innerObservable, resultSelector) {
33228 return Object(_concatMap__WEBPACK_IMPORTED_MODULE_0__["concatMap"])(function () { return innerObservable; }, resultSelector);
33229}
33230//# sourceMappingURL=concatMapTo.js.map
33231
33232
33233/***/ }),
33234/* 283 */
33235/***/ (function(module, __webpack_exports__, __webpack_require__) {
33236
33237"use strict";
33238__webpack_require__.r(__webpack_exports__);
33239/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "count", function() { return count; });
33240/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33241/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33242/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33243
33244
33245function count(predicate) {
33246 return function (source) { return source.lift(new CountOperator(predicate, source)); };
33247}
33248var CountOperator = /*@__PURE__*/ (function () {
33249 function CountOperator(predicate, source) {
33250 this.predicate = predicate;
33251 this.source = source;
33252 }
33253 CountOperator.prototype.call = function (subscriber, source) {
33254 return source.subscribe(new CountSubscriber(subscriber, this.predicate, this.source));
33255 };
33256 return CountOperator;
33257}());
33258var CountSubscriber = /*@__PURE__*/ (function (_super) {
33259 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountSubscriber, _super);
33260 function CountSubscriber(destination, predicate, source) {
33261 var _this = _super.call(this, destination) || this;
33262 _this.predicate = predicate;
33263 _this.source = source;
33264 _this.count = 0;
33265 _this.index = 0;
33266 return _this;
33267 }
33268 CountSubscriber.prototype._next = function (value) {
33269 if (this.predicate) {
33270 this._tryPredicate(value);
33271 }
33272 else {
33273 this.count++;
33274 }
33275 };
33276 CountSubscriber.prototype._tryPredicate = function (value) {
33277 var result;
33278 try {
33279 result = this.predicate(value, this.index++, this.source);
33280 }
33281 catch (err) {
33282 this.destination.error(err);
33283 return;
33284 }
33285 if (result) {
33286 this.count++;
33287 }
33288 };
33289 CountSubscriber.prototype._complete = function () {
33290 this.destination.next(this.count);
33291 this.destination.complete();
33292 };
33293 return CountSubscriber;
33294}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33295//# sourceMappingURL=count.js.map
33296
33297
33298/***/ }),
33299/* 284 */
33300/***/ (function(module, __webpack_exports__, __webpack_require__) {
33301
33302"use strict";
33303__webpack_require__.r(__webpack_exports__);
33304/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounce", function() { return debounce; });
33305/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33306/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33307/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
33308/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33309
33310
33311
33312function debounce(durationSelector) {
33313 return function (source) { return source.lift(new DebounceOperator(durationSelector)); };
33314}
33315var DebounceOperator = /*@__PURE__*/ (function () {
33316 function DebounceOperator(durationSelector) {
33317 this.durationSelector = durationSelector;
33318 }
33319 DebounceOperator.prototype.call = function (subscriber, source) {
33320 return source.subscribe(new DebounceSubscriber(subscriber, this.durationSelector));
33321 };
33322 return DebounceOperator;
33323}());
33324var DebounceSubscriber = /*@__PURE__*/ (function (_super) {
33325 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceSubscriber, _super);
33326 function DebounceSubscriber(destination, durationSelector) {
33327 var _this = _super.call(this, destination) || this;
33328 _this.durationSelector = durationSelector;
33329 _this.hasValue = false;
33330 _this.durationSubscription = null;
33331 return _this;
33332 }
33333 DebounceSubscriber.prototype._next = function (value) {
33334 try {
33335 var result = this.durationSelector.call(this, value);
33336 if (result) {
33337 this._tryNext(value, result);
33338 }
33339 }
33340 catch (err) {
33341 this.destination.error(err);
33342 }
33343 };
33344 DebounceSubscriber.prototype._complete = function () {
33345 this.emitValue();
33346 this.destination.complete();
33347 };
33348 DebounceSubscriber.prototype._tryNext = function (value, duration) {
33349 var subscription = this.durationSubscription;
33350 this.value = value;
33351 this.hasValue = true;
33352 if (subscription) {
33353 subscription.unsubscribe();
33354 this.remove(subscription);
33355 }
33356 subscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration);
33357 if (subscription && !subscription.closed) {
33358 this.add(this.durationSubscription = subscription);
33359 }
33360 };
33361 DebounceSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33362 this.emitValue();
33363 };
33364 DebounceSubscriber.prototype.notifyComplete = function () {
33365 this.emitValue();
33366 };
33367 DebounceSubscriber.prototype.emitValue = function () {
33368 if (this.hasValue) {
33369 var value = this.value;
33370 var subscription = this.durationSubscription;
33371 if (subscription) {
33372 this.durationSubscription = null;
33373 subscription.unsubscribe();
33374 this.remove(subscription);
33375 }
33376 this.value = null;
33377 this.hasValue = false;
33378 _super.prototype._next.call(this, value);
33379 }
33380 };
33381 return DebounceSubscriber;
33382}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33383//# sourceMappingURL=debounce.js.map
33384
33385
33386/***/ }),
33387/* 285 */
33388/***/ (function(module, __webpack_exports__, __webpack_require__) {
33389
33390"use strict";
33391__webpack_require__.r(__webpack_exports__);
33392/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "debounceTime", function() { return debounceTime; });
33393/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33394/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33395/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
33396/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
33397
33398
33399
33400function debounceTime(dueTime, scheduler) {
33401 if (scheduler === void 0) {
33402 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
33403 }
33404 return function (source) { return source.lift(new DebounceTimeOperator(dueTime, scheduler)); };
33405}
33406var DebounceTimeOperator = /*@__PURE__*/ (function () {
33407 function DebounceTimeOperator(dueTime, scheduler) {
33408 this.dueTime = dueTime;
33409 this.scheduler = scheduler;
33410 }
33411 DebounceTimeOperator.prototype.call = function (subscriber, source) {
33412 return source.subscribe(new DebounceTimeSubscriber(subscriber, this.dueTime, this.scheduler));
33413 };
33414 return DebounceTimeOperator;
33415}());
33416var DebounceTimeSubscriber = /*@__PURE__*/ (function (_super) {
33417 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DebounceTimeSubscriber, _super);
33418 function DebounceTimeSubscriber(destination, dueTime, scheduler) {
33419 var _this = _super.call(this, destination) || this;
33420 _this.dueTime = dueTime;
33421 _this.scheduler = scheduler;
33422 _this.debouncedSubscription = null;
33423 _this.lastValue = null;
33424 _this.hasValue = false;
33425 return _this;
33426 }
33427 DebounceTimeSubscriber.prototype._next = function (value) {
33428 this.clearDebounce();
33429 this.lastValue = value;
33430 this.hasValue = true;
33431 this.add(this.debouncedSubscription = this.scheduler.schedule(dispatchNext, this.dueTime, this));
33432 };
33433 DebounceTimeSubscriber.prototype._complete = function () {
33434 this.debouncedNext();
33435 this.destination.complete();
33436 };
33437 DebounceTimeSubscriber.prototype.debouncedNext = function () {
33438 this.clearDebounce();
33439 if (this.hasValue) {
33440 var lastValue = this.lastValue;
33441 this.lastValue = null;
33442 this.hasValue = false;
33443 this.destination.next(lastValue);
33444 }
33445 };
33446 DebounceTimeSubscriber.prototype.clearDebounce = function () {
33447 var debouncedSubscription = this.debouncedSubscription;
33448 if (debouncedSubscription !== null) {
33449 this.remove(debouncedSubscription);
33450 debouncedSubscription.unsubscribe();
33451 this.debouncedSubscription = null;
33452 }
33453 };
33454 return DebounceTimeSubscriber;
33455}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33456function dispatchNext(subscriber) {
33457 subscriber.debouncedNext();
33458}
33459//# sourceMappingURL=debounceTime.js.map
33460
33461
33462/***/ }),
33463/* 286 */
33464/***/ (function(module, __webpack_exports__, __webpack_require__) {
33465
33466"use strict";
33467__webpack_require__.r(__webpack_exports__);
33468/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultIfEmpty", function() { return defaultIfEmpty; });
33469/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33470/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33471/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33472
33473
33474function defaultIfEmpty(defaultValue) {
33475 if (defaultValue === void 0) {
33476 defaultValue = null;
33477 }
33478 return function (source) { return source.lift(new DefaultIfEmptyOperator(defaultValue)); };
33479}
33480var DefaultIfEmptyOperator = /*@__PURE__*/ (function () {
33481 function DefaultIfEmptyOperator(defaultValue) {
33482 this.defaultValue = defaultValue;
33483 }
33484 DefaultIfEmptyOperator.prototype.call = function (subscriber, source) {
33485 return source.subscribe(new DefaultIfEmptySubscriber(subscriber, this.defaultValue));
33486 };
33487 return DefaultIfEmptyOperator;
33488}());
33489var DefaultIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
33490 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DefaultIfEmptySubscriber, _super);
33491 function DefaultIfEmptySubscriber(destination, defaultValue) {
33492 var _this = _super.call(this, destination) || this;
33493 _this.defaultValue = defaultValue;
33494 _this.isEmpty = true;
33495 return _this;
33496 }
33497 DefaultIfEmptySubscriber.prototype._next = function (value) {
33498 this.isEmpty = false;
33499 this.destination.next(value);
33500 };
33501 DefaultIfEmptySubscriber.prototype._complete = function () {
33502 if (this.isEmpty) {
33503 this.destination.next(this.defaultValue);
33504 }
33505 this.destination.complete();
33506 };
33507 return DefaultIfEmptySubscriber;
33508}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33509//# sourceMappingURL=defaultIfEmpty.js.map
33510
33511
33512/***/ }),
33513/* 287 */
33514/***/ (function(module, __webpack_exports__, __webpack_require__) {
33515
33516"use strict";
33517__webpack_require__.r(__webpack_exports__);
33518/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delay", function() { return delay; });
33519/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33520/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
33521/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(288);
33522/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
33523/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(200);
33524/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_Subscriber,_Notification PURE_IMPORTS_END */
33525
33526
33527
33528
33529
33530function delay(delay, scheduler) {
33531 if (scheduler === void 0) {
33532 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
33533 }
33534 var absoluteDelay = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(delay);
33535 var delayFor = absoluteDelay ? (+delay - scheduler.now()) : Math.abs(delay);
33536 return function (source) { return source.lift(new DelayOperator(delayFor, scheduler)); };
33537}
33538var DelayOperator = /*@__PURE__*/ (function () {
33539 function DelayOperator(delay, scheduler) {
33540 this.delay = delay;
33541 this.scheduler = scheduler;
33542 }
33543 DelayOperator.prototype.call = function (subscriber, source) {
33544 return source.subscribe(new DelaySubscriber(subscriber, this.delay, this.scheduler));
33545 };
33546 return DelayOperator;
33547}());
33548var DelaySubscriber = /*@__PURE__*/ (function (_super) {
33549 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelaySubscriber, _super);
33550 function DelaySubscriber(destination, delay, scheduler) {
33551 var _this = _super.call(this, destination) || this;
33552 _this.delay = delay;
33553 _this.scheduler = scheduler;
33554 _this.queue = [];
33555 _this.active = false;
33556 _this.errored = false;
33557 return _this;
33558 }
33559 DelaySubscriber.dispatch = function (state) {
33560 var source = state.source;
33561 var queue = source.queue;
33562 var scheduler = state.scheduler;
33563 var destination = state.destination;
33564 while (queue.length > 0 && (queue[0].time - scheduler.now()) <= 0) {
33565 queue.shift().notification.observe(destination);
33566 }
33567 if (queue.length > 0) {
33568 var delay_1 = Math.max(0, queue[0].time - scheduler.now());
33569 this.schedule(state, delay_1);
33570 }
33571 else {
33572 this.unsubscribe();
33573 source.active = false;
33574 }
33575 };
33576 DelaySubscriber.prototype._schedule = function (scheduler) {
33577 this.active = true;
33578 var destination = this.destination;
33579 destination.add(scheduler.schedule(DelaySubscriber.dispatch, this.delay, {
33580 source: this, destination: this.destination, scheduler: scheduler
33581 }));
33582 };
33583 DelaySubscriber.prototype.scheduleNotification = function (notification) {
33584 if (this.errored === true) {
33585 return;
33586 }
33587 var scheduler = this.scheduler;
33588 var message = new DelayMessage(scheduler.now() + this.delay, notification);
33589 this.queue.push(message);
33590 if (this.active === false) {
33591 this._schedule(scheduler);
33592 }
33593 };
33594 DelaySubscriber.prototype._next = function (value) {
33595 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createNext(value));
33596 };
33597 DelaySubscriber.prototype._error = function (err) {
33598 this.errored = true;
33599 this.queue = [];
33600 this.destination.error(err);
33601 this.unsubscribe();
33602 };
33603 DelaySubscriber.prototype._complete = function () {
33604 this.scheduleNotification(_Notification__WEBPACK_IMPORTED_MODULE_4__["Notification"].createComplete());
33605 this.unsubscribe();
33606 };
33607 return DelaySubscriber;
33608}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
33609var DelayMessage = /*@__PURE__*/ (function () {
33610 function DelayMessage(time, notification) {
33611 this.time = time;
33612 this.notification = notification;
33613 }
33614 return DelayMessage;
33615}());
33616//# sourceMappingURL=delay.js.map
33617
33618
33619/***/ }),
33620/* 288 */
33621/***/ (function(module, __webpack_exports__, __webpack_require__) {
33622
33623"use strict";
33624__webpack_require__.r(__webpack_exports__);
33625/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isDate", function() { return isDate; });
33626/** PURE_IMPORTS_START PURE_IMPORTS_END */
33627function isDate(value) {
33628 return value instanceof Date && !isNaN(+value);
33629}
33630//# sourceMappingURL=isDate.js.map
33631
33632
33633/***/ }),
33634/* 289 */
33635/***/ (function(module, __webpack_exports__, __webpack_require__) {
33636
33637"use strict";
33638__webpack_require__.r(__webpack_exports__);
33639/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "delayWhen", function() { return delayWhen; });
33640/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33641/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33642/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(167);
33643/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
33644/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
33645/** PURE_IMPORTS_START tslib,_Subscriber,_Observable,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33646
33647
33648
33649
33650
33651function delayWhen(delayDurationSelector, subscriptionDelay) {
33652 if (subscriptionDelay) {
33653 return function (source) {
33654 return new SubscriptionDelayObservable(source, subscriptionDelay)
33655 .lift(new DelayWhenOperator(delayDurationSelector));
33656 };
33657 }
33658 return function (source) { return source.lift(new DelayWhenOperator(delayDurationSelector)); };
33659}
33660var DelayWhenOperator = /*@__PURE__*/ (function () {
33661 function DelayWhenOperator(delayDurationSelector) {
33662 this.delayDurationSelector = delayDurationSelector;
33663 }
33664 DelayWhenOperator.prototype.call = function (subscriber, source) {
33665 return source.subscribe(new DelayWhenSubscriber(subscriber, this.delayDurationSelector));
33666 };
33667 return DelayWhenOperator;
33668}());
33669var DelayWhenSubscriber = /*@__PURE__*/ (function (_super) {
33670 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DelayWhenSubscriber, _super);
33671 function DelayWhenSubscriber(destination, delayDurationSelector) {
33672 var _this = _super.call(this, destination) || this;
33673 _this.delayDurationSelector = delayDurationSelector;
33674 _this.completed = false;
33675 _this.delayNotifierSubscriptions = [];
33676 _this.index = 0;
33677 return _this;
33678 }
33679 DelayWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33680 this.destination.next(outerValue);
33681 this.removeSubscription(innerSub);
33682 this.tryComplete();
33683 };
33684 DelayWhenSubscriber.prototype.notifyError = function (error, innerSub) {
33685 this._error(error);
33686 };
33687 DelayWhenSubscriber.prototype.notifyComplete = function (innerSub) {
33688 var value = this.removeSubscription(innerSub);
33689 if (value) {
33690 this.destination.next(value);
33691 }
33692 this.tryComplete();
33693 };
33694 DelayWhenSubscriber.prototype._next = function (value) {
33695 var index = this.index++;
33696 try {
33697 var delayNotifier = this.delayDurationSelector(value, index);
33698 if (delayNotifier) {
33699 this.tryDelay(delayNotifier, value);
33700 }
33701 }
33702 catch (err) {
33703 this.destination.error(err);
33704 }
33705 };
33706 DelayWhenSubscriber.prototype._complete = function () {
33707 this.completed = true;
33708 this.tryComplete();
33709 this.unsubscribe();
33710 };
33711 DelayWhenSubscriber.prototype.removeSubscription = function (subscription) {
33712 subscription.unsubscribe();
33713 var subscriptionIdx = this.delayNotifierSubscriptions.indexOf(subscription);
33714 if (subscriptionIdx !== -1) {
33715 this.delayNotifierSubscriptions.splice(subscriptionIdx, 1);
33716 }
33717 return subscription.outerValue;
33718 };
33719 DelayWhenSubscriber.prototype.tryDelay = function (delayNotifier, value) {
33720 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, delayNotifier, value);
33721 if (notifierSubscription && !notifierSubscription.closed) {
33722 var destination = this.destination;
33723 destination.add(notifierSubscription);
33724 this.delayNotifierSubscriptions.push(notifierSubscription);
33725 }
33726 };
33727 DelayWhenSubscriber.prototype.tryComplete = function () {
33728 if (this.completed && this.delayNotifierSubscriptions.length === 0) {
33729 this.destination.complete();
33730 }
33731 };
33732 return DelayWhenSubscriber;
33733}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
33734var SubscriptionDelayObservable = /*@__PURE__*/ (function (_super) {
33735 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelayObservable, _super);
33736 function SubscriptionDelayObservable(source, subscriptionDelay) {
33737 var _this = _super.call(this) || this;
33738 _this.source = source;
33739 _this.subscriptionDelay = subscriptionDelay;
33740 return _this;
33741 }
33742 SubscriptionDelayObservable.prototype._subscribe = function (subscriber) {
33743 this.subscriptionDelay.subscribe(new SubscriptionDelaySubscriber(subscriber, this.source));
33744 };
33745 return SubscriptionDelayObservable;
33746}(_Observable__WEBPACK_IMPORTED_MODULE_2__["Observable"]));
33747var SubscriptionDelaySubscriber = /*@__PURE__*/ (function (_super) {
33748 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscriptionDelaySubscriber, _super);
33749 function SubscriptionDelaySubscriber(parent, source) {
33750 var _this = _super.call(this) || this;
33751 _this.parent = parent;
33752 _this.source = source;
33753 _this.sourceSubscribed = false;
33754 return _this;
33755 }
33756 SubscriptionDelaySubscriber.prototype._next = function (unused) {
33757 this.subscribeToSource();
33758 };
33759 SubscriptionDelaySubscriber.prototype._error = function (err) {
33760 this.unsubscribe();
33761 this.parent.error(err);
33762 };
33763 SubscriptionDelaySubscriber.prototype._complete = function () {
33764 this.unsubscribe();
33765 this.subscribeToSource();
33766 };
33767 SubscriptionDelaySubscriber.prototype.subscribeToSource = function () {
33768 if (!this.sourceSubscribed) {
33769 this.sourceSubscribed = true;
33770 this.unsubscribe();
33771 this.source.subscribe(this.parent);
33772 }
33773 };
33774 return SubscriptionDelaySubscriber;
33775}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33776//# sourceMappingURL=delayWhen.js.map
33777
33778
33779/***/ }),
33780/* 290 */
33781/***/ (function(module, __webpack_exports__, __webpack_require__) {
33782
33783"use strict";
33784__webpack_require__.r(__webpack_exports__);
33785/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dematerialize", function() { return dematerialize; });
33786/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33787/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33788/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33789
33790
33791function dematerialize() {
33792 return function dematerializeOperatorFunction(source) {
33793 return source.lift(new DeMaterializeOperator());
33794 };
33795}
33796var DeMaterializeOperator = /*@__PURE__*/ (function () {
33797 function DeMaterializeOperator() {
33798 }
33799 DeMaterializeOperator.prototype.call = function (subscriber, source) {
33800 return source.subscribe(new DeMaterializeSubscriber(subscriber));
33801 };
33802 return DeMaterializeOperator;
33803}());
33804var DeMaterializeSubscriber = /*@__PURE__*/ (function (_super) {
33805 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DeMaterializeSubscriber, _super);
33806 function DeMaterializeSubscriber(destination) {
33807 return _super.call(this, destination) || this;
33808 }
33809 DeMaterializeSubscriber.prototype._next = function (value) {
33810 value.observe(this.destination);
33811 };
33812 return DeMaterializeSubscriber;
33813}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33814//# sourceMappingURL=dematerialize.js.map
33815
33816
33817/***/ }),
33818/* 291 */
33819/***/ (function(module, __webpack_exports__, __webpack_require__) {
33820
33821"use strict";
33822__webpack_require__.r(__webpack_exports__);
33823/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinct", function() { return distinct; });
33824/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DistinctSubscriber", function() { return DistinctSubscriber; });
33825/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33826/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
33827/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
33828/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
33829
33830
33831
33832function distinct(keySelector, flushes) {
33833 return function (source) { return source.lift(new DistinctOperator(keySelector, flushes)); };
33834}
33835var DistinctOperator = /*@__PURE__*/ (function () {
33836 function DistinctOperator(keySelector, flushes) {
33837 this.keySelector = keySelector;
33838 this.flushes = flushes;
33839 }
33840 DistinctOperator.prototype.call = function (subscriber, source) {
33841 return source.subscribe(new DistinctSubscriber(subscriber, this.keySelector, this.flushes));
33842 };
33843 return DistinctOperator;
33844}());
33845var DistinctSubscriber = /*@__PURE__*/ (function (_super) {
33846 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctSubscriber, _super);
33847 function DistinctSubscriber(destination, keySelector, flushes) {
33848 var _this = _super.call(this, destination) || this;
33849 _this.keySelector = keySelector;
33850 _this.values = new Set();
33851 if (flushes) {
33852 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, flushes));
33853 }
33854 return _this;
33855 }
33856 DistinctSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
33857 this.values.clear();
33858 };
33859 DistinctSubscriber.prototype.notifyError = function (error, innerSub) {
33860 this._error(error);
33861 };
33862 DistinctSubscriber.prototype._next = function (value) {
33863 if (this.keySelector) {
33864 this._useKeySelector(value);
33865 }
33866 else {
33867 this._finalizeNext(value, value);
33868 }
33869 };
33870 DistinctSubscriber.prototype._useKeySelector = function (value) {
33871 var key;
33872 var destination = this.destination;
33873 try {
33874 key = this.keySelector(value);
33875 }
33876 catch (err) {
33877 destination.error(err);
33878 return;
33879 }
33880 this._finalizeNext(key, value);
33881 };
33882 DistinctSubscriber.prototype._finalizeNext = function (key, value) {
33883 var values = this.values;
33884 if (!values.has(key)) {
33885 values.add(key);
33886 this.destination.next(value);
33887 }
33888 };
33889 return DistinctSubscriber;
33890}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
33891
33892//# sourceMappingURL=distinct.js.map
33893
33894
33895/***/ }),
33896/* 292 */
33897/***/ (function(module, __webpack_exports__, __webpack_require__) {
33898
33899"use strict";
33900__webpack_require__.r(__webpack_exports__);
33901/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilChanged", function() { return distinctUntilChanged; });
33902/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
33903/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
33904/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
33905
33906
33907function distinctUntilChanged(compare, keySelector) {
33908 return function (source) { return source.lift(new DistinctUntilChangedOperator(compare, keySelector)); };
33909}
33910var DistinctUntilChangedOperator = /*@__PURE__*/ (function () {
33911 function DistinctUntilChangedOperator(compare, keySelector) {
33912 this.compare = compare;
33913 this.keySelector = keySelector;
33914 }
33915 DistinctUntilChangedOperator.prototype.call = function (subscriber, source) {
33916 return source.subscribe(new DistinctUntilChangedSubscriber(subscriber, this.compare, this.keySelector));
33917 };
33918 return DistinctUntilChangedOperator;
33919}());
33920var DistinctUntilChangedSubscriber = /*@__PURE__*/ (function (_super) {
33921 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](DistinctUntilChangedSubscriber, _super);
33922 function DistinctUntilChangedSubscriber(destination, compare, keySelector) {
33923 var _this = _super.call(this, destination) || this;
33924 _this.keySelector = keySelector;
33925 _this.hasKey = false;
33926 if (typeof compare === 'function') {
33927 _this.compare = compare;
33928 }
33929 return _this;
33930 }
33931 DistinctUntilChangedSubscriber.prototype.compare = function (x, y) {
33932 return x === y;
33933 };
33934 DistinctUntilChangedSubscriber.prototype._next = function (value) {
33935 var key;
33936 try {
33937 var keySelector = this.keySelector;
33938 key = keySelector ? keySelector(value) : value;
33939 }
33940 catch (err) {
33941 return this.destination.error(err);
33942 }
33943 var result = false;
33944 if (this.hasKey) {
33945 try {
33946 var compare = this.compare;
33947 result = compare(this.key, key);
33948 }
33949 catch (err) {
33950 return this.destination.error(err);
33951 }
33952 }
33953 else {
33954 this.hasKey = true;
33955 }
33956 if (!result) {
33957 this.key = key;
33958 this.destination.next(value);
33959 }
33960 };
33961 return DistinctUntilChangedSubscriber;
33962}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
33963//# sourceMappingURL=distinctUntilChanged.js.map
33964
33965
33966/***/ }),
33967/* 293 */
33968/***/ (function(module, __webpack_exports__, __webpack_require__) {
33969
33970"use strict";
33971__webpack_require__.r(__webpack_exports__);
33972/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "distinctUntilKeyChanged", function() { return distinctUntilKeyChanged; });
33973/* harmony import */ var _distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(292);
33974/** PURE_IMPORTS_START _distinctUntilChanged PURE_IMPORTS_END */
33975
33976function distinctUntilKeyChanged(key, compare) {
33977 return Object(_distinctUntilChanged__WEBPACK_IMPORTED_MODULE_0__["distinctUntilChanged"])(function (x, y) { return compare ? compare(x[key], y[key]) : x[key] === y[key]; });
33978}
33979//# sourceMappingURL=distinctUntilKeyChanged.js.map
33980
33981
33982/***/ }),
33983/* 294 */
33984/***/ (function(module, __webpack_exports__, __webpack_require__) {
33985
33986"use strict";
33987__webpack_require__.r(__webpack_exports__);
33988/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "elementAt", function() { return elementAt; });
33989/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(220);
33990/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
33991/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(295);
33992/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(286);
33993/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(296);
33994/** PURE_IMPORTS_START _util_ArgumentOutOfRangeError,_filter,_throwIfEmpty,_defaultIfEmpty,_take PURE_IMPORTS_END */
33995
33996
33997
33998
33999
34000function elementAt(index, defaultValue) {
34001 if (index < 0) {
34002 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"]();
34003 }
34004 var hasDefaultValue = arguments.length >= 2;
34005 return function (source) {
34006 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
34007 ? Object(_defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__["defaultIfEmpty"])(defaultValue)
34008 : Object(_throwIfEmpty__WEBPACK_IMPORTED_MODULE_2__["throwIfEmpty"])(function () { return new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_0__["ArgumentOutOfRangeError"](); }));
34009 };
34010}
34011//# sourceMappingURL=elementAt.js.map
34012
34013
34014/***/ }),
34015/* 295 */
34016/***/ (function(module, __webpack_exports__, __webpack_require__) {
34017
34018"use strict";
34019__webpack_require__.r(__webpack_exports__);
34020/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throwIfEmpty", function() { return throwIfEmpty; });
34021/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34022/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(221);
34023/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(169);
34024/** PURE_IMPORTS_START tslib,_util_EmptyError,_Subscriber PURE_IMPORTS_END */
34025
34026
34027
34028function throwIfEmpty(errorFactory) {
34029 if (errorFactory === void 0) {
34030 errorFactory = defaultErrorFactory;
34031 }
34032 return function (source) {
34033 return source.lift(new ThrowIfEmptyOperator(errorFactory));
34034 };
34035}
34036var ThrowIfEmptyOperator = /*@__PURE__*/ (function () {
34037 function ThrowIfEmptyOperator(errorFactory) {
34038 this.errorFactory = errorFactory;
34039 }
34040 ThrowIfEmptyOperator.prototype.call = function (subscriber, source) {
34041 return source.subscribe(new ThrowIfEmptySubscriber(subscriber, this.errorFactory));
34042 };
34043 return ThrowIfEmptyOperator;
34044}());
34045var ThrowIfEmptySubscriber = /*@__PURE__*/ (function (_super) {
34046 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrowIfEmptySubscriber, _super);
34047 function ThrowIfEmptySubscriber(destination, errorFactory) {
34048 var _this = _super.call(this, destination) || this;
34049 _this.errorFactory = errorFactory;
34050 _this.hasValue = false;
34051 return _this;
34052 }
34053 ThrowIfEmptySubscriber.prototype._next = function (value) {
34054 this.hasValue = true;
34055 this.destination.next(value);
34056 };
34057 ThrowIfEmptySubscriber.prototype._complete = function () {
34058 if (!this.hasValue) {
34059 var err = void 0;
34060 try {
34061 err = this.errorFactory();
34062 }
34063 catch (e) {
34064 err = e;
34065 }
34066 this.destination.error(err);
34067 }
34068 else {
34069 return this.destination.complete();
34070 }
34071 };
34072 return ThrowIfEmptySubscriber;
34073}(_Subscriber__WEBPACK_IMPORTED_MODULE_2__["Subscriber"]));
34074function defaultErrorFactory() {
34075 return new _util_EmptyError__WEBPACK_IMPORTED_MODULE_1__["EmptyError"]();
34076}
34077//# sourceMappingURL=throwIfEmpty.js.map
34078
34079
34080/***/ }),
34081/* 296 */
34082/***/ (function(module, __webpack_exports__, __webpack_require__) {
34083
34084"use strict";
34085__webpack_require__.r(__webpack_exports__);
34086/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "take", function() { return take; });
34087/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34088/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34089/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
34090/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
34091/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34092
34093
34094
34095
34096function take(count) {
34097 return function (source) {
34098 if (count === 0) {
34099 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
34100 }
34101 else {
34102 return source.lift(new TakeOperator(count));
34103 }
34104 };
34105}
34106var TakeOperator = /*@__PURE__*/ (function () {
34107 function TakeOperator(total) {
34108 this.total = total;
34109 if (this.total < 0) {
34110 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
34111 }
34112 }
34113 TakeOperator.prototype.call = function (subscriber, source) {
34114 return source.subscribe(new TakeSubscriber(subscriber, this.total));
34115 };
34116 return TakeOperator;
34117}());
34118var TakeSubscriber = /*@__PURE__*/ (function (_super) {
34119 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeSubscriber, _super);
34120 function TakeSubscriber(destination, total) {
34121 var _this = _super.call(this, destination) || this;
34122 _this.total = total;
34123 _this.count = 0;
34124 return _this;
34125 }
34126 TakeSubscriber.prototype._next = function (value) {
34127 var total = this.total;
34128 var count = ++this.count;
34129 if (count <= total) {
34130 this.destination.next(value);
34131 if (count === total) {
34132 this.destination.complete();
34133 this.unsubscribe();
34134 }
34135 }
34136 };
34137 return TakeSubscriber;
34138}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34139//# sourceMappingURL=take.js.map
34140
34141
34142/***/ }),
34143/* 297 */
34144/***/ (function(module, __webpack_exports__, __webpack_require__) {
34145
34146"use strict";
34147__webpack_require__.r(__webpack_exports__);
34148/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "endWith", function() { return endWith; });
34149/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
34150/* harmony import */ var _observable_of__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(202);
34151/** PURE_IMPORTS_START _observable_concat,_observable_of PURE_IMPORTS_END */
34152
34153
34154function endWith() {
34155 var array = [];
34156 for (var _i = 0; _i < arguments.length; _i++) {
34157 array[_i] = arguments[_i];
34158 }
34159 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(source, _observable_of__WEBPACK_IMPORTED_MODULE_1__["of"].apply(void 0, array)); };
34160}
34161//# sourceMappingURL=endWith.js.map
34162
34163
34164/***/ }),
34165/* 298 */
34166/***/ (function(module, __webpack_exports__, __webpack_require__) {
34167
34168"use strict";
34169__webpack_require__.r(__webpack_exports__);
34170/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "every", function() { return every; });
34171/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34172/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34173/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34174
34175
34176function every(predicate, thisArg) {
34177 return function (source) { return source.lift(new EveryOperator(predicate, thisArg, source)); };
34178}
34179var EveryOperator = /*@__PURE__*/ (function () {
34180 function EveryOperator(predicate, thisArg, source) {
34181 this.predicate = predicate;
34182 this.thisArg = thisArg;
34183 this.source = source;
34184 }
34185 EveryOperator.prototype.call = function (observer, source) {
34186 return source.subscribe(new EverySubscriber(observer, this.predicate, this.thisArg, this.source));
34187 };
34188 return EveryOperator;
34189}());
34190var EverySubscriber = /*@__PURE__*/ (function (_super) {
34191 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](EverySubscriber, _super);
34192 function EverySubscriber(destination, predicate, thisArg, source) {
34193 var _this = _super.call(this, destination) || this;
34194 _this.predicate = predicate;
34195 _this.thisArg = thisArg;
34196 _this.source = source;
34197 _this.index = 0;
34198 _this.thisArg = thisArg || _this;
34199 return _this;
34200 }
34201 EverySubscriber.prototype.notifyComplete = function (everyValueMatch) {
34202 this.destination.next(everyValueMatch);
34203 this.destination.complete();
34204 };
34205 EverySubscriber.prototype._next = function (value) {
34206 var result = false;
34207 try {
34208 result = this.predicate.call(this.thisArg, value, this.index++, this.source);
34209 }
34210 catch (err) {
34211 this.destination.error(err);
34212 return;
34213 }
34214 if (!result) {
34215 this.notifyComplete(false);
34216 }
34217 };
34218 EverySubscriber.prototype._complete = function () {
34219 this.notifyComplete(true);
34220 };
34221 return EverySubscriber;
34222}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34223//# sourceMappingURL=every.js.map
34224
34225
34226/***/ }),
34227/* 299 */
34228/***/ (function(module, __webpack_exports__, __webpack_require__) {
34229
34230"use strict";
34231__webpack_require__.r(__webpack_exports__);
34232/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaust", function() { return exhaust; });
34233/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34234/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34235/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
34236/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34237
34238
34239
34240function exhaust() {
34241 return function (source) { return source.lift(new SwitchFirstOperator()); };
34242}
34243var SwitchFirstOperator = /*@__PURE__*/ (function () {
34244 function SwitchFirstOperator() {
34245 }
34246 SwitchFirstOperator.prototype.call = function (subscriber, source) {
34247 return source.subscribe(new SwitchFirstSubscriber(subscriber));
34248 };
34249 return SwitchFirstOperator;
34250}());
34251var SwitchFirstSubscriber = /*@__PURE__*/ (function (_super) {
34252 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchFirstSubscriber, _super);
34253 function SwitchFirstSubscriber(destination) {
34254 var _this = _super.call(this, destination) || this;
34255 _this.hasCompleted = false;
34256 _this.hasSubscription = false;
34257 return _this;
34258 }
34259 SwitchFirstSubscriber.prototype._next = function (value) {
34260 if (!this.hasSubscription) {
34261 this.hasSubscription = true;
34262 this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, value));
34263 }
34264 };
34265 SwitchFirstSubscriber.prototype._complete = function () {
34266 this.hasCompleted = true;
34267 if (!this.hasSubscription) {
34268 this.destination.complete();
34269 }
34270 };
34271 SwitchFirstSubscriber.prototype.notifyComplete = function (innerSub) {
34272 this.remove(innerSub);
34273 this.hasSubscription = false;
34274 if (this.hasCompleted) {
34275 this.destination.complete();
34276 }
34277 };
34278 return SwitchFirstSubscriber;
34279}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34280//# sourceMappingURL=exhaust.js.map
34281
34282
34283/***/ }),
34284/* 300 */
34285/***/ (function(module, __webpack_exports__, __webpack_require__) {
34286
34287"use strict";
34288__webpack_require__.r(__webpack_exports__);
34289/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "exhaustMap", function() { return exhaustMap; });
34290/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34291/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34292/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
34293/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
34294/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
34295/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
34296/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
34297
34298
34299
34300
34301
34302
34303function exhaustMap(project, resultSelector) {
34304 if (resultSelector) {
34305 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); })); })); };
34306 }
34307 return function (source) {
34308 return source.lift(new ExhaustMapOperator(project));
34309 };
34310}
34311var ExhaustMapOperator = /*@__PURE__*/ (function () {
34312 function ExhaustMapOperator(project) {
34313 this.project = project;
34314 }
34315 ExhaustMapOperator.prototype.call = function (subscriber, source) {
34316 return source.subscribe(new ExhaustMapSubscriber(subscriber, this.project));
34317 };
34318 return ExhaustMapOperator;
34319}());
34320var ExhaustMapSubscriber = /*@__PURE__*/ (function (_super) {
34321 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExhaustMapSubscriber, _super);
34322 function ExhaustMapSubscriber(destination, project) {
34323 var _this = _super.call(this, destination) || this;
34324 _this.project = project;
34325 _this.hasSubscription = false;
34326 _this.hasCompleted = false;
34327 _this.index = 0;
34328 return _this;
34329 }
34330 ExhaustMapSubscriber.prototype._next = function (value) {
34331 if (!this.hasSubscription) {
34332 this.tryNext(value);
34333 }
34334 };
34335 ExhaustMapSubscriber.prototype.tryNext = function (value) {
34336 var result;
34337 var index = this.index++;
34338 try {
34339 result = this.project(value, index);
34340 }
34341 catch (err) {
34342 this.destination.error(err);
34343 return;
34344 }
34345 this.hasSubscription = true;
34346 this._innerSub(result, value, index);
34347 };
34348 ExhaustMapSubscriber.prototype._innerSub = function (result, value, index) {
34349 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
34350 var destination = this.destination;
34351 destination.add(innerSubscriber);
34352 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
34353 if (innerSubscription !== innerSubscriber) {
34354 destination.add(innerSubscription);
34355 }
34356 };
34357 ExhaustMapSubscriber.prototype._complete = function () {
34358 this.hasCompleted = true;
34359 if (!this.hasSubscription) {
34360 this.destination.complete();
34361 }
34362 this.unsubscribe();
34363 };
34364 ExhaustMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34365 this.destination.next(innerValue);
34366 };
34367 ExhaustMapSubscriber.prototype.notifyError = function (err) {
34368 this.destination.error(err);
34369 };
34370 ExhaustMapSubscriber.prototype.notifyComplete = function (innerSub) {
34371 var destination = this.destination;
34372 destination.remove(innerSub);
34373 this.hasSubscription = false;
34374 if (this.hasCompleted) {
34375 this.destination.complete();
34376 }
34377 };
34378 return ExhaustMapSubscriber;
34379}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34380//# sourceMappingURL=exhaustMap.js.map
34381
34382
34383/***/ }),
34384/* 301 */
34385/***/ (function(module, __webpack_exports__, __webpack_require__) {
34386
34387"use strict";
34388__webpack_require__.r(__webpack_exports__);
34389/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "expand", function() { return expand; });
34390/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandOperator", function() { return ExpandOperator; });
34391/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ExpandSubscriber", function() { return ExpandSubscriber; });
34392/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34393/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
34394/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
34395/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
34396
34397
34398
34399function expand(project, concurrent, scheduler) {
34400 if (concurrent === void 0) {
34401 concurrent = Number.POSITIVE_INFINITY;
34402 }
34403 if (scheduler === void 0) {
34404 scheduler = undefined;
34405 }
34406 concurrent = (concurrent || 0) < 1 ? Number.POSITIVE_INFINITY : concurrent;
34407 return function (source) { return source.lift(new ExpandOperator(project, concurrent, scheduler)); };
34408}
34409var ExpandOperator = /*@__PURE__*/ (function () {
34410 function ExpandOperator(project, concurrent, scheduler) {
34411 this.project = project;
34412 this.concurrent = concurrent;
34413 this.scheduler = scheduler;
34414 }
34415 ExpandOperator.prototype.call = function (subscriber, source) {
34416 return source.subscribe(new ExpandSubscriber(subscriber, this.project, this.concurrent, this.scheduler));
34417 };
34418 return ExpandOperator;
34419}());
34420
34421var ExpandSubscriber = /*@__PURE__*/ (function (_super) {
34422 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ExpandSubscriber, _super);
34423 function ExpandSubscriber(destination, project, concurrent, scheduler) {
34424 var _this = _super.call(this, destination) || this;
34425 _this.project = project;
34426 _this.concurrent = concurrent;
34427 _this.scheduler = scheduler;
34428 _this.index = 0;
34429 _this.active = 0;
34430 _this.hasCompleted = false;
34431 if (concurrent < Number.POSITIVE_INFINITY) {
34432 _this.buffer = [];
34433 }
34434 return _this;
34435 }
34436 ExpandSubscriber.dispatch = function (arg) {
34437 var subscriber = arg.subscriber, result = arg.result, value = arg.value, index = arg.index;
34438 subscriber.subscribeToProjection(result, value, index);
34439 };
34440 ExpandSubscriber.prototype._next = function (value) {
34441 var destination = this.destination;
34442 if (destination.closed) {
34443 this._complete();
34444 return;
34445 }
34446 var index = this.index++;
34447 if (this.active < this.concurrent) {
34448 destination.next(value);
34449 try {
34450 var project = this.project;
34451 var result = project(value, index);
34452 if (!this.scheduler) {
34453 this.subscribeToProjection(result, value, index);
34454 }
34455 else {
34456 var state = { subscriber: this, result: result, value: value, index: index };
34457 var destination_1 = this.destination;
34458 destination_1.add(this.scheduler.schedule(ExpandSubscriber.dispatch, 0, state));
34459 }
34460 }
34461 catch (e) {
34462 destination.error(e);
34463 }
34464 }
34465 else {
34466 this.buffer.push(value);
34467 }
34468 };
34469 ExpandSubscriber.prototype.subscribeToProjection = function (result, value, index) {
34470 this.active++;
34471 var destination = this.destination;
34472 destination.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, result, value, index));
34473 };
34474 ExpandSubscriber.prototype._complete = function () {
34475 this.hasCompleted = true;
34476 if (this.hasCompleted && this.active === 0) {
34477 this.destination.complete();
34478 }
34479 this.unsubscribe();
34480 };
34481 ExpandSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
34482 this._next(innerValue);
34483 };
34484 ExpandSubscriber.prototype.notifyComplete = function (innerSub) {
34485 var buffer = this.buffer;
34486 var destination = this.destination;
34487 destination.remove(innerSub);
34488 this.active--;
34489 if (buffer && buffer.length > 0) {
34490 this._next(buffer.shift());
34491 }
34492 if (this.hasCompleted && this.active === 0) {
34493 this.destination.complete();
34494 }
34495 };
34496 return ExpandSubscriber;
34497}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
34498
34499//# sourceMappingURL=expand.js.map
34500
34501
34502/***/ }),
34503/* 302 */
34504/***/ (function(module, __webpack_exports__, __webpack_require__) {
34505
34506"use strict";
34507__webpack_require__.r(__webpack_exports__);
34508/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "finalize", function() { return finalize; });
34509/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34510/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34511/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
34512/** PURE_IMPORTS_START tslib,_Subscriber,_Subscription PURE_IMPORTS_END */
34513
34514
34515
34516function finalize(callback) {
34517 return function (source) { return source.lift(new FinallyOperator(callback)); };
34518}
34519var FinallyOperator = /*@__PURE__*/ (function () {
34520 function FinallyOperator(callback) {
34521 this.callback = callback;
34522 }
34523 FinallyOperator.prototype.call = function (subscriber, source) {
34524 return source.subscribe(new FinallySubscriber(subscriber, this.callback));
34525 };
34526 return FinallyOperator;
34527}());
34528var FinallySubscriber = /*@__PURE__*/ (function (_super) {
34529 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FinallySubscriber, _super);
34530 function FinallySubscriber(destination, callback) {
34531 var _this = _super.call(this, destination) || this;
34532 _this.add(new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"](callback));
34533 return _this;
34534 }
34535 return FinallySubscriber;
34536}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34537//# sourceMappingURL=finalize.js.map
34538
34539
34540/***/ }),
34541/* 303 */
34542/***/ (function(module, __webpack_exports__, __webpack_require__) {
34543
34544"use strict";
34545__webpack_require__.r(__webpack_exports__);
34546/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return find; });
34547/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueOperator", function() { return FindValueOperator; });
34548/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FindValueSubscriber", function() { return FindValueSubscriber; });
34549/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34550/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34551/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34552
34553
34554function find(predicate, thisArg) {
34555 if (typeof predicate !== 'function') {
34556 throw new TypeError('predicate is not a function');
34557 }
34558 return function (source) { return source.lift(new FindValueOperator(predicate, source, false, thisArg)); };
34559}
34560var FindValueOperator = /*@__PURE__*/ (function () {
34561 function FindValueOperator(predicate, source, yieldIndex, thisArg) {
34562 this.predicate = predicate;
34563 this.source = source;
34564 this.yieldIndex = yieldIndex;
34565 this.thisArg = thisArg;
34566 }
34567 FindValueOperator.prototype.call = function (observer, source) {
34568 return source.subscribe(new FindValueSubscriber(observer, this.predicate, this.source, this.yieldIndex, this.thisArg));
34569 };
34570 return FindValueOperator;
34571}());
34572
34573var FindValueSubscriber = /*@__PURE__*/ (function (_super) {
34574 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](FindValueSubscriber, _super);
34575 function FindValueSubscriber(destination, predicate, source, yieldIndex, thisArg) {
34576 var _this = _super.call(this, destination) || this;
34577 _this.predicate = predicate;
34578 _this.source = source;
34579 _this.yieldIndex = yieldIndex;
34580 _this.thisArg = thisArg;
34581 _this.index = 0;
34582 return _this;
34583 }
34584 FindValueSubscriber.prototype.notifyComplete = function (value) {
34585 var destination = this.destination;
34586 destination.next(value);
34587 destination.complete();
34588 this.unsubscribe();
34589 };
34590 FindValueSubscriber.prototype._next = function (value) {
34591 var _a = this, predicate = _a.predicate, thisArg = _a.thisArg;
34592 var index = this.index++;
34593 try {
34594 var result = predicate.call(thisArg || this, value, index, this.source);
34595 if (result) {
34596 this.notifyComplete(this.yieldIndex ? index : value);
34597 }
34598 }
34599 catch (err) {
34600 this.destination.error(err);
34601 }
34602 };
34603 FindValueSubscriber.prototype._complete = function () {
34604 this.notifyComplete(this.yieldIndex ? -1 : undefined);
34605 };
34606 return FindValueSubscriber;
34607}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34608
34609//# sourceMappingURL=find.js.map
34610
34611
34612/***/ }),
34613/* 304 */
34614/***/ (function(module, __webpack_exports__, __webpack_require__) {
34615
34616"use strict";
34617__webpack_require__.r(__webpack_exports__);
34618/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "findIndex", function() { return findIndex; });
34619/* harmony import */ var _operators_find__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(303);
34620/** PURE_IMPORTS_START _operators_find PURE_IMPORTS_END */
34621
34622function findIndex(predicate, thisArg) {
34623 return function (source) { return source.lift(new _operators_find__WEBPACK_IMPORTED_MODULE_0__["FindValueOperator"](predicate, source, true, thisArg)); };
34624}
34625//# sourceMappingURL=findIndex.js.map
34626
34627
34628/***/ }),
34629/* 305 */
34630/***/ (function(module, __webpack_exports__, __webpack_require__) {
34631
34632"use strict";
34633__webpack_require__.r(__webpack_exports__);
34634/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "first", function() { return first; });
34635/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
34636/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
34637/* harmony import */ var _take__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(296);
34638/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(286);
34639/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(295);
34640/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(183);
34641/** PURE_IMPORTS_START _util_EmptyError,_filter,_take,_defaultIfEmpty,_throwIfEmpty,_util_identity PURE_IMPORTS_END */
34642
34643
34644
34645
34646
34647
34648function first(predicate, defaultValue) {
34649 var hasDefaultValue = arguments.length >= 2;
34650 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"](); })); };
34651}
34652//# sourceMappingURL=first.js.map
34653
34654
34655/***/ }),
34656/* 306 */
34657/***/ (function(module, __webpack_exports__, __webpack_require__) {
34658
34659"use strict";
34660__webpack_require__.r(__webpack_exports__);
34661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreElements", function() { return ignoreElements; });
34662/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34663/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34664/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34665
34666
34667function ignoreElements() {
34668 return function ignoreElementsOperatorFunction(source) {
34669 return source.lift(new IgnoreElementsOperator());
34670 };
34671}
34672var IgnoreElementsOperator = /*@__PURE__*/ (function () {
34673 function IgnoreElementsOperator() {
34674 }
34675 IgnoreElementsOperator.prototype.call = function (subscriber, source) {
34676 return source.subscribe(new IgnoreElementsSubscriber(subscriber));
34677 };
34678 return IgnoreElementsOperator;
34679}());
34680var IgnoreElementsSubscriber = /*@__PURE__*/ (function (_super) {
34681 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IgnoreElementsSubscriber, _super);
34682 function IgnoreElementsSubscriber() {
34683 return _super !== null && _super.apply(this, arguments) || this;
34684 }
34685 IgnoreElementsSubscriber.prototype._next = function (unused) {
34686 };
34687 return IgnoreElementsSubscriber;
34688}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34689//# sourceMappingURL=ignoreElements.js.map
34690
34691
34692/***/ }),
34693/* 307 */
34694/***/ (function(module, __webpack_exports__, __webpack_require__) {
34695
34696"use strict";
34697__webpack_require__.r(__webpack_exports__);
34698/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "isEmpty", function() { return isEmpty; });
34699/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34700/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34701/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34702
34703
34704function isEmpty() {
34705 return function (source) { return source.lift(new IsEmptyOperator()); };
34706}
34707var IsEmptyOperator = /*@__PURE__*/ (function () {
34708 function IsEmptyOperator() {
34709 }
34710 IsEmptyOperator.prototype.call = function (observer, source) {
34711 return source.subscribe(new IsEmptySubscriber(observer));
34712 };
34713 return IsEmptyOperator;
34714}());
34715var IsEmptySubscriber = /*@__PURE__*/ (function (_super) {
34716 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](IsEmptySubscriber, _super);
34717 function IsEmptySubscriber(destination) {
34718 return _super.call(this, destination) || this;
34719 }
34720 IsEmptySubscriber.prototype.notifyComplete = function (isEmpty) {
34721 var destination = this.destination;
34722 destination.next(isEmpty);
34723 destination.complete();
34724 };
34725 IsEmptySubscriber.prototype._next = function (value) {
34726 this.notifyComplete(false);
34727 };
34728 IsEmptySubscriber.prototype._complete = function () {
34729 this.notifyComplete(true);
34730 };
34731 return IsEmptySubscriber;
34732}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34733//# sourceMappingURL=isEmpty.js.map
34734
34735
34736/***/ }),
34737/* 308 */
34738/***/ (function(module, __webpack_exports__, __webpack_require__) {
34739
34740"use strict";
34741__webpack_require__.r(__webpack_exports__);
34742/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "last", function() { return last; });
34743/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(221);
34744/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
34745/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(309);
34746/* harmony import */ var _throwIfEmpty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(295);
34747/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(286);
34748/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(183);
34749/** PURE_IMPORTS_START _util_EmptyError,_filter,_takeLast,_throwIfEmpty,_defaultIfEmpty,_util_identity PURE_IMPORTS_END */
34750
34751
34752
34753
34754
34755
34756function last(predicate, defaultValue) {
34757 var hasDefaultValue = arguments.length >= 2;
34758 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"](); })); };
34759}
34760//# sourceMappingURL=last.js.map
34761
34762
34763/***/ }),
34764/* 309 */
34765/***/ (function(module, __webpack_exports__, __webpack_require__) {
34766
34767"use strict";
34768__webpack_require__.r(__webpack_exports__);
34769/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeLast", function() { return takeLast; });
34770/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34771/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34772/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
34773/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(201);
34774/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError,_observable_empty PURE_IMPORTS_END */
34775
34776
34777
34778
34779function takeLast(count) {
34780 return function takeLastOperatorFunction(source) {
34781 if (count === 0) {
34782 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_3__["empty"])();
34783 }
34784 else {
34785 return source.lift(new TakeLastOperator(count));
34786 }
34787 };
34788}
34789var TakeLastOperator = /*@__PURE__*/ (function () {
34790 function TakeLastOperator(total) {
34791 this.total = total;
34792 if (this.total < 0) {
34793 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
34794 }
34795 }
34796 TakeLastOperator.prototype.call = function (subscriber, source) {
34797 return source.subscribe(new TakeLastSubscriber(subscriber, this.total));
34798 };
34799 return TakeLastOperator;
34800}());
34801var TakeLastSubscriber = /*@__PURE__*/ (function (_super) {
34802 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeLastSubscriber, _super);
34803 function TakeLastSubscriber(destination, total) {
34804 var _this = _super.call(this, destination) || this;
34805 _this.total = total;
34806 _this.ring = new Array();
34807 _this.count = 0;
34808 return _this;
34809 }
34810 TakeLastSubscriber.prototype._next = function (value) {
34811 var ring = this.ring;
34812 var total = this.total;
34813 var count = this.count++;
34814 if (ring.length < total) {
34815 ring.push(value);
34816 }
34817 else {
34818 var index = count % total;
34819 ring[index] = value;
34820 }
34821 };
34822 TakeLastSubscriber.prototype._complete = function () {
34823 var destination = this.destination;
34824 var count = this.count;
34825 if (count > 0) {
34826 var total = this.count >= this.total ? this.total : this.count;
34827 var ring = this.ring;
34828 for (var i = 0; i < total; i++) {
34829 var idx = (count++) % total;
34830 destination.next(ring[idx]);
34831 }
34832 }
34833 destination.complete();
34834 };
34835 return TakeLastSubscriber;
34836}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34837//# sourceMappingURL=takeLast.js.map
34838
34839
34840/***/ }),
34841/* 310 */
34842/***/ (function(module, __webpack_exports__, __webpack_require__) {
34843
34844"use strict";
34845__webpack_require__.r(__webpack_exports__);
34846/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mapTo", function() { return mapTo; });
34847/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34848/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34849/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34850
34851
34852function mapTo(value) {
34853 return function (source) { return source.lift(new MapToOperator(value)); };
34854}
34855var MapToOperator = /*@__PURE__*/ (function () {
34856 function MapToOperator(value) {
34857 this.value = value;
34858 }
34859 MapToOperator.prototype.call = function (subscriber, source) {
34860 return source.subscribe(new MapToSubscriber(subscriber, this.value));
34861 };
34862 return MapToOperator;
34863}());
34864var MapToSubscriber = /*@__PURE__*/ (function (_super) {
34865 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MapToSubscriber, _super);
34866 function MapToSubscriber(destination, value) {
34867 var _this = _super.call(this, destination) || this;
34868 _this.value = value;
34869 return _this;
34870 }
34871 MapToSubscriber.prototype._next = function (x) {
34872 this.destination.next(this.value);
34873 };
34874 return MapToSubscriber;
34875}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34876//# sourceMappingURL=mapTo.js.map
34877
34878
34879/***/ }),
34880/* 311 */
34881/***/ (function(module, __webpack_exports__, __webpack_require__) {
34882
34883"use strict";
34884__webpack_require__.r(__webpack_exports__);
34885/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "materialize", function() { return materialize; });
34886/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34887/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34888/* harmony import */ var _Notification__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(200);
34889/** PURE_IMPORTS_START tslib,_Subscriber,_Notification PURE_IMPORTS_END */
34890
34891
34892
34893function materialize() {
34894 return function materializeOperatorFunction(source) {
34895 return source.lift(new MaterializeOperator());
34896 };
34897}
34898var MaterializeOperator = /*@__PURE__*/ (function () {
34899 function MaterializeOperator() {
34900 }
34901 MaterializeOperator.prototype.call = function (subscriber, source) {
34902 return source.subscribe(new MaterializeSubscriber(subscriber));
34903 };
34904 return MaterializeOperator;
34905}());
34906var MaterializeSubscriber = /*@__PURE__*/ (function (_super) {
34907 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MaterializeSubscriber, _super);
34908 function MaterializeSubscriber(destination) {
34909 return _super.call(this, destination) || this;
34910 }
34911 MaterializeSubscriber.prototype._next = function (value) {
34912 this.destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createNext(value));
34913 };
34914 MaterializeSubscriber.prototype._error = function (err) {
34915 var destination = this.destination;
34916 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createError(err));
34917 destination.complete();
34918 };
34919 MaterializeSubscriber.prototype._complete = function () {
34920 var destination = this.destination;
34921 destination.next(_Notification__WEBPACK_IMPORTED_MODULE_2__["Notification"].createComplete());
34922 destination.complete();
34923 };
34924 return MaterializeSubscriber;
34925}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
34926//# sourceMappingURL=materialize.js.map
34927
34928
34929/***/ }),
34930/* 312 */
34931/***/ (function(module, __webpack_exports__, __webpack_require__) {
34932
34933"use strict";
34934__webpack_require__.r(__webpack_exports__);
34935/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "max", function() { return max; });
34936/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
34937/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
34938
34939function max(comparer) {
34940 var max = (typeof comparer === 'function')
34941 ? function (x, y) { return comparer(x, y) > 0 ? x : y; }
34942 : function (x, y) { return x > y ? x : y; };
34943 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(max);
34944}
34945//# sourceMappingURL=max.js.map
34946
34947
34948/***/ }),
34949/* 313 */
34950/***/ (function(module, __webpack_exports__, __webpack_require__) {
34951
34952"use strict";
34953__webpack_require__.r(__webpack_exports__);
34954/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "reduce", function() { return reduce; });
34955/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(314);
34956/* harmony import */ var _takeLast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(309);
34957/* harmony import */ var _defaultIfEmpty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(286);
34958/* harmony import */ var _util_pipe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(182);
34959/** PURE_IMPORTS_START _scan,_takeLast,_defaultIfEmpty,_util_pipe PURE_IMPORTS_END */
34960
34961
34962
34963
34964function reduce(accumulator, seed) {
34965 if (arguments.length >= 2) {
34966 return function reduceOperatorFunctionWithSeed(source) {
34967 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);
34968 };
34969 }
34970 return function reduceOperatorFunction(source) {
34971 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);
34972 };
34973}
34974//# sourceMappingURL=reduce.js.map
34975
34976
34977/***/ }),
34978/* 314 */
34979/***/ (function(module, __webpack_exports__, __webpack_require__) {
34980
34981"use strict";
34982__webpack_require__.r(__webpack_exports__);
34983/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scan", function() { return scan; });
34984/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
34985/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
34986/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
34987
34988
34989function scan(accumulator, seed) {
34990 var hasSeed = false;
34991 if (arguments.length >= 2) {
34992 hasSeed = true;
34993 }
34994 return function scanOperatorFunction(source) {
34995 return source.lift(new ScanOperator(accumulator, seed, hasSeed));
34996 };
34997}
34998var ScanOperator = /*@__PURE__*/ (function () {
34999 function ScanOperator(accumulator, seed, hasSeed) {
35000 if (hasSeed === void 0) {
35001 hasSeed = false;
35002 }
35003 this.accumulator = accumulator;
35004 this.seed = seed;
35005 this.hasSeed = hasSeed;
35006 }
35007 ScanOperator.prototype.call = function (subscriber, source) {
35008 return source.subscribe(new ScanSubscriber(subscriber, this.accumulator, this.seed, this.hasSeed));
35009 };
35010 return ScanOperator;
35011}());
35012var ScanSubscriber = /*@__PURE__*/ (function (_super) {
35013 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ScanSubscriber, _super);
35014 function ScanSubscriber(destination, accumulator, _seed, hasSeed) {
35015 var _this = _super.call(this, destination) || this;
35016 _this.accumulator = accumulator;
35017 _this._seed = _seed;
35018 _this.hasSeed = hasSeed;
35019 _this.index = 0;
35020 return _this;
35021 }
35022 Object.defineProperty(ScanSubscriber.prototype, "seed", {
35023 get: function () {
35024 return this._seed;
35025 },
35026 set: function (value) {
35027 this.hasSeed = true;
35028 this._seed = value;
35029 },
35030 enumerable: true,
35031 configurable: true
35032 });
35033 ScanSubscriber.prototype._next = function (value) {
35034 if (!this.hasSeed) {
35035 this.seed = value;
35036 this.destination.next(value);
35037 }
35038 else {
35039 return this._tryNext(value);
35040 }
35041 };
35042 ScanSubscriber.prototype._tryNext = function (value) {
35043 var index = this.index++;
35044 var result;
35045 try {
35046 result = this.accumulator(this.seed, value, index);
35047 }
35048 catch (err) {
35049 this.destination.error(err);
35050 }
35051 this.seed = result;
35052 this.destination.next(result);
35053 };
35054 return ScanSubscriber;
35055}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35056//# sourceMappingURL=scan.js.map
35057
35058
35059/***/ }),
35060/* 315 */
35061/***/ (function(module, __webpack_exports__, __webpack_require__) {
35062
35063"use strict";
35064__webpack_require__.r(__webpack_exports__);
35065/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "merge", function() { return merge; });
35066/* harmony import */ var _observable_merge__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(256);
35067/** PURE_IMPORTS_START _observable_merge PURE_IMPORTS_END */
35068
35069function merge() {
35070 var observables = [];
35071 for (var _i = 0; _i < arguments.length; _i++) {
35072 observables[_i] = arguments[_i];
35073 }
35074 return function (source) { return source.lift.call(_observable_merge__WEBPACK_IMPORTED_MODULE_0__["merge"].apply(void 0, [source].concat(observables))); };
35075}
35076//# sourceMappingURL=merge.js.map
35077
35078
35079/***/ }),
35080/* 316 */
35081/***/ (function(module, __webpack_exports__, __webpack_require__) {
35082
35083"use strict";
35084__webpack_require__.r(__webpack_exports__);
35085/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeMapTo", function() { return mergeMapTo; });
35086/* harmony import */ var _mergeMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(240);
35087/** PURE_IMPORTS_START _mergeMap PURE_IMPORTS_END */
35088
35089function mergeMapTo(innerObservable, resultSelector, concurrent) {
35090 if (concurrent === void 0) {
35091 concurrent = Number.POSITIVE_INFINITY;
35092 }
35093 if (typeof resultSelector === 'function') {
35094 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, resultSelector, concurrent);
35095 }
35096 if (typeof resultSelector === 'number') {
35097 concurrent = resultSelector;
35098 }
35099 return Object(_mergeMap__WEBPACK_IMPORTED_MODULE_0__["mergeMap"])(function () { return innerObservable; }, concurrent);
35100}
35101//# sourceMappingURL=mergeMapTo.js.map
35102
35103
35104/***/ }),
35105/* 317 */
35106/***/ (function(module, __webpack_exports__, __webpack_require__) {
35107
35108"use strict";
35109__webpack_require__.r(__webpack_exports__);
35110/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeScan", function() { return mergeScan; });
35111/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanOperator", function() { return MergeScanOperator; });
35112/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MergeScanSubscriber", function() { return MergeScanSubscriber; });
35113/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35114/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(228);
35115/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35116/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(229);
35117/** PURE_IMPORTS_START tslib,_util_subscribeToResult,_OuterSubscriber,_InnerSubscriber PURE_IMPORTS_END */
35118
35119
35120
35121
35122function mergeScan(accumulator, seed, concurrent) {
35123 if (concurrent === void 0) {
35124 concurrent = Number.POSITIVE_INFINITY;
35125 }
35126 return function (source) { return source.lift(new MergeScanOperator(accumulator, seed, concurrent)); };
35127}
35128var MergeScanOperator = /*@__PURE__*/ (function () {
35129 function MergeScanOperator(accumulator, seed, concurrent) {
35130 this.accumulator = accumulator;
35131 this.seed = seed;
35132 this.concurrent = concurrent;
35133 }
35134 MergeScanOperator.prototype.call = function (subscriber, source) {
35135 return source.subscribe(new MergeScanSubscriber(subscriber, this.accumulator, this.seed, this.concurrent));
35136 };
35137 return MergeScanOperator;
35138}());
35139
35140var MergeScanSubscriber = /*@__PURE__*/ (function (_super) {
35141 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](MergeScanSubscriber, _super);
35142 function MergeScanSubscriber(destination, accumulator, acc, concurrent) {
35143 var _this = _super.call(this, destination) || this;
35144 _this.accumulator = accumulator;
35145 _this.acc = acc;
35146 _this.concurrent = concurrent;
35147 _this.hasValue = false;
35148 _this.hasCompleted = false;
35149 _this.buffer = [];
35150 _this.active = 0;
35151 _this.index = 0;
35152 return _this;
35153 }
35154 MergeScanSubscriber.prototype._next = function (value) {
35155 if (this.active < this.concurrent) {
35156 var index = this.index++;
35157 var destination = this.destination;
35158 var ish = void 0;
35159 try {
35160 var accumulator = this.accumulator;
35161 ish = accumulator(this.acc, value, index);
35162 }
35163 catch (e) {
35164 return destination.error(e);
35165 }
35166 this.active++;
35167 this._innerSub(ish, value, index);
35168 }
35169 else {
35170 this.buffer.push(value);
35171 }
35172 };
35173 MergeScanSubscriber.prototype._innerSub = function (ish, value, index) {
35174 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_3__["InnerSubscriber"](this, value, index);
35175 var destination = this.destination;
35176 destination.add(innerSubscriber);
35177 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_1__["subscribeToResult"])(this, ish, undefined, undefined, innerSubscriber);
35178 if (innerSubscription !== innerSubscriber) {
35179 destination.add(innerSubscription);
35180 }
35181 };
35182 MergeScanSubscriber.prototype._complete = function () {
35183 this.hasCompleted = true;
35184 if (this.active === 0 && this.buffer.length === 0) {
35185 if (this.hasValue === false) {
35186 this.destination.next(this.acc);
35187 }
35188 this.destination.complete();
35189 }
35190 this.unsubscribe();
35191 };
35192 MergeScanSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35193 var destination = this.destination;
35194 this.acc = innerValue;
35195 this.hasValue = true;
35196 destination.next(innerValue);
35197 };
35198 MergeScanSubscriber.prototype.notifyComplete = function (innerSub) {
35199 var buffer = this.buffer;
35200 var destination = this.destination;
35201 destination.remove(innerSub);
35202 this.active--;
35203 if (buffer.length > 0) {
35204 this._next(buffer.shift());
35205 }
35206 else if (this.active === 0 && this.hasCompleted) {
35207 if (this.hasValue === false) {
35208 this.destination.next(this.acc);
35209 }
35210 this.destination.complete();
35211 }
35212 };
35213 return MergeScanSubscriber;
35214}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35215
35216//# sourceMappingURL=mergeScan.js.map
35217
35218
35219/***/ }),
35220/* 318 */
35221/***/ (function(module, __webpack_exports__, __webpack_require__) {
35222
35223"use strict";
35224__webpack_require__.r(__webpack_exports__);
35225/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "min", function() { return min; });
35226/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
35227/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
35228
35229function min(comparer) {
35230 var min = (typeof comparer === 'function')
35231 ? function (x, y) { return comparer(x, y) < 0 ? x : y; }
35232 : function (x, y) { return x < y ? x : y; };
35233 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(min);
35234}
35235//# sourceMappingURL=min.js.map
35236
35237
35238/***/ }),
35239/* 319 */
35240/***/ (function(module, __webpack_exports__, __webpack_require__) {
35241
35242"use strict";
35243__webpack_require__.r(__webpack_exports__);
35244/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multicast", function() { return multicast; });
35245/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MulticastOperator", function() { return MulticastOperator; });
35246/* harmony import */ var _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(184);
35247/** PURE_IMPORTS_START _observable_ConnectableObservable PURE_IMPORTS_END */
35248
35249function multicast(subjectOrSubjectFactory, selector) {
35250 return function multicastOperatorFunction(source) {
35251 var subjectFactory;
35252 if (typeof subjectOrSubjectFactory === 'function') {
35253 subjectFactory = subjectOrSubjectFactory;
35254 }
35255 else {
35256 subjectFactory = function subjectFactory() {
35257 return subjectOrSubjectFactory;
35258 };
35259 }
35260 if (typeof selector === 'function') {
35261 return source.lift(new MulticastOperator(subjectFactory, selector));
35262 }
35263 var connectable = Object.create(source, _observable_ConnectableObservable__WEBPACK_IMPORTED_MODULE_0__["connectableObservableDescriptor"]);
35264 connectable.source = source;
35265 connectable.subjectFactory = subjectFactory;
35266 return connectable;
35267 };
35268}
35269var MulticastOperator = /*@__PURE__*/ (function () {
35270 function MulticastOperator(subjectFactory, selector) {
35271 this.subjectFactory = subjectFactory;
35272 this.selector = selector;
35273 }
35274 MulticastOperator.prototype.call = function (subscriber, source) {
35275 var selector = this.selector;
35276 var subject = this.subjectFactory();
35277 var subscription = selector(subject).subscribe(subscriber);
35278 subscription.add(source.subscribe(subject));
35279 return subscription;
35280 };
35281 return MulticastOperator;
35282}());
35283
35284//# sourceMappingURL=multicast.js.map
35285
35286
35287/***/ }),
35288/* 320 */
35289/***/ (function(module, __webpack_exports__, __webpack_require__) {
35290
35291"use strict";
35292__webpack_require__.r(__webpack_exports__);
35293/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNext", function() { return onErrorResumeNext; });
35294/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onErrorResumeNextStatic", function() { return onErrorResumeNextStatic; });
35295/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35296/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(241);
35297/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(176);
35298/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
35299/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(229);
35300/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(228);
35301/** PURE_IMPORTS_START tslib,_observable_from,_util_isArray,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35302
35303
35304
35305
35306
35307
35308function onErrorResumeNext() {
35309 var nextSources = [];
35310 for (var _i = 0; _i < arguments.length; _i++) {
35311 nextSources[_i] = arguments[_i];
35312 }
35313 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
35314 nextSources = nextSources[0];
35315 }
35316 return function (source) { return source.lift(new OnErrorResumeNextOperator(nextSources)); };
35317}
35318function onErrorResumeNextStatic() {
35319 var nextSources = [];
35320 for (var _i = 0; _i < arguments.length; _i++) {
35321 nextSources[_i] = arguments[_i];
35322 }
35323 var source = null;
35324 if (nextSources.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_2__["isArray"])(nextSources[0])) {
35325 nextSources = nextSources[0];
35326 }
35327 source = nextSources.shift();
35328 return Object(_observable_from__WEBPACK_IMPORTED_MODULE_1__["from"])(source, null).lift(new OnErrorResumeNextOperator(nextSources));
35329}
35330var OnErrorResumeNextOperator = /*@__PURE__*/ (function () {
35331 function OnErrorResumeNextOperator(nextSources) {
35332 this.nextSources = nextSources;
35333 }
35334 OnErrorResumeNextOperator.prototype.call = function (subscriber, source) {
35335 return source.subscribe(new OnErrorResumeNextSubscriber(subscriber, this.nextSources));
35336 };
35337 return OnErrorResumeNextOperator;
35338}());
35339var OnErrorResumeNextSubscriber = /*@__PURE__*/ (function (_super) {
35340 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](OnErrorResumeNextSubscriber, _super);
35341 function OnErrorResumeNextSubscriber(destination, nextSources) {
35342 var _this = _super.call(this, destination) || this;
35343 _this.destination = destination;
35344 _this.nextSources = nextSources;
35345 return _this;
35346 }
35347 OnErrorResumeNextSubscriber.prototype.notifyError = function (error, innerSub) {
35348 this.subscribeToNextSource();
35349 };
35350 OnErrorResumeNextSubscriber.prototype.notifyComplete = function (innerSub) {
35351 this.subscribeToNextSource();
35352 };
35353 OnErrorResumeNextSubscriber.prototype._error = function (err) {
35354 this.subscribeToNextSource();
35355 this.unsubscribe();
35356 };
35357 OnErrorResumeNextSubscriber.prototype._complete = function () {
35358 this.subscribeToNextSource();
35359 this.unsubscribe();
35360 };
35361 OnErrorResumeNextSubscriber.prototype.subscribeToNextSource = function () {
35362 var next = this.nextSources.shift();
35363 if (!!next) {
35364 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_4__["InnerSubscriber"](this, undefined, undefined);
35365 var destination = this.destination;
35366 destination.add(innerSubscriber);
35367 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_5__["subscribeToResult"])(this, next, undefined, undefined, innerSubscriber);
35368 if (innerSubscription !== innerSubscriber) {
35369 destination.add(innerSubscription);
35370 }
35371 }
35372 else {
35373 this.destination.complete();
35374 }
35375 };
35376 return OnErrorResumeNextSubscriber;
35377}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
35378//# sourceMappingURL=onErrorResumeNext.js.map
35379
35380
35381/***/ }),
35382/* 321 */
35383/***/ (function(module, __webpack_exports__, __webpack_require__) {
35384
35385"use strict";
35386__webpack_require__.r(__webpack_exports__);
35387/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pairwise", function() { return pairwise; });
35388/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35389/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35390/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35391
35392
35393function pairwise() {
35394 return function (source) { return source.lift(new PairwiseOperator()); };
35395}
35396var PairwiseOperator = /*@__PURE__*/ (function () {
35397 function PairwiseOperator() {
35398 }
35399 PairwiseOperator.prototype.call = function (subscriber, source) {
35400 return source.subscribe(new PairwiseSubscriber(subscriber));
35401 };
35402 return PairwiseOperator;
35403}());
35404var PairwiseSubscriber = /*@__PURE__*/ (function (_super) {
35405 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](PairwiseSubscriber, _super);
35406 function PairwiseSubscriber(destination) {
35407 var _this = _super.call(this, destination) || this;
35408 _this.hasPrev = false;
35409 return _this;
35410 }
35411 PairwiseSubscriber.prototype._next = function (value) {
35412 var pair;
35413 if (this.hasPrev) {
35414 pair = [this.prev, value];
35415 }
35416 else {
35417 this.hasPrev = true;
35418 }
35419 this.prev = value;
35420 if (pair) {
35421 this.destination.next(pair);
35422 }
35423 };
35424 return PairwiseSubscriber;
35425}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35426//# sourceMappingURL=pairwise.js.map
35427
35428
35429/***/ }),
35430/* 322 */
35431/***/ (function(module, __webpack_exports__, __webpack_require__) {
35432
35433"use strict";
35434__webpack_require__.r(__webpack_exports__);
35435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "partition", function() { return partition; });
35436/* harmony import */ var _util_not__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(261);
35437/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(262);
35438/** PURE_IMPORTS_START _util_not,_filter PURE_IMPORTS_END */
35439
35440
35441function partition(predicate, thisArg) {
35442 return function (source) {
35443 return [
35444 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(predicate, thisArg)(source),
35445 Object(_filter__WEBPACK_IMPORTED_MODULE_1__["filter"])(Object(_util_not__WEBPACK_IMPORTED_MODULE_0__["not"])(predicate, thisArg))(source)
35446 ];
35447 };
35448}
35449//# sourceMappingURL=partition.js.map
35450
35451
35452/***/ }),
35453/* 323 */
35454/***/ (function(module, __webpack_exports__, __webpack_require__) {
35455
35456"use strict";
35457__webpack_require__.r(__webpack_exports__);
35458/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "pluck", function() { return pluck; });
35459/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(224);
35460/** PURE_IMPORTS_START _map PURE_IMPORTS_END */
35461
35462function pluck() {
35463 var properties = [];
35464 for (var _i = 0; _i < arguments.length; _i++) {
35465 properties[_i] = arguments[_i];
35466 }
35467 var length = properties.length;
35468 if (length === 0) {
35469 throw new Error('list of properties cannot be empty.');
35470 }
35471 return function (source) { return Object(_map__WEBPACK_IMPORTED_MODULE_0__["map"])(plucker(properties, length))(source); };
35472}
35473function plucker(props, length) {
35474 var mapper = function (x) {
35475 var currentProp = x;
35476 for (var i = 0; i < length; i++) {
35477 var p = currentProp[props[i]];
35478 if (typeof p !== 'undefined') {
35479 currentProp = p;
35480 }
35481 else {
35482 return undefined;
35483 }
35484 }
35485 return currentProp;
35486 };
35487 return mapper;
35488}
35489//# sourceMappingURL=pluck.js.map
35490
35491
35492/***/ }),
35493/* 324 */
35494/***/ (function(module, __webpack_exports__, __webpack_require__) {
35495
35496"use strict";
35497__webpack_require__.r(__webpack_exports__);
35498/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publish", function() { return publish; });
35499/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(185);
35500/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35501/** PURE_IMPORTS_START _Subject,_multicast PURE_IMPORTS_END */
35502
35503
35504function publish(selector) {
35505 return selector ?
35506 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"](); }, selector) :
35507 Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _Subject__WEBPACK_IMPORTED_MODULE_0__["Subject"]());
35508}
35509//# sourceMappingURL=publish.js.map
35510
35511
35512/***/ }),
35513/* 325 */
35514/***/ (function(module, __webpack_exports__, __webpack_require__) {
35515
35516"use strict";
35517__webpack_require__.r(__webpack_exports__);
35518/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishBehavior", function() { return publishBehavior; });
35519/* harmony import */ var _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(190);
35520/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35521/** PURE_IMPORTS_START _BehaviorSubject,_multicast PURE_IMPORTS_END */
35522
35523
35524function publishBehavior(value) {
35525 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _BehaviorSubject__WEBPACK_IMPORTED_MODULE_0__["BehaviorSubject"](value))(source); };
35526}
35527//# sourceMappingURL=publishBehavior.js.map
35528
35529
35530/***/ }),
35531/* 326 */
35532/***/ (function(module, __webpack_exports__, __webpack_require__) {
35533
35534"use strict";
35535__webpack_require__.r(__webpack_exports__);
35536/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishLast", function() { return publishLast; });
35537/* harmony import */ var _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(208);
35538/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35539/** PURE_IMPORTS_START _AsyncSubject,_multicast PURE_IMPORTS_END */
35540
35541
35542function publishLast() {
35543 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(new _AsyncSubject__WEBPACK_IMPORTED_MODULE_0__["AsyncSubject"]())(source); };
35544}
35545//# sourceMappingURL=publishLast.js.map
35546
35547
35548/***/ }),
35549/* 327 */
35550/***/ (function(module, __webpack_exports__, __webpack_require__) {
35551
35552"use strict";
35553__webpack_require__.r(__webpack_exports__);
35554/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "publishReplay", function() { return publishReplay; });
35555/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(191);
35556/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(319);
35557/** PURE_IMPORTS_START _ReplaySubject,_multicast PURE_IMPORTS_END */
35558
35559
35560function publishReplay(bufferSize, windowTime, selectorOrScheduler, scheduler) {
35561 if (selectorOrScheduler && typeof selectorOrScheduler !== 'function') {
35562 scheduler = selectorOrScheduler;
35563 }
35564 var selector = typeof selectorOrScheduler === 'function' ? selectorOrScheduler : undefined;
35565 var subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
35566 return function (source) { return Object(_multicast__WEBPACK_IMPORTED_MODULE_1__["multicast"])(function () { return subject; }, selector)(source); };
35567}
35568//# sourceMappingURL=publishReplay.js.map
35569
35570
35571/***/ }),
35572/* 328 */
35573/***/ (function(module, __webpack_exports__, __webpack_require__) {
35574
35575"use strict";
35576__webpack_require__.r(__webpack_exports__);
35577/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "race", function() { return race; });
35578/* harmony import */ var _util_isArray__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(176);
35579/* harmony import */ var _observable_race__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(263);
35580/** PURE_IMPORTS_START _util_isArray,_observable_race PURE_IMPORTS_END */
35581
35582
35583function race() {
35584 var observables = [];
35585 for (var _i = 0; _i < arguments.length; _i++) {
35586 observables[_i] = arguments[_i];
35587 }
35588 return function raceOperatorFunction(source) {
35589 if (observables.length === 1 && Object(_util_isArray__WEBPACK_IMPORTED_MODULE_0__["isArray"])(observables[0])) {
35590 observables = observables[0];
35591 }
35592 return source.lift.call(_observable_race__WEBPACK_IMPORTED_MODULE_1__["race"].apply(void 0, [source].concat(observables)));
35593 };
35594}
35595//# sourceMappingURL=race.js.map
35596
35597
35598/***/ }),
35599/* 329 */
35600/***/ (function(module, __webpack_exports__, __webpack_require__) {
35601
35602"use strict";
35603__webpack_require__.r(__webpack_exports__);
35604/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeat", function() { return repeat; });
35605/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35606/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35607/* harmony import */ var _observable_empty__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(201);
35608/** PURE_IMPORTS_START tslib,_Subscriber,_observable_empty PURE_IMPORTS_END */
35609
35610
35611
35612function repeat(count) {
35613 if (count === void 0) {
35614 count = -1;
35615 }
35616 return function (source) {
35617 if (count === 0) {
35618 return Object(_observable_empty__WEBPACK_IMPORTED_MODULE_2__["empty"])();
35619 }
35620 else if (count < 0) {
35621 return source.lift(new RepeatOperator(-1, source));
35622 }
35623 else {
35624 return source.lift(new RepeatOperator(count - 1, source));
35625 }
35626 };
35627}
35628var RepeatOperator = /*@__PURE__*/ (function () {
35629 function RepeatOperator(count, source) {
35630 this.count = count;
35631 this.source = source;
35632 }
35633 RepeatOperator.prototype.call = function (subscriber, source) {
35634 return source.subscribe(new RepeatSubscriber(subscriber, this.count, this.source));
35635 };
35636 return RepeatOperator;
35637}());
35638var RepeatSubscriber = /*@__PURE__*/ (function (_super) {
35639 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatSubscriber, _super);
35640 function RepeatSubscriber(destination, count, source) {
35641 var _this = _super.call(this, destination) || this;
35642 _this.count = count;
35643 _this.source = source;
35644 return _this;
35645 }
35646 RepeatSubscriber.prototype.complete = function () {
35647 if (!this.isStopped) {
35648 var _a = this, source = _a.source, count = _a.count;
35649 if (count === 0) {
35650 return _super.prototype.complete.call(this);
35651 }
35652 else if (count > -1) {
35653 this.count = count - 1;
35654 }
35655 source.subscribe(this._unsubscribeAndRecycle());
35656 }
35657 };
35658 return RepeatSubscriber;
35659}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35660//# sourceMappingURL=repeat.js.map
35661
35662
35663/***/ }),
35664/* 330 */
35665/***/ (function(module, __webpack_exports__, __webpack_require__) {
35666
35667"use strict";
35668__webpack_require__.r(__webpack_exports__);
35669/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "repeatWhen", function() { return repeatWhen; });
35670/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35671/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35672/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35673/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
35674/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35675
35676
35677
35678
35679function repeatWhen(notifier) {
35680 return function (source) { return source.lift(new RepeatWhenOperator(notifier)); };
35681}
35682var RepeatWhenOperator = /*@__PURE__*/ (function () {
35683 function RepeatWhenOperator(notifier) {
35684 this.notifier = notifier;
35685 }
35686 RepeatWhenOperator.prototype.call = function (subscriber, source) {
35687 return source.subscribe(new RepeatWhenSubscriber(subscriber, this.notifier, source));
35688 };
35689 return RepeatWhenOperator;
35690}());
35691var RepeatWhenSubscriber = /*@__PURE__*/ (function (_super) {
35692 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RepeatWhenSubscriber, _super);
35693 function RepeatWhenSubscriber(destination, notifier, source) {
35694 var _this = _super.call(this, destination) || this;
35695 _this.notifier = notifier;
35696 _this.source = source;
35697 _this.sourceIsBeingSubscribedTo = true;
35698 return _this;
35699 }
35700 RepeatWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35701 this.sourceIsBeingSubscribedTo = true;
35702 this.source.subscribe(this);
35703 };
35704 RepeatWhenSubscriber.prototype.notifyComplete = function (innerSub) {
35705 if (this.sourceIsBeingSubscribedTo === false) {
35706 return _super.prototype.complete.call(this);
35707 }
35708 };
35709 RepeatWhenSubscriber.prototype.complete = function () {
35710 this.sourceIsBeingSubscribedTo = false;
35711 if (!this.isStopped) {
35712 if (!this.retries) {
35713 this.subscribeToRetries();
35714 }
35715 if (!this.retriesSubscription || this.retriesSubscription.closed) {
35716 return _super.prototype.complete.call(this);
35717 }
35718 this._unsubscribeAndRecycle();
35719 this.notifications.next();
35720 }
35721 };
35722 RepeatWhenSubscriber.prototype._unsubscribe = function () {
35723 var _a = this, notifications = _a.notifications, retriesSubscription = _a.retriesSubscription;
35724 if (notifications) {
35725 notifications.unsubscribe();
35726 this.notifications = null;
35727 }
35728 if (retriesSubscription) {
35729 retriesSubscription.unsubscribe();
35730 this.retriesSubscription = null;
35731 }
35732 this.retries = null;
35733 };
35734 RepeatWhenSubscriber.prototype._unsubscribeAndRecycle = function () {
35735 var _unsubscribe = this._unsubscribe;
35736 this._unsubscribe = null;
35737 _super.prototype._unsubscribeAndRecycle.call(this);
35738 this._unsubscribe = _unsubscribe;
35739 return this;
35740 };
35741 RepeatWhenSubscriber.prototype.subscribeToRetries = function () {
35742 this.notifications = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
35743 var retries;
35744 try {
35745 var notifier = this.notifier;
35746 retries = notifier(this.notifications);
35747 }
35748 catch (e) {
35749 return _super.prototype.complete.call(this);
35750 }
35751 this.retries = retries;
35752 this.retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
35753 };
35754 return RepeatWhenSubscriber;
35755}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35756//# sourceMappingURL=repeatWhen.js.map
35757
35758
35759/***/ }),
35760/* 331 */
35761/***/ (function(module, __webpack_exports__, __webpack_require__) {
35762
35763"use strict";
35764__webpack_require__.r(__webpack_exports__);
35765/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retry", function() { return retry; });
35766/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35767/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35768/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
35769
35770
35771function retry(count) {
35772 if (count === void 0) {
35773 count = -1;
35774 }
35775 return function (source) { return source.lift(new RetryOperator(count, source)); };
35776}
35777var RetryOperator = /*@__PURE__*/ (function () {
35778 function RetryOperator(count, source) {
35779 this.count = count;
35780 this.source = source;
35781 }
35782 RetryOperator.prototype.call = function (subscriber, source) {
35783 return source.subscribe(new RetrySubscriber(subscriber, this.count, this.source));
35784 };
35785 return RetryOperator;
35786}());
35787var RetrySubscriber = /*@__PURE__*/ (function (_super) {
35788 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetrySubscriber, _super);
35789 function RetrySubscriber(destination, count, source) {
35790 var _this = _super.call(this, destination) || this;
35791 _this.count = count;
35792 _this.source = source;
35793 return _this;
35794 }
35795 RetrySubscriber.prototype.error = function (err) {
35796 if (!this.isStopped) {
35797 var _a = this, source = _a.source, count = _a.count;
35798 if (count === 0) {
35799 return _super.prototype.error.call(this, err);
35800 }
35801 else if (count > -1) {
35802 this.count = count - 1;
35803 }
35804 source.subscribe(this._unsubscribeAndRecycle());
35805 }
35806 };
35807 return RetrySubscriber;
35808}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
35809//# sourceMappingURL=retry.js.map
35810
35811
35812/***/ }),
35813/* 332 */
35814/***/ (function(module, __webpack_exports__, __webpack_require__) {
35815
35816"use strict";
35817__webpack_require__.r(__webpack_exports__);
35818/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "retryWhen", function() { return retryWhen; });
35819/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35820/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
35821/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
35822/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
35823/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35824
35825
35826
35827
35828function retryWhen(notifier) {
35829 return function (source) { return source.lift(new RetryWhenOperator(notifier, source)); };
35830}
35831var RetryWhenOperator = /*@__PURE__*/ (function () {
35832 function RetryWhenOperator(notifier, source) {
35833 this.notifier = notifier;
35834 this.source = source;
35835 }
35836 RetryWhenOperator.prototype.call = function (subscriber, source) {
35837 return source.subscribe(new RetryWhenSubscriber(subscriber, this.notifier, this.source));
35838 };
35839 return RetryWhenOperator;
35840}());
35841var RetryWhenSubscriber = /*@__PURE__*/ (function (_super) {
35842 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](RetryWhenSubscriber, _super);
35843 function RetryWhenSubscriber(destination, notifier, source) {
35844 var _this = _super.call(this, destination) || this;
35845 _this.notifier = notifier;
35846 _this.source = source;
35847 return _this;
35848 }
35849 RetryWhenSubscriber.prototype.error = function (err) {
35850 if (!this.isStopped) {
35851 var errors = this.errors;
35852 var retries = this.retries;
35853 var retriesSubscription = this.retriesSubscription;
35854 if (!retries) {
35855 errors = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
35856 try {
35857 var notifier = this.notifier;
35858 retries = notifier(errors);
35859 }
35860 catch (e) {
35861 return _super.prototype.error.call(this, e);
35862 }
35863 retriesSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, retries);
35864 }
35865 else {
35866 this.errors = null;
35867 this.retriesSubscription = null;
35868 }
35869 this._unsubscribeAndRecycle();
35870 this.errors = errors;
35871 this.retries = retries;
35872 this.retriesSubscription = retriesSubscription;
35873 errors.next(err);
35874 }
35875 };
35876 RetryWhenSubscriber.prototype._unsubscribe = function () {
35877 var _a = this, errors = _a.errors, retriesSubscription = _a.retriesSubscription;
35878 if (errors) {
35879 errors.unsubscribe();
35880 this.errors = null;
35881 }
35882 if (retriesSubscription) {
35883 retriesSubscription.unsubscribe();
35884 this.retriesSubscription = null;
35885 }
35886 this.retries = null;
35887 };
35888 RetryWhenSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35889 var _unsubscribe = this._unsubscribe;
35890 this._unsubscribe = null;
35891 this._unsubscribeAndRecycle();
35892 this._unsubscribe = _unsubscribe;
35893 this.source.subscribe(this);
35894 };
35895 return RetryWhenSubscriber;
35896}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
35897//# sourceMappingURL=retryWhen.js.map
35898
35899
35900/***/ }),
35901/* 333 */
35902/***/ (function(module, __webpack_exports__, __webpack_require__) {
35903
35904"use strict";
35905__webpack_require__.r(__webpack_exports__);
35906/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sample", function() { return sample; });
35907/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35908/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
35909/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
35910/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
35911
35912
35913
35914function sample(notifier) {
35915 return function (source) { return source.lift(new SampleOperator(notifier)); };
35916}
35917var SampleOperator = /*@__PURE__*/ (function () {
35918 function SampleOperator(notifier) {
35919 this.notifier = notifier;
35920 }
35921 SampleOperator.prototype.call = function (subscriber, source) {
35922 var sampleSubscriber = new SampleSubscriber(subscriber);
35923 var subscription = source.subscribe(sampleSubscriber);
35924 subscription.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(sampleSubscriber, this.notifier));
35925 return subscription;
35926 };
35927 return SampleOperator;
35928}());
35929var SampleSubscriber = /*@__PURE__*/ (function (_super) {
35930 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleSubscriber, _super);
35931 function SampleSubscriber() {
35932 var _this = _super !== null && _super.apply(this, arguments) || this;
35933 _this.hasValue = false;
35934 return _this;
35935 }
35936 SampleSubscriber.prototype._next = function (value) {
35937 this.value = value;
35938 this.hasValue = true;
35939 };
35940 SampleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
35941 this.emitValue();
35942 };
35943 SampleSubscriber.prototype.notifyComplete = function () {
35944 this.emitValue();
35945 };
35946 SampleSubscriber.prototype.emitValue = function () {
35947 if (this.hasValue) {
35948 this.hasValue = false;
35949 this.destination.next(this.value);
35950 }
35951 };
35952 return SampleSubscriber;
35953}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
35954//# sourceMappingURL=sample.js.map
35955
35956
35957/***/ }),
35958/* 334 */
35959/***/ (function(module, __webpack_exports__, __webpack_require__) {
35960
35961"use strict";
35962__webpack_require__.r(__webpack_exports__);
35963/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sampleTime", function() { return sampleTime; });
35964/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
35965/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
35966/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
35967/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async PURE_IMPORTS_END */
35968
35969
35970
35971function sampleTime(period, scheduler) {
35972 if (scheduler === void 0) {
35973 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
35974 }
35975 return function (source) { return source.lift(new SampleTimeOperator(period, scheduler)); };
35976}
35977var SampleTimeOperator = /*@__PURE__*/ (function () {
35978 function SampleTimeOperator(period, scheduler) {
35979 this.period = period;
35980 this.scheduler = scheduler;
35981 }
35982 SampleTimeOperator.prototype.call = function (subscriber, source) {
35983 return source.subscribe(new SampleTimeSubscriber(subscriber, this.period, this.scheduler));
35984 };
35985 return SampleTimeOperator;
35986}());
35987var SampleTimeSubscriber = /*@__PURE__*/ (function (_super) {
35988 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SampleTimeSubscriber, _super);
35989 function SampleTimeSubscriber(destination, period, scheduler) {
35990 var _this = _super.call(this, destination) || this;
35991 _this.period = period;
35992 _this.scheduler = scheduler;
35993 _this.hasValue = false;
35994 _this.add(scheduler.schedule(dispatchNotification, period, { subscriber: _this, period: period }));
35995 return _this;
35996 }
35997 SampleTimeSubscriber.prototype._next = function (value) {
35998 this.lastValue = value;
35999 this.hasValue = true;
36000 };
36001 SampleTimeSubscriber.prototype.notifyNext = function () {
36002 if (this.hasValue) {
36003 this.hasValue = false;
36004 this.destination.next(this.lastValue);
36005 }
36006 };
36007 return SampleTimeSubscriber;
36008}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36009function dispatchNotification(state) {
36010 var subscriber = state.subscriber, period = state.period;
36011 subscriber.notifyNext();
36012 this.schedule(state, period);
36013}
36014//# sourceMappingURL=sampleTime.js.map
36015
36016
36017/***/ }),
36018/* 335 */
36019/***/ (function(module, __webpack_exports__, __webpack_require__) {
36020
36021"use strict";
36022__webpack_require__.r(__webpack_exports__);
36023/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sequenceEqual", function() { return sequenceEqual; });
36024/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualOperator", function() { return SequenceEqualOperator; });
36025/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SequenceEqualSubscriber", function() { return SequenceEqualSubscriber; });
36026/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36027/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36028/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36029
36030
36031function sequenceEqual(compareTo, comparator) {
36032 return function (source) { return source.lift(new SequenceEqualOperator(compareTo, comparator)); };
36033}
36034var SequenceEqualOperator = /*@__PURE__*/ (function () {
36035 function SequenceEqualOperator(compareTo, comparator) {
36036 this.compareTo = compareTo;
36037 this.comparator = comparator;
36038 }
36039 SequenceEqualOperator.prototype.call = function (subscriber, source) {
36040 return source.subscribe(new SequenceEqualSubscriber(subscriber, this.compareTo, this.comparator));
36041 };
36042 return SequenceEqualOperator;
36043}());
36044
36045var SequenceEqualSubscriber = /*@__PURE__*/ (function (_super) {
36046 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualSubscriber, _super);
36047 function SequenceEqualSubscriber(destination, compareTo, comparator) {
36048 var _this = _super.call(this, destination) || this;
36049 _this.compareTo = compareTo;
36050 _this.comparator = comparator;
36051 _this._a = [];
36052 _this._b = [];
36053 _this._oneComplete = false;
36054 _this.destination.add(compareTo.subscribe(new SequenceEqualCompareToSubscriber(destination, _this)));
36055 return _this;
36056 }
36057 SequenceEqualSubscriber.prototype._next = function (value) {
36058 if (this._oneComplete && this._b.length === 0) {
36059 this.emit(false);
36060 }
36061 else {
36062 this._a.push(value);
36063 this.checkValues();
36064 }
36065 };
36066 SequenceEqualSubscriber.prototype._complete = function () {
36067 if (this._oneComplete) {
36068 this.emit(this._a.length === 0 && this._b.length === 0);
36069 }
36070 else {
36071 this._oneComplete = true;
36072 }
36073 this.unsubscribe();
36074 };
36075 SequenceEqualSubscriber.prototype.checkValues = function () {
36076 var _c = this, _a = _c._a, _b = _c._b, comparator = _c.comparator;
36077 while (_a.length > 0 && _b.length > 0) {
36078 var a = _a.shift();
36079 var b = _b.shift();
36080 var areEqual = false;
36081 try {
36082 areEqual = comparator ? comparator(a, b) : a === b;
36083 }
36084 catch (e) {
36085 this.destination.error(e);
36086 }
36087 if (!areEqual) {
36088 this.emit(false);
36089 }
36090 }
36091 };
36092 SequenceEqualSubscriber.prototype.emit = function (value) {
36093 var destination = this.destination;
36094 destination.next(value);
36095 destination.complete();
36096 };
36097 SequenceEqualSubscriber.prototype.nextB = function (value) {
36098 if (this._oneComplete && this._a.length === 0) {
36099 this.emit(false);
36100 }
36101 else {
36102 this._b.push(value);
36103 this.checkValues();
36104 }
36105 };
36106 SequenceEqualSubscriber.prototype.completeB = function () {
36107 if (this._oneComplete) {
36108 this.emit(this._a.length === 0 && this._b.length === 0);
36109 }
36110 else {
36111 this._oneComplete = true;
36112 }
36113 };
36114 return SequenceEqualSubscriber;
36115}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36116
36117var SequenceEqualCompareToSubscriber = /*@__PURE__*/ (function (_super) {
36118 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SequenceEqualCompareToSubscriber, _super);
36119 function SequenceEqualCompareToSubscriber(destination, parent) {
36120 var _this = _super.call(this, destination) || this;
36121 _this.parent = parent;
36122 return _this;
36123 }
36124 SequenceEqualCompareToSubscriber.prototype._next = function (value) {
36125 this.parent.nextB(value);
36126 };
36127 SequenceEqualCompareToSubscriber.prototype._error = function (err) {
36128 this.parent.error(err);
36129 this.unsubscribe();
36130 };
36131 SequenceEqualCompareToSubscriber.prototype._complete = function () {
36132 this.parent.completeB();
36133 this.unsubscribe();
36134 };
36135 return SequenceEqualCompareToSubscriber;
36136}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36137//# sourceMappingURL=sequenceEqual.js.map
36138
36139
36140/***/ }),
36141/* 336 */
36142/***/ (function(module, __webpack_exports__, __webpack_require__) {
36143
36144"use strict";
36145__webpack_require__.r(__webpack_exports__);
36146/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "share", function() { return share; });
36147/* harmony import */ var _multicast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(319);
36148/* harmony import */ var _refCount__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(188);
36149/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
36150/** PURE_IMPORTS_START _multicast,_refCount,_Subject PURE_IMPORTS_END */
36151
36152
36153
36154function shareSubjectFactory() {
36155 return new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
36156}
36157function share() {
36158 return function (source) { return Object(_refCount__WEBPACK_IMPORTED_MODULE_1__["refCount"])()(Object(_multicast__WEBPACK_IMPORTED_MODULE_0__["multicast"])(shareSubjectFactory)(source)); };
36159}
36160//# sourceMappingURL=share.js.map
36161
36162
36163/***/ }),
36164/* 337 */
36165/***/ (function(module, __webpack_exports__, __webpack_require__) {
36166
36167"use strict";
36168__webpack_require__.r(__webpack_exports__);
36169/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "shareReplay", function() { return shareReplay; });
36170/* harmony import */ var _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(191);
36171/** PURE_IMPORTS_START _ReplaySubject PURE_IMPORTS_END */
36172
36173function shareReplay(configOrBufferSize, windowTime, scheduler) {
36174 var config;
36175 if (configOrBufferSize && typeof configOrBufferSize === 'object') {
36176 config = configOrBufferSize;
36177 }
36178 else {
36179 config = {
36180 bufferSize: configOrBufferSize,
36181 windowTime: windowTime,
36182 refCount: false,
36183 scheduler: scheduler
36184 };
36185 }
36186 return function (source) { return source.lift(shareReplayOperator(config)); };
36187}
36188function shareReplayOperator(_a) {
36189 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;
36190 var subject;
36191 var refCount = 0;
36192 var subscription;
36193 var hasError = false;
36194 var isComplete = false;
36195 return function shareReplayOperation(source) {
36196 refCount++;
36197 if (!subject || hasError) {
36198 hasError = false;
36199 subject = new _ReplaySubject__WEBPACK_IMPORTED_MODULE_0__["ReplaySubject"](bufferSize, windowTime, scheduler);
36200 subscription = source.subscribe({
36201 next: function (value) { subject.next(value); },
36202 error: function (err) {
36203 hasError = true;
36204 subject.error(err);
36205 },
36206 complete: function () {
36207 isComplete = true;
36208 subscription = undefined;
36209 subject.complete();
36210 },
36211 });
36212 }
36213 var innerSub = subject.subscribe(this);
36214 this.add(function () {
36215 refCount--;
36216 innerSub.unsubscribe();
36217 if (subscription && !isComplete && useRefCount && refCount === 0) {
36218 subscription.unsubscribe();
36219 subscription = undefined;
36220 subject = undefined;
36221 }
36222 });
36223 };
36224}
36225//# sourceMappingURL=shareReplay.js.map
36226
36227
36228/***/ }),
36229/* 338 */
36230/***/ (function(module, __webpack_exports__, __webpack_require__) {
36231
36232"use strict";
36233__webpack_require__.r(__webpack_exports__);
36234/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "single", function() { return single; });
36235/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36236/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36237/* harmony import */ var _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(221);
36238/** PURE_IMPORTS_START tslib,_Subscriber,_util_EmptyError PURE_IMPORTS_END */
36239
36240
36241
36242function single(predicate) {
36243 return function (source) { return source.lift(new SingleOperator(predicate, source)); };
36244}
36245var SingleOperator = /*@__PURE__*/ (function () {
36246 function SingleOperator(predicate, source) {
36247 this.predicate = predicate;
36248 this.source = source;
36249 }
36250 SingleOperator.prototype.call = function (subscriber, source) {
36251 return source.subscribe(new SingleSubscriber(subscriber, this.predicate, this.source));
36252 };
36253 return SingleOperator;
36254}());
36255var SingleSubscriber = /*@__PURE__*/ (function (_super) {
36256 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SingleSubscriber, _super);
36257 function SingleSubscriber(destination, predicate, source) {
36258 var _this = _super.call(this, destination) || this;
36259 _this.predicate = predicate;
36260 _this.source = source;
36261 _this.seenValue = false;
36262 _this.index = 0;
36263 return _this;
36264 }
36265 SingleSubscriber.prototype.applySingleValue = function (value) {
36266 if (this.seenValue) {
36267 this.destination.error('Sequence contains more than one element');
36268 }
36269 else {
36270 this.seenValue = true;
36271 this.singleValue = value;
36272 }
36273 };
36274 SingleSubscriber.prototype._next = function (value) {
36275 var index = this.index++;
36276 if (this.predicate) {
36277 this.tryNext(value, index);
36278 }
36279 else {
36280 this.applySingleValue(value);
36281 }
36282 };
36283 SingleSubscriber.prototype.tryNext = function (value, index) {
36284 try {
36285 if (this.predicate(value, index, this.source)) {
36286 this.applySingleValue(value);
36287 }
36288 }
36289 catch (err) {
36290 this.destination.error(err);
36291 }
36292 };
36293 SingleSubscriber.prototype._complete = function () {
36294 var destination = this.destination;
36295 if (this.index > 0) {
36296 destination.next(this.seenValue ? this.singleValue : undefined);
36297 destination.complete();
36298 }
36299 else {
36300 destination.error(new _util_EmptyError__WEBPACK_IMPORTED_MODULE_2__["EmptyError"]);
36301 }
36302 };
36303 return SingleSubscriber;
36304}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36305//# sourceMappingURL=single.js.map
36306
36307
36308/***/ }),
36309/* 339 */
36310/***/ (function(module, __webpack_exports__, __webpack_require__) {
36311
36312"use strict";
36313__webpack_require__.r(__webpack_exports__);
36314/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skip", function() { return skip; });
36315/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36316/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36317/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36318
36319
36320function skip(count) {
36321 return function (source) { return source.lift(new SkipOperator(count)); };
36322}
36323var SkipOperator = /*@__PURE__*/ (function () {
36324 function SkipOperator(total) {
36325 this.total = total;
36326 }
36327 SkipOperator.prototype.call = function (subscriber, source) {
36328 return source.subscribe(new SkipSubscriber(subscriber, this.total));
36329 };
36330 return SkipOperator;
36331}());
36332var SkipSubscriber = /*@__PURE__*/ (function (_super) {
36333 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipSubscriber, _super);
36334 function SkipSubscriber(destination, total) {
36335 var _this = _super.call(this, destination) || this;
36336 _this.total = total;
36337 _this.count = 0;
36338 return _this;
36339 }
36340 SkipSubscriber.prototype._next = function (x) {
36341 if (++this.count > this.total) {
36342 this.destination.next(x);
36343 }
36344 };
36345 return SkipSubscriber;
36346}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36347//# sourceMappingURL=skip.js.map
36348
36349
36350/***/ }),
36351/* 340 */
36352/***/ (function(module, __webpack_exports__, __webpack_require__) {
36353
36354"use strict";
36355__webpack_require__.r(__webpack_exports__);
36356/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipLast", function() { return skipLast; });
36357/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36358/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36359/* harmony import */ var _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(220);
36360/** PURE_IMPORTS_START tslib,_Subscriber,_util_ArgumentOutOfRangeError PURE_IMPORTS_END */
36361
36362
36363
36364function skipLast(count) {
36365 return function (source) { return source.lift(new SkipLastOperator(count)); };
36366}
36367var SkipLastOperator = /*@__PURE__*/ (function () {
36368 function SkipLastOperator(_skipCount) {
36369 this._skipCount = _skipCount;
36370 if (this._skipCount < 0) {
36371 throw new _util_ArgumentOutOfRangeError__WEBPACK_IMPORTED_MODULE_2__["ArgumentOutOfRangeError"];
36372 }
36373 }
36374 SkipLastOperator.prototype.call = function (subscriber, source) {
36375 if (this._skipCount === 0) {
36376 return source.subscribe(new _Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"](subscriber));
36377 }
36378 else {
36379 return source.subscribe(new SkipLastSubscriber(subscriber, this._skipCount));
36380 }
36381 };
36382 return SkipLastOperator;
36383}());
36384var SkipLastSubscriber = /*@__PURE__*/ (function (_super) {
36385 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipLastSubscriber, _super);
36386 function SkipLastSubscriber(destination, _skipCount) {
36387 var _this = _super.call(this, destination) || this;
36388 _this._skipCount = _skipCount;
36389 _this._count = 0;
36390 _this._ring = new Array(_skipCount);
36391 return _this;
36392 }
36393 SkipLastSubscriber.prototype._next = function (value) {
36394 var skipCount = this._skipCount;
36395 var count = this._count++;
36396 if (count < skipCount) {
36397 this._ring[count] = value;
36398 }
36399 else {
36400 var currentIndex = count % skipCount;
36401 var ring = this._ring;
36402 var oldValue = ring[currentIndex];
36403 ring[currentIndex] = value;
36404 this.destination.next(oldValue);
36405 }
36406 };
36407 return SkipLastSubscriber;
36408}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36409//# sourceMappingURL=skipLast.js.map
36410
36411
36412/***/ }),
36413/* 341 */
36414/***/ (function(module, __webpack_exports__, __webpack_require__) {
36415
36416"use strict";
36417__webpack_require__.r(__webpack_exports__);
36418/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipUntil", function() { return skipUntil; });
36419/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36420/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36421/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
36422/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
36423/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36424
36425
36426
36427
36428function skipUntil(notifier) {
36429 return function (source) { return source.lift(new SkipUntilOperator(notifier)); };
36430}
36431var SkipUntilOperator = /*@__PURE__*/ (function () {
36432 function SkipUntilOperator(notifier) {
36433 this.notifier = notifier;
36434 }
36435 SkipUntilOperator.prototype.call = function (destination, source) {
36436 return source.subscribe(new SkipUntilSubscriber(destination, this.notifier));
36437 };
36438 return SkipUntilOperator;
36439}());
36440var SkipUntilSubscriber = /*@__PURE__*/ (function (_super) {
36441 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipUntilSubscriber, _super);
36442 function SkipUntilSubscriber(destination, notifier) {
36443 var _this = _super.call(this, destination) || this;
36444 _this.hasValue = false;
36445 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](_this, undefined, undefined);
36446 _this.add(innerSubscriber);
36447 _this.innerSubscription = innerSubscriber;
36448 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(_this, notifier, undefined, undefined, innerSubscriber);
36449 if (innerSubscription !== innerSubscriber) {
36450 _this.add(innerSubscription);
36451 _this.innerSubscription = innerSubscription;
36452 }
36453 return _this;
36454 }
36455 SkipUntilSubscriber.prototype._next = function (value) {
36456 if (this.hasValue) {
36457 _super.prototype._next.call(this, value);
36458 }
36459 };
36460 SkipUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36461 this.hasValue = true;
36462 if (this.innerSubscription) {
36463 this.innerSubscription.unsubscribe();
36464 }
36465 };
36466 SkipUntilSubscriber.prototype.notifyComplete = function () {
36467 };
36468 return SkipUntilSubscriber;
36469}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36470//# sourceMappingURL=skipUntil.js.map
36471
36472
36473/***/ }),
36474/* 342 */
36475/***/ (function(module, __webpack_exports__, __webpack_require__) {
36476
36477"use strict";
36478__webpack_require__.r(__webpack_exports__);
36479/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skipWhile", function() { return skipWhile; });
36480/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36481/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36482/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36483
36484
36485function skipWhile(predicate) {
36486 return function (source) { return source.lift(new SkipWhileOperator(predicate)); };
36487}
36488var SkipWhileOperator = /*@__PURE__*/ (function () {
36489 function SkipWhileOperator(predicate) {
36490 this.predicate = predicate;
36491 }
36492 SkipWhileOperator.prototype.call = function (subscriber, source) {
36493 return source.subscribe(new SkipWhileSubscriber(subscriber, this.predicate));
36494 };
36495 return SkipWhileOperator;
36496}());
36497var SkipWhileSubscriber = /*@__PURE__*/ (function (_super) {
36498 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SkipWhileSubscriber, _super);
36499 function SkipWhileSubscriber(destination, predicate) {
36500 var _this = _super.call(this, destination) || this;
36501 _this.predicate = predicate;
36502 _this.skipping = true;
36503 _this.index = 0;
36504 return _this;
36505 }
36506 SkipWhileSubscriber.prototype._next = function (value) {
36507 var destination = this.destination;
36508 if (this.skipping) {
36509 this.tryCallPredicate(value);
36510 }
36511 if (!this.skipping) {
36512 destination.next(value);
36513 }
36514 };
36515 SkipWhileSubscriber.prototype.tryCallPredicate = function (value) {
36516 try {
36517 var result = this.predicate(value, this.index++);
36518 this.skipping = Boolean(result);
36519 }
36520 catch (err) {
36521 this.destination.error(err);
36522 }
36523 };
36524 return SkipWhileSubscriber;
36525}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36526//# sourceMappingURL=skipWhile.js.map
36527
36528
36529/***/ }),
36530/* 343 */
36531/***/ (function(module, __webpack_exports__, __webpack_require__) {
36532
36533"use strict";
36534__webpack_require__.r(__webpack_exports__);
36535/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startWith", function() { return startWith; });
36536/* harmony import */ var _observable_concat__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(237);
36537/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(203);
36538/** PURE_IMPORTS_START _observable_concat,_util_isScheduler PURE_IMPORTS_END */
36539
36540
36541function startWith() {
36542 var array = [];
36543 for (var _i = 0; _i < arguments.length; _i++) {
36544 array[_i] = arguments[_i];
36545 }
36546 var scheduler = array[array.length - 1];
36547 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_1__["isScheduler"])(scheduler)) {
36548 array.pop();
36549 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source, scheduler); };
36550 }
36551 else {
36552 return function (source) { return Object(_observable_concat__WEBPACK_IMPORTED_MODULE_0__["concat"])(array, source); };
36553 }
36554}
36555//# sourceMappingURL=startWith.js.map
36556
36557
36558/***/ }),
36559/* 344 */
36560/***/ (function(module, __webpack_exports__, __webpack_require__) {
36561
36562"use strict";
36563__webpack_require__.r(__webpack_exports__);
36564/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "subscribeOn", function() { return subscribeOn; });
36565/* harmony import */ var _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(345);
36566/** PURE_IMPORTS_START _observable_SubscribeOnObservable PURE_IMPORTS_END */
36567
36568function subscribeOn(scheduler, delay) {
36569 if (delay === void 0) {
36570 delay = 0;
36571 }
36572 return function subscribeOnOperatorFunction(source) {
36573 return source.lift(new SubscribeOnOperator(scheduler, delay));
36574 };
36575}
36576var SubscribeOnOperator = /*@__PURE__*/ (function () {
36577 function SubscribeOnOperator(scheduler, delay) {
36578 this.scheduler = scheduler;
36579 this.delay = delay;
36580 }
36581 SubscribeOnOperator.prototype.call = function (subscriber, source) {
36582 return new _observable_SubscribeOnObservable__WEBPACK_IMPORTED_MODULE_0__["SubscribeOnObservable"](source, this.delay, this.scheduler).subscribe(subscriber);
36583 };
36584 return SubscribeOnOperator;
36585}());
36586//# sourceMappingURL=subscribeOn.js.map
36587
36588
36589/***/ }),
36590/* 345 */
36591/***/ (function(module, __webpack_exports__, __webpack_require__) {
36592
36593"use strict";
36594__webpack_require__.r(__webpack_exports__);
36595/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SubscribeOnObservable", function() { return SubscribeOnObservable; });
36596/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36597/* harmony import */ var _Observable__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(167);
36598/* harmony import */ var _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(209);
36599/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(255);
36600/** PURE_IMPORTS_START tslib,_Observable,_scheduler_asap,_util_isNumeric PURE_IMPORTS_END */
36601
36602
36603
36604
36605var SubscribeOnObservable = /*@__PURE__*/ (function (_super) {
36606 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SubscribeOnObservable, _super);
36607 function SubscribeOnObservable(source, delayTime, scheduler) {
36608 if (delayTime === void 0) {
36609 delayTime = 0;
36610 }
36611 if (scheduler === void 0) {
36612 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36613 }
36614 var _this = _super.call(this) || this;
36615 _this.source = source;
36616 _this.delayTime = delayTime;
36617 _this.scheduler = scheduler;
36618 if (!Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_3__["isNumeric"])(delayTime) || delayTime < 0) {
36619 _this.delayTime = 0;
36620 }
36621 if (!scheduler || typeof scheduler.schedule !== 'function') {
36622 _this.scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36623 }
36624 return _this;
36625 }
36626 SubscribeOnObservable.create = function (source, delay, scheduler) {
36627 if (delay === void 0) {
36628 delay = 0;
36629 }
36630 if (scheduler === void 0) {
36631 scheduler = _scheduler_asap__WEBPACK_IMPORTED_MODULE_2__["asap"];
36632 }
36633 return new SubscribeOnObservable(source, delay, scheduler);
36634 };
36635 SubscribeOnObservable.dispatch = function (arg) {
36636 var source = arg.source, subscriber = arg.subscriber;
36637 return this.add(source.subscribe(subscriber));
36638 };
36639 SubscribeOnObservable.prototype._subscribe = function (subscriber) {
36640 var delay = this.delayTime;
36641 var source = this.source;
36642 var scheduler = this.scheduler;
36643 return scheduler.schedule(SubscribeOnObservable.dispatch, delay, {
36644 source: source, subscriber: subscriber
36645 });
36646 };
36647 return SubscribeOnObservable;
36648}(_Observable__WEBPACK_IMPORTED_MODULE_1__["Observable"]));
36649
36650//# sourceMappingURL=SubscribeOnObservable.js.map
36651
36652
36653/***/ }),
36654/* 346 */
36655/***/ (function(module, __webpack_exports__, __webpack_require__) {
36656
36657"use strict";
36658__webpack_require__.r(__webpack_exports__);
36659/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchAll", function() { return switchAll; });
36660/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(347);
36661/* harmony import */ var _util_identity__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(183);
36662/** PURE_IMPORTS_START _switchMap,_util_identity PURE_IMPORTS_END */
36663
36664
36665function switchAll() {
36666 return Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(_util_identity__WEBPACK_IMPORTED_MODULE_1__["identity"]);
36667}
36668//# sourceMappingURL=switchAll.js.map
36669
36670
36671/***/ }),
36672/* 347 */
36673/***/ (function(module, __webpack_exports__, __webpack_require__) {
36674
36675"use strict";
36676__webpack_require__.r(__webpack_exports__);
36677/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMap", function() { return switchMap; });
36678/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36679/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36680/* harmony import */ var _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(229);
36681/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
36682/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(224);
36683/* harmony import */ var _observable_from__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(241);
36684/** PURE_IMPORTS_START tslib,_OuterSubscriber,_InnerSubscriber,_util_subscribeToResult,_map,_observable_from PURE_IMPORTS_END */
36685
36686
36687
36688
36689
36690
36691function switchMap(project, resultSelector) {
36692 if (typeof resultSelector === 'function') {
36693 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); })); })); };
36694 }
36695 return function (source) { return source.lift(new SwitchMapOperator(project)); };
36696}
36697var SwitchMapOperator = /*@__PURE__*/ (function () {
36698 function SwitchMapOperator(project) {
36699 this.project = project;
36700 }
36701 SwitchMapOperator.prototype.call = function (subscriber, source) {
36702 return source.subscribe(new SwitchMapSubscriber(subscriber, this.project));
36703 };
36704 return SwitchMapOperator;
36705}());
36706var SwitchMapSubscriber = /*@__PURE__*/ (function (_super) {
36707 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](SwitchMapSubscriber, _super);
36708 function SwitchMapSubscriber(destination, project) {
36709 var _this = _super.call(this, destination) || this;
36710 _this.project = project;
36711 _this.index = 0;
36712 return _this;
36713 }
36714 SwitchMapSubscriber.prototype._next = function (value) {
36715 var result;
36716 var index = this.index++;
36717 try {
36718 result = this.project(value, index);
36719 }
36720 catch (error) {
36721 this.destination.error(error);
36722 return;
36723 }
36724 this._innerSub(result, value, index);
36725 };
36726 SwitchMapSubscriber.prototype._innerSub = function (result, value, index) {
36727 var innerSubscription = this.innerSubscription;
36728 if (innerSubscription) {
36729 innerSubscription.unsubscribe();
36730 }
36731 var innerSubscriber = new _InnerSubscriber__WEBPACK_IMPORTED_MODULE_2__["InnerSubscriber"](this, value, index);
36732 var destination = this.destination;
36733 destination.add(innerSubscriber);
36734 this.innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, result, undefined, undefined, innerSubscriber);
36735 if (this.innerSubscription !== innerSubscriber) {
36736 destination.add(this.innerSubscription);
36737 }
36738 };
36739 SwitchMapSubscriber.prototype._complete = function () {
36740 var innerSubscription = this.innerSubscription;
36741 if (!innerSubscription || innerSubscription.closed) {
36742 _super.prototype._complete.call(this);
36743 }
36744 this.unsubscribe();
36745 };
36746 SwitchMapSubscriber.prototype._unsubscribe = function () {
36747 this.innerSubscription = null;
36748 };
36749 SwitchMapSubscriber.prototype.notifyComplete = function (innerSub) {
36750 var destination = this.destination;
36751 destination.remove(innerSub);
36752 this.innerSubscription = null;
36753 if (this.isStopped) {
36754 _super.prototype._complete.call(this);
36755 }
36756 };
36757 SwitchMapSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36758 this.destination.next(innerValue);
36759 };
36760 return SwitchMapSubscriber;
36761}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36762//# sourceMappingURL=switchMap.js.map
36763
36764
36765/***/ }),
36766/* 348 */
36767/***/ (function(module, __webpack_exports__, __webpack_require__) {
36768
36769"use strict";
36770__webpack_require__.r(__webpack_exports__);
36771/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "switchMapTo", function() { return switchMapTo; });
36772/* harmony import */ var _switchMap__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(347);
36773/** PURE_IMPORTS_START _switchMap PURE_IMPORTS_END */
36774
36775function switchMapTo(innerObservable, resultSelector) {
36776 return resultSelector ? Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; }, resultSelector) : Object(_switchMap__WEBPACK_IMPORTED_MODULE_0__["switchMap"])(function () { return innerObservable; });
36777}
36778//# sourceMappingURL=switchMapTo.js.map
36779
36780
36781/***/ }),
36782/* 349 */
36783/***/ (function(module, __webpack_exports__, __webpack_require__) {
36784
36785"use strict";
36786__webpack_require__.r(__webpack_exports__);
36787/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeUntil", function() { return takeUntil; });
36788/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36789/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36790/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
36791/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36792
36793
36794
36795function takeUntil(notifier) {
36796 return function (source) { return source.lift(new TakeUntilOperator(notifier)); };
36797}
36798var TakeUntilOperator = /*@__PURE__*/ (function () {
36799 function TakeUntilOperator(notifier) {
36800 this.notifier = notifier;
36801 }
36802 TakeUntilOperator.prototype.call = function (subscriber, source) {
36803 var takeUntilSubscriber = new TakeUntilSubscriber(subscriber);
36804 var notifierSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(takeUntilSubscriber, this.notifier);
36805 if (notifierSubscription && !takeUntilSubscriber.seenValue) {
36806 takeUntilSubscriber.add(notifierSubscription);
36807 return source.subscribe(takeUntilSubscriber);
36808 }
36809 return takeUntilSubscriber;
36810 };
36811 return TakeUntilOperator;
36812}());
36813var TakeUntilSubscriber = /*@__PURE__*/ (function (_super) {
36814 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeUntilSubscriber, _super);
36815 function TakeUntilSubscriber(destination) {
36816 var _this = _super.call(this, destination) || this;
36817 _this.seenValue = false;
36818 return _this;
36819 }
36820 TakeUntilSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
36821 this.seenValue = true;
36822 this.complete();
36823 };
36824 TakeUntilSubscriber.prototype.notifyComplete = function () {
36825 };
36826 return TakeUntilSubscriber;
36827}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
36828//# sourceMappingURL=takeUntil.js.map
36829
36830
36831/***/ }),
36832/* 350 */
36833/***/ (function(module, __webpack_exports__, __webpack_require__) {
36834
36835"use strict";
36836__webpack_require__.r(__webpack_exports__);
36837/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "takeWhile", function() { return takeWhile; });
36838/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36839/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36840/** PURE_IMPORTS_START tslib,_Subscriber PURE_IMPORTS_END */
36841
36842
36843function takeWhile(predicate, inclusive) {
36844 if (inclusive === void 0) {
36845 inclusive = false;
36846 }
36847 return function (source) {
36848 return source.lift(new TakeWhileOperator(predicate, inclusive));
36849 };
36850}
36851var TakeWhileOperator = /*@__PURE__*/ (function () {
36852 function TakeWhileOperator(predicate, inclusive) {
36853 this.predicate = predicate;
36854 this.inclusive = inclusive;
36855 }
36856 TakeWhileOperator.prototype.call = function (subscriber, source) {
36857 return source.subscribe(new TakeWhileSubscriber(subscriber, this.predicate, this.inclusive));
36858 };
36859 return TakeWhileOperator;
36860}());
36861var TakeWhileSubscriber = /*@__PURE__*/ (function (_super) {
36862 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TakeWhileSubscriber, _super);
36863 function TakeWhileSubscriber(destination, predicate, inclusive) {
36864 var _this = _super.call(this, destination) || this;
36865 _this.predicate = predicate;
36866 _this.inclusive = inclusive;
36867 _this.index = 0;
36868 return _this;
36869 }
36870 TakeWhileSubscriber.prototype._next = function (value) {
36871 var destination = this.destination;
36872 var result;
36873 try {
36874 result = this.predicate(value, this.index++);
36875 }
36876 catch (err) {
36877 destination.error(err);
36878 return;
36879 }
36880 this.nextOrComplete(value, result);
36881 };
36882 TakeWhileSubscriber.prototype.nextOrComplete = function (value, predicateResult) {
36883 var destination = this.destination;
36884 if (Boolean(predicateResult)) {
36885 destination.next(value);
36886 }
36887 else {
36888 if (this.inclusive) {
36889 destination.next(value);
36890 }
36891 destination.complete();
36892 }
36893 };
36894 return TakeWhileSubscriber;
36895}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36896//# sourceMappingURL=takeWhile.js.map
36897
36898
36899/***/ }),
36900/* 351 */
36901/***/ (function(module, __webpack_exports__, __webpack_require__) {
36902
36903"use strict";
36904__webpack_require__.r(__webpack_exports__);
36905/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "tap", function() { return tap; });
36906/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36907/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
36908/* harmony import */ var _util_noop__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(218);
36909/* harmony import */ var _util_isFunction__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(171);
36910/** PURE_IMPORTS_START tslib,_Subscriber,_util_noop,_util_isFunction PURE_IMPORTS_END */
36911
36912
36913
36914
36915function tap(nextOrObserver, error, complete) {
36916 return function tapOperatorFunction(source) {
36917 return source.lift(new DoOperator(nextOrObserver, error, complete));
36918 };
36919}
36920var DoOperator = /*@__PURE__*/ (function () {
36921 function DoOperator(nextOrObserver, error, complete) {
36922 this.nextOrObserver = nextOrObserver;
36923 this.error = error;
36924 this.complete = complete;
36925 }
36926 DoOperator.prototype.call = function (subscriber, source) {
36927 return source.subscribe(new TapSubscriber(subscriber, this.nextOrObserver, this.error, this.complete));
36928 };
36929 return DoOperator;
36930}());
36931var TapSubscriber = /*@__PURE__*/ (function (_super) {
36932 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TapSubscriber, _super);
36933 function TapSubscriber(destination, observerOrNext, error, complete) {
36934 var _this = _super.call(this, destination) || this;
36935 _this._tapNext = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36936 _this._tapError = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36937 _this._tapComplete = _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36938 _this._tapError = error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36939 _this._tapComplete = complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36940 if (Object(_util_isFunction__WEBPACK_IMPORTED_MODULE_3__["isFunction"])(observerOrNext)) {
36941 _this._context = _this;
36942 _this._tapNext = observerOrNext;
36943 }
36944 else if (observerOrNext) {
36945 _this._context = observerOrNext;
36946 _this._tapNext = observerOrNext.next || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36947 _this._tapError = observerOrNext.error || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36948 _this._tapComplete = observerOrNext.complete || _util_noop__WEBPACK_IMPORTED_MODULE_2__["noop"];
36949 }
36950 return _this;
36951 }
36952 TapSubscriber.prototype._next = function (value) {
36953 try {
36954 this._tapNext.call(this._context, value);
36955 }
36956 catch (err) {
36957 this.destination.error(err);
36958 return;
36959 }
36960 this.destination.next(value);
36961 };
36962 TapSubscriber.prototype._error = function (err) {
36963 try {
36964 this._tapError.call(this._context, err);
36965 }
36966 catch (err) {
36967 this.destination.error(err);
36968 return;
36969 }
36970 this.destination.error(err);
36971 };
36972 TapSubscriber.prototype._complete = function () {
36973 try {
36974 this._tapComplete.call(this._context);
36975 }
36976 catch (err) {
36977 this.destination.error(err);
36978 return;
36979 }
36980 return this.destination.complete();
36981 };
36982 return TapSubscriber;
36983}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
36984//# sourceMappingURL=tap.js.map
36985
36986
36987/***/ }),
36988/* 352 */
36989/***/ (function(module, __webpack_exports__, __webpack_require__) {
36990
36991"use strict";
36992__webpack_require__.r(__webpack_exports__);
36993/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "defaultThrottleConfig", function() { return defaultThrottleConfig; });
36994/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttle", function() { return throttle; });
36995/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
36996/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
36997/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
36998/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
36999
37000
37001
37002var defaultThrottleConfig = {
37003 leading: true,
37004 trailing: false
37005};
37006function throttle(durationSelector, config) {
37007 if (config === void 0) {
37008 config = defaultThrottleConfig;
37009 }
37010 return function (source) { return source.lift(new ThrottleOperator(durationSelector, config.leading, config.trailing)); };
37011}
37012var ThrottleOperator = /*@__PURE__*/ (function () {
37013 function ThrottleOperator(durationSelector, leading, trailing) {
37014 this.durationSelector = durationSelector;
37015 this.leading = leading;
37016 this.trailing = trailing;
37017 }
37018 ThrottleOperator.prototype.call = function (subscriber, source) {
37019 return source.subscribe(new ThrottleSubscriber(subscriber, this.durationSelector, this.leading, this.trailing));
37020 };
37021 return ThrottleOperator;
37022}());
37023var ThrottleSubscriber = /*@__PURE__*/ (function (_super) {
37024 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleSubscriber, _super);
37025 function ThrottleSubscriber(destination, durationSelector, _leading, _trailing) {
37026 var _this = _super.call(this, destination) || this;
37027 _this.destination = destination;
37028 _this.durationSelector = durationSelector;
37029 _this._leading = _leading;
37030 _this._trailing = _trailing;
37031 _this._hasValue = false;
37032 return _this;
37033 }
37034 ThrottleSubscriber.prototype._next = function (value) {
37035 this._hasValue = true;
37036 this._sendValue = value;
37037 if (!this._throttled) {
37038 if (this._leading) {
37039 this.send();
37040 }
37041 else {
37042 this.throttle(value);
37043 }
37044 }
37045 };
37046 ThrottleSubscriber.prototype.send = function () {
37047 var _a = this, _hasValue = _a._hasValue, _sendValue = _a._sendValue;
37048 if (_hasValue) {
37049 this.destination.next(_sendValue);
37050 this.throttle(_sendValue);
37051 }
37052 this._hasValue = false;
37053 this._sendValue = null;
37054 };
37055 ThrottleSubscriber.prototype.throttle = function (value) {
37056 var duration = this.tryDurationSelector(value);
37057 if (!!duration) {
37058 this.add(this._throttled = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(this, duration));
37059 }
37060 };
37061 ThrottleSubscriber.prototype.tryDurationSelector = function (value) {
37062 try {
37063 return this.durationSelector(value);
37064 }
37065 catch (err) {
37066 this.destination.error(err);
37067 return null;
37068 }
37069 };
37070 ThrottleSubscriber.prototype.throttlingDone = function () {
37071 var _a = this, _throttled = _a._throttled, _trailing = _a._trailing;
37072 if (_throttled) {
37073 _throttled.unsubscribe();
37074 }
37075 this._throttled = null;
37076 if (_trailing) {
37077 this.send();
37078 }
37079 };
37080 ThrottleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37081 this.throttlingDone();
37082 };
37083 ThrottleSubscriber.prototype.notifyComplete = function () {
37084 this.throttlingDone();
37085 };
37086 return ThrottleSubscriber;
37087}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
37088//# sourceMappingURL=throttle.js.map
37089
37090
37091/***/ }),
37092/* 353 */
37093/***/ (function(module, __webpack_exports__, __webpack_require__) {
37094
37095"use strict";
37096__webpack_require__.r(__webpack_exports__);
37097/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "throttleTime", function() { return throttleTime; });
37098/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37099/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
37100/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
37101/* harmony import */ var _throttle__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(352);
37102/** PURE_IMPORTS_START tslib,_Subscriber,_scheduler_async,_throttle PURE_IMPORTS_END */
37103
37104
37105
37106
37107function throttleTime(duration, scheduler, config) {
37108 if (scheduler === void 0) {
37109 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
37110 }
37111 if (config === void 0) {
37112 config = _throttle__WEBPACK_IMPORTED_MODULE_3__["defaultThrottleConfig"];
37113 }
37114 return function (source) { return source.lift(new ThrottleTimeOperator(duration, scheduler, config.leading, config.trailing)); };
37115}
37116var ThrottleTimeOperator = /*@__PURE__*/ (function () {
37117 function ThrottleTimeOperator(duration, scheduler, leading, trailing) {
37118 this.duration = duration;
37119 this.scheduler = scheduler;
37120 this.leading = leading;
37121 this.trailing = trailing;
37122 }
37123 ThrottleTimeOperator.prototype.call = function (subscriber, source) {
37124 return source.subscribe(new ThrottleTimeSubscriber(subscriber, this.duration, this.scheduler, this.leading, this.trailing));
37125 };
37126 return ThrottleTimeOperator;
37127}());
37128var ThrottleTimeSubscriber = /*@__PURE__*/ (function (_super) {
37129 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](ThrottleTimeSubscriber, _super);
37130 function ThrottleTimeSubscriber(destination, duration, scheduler, leading, trailing) {
37131 var _this = _super.call(this, destination) || this;
37132 _this.duration = duration;
37133 _this.scheduler = scheduler;
37134 _this.leading = leading;
37135 _this.trailing = trailing;
37136 _this._hasTrailingValue = false;
37137 _this._trailingValue = null;
37138 return _this;
37139 }
37140 ThrottleTimeSubscriber.prototype._next = function (value) {
37141 if (this.throttled) {
37142 if (this.trailing) {
37143 this._trailingValue = value;
37144 this._hasTrailingValue = true;
37145 }
37146 }
37147 else {
37148 this.add(this.throttled = this.scheduler.schedule(dispatchNext, this.duration, { subscriber: this }));
37149 if (this.leading) {
37150 this.destination.next(value);
37151 }
37152 else if (this.trailing) {
37153 this._trailingValue = value;
37154 this._hasTrailingValue = true;
37155 }
37156 }
37157 };
37158 ThrottleTimeSubscriber.prototype._complete = function () {
37159 if (this._hasTrailingValue) {
37160 this.destination.next(this._trailingValue);
37161 this.destination.complete();
37162 }
37163 else {
37164 this.destination.complete();
37165 }
37166 };
37167 ThrottleTimeSubscriber.prototype.clearThrottle = function () {
37168 var throttled = this.throttled;
37169 if (throttled) {
37170 if (this.trailing && this._hasTrailingValue) {
37171 this.destination.next(this._trailingValue);
37172 this._trailingValue = null;
37173 this._hasTrailingValue = false;
37174 }
37175 throttled.unsubscribe();
37176 this.remove(throttled);
37177 this.throttled = null;
37178 }
37179 };
37180 return ThrottleTimeSubscriber;
37181}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
37182function dispatchNext(arg) {
37183 var subscriber = arg.subscriber;
37184 subscriber.clearThrottle();
37185}
37186//# sourceMappingURL=throttleTime.js.map
37187
37188
37189/***/ }),
37190/* 354 */
37191/***/ (function(module, __webpack_exports__, __webpack_require__) {
37192
37193"use strict";
37194__webpack_require__.r(__webpack_exports__);
37195/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeInterval", function() { return timeInterval; });
37196/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "TimeInterval", function() { return TimeInterval; });
37197/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37198/* harmony import */ var _scan__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(314);
37199/* harmony import */ var _observable_defer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(248);
37200/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(224);
37201/** PURE_IMPORTS_START _scheduler_async,_scan,_observable_defer,_map PURE_IMPORTS_END */
37202
37203
37204
37205
37206function timeInterval(scheduler) {
37207 if (scheduler === void 0) {
37208 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37209 }
37210 return function (source) {
37211 return Object(_observable_defer__WEBPACK_IMPORTED_MODULE_2__["defer"])(function () {
37212 return source.pipe(Object(_scan__WEBPACK_IMPORTED_MODULE_1__["scan"])(function (_a, value) {
37213 var current = _a.current;
37214 return ({ value: value, current: scheduler.now(), last: current });
37215 }, { current: scheduler.now(), value: undefined, last: undefined }), Object(_map__WEBPACK_IMPORTED_MODULE_3__["map"])(function (_a) {
37216 var current = _a.current, last = _a.last, value = _a.value;
37217 return new TimeInterval(value, current - last);
37218 }));
37219 });
37220 };
37221}
37222var TimeInterval = /*@__PURE__*/ (function () {
37223 function TimeInterval(value, interval) {
37224 this.value = value;
37225 this.interval = interval;
37226 }
37227 return TimeInterval;
37228}());
37229
37230//# sourceMappingURL=timeInterval.js.map
37231
37232
37233/***/ }),
37234/* 355 */
37235/***/ (function(module, __webpack_exports__, __webpack_require__) {
37236
37237"use strict";
37238__webpack_require__.r(__webpack_exports__);
37239/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeout", function() { return timeout; });
37240/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37241/* harmony import */ var _util_TimeoutError__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(222);
37242/* harmony import */ var _timeoutWith__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(356);
37243/* harmony import */ var _observable_throwError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(207);
37244/** PURE_IMPORTS_START _scheduler_async,_util_TimeoutError,_timeoutWith,_observable_throwError PURE_IMPORTS_END */
37245
37246
37247
37248
37249function timeout(due, scheduler) {
37250 if (scheduler === void 0) {
37251 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37252 }
37253 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);
37254}
37255//# sourceMappingURL=timeout.js.map
37256
37257
37258/***/ }),
37259/* 356 */
37260/***/ (function(module, __webpack_exports__, __webpack_require__) {
37261
37262"use strict";
37263__webpack_require__.r(__webpack_exports__);
37264/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timeoutWith", function() { return timeoutWith; });
37265/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37266/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(213);
37267/* harmony import */ var _util_isDate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(288);
37268/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
37269/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
37270/** PURE_IMPORTS_START tslib,_scheduler_async,_util_isDate,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37271
37272
37273
37274
37275
37276function timeoutWith(due, withObservable, scheduler) {
37277 if (scheduler === void 0) {
37278 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_1__["async"];
37279 }
37280 return function (source) {
37281 var absoluteTimeout = Object(_util_isDate__WEBPACK_IMPORTED_MODULE_2__["isDate"])(due);
37282 var waitFor = absoluteTimeout ? (+due - scheduler.now()) : Math.abs(due);
37283 return source.lift(new TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler));
37284 };
37285}
37286var TimeoutWithOperator = /*@__PURE__*/ (function () {
37287 function TimeoutWithOperator(waitFor, absoluteTimeout, withObservable, scheduler) {
37288 this.waitFor = waitFor;
37289 this.absoluteTimeout = absoluteTimeout;
37290 this.withObservable = withObservable;
37291 this.scheduler = scheduler;
37292 }
37293 TimeoutWithOperator.prototype.call = function (subscriber, source) {
37294 return source.subscribe(new TimeoutWithSubscriber(subscriber, this.absoluteTimeout, this.waitFor, this.withObservable, this.scheduler));
37295 };
37296 return TimeoutWithOperator;
37297}());
37298var TimeoutWithSubscriber = /*@__PURE__*/ (function (_super) {
37299 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](TimeoutWithSubscriber, _super);
37300 function TimeoutWithSubscriber(destination, absoluteTimeout, waitFor, withObservable, scheduler) {
37301 var _this = _super.call(this, destination) || this;
37302 _this.absoluteTimeout = absoluteTimeout;
37303 _this.waitFor = waitFor;
37304 _this.withObservable = withObservable;
37305 _this.scheduler = scheduler;
37306 _this.action = null;
37307 _this.scheduleTimeout();
37308 return _this;
37309 }
37310 TimeoutWithSubscriber.dispatchTimeout = function (subscriber) {
37311 var withObservable = subscriber.withObservable;
37312 subscriber._unsubscribeAndRecycle();
37313 subscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(subscriber, withObservable));
37314 };
37315 TimeoutWithSubscriber.prototype.scheduleTimeout = function () {
37316 var action = this.action;
37317 if (action) {
37318 this.action = action.schedule(this, this.waitFor);
37319 }
37320 else {
37321 this.add(this.action = this.scheduler.schedule(TimeoutWithSubscriber.dispatchTimeout, this.waitFor, this));
37322 }
37323 };
37324 TimeoutWithSubscriber.prototype._next = function (value) {
37325 if (!this.absoluteTimeout) {
37326 this.scheduleTimeout();
37327 }
37328 _super.prototype._next.call(this, value);
37329 };
37330 TimeoutWithSubscriber.prototype._unsubscribe = function () {
37331 this.action = null;
37332 this.scheduler = null;
37333 this.withObservable = null;
37334 };
37335 return TimeoutWithSubscriber;
37336}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
37337//# sourceMappingURL=timeoutWith.js.map
37338
37339
37340/***/ }),
37341/* 357 */
37342/***/ (function(module, __webpack_exports__, __webpack_require__) {
37343
37344"use strict";
37345__webpack_require__.r(__webpack_exports__);
37346/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "timestamp", function() { return timestamp; });
37347/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timestamp", function() { return Timestamp; });
37348/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(213);
37349/* harmony import */ var _map__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(224);
37350/** PURE_IMPORTS_START _scheduler_async,_map PURE_IMPORTS_END */
37351
37352
37353function timestamp(scheduler) {
37354 if (scheduler === void 0) {
37355 scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_0__["async"];
37356 }
37357 return Object(_map__WEBPACK_IMPORTED_MODULE_1__["map"])(function (value) { return new Timestamp(value, scheduler.now()); });
37358}
37359var Timestamp = /*@__PURE__*/ (function () {
37360 function Timestamp(value, timestamp) {
37361 this.value = value;
37362 this.timestamp = timestamp;
37363 }
37364 return Timestamp;
37365}());
37366
37367//# sourceMappingURL=timestamp.js.map
37368
37369
37370/***/ }),
37371/* 358 */
37372/***/ (function(module, __webpack_exports__, __webpack_require__) {
37373
37374"use strict";
37375__webpack_require__.r(__webpack_exports__);
37376/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; });
37377/* harmony import */ var _reduce__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(313);
37378/** PURE_IMPORTS_START _reduce PURE_IMPORTS_END */
37379
37380function toArrayReducer(arr, item, index) {
37381 if (index === 0) {
37382 return [item];
37383 }
37384 arr.push(item);
37385 return arr;
37386}
37387function toArray() {
37388 return Object(_reduce__WEBPACK_IMPORTED_MODULE_0__["reduce"])(toArrayReducer, []);
37389}
37390//# sourceMappingURL=toArray.js.map
37391
37392
37393/***/ }),
37394/* 359 */
37395/***/ (function(module, __webpack_exports__, __webpack_require__) {
37396
37397"use strict";
37398__webpack_require__.r(__webpack_exports__);
37399/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return window; });
37400/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37401/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37402/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
37403/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
37404/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37405
37406
37407
37408
37409function window(windowBoundaries) {
37410 return function windowOperatorFunction(source) {
37411 return source.lift(new WindowOperator(windowBoundaries));
37412 };
37413}
37414var WindowOperator = /*@__PURE__*/ (function () {
37415 function WindowOperator(windowBoundaries) {
37416 this.windowBoundaries = windowBoundaries;
37417 }
37418 WindowOperator.prototype.call = function (subscriber, source) {
37419 var windowSubscriber = new WindowSubscriber(subscriber);
37420 var sourceSubscription = source.subscribe(windowSubscriber);
37421 if (!sourceSubscription.closed) {
37422 windowSubscriber.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(windowSubscriber, this.windowBoundaries));
37423 }
37424 return sourceSubscription;
37425 };
37426 return WindowOperator;
37427}());
37428var WindowSubscriber = /*@__PURE__*/ (function (_super) {
37429 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
37430 function WindowSubscriber(destination) {
37431 var _this = _super.call(this, destination) || this;
37432 _this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37433 destination.next(_this.window);
37434 return _this;
37435 }
37436 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37437 this.openWindow();
37438 };
37439 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
37440 this._error(error);
37441 };
37442 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
37443 this._complete();
37444 };
37445 WindowSubscriber.prototype._next = function (value) {
37446 this.window.next(value);
37447 };
37448 WindowSubscriber.prototype._error = function (err) {
37449 this.window.error(err);
37450 this.destination.error(err);
37451 };
37452 WindowSubscriber.prototype._complete = function () {
37453 this.window.complete();
37454 this.destination.complete();
37455 };
37456 WindowSubscriber.prototype._unsubscribe = function () {
37457 this.window = null;
37458 };
37459 WindowSubscriber.prototype.openWindow = function () {
37460 var prevWindow = this.window;
37461 if (prevWindow) {
37462 prevWindow.complete();
37463 }
37464 var destination = this.destination;
37465 var newWindow = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37466 destination.next(newWindow);
37467 };
37468 return WindowSubscriber;
37469}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
37470//# sourceMappingURL=window.js.map
37471
37472
37473/***/ }),
37474/* 360 */
37475/***/ (function(module, __webpack_exports__, __webpack_require__) {
37476
37477"use strict";
37478__webpack_require__.r(__webpack_exports__);
37479/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowCount", function() { return windowCount; });
37480/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37481/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(169);
37482/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(185);
37483/** PURE_IMPORTS_START tslib,_Subscriber,_Subject PURE_IMPORTS_END */
37484
37485
37486
37487function windowCount(windowSize, startWindowEvery) {
37488 if (startWindowEvery === void 0) {
37489 startWindowEvery = 0;
37490 }
37491 return function windowCountOperatorFunction(source) {
37492 return source.lift(new WindowCountOperator(windowSize, startWindowEvery));
37493 };
37494}
37495var WindowCountOperator = /*@__PURE__*/ (function () {
37496 function WindowCountOperator(windowSize, startWindowEvery) {
37497 this.windowSize = windowSize;
37498 this.startWindowEvery = startWindowEvery;
37499 }
37500 WindowCountOperator.prototype.call = function (subscriber, source) {
37501 return source.subscribe(new WindowCountSubscriber(subscriber, this.windowSize, this.startWindowEvery));
37502 };
37503 return WindowCountOperator;
37504}());
37505var WindowCountSubscriber = /*@__PURE__*/ (function (_super) {
37506 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowCountSubscriber, _super);
37507 function WindowCountSubscriber(destination, windowSize, startWindowEvery) {
37508 var _this = _super.call(this, destination) || this;
37509 _this.destination = destination;
37510 _this.windowSize = windowSize;
37511 _this.startWindowEvery = startWindowEvery;
37512 _this.windows = [new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]()];
37513 _this.count = 0;
37514 destination.next(_this.windows[0]);
37515 return _this;
37516 }
37517 WindowCountSubscriber.prototype._next = function (value) {
37518 var startWindowEvery = (this.startWindowEvery > 0) ? this.startWindowEvery : this.windowSize;
37519 var destination = this.destination;
37520 var windowSize = this.windowSize;
37521 var windows = this.windows;
37522 var len = windows.length;
37523 for (var i = 0; i < len && !this.closed; i++) {
37524 windows[i].next(value);
37525 }
37526 var c = this.count - windowSize + 1;
37527 if (c >= 0 && c % startWindowEvery === 0 && !this.closed) {
37528 windows.shift().complete();
37529 }
37530 if (++this.count % startWindowEvery === 0 && !this.closed) {
37531 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_2__["Subject"]();
37532 windows.push(window_1);
37533 destination.next(window_1);
37534 }
37535 };
37536 WindowCountSubscriber.prototype._error = function (err) {
37537 var windows = this.windows;
37538 if (windows) {
37539 while (windows.length > 0 && !this.closed) {
37540 windows.shift().error(err);
37541 }
37542 }
37543 this.destination.error(err);
37544 };
37545 WindowCountSubscriber.prototype._complete = function () {
37546 var windows = this.windows;
37547 if (windows) {
37548 while (windows.length > 0 && !this.closed) {
37549 windows.shift().complete();
37550 }
37551 }
37552 this.destination.complete();
37553 };
37554 WindowCountSubscriber.prototype._unsubscribe = function () {
37555 this.count = 0;
37556 this.windows = null;
37557 };
37558 return WindowCountSubscriber;
37559}(_Subscriber__WEBPACK_IMPORTED_MODULE_1__["Subscriber"]));
37560//# sourceMappingURL=windowCount.js.map
37561
37562
37563/***/ }),
37564/* 361 */
37565/***/ (function(module, __webpack_exports__, __webpack_require__) {
37566
37567"use strict";
37568__webpack_require__.r(__webpack_exports__);
37569/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowTime", function() { return windowTime; });
37570/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37571/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37572/* harmony import */ var _scheduler_async__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(213);
37573/* harmony import */ var _Subscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(169);
37574/* harmony import */ var _util_isNumeric__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(255);
37575/* harmony import */ var _util_isScheduler__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(203);
37576/** PURE_IMPORTS_START tslib,_Subject,_scheduler_async,_Subscriber,_util_isNumeric,_util_isScheduler PURE_IMPORTS_END */
37577
37578
37579
37580
37581
37582
37583function windowTime(windowTimeSpan) {
37584 var scheduler = _scheduler_async__WEBPACK_IMPORTED_MODULE_2__["async"];
37585 var windowCreationInterval = null;
37586 var maxWindowSize = Number.POSITIVE_INFINITY;
37587 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[3])) {
37588 scheduler = arguments[3];
37589 }
37590 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[2])) {
37591 scheduler = arguments[2];
37592 }
37593 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[2])) {
37594 maxWindowSize = arguments[2];
37595 }
37596 if (Object(_util_isScheduler__WEBPACK_IMPORTED_MODULE_5__["isScheduler"])(arguments[1])) {
37597 scheduler = arguments[1];
37598 }
37599 else if (Object(_util_isNumeric__WEBPACK_IMPORTED_MODULE_4__["isNumeric"])(arguments[1])) {
37600 windowCreationInterval = arguments[1];
37601 }
37602 return function windowTimeOperatorFunction(source) {
37603 return source.lift(new WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler));
37604 };
37605}
37606var WindowTimeOperator = /*@__PURE__*/ (function () {
37607 function WindowTimeOperator(windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37608 this.windowTimeSpan = windowTimeSpan;
37609 this.windowCreationInterval = windowCreationInterval;
37610 this.maxWindowSize = maxWindowSize;
37611 this.scheduler = scheduler;
37612 }
37613 WindowTimeOperator.prototype.call = function (subscriber, source) {
37614 return source.subscribe(new WindowTimeSubscriber(subscriber, this.windowTimeSpan, this.windowCreationInterval, this.maxWindowSize, this.scheduler));
37615 };
37616 return WindowTimeOperator;
37617}());
37618var CountedSubject = /*@__PURE__*/ (function (_super) {
37619 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](CountedSubject, _super);
37620 function CountedSubject() {
37621 var _this = _super !== null && _super.apply(this, arguments) || this;
37622 _this._numberOfNextedValues = 0;
37623 return _this;
37624 }
37625 CountedSubject.prototype.next = function (value) {
37626 this._numberOfNextedValues++;
37627 _super.prototype.next.call(this, value);
37628 };
37629 Object.defineProperty(CountedSubject.prototype, "numberOfNextedValues", {
37630 get: function () {
37631 return this._numberOfNextedValues;
37632 },
37633 enumerable: true,
37634 configurable: true
37635 });
37636 return CountedSubject;
37637}(_Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]));
37638var WindowTimeSubscriber = /*@__PURE__*/ (function (_super) {
37639 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowTimeSubscriber, _super);
37640 function WindowTimeSubscriber(destination, windowTimeSpan, windowCreationInterval, maxWindowSize, scheduler) {
37641 var _this = _super.call(this, destination) || this;
37642 _this.destination = destination;
37643 _this.windowTimeSpan = windowTimeSpan;
37644 _this.windowCreationInterval = windowCreationInterval;
37645 _this.maxWindowSize = maxWindowSize;
37646 _this.scheduler = scheduler;
37647 _this.windows = [];
37648 var window = _this.openWindow();
37649 if (windowCreationInterval !== null && windowCreationInterval >= 0) {
37650 var closeState = { subscriber: _this, window: window, context: null };
37651 var creationState = { windowTimeSpan: windowTimeSpan, windowCreationInterval: windowCreationInterval, subscriber: _this, scheduler: scheduler };
37652 _this.add(scheduler.schedule(dispatchWindowClose, windowTimeSpan, closeState));
37653 _this.add(scheduler.schedule(dispatchWindowCreation, windowCreationInterval, creationState));
37654 }
37655 else {
37656 var timeSpanOnlyState = { subscriber: _this, window: window, windowTimeSpan: windowTimeSpan };
37657 _this.add(scheduler.schedule(dispatchWindowTimeSpanOnly, windowTimeSpan, timeSpanOnlyState));
37658 }
37659 return _this;
37660 }
37661 WindowTimeSubscriber.prototype._next = function (value) {
37662 var windows = this.windows;
37663 var len = windows.length;
37664 for (var i = 0; i < len; i++) {
37665 var window_1 = windows[i];
37666 if (!window_1.closed) {
37667 window_1.next(value);
37668 if (window_1.numberOfNextedValues >= this.maxWindowSize) {
37669 this.closeWindow(window_1);
37670 }
37671 }
37672 }
37673 };
37674 WindowTimeSubscriber.prototype._error = function (err) {
37675 var windows = this.windows;
37676 while (windows.length > 0) {
37677 windows.shift().error(err);
37678 }
37679 this.destination.error(err);
37680 };
37681 WindowTimeSubscriber.prototype._complete = function () {
37682 var windows = this.windows;
37683 while (windows.length > 0) {
37684 var window_2 = windows.shift();
37685 if (!window_2.closed) {
37686 window_2.complete();
37687 }
37688 }
37689 this.destination.complete();
37690 };
37691 WindowTimeSubscriber.prototype.openWindow = function () {
37692 var window = new CountedSubject();
37693 this.windows.push(window);
37694 var destination = this.destination;
37695 destination.next(window);
37696 return window;
37697 };
37698 WindowTimeSubscriber.prototype.closeWindow = function (window) {
37699 window.complete();
37700 var windows = this.windows;
37701 windows.splice(windows.indexOf(window), 1);
37702 };
37703 return WindowTimeSubscriber;
37704}(_Subscriber__WEBPACK_IMPORTED_MODULE_3__["Subscriber"]));
37705function dispatchWindowTimeSpanOnly(state) {
37706 var subscriber = state.subscriber, windowTimeSpan = state.windowTimeSpan, window = state.window;
37707 if (window) {
37708 subscriber.closeWindow(window);
37709 }
37710 state.window = subscriber.openWindow();
37711 this.schedule(state, windowTimeSpan);
37712}
37713function dispatchWindowCreation(state) {
37714 var windowTimeSpan = state.windowTimeSpan, subscriber = state.subscriber, scheduler = state.scheduler, windowCreationInterval = state.windowCreationInterval;
37715 var window = subscriber.openWindow();
37716 var action = this;
37717 var context = { action: action, subscription: null };
37718 var timeSpanState = { subscriber: subscriber, window: window, context: context };
37719 context.subscription = scheduler.schedule(dispatchWindowClose, windowTimeSpan, timeSpanState);
37720 action.add(context.subscription);
37721 action.schedule(state, windowCreationInterval);
37722}
37723function dispatchWindowClose(state) {
37724 var subscriber = state.subscriber, window = state.window, context = state.context;
37725 if (context && context.action && context.subscription) {
37726 context.action.remove(context.subscription);
37727 }
37728 subscriber.closeWindow(window);
37729}
37730//# sourceMappingURL=windowTime.js.map
37731
37732
37733/***/ }),
37734/* 362 */
37735/***/ (function(module, __webpack_exports__, __webpack_require__) {
37736
37737"use strict";
37738__webpack_require__.r(__webpack_exports__);
37739/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowToggle", function() { return windowToggle; });
37740/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37741/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37742/* harmony import */ var _Subscription__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(175);
37743/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(227);
37744/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(228);
37745/** PURE_IMPORTS_START tslib,_Subject,_Subscription,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37746
37747
37748
37749
37750
37751function windowToggle(openings, closingSelector) {
37752 return function (source) { return source.lift(new WindowToggleOperator(openings, closingSelector)); };
37753}
37754var WindowToggleOperator = /*@__PURE__*/ (function () {
37755 function WindowToggleOperator(openings, closingSelector) {
37756 this.openings = openings;
37757 this.closingSelector = closingSelector;
37758 }
37759 WindowToggleOperator.prototype.call = function (subscriber, source) {
37760 return source.subscribe(new WindowToggleSubscriber(subscriber, this.openings, this.closingSelector));
37761 };
37762 return WindowToggleOperator;
37763}());
37764var WindowToggleSubscriber = /*@__PURE__*/ (function (_super) {
37765 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowToggleSubscriber, _super);
37766 function WindowToggleSubscriber(destination, openings, closingSelector) {
37767 var _this = _super.call(this, destination) || this;
37768 _this.openings = openings;
37769 _this.closingSelector = closingSelector;
37770 _this.contexts = [];
37771 _this.add(_this.openSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(_this, openings, openings));
37772 return _this;
37773 }
37774 WindowToggleSubscriber.prototype._next = function (value) {
37775 var contexts = this.contexts;
37776 if (contexts) {
37777 var len = contexts.length;
37778 for (var i = 0; i < len; i++) {
37779 contexts[i].window.next(value);
37780 }
37781 }
37782 };
37783 WindowToggleSubscriber.prototype._error = function (err) {
37784 var contexts = this.contexts;
37785 this.contexts = null;
37786 if (contexts) {
37787 var len = contexts.length;
37788 var index = -1;
37789 while (++index < len) {
37790 var context_1 = contexts[index];
37791 context_1.window.error(err);
37792 context_1.subscription.unsubscribe();
37793 }
37794 }
37795 _super.prototype._error.call(this, err);
37796 };
37797 WindowToggleSubscriber.prototype._complete = function () {
37798 var contexts = this.contexts;
37799 this.contexts = null;
37800 if (contexts) {
37801 var len = contexts.length;
37802 var index = -1;
37803 while (++index < len) {
37804 var context_2 = contexts[index];
37805 context_2.window.complete();
37806 context_2.subscription.unsubscribe();
37807 }
37808 }
37809 _super.prototype._complete.call(this);
37810 };
37811 WindowToggleSubscriber.prototype._unsubscribe = function () {
37812 var contexts = this.contexts;
37813 this.contexts = null;
37814 if (contexts) {
37815 var len = contexts.length;
37816 var index = -1;
37817 while (++index < len) {
37818 var context_3 = contexts[index];
37819 context_3.window.unsubscribe();
37820 context_3.subscription.unsubscribe();
37821 }
37822 }
37823 };
37824 WindowToggleSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37825 if (outerValue === this.openings) {
37826 var closingNotifier = void 0;
37827 try {
37828 var closingSelector = this.closingSelector;
37829 closingNotifier = closingSelector(innerValue);
37830 }
37831 catch (e) {
37832 return this.error(e);
37833 }
37834 var window_1 = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37835 var subscription = new _Subscription__WEBPACK_IMPORTED_MODULE_2__["Subscription"]();
37836 var context_4 = { window: window_1, subscription: subscription };
37837 this.contexts.push(context_4);
37838 var innerSubscription = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_4__["subscribeToResult"])(this, closingNotifier, context_4);
37839 if (innerSubscription.closed) {
37840 this.closeWindow(this.contexts.length - 1);
37841 }
37842 else {
37843 innerSubscription.context = context_4;
37844 subscription.add(innerSubscription);
37845 }
37846 this.destination.next(window_1);
37847 }
37848 else {
37849 this.closeWindow(this.contexts.indexOf(outerValue));
37850 }
37851 };
37852 WindowToggleSubscriber.prototype.notifyError = function (err) {
37853 this.error(err);
37854 };
37855 WindowToggleSubscriber.prototype.notifyComplete = function (inner) {
37856 if (inner !== this.openSubscription) {
37857 this.closeWindow(this.contexts.indexOf(inner.context));
37858 }
37859 };
37860 WindowToggleSubscriber.prototype.closeWindow = function (index) {
37861 if (index === -1) {
37862 return;
37863 }
37864 var contexts = this.contexts;
37865 var context = contexts[index];
37866 var window = context.window, subscription = context.subscription;
37867 contexts.splice(index, 1);
37868 window.complete();
37869 subscription.unsubscribe();
37870 };
37871 return WindowToggleSubscriber;
37872}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_3__["OuterSubscriber"]));
37873//# sourceMappingURL=windowToggle.js.map
37874
37875
37876/***/ }),
37877/* 363 */
37878/***/ (function(module, __webpack_exports__, __webpack_require__) {
37879
37880"use strict";
37881__webpack_require__.r(__webpack_exports__);
37882/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "windowWhen", function() { return windowWhen; });
37883/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37884/* harmony import */ var _Subject__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(185);
37885/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(227);
37886/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(228);
37887/** PURE_IMPORTS_START tslib,_Subject,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37888
37889
37890
37891
37892function windowWhen(closingSelector) {
37893 return function windowWhenOperatorFunction(source) {
37894 return source.lift(new WindowOperator(closingSelector));
37895 };
37896}
37897var WindowOperator = /*@__PURE__*/ (function () {
37898 function WindowOperator(closingSelector) {
37899 this.closingSelector = closingSelector;
37900 }
37901 WindowOperator.prototype.call = function (subscriber, source) {
37902 return source.subscribe(new WindowSubscriber(subscriber, this.closingSelector));
37903 };
37904 return WindowOperator;
37905}());
37906var WindowSubscriber = /*@__PURE__*/ (function (_super) {
37907 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WindowSubscriber, _super);
37908 function WindowSubscriber(destination, closingSelector) {
37909 var _this = _super.call(this, destination) || this;
37910 _this.destination = destination;
37911 _this.closingSelector = closingSelector;
37912 _this.openWindow();
37913 return _this;
37914 }
37915 WindowSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
37916 this.openWindow(innerSub);
37917 };
37918 WindowSubscriber.prototype.notifyError = function (error, innerSub) {
37919 this._error(error);
37920 };
37921 WindowSubscriber.prototype.notifyComplete = function (innerSub) {
37922 this.openWindow(innerSub);
37923 };
37924 WindowSubscriber.prototype._next = function (value) {
37925 this.window.next(value);
37926 };
37927 WindowSubscriber.prototype._error = function (err) {
37928 this.window.error(err);
37929 this.destination.error(err);
37930 this.unsubscribeClosingNotification();
37931 };
37932 WindowSubscriber.prototype._complete = function () {
37933 this.window.complete();
37934 this.destination.complete();
37935 this.unsubscribeClosingNotification();
37936 };
37937 WindowSubscriber.prototype.unsubscribeClosingNotification = function () {
37938 if (this.closingNotification) {
37939 this.closingNotification.unsubscribe();
37940 }
37941 };
37942 WindowSubscriber.prototype.openWindow = function (innerSub) {
37943 if (innerSub === void 0) {
37944 innerSub = null;
37945 }
37946 if (innerSub) {
37947 this.remove(innerSub);
37948 innerSub.unsubscribe();
37949 }
37950 var prevWindow = this.window;
37951 if (prevWindow) {
37952 prevWindow.complete();
37953 }
37954 var window = this.window = new _Subject__WEBPACK_IMPORTED_MODULE_1__["Subject"]();
37955 this.destination.next(window);
37956 var closingNotifier;
37957 try {
37958 var closingSelector = this.closingSelector;
37959 closingNotifier = closingSelector();
37960 }
37961 catch (e) {
37962 this.destination.error(e);
37963 this.window.error(e);
37964 return;
37965 }
37966 this.add(this.closingNotification = Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_3__["subscribeToResult"])(this, closingNotifier));
37967 };
37968 return WindowSubscriber;
37969}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_2__["OuterSubscriber"]));
37970//# sourceMappingURL=windowWhen.js.map
37971
37972
37973/***/ }),
37974/* 364 */
37975/***/ (function(module, __webpack_exports__, __webpack_require__) {
37976
37977"use strict";
37978__webpack_require__.r(__webpack_exports__);
37979/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "withLatestFrom", function() { return withLatestFrom; });
37980/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(170);
37981/* harmony import */ var _OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(227);
37982/* harmony import */ var _util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(228);
37983/** PURE_IMPORTS_START tslib,_OuterSubscriber,_util_subscribeToResult PURE_IMPORTS_END */
37984
37985
37986
37987function withLatestFrom() {
37988 var args = [];
37989 for (var _i = 0; _i < arguments.length; _i++) {
37990 args[_i] = arguments[_i];
37991 }
37992 return function (source) {
37993 var project;
37994 if (typeof args[args.length - 1] === 'function') {
37995 project = args.pop();
37996 }
37997 var observables = args;
37998 return source.lift(new WithLatestFromOperator(observables, project));
37999 };
38000}
38001var WithLatestFromOperator = /*@__PURE__*/ (function () {
38002 function WithLatestFromOperator(observables, project) {
38003 this.observables = observables;
38004 this.project = project;
38005 }
38006 WithLatestFromOperator.prototype.call = function (subscriber, source) {
38007 return source.subscribe(new WithLatestFromSubscriber(subscriber, this.observables, this.project));
38008 };
38009 return WithLatestFromOperator;
38010}());
38011var WithLatestFromSubscriber = /*@__PURE__*/ (function (_super) {
38012 tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"](WithLatestFromSubscriber, _super);
38013 function WithLatestFromSubscriber(destination, observables, project) {
38014 var _this = _super.call(this, destination) || this;
38015 _this.observables = observables;
38016 _this.project = project;
38017 _this.toRespond = [];
38018 var len = observables.length;
38019 _this.values = new Array(len);
38020 for (var i = 0; i < len; i++) {
38021 _this.toRespond.push(i);
38022 }
38023 for (var i = 0; i < len; i++) {
38024 var observable = observables[i];
38025 _this.add(Object(_util_subscribeToResult__WEBPACK_IMPORTED_MODULE_2__["subscribeToResult"])(_this, observable, observable, i));
38026 }
38027 return _this;
38028 }
38029 WithLatestFromSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
38030 this.values[outerIndex] = innerValue;
38031 var toRespond = this.toRespond;
38032 if (toRespond.length > 0) {
38033 var found = toRespond.indexOf(outerIndex);
38034 if (found !== -1) {
38035 toRespond.splice(found, 1);
38036 }
38037 }
38038 };
38039 WithLatestFromSubscriber.prototype.notifyComplete = function () {
38040 };
38041 WithLatestFromSubscriber.prototype._next = function (value) {
38042 if (this.toRespond.length === 0) {
38043 var args = [value].concat(this.values);
38044 if (this.project) {
38045 this._tryProject(args);
38046 }
38047 else {
38048 this.destination.next(args);
38049 }
38050 }
38051 };
38052 WithLatestFromSubscriber.prototype._tryProject = function (args) {
38053 var result;
38054 try {
38055 result = this.project.apply(this, args);
38056 }
38057 catch (err) {
38058 this.destination.error(err);
38059 return;
38060 }
38061 this.destination.next(result);
38062 };
38063 return WithLatestFromSubscriber;
38064}(_OuterSubscriber__WEBPACK_IMPORTED_MODULE_1__["OuterSubscriber"]));
38065//# sourceMappingURL=withLatestFrom.js.map
38066
38067
38068/***/ }),
38069/* 365 */
38070/***/ (function(module, __webpack_exports__, __webpack_require__) {
38071
38072"use strict";
38073__webpack_require__.r(__webpack_exports__);
38074/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zip", function() { return zip; });
38075/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(267);
38076/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38077
38078function zip() {
38079 var observables = [];
38080 for (var _i = 0; _i < arguments.length; _i++) {
38081 observables[_i] = arguments[_i];
38082 }
38083 return function zipOperatorFunction(source) {
38084 return source.lift.call(_observable_zip__WEBPACK_IMPORTED_MODULE_0__["zip"].apply(void 0, [source].concat(observables)));
38085 };
38086}
38087//# sourceMappingURL=zip.js.map
38088
38089
38090/***/ }),
38091/* 366 */
38092/***/ (function(module, __webpack_exports__, __webpack_require__) {
38093
38094"use strict";
38095__webpack_require__.r(__webpack_exports__);
38096/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "zipAll", function() { return zipAll; });
38097/* harmony import */ var _observable_zip__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(267);
38098/** PURE_IMPORTS_START _observable_zip PURE_IMPORTS_END */
38099
38100function zipAll(project) {
38101 return function (source) { return source.lift(new _observable_zip__WEBPACK_IMPORTED_MODULE_0__["ZipOperator"](project)); };
38102}
38103//# sourceMappingURL=zipAll.js.map
38104
38105
38106/***/ }),
38107/* 367 */
38108/***/ (function(module, exports, __webpack_require__) {
38109
38110"use strict";
38111
38112var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
38113 function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
38114 return new (P || (P = Promise))(function (resolve, reject) {
38115 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
38116 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
38117 function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
38118 step((generator = generator.apply(thisArg, _arguments || [])).next());
38119 });
38120};
38121var __generator = (this && this.__generator) || function (thisArg, body) {
38122 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
38123 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
38124 function verb(n) { return function (v) { return step([n, v]); }; }
38125 function step(op) {
38126 if (f) throw new TypeError("Generator is already executing.");
38127 while (_) try {
38128 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;
38129 if (y = 0, t) op = [op[0] & 2, t.value];
38130 switch (op[0]) {
38131 case 0: case 1: t = op; break;
38132 case 4: _.label++; return { value: op[1], done: false };
38133 case 5: _.label++; y = op[1]; op = [0]; continue;
38134 case 7: op = _.ops.pop(); _.trys.pop(); continue;
38135 default:
38136 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38137 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
38138 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
38139 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
38140 if (t[2]) _.ops.pop();
38141 _.trys.pop(); continue;
38142 }
38143 op = body.call(thisArg, _);
38144 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
38145 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
38146 }
38147};
38148Object.defineProperty(exports, "__esModule", { value: true });
38149var vscode_languageserver_1 = __webpack_require__(2);
38150var patterns_1 = __webpack_require__(54);
38151var connection_1 = __webpack_require__(138);
38152var fixNegativeNum = function (num) {
38153 if (num < 0) {
38154 return 0;
38155 }
38156 return num;
38157};
38158function handleDiagnostic(textDoc, error) {
38159 return __awaiter(this, void 0, void 0, function () {
38160 var m, lines, line, col;
38161 return __generator(this, function (_a) {
38162 m = (error || "").match(patterns_1.errorLinePattern);
38163 if (m) {
38164 lines = textDoc.lineCount;
38165 line = fixNegativeNum(parseFloat(m[2]) - 1);
38166 col = fixNegativeNum(parseFloat(m[3]) - 1);
38167 return [2 /*return*/, connection_1.connection.sendDiagnostics({
38168 uri: textDoc.uri,
38169 diagnostics: [{
38170 source: "vimlsp",
38171 message: m[1],
38172 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)),
38173 severity: vscode_languageserver_1.DiagnosticSeverity.Error,
38174 }],
38175 })];
38176 }
38177 // clear diagnostics
38178 connection_1.connection.sendDiagnostics({
38179 uri: textDoc.uri,
38180 diagnostics: [],
38181 });
38182 return [2 /*return*/];
38183 });
38184 });
38185}
38186exports.handleDiagnostic = handleDiagnostic;
38187
38188
38189/***/ }),
38190/* 368 */
38191/***/ (function(module, exports, __webpack_require__) {
38192
38193"use strict";
38194
38195Object.defineProperty(exports, "__esModule", { value: true });
38196var vscode_languageserver_1 = __webpack_require__(2);
38197var workspaces_1 = __webpack_require__(148);
38198var documents_1 = __webpack_require__(56);
38199exports.selectionRangeProvider = function (params) {
38200 var selectRanges = [];
38201 var textDocument = params.textDocument, positions = params.positions;
38202 if (!positions || positions.length === 0) {
38203 return selectRanges;
38204 }
38205 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38206 var document = documents_1.documents.get(textDocument.uri);
38207 if (!buffer || !document) {
38208 return selectRanges;
38209 }
38210 var vimRanges = buffer.getRanges();
38211 if (vimRanges.length === 0) {
38212 return selectRanges;
38213 }
38214 var range = vscode_languageserver_1.Range.create(positions[0], positions[0]);
38215 if (positions.length > 1) {
38216 range = vscode_languageserver_1.Range.create(positions[0], positions[positions.length - 1]);
38217 }
38218 var ranges = [];
38219 vimRanges.forEach(function (vimRange) {
38220 var line = document.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.endLine - 1, 0), vscode_languageserver_1.Position.create(vimRange.endLine, 0)));
38221 var newRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.startLine - 1, vimRange.startCol - 1), vscode_languageserver_1.Position.create(vimRange.endLine - 1, vimRange.endCol - 1 + line.slice(vimRange.endCol - 1).split(' ')[0].length));
38222 if (range.start.line >= newRange.start.line && range.end.line <= newRange.end.line) {
38223 if (ranges.length === 0) {
38224 ranges.push(newRange);
38225 }
38226 else {
38227 var i = 0;
38228 for (var len = ranges.length; i < len; i++) {
38229 if (ranges[i].start.line <= newRange.start.line && ranges[i].end.line >= newRange.end.line) {
38230 ranges.splice(i, 0, newRange);
38231 break;
38232 }
38233 }
38234 if (i === ranges.length) {
38235 ranges.push(newRange);
38236 }
38237 }
38238 }
38239 });
38240 if (ranges.length) {
38241 if (ranges.length > 1) {
38242 ranges = ranges.filter(function (newRange) {
38243 return range.start.line !== newRange.start.line || range.end.line !== newRange.end.line;
38244 });
38245 }
38246 selectRanges.push(ranges.reverse().reduce(function (pre, cur, idx) {
38247 if (idx === 0) {
38248 return pre;
38249 }
38250 return {
38251 range: cur,
38252 parent: pre
38253 };
38254 }, { range: ranges[0] }));
38255 }
38256 return selectRanges;
38257};
38258
38259
38260/***/ }),
38261/* 369 */
38262/***/ (function(module, exports, __webpack_require__) {
38263
38264"use strict";
38265
38266Object.defineProperty(exports, "__esModule", { value: true });
38267var vscode_languageserver_1 = __webpack_require__(2);
38268var workspaces_1 = __webpack_require__(148);
38269var documents_1 = __webpack_require__(56);
38270exports.documentSymbolProvider = function (params) {
38271 var documentSymbols = [];
38272 var textDocument = params.textDocument;
38273 var buffer = workspaces_1.workspace.getBufferByUri(textDocument.uri);
38274 var document = documents_1.documents.get(textDocument.uri);
38275 if (!buffer || !document) {
38276 return documentSymbols;
38277 }
38278 var globalFunctions = buffer.getGlobalFunctions();
38279 var scriptFunctions = buffer.getScriptFunctions();
38280 var globalVariables = buffer.getGlobalIdentifiers();
38281 var localVariables = buffer.getLocalIdentifiers();
38282 var functions = Object.values(globalFunctions).concat(Object.values(scriptFunctions)).reduce(function (pre, cur) {
38283 return pre.concat(cur);
38284 }, []);
38285 var variables = Object.values(globalVariables).concat(Object.values(localVariables)).reduce(function (pre, cur) {
38286 return pre.concat(cur);
38287 }, []);
38288 var sortFunctions = [];
38289 functions.forEach(function (func) {
38290 if (sortFunctions.length === 0) {
38291 return sortFunctions.push(func);
38292 }
38293 var i = 0;
38294 for (var len = sortFunctions.length; i < len; i += 1) {
38295 var sf = sortFunctions[i];
38296 if (func.range.endLine < sf.range.endLine) {
38297 sortFunctions.splice(i, 0, func);
38298 break;
38299 }
38300 }
38301 if (i === sortFunctions.length) {
38302 sortFunctions.push(func);
38303 }
38304 });
38305 return sortFunctions
38306 .map(function (func) {
38307 var vimRange = func.range;
38308 var line = document.getText(vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.endLine - 1, 0), vscode_languageserver_1.Position.create(vimRange.endLine, 0)));
38309 var range = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(vimRange.startLine - 1, vimRange.startCol - 1), vscode_languageserver_1.Position.create(vimRange.endLine - 1, vimRange.endCol - 1 + line.slice(vimRange.endCol - 1).split(' ')[0].length));
38310 var ds = {
38311 name: func.name,
38312 kind: vscode_languageserver_1.SymbolKind.Function,
38313 range: range,
38314 selectionRange: range,
38315 children: []
38316 };
38317 variables = variables.filter(function (v) {
38318 if (v.startLine >= vimRange.startLine && v.startLine <= vimRange.endLine) {
38319 var vRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(v.startLine - 1, v.startCol - 1), vscode_languageserver_1.Position.create(v.startLine, v.startCol - 1 + v.name.length));
38320 ds.children.push({
38321 name: v.name,
38322 kind: vscode_languageserver_1.SymbolKind.Variable,
38323 range: vRange,
38324 selectionRange: vRange
38325 });
38326 return false;
38327 }
38328 return true;
38329 });
38330 return ds;
38331 })
38332 .reduce(function (res, cur) {
38333 if (res.length === 0) {
38334 res.push(cur);
38335 }
38336 else {
38337 res = res.filter(function (item) {
38338 if (item.range.start.line >= cur.range.start.line && item.range.end.line <= cur.range.end.line) {
38339 cur.children.push(item);
38340 return false;
38341 }
38342 return true;
38343 });
38344 res.push(cur);
38345 }
38346 return res;
38347 }, [])
38348 .concat(variables.map(function (v) {
38349 var vRange = vscode_languageserver_1.Range.create(vscode_languageserver_1.Position.create(v.startLine - 1, v.startCol - 1), vscode_languageserver_1.Position.create(v.startLine, v.startCol - 1 + v.name.length));
38350 return {
38351 name: v.name,
38352 kind: vscode_languageserver_1.SymbolKind.Variable,
38353 range: vRange,
38354 selectionRange: vRange
38355 };
38356 }));
38357};
38358
38359
38360/***/ })
38361/******/ ])));
\No newline at end of file